@cadriciel/ui 0.4.0 → 0.5.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.
@@ -1647,7 +1647,7 @@ class CadColorpickerComponent extends CadValueAccessor {
1647
1647
  </div>
1648
1648
  }
1649
1649
  </ng-template>
1650
- `, isInline: true, styles: [":host{display:inline-flex;width:100%;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg)}:host(.is-inline){width:auto}.cp-trigger{display:flex;align-items:center;gap:8px;width:100%;height:var(--cad-control-h);padding:0 8px;box-sizing:border-box;background:var(--cad-input-bg);border:1px solid var(--cad-input-border);border-radius:var(--cad-radius);cursor:pointer;color:inherit;font:inherit;text-align:left;transition:border-color var(--cad-dur),box-shadow var(--cad-dur)}:host(.size-sm) .cp-trigger{height:var(--cad-control-h-sm);font-size:var(--cad-font-size-sm)}:host(.size-lg) .cp-trigger{height:var(--cad-control-h-lg)}.cp-trigger:focus-visible,:host(.is-open) .cp-trigger{border-color:var(--cad-accent);box-shadow:0 0 0 3px var(--cad-ring);outline:none}:host(.is-invalid) .cp-trigger{border-color:var(--cad-danger)}:host(.is-disabled) .cp-trigger{opacity:.6;cursor:not-allowed;background:var(--cad-bg-subtle)}.cp-swatch{position:relative;width:22px;height:22px;border-radius:6px;border:1px solid var(--cad-border-strong);flex:none;overflow:hidden;background-image:repeating-conic-gradient(var(--cad-elevated) 0 25%,transparent 0 50%);background-size:8px 8px}.cp-swatch i{position:absolute;inset:0;background:inherit}.cp-val{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;font-family:var(--cad-font-mono);font-size:var(--cad-font-size-sm)}.cp-val.is-ph{color:var(--cad-fg-muted);font-family:var(--cad-font)}.cp-clear{display:grid;place-items:center;width:18px;height:18px;border-radius:4px;color:var(--cad-fg-muted)}.cp-clear:hover{background:var(--cad-hover);color:var(--cad-fg)}.cp-chev{color:var(--cad-fg-muted);transition:transform var(--cad-dur)}:host(.is-open) .cp-chev{transform:rotate(180deg)}.cp-panel{width:260px;padding:10px;box-sizing:border-box;background:var(--cad-overlay);border:1px solid var(--cad-border);border-radius:10px;box-shadow:var(--cad-shadow-lg);display:grid;gap:10px}.cp-panel.is-inline{box-shadow:none}.cp-sv{position:relative;height:150px;border-radius:8px;cursor:crosshair;touch-action:none;background-image:linear-gradient(to top,#000,transparent),linear-gradient(to right,#fff,transparent)}.cp-sv:focus-visible{outline:2px solid var(--cad-ring);outline-offset:2px}.cp-sv__thumb{position:absolute;width:14px;height:14px;margin:-7px 0 0 -7px;border-radius:50%;border:2px solid #fff;box-shadow:0 0 0 1px #0006;pointer-events:none}.cp-bars{display:flex;gap:8px;align-items:center}.cp-eye{all:unset;display:grid;place-items:center;width:28px;height:28px;border-radius:6px;border:1px solid var(--cad-border);color:var(--cad-fg-secondary);cursor:pointer}.cp-eye:hover{background:var(--cad-hover)}.cp-sliders{flex:1;display:grid;gap:8px}.cp-bar{position:relative;height:12px;border-radius:6px;cursor:pointer;touch-action:none}.cp-bar:focus-visible{outline:2px solid var(--cad-ring);outline-offset:2px}.cp-bar--hue{background:linear-gradient(to right,red,#ff0,#0f0,#0ff,#00f,#f0f,red)}.cp-bar--alpha{background-image:repeating-conic-gradient(var(--cad-elevated) 0 25%,transparent 0 50%);background-size:8px 8px}.cp-bar__grad{position:absolute;inset:0;border-radius:6px}.cp-bar__thumb{position:absolute;top:50%;width:16px;height:16px;margin:-8px 0 0 -8px;border-radius:50%;border:2px solid #fff;box-shadow:0 0 0 1px #00000059;pointer-events:none}.cp-fields{display:grid;grid-template-columns:2fr repeat(4,1fr);gap:6px}.cp-fields label{display:grid;gap:2px;font:600 9.5px var(--cad-font-mono);color:var(--cad-fg-muted);text-transform:uppercase}.cp-fields input{width:100%;box-sizing:border-box;height:26px;padding:0 6px;border:1px solid var(--cad-input-border);border-radius:5px;background:var(--cad-input-bg);color:var(--cad-fg);font:11.5px var(--cad-font-mono);outline:none}.cp-fields input:focus{border-color:var(--cad-accent);box-shadow:0 0 0 2px var(--cad-ring)}.cp-fields input[type=number]{-moz-appearance:textfield}.cp-fields input::-webkit-outer-spin-button,.cp-fields input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.cp-presets{display:grid;grid-template-columns:repeat(8,1fr);gap:6px}.cp-presets button{aspect-ratio:1;border-radius:6px;border:1px solid var(--cad-border-strong);cursor:pointer;padding:0}.cp-presets button:hover{transform:scale(1.1)}.cp-presets button.is-on{outline:2px solid var(--cad-accent);outline-offset:1px}\n"], dependencies: [{ kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i1.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation", "cdkConnectedOverlayUsePopover", "cdkConnectedOverlayMatchWidth", "cdkConnectedOverlay"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i1.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: CadIconComponent, selector: "cad-icon", inputs: ["name", "size", "strokeWidth", "label", "title", "spin", "filled", "flip", "rotate"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1650
+ `, isInline: true, styles: [":host{display:inline-flex;width:100%;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg)}:host(.is-inline){width:auto}.cp-trigger{display:flex;align-items:center;gap:8px;width:100%;height:var(--cad-control-h);padding:0 8px;box-sizing:border-box;background:var(--cad-input-bg);border:1px solid var(--cad-input-border);border-radius:var(--cad-radius);cursor:pointer;color:inherit;font:inherit;text-align:left;transition:border-color var(--cad-dur),box-shadow var(--cad-dur)}:host(.size-sm) .cp-trigger{height:var(--cad-control-h-sm);font-size:var(--cad-font-size-sm)}:host(.size-lg) .cp-trigger{height:var(--cad-control-h-lg)}.cp-trigger:focus-visible,:host(.is-open) .cp-trigger{border-color:var(--cad-accent);box-shadow:0 0 0 3px var(--cad-ring);outline:none}:host(.is-invalid) .cp-trigger{border-color:var(--cad-danger)}:host(.is-disabled) .cp-trigger{opacity:.6;cursor:not-allowed;background:var(--cad-bg-subtle)}.cp-swatch{position:relative;width:22px;height:22px;border-radius:6px;border:1px solid var(--cad-border-strong);flex:none;overflow:hidden;background-image:repeating-conic-gradient(var(--cad-elevated) 0 25%,transparent 0 50%);background-size:8px 8px}.cp-swatch i{position:absolute;inset:0;background:inherit}.cp-val{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;font-family:var(--cad-font-mono);font-size:var(--cad-font-size-sm)}.cp-val.is-ph{color:var(--cad-fg-muted);font-family:var(--cad-font)}.cp-clear{display:grid;place-items:center;width:18px;height:18px;border-radius:4px;color:var(--cad-fg-muted)}.cp-clear:hover{background:var(--cad-hover);color:var(--cad-fg)}.cp-chev{color:var(--cad-fg-muted);transition:transform var(--cad-dur)}:host(.is-open) .cp-chev{transform:rotate(180deg)}.cp-panel{width:260px;padding:10px;box-sizing:border-box;background:var(--cad-overlay);--cad-hover: var(--cad-overlay-hover);border:1px solid var(--cad-border);border-radius:10px;box-shadow:var(--cad-shadow-lg);display:grid;gap:10px}.cp-panel.is-inline{box-shadow:none}.cp-sv{position:relative;height:150px;border-radius:8px;cursor:crosshair;touch-action:none;background-image:linear-gradient(to top,#000,transparent),linear-gradient(to right,#fff,transparent)}.cp-sv:focus-visible{outline:2px solid var(--cad-ring);outline-offset:2px}.cp-sv__thumb{position:absolute;width:14px;height:14px;margin:-7px 0 0 -7px;border-radius:50%;border:2px solid #fff;box-shadow:0 0 0 1px #0006;pointer-events:none}.cp-bars{display:flex;gap:8px;align-items:center}.cp-eye{all:unset;display:grid;place-items:center;width:28px;height:28px;border-radius:6px;border:1px solid var(--cad-border);color:var(--cad-fg-secondary);cursor:pointer}.cp-eye:hover{background:var(--cad-hover)}.cp-sliders{flex:1;display:grid;gap:8px}.cp-bar{position:relative;height:12px;border-radius:6px;cursor:pointer;touch-action:none}.cp-bar:focus-visible{outline:2px solid var(--cad-ring);outline-offset:2px}.cp-bar--hue{background:linear-gradient(to right,red,#ff0,#0f0,#0ff,#00f,#f0f,red)}.cp-bar--alpha{background-image:repeating-conic-gradient(var(--cad-elevated) 0 25%,transparent 0 50%);background-size:8px 8px}.cp-bar__grad{position:absolute;inset:0;border-radius:6px}.cp-bar__thumb{position:absolute;top:50%;width:16px;height:16px;margin:-8px 0 0 -8px;border-radius:50%;border:2px solid #fff;box-shadow:0 0 0 1px #00000059;pointer-events:none}.cp-fields{display:grid;grid-template-columns:2fr repeat(4,1fr);gap:6px}.cp-fields label{display:grid;gap:2px;font:600 9.5px var(--cad-font-mono);color:var(--cad-fg-muted);text-transform:uppercase}.cp-fields input{width:100%;box-sizing:border-box;height:26px;padding:0 6px;border:1px solid var(--cad-input-border);border-radius:5px;background:var(--cad-input-bg);color:var(--cad-fg);font:11.5px var(--cad-font-mono);outline:none}.cp-fields input:focus{border-color:var(--cad-accent);box-shadow:0 0 0 2px var(--cad-ring)}.cp-fields input[type=number]{-moz-appearance:textfield}.cp-fields input::-webkit-outer-spin-button,.cp-fields input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.cp-presets{display:grid;grid-template-columns:repeat(8,1fr);gap:6px}.cp-presets button{aspect-ratio:1;border-radius:6px;border:1px solid var(--cad-border-strong);cursor:pointer;padding:0}.cp-presets button:hover{transform:scale(1.1)}.cp-presets button.is-on{outline:2px solid var(--cad-accent);outline-offset:1px}\n"], dependencies: [{ kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i1.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation", "cdkConnectedOverlayUsePopover", "cdkConnectedOverlayMatchWidth", "cdkConnectedOverlay"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i1.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: CadIconComponent, selector: "cad-icon", inputs: ["name", "size", "strokeWidth", "label", "title", "spin", "filled", "flip", "rotate"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1651
1651
  }
1652
1652
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: CadColorpickerComponent, decorators: [{
1653
1653
  type: Component,
@@ -1687,7 +1687,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImpo
1687
1687
  </div>
1688
1688
  }
1689
1689
  </ng-template>
1690
- `, imports: [OverlayModule, CadIconComponent, NgTemplateOutlet], styles: [":host{display:inline-flex;width:100%;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg)}:host(.is-inline){width:auto}.cp-trigger{display:flex;align-items:center;gap:8px;width:100%;height:var(--cad-control-h);padding:0 8px;box-sizing:border-box;background:var(--cad-input-bg);border:1px solid var(--cad-input-border);border-radius:var(--cad-radius);cursor:pointer;color:inherit;font:inherit;text-align:left;transition:border-color var(--cad-dur),box-shadow var(--cad-dur)}:host(.size-sm) .cp-trigger{height:var(--cad-control-h-sm);font-size:var(--cad-font-size-sm)}:host(.size-lg) .cp-trigger{height:var(--cad-control-h-lg)}.cp-trigger:focus-visible,:host(.is-open) .cp-trigger{border-color:var(--cad-accent);box-shadow:0 0 0 3px var(--cad-ring);outline:none}:host(.is-invalid) .cp-trigger{border-color:var(--cad-danger)}:host(.is-disabled) .cp-trigger{opacity:.6;cursor:not-allowed;background:var(--cad-bg-subtle)}.cp-swatch{position:relative;width:22px;height:22px;border-radius:6px;border:1px solid var(--cad-border-strong);flex:none;overflow:hidden;background-image:repeating-conic-gradient(var(--cad-elevated) 0 25%,transparent 0 50%);background-size:8px 8px}.cp-swatch i{position:absolute;inset:0;background:inherit}.cp-val{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;font-family:var(--cad-font-mono);font-size:var(--cad-font-size-sm)}.cp-val.is-ph{color:var(--cad-fg-muted);font-family:var(--cad-font)}.cp-clear{display:grid;place-items:center;width:18px;height:18px;border-radius:4px;color:var(--cad-fg-muted)}.cp-clear:hover{background:var(--cad-hover);color:var(--cad-fg)}.cp-chev{color:var(--cad-fg-muted);transition:transform var(--cad-dur)}:host(.is-open) .cp-chev{transform:rotate(180deg)}.cp-panel{width:260px;padding:10px;box-sizing:border-box;background:var(--cad-overlay);border:1px solid var(--cad-border);border-radius:10px;box-shadow:var(--cad-shadow-lg);display:grid;gap:10px}.cp-panel.is-inline{box-shadow:none}.cp-sv{position:relative;height:150px;border-radius:8px;cursor:crosshair;touch-action:none;background-image:linear-gradient(to top,#000,transparent),linear-gradient(to right,#fff,transparent)}.cp-sv:focus-visible{outline:2px solid var(--cad-ring);outline-offset:2px}.cp-sv__thumb{position:absolute;width:14px;height:14px;margin:-7px 0 0 -7px;border-radius:50%;border:2px solid #fff;box-shadow:0 0 0 1px #0006;pointer-events:none}.cp-bars{display:flex;gap:8px;align-items:center}.cp-eye{all:unset;display:grid;place-items:center;width:28px;height:28px;border-radius:6px;border:1px solid var(--cad-border);color:var(--cad-fg-secondary);cursor:pointer}.cp-eye:hover{background:var(--cad-hover)}.cp-sliders{flex:1;display:grid;gap:8px}.cp-bar{position:relative;height:12px;border-radius:6px;cursor:pointer;touch-action:none}.cp-bar:focus-visible{outline:2px solid var(--cad-ring);outline-offset:2px}.cp-bar--hue{background:linear-gradient(to right,red,#ff0,#0f0,#0ff,#00f,#f0f,red)}.cp-bar--alpha{background-image:repeating-conic-gradient(var(--cad-elevated) 0 25%,transparent 0 50%);background-size:8px 8px}.cp-bar__grad{position:absolute;inset:0;border-radius:6px}.cp-bar__thumb{position:absolute;top:50%;width:16px;height:16px;margin:-8px 0 0 -8px;border-radius:50%;border:2px solid #fff;box-shadow:0 0 0 1px #00000059;pointer-events:none}.cp-fields{display:grid;grid-template-columns:2fr repeat(4,1fr);gap:6px}.cp-fields label{display:grid;gap:2px;font:600 9.5px var(--cad-font-mono);color:var(--cad-fg-muted);text-transform:uppercase}.cp-fields input{width:100%;box-sizing:border-box;height:26px;padding:0 6px;border:1px solid var(--cad-input-border);border-radius:5px;background:var(--cad-input-bg);color:var(--cad-fg);font:11.5px var(--cad-font-mono);outline:none}.cp-fields input:focus{border-color:var(--cad-accent);box-shadow:0 0 0 2px var(--cad-ring)}.cp-fields input[type=number]{-moz-appearance:textfield}.cp-fields input::-webkit-outer-spin-button,.cp-fields input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.cp-presets{display:grid;grid-template-columns:repeat(8,1fr);gap:6px}.cp-presets button{aspect-ratio:1;border-radius:6px;border:1px solid var(--cad-border-strong);cursor:pointer;padding:0}.cp-presets button:hover{transform:scale(1.1)}.cp-presets button.is-on{outline:2px solid var(--cad-accent);outline-offset:1px}\n"] }]
1690
+ `, imports: [OverlayModule, CadIconComponent, NgTemplateOutlet], styles: [":host{display:inline-flex;width:100%;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg)}:host(.is-inline){width:auto}.cp-trigger{display:flex;align-items:center;gap:8px;width:100%;height:var(--cad-control-h);padding:0 8px;box-sizing:border-box;background:var(--cad-input-bg);border:1px solid var(--cad-input-border);border-radius:var(--cad-radius);cursor:pointer;color:inherit;font:inherit;text-align:left;transition:border-color var(--cad-dur),box-shadow var(--cad-dur)}:host(.size-sm) .cp-trigger{height:var(--cad-control-h-sm);font-size:var(--cad-font-size-sm)}:host(.size-lg) .cp-trigger{height:var(--cad-control-h-lg)}.cp-trigger:focus-visible,:host(.is-open) .cp-trigger{border-color:var(--cad-accent);box-shadow:0 0 0 3px var(--cad-ring);outline:none}:host(.is-invalid) .cp-trigger{border-color:var(--cad-danger)}:host(.is-disabled) .cp-trigger{opacity:.6;cursor:not-allowed;background:var(--cad-bg-subtle)}.cp-swatch{position:relative;width:22px;height:22px;border-radius:6px;border:1px solid var(--cad-border-strong);flex:none;overflow:hidden;background-image:repeating-conic-gradient(var(--cad-elevated) 0 25%,transparent 0 50%);background-size:8px 8px}.cp-swatch i{position:absolute;inset:0;background:inherit}.cp-val{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;font-family:var(--cad-font-mono);font-size:var(--cad-font-size-sm)}.cp-val.is-ph{color:var(--cad-fg-muted);font-family:var(--cad-font)}.cp-clear{display:grid;place-items:center;width:18px;height:18px;border-radius:4px;color:var(--cad-fg-muted)}.cp-clear:hover{background:var(--cad-hover);color:var(--cad-fg)}.cp-chev{color:var(--cad-fg-muted);transition:transform var(--cad-dur)}:host(.is-open) .cp-chev{transform:rotate(180deg)}.cp-panel{width:260px;padding:10px;box-sizing:border-box;background:var(--cad-overlay);--cad-hover: var(--cad-overlay-hover);border:1px solid var(--cad-border);border-radius:10px;box-shadow:var(--cad-shadow-lg);display:grid;gap:10px}.cp-panel.is-inline{box-shadow:none}.cp-sv{position:relative;height:150px;border-radius:8px;cursor:crosshair;touch-action:none;background-image:linear-gradient(to top,#000,transparent),linear-gradient(to right,#fff,transparent)}.cp-sv:focus-visible{outline:2px solid var(--cad-ring);outline-offset:2px}.cp-sv__thumb{position:absolute;width:14px;height:14px;margin:-7px 0 0 -7px;border-radius:50%;border:2px solid #fff;box-shadow:0 0 0 1px #0006;pointer-events:none}.cp-bars{display:flex;gap:8px;align-items:center}.cp-eye{all:unset;display:grid;place-items:center;width:28px;height:28px;border-radius:6px;border:1px solid var(--cad-border);color:var(--cad-fg-secondary);cursor:pointer}.cp-eye:hover{background:var(--cad-hover)}.cp-sliders{flex:1;display:grid;gap:8px}.cp-bar{position:relative;height:12px;border-radius:6px;cursor:pointer;touch-action:none}.cp-bar:focus-visible{outline:2px solid var(--cad-ring);outline-offset:2px}.cp-bar--hue{background:linear-gradient(to right,red,#ff0,#0f0,#0ff,#00f,#f0f,red)}.cp-bar--alpha{background-image:repeating-conic-gradient(var(--cad-elevated) 0 25%,transparent 0 50%);background-size:8px 8px}.cp-bar__grad{position:absolute;inset:0;border-radius:6px}.cp-bar__thumb{position:absolute;top:50%;width:16px;height:16px;margin:-8px 0 0 -8px;border-radius:50%;border:2px solid #fff;box-shadow:0 0 0 1px #00000059;pointer-events:none}.cp-fields{display:grid;grid-template-columns:2fr repeat(4,1fr);gap:6px}.cp-fields label{display:grid;gap:2px;font:600 9.5px var(--cad-font-mono);color:var(--cad-fg-muted);text-transform:uppercase}.cp-fields input{width:100%;box-sizing:border-box;height:26px;padding:0 6px;border:1px solid var(--cad-input-border);border-radius:5px;background:var(--cad-input-bg);color:var(--cad-fg);font:11.5px var(--cad-font-mono);outline:none}.cp-fields input:focus{border-color:var(--cad-accent);box-shadow:0 0 0 2px var(--cad-ring)}.cp-fields input[type=number]{-moz-appearance:textfield}.cp-fields input::-webkit-outer-spin-button,.cp-fields input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.cp-presets{display:grid;grid-template-columns:repeat(8,1fr);gap:6px}.cp-presets button{aspect-ratio:1;border-radius:6px;border:1px solid var(--cad-border-strong);cursor:pointer;padding:0}.cp-presets button:hover{transform:scale(1.1)}.cp-presets button.is-on{outline:2px solid var(--cad-accent);outline-offset:1px}\n"] }]
1691
1691
  }], propDecorators: { format: [{ type: i0.Input, args: [{ isSignal: true, alias: "format", required: false }] }], alpha: [{ type: i0.Input, args: [{ isSignal: true, alias: "alpha", required: false }] }], inline: [{ type: i0.Input, args: [{ isSignal: true, alias: "inline", required: false }] }], presets: [{ type: i0.Input, args: [{ isSignal: true, alias: "presets", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], clearable: [{ type: i0.Input, args: [{ isSignal: true, alias: "clearable", required: false }] }], invalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], changed: [{ type: i0.Output, args: ["changed"] }], opened: [{ type: i0.Output, args: ["opened"] }], closed: [{ type: i0.Output, args: ["closed"] }], trigger: [{ type: i0.ViewChild, args: ['trigger', { isSignal: true }] }], svEl: [{ type: i0.ViewChild, args: ['sv', { isSignal: true }] }], hueEl: [{ type: i0.ViewChild, args: ['hue', { isSignal: true }] }], alpEl: [{ type: i0.ViewChild, args: ['alp', { isSignal: true }] }] } });
1692
1692
 
1693
1693
  /**
@@ -2542,7 +2542,7 @@ class CadSheetContainerComponent {
2542
2542
  <footer class="cad-sheet__footer"><ng-container *ngTemplateOutlet="config().footer!" /></footer>
2543
2543
  }
2544
2544
  </div>
2545
- `, isInline: true, styles: [".cad-overlay-pane.cad-sheet-pane{width:100%;max-width:100%}.cad-sheet-container{display:flex;flex-direction:column;width:100%;max-height:92dvh;outline:none;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg);transform:translateY(100%);transition:transform .2s var(--cad-ease);will-change:transform}.cad-sheet-container.is-open{transform:none}.cad-sheet-container.is-dragging{transition:none}.cad-sheet-container.h-half{height:50dvh}.cad-sheet-container.h-full{height:92dvh}.cad-sheet-container.h-css{height:var(--cad-sheet-h)}.cad-sheet{display:flex;flex-direction:column;flex:1;min-height:0;background:var(--cad-overlay);border:1px solid var(--cad-border);border-bottom:0;border-radius:16px 16px 0 0;box-shadow:0 -8px 32px #0000002e;overflow:hidden;padding-bottom:env(safe-area-inset-bottom)}.cad-sheet__grip{display:flex;justify-content:center;padding:8px 0 4px;cursor:grab;touch-action:none;flex:none}.cad-sheet__handle{width:36px;height:4px;border-radius:2px;background:var(--cad-border-strong)}.cad-sheet__header{display:flex;align-items:center;gap:8px;padding:6px 16px 10px;flex:none;touch-action:none}.cad-sheet__grip+.cad-sheet__header{padding-top:2px}.cad-sheet__title{margin:0;font-size:14.5px;font-weight:600;color:var(--cad-fg);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cad-sheet__close{display:grid;place-items:center;width:32px;height:32px;border:0;border-radius:var(--cad-radius-sm);background:transparent;color:var(--cad-fg-muted);cursor:pointer;padding:0;margin-right:-6px}.cad-sheet__close:hover{background:var(--cad-hover);color:var(--cad-fg)}.cad-sheet__close:focus-visible{outline:2px solid var(--cad-ring);outline-offset:1px}.cad-sheet__body{flex:1;min-height:0;overflow:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}.cad-sheet__footer{display:flex;justify-content:flex-end;align-items:center;gap:8px;padding:10px 16px;border-top:1px solid var(--cad-border);background:var(--cad-bg-subtle);flex:none}.cad-sheet-container .cad-optlist{max-height:none!important;padding:6px 8px}.cad-sheet-container .cad-optlist__opt{min-height:44px;padding:10px 12px;box-sizing:border-box;font-size:var(--cad-font-size-lg)}.cad-sheet-container .cad-optlist__group{padding:12px 12px 4px}.cad-sheet-container .cad-select__panel,.cad-sheet-container .cad-multiselect__panel{border:0;box-shadow:none;border-radius:0;min-width:100%!important;background:transparent}.cad-sheet-container .cad-select__search,.cad-sheet-container .cad-multiselect__head{padding:8px 16px}.cad-sheet-container .cad-select__search input,.cad-sheet-container .cad-multiselect__head input{font-size:var(--cad-font-size-lg);height:32px}.cad-sheet-container .cad-dp__panel{border:0;box-shadow:none;border-radius:0;width:100%;box-sizing:border-box;padding:4px 12px 12px;background:transparent}.cad-sheet-container .cad-dp__grid{width:100%}.cad-sheet-container .cad-dp__day{width:40px;height:40px;font-size:var(--cad-font-size)}.cad-sheet-container .cad-dp__row{justify-content:space-between}.cad-sheet-container .cad-menu{border:0;box-shadow:none;border-radius:0;min-width:100%!important;padding:6px 8px}.cad-sheet-container .cad-menu__item{min-height:44px;padding:10px 12px;box-sizing:border-box;font-size:var(--cad-font-size-lg);white-space:normal}.cad-sheet-container .cad-menu--sub{position:static;border:0;box-shadow:none;padding:0 0 4px 22px;background:transparent}.cad-sheet-container .cad-popover{border:0;box-shadow:none;border-radius:0;animation:none;padding:12px 16px;width:auto!important;min-width:0!important}.cad-sheet-container .cad-popover__arrow{display:none}@media(prefers-reduced-motion:reduce){.cad-sheet-container{transition:opacity .12s;transform:none;opacity:0}.cad-sheet-container.is-open{opacity:1}}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i1$1.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i2.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "component", type: CadIconComponent, selector: "cad-icon", inputs: ["name", "size", "strokeWidth", "label", "title", "spin", "filled", "flip", "rotate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
2545
+ `, isInline: true, styles: [".cad-overlay-pane.cad-sheet-pane{width:100%;max-width:100%}.cad-sheet-container{display:flex;flex-direction:column;width:100%;max-height:92dvh;outline:none;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg);transform:translateY(100%);transition:transform .2s var(--cad-ease);will-change:transform}.cad-sheet-container.is-open{transform:none}.cad-sheet-container.is-dragging{transition:none}.cad-sheet-container.h-half{height:50dvh}.cad-sheet-container.h-full{height:92dvh}.cad-sheet-container.h-css{height:var(--cad-sheet-h)}.cad-sheet{display:flex;flex-direction:column;flex:1;min-height:0;background:var(--cad-overlay);--cad-hover: var(--cad-overlay-hover);border:1px solid var(--cad-border);border-bottom:0;border-radius:16px 16px 0 0;box-shadow:0 -8px 32px #0000002e;overflow:hidden;padding-bottom:env(safe-area-inset-bottom)}.cad-sheet__grip{display:flex;justify-content:center;padding:8px 0 4px;cursor:grab;touch-action:none;flex:none}.cad-sheet__handle{width:36px;height:4px;border-radius:2px;background:var(--cad-border-strong)}.cad-sheet__header{display:flex;align-items:center;gap:8px;padding:6px 16px 10px;flex:none;touch-action:none}.cad-sheet__grip+.cad-sheet__header{padding-top:2px}.cad-sheet__title{margin:0;font-size:14.5px;font-weight:600;color:var(--cad-fg);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cad-sheet__close{display:grid;place-items:center;width:32px;height:32px;border:0;border-radius:var(--cad-radius-sm);background:transparent;color:var(--cad-fg-muted);cursor:pointer;padding:0;margin-right:-6px}.cad-sheet__close:hover{background:var(--cad-hover);color:var(--cad-fg)}.cad-sheet__close:focus-visible{outline:2px solid var(--cad-ring);outline-offset:1px}.cad-sheet__body{flex:1;min-height:0;overflow:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}.cad-sheet__footer{display:flex;justify-content:flex-end;align-items:center;gap:8px;padding:10px 16px;border-top:1px solid var(--cad-border);background:var(--cad-bg-subtle);flex:none}.cad-sheet-container .cad-optlist{max-height:none!important;padding:6px 8px}.cad-sheet-container .cad-optlist__opt{min-height:44px;padding:10px 12px;box-sizing:border-box;font-size:var(--cad-font-size-lg)}.cad-sheet-container .cad-optlist__group{padding:12px 12px 4px}.cad-sheet-container .cad-select__panel,.cad-sheet-container .cad-multiselect__panel{border:0;box-shadow:none;border-radius:0;min-width:100%!important;background:transparent}.cad-sheet-container .cad-select__search,.cad-sheet-container .cad-multiselect__head{padding:8px 16px}.cad-sheet-container .cad-select__search input,.cad-sheet-container .cad-multiselect__head input{font-size:var(--cad-font-size-lg);height:32px}.cad-sheet-container .cad-dp__panel{border:0;box-shadow:none;border-radius:0;width:100%;box-sizing:border-box;padding:4px 12px 12px;background:transparent}.cad-sheet-container .cad-dp__grid{width:100%}.cad-sheet-container .cad-dp__day{width:40px;height:40px;font-size:var(--cad-font-size)}.cad-sheet-container .cad-dp__row{justify-content:space-between}.cad-sheet-container .cad-menu{border:0;box-shadow:none;border-radius:0;min-width:100%!important;padding:6px 8px}.cad-sheet-container .cad-menu__item{min-height:44px;padding:10px 12px;box-sizing:border-box;font-size:var(--cad-font-size-lg);white-space:normal}.cad-sheet-container .cad-menu--sub{position:static;border:0;box-shadow:none;padding:0 0 4px 22px;background:transparent}.cad-sheet-container .cad-popover{border:0;box-shadow:none;border-radius:0;animation:none;padding:12px 16px;width:auto!important;min-width:0!important}.cad-sheet-container .cad-popover__arrow{display:none}@media(prefers-reduced-motion:reduce){.cad-sheet-container{transition:opacity .12s;transform:none;opacity:0}.cad-sheet-container.is-open{opacity:1}}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i1$1.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i2.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "component", type: CadIconComponent, selector: "cad-icon", inputs: ["name", "size", "strokeWidth", "label", "title", "spin", "filled", "flip", "rotate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
2546
2546
  }
2547
2547
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: CadSheetContainerComponent, decorators: [{
2548
2548
  type: Component,
@@ -2575,7 +2575,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImpo
2575
2575
  <footer class="cad-sheet__footer"><ng-container *ngTemplateOutlet="config().footer!" /></footer>
2576
2576
  }
2577
2577
  </div>
2578
- `, styles: [".cad-overlay-pane.cad-sheet-pane{width:100%;max-width:100%}.cad-sheet-container{display:flex;flex-direction:column;width:100%;max-height:92dvh;outline:none;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg);transform:translateY(100%);transition:transform .2s var(--cad-ease);will-change:transform}.cad-sheet-container.is-open{transform:none}.cad-sheet-container.is-dragging{transition:none}.cad-sheet-container.h-half{height:50dvh}.cad-sheet-container.h-full{height:92dvh}.cad-sheet-container.h-css{height:var(--cad-sheet-h)}.cad-sheet{display:flex;flex-direction:column;flex:1;min-height:0;background:var(--cad-overlay);border:1px solid var(--cad-border);border-bottom:0;border-radius:16px 16px 0 0;box-shadow:0 -8px 32px #0000002e;overflow:hidden;padding-bottom:env(safe-area-inset-bottom)}.cad-sheet__grip{display:flex;justify-content:center;padding:8px 0 4px;cursor:grab;touch-action:none;flex:none}.cad-sheet__handle{width:36px;height:4px;border-radius:2px;background:var(--cad-border-strong)}.cad-sheet__header{display:flex;align-items:center;gap:8px;padding:6px 16px 10px;flex:none;touch-action:none}.cad-sheet__grip+.cad-sheet__header{padding-top:2px}.cad-sheet__title{margin:0;font-size:14.5px;font-weight:600;color:var(--cad-fg);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cad-sheet__close{display:grid;place-items:center;width:32px;height:32px;border:0;border-radius:var(--cad-radius-sm);background:transparent;color:var(--cad-fg-muted);cursor:pointer;padding:0;margin-right:-6px}.cad-sheet__close:hover{background:var(--cad-hover);color:var(--cad-fg)}.cad-sheet__close:focus-visible{outline:2px solid var(--cad-ring);outline-offset:1px}.cad-sheet__body{flex:1;min-height:0;overflow:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}.cad-sheet__footer{display:flex;justify-content:flex-end;align-items:center;gap:8px;padding:10px 16px;border-top:1px solid var(--cad-border);background:var(--cad-bg-subtle);flex:none}.cad-sheet-container .cad-optlist{max-height:none!important;padding:6px 8px}.cad-sheet-container .cad-optlist__opt{min-height:44px;padding:10px 12px;box-sizing:border-box;font-size:var(--cad-font-size-lg)}.cad-sheet-container .cad-optlist__group{padding:12px 12px 4px}.cad-sheet-container .cad-select__panel,.cad-sheet-container .cad-multiselect__panel{border:0;box-shadow:none;border-radius:0;min-width:100%!important;background:transparent}.cad-sheet-container .cad-select__search,.cad-sheet-container .cad-multiselect__head{padding:8px 16px}.cad-sheet-container .cad-select__search input,.cad-sheet-container .cad-multiselect__head input{font-size:var(--cad-font-size-lg);height:32px}.cad-sheet-container .cad-dp__panel{border:0;box-shadow:none;border-radius:0;width:100%;box-sizing:border-box;padding:4px 12px 12px;background:transparent}.cad-sheet-container .cad-dp__grid{width:100%}.cad-sheet-container .cad-dp__day{width:40px;height:40px;font-size:var(--cad-font-size)}.cad-sheet-container .cad-dp__row{justify-content:space-between}.cad-sheet-container .cad-menu{border:0;box-shadow:none;border-radius:0;min-width:100%!important;padding:6px 8px}.cad-sheet-container .cad-menu__item{min-height:44px;padding:10px 12px;box-sizing:border-box;font-size:var(--cad-font-size-lg);white-space:normal}.cad-sheet-container .cad-menu--sub{position:static;border:0;box-shadow:none;padding:0 0 4px 22px;background:transparent}.cad-sheet-container .cad-popover{border:0;box-shadow:none;border-radius:0;animation:none;padding:12px 16px;width:auto!important;min-width:0!important}.cad-sheet-container .cad-popover__arrow{display:none}@media(prefers-reduced-motion:reduce){.cad-sheet-container{transition:opacity .12s;transform:none;opacity:0}.cad-sheet-container.is-open{opacity:1}}\n"] }]
2578
+ `, styles: [".cad-overlay-pane.cad-sheet-pane{width:100%;max-width:100%}.cad-sheet-container{display:flex;flex-direction:column;width:100%;max-height:92dvh;outline:none;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg);transform:translateY(100%);transition:transform .2s var(--cad-ease);will-change:transform}.cad-sheet-container.is-open{transform:none}.cad-sheet-container.is-dragging{transition:none}.cad-sheet-container.h-half{height:50dvh}.cad-sheet-container.h-full{height:92dvh}.cad-sheet-container.h-css{height:var(--cad-sheet-h)}.cad-sheet{display:flex;flex-direction:column;flex:1;min-height:0;background:var(--cad-overlay);--cad-hover: var(--cad-overlay-hover);border:1px solid var(--cad-border);border-bottom:0;border-radius:16px 16px 0 0;box-shadow:0 -8px 32px #0000002e;overflow:hidden;padding-bottom:env(safe-area-inset-bottom)}.cad-sheet__grip{display:flex;justify-content:center;padding:8px 0 4px;cursor:grab;touch-action:none;flex:none}.cad-sheet__handle{width:36px;height:4px;border-radius:2px;background:var(--cad-border-strong)}.cad-sheet__header{display:flex;align-items:center;gap:8px;padding:6px 16px 10px;flex:none;touch-action:none}.cad-sheet__grip+.cad-sheet__header{padding-top:2px}.cad-sheet__title{margin:0;font-size:14.5px;font-weight:600;color:var(--cad-fg);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cad-sheet__close{display:grid;place-items:center;width:32px;height:32px;border:0;border-radius:var(--cad-radius-sm);background:transparent;color:var(--cad-fg-muted);cursor:pointer;padding:0;margin-right:-6px}.cad-sheet__close:hover{background:var(--cad-hover);color:var(--cad-fg)}.cad-sheet__close:focus-visible{outline:2px solid var(--cad-ring);outline-offset:1px}.cad-sheet__body{flex:1;min-height:0;overflow:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}.cad-sheet__footer{display:flex;justify-content:flex-end;align-items:center;gap:8px;padding:10px 16px;border-top:1px solid var(--cad-border);background:var(--cad-bg-subtle);flex:none}.cad-sheet-container .cad-optlist{max-height:none!important;padding:6px 8px}.cad-sheet-container .cad-optlist__opt{min-height:44px;padding:10px 12px;box-sizing:border-box;font-size:var(--cad-font-size-lg)}.cad-sheet-container .cad-optlist__group{padding:12px 12px 4px}.cad-sheet-container .cad-select__panel,.cad-sheet-container .cad-multiselect__panel{border:0;box-shadow:none;border-radius:0;min-width:100%!important;background:transparent}.cad-sheet-container .cad-select__search,.cad-sheet-container .cad-multiselect__head{padding:8px 16px}.cad-sheet-container .cad-select__search input,.cad-sheet-container .cad-multiselect__head input{font-size:var(--cad-font-size-lg);height:32px}.cad-sheet-container .cad-dp__panel{border:0;box-shadow:none;border-radius:0;width:100%;box-sizing:border-box;padding:4px 12px 12px;background:transparent}.cad-sheet-container .cad-dp__grid{width:100%}.cad-sheet-container .cad-dp__day{width:40px;height:40px;font-size:var(--cad-font-size)}.cad-sheet-container .cad-dp__row{justify-content:space-between}.cad-sheet-container .cad-menu{border:0;box-shadow:none;border-radius:0;min-width:100%!important;padding:6px 8px}.cad-sheet-container .cad-menu__item{min-height:44px;padding:10px 12px;box-sizing:border-box;font-size:var(--cad-font-size-lg);white-space:normal}.cad-sheet-container .cad-menu--sub{position:static;border:0;box-shadow:none;padding:0 0 4px 22px;background:transparent}.cad-sheet-container .cad-popover{border:0;box-shadow:none;border-radius:0;animation:none;padding:12px 16px;width:auto!important;min-width:0!important}.cad-sheet-container .cad-popover__arrow{display:none}@media(prefers-reduced-motion:reduce){.cad-sheet-container{transition:opacity .12s;transform:none;opacity:0}.cad-sheet-container.is-open{opacity:1}}\n"] }]
2579
2579
  }], propDecorators: { closeRequest: [{ type: i0.Output, args: ["closeRequest"] }], attached: [{ type: i0.Output, args: ["attached"] }] } });
2580
2580
  /**
2581
2581
  * CadSheetService — feuille basse (bottom-sheet) partagée par les composants en mode mobile (select, datepicker, menu,
@@ -3214,7 +3214,7 @@ class CadSelectComponent extends CadSelectBase {
3214
3214
  @if (footerTpl(); as f) { <ng-container *ngTemplateOutlet="f.template" /> }
3215
3215
  </div>
3216
3216
  </ng-template>
3217
- `, isInline: true, styles: [":host{display:inline-flex;width:100%;box-sizing:border-box;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg);vertical-align:middle}.cad-select__trigger{display:flex;align-items:center;gap:6px;width:100%;box-sizing:border-box;height:var(--cad-control-h);padding:0 8px 0 var(--cad-control-px);background:var(--cad-input-bg);border:1px solid var(--cad-input-border);border-radius:var(--cad-radius);cursor:pointer;outline:none;-webkit-user-select:none;user-select:none;transition:border-color var(--cad-dur) var(--cad-ease),box-shadow var(--cad-dur) var(--cad-ease)}:host(.size-sm) .cad-select__trigger{height:var(--cad-control-h-sm);font-size:var(--cad-font-size-sm);border-radius:var(--cad-radius-sm)}:host(.size-lg) .cad-select__trigger{height:var(--cad-control-h-lg);font-size:var(--cad-font-size-lg)}.cad-select__trigger:focus-visible,:host(.is-open) .cad-select__trigger{border-color:var(--cad-accent);box-shadow:0 0 0 3px var(--cad-ring)}:host(.is-invalid) .cad-select__trigger{border-color:var(--cad-danger)}:host(.is-invalid.is-open) .cad-select__trigger,:host(.is-invalid) .cad-select__trigger:focus-visible{box-shadow:0 0 0 3px var(--cad-danger-soft)}:host(.is-disabled) .cad-select__trigger{opacity:.6;cursor:not-allowed;background:var(--cad-bg-subtle)}:host(.is-readonly) .cad-select__trigger{cursor:default}.cad-select__value{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:flex;align-items:center;gap:6px}.cad-select__value.is-placeholder,.cad-select__icon{color:var(--cad-fg-muted)}.cad-select__chev{color:var(--cad-fg-muted);flex:none;transition:transform var(--cad-dur) var(--cad-ease)}:host(.is-open) .cad-select__chev{transform:rotate(180deg)}.cad-select__spin{color:var(--cad-fg-muted)}.cad-select__clear{all:unset;display:grid;place-items:center;width:18px;height:18px;border-radius:4px;color:var(--cad-fg-muted);cursor:pointer}.cad-select__clear:hover{color:var(--cad-fg);background:var(--cad-hover)}.cad-select__panel{display:flex;flex-direction:column;box-sizing:border-box;background:var(--cad-overlay);border:1px solid var(--cad-border);border-radius:9px;box-shadow:var(--cad-shadow-lg);overflow:hidden;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg)}.cad-select__search{display:flex;align-items:center;gap:6px;padding:6px 10px;border-bottom:1px solid var(--cad-border);color:var(--cad-fg-muted)}.cad-select__search input{flex:1;min-width:0;border:0;outline:0;background:transparent;color:var(--cad-fg);font:var(--cad-font-size-sm)/1.4 var(--cad-font)}.cad-select__search input::placeholder{color:var(--cad-fg-muted)}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i1.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation", "cdkConnectedOverlayUsePopover", "cdkConnectedOverlayMatchWidth", "cdkConnectedOverlay"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i1.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: CadIconComponent, selector: "cad-icon", inputs: ["name", "size", "strokeWidth", "label", "title", "spin", "filled", "flip", "rotate"] }, { kind: "component", type: CadOptionListComponent, selector: "cad-option-list", inputs: ["items", "activeIndex", "isSelected", "multiple", "listId", "maxHeight", "itemTpl", "emptyTpl", "emptyMessage", "emptyFilterMessage", "filtered", "query"], outputs: ["pick", "hover"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3217
+ `, isInline: true, styles: [":host{display:inline-flex;width:100%;box-sizing:border-box;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg);vertical-align:middle}.cad-select__trigger{display:flex;align-items:center;gap:6px;width:100%;box-sizing:border-box;height:var(--cad-control-h);padding:0 8px 0 var(--cad-control-px);background:var(--cad-input-bg);border:1px solid var(--cad-input-border);border-radius:var(--cad-radius);cursor:pointer;outline:none;-webkit-user-select:none;user-select:none;transition:border-color var(--cad-dur) var(--cad-ease),box-shadow var(--cad-dur) var(--cad-ease)}:host(.size-sm) .cad-select__trigger{height:var(--cad-control-h-sm);font-size:var(--cad-font-size-sm);border-radius:var(--cad-radius-sm)}:host(.size-lg) .cad-select__trigger{height:var(--cad-control-h-lg);font-size:var(--cad-font-size-lg)}.cad-select__trigger:focus-visible,:host(.is-open) .cad-select__trigger{border-color:var(--cad-accent);box-shadow:0 0 0 3px var(--cad-ring)}:host(.is-invalid) .cad-select__trigger{border-color:var(--cad-danger)}:host(.is-invalid.is-open) .cad-select__trigger,:host(.is-invalid) .cad-select__trigger:focus-visible{box-shadow:0 0 0 3px var(--cad-danger-soft)}:host(.is-disabled) .cad-select__trigger{opacity:.6;cursor:not-allowed;background:var(--cad-bg-subtle)}:host(.is-readonly) .cad-select__trigger{cursor:default}.cad-select__value{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:flex;align-items:center;gap:6px}.cad-select__value.is-placeholder,.cad-select__icon{color:var(--cad-fg-muted)}.cad-select__chev{color:var(--cad-fg-muted);flex:none;transition:transform var(--cad-dur) var(--cad-ease)}:host(.is-open) .cad-select__chev{transform:rotate(180deg)}.cad-select__spin{color:var(--cad-fg-muted)}.cad-select__clear{all:unset;display:grid;place-items:center;width:18px;height:18px;border-radius:4px;color:var(--cad-fg-muted);cursor:pointer}.cad-select__clear:hover{color:var(--cad-fg);background:var(--cad-hover)}.cad-select__panel{display:flex;flex-direction:column;box-sizing:border-box;background:var(--cad-overlay);--cad-hover: var(--cad-overlay-hover);border:1px solid var(--cad-border);border-radius:9px;box-shadow:var(--cad-shadow-lg);overflow:hidden;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg)}.cad-select__search{display:flex;align-items:center;gap:6px;padding:6px 10px;border-bottom:1px solid var(--cad-border);color:var(--cad-fg-muted)}.cad-select__search input{flex:1;min-width:0;border:0;outline:0;background:transparent;color:var(--cad-fg);font:var(--cad-font-size-sm)/1.4 var(--cad-font)}.cad-select__search input::placeholder{color:var(--cad-fg-muted)}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i1.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation", "cdkConnectedOverlayUsePopover", "cdkConnectedOverlayMatchWidth", "cdkConnectedOverlay"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i1.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: CadIconComponent, selector: "cad-icon", inputs: ["name", "size", "strokeWidth", "label", "title", "spin", "filled", "flip", "rotate"] }, { kind: "component", type: CadOptionListComponent, selector: "cad-option-list", inputs: ["items", "activeIndex", "isSelected", "multiple", "listId", "maxHeight", "itemTpl", "emptyTpl", "emptyMessage", "emptyFilterMessage", "filtered", "query"], outputs: ["pick", "hover"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3218
3218
  }
3219
3219
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: CadSelectComponent, decorators: [{
3220
3220
  type: Component,
@@ -3268,7 +3268,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImpo
3268
3268
  @if (footerTpl(); as f) { <ng-container *ngTemplateOutlet="f.template" /> }
3269
3269
  </div>
3270
3270
  </ng-template>
3271
- `, styles: [":host{display:inline-flex;width:100%;box-sizing:border-box;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg);vertical-align:middle}.cad-select__trigger{display:flex;align-items:center;gap:6px;width:100%;box-sizing:border-box;height:var(--cad-control-h);padding:0 8px 0 var(--cad-control-px);background:var(--cad-input-bg);border:1px solid var(--cad-input-border);border-radius:var(--cad-radius);cursor:pointer;outline:none;-webkit-user-select:none;user-select:none;transition:border-color var(--cad-dur) var(--cad-ease),box-shadow var(--cad-dur) var(--cad-ease)}:host(.size-sm) .cad-select__trigger{height:var(--cad-control-h-sm);font-size:var(--cad-font-size-sm);border-radius:var(--cad-radius-sm)}:host(.size-lg) .cad-select__trigger{height:var(--cad-control-h-lg);font-size:var(--cad-font-size-lg)}.cad-select__trigger:focus-visible,:host(.is-open) .cad-select__trigger{border-color:var(--cad-accent);box-shadow:0 0 0 3px var(--cad-ring)}:host(.is-invalid) .cad-select__trigger{border-color:var(--cad-danger)}:host(.is-invalid.is-open) .cad-select__trigger,:host(.is-invalid) .cad-select__trigger:focus-visible{box-shadow:0 0 0 3px var(--cad-danger-soft)}:host(.is-disabled) .cad-select__trigger{opacity:.6;cursor:not-allowed;background:var(--cad-bg-subtle)}:host(.is-readonly) .cad-select__trigger{cursor:default}.cad-select__value{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:flex;align-items:center;gap:6px}.cad-select__value.is-placeholder,.cad-select__icon{color:var(--cad-fg-muted)}.cad-select__chev{color:var(--cad-fg-muted);flex:none;transition:transform var(--cad-dur) var(--cad-ease)}:host(.is-open) .cad-select__chev{transform:rotate(180deg)}.cad-select__spin{color:var(--cad-fg-muted)}.cad-select__clear{all:unset;display:grid;place-items:center;width:18px;height:18px;border-radius:4px;color:var(--cad-fg-muted);cursor:pointer}.cad-select__clear:hover{color:var(--cad-fg);background:var(--cad-hover)}.cad-select__panel{display:flex;flex-direction:column;box-sizing:border-box;background:var(--cad-overlay);border:1px solid var(--cad-border);border-radius:9px;box-shadow:var(--cad-shadow-lg);overflow:hidden;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg)}.cad-select__search{display:flex;align-items:center;gap:6px;padding:6px 10px;border-bottom:1px solid var(--cad-border);color:var(--cad-fg-muted)}.cad-select__search input{flex:1;min-width:0;border:0;outline:0;background:transparent;color:var(--cad-fg);font:var(--cad-font-size-sm)/1.4 var(--cad-font)}.cad-select__search input::placeholder{color:var(--cad-fg-muted)}\n"] }]
3271
+ `, styles: [":host{display:inline-flex;width:100%;box-sizing:border-box;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg);vertical-align:middle}.cad-select__trigger{display:flex;align-items:center;gap:6px;width:100%;box-sizing:border-box;height:var(--cad-control-h);padding:0 8px 0 var(--cad-control-px);background:var(--cad-input-bg);border:1px solid var(--cad-input-border);border-radius:var(--cad-radius);cursor:pointer;outline:none;-webkit-user-select:none;user-select:none;transition:border-color var(--cad-dur) var(--cad-ease),box-shadow var(--cad-dur) var(--cad-ease)}:host(.size-sm) .cad-select__trigger{height:var(--cad-control-h-sm);font-size:var(--cad-font-size-sm);border-radius:var(--cad-radius-sm)}:host(.size-lg) .cad-select__trigger{height:var(--cad-control-h-lg);font-size:var(--cad-font-size-lg)}.cad-select__trigger:focus-visible,:host(.is-open) .cad-select__trigger{border-color:var(--cad-accent);box-shadow:0 0 0 3px var(--cad-ring)}:host(.is-invalid) .cad-select__trigger{border-color:var(--cad-danger)}:host(.is-invalid.is-open) .cad-select__trigger,:host(.is-invalid) .cad-select__trigger:focus-visible{box-shadow:0 0 0 3px var(--cad-danger-soft)}:host(.is-disabled) .cad-select__trigger{opacity:.6;cursor:not-allowed;background:var(--cad-bg-subtle)}:host(.is-readonly) .cad-select__trigger{cursor:default}.cad-select__value{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:flex;align-items:center;gap:6px}.cad-select__value.is-placeholder,.cad-select__icon{color:var(--cad-fg-muted)}.cad-select__chev{color:var(--cad-fg-muted);flex:none;transition:transform var(--cad-dur) var(--cad-ease)}:host(.is-open) .cad-select__chev{transform:rotate(180deg)}.cad-select__spin{color:var(--cad-fg-muted)}.cad-select__clear{all:unset;display:grid;place-items:center;width:18px;height:18px;border-radius:4px;color:var(--cad-fg-muted);cursor:pointer}.cad-select__clear:hover{color:var(--cad-fg);background:var(--cad-hover)}.cad-select__panel{display:flex;flex-direction:column;box-sizing:border-box;background:var(--cad-overlay);--cad-hover: var(--cad-overlay-hover);border:1px solid var(--cad-border);border-radius:9px;box-shadow:var(--cad-shadow-lg);overflow:hidden;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg)}.cad-select__search{display:flex;align-items:center;gap:6px;padding:6px 10px;border-bottom:1px solid var(--cad-border);color:var(--cad-fg-muted)}.cad-select__search input{flex:1;min-width:0;border:0;outline:0;background:transparent;color:var(--cad-fg);font:var(--cad-font-size-sm)/1.4 var(--cad-font)}.cad-select__search input::placeholder{color:var(--cad-fg-muted)}\n"] }]
3272
3272
  }], propDecorators: { changed: [{ type: i0.Output, args: ["changed"] }] } });
3273
3273
 
3274
3274
  /**
@@ -3425,7 +3425,7 @@ class CadMultiselectComponent extends CadSelectBase {
3425
3425
  }
3426
3426
  </div>
3427
3427
  </ng-template>
3428
- `, isInline: true, styles: [":host{display:inline-flex;width:100%;box-sizing:border-box;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg);vertical-align:middle}.cad-multiselect__trigger{display:flex;align-items:center;gap:6px;width:100%;box-sizing:border-box;min-height:var(--cad-control-h);padding:3px 8px 3px var(--cad-control-px);background:var(--cad-input-bg);border:1px solid var(--cad-input-border);border-radius:var(--cad-radius);cursor:pointer;outline:none;-webkit-user-select:none;user-select:none;transition:border-color var(--cad-dur) var(--cad-ease),box-shadow var(--cad-dur) var(--cad-ease)}:host(.display-chip) .cad-multiselect__trigger{padding-left:4px}:host(.size-sm) .cad-multiselect__trigger{min-height:var(--cad-control-h-sm);font-size:var(--cad-font-size-sm);border-radius:var(--cad-radius-sm)}:host(.size-lg) .cad-multiselect__trigger{min-height:var(--cad-control-h-lg);font-size:var(--cad-font-size-lg)}.cad-multiselect__trigger:focus-visible,:host(.is-open) .cad-multiselect__trigger{border-color:var(--cad-accent);box-shadow:0 0 0 3px var(--cad-ring)}:host(.is-invalid) .cad-multiselect__trigger{border-color:var(--cad-danger)}:host(.is-invalid.is-open) .cad-multiselect__trigger,:host(.is-invalid) .cad-multiselect__trigger:focus-visible{box-shadow:0 0 0 3px var(--cad-danger-soft)}:host(.is-disabled) .cad-multiselect__trigger{opacity:.6;cursor:not-allowed;background:var(--cad-bg-subtle)}:host(.is-readonly) .cad-multiselect__trigger{cursor:default}.cad-multiselect__value{flex:1;min-width:0;display:flex;flex-wrap:wrap;align-items:center;gap:4px;overflow:hidden}:host(:not(.display-chip)) .cad-multiselect__value{display:block;white-space:nowrap;text-overflow:ellipsis}.cad-multiselect__value.is-placeholder{color:var(--cad-fg-muted);padding-left:6px}:host(:not(.display-chip)) .cad-multiselect__value.is-placeholder{padding-left:0}.cad-multiselect__chip{display:inline-flex;align-items:center;gap:4px;height:22px;padding:0 5px 0 8px;border-radius:999px;background:var(--cad-accent-soft);color:var(--cad-accent);font-size:var(--cad-font-size-sm);font-weight:500;white-space:nowrap}:host(.size-sm) .cad-multiselect__chip{height:18px;font-size:11px}.cad-multiselect__chip-x{all:unset;display:grid;place-items:center;width:14px;height:14px;border-radius:50%;cursor:pointer;color:inherit;opacity:.8}.cad-multiselect__chip-x:hover{opacity:1;background:color-mix(in srgb,var(--cad-accent) 20%,transparent)}.cad-multiselect__chev{color:var(--cad-fg-muted);flex:none;transition:transform var(--cad-dur) var(--cad-ease)}:host(.is-open) .cad-multiselect__chev{transform:rotate(180deg)}.cad-multiselect__spin{color:var(--cad-fg-muted)}.cad-multiselect__clear{all:unset;display:grid;place-items:center;width:18px;height:18px;border-radius:4px;color:var(--cad-fg-muted);cursor:pointer}.cad-multiselect__clear:hover{color:var(--cad-fg);background:var(--cad-hover)}.cad-multiselect__panel{display:flex;flex-direction:column;box-sizing:border-box;background:var(--cad-overlay);border:1px solid var(--cad-border);border-radius:9px;box-shadow:var(--cad-shadow-lg);overflow:hidden;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg)}.cad-multiselect__head{display:flex;align-items:center;gap:8px;padding:6px 10px 6px 12px;border-bottom:1px solid var(--cad-border);color:var(--cad-fg-muted)}.cad-multiselect__head input{flex:1;min-width:0;border:0;outline:0;background:transparent;color:var(--cad-fg);font:var(--cad-font-size-sm)/1.4 var(--cad-font)}.cad-multiselect__head input::placeholder{color:var(--cad-fg-muted)}.cad-multiselect__all{all:unset;display:inline-flex;cursor:pointer}.cad-multiselect__all[disabled]{opacity:.4;cursor:default}.cad-multiselect__all-label{color:var(--cad-fg-secondary);cursor:pointer;font-size:var(--cad-font-size-sm)}.cad-multiselect__check{width:16px;height:16px;box-sizing:border-box;border:1.5px solid var(--cad-border-strong);border-radius:4px;background:var(--cad-input-bg);display:grid;place-items:center;color:var(--cad-fg-on-accent);transition:background var(--cad-dur),border-color var(--cad-dur)}.cad-multiselect__check.is-on,.cad-multiselect__check.is-mixed{background:var(--cad-accent);border-color:var(--cad-accent)}.cad-multiselect__check i{width:8px;height:2px;background:currentColor;border-radius:1px}.cad-multiselect__sheet-foot{display:flex;justify-content:flex-end;gap:8px;padding:10px 16px calc(10px + env(safe-area-inset-bottom));border-top:1px solid var(--cad-border);background:var(--cad-bg-subtle);position:sticky;bottom:0}.cad-multiselect__sheet-btn{display:inline-flex;align-items:center;justify-content:center;height:40px;padding:0 18px;border-radius:var(--cad-radius);border:1px solid transparent;background:var(--cad-accent);color:var(--cad-fg-on-accent);font:500 var(--cad-font-size-lg) var(--cad-font);cursor:pointer}.cad-multiselect__sheet-btn.is-ghost{background:transparent;color:var(--cad-fg-secondary)}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i1.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation", "cdkConnectedOverlayUsePopover", "cdkConnectedOverlayMatchWidth", "cdkConnectedOverlay"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i1.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: CadIconComponent, selector: "cad-icon", inputs: ["name", "size", "strokeWidth", "label", "title", "spin", "filled", "flip", "rotate"] }, { kind: "component", type: CadOptionListComponent, selector: "cad-option-list", inputs: ["items", "activeIndex", "isSelected", "multiple", "listId", "maxHeight", "itemTpl", "emptyTpl", "emptyMessage", "emptyFilterMessage", "filtered", "query"], outputs: ["pick", "hover"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3428
+ `, isInline: true, styles: [":host{display:inline-flex;width:100%;box-sizing:border-box;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg);vertical-align:middle}.cad-multiselect__trigger{display:flex;align-items:center;gap:6px;width:100%;box-sizing:border-box;min-height:var(--cad-control-h);padding:3px 8px 3px var(--cad-control-px);background:var(--cad-input-bg);border:1px solid var(--cad-input-border);border-radius:var(--cad-radius);cursor:pointer;outline:none;-webkit-user-select:none;user-select:none;transition:border-color var(--cad-dur) var(--cad-ease),box-shadow var(--cad-dur) var(--cad-ease)}:host(.display-chip) .cad-multiselect__trigger{padding-left:4px}:host(.size-sm) .cad-multiselect__trigger{min-height:var(--cad-control-h-sm);font-size:var(--cad-font-size-sm);border-radius:var(--cad-radius-sm)}:host(.size-lg) .cad-multiselect__trigger{min-height:var(--cad-control-h-lg);font-size:var(--cad-font-size-lg)}.cad-multiselect__trigger:focus-visible,:host(.is-open) .cad-multiselect__trigger{border-color:var(--cad-accent);box-shadow:0 0 0 3px var(--cad-ring)}:host(.is-invalid) .cad-multiselect__trigger{border-color:var(--cad-danger)}:host(.is-invalid.is-open) .cad-multiselect__trigger,:host(.is-invalid) .cad-multiselect__trigger:focus-visible{box-shadow:0 0 0 3px var(--cad-danger-soft)}:host(.is-disabled) .cad-multiselect__trigger{opacity:.6;cursor:not-allowed;background:var(--cad-bg-subtle)}:host(.is-readonly) .cad-multiselect__trigger{cursor:default}.cad-multiselect__value{flex:1;min-width:0;display:flex;flex-wrap:wrap;align-items:center;gap:4px;overflow:hidden}:host(:not(.display-chip)) .cad-multiselect__value{display:block;white-space:nowrap;text-overflow:ellipsis}.cad-multiselect__value.is-placeholder{color:var(--cad-fg-muted);padding-left:6px}:host(:not(.display-chip)) .cad-multiselect__value.is-placeholder{padding-left:0}.cad-multiselect__chip{display:inline-flex;align-items:center;gap:4px;height:22px;padding:0 5px 0 8px;border-radius:999px;background:var(--cad-accent-soft);color:var(--cad-accent);font-size:var(--cad-font-size-sm);font-weight:500;white-space:nowrap}:host(.size-sm) .cad-multiselect__chip{height:18px;font-size:11px}.cad-multiselect__chip-x{all:unset;display:grid;place-items:center;width:14px;height:14px;border-radius:50%;cursor:pointer;color:inherit;opacity:.8}.cad-multiselect__chip-x:hover{opacity:1;background:color-mix(in srgb,var(--cad-accent) 20%,transparent)}.cad-multiselect__chev{color:var(--cad-fg-muted);flex:none;transition:transform var(--cad-dur) var(--cad-ease)}:host(.is-open) .cad-multiselect__chev{transform:rotate(180deg)}.cad-multiselect__spin{color:var(--cad-fg-muted)}.cad-multiselect__clear{all:unset;display:grid;place-items:center;width:18px;height:18px;border-radius:4px;color:var(--cad-fg-muted);cursor:pointer}.cad-multiselect__clear:hover{color:var(--cad-fg);background:var(--cad-hover)}.cad-multiselect__panel{display:flex;flex-direction:column;box-sizing:border-box;background:var(--cad-overlay);--cad-hover: var(--cad-overlay-hover);border:1px solid var(--cad-border);border-radius:9px;box-shadow:var(--cad-shadow-lg);overflow:hidden;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg)}.cad-multiselect__head{display:flex;align-items:center;gap:8px;padding:6px 10px 6px 12px;border-bottom:1px solid var(--cad-border);color:var(--cad-fg-muted)}.cad-multiselect__head input{flex:1;min-width:0;border:0;outline:0;background:transparent;color:var(--cad-fg);font:var(--cad-font-size-sm)/1.4 var(--cad-font)}.cad-multiselect__head input::placeholder{color:var(--cad-fg-muted)}.cad-multiselect__all{all:unset;display:inline-flex;cursor:pointer}.cad-multiselect__all[disabled]{opacity:.4;cursor:default}.cad-multiselect__all-label{color:var(--cad-fg-secondary);cursor:pointer;font-size:var(--cad-font-size-sm)}.cad-multiselect__check{width:16px;height:16px;box-sizing:border-box;border:1.5px solid var(--cad-border-strong);border-radius:4px;background:var(--cad-input-bg);display:grid;place-items:center;color:var(--cad-fg-on-accent);transition:background var(--cad-dur),border-color var(--cad-dur)}.cad-multiselect__check.is-on,.cad-multiselect__check.is-mixed{background:var(--cad-accent);border-color:var(--cad-accent)}.cad-multiselect__check i{width:8px;height:2px;background:currentColor;border-radius:1px}.cad-multiselect__sheet-foot{display:flex;justify-content:flex-end;gap:8px;padding:10px 16px calc(10px + env(safe-area-inset-bottom));border-top:1px solid var(--cad-border);background:var(--cad-bg-subtle);position:sticky;bottom:0}.cad-multiselect__sheet-btn{display:inline-flex;align-items:center;justify-content:center;height:40px;padding:0 18px;border-radius:var(--cad-radius);border:1px solid transparent;background:var(--cad-accent);color:var(--cad-fg-on-accent);font:500 var(--cad-font-size-lg) var(--cad-font);cursor:pointer}.cad-multiselect__sheet-btn.is-ghost{background:transparent;color:var(--cad-fg-secondary)}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i1.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation", "cdkConnectedOverlayUsePopover", "cdkConnectedOverlayMatchWidth", "cdkConnectedOverlay"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i1.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: CadIconComponent, selector: "cad-icon", inputs: ["name", "size", "strokeWidth", "label", "title", "spin", "filled", "flip", "rotate"] }, { kind: "component", type: CadOptionListComponent, selector: "cad-option-list", inputs: ["items", "activeIndex", "isSelected", "multiple", "listId", "maxHeight", "itemTpl", "emptyTpl", "emptyMessage", "emptyFilterMessage", "filtered", "query"], outputs: ["pick", "hover"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3429
3429
  }
3430
3430
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: CadMultiselectComponent, decorators: [{
3431
3431
  type: Component,
@@ -3500,7 +3500,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImpo
3500
3500
  }
3501
3501
  </div>
3502
3502
  </ng-template>
3503
- `, styles: [":host{display:inline-flex;width:100%;box-sizing:border-box;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg);vertical-align:middle}.cad-multiselect__trigger{display:flex;align-items:center;gap:6px;width:100%;box-sizing:border-box;min-height:var(--cad-control-h);padding:3px 8px 3px var(--cad-control-px);background:var(--cad-input-bg);border:1px solid var(--cad-input-border);border-radius:var(--cad-radius);cursor:pointer;outline:none;-webkit-user-select:none;user-select:none;transition:border-color var(--cad-dur) var(--cad-ease),box-shadow var(--cad-dur) var(--cad-ease)}:host(.display-chip) .cad-multiselect__trigger{padding-left:4px}:host(.size-sm) .cad-multiselect__trigger{min-height:var(--cad-control-h-sm);font-size:var(--cad-font-size-sm);border-radius:var(--cad-radius-sm)}:host(.size-lg) .cad-multiselect__trigger{min-height:var(--cad-control-h-lg);font-size:var(--cad-font-size-lg)}.cad-multiselect__trigger:focus-visible,:host(.is-open) .cad-multiselect__trigger{border-color:var(--cad-accent);box-shadow:0 0 0 3px var(--cad-ring)}:host(.is-invalid) .cad-multiselect__trigger{border-color:var(--cad-danger)}:host(.is-invalid.is-open) .cad-multiselect__trigger,:host(.is-invalid) .cad-multiselect__trigger:focus-visible{box-shadow:0 0 0 3px var(--cad-danger-soft)}:host(.is-disabled) .cad-multiselect__trigger{opacity:.6;cursor:not-allowed;background:var(--cad-bg-subtle)}:host(.is-readonly) .cad-multiselect__trigger{cursor:default}.cad-multiselect__value{flex:1;min-width:0;display:flex;flex-wrap:wrap;align-items:center;gap:4px;overflow:hidden}:host(:not(.display-chip)) .cad-multiselect__value{display:block;white-space:nowrap;text-overflow:ellipsis}.cad-multiselect__value.is-placeholder{color:var(--cad-fg-muted);padding-left:6px}:host(:not(.display-chip)) .cad-multiselect__value.is-placeholder{padding-left:0}.cad-multiselect__chip{display:inline-flex;align-items:center;gap:4px;height:22px;padding:0 5px 0 8px;border-radius:999px;background:var(--cad-accent-soft);color:var(--cad-accent);font-size:var(--cad-font-size-sm);font-weight:500;white-space:nowrap}:host(.size-sm) .cad-multiselect__chip{height:18px;font-size:11px}.cad-multiselect__chip-x{all:unset;display:grid;place-items:center;width:14px;height:14px;border-radius:50%;cursor:pointer;color:inherit;opacity:.8}.cad-multiselect__chip-x:hover{opacity:1;background:color-mix(in srgb,var(--cad-accent) 20%,transparent)}.cad-multiselect__chev{color:var(--cad-fg-muted);flex:none;transition:transform var(--cad-dur) var(--cad-ease)}:host(.is-open) .cad-multiselect__chev{transform:rotate(180deg)}.cad-multiselect__spin{color:var(--cad-fg-muted)}.cad-multiselect__clear{all:unset;display:grid;place-items:center;width:18px;height:18px;border-radius:4px;color:var(--cad-fg-muted);cursor:pointer}.cad-multiselect__clear:hover{color:var(--cad-fg);background:var(--cad-hover)}.cad-multiselect__panel{display:flex;flex-direction:column;box-sizing:border-box;background:var(--cad-overlay);border:1px solid var(--cad-border);border-radius:9px;box-shadow:var(--cad-shadow-lg);overflow:hidden;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg)}.cad-multiselect__head{display:flex;align-items:center;gap:8px;padding:6px 10px 6px 12px;border-bottom:1px solid var(--cad-border);color:var(--cad-fg-muted)}.cad-multiselect__head input{flex:1;min-width:0;border:0;outline:0;background:transparent;color:var(--cad-fg);font:var(--cad-font-size-sm)/1.4 var(--cad-font)}.cad-multiselect__head input::placeholder{color:var(--cad-fg-muted)}.cad-multiselect__all{all:unset;display:inline-flex;cursor:pointer}.cad-multiselect__all[disabled]{opacity:.4;cursor:default}.cad-multiselect__all-label{color:var(--cad-fg-secondary);cursor:pointer;font-size:var(--cad-font-size-sm)}.cad-multiselect__check{width:16px;height:16px;box-sizing:border-box;border:1.5px solid var(--cad-border-strong);border-radius:4px;background:var(--cad-input-bg);display:grid;place-items:center;color:var(--cad-fg-on-accent);transition:background var(--cad-dur),border-color var(--cad-dur)}.cad-multiselect__check.is-on,.cad-multiselect__check.is-mixed{background:var(--cad-accent);border-color:var(--cad-accent)}.cad-multiselect__check i{width:8px;height:2px;background:currentColor;border-radius:1px}.cad-multiselect__sheet-foot{display:flex;justify-content:flex-end;gap:8px;padding:10px 16px calc(10px + env(safe-area-inset-bottom));border-top:1px solid var(--cad-border);background:var(--cad-bg-subtle);position:sticky;bottom:0}.cad-multiselect__sheet-btn{display:inline-flex;align-items:center;justify-content:center;height:40px;padding:0 18px;border-radius:var(--cad-radius);border:1px solid transparent;background:var(--cad-accent);color:var(--cad-fg-on-accent);font:500 var(--cad-font-size-lg) var(--cad-font);cursor:pointer}.cad-multiselect__sheet-btn.is-ghost{background:transparent;color:var(--cad-fg-secondary)}\n"] }]
3503
+ `, styles: [":host{display:inline-flex;width:100%;box-sizing:border-box;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg);vertical-align:middle}.cad-multiselect__trigger{display:flex;align-items:center;gap:6px;width:100%;box-sizing:border-box;min-height:var(--cad-control-h);padding:3px 8px 3px var(--cad-control-px);background:var(--cad-input-bg);border:1px solid var(--cad-input-border);border-radius:var(--cad-radius);cursor:pointer;outline:none;-webkit-user-select:none;user-select:none;transition:border-color var(--cad-dur) var(--cad-ease),box-shadow var(--cad-dur) var(--cad-ease)}:host(.display-chip) .cad-multiselect__trigger{padding-left:4px}:host(.size-sm) .cad-multiselect__trigger{min-height:var(--cad-control-h-sm);font-size:var(--cad-font-size-sm);border-radius:var(--cad-radius-sm)}:host(.size-lg) .cad-multiselect__trigger{min-height:var(--cad-control-h-lg);font-size:var(--cad-font-size-lg)}.cad-multiselect__trigger:focus-visible,:host(.is-open) .cad-multiselect__trigger{border-color:var(--cad-accent);box-shadow:0 0 0 3px var(--cad-ring)}:host(.is-invalid) .cad-multiselect__trigger{border-color:var(--cad-danger)}:host(.is-invalid.is-open) .cad-multiselect__trigger,:host(.is-invalid) .cad-multiselect__trigger:focus-visible{box-shadow:0 0 0 3px var(--cad-danger-soft)}:host(.is-disabled) .cad-multiselect__trigger{opacity:.6;cursor:not-allowed;background:var(--cad-bg-subtle)}:host(.is-readonly) .cad-multiselect__trigger{cursor:default}.cad-multiselect__value{flex:1;min-width:0;display:flex;flex-wrap:wrap;align-items:center;gap:4px;overflow:hidden}:host(:not(.display-chip)) .cad-multiselect__value{display:block;white-space:nowrap;text-overflow:ellipsis}.cad-multiselect__value.is-placeholder{color:var(--cad-fg-muted);padding-left:6px}:host(:not(.display-chip)) .cad-multiselect__value.is-placeholder{padding-left:0}.cad-multiselect__chip{display:inline-flex;align-items:center;gap:4px;height:22px;padding:0 5px 0 8px;border-radius:999px;background:var(--cad-accent-soft);color:var(--cad-accent);font-size:var(--cad-font-size-sm);font-weight:500;white-space:nowrap}:host(.size-sm) .cad-multiselect__chip{height:18px;font-size:11px}.cad-multiselect__chip-x{all:unset;display:grid;place-items:center;width:14px;height:14px;border-radius:50%;cursor:pointer;color:inherit;opacity:.8}.cad-multiselect__chip-x:hover{opacity:1;background:color-mix(in srgb,var(--cad-accent) 20%,transparent)}.cad-multiselect__chev{color:var(--cad-fg-muted);flex:none;transition:transform var(--cad-dur) var(--cad-ease)}:host(.is-open) .cad-multiselect__chev{transform:rotate(180deg)}.cad-multiselect__spin{color:var(--cad-fg-muted)}.cad-multiselect__clear{all:unset;display:grid;place-items:center;width:18px;height:18px;border-radius:4px;color:var(--cad-fg-muted);cursor:pointer}.cad-multiselect__clear:hover{color:var(--cad-fg);background:var(--cad-hover)}.cad-multiselect__panel{display:flex;flex-direction:column;box-sizing:border-box;background:var(--cad-overlay);--cad-hover: var(--cad-overlay-hover);border:1px solid var(--cad-border);border-radius:9px;box-shadow:var(--cad-shadow-lg);overflow:hidden;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg)}.cad-multiselect__head{display:flex;align-items:center;gap:8px;padding:6px 10px 6px 12px;border-bottom:1px solid var(--cad-border);color:var(--cad-fg-muted)}.cad-multiselect__head input{flex:1;min-width:0;border:0;outline:0;background:transparent;color:var(--cad-fg);font:var(--cad-font-size-sm)/1.4 var(--cad-font)}.cad-multiselect__head input::placeholder{color:var(--cad-fg-muted)}.cad-multiselect__all{all:unset;display:inline-flex;cursor:pointer}.cad-multiselect__all[disabled]{opacity:.4;cursor:default}.cad-multiselect__all-label{color:var(--cad-fg-secondary);cursor:pointer;font-size:var(--cad-font-size-sm)}.cad-multiselect__check{width:16px;height:16px;box-sizing:border-box;border:1.5px solid var(--cad-border-strong);border-radius:4px;background:var(--cad-input-bg);display:grid;place-items:center;color:var(--cad-fg-on-accent);transition:background var(--cad-dur),border-color var(--cad-dur)}.cad-multiselect__check.is-on,.cad-multiselect__check.is-mixed{background:var(--cad-accent);border-color:var(--cad-accent)}.cad-multiselect__check i{width:8px;height:2px;background:currentColor;border-radius:1px}.cad-multiselect__sheet-foot{display:flex;justify-content:flex-end;gap:8px;padding:10px 16px calc(10px + env(safe-area-inset-bottom));border-top:1px solid var(--cad-border);background:var(--cad-bg-subtle);position:sticky;bottom:0}.cad-multiselect__sheet-btn{display:inline-flex;align-items:center;justify-content:center;height:40px;padding:0 18px;border-radius:var(--cad-radius);border:1px solid transparent;background:var(--cad-accent);color:var(--cad-fg-on-accent);font:500 var(--cad-font-size-lg) var(--cad-font);cursor:pointer}.cad-multiselect__sheet-btn.is-ghost{background:transparent;color:var(--cad-fg-secondary)}\n"] }]
3504
3504
  }], propDecorators: { display: [{ type: i0.Input, args: [{ isSignal: true, alias: "display", required: false }] }], maxSelectedLabels: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxSelectedLabels", required: false }] }], selectedItemsLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedItemsLabel", required: false }] }], showToggleAll: [{ type: i0.Input, args: [{ isSignal: true, alias: "showToggleAll", required: false }] }], selectionLimit: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectionLimit", required: false }] }], changed: [{ type: i0.Output, args: ["changed"] }], removed: [{ type: i0.Output, args: ["removed"] }] } });
3505
3505
 
3506
3506
  /** CSS du déclencheur/panneau commun aux sélecteurs (treeselect, cascade, combo) — mêmes tokens que cad-select. */
@@ -3522,7 +3522,7 @@ const CAD_SELECT_TRIGGER_STYLES = `
3522
3522
  .st__chev { color: var(--cad-fg-muted); flex: none; transition: transform var(--cad-dur) var(--cad-ease); } :host(.is-open) .st__chev { transform: rotate(180deg); }
3523
3523
  .st__clear, .st__dd { all: unset; display: grid; place-items: center; width: 18px; height: 18px; border-radius: 4px; color: var(--cad-fg-muted); cursor: pointer; } .st__clear:hover, .st__dd:hover { color: var(--cad-fg); background: var(--cad-hover); }
3524
3524
  .st__spin { color: var(--cad-fg-muted); }
3525
- .sp { display: flex; flex-direction: column; box-sizing: border-box; background: var(--cad-overlay); border: 1px solid var(--cad-border); border-radius: 9px; box-shadow: var(--cad-shadow-lg); overflow: hidden; font-family: var(--cad-font); font-size: var(--cad-font-size); color: var(--cad-fg); }
3525
+ .sp { display: flex; flex-direction: column; box-sizing: border-box; background: var(--cad-overlay); --cad-hover: var(--cad-overlay-hover); border: 1px solid var(--cad-border); border-radius: 9px; box-shadow: var(--cad-shadow-lg); overflow: hidden; font-family: var(--cad-font); font-size: var(--cad-font-size); color: var(--cad-fg); }
3526
3526
  .sp__empty { padding: 12px; text-align: center; color: var(--cad-fg-muted); font-size: var(--cad-font-size-sm); }
3527
3527
  `;
3528
3528
 
@@ -4090,6 +4090,19 @@ class CadDialogContainerComponent {
4090
4090
  const vertical = c.drawerPosition === 'top' || c.drawerPosition === 'bottom';
4091
4091
  return vertical ? '100%' : (CadDialogContainerComponent.DRAWER_SIZES[s] ?? s);
4092
4092
  }
4093
+ // EN PLEIN ÉCRAN MOBILE, LA TAILLE DEMANDÉE N'A PLUS DE SENS : c'est l'écran qui décide.
4094
+ // Sans ça, `size="md"` continuait de valoir 480px et, plafonné par le `max-width: 92%`
4095
+ // ci-dessous, rendait un dialogue de 352px avec des marges — alors qu'un `size="sm"`
4096
+ // (360px) tenait, lui, dans les 390px et paraissait plein écran. Deux dialogues déclarés
4097
+ // dans le même mode s'affichaient donc différemment (signalé par SZU le 22/08/2026).
4098
+ // On corrige à la SOURCE : le CSS tentait de rattraper ça en aval avec des `!important`,
4099
+ // qui ne peuvent pas gagner contre une largeur en ligne dans la chaîne de dimensionnement.
4100
+ // « 100% » ne suffit PAS ici : le panneau CDK qui nous porte a une largeur AUTOMATIQUE,
4101
+ // donc un pourcentage se résout circulairement sur la largeur du contenu — mesuré à 352px
4102
+ // au lieu de 390. On vise donc le viewport. Pas de risque de gouttière d'ascenseur : ce
4103
+ // mode n'existe que sous le seuil mobile, où il n'y a pas d'ascenseur classique.
4104
+ if (this.mobileMode() === 'full')
4105
+ return '100dvw';
4093
4106
  return c.width ?? CadDialogContainerComponent.SIZES[c.size ?? 'md'] ?? '480px';
4094
4107
  }, ...(ngDevMode ? [{ debugName: "width" }] : /* istanbul ignore next */ []));
4095
4108
  height = computed(() => {
@@ -4103,7 +4116,10 @@ class CadDialogContainerComponent {
4103
4116
  }
4104
4117
  return c.height ?? null;
4105
4118
  }, ...(ngDevMode ? [{ debugName: "height" }] : /* istanbul ignore next */ []));
4106
- maxWidth = computed(() => this.config().kind === 'drawer' ? '100%' : (this.config().maxWidth ?? (this.config().size === 'full' ? '100%' : '92%')), ...(ngDevMode ? [{ debugName: "maxWidth" }] : /* istanbul ignore next */ []));
4119
+ /** Le plafond à 92% laisse respirer un dialogue centré ; en plein écran mobile il n'a plus lieu d'être. */
4120
+ maxWidth = computed(() => this.config().kind === 'drawer' || this.mobileMode() === 'full'
4121
+ ? '100%'
4122
+ : (this.config().maxWidth ?? (this.config().size === 'full' ? '100%' : '92%')), ...(ngDevMode ? [{ debugName: "maxWidth" }] : /* istanbul ignore next */ []));
4107
4123
  drag = signal(null, ...(ngDevMode ? [{ debugName: "drag" }] : /* istanbul ignore next */ []));
4108
4124
  dragTransform = computed(() => { const d = this.drag(); return d ? `translate(${d.x}px, ${d.y}px)` : null; }, ...(ngDevMode ? [{ debugName: "dragTransform" }] : /* istanbul ignore next */ []));
4109
4125
  toggleMaximize() { this.maximized.set(!this.maximized()); this.drag.set(null); this.maximizeChange.emit(this.maximized()); }
@@ -4148,7 +4164,7 @@ class CadDialogContainerComponent {
4148
4164
  <footer class="cad-dialog__footer"><ng-container *ngTemplateOutlet="config().footer!" /></footer>
4149
4165
  }
4150
4166
  </div>
4151
- `, isInline: true, styles: [".cdk-overlay-container{position:fixed;z-index:var(--cad-z-overlay, 100002);pointer-events:none;top:0;left:0;width:100%;height:100%}.cdk-overlay-container:empty{display:none}.cdk-global-overlay-wrapper{display:flex;position:absolute;z-index:1000;width:100%;height:100%}.cdk-overlay-pane{position:absolute;pointer-events:auto;box-sizing:border-box;z-index:1000;display:flex;max-width:100%;max-height:100%}.cdk-overlay-backdrop{position:absolute;inset:0;z-index:1000;pointer-events:auto;-webkit-tap-highlight-color:transparent;opacity:0;transition:opacity var(--cad-dur, .14s) var(--cad-ease, ease)}.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:1}.cdk-overlay-transparent-backdrop{transition:visibility 1ms linear,opacity 1ms linear;visibility:hidden;opacity:1}.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing{visibility:visible;opacity:0}.cdk-overlay-connected-position-bounding-box{position:absolute;z-index:1000;display:flex;flex-direction:column;min-width:1px;min-height:1px}.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll}.cad-overlay-backdrop{background:var(--cad-backdrop, rgba(2, 6, 23, .45))}.cad-overlay-backdrop.is-hidden{display:none}.cad-overlay-pane{pointer-events:auto}.cad-overlay-pane.is-drawer-pane{height:100%}.cad-dialog-container{display:flex;outline:none;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg);max-height:100%;max-width:100%}.cad-dialog-container.is-hidden{display:none}.cad-dialog{display:flex;flex-direction:column;background:var(--cad-surface);border:1px solid var(--cad-border);border-radius:var(--cad-radius-lg);box-shadow:var(--cad-shadow-lg);max-height:92vh;min-width:0;outline:none;box-sizing:border-box;opacity:0;transform:translateY(6px) scale(.98);transition:opacity var(--cad-dur) var(--cad-ease),transform var(--cad-dur) var(--cad-ease)}.cad-dialog-container.is-open .cad-dialog{opacity:1;transform:none}.cad-dialog-container.is-maximized .cad-dialog{width:100%!important;max-width:100%!important;height:100vh!important;max-height:100vh;border-radius:0}.cad-dialog__header{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:14px 16px 10px;flex:none}.cad-dialog__header.is-draggable{cursor:move;-webkit-user-select:none;user-select:none}.cad-dialog__title{margin:0;font-size:14.5px;font-weight:600;color:var(--cad-fg);min-width:0}.cad-dialog__actions{display:inline-flex;gap:2px;margin-left:auto;flex:none}.cad-dialog__icon-btn{display:grid;place-items:center;width:26px;height:26px;border:0;border-radius:var(--cad-radius-sm);background:transparent;color:var(--cad-fg-muted);cursor:pointer;padding:0;transition:background var(--cad-dur),color var(--cad-dur)}.cad-dialog__icon-btn:hover{background:var(--cad-hover);color:var(--cad-fg)}.cad-dialog__icon-btn:focus-visible{outline:2px solid var(--cad-ring);outline-offset:1px}.cad-dialog__body{padding:4px 16px 14px;color:var(--cad-fg-secondary);font-size:var(--cad-font-size);overflow:auto;flex:1;min-height:0}.cad-dialog__body:first-child{padding-top:16px}.cad-dialog__footer{display:flex;justify-content:flex-end;align-items:center;gap:8px;padding:12px 16px;border-top:1px solid var(--cad-border);background:var(--cad-bg-subtle);border-radius:0 0 var(--cad-radius-lg) var(--cad-radius-lg);flex:none}.cad-dialog-container.is-drawer{height:100%}.cad-dialog-container.is-drawer .cad-dialog{max-height:none;height:100%;border-radius:0;opacity:1;transform:none;transition:transform .18s var(--cad-ease)}.cad-dialog-container.is-drawer .cad-dialog__footer{border-radius:0}.cad-dialog-container.is-drawer.pos-right .cad-dialog{transform:translate(100%);border-width:0 0 0 1px}.cad-dialog-container.is-drawer.pos-left .cad-dialog{transform:translate(-100%);border-width:0 1px 0 0}.cad-dialog-container.is-drawer.pos-top .cad-dialog{transform:translateY(-100%);border-width:0 0 1px 0}.cad-dialog-container.is-drawer.pos-bottom .cad-dialog{transform:translateY(100%);border-width:1px 0 0 0}.cad-dialog-container.is-drawer.is-open .cad-dialog{transform:none}.cad-dialog-container.is-drawer.pos-top,.cad-dialog-container.is-drawer.pos-bottom{width:100%}.cad-dialog-container.is-drawer.pos-top .cad-dialog,.cad-dialog-container.is-drawer.pos-bottom .cad-dialog{width:100%!important;max-width:100%!important}.cad-dialog-container.is-mobile-full{width:100%;height:100dvh;max-height:100dvh}.cad-dialog-container.is-mobile-full .cad-dialog{width:100%!important;max-width:100%!important;height:100dvh!important;max-height:100dvh;border-radius:0;border:0;box-shadow:none;padding-bottom:env(safe-area-inset-bottom)}.cad-dialog-container.is-mobile-full .cad-dialog__header{position:sticky;top:0;background:var(--cad-surface);z-index:1;padding-top:calc(14px + env(safe-area-inset-top))}.cad-dialog-container.is-mobile-full .cad-dialog__footer{border-radius:0}.cad-overlay-pane.is-mobile-sheet-pane{width:100%;max-width:100%}.cad-dialog-container.is-mobile-sheet{width:100%;align-items:flex-end}.cad-dialog-container.is-mobile-sheet .cad-dialog{position:relative;width:100%!important;max-width:100%!important;height:92dvh!important;max-height:92dvh;border-radius:16px 16px 0 0;border-bottom:0;box-shadow:0 -8px 32px #0000002e;padding-bottom:env(safe-area-inset-bottom);opacity:1;transform:translateY(100%);transition:transform .2s var(--cad-ease)}.cad-dialog-container.is-mobile-sheet.sheet-h-auto .cad-dialog{height:auto!important}.cad-dialog-container.is-mobile-sheet .cad-dialog:before{content:\"\";position:absolute;top:8px;left:50%;width:36px;height:4px;margin-left:-18px;border-radius:2px;background:var(--cad-border-strong)}.cad-dialog-container.is-mobile-sheet .cad-dialog__header{padding-top:20px}.cad-dialog-container.is-mobile-sheet .cad-dialog__body:first-child{padding-top:22px}.cad-dialog-container.is-mobile-sheet.is-open .cad-dialog{transform:none}.cad-dialog-container.is-mobile-sheet .cad-dialog__footer{border-radius:0}.cad-confirm-dialog.is-mobile-sheet .cad-dialog__footer{flex-direction:column-reverse;align-items:stretch;gap:8px}.cad-confirm-dialog.is-mobile-sheet .cad-dialog__footer>*{width:100%;height:44px}@media(prefers-reduced-motion:reduce){.cad-dialog,.cad-dialog-container.is-drawer .cad-dialog,.cad-dialog-container.is-mobile-sheet .cad-dialog,.cdk-overlay-backdrop{transition:none!important}}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i1$1.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i2.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "component", type: CadIconComponent, selector: "cad-icon", inputs: ["name", "size", "strokeWidth", "label", "title", "spin", "filled", "flip", "rotate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
4167
+ `, isInline: true, styles: [".cdk-overlay-container{position:fixed;z-index:var(--cad-z-overlay, 100002);pointer-events:none;top:0;left:0;width:100%;height:100%}.cdk-overlay-container:empty{display:none}.cdk-global-overlay-wrapper{display:flex;position:absolute;z-index:1000;width:100%;height:100%}.cdk-overlay-pane{position:absolute;pointer-events:auto;box-sizing:border-box;z-index:1000;display:flex;max-width:100%;max-height:100%}.cdk-overlay-backdrop{position:absolute;inset:0;z-index:1000;pointer-events:auto;-webkit-tap-highlight-color:transparent;opacity:0;transition:opacity var(--cad-dur, .14s) var(--cad-ease, ease)}.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:1}.cdk-overlay-transparent-backdrop{transition:visibility 1ms linear,opacity 1ms linear;visibility:hidden;opacity:1}.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing{visibility:visible;opacity:0}.cdk-overlay-connected-position-bounding-box{position:absolute;z-index:1000;display:flex;flex-direction:column;min-width:1px;min-height:1px}.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll}.cad-overlay-backdrop{background:var(--cad-backdrop, rgba(2, 6, 23, .45))}.cad-overlay-backdrop.is-hidden{display:none}.cad-overlay-pane{pointer-events:auto}.cad-overlay-pane.is-drawer-pane{height:100%}.cad-dialog-container{display:flex;outline:none;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg);max-height:100%;max-width:100%}.cad-dialog-container.is-hidden{display:none}.cad-dialog{display:flex;flex-direction:column;background:var(--cad-surface);border:1px solid var(--cad-border);border-radius:var(--cad-radius-lg);box-shadow:var(--cad-shadow-lg);max-height:92vh;min-width:0;outline:none;box-sizing:border-box;opacity:0;transform:translateY(6px) scale(.98);transition:opacity var(--cad-dur) var(--cad-ease),transform var(--cad-dur) var(--cad-ease)}.cad-dialog-container.is-open .cad-dialog{opacity:1;transform:none}.cad-dialog-container.is-maximized .cad-dialog{width:100%!important;max-width:100%!important;height:100vh!important;max-height:100vh;border-radius:0}.cad-dialog__header{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:14px 16px 10px;flex:none}.cad-dialog__header.is-draggable{cursor:move;-webkit-user-select:none;user-select:none}.cad-dialog__title{margin:0;font-size:14.5px;font-weight:600;color:var(--cad-fg);min-width:0}.cad-dialog__actions{display:inline-flex;gap:2px;margin-left:auto;flex:none}.cad-dialog__icon-btn{display:grid;place-items:center;width:26px;height:26px;border:0;border-radius:var(--cad-radius-sm);background:transparent;color:var(--cad-fg-muted);cursor:pointer;padding:0;transition:background var(--cad-dur),color var(--cad-dur)}.cad-dialog__icon-btn:hover{background:var(--cad-hover);color:var(--cad-fg)}.cad-dialog__icon-btn:focus-visible{outline:2px solid var(--cad-ring);outline-offset:1px}.cad-dialog__body{padding:4px 16px 14px;color:var(--cad-fg-secondary);font-size:var(--cad-font-size);overflow:auto;flex:1;min-height:0}.cad-dialog__body:first-child{padding-top:16px}.cad-dialog__footer>[cadDialogFooter]{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:wrap;width:100%}.cad-dialog__footer{display:flex;justify-content:flex-end;align-items:center;gap:8px;padding:12px 16px;border-top:1px solid var(--cad-border);background:var(--cad-bg-subtle);border-radius:0 0 var(--cad-radius-lg) var(--cad-radius-lg);flex:none}.cad-dialog-container.is-drawer{height:100%}.cad-dialog-container.is-drawer .cad-dialog{max-height:none;height:100%;border-radius:0;opacity:1;transform:none;transition:transform .18s var(--cad-ease)}.cad-dialog-container.is-drawer .cad-dialog__footer{border-radius:0}.cad-dialog-container.is-drawer.pos-right .cad-dialog{transform:translate(100%);border-width:0 0 0 1px}.cad-dialog-container.is-drawer.pos-left .cad-dialog{transform:translate(-100%);border-width:0 1px 0 0}.cad-dialog-container.is-drawer.pos-top .cad-dialog{transform:translateY(-100%);border-width:0 0 1px 0}.cad-dialog-container.is-drawer.pos-bottom .cad-dialog{transform:translateY(100%);border-width:1px 0 0 0}.cad-dialog-container.is-drawer.is-open .cad-dialog{transform:none}.cad-dialog-container.is-drawer.pos-top,.cad-dialog-container.is-drawer.pos-bottom{width:100%}.cad-dialog-container.is-drawer.pos-top .cad-dialog,.cad-dialog-container.is-drawer.pos-bottom .cad-dialog{width:100%!important;max-width:100%!important}.cad-dialog-container.is-mobile-full{width:100dvw;height:100dvh;max-height:100dvh;align-items:flex-start}.cad-dialog-container.is-mobile-full .cad-dialog{width:100dvw!important;max-width:100dvw!important;height:auto!important;max-height:100dvh;border-radius:0 0 var(--cad-radius-lg) var(--cad-radius-lg);border:0;box-shadow:none;padding-bottom:env(safe-area-inset-bottom)}.cad-dialog-container.is-mobile-full .cad-dialog__header{position:sticky;top:0;background:var(--cad-surface);z-index:1;padding-top:calc(14px + env(safe-area-inset-top))}.cad-dialog-container.is-mobile-full .cad-dialog__footer{border-radius:0}.cad-overlay-pane.is-mobile-sheet-pane{width:100%;max-width:100%}.cad-dialog-container.is-mobile-sheet{width:100%;align-items:flex-end}.cad-dialog-container.is-mobile-sheet .cad-dialog{position:relative;width:100%!important;max-width:100%!important;height:92dvh!important;max-height:92dvh;border-radius:16px 16px 0 0;border-bottom:0;box-shadow:0 -8px 32px #0000002e;padding-bottom:env(safe-area-inset-bottom);opacity:1;transform:translateY(100%);transition:transform .2s var(--cad-ease)}.cad-dialog-container.is-mobile-sheet.sheet-h-auto .cad-dialog{height:auto!important}.cad-dialog-container.is-mobile-sheet .cad-dialog:before{content:\"\";position:absolute;top:8px;left:50%;width:36px;height:4px;margin-left:-18px;border-radius:2px;background:var(--cad-border-strong)}.cad-dialog-container.is-mobile-sheet .cad-dialog__header{padding-top:20px}.cad-dialog-container.is-mobile-sheet .cad-dialog__body:first-child{padding-top:22px}.cad-dialog-container.is-mobile-sheet.is-open .cad-dialog{transform:none}.cad-dialog-container.is-mobile-sheet .cad-dialog__footer{border-radius:0}.cad-confirm-dialog.is-mobile-sheet .cad-dialog__footer{flex-direction:column-reverse;align-items:stretch;gap:8px}.cad-confirm-dialog.is-mobile-sheet .cad-dialog__footer>*{width:100%;height:44px}@media(prefers-reduced-motion:reduce){.cad-dialog,.cad-dialog-container.is-drawer .cad-dialog,.cad-dialog-container.is-mobile-sheet .cad-dialog,.cdk-overlay-backdrop{transition:none!important}}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i1$1.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i2.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "component", type: CadIconComponent, selector: "cad-icon", inputs: ["name", "size", "strokeWidth", "label", "title", "spin", "filled", "flip", "rotate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
4152
4168
  }
4153
4169
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: CadDialogContainerComponent, decorators: [{
4154
4170
  type: Component,
@@ -4194,7 +4210,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImpo
4194
4210
  <footer class="cad-dialog__footer"><ng-container *ngTemplateOutlet="config().footer!" /></footer>
4195
4211
  }
4196
4212
  </div>
4197
- `, styles: [".cdk-overlay-container{position:fixed;z-index:var(--cad-z-overlay, 100002);pointer-events:none;top:0;left:0;width:100%;height:100%}.cdk-overlay-container:empty{display:none}.cdk-global-overlay-wrapper{display:flex;position:absolute;z-index:1000;width:100%;height:100%}.cdk-overlay-pane{position:absolute;pointer-events:auto;box-sizing:border-box;z-index:1000;display:flex;max-width:100%;max-height:100%}.cdk-overlay-backdrop{position:absolute;inset:0;z-index:1000;pointer-events:auto;-webkit-tap-highlight-color:transparent;opacity:0;transition:opacity var(--cad-dur, .14s) var(--cad-ease, ease)}.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:1}.cdk-overlay-transparent-backdrop{transition:visibility 1ms linear,opacity 1ms linear;visibility:hidden;opacity:1}.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing{visibility:visible;opacity:0}.cdk-overlay-connected-position-bounding-box{position:absolute;z-index:1000;display:flex;flex-direction:column;min-width:1px;min-height:1px}.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll}.cad-overlay-backdrop{background:var(--cad-backdrop, rgba(2, 6, 23, .45))}.cad-overlay-backdrop.is-hidden{display:none}.cad-overlay-pane{pointer-events:auto}.cad-overlay-pane.is-drawer-pane{height:100%}.cad-dialog-container{display:flex;outline:none;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg);max-height:100%;max-width:100%}.cad-dialog-container.is-hidden{display:none}.cad-dialog{display:flex;flex-direction:column;background:var(--cad-surface);border:1px solid var(--cad-border);border-radius:var(--cad-radius-lg);box-shadow:var(--cad-shadow-lg);max-height:92vh;min-width:0;outline:none;box-sizing:border-box;opacity:0;transform:translateY(6px) scale(.98);transition:opacity var(--cad-dur) var(--cad-ease),transform var(--cad-dur) var(--cad-ease)}.cad-dialog-container.is-open .cad-dialog{opacity:1;transform:none}.cad-dialog-container.is-maximized .cad-dialog{width:100%!important;max-width:100%!important;height:100vh!important;max-height:100vh;border-radius:0}.cad-dialog__header{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:14px 16px 10px;flex:none}.cad-dialog__header.is-draggable{cursor:move;-webkit-user-select:none;user-select:none}.cad-dialog__title{margin:0;font-size:14.5px;font-weight:600;color:var(--cad-fg);min-width:0}.cad-dialog__actions{display:inline-flex;gap:2px;margin-left:auto;flex:none}.cad-dialog__icon-btn{display:grid;place-items:center;width:26px;height:26px;border:0;border-radius:var(--cad-radius-sm);background:transparent;color:var(--cad-fg-muted);cursor:pointer;padding:0;transition:background var(--cad-dur),color var(--cad-dur)}.cad-dialog__icon-btn:hover{background:var(--cad-hover);color:var(--cad-fg)}.cad-dialog__icon-btn:focus-visible{outline:2px solid var(--cad-ring);outline-offset:1px}.cad-dialog__body{padding:4px 16px 14px;color:var(--cad-fg-secondary);font-size:var(--cad-font-size);overflow:auto;flex:1;min-height:0}.cad-dialog__body:first-child{padding-top:16px}.cad-dialog__footer{display:flex;justify-content:flex-end;align-items:center;gap:8px;padding:12px 16px;border-top:1px solid var(--cad-border);background:var(--cad-bg-subtle);border-radius:0 0 var(--cad-radius-lg) var(--cad-radius-lg);flex:none}.cad-dialog-container.is-drawer{height:100%}.cad-dialog-container.is-drawer .cad-dialog{max-height:none;height:100%;border-radius:0;opacity:1;transform:none;transition:transform .18s var(--cad-ease)}.cad-dialog-container.is-drawer .cad-dialog__footer{border-radius:0}.cad-dialog-container.is-drawer.pos-right .cad-dialog{transform:translate(100%);border-width:0 0 0 1px}.cad-dialog-container.is-drawer.pos-left .cad-dialog{transform:translate(-100%);border-width:0 1px 0 0}.cad-dialog-container.is-drawer.pos-top .cad-dialog{transform:translateY(-100%);border-width:0 0 1px 0}.cad-dialog-container.is-drawer.pos-bottom .cad-dialog{transform:translateY(100%);border-width:1px 0 0 0}.cad-dialog-container.is-drawer.is-open .cad-dialog{transform:none}.cad-dialog-container.is-drawer.pos-top,.cad-dialog-container.is-drawer.pos-bottom{width:100%}.cad-dialog-container.is-drawer.pos-top .cad-dialog,.cad-dialog-container.is-drawer.pos-bottom .cad-dialog{width:100%!important;max-width:100%!important}.cad-dialog-container.is-mobile-full{width:100%;height:100dvh;max-height:100dvh}.cad-dialog-container.is-mobile-full .cad-dialog{width:100%!important;max-width:100%!important;height:100dvh!important;max-height:100dvh;border-radius:0;border:0;box-shadow:none;padding-bottom:env(safe-area-inset-bottom)}.cad-dialog-container.is-mobile-full .cad-dialog__header{position:sticky;top:0;background:var(--cad-surface);z-index:1;padding-top:calc(14px + env(safe-area-inset-top))}.cad-dialog-container.is-mobile-full .cad-dialog__footer{border-radius:0}.cad-overlay-pane.is-mobile-sheet-pane{width:100%;max-width:100%}.cad-dialog-container.is-mobile-sheet{width:100%;align-items:flex-end}.cad-dialog-container.is-mobile-sheet .cad-dialog{position:relative;width:100%!important;max-width:100%!important;height:92dvh!important;max-height:92dvh;border-radius:16px 16px 0 0;border-bottom:0;box-shadow:0 -8px 32px #0000002e;padding-bottom:env(safe-area-inset-bottom);opacity:1;transform:translateY(100%);transition:transform .2s var(--cad-ease)}.cad-dialog-container.is-mobile-sheet.sheet-h-auto .cad-dialog{height:auto!important}.cad-dialog-container.is-mobile-sheet .cad-dialog:before{content:\"\";position:absolute;top:8px;left:50%;width:36px;height:4px;margin-left:-18px;border-radius:2px;background:var(--cad-border-strong)}.cad-dialog-container.is-mobile-sheet .cad-dialog__header{padding-top:20px}.cad-dialog-container.is-mobile-sheet .cad-dialog__body:first-child{padding-top:22px}.cad-dialog-container.is-mobile-sheet.is-open .cad-dialog{transform:none}.cad-dialog-container.is-mobile-sheet .cad-dialog__footer{border-radius:0}.cad-confirm-dialog.is-mobile-sheet .cad-dialog__footer{flex-direction:column-reverse;align-items:stretch;gap:8px}.cad-confirm-dialog.is-mobile-sheet .cad-dialog__footer>*{width:100%;height:44px}@media(prefers-reduced-motion:reduce){.cad-dialog,.cad-dialog-container.is-drawer .cad-dialog,.cad-dialog-container.is-mobile-sheet .cad-dialog,.cdk-overlay-backdrop{transition:none!important}}\n"] }]
4213
+ `, styles: [".cdk-overlay-container{position:fixed;z-index:var(--cad-z-overlay, 100002);pointer-events:none;top:0;left:0;width:100%;height:100%}.cdk-overlay-container:empty{display:none}.cdk-global-overlay-wrapper{display:flex;position:absolute;z-index:1000;width:100%;height:100%}.cdk-overlay-pane{position:absolute;pointer-events:auto;box-sizing:border-box;z-index:1000;display:flex;max-width:100%;max-height:100%}.cdk-overlay-backdrop{position:absolute;inset:0;z-index:1000;pointer-events:auto;-webkit-tap-highlight-color:transparent;opacity:0;transition:opacity var(--cad-dur, .14s) var(--cad-ease, ease)}.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:1}.cdk-overlay-transparent-backdrop{transition:visibility 1ms linear,opacity 1ms linear;visibility:hidden;opacity:1}.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing{visibility:visible;opacity:0}.cdk-overlay-connected-position-bounding-box{position:absolute;z-index:1000;display:flex;flex-direction:column;min-width:1px;min-height:1px}.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll}.cad-overlay-backdrop{background:var(--cad-backdrop, rgba(2, 6, 23, .45))}.cad-overlay-backdrop.is-hidden{display:none}.cad-overlay-pane{pointer-events:auto}.cad-overlay-pane.is-drawer-pane{height:100%}.cad-dialog-container{display:flex;outline:none;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg);max-height:100%;max-width:100%}.cad-dialog-container.is-hidden{display:none}.cad-dialog{display:flex;flex-direction:column;background:var(--cad-surface);border:1px solid var(--cad-border);border-radius:var(--cad-radius-lg);box-shadow:var(--cad-shadow-lg);max-height:92vh;min-width:0;outline:none;box-sizing:border-box;opacity:0;transform:translateY(6px) scale(.98);transition:opacity var(--cad-dur) var(--cad-ease),transform var(--cad-dur) var(--cad-ease)}.cad-dialog-container.is-open .cad-dialog{opacity:1;transform:none}.cad-dialog-container.is-maximized .cad-dialog{width:100%!important;max-width:100%!important;height:100vh!important;max-height:100vh;border-radius:0}.cad-dialog__header{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:14px 16px 10px;flex:none}.cad-dialog__header.is-draggable{cursor:move;-webkit-user-select:none;user-select:none}.cad-dialog__title{margin:0;font-size:14.5px;font-weight:600;color:var(--cad-fg);min-width:0}.cad-dialog__actions{display:inline-flex;gap:2px;margin-left:auto;flex:none}.cad-dialog__icon-btn{display:grid;place-items:center;width:26px;height:26px;border:0;border-radius:var(--cad-radius-sm);background:transparent;color:var(--cad-fg-muted);cursor:pointer;padding:0;transition:background var(--cad-dur),color var(--cad-dur)}.cad-dialog__icon-btn:hover{background:var(--cad-hover);color:var(--cad-fg)}.cad-dialog__icon-btn:focus-visible{outline:2px solid var(--cad-ring);outline-offset:1px}.cad-dialog__body{padding:4px 16px 14px;color:var(--cad-fg-secondary);font-size:var(--cad-font-size);overflow:auto;flex:1;min-height:0}.cad-dialog__body:first-child{padding-top:16px}.cad-dialog__footer>[cadDialogFooter]{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:wrap;width:100%}.cad-dialog__footer{display:flex;justify-content:flex-end;align-items:center;gap:8px;padding:12px 16px;border-top:1px solid var(--cad-border);background:var(--cad-bg-subtle);border-radius:0 0 var(--cad-radius-lg) var(--cad-radius-lg);flex:none}.cad-dialog-container.is-drawer{height:100%}.cad-dialog-container.is-drawer .cad-dialog{max-height:none;height:100%;border-radius:0;opacity:1;transform:none;transition:transform .18s var(--cad-ease)}.cad-dialog-container.is-drawer .cad-dialog__footer{border-radius:0}.cad-dialog-container.is-drawer.pos-right .cad-dialog{transform:translate(100%);border-width:0 0 0 1px}.cad-dialog-container.is-drawer.pos-left .cad-dialog{transform:translate(-100%);border-width:0 1px 0 0}.cad-dialog-container.is-drawer.pos-top .cad-dialog{transform:translateY(-100%);border-width:0 0 1px 0}.cad-dialog-container.is-drawer.pos-bottom .cad-dialog{transform:translateY(100%);border-width:1px 0 0 0}.cad-dialog-container.is-drawer.is-open .cad-dialog{transform:none}.cad-dialog-container.is-drawer.pos-top,.cad-dialog-container.is-drawer.pos-bottom{width:100%}.cad-dialog-container.is-drawer.pos-top .cad-dialog,.cad-dialog-container.is-drawer.pos-bottom .cad-dialog{width:100%!important;max-width:100%!important}.cad-dialog-container.is-mobile-full{width:100dvw;height:100dvh;max-height:100dvh;align-items:flex-start}.cad-dialog-container.is-mobile-full .cad-dialog{width:100dvw!important;max-width:100dvw!important;height:auto!important;max-height:100dvh;border-radius:0 0 var(--cad-radius-lg) var(--cad-radius-lg);border:0;box-shadow:none;padding-bottom:env(safe-area-inset-bottom)}.cad-dialog-container.is-mobile-full .cad-dialog__header{position:sticky;top:0;background:var(--cad-surface);z-index:1;padding-top:calc(14px + env(safe-area-inset-top))}.cad-dialog-container.is-mobile-full .cad-dialog__footer{border-radius:0}.cad-overlay-pane.is-mobile-sheet-pane{width:100%;max-width:100%}.cad-dialog-container.is-mobile-sheet{width:100%;align-items:flex-end}.cad-dialog-container.is-mobile-sheet .cad-dialog{position:relative;width:100%!important;max-width:100%!important;height:92dvh!important;max-height:92dvh;border-radius:16px 16px 0 0;border-bottom:0;box-shadow:0 -8px 32px #0000002e;padding-bottom:env(safe-area-inset-bottom);opacity:1;transform:translateY(100%);transition:transform .2s var(--cad-ease)}.cad-dialog-container.is-mobile-sheet.sheet-h-auto .cad-dialog{height:auto!important}.cad-dialog-container.is-mobile-sheet .cad-dialog:before{content:\"\";position:absolute;top:8px;left:50%;width:36px;height:4px;margin-left:-18px;border-radius:2px;background:var(--cad-border-strong)}.cad-dialog-container.is-mobile-sheet .cad-dialog__header{padding-top:20px}.cad-dialog-container.is-mobile-sheet .cad-dialog__body:first-child{padding-top:22px}.cad-dialog-container.is-mobile-sheet.is-open .cad-dialog{transform:none}.cad-dialog-container.is-mobile-sheet .cad-dialog__footer{border-radius:0}.cad-confirm-dialog.is-mobile-sheet .cad-dialog__footer{flex-direction:column-reverse;align-items:stretch;gap:8px}.cad-confirm-dialog.is-mobile-sheet .cad-dialog__footer>*{width:100%;height:44px}@media(prefers-reduced-motion:reduce){.cad-dialog,.cad-dialog-container.is-drawer .cad-dialog,.cad-dialog-container.is-mobile-sheet .cad-dialog,.cdk-overlay-backdrop{transition:none!important}}\n"] }]
4198
4214
  }], propDecorators: { closeRequest: [{ type: i0.Output, args: ["closeRequest"] }], attached: [{ type: i0.Output, args: ["attached"] }], maximizeChange: [{ type: i0.Output, args: ["maximizeChange"] }] } });
4199
4215
 
4200
4216
  const ANIM_MS = 180;
@@ -4970,7 +4986,7 @@ class CadPopoverComponent {
4970
4986
  <ng-content />
4971
4987
  </div>
4972
4988
  </ng-template>
4973
- `, isInline: true, styles: [".cad-popover{position:relative;background:var(--cad-overlay);border:1px solid var(--cad-border);border-radius:10px;box-shadow:var(--cad-shadow-lg);padding:10px 12px;color:var(--cad-fg);font-family:var(--cad-font);font-size:var(--cad-font-size);box-sizing:border-box;outline:none;animation:cad-pop-in .12s var(--cad-ease)}.cad-popover__arrow{position:absolute;width:10px;height:10px;background:inherit;border:1px solid var(--cad-border);transform:rotate(45deg)}[data-placement=bottom] .cad-popover__arrow{top:-6px;left:50%;margin-left:-5px;border-right:0;border-bottom:0}[data-placement=top] .cad-popover__arrow{bottom:-6px;left:50%;margin-left:-5px;border-left:0;border-top:0}[data-placement=right] .cad-popover__arrow{left:-6px;top:50%;margin-top:-5px;border-right:0;border-top:0}[data-placement=left] .cad-popover__arrow{right:-6px;top:50%;margin-top:-5px;border-left:0;border-bottom:0}@keyframes cad-pop-in{0%{opacity:0;transform:scale(.98)}to{opacity:1;transform:none}}@media(prefers-reduced-motion:reduce){.cad-popover{animation:none}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
4989
+ `, isInline: true, styles: [".cad-popover{position:relative;background:var(--cad-overlay);--cad-hover: var(--cad-overlay-hover);border:1px solid var(--cad-border);border-radius:10px;box-shadow:var(--cad-shadow-lg);padding:10px 12px;color:var(--cad-fg);font-family:var(--cad-font);font-size:var(--cad-font-size);box-sizing:border-box;outline:none;animation:cad-pop-in .12s var(--cad-ease)}.cad-popover__arrow{position:absolute;width:10px;height:10px;background:inherit;border:1px solid var(--cad-border);transform:rotate(45deg)}[data-placement=bottom] .cad-popover__arrow{top:-6px;left:50%;margin-left:-5px;border-right:0;border-bottom:0}[data-placement=top] .cad-popover__arrow{bottom:-6px;left:50%;margin-left:-5px;border-left:0;border-top:0}[data-placement=right] .cad-popover__arrow{left:-6px;top:50%;margin-top:-5px;border-right:0;border-top:0}[data-placement=left] .cad-popover__arrow{right:-6px;top:50%;margin-top:-5px;border-left:0;border-bottom:0}@keyframes cad-pop-in{0%{opacity:0;transform:scale(.98)}to{opacity:1;transform:none}}@media(prefers-reduced-motion:reduce){.cad-popover{animation:none}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
4974
4990
  }
4975
4991
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: CadPopoverComponent, decorators: [{
4976
4992
  type: Component,
@@ -4982,7 +4998,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImpo
4982
4998
  <ng-content />
4983
4999
  </div>
4984
5000
  </ng-template>
4985
- `, styles: [".cad-popover{position:relative;background:var(--cad-overlay);border:1px solid var(--cad-border);border-radius:10px;box-shadow:var(--cad-shadow-lg);padding:10px 12px;color:var(--cad-fg);font-family:var(--cad-font);font-size:var(--cad-font-size);box-sizing:border-box;outline:none;animation:cad-pop-in .12s var(--cad-ease)}.cad-popover__arrow{position:absolute;width:10px;height:10px;background:inherit;border:1px solid var(--cad-border);transform:rotate(45deg)}[data-placement=bottom] .cad-popover__arrow{top:-6px;left:50%;margin-left:-5px;border-right:0;border-bottom:0}[data-placement=top] .cad-popover__arrow{bottom:-6px;left:50%;margin-left:-5px;border-left:0;border-top:0}[data-placement=right] .cad-popover__arrow{left:-6px;top:50%;margin-top:-5px;border-right:0;border-top:0}[data-placement=left] .cad-popover__arrow{right:-6px;top:50%;margin-top:-5px;border-left:0;border-bottom:0}@keyframes cad-pop-in{0%{opacity:0;transform:scale(.98)}to{opacity:1;transform:none}}@media(prefers-reduced-motion:reduce){.cad-popover{animation:none}}\n"] }]
5001
+ `, styles: [".cad-popover{position:relative;background:var(--cad-overlay);--cad-hover: var(--cad-overlay-hover);border:1px solid var(--cad-border);border-radius:10px;box-shadow:var(--cad-shadow-lg);padding:10px 12px;color:var(--cad-fg);font-family:var(--cad-font);font-size:var(--cad-font-size);box-sizing:border-box;outline:none;animation:cad-pop-in .12s var(--cad-ease)}.cad-popover__arrow{position:absolute;width:10px;height:10px;background:inherit;border:1px solid var(--cad-border);transform:rotate(45deg)}[data-placement=bottom] .cad-popover__arrow{top:-6px;left:50%;margin-left:-5px;border-right:0;border-bottom:0}[data-placement=top] .cad-popover__arrow{bottom:-6px;left:50%;margin-left:-5px;border-left:0;border-top:0}[data-placement=right] .cad-popover__arrow{left:-6px;top:50%;margin-top:-5px;border-right:0;border-top:0}[data-placement=left] .cad-popover__arrow{right:-6px;top:50%;margin-top:-5px;border-left:0;border-bottom:0}@keyframes cad-pop-in{0%{opacity:0;transform:scale(.98)}to{opacity:1;transform:none}}@media(prefers-reduced-motion:reduce){.cad-popover{animation:none}}\n"] }]
4986
5002
  }], propDecorators: { tpl: [{ type: i0.ViewChild, args: ['tpl', { isSignal: true }] }], placement: [{ type: i0.Input, args: [{ isSignal: true, alias: "placement", required: false }] }], align: [{ type: i0.Input, args: [{ isSignal: true, alias: "align", required: false }] }], offset: [{ type: i0.Input, args: [{ isSignal: true, alias: "offset", required: false }] }], dismissOnClickOutside: [{ type: i0.Input, args: [{ isSignal: true, alias: "dismissOnClickOutside", required: false }] }], closeOnEscape: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOnEscape", required: false }] }], focusTrap: [{ type: i0.Input, args: [{ isSignal: true, alias: "focusTrap", required: false }] }], showArrow: [{ type: i0.Input, args: [{ isSignal: true, alias: "showArrow", required: false }] }], hasBackdrop: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasBackdrop", required: false }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], minWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "minWidth", required: false }] }], mobile: [{ type: i0.Input, args: [{ isSignal: true, alias: "mobile", required: false }] }], sheetTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "sheetTitle", required: false }] }], visible: [{ type: i0.Input, args: [{ isSignal: true, alias: "visible", required: false }] }, { type: i0.Output, args: ["visibleChange"] }], opened: [{ type: i0.Output, args: ["opened"] }], closed: [{ type: i0.Output, args: ["closed"] }] } });
4987
5003
 
4988
5004
  /** Utilitaires date cadriciel-ui — zéro dépendance. Dates LOCALES (pas d'UTC). */
@@ -5824,7 +5840,7 @@ class CadDatepickerComponent extends CadValueAccessor {
5824
5840
  </div>
5825
5841
  }
5826
5842
  </ng-template>
5827
- `, isInline: true, styles: [":host{display:inline-block;width:100%;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg)}:host(.is-inline){width:auto}.cad-dp__box{display:flex;align-items:stretch;height:var(--cad-control-h);background:var(--cad-input-bg);border:1px solid var(--cad-input-border);border-radius:var(--cad-radius);transition:border-color var(--cad-dur),box-shadow var(--cad-dur);cursor:text}:host(.size-sm) .cad-dp__box{height:var(--cad-control-h-sm);font-size:var(--cad-font-size-sm);border-radius:var(--cad-radius-sm)}:host(.size-lg) .cad-dp__box{height:var(--cad-control-h-lg);font-size:var(--cad-font-size-lg)}.cad-dp__box:focus-within,:host(.is-open) .cad-dp__box{border-color:var(--cad-accent);box-shadow:0 0 0 3px var(--cad-ring)}:host(.is-invalid) .cad-dp__box{border-color:var(--cad-danger)}:host(.is-invalid) .cad-dp__box:focus-within{box-shadow:0 0 0 3px var(--cad-danger-soft)}:host(.is-disabled) .cad-dp__box{opacity:.6;background:var(--cad-bg-subtle);cursor:not-allowed}.cad-dp__input{flex:1 1 0;width:0;min-width:0;border:0;outline:0;background:transparent;color:inherit;font:inherit;padding:0 var(--cad-control-px);font-variant-numeric:tabular-nums;cursor:inherit}.cad-dp__input::placeholder{color:var(--cad-fg-muted)}.cad-dp__btn{border:0;background:transparent;color:var(--cad-fg-muted);cursor:pointer;padding:0 8px;display:grid;place-items:center}.cad-dp__btn:hover{color:var(--cad-fg)}.cad-dp__cal{padding-right:10px}.cad-dp__panel{background:var(--cad-overlay);border:1px solid var(--cad-border);border-radius:10px;box-shadow:var(--cad-shadow-lg);padding:10px;width:272px;box-sizing:border-box;-webkit-user-select:none;user-select:none}.cad-dp__panel.is-inline{box-shadow:none;background:var(--cad-surface)}.cad-dp__head{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px}.cad-dp__nav{width:26px;height:26px;border:0;border-radius:6px;background:transparent;color:var(--cad-fg-secondary);cursor:pointer;display:grid;place-items:center}.cad-dp__nav:hover{background:var(--cad-hover);color:var(--cad-fg)}.cad-dp__title{display:inline-flex;gap:4px;font-weight:600;text-transform:capitalize}.cad-dp__title button{border:0;background:transparent;color:inherit;font:inherit;font-weight:600;padding:3px 6px;border-radius:6px;cursor:pointer;text-transform:capitalize}.cad-dp__title button:hover{background:var(--cad-hover)}.cad-dp__grid{display:grid;gap:2px}.cad-dp__row{display:grid;grid-template-columns:repeat(7,1fr);gap:2px}.has-week .cad-dp__row{grid-template-columns:22px repeat(7,1fr)}.cad-dp__weekdays span{font-size:10.5px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--cad-fg-muted);text-align:center;height:22px;line-height:22px}.cad-dp__wk{font:10px var(--cad-font-mono);color:var(--cad-fg-muted);text-align:center;align-self:center}.cad-dp__day{position:relative;height:32px;border:0;border-radius:7px;background:transparent;color:var(--cad-fg);font:inherit;font-size:12.5px;cursor:pointer;font-variant-numeric:tabular-nums}.cad-dp__day:hover:not([disabled]){background:var(--cad-hover)}.cad-dp__day:focus-visible{outline:2px solid var(--cad-ring);outline-offset:-1px}.cad-dp__day.is-out{color:var(--cad-fg-muted);opacity:.7}.cad-dp__day.is-today:after{content:\"\";position:absolute;left:50%;bottom:4px;width:4px;height:4px;margin-left:-2px;border-radius:50%;background:var(--cad-accent)}.cad-dp__day.in-range,.cad-dp__day.is-hover-range{background:var(--cad-accent-soft);border-radius:0;color:var(--cad-fg)}.cad-dp__day.range-start{border-radius:7px 0 0 7px}.cad-dp__day.range-end{border-radius:0 7px 7px 0}.cad-dp__day.range-start.range-end{border-radius:7px}.cad-dp__day.is-sel{background:var(--cad-accent);color:var(--cad-fg-on-accent);font-weight:600}.cad-dp__day.is-sel.is-today:after{background:var(--cad-fg-on-accent)}.cad-dp__day[disabled]{color:var(--cad-fg-muted);opacity:.45;cursor:not-allowed;text-decoration:line-through}.cad-dp__cells{display:grid;grid-template-columns:repeat(3,1fr);gap:4px}.cad-dp__cells button{height:36px;border:0;border-radius:7px;background:transparent;color:var(--cad-fg);font:inherit;cursor:pointer;text-transform:capitalize}.cad-dp__cells button:hover:not([disabled]){background:var(--cad-hover)}.cad-dp__cells button.is-now{color:var(--cad-accent);font-weight:600}.cad-dp__cells button.is-sel{background:var(--cad-accent);color:var(--cad-fg-on-accent);font-weight:600}.cad-dp__cells button[disabled]{opacity:.45;cursor:not-allowed}.cad-dp__time{display:flex;align-items:center;justify-content:center;gap:4px;padding-top:8px}.cad-dp__time.has-border{border-top:1px solid var(--cad-border);margin-top:8px}.cad-dp__spin{display:flex;flex-direction:column;align-items:center}.cad-dp__spin button{width:28px;height:20px;border:0;background:transparent;color:var(--cad-fg-muted);cursor:pointer;display:grid;place-items:center;border-radius:5px}.cad-dp__spin button:hover{background:var(--cad-hover);color:var(--cad-fg)}.cad-dp__spin input{width:36px;height:28px;text-align:center;border:1px solid var(--cad-input-border);border-radius:6px;background:var(--cad-input-bg);color:var(--cad-fg);font:500 14px var(--cad-font-mono);outline:0}.cad-dp__spin input:focus{border-color:var(--cad-accent);box-shadow:0 0 0 3px var(--cad-ring)}.cad-dp__colon{font-weight:600;color:var(--cad-fg-muted)}.cad-dp__ampm{margin-left:6px;height:28px;padding:0 8px;border:1px solid var(--cad-input-border);border-radius:6px;background:transparent;color:var(--cad-fg);font:600 11px var(--cad-font);cursor:pointer}.cad-dp__bar{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:8px;padding-top:8px;border-top:1px solid var(--cad-border)}.cad-dp__bar button{border:0;background:transparent;color:var(--cad-accent);font:500 12px var(--cad-font);padding:4px 8px;border-radius:6px;cursor:pointer}.cad-dp__bar button:hover{background:var(--cad-accent-soft)}.cad-dp__bar button.is-muted{color:var(--cad-fg-secondary)}.cad-dp__bar button.is-muted:hover{background:var(--cad-hover)}.cad-dp__bar button.is-ok{margin-left:auto;background:var(--cad-accent);color:var(--cad-fg-on-accent);padding:8px 18px;font-size:var(--cad-font-size)}.cad-dp__bar button.is-ok:hover{background:var(--cad-accent-hover)}.cad-dp__panel.is-sheet .cad-dp__bar button{min-height:40px}.cad-dp__count{font-size:11px;color:var(--cad-fg-muted)}\n"], dependencies: [{ kind: "component", type: CadIconComponent, selector: "cad-icon", inputs: ["name", "size", "strokeWidth", "label", "title", "spin", "filled", "flip", "rotate"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation", "cdkConnectedOverlayUsePopover", "cdkConnectedOverlayMatchWidth", "cdkConnectedOverlay"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
5843
+ `, isInline: true, styles: [":host{display:inline-block;width:100%;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg)}:host(.is-inline){width:auto}.cad-dp__box{display:flex;align-items:stretch;height:var(--cad-control-h);background:var(--cad-input-bg);border:1px solid var(--cad-input-border);border-radius:var(--cad-radius);transition:border-color var(--cad-dur),box-shadow var(--cad-dur);cursor:text}:host(.size-sm) .cad-dp__box{height:var(--cad-control-h-sm);font-size:var(--cad-font-size-sm);border-radius:var(--cad-radius-sm)}:host(.size-lg) .cad-dp__box{height:var(--cad-control-h-lg);font-size:var(--cad-font-size-lg)}.cad-dp__box:focus-within,:host(.is-open) .cad-dp__box{border-color:var(--cad-accent);box-shadow:0 0 0 3px var(--cad-ring)}:host(.is-invalid) .cad-dp__box{border-color:var(--cad-danger)}:host(.is-invalid) .cad-dp__box:focus-within{box-shadow:0 0 0 3px var(--cad-danger-soft)}:host(.is-disabled) .cad-dp__box{opacity:.6;background:var(--cad-bg-subtle);cursor:not-allowed}.cad-dp__input{flex:1 1 0;width:0;min-width:0;border:0;outline:0;background:transparent;color:inherit;font:inherit;padding:0 var(--cad-control-px);font-variant-numeric:tabular-nums;cursor:inherit}.cad-dp__input::placeholder{color:var(--cad-fg-muted)}.cad-dp__btn{border:0;background:transparent;color:var(--cad-fg-muted);cursor:pointer;padding:0 8px;display:grid;place-items:center}.cad-dp__btn:hover{color:var(--cad-fg)}.cad-dp__cal{padding-right:10px}.cad-dp__panel{background:var(--cad-overlay);--cad-hover: var(--cad-overlay-hover);border:1px solid var(--cad-border);border-radius:10px;box-shadow:var(--cad-shadow-lg);padding:10px;width:272px;box-sizing:border-box;-webkit-user-select:none;user-select:none}.cad-dp__panel.is-inline{box-shadow:none;background:var(--cad-surface)}.cad-dp__head{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px}.cad-dp__nav{width:26px;height:26px;border:0;border-radius:6px;background:transparent;color:var(--cad-fg-secondary);cursor:pointer;display:grid;place-items:center}.cad-dp__nav:hover{background:var(--cad-hover);color:var(--cad-fg)}.cad-dp__title{display:inline-flex;gap:4px;font-weight:600;text-transform:capitalize}.cad-dp__title button{border:0;background:transparent;color:inherit;font:inherit;font-weight:600;padding:3px 6px;border-radius:6px;cursor:pointer;text-transform:capitalize}.cad-dp__title button:hover{background:var(--cad-hover)}.cad-dp__grid{display:grid;gap:2px}.cad-dp__row{display:grid;grid-template-columns:repeat(7,1fr);gap:2px}.has-week .cad-dp__row{grid-template-columns:22px repeat(7,1fr)}.cad-dp__weekdays span{font-size:10.5px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--cad-fg-muted);text-align:center;height:22px;line-height:22px}.cad-dp__wk{font:10px var(--cad-font-mono);color:var(--cad-fg-muted);text-align:center;align-self:center}.cad-dp__day{position:relative;height:32px;border:0;border-radius:7px;background:transparent;color:var(--cad-fg);font:inherit;font-size:12.5px;cursor:pointer;font-variant-numeric:tabular-nums}.cad-dp__day:hover:not([disabled]){background:var(--cad-hover)}.cad-dp__day:focus-visible{outline:2px solid var(--cad-ring);outline-offset:-1px}.cad-dp__day.is-out{color:var(--cad-fg-muted);opacity:.7}.cad-dp__day.is-today:after{content:\"\";position:absolute;left:50%;bottom:4px;width:4px;height:4px;margin-left:-2px;border-radius:50%;background:var(--cad-accent)}.cad-dp__day.in-range,.cad-dp__day.is-hover-range{background:var(--cad-accent-soft);border-radius:0;color:var(--cad-fg)}.cad-dp__day.range-start{border-radius:7px 0 0 7px}.cad-dp__day.range-end{border-radius:0 7px 7px 0}.cad-dp__day.range-start.range-end{border-radius:7px}.cad-dp__day.is-sel{background:var(--cad-accent);color:var(--cad-fg-on-accent);font-weight:600}.cad-dp__day.is-sel.is-today:after{background:var(--cad-fg-on-accent)}.cad-dp__day[disabled]{color:var(--cad-fg-muted);opacity:.45;cursor:not-allowed;text-decoration:line-through}.cad-dp__cells{display:grid;grid-template-columns:repeat(3,1fr);gap:4px}.cad-dp__cells button{height:36px;border:0;border-radius:7px;background:transparent;color:var(--cad-fg);font:inherit;cursor:pointer;text-transform:capitalize}.cad-dp__cells button:hover:not([disabled]){background:var(--cad-hover)}.cad-dp__cells button.is-now{color:var(--cad-accent);font-weight:600}.cad-dp__cells button.is-sel{background:var(--cad-accent);color:var(--cad-fg-on-accent);font-weight:600}.cad-dp__cells button[disabled]{opacity:.45;cursor:not-allowed}.cad-dp__time{display:flex;align-items:center;justify-content:center;gap:4px;padding-top:8px}.cad-dp__time.has-border{border-top:1px solid var(--cad-border);margin-top:8px}.cad-dp__spin{display:flex;flex-direction:column;align-items:center}.cad-dp__spin button{width:28px;height:20px;border:0;background:transparent;color:var(--cad-fg-muted);cursor:pointer;display:grid;place-items:center;border-radius:5px}.cad-dp__spin button:hover{background:var(--cad-hover);color:var(--cad-fg)}.cad-dp__spin input{width:36px;height:28px;text-align:center;border:1px solid var(--cad-input-border);border-radius:6px;background:var(--cad-input-bg);color:var(--cad-fg);font:500 14px var(--cad-font-mono);outline:0}.cad-dp__spin input:focus{border-color:var(--cad-accent);box-shadow:0 0 0 3px var(--cad-ring)}.cad-dp__colon{font-weight:600;color:var(--cad-fg-muted)}.cad-dp__ampm{margin-left:6px;height:28px;padding:0 8px;border:1px solid var(--cad-input-border);border-radius:6px;background:transparent;color:var(--cad-fg);font:600 11px var(--cad-font);cursor:pointer}.cad-dp__bar{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:8px;padding-top:8px;border-top:1px solid var(--cad-border)}.cad-dp__bar button{border:0;background:transparent;color:var(--cad-accent);font:500 12px var(--cad-font);padding:4px 8px;border-radius:6px;cursor:pointer}.cad-dp__bar button:hover{background:var(--cad-accent-soft)}.cad-dp__bar button.is-muted{color:var(--cad-fg-secondary)}.cad-dp__bar button.is-muted:hover{background:var(--cad-hover)}.cad-dp__bar button.is-ok{margin-left:auto;background:var(--cad-accent);color:var(--cad-fg-on-accent);padding:8px 18px;font-size:var(--cad-font-size)}.cad-dp__bar button.is-ok:hover{background:var(--cad-accent-hover)}.cad-dp__panel.is-sheet .cad-dp__bar button{min-height:40px}.cad-dp__count{font-size:11px;color:var(--cad-fg-muted)}\n"], dependencies: [{ kind: "component", type: CadIconComponent, selector: "cad-icon", inputs: ["name", "size", "strokeWidth", "label", "title", "spin", "filled", "flip", "rotate"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation", "cdkConnectedOverlayUsePopover", "cdkConnectedOverlayMatchWidth", "cdkConnectedOverlay"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
5828
5844
  }
5829
5845
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: CadDatepickerComponent, decorators: [{
5830
5846
  type: Component,
@@ -5954,7 +5970,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImpo
5954
5970
  </div>
5955
5971
  }
5956
5972
  </ng-template>
5957
- `, styles: [":host{display:inline-block;width:100%;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg)}:host(.is-inline){width:auto}.cad-dp__box{display:flex;align-items:stretch;height:var(--cad-control-h);background:var(--cad-input-bg);border:1px solid var(--cad-input-border);border-radius:var(--cad-radius);transition:border-color var(--cad-dur),box-shadow var(--cad-dur);cursor:text}:host(.size-sm) .cad-dp__box{height:var(--cad-control-h-sm);font-size:var(--cad-font-size-sm);border-radius:var(--cad-radius-sm)}:host(.size-lg) .cad-dp__box{height:var(--cad-control-h-lg);font-size:var(--cad-font-size-lg)}.cad-dp__box:focus-within,:host(.is-open) .cad-dp__box{border-color:var(--cad-accent);box-shadow:0 0 0 3px var(--cad-ring)}:host(.is-invalid) .cad-dp__box{border-color:var(--cad-danger)}:host(.is-invalid) .cad-dp__box:focus-within{box-shadow:0 0 0 3px var(--cad-danger-soft)}:host(.is-disabled) .cad-dp__box{opacity:.6;background:var(--cad-bg-subtle);cursor:not-allowed}.cad-dp__input{flex:1 1 0;width:0;min-width:0;border:0;outline:0;background:transparent;color:inherit;font:inherit;padding:0 var(--cad-control-px);font-variant-numeric:tabular-nums;cursor:inherit}.cad-dp__input::placeholder{color:var(--cad-fg-muted)}.cad-dp__btn{border:0;background:transparent;color:var(--cad-fg-muted);cursor:pointer;padding:0 8px;display:grid;place-items:center}.cad-dp__btn:hover{color:var(--cad-fg)}.cad-dp__cal{padding-right:10px}.cad-dp__panel{background:var(--cad-overlay);border:1px solid var(--cad-border);border-radius:10px;box-shadow:var(--cad-shadow-lg);padding:10px;width:272px;box-sizing:border-box;-webkit-user-select:none;user-select:none}.cad-dp__panel.is-inline{box-shadow:none;background:var(--cad-surface)}.cad-dp__head{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px}.cad-dp__nav{width:26px;height:26px;border:0;border-radius:6px;background:transparent;color:var(--cad-fg-secondary);cursor:pointer;display:grid;place-items:center}.cad-dp__nav:hover{background:var(--cad-hover);color:var(--cad-fg)}.cad-dp__title{display:inline-flex;gap:4px;font-weight:600;text-transform:capitalize}.cad-dp__title button{border:0;background:transparent;color:inherit;font:inherit;font-weight:600;padding:3px 6px;border-radius:6px;cursor:pointer;text-transform:capitalize}.cad-dp__title button:hover{background:var(--cad-hover)}.cad-dp__grid{display:grid;gap:2px}.cad-dp__row{display:grid;grid-template-columns:repeat(7,1fr);gap:2px}.has-week .cad-dp__row{grid-template-columns:22px repeat(7,1fr)}.cad-dp__weekdays span{font-size:10.5px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--cad-fg-muted);text-align:center;height:22px;line-height:22px}.cad-dp__wk{font:10px var(--cad-font-mono);color:var(--cad-fg-muted);text-align:center;align-self:center}.cad-dp__day{position:relative;height:32px;border:0;border-radius:7px;background:transparent;color:var(--cad-fg);font:inherit;font-size:12.5px;cursor:pointer;font-variant-numeric:tabular-nums}.cad-dp__day:hover:not([disabled]){background:var(--cad-hover)}.cad-dp__day:focus-visible{outline:2px solid var(--cad-ring);outline-offset:-1px}.cad-dp__day.is-out{color:var(--cad-fg-muted);opacity:.7}.cad-dp__day.is-today:after{content:\"\";position:absolute;left:50%;bottom:4px;width:4px;height:4px;margin-left:-2px;border-radius:50%;background:var(--cad-accent)}.cad-dp__day.in-range,.cad-dp__day.is-hover-range{background:var(--cad-accent-soft);border-radius:0;color:var(--cad-fg)}.cad-dp__day.range-start{border-radius:7px 0 0 7px}.cad-dp__day.range-end{border-radius:0 7px 7px 0}.cad-dp__day.range-start.range-end{border-radius:7px}.cad-dp__day.is-sel{background:var(--cad-accent);color:var(--cad-fg-on-accent);font-weight:600}.cad-dp__day.is-sel.is-today:after{background:var(--cad-fg-on-accent)}.cad-dp__day[disabled]{color:var(--cad-fg-muted);opacity:.45;cursor:not-allowed;text-decoration:line-through}.cad-dp__cells{display:grid;grid-template-columns:repeat(3,1fr);gap:4px}.cad-dp__cells button{height:36px;border:0;border-radius:7px;background:transparent;color:var(--cad-fg);font:inherit;cursor:pointer;text-transform:capitalize}.cad-dp__cells button:hover:not([disabled]){background:var(--cad-hover)}.cad-dp__cells button.is-now{color:var(--cad-accent);font-weight:600}.cad-dp__cells button.is-sel{background:var(--cad-accent);color:var(--cad-fg-on-accent);font-weight:600}.cad-dp__cells button[disabled]{opacity:.45;cursor:not-allowed}.cad-dp__time{display:flex;align-items:center;justify-content:center;gap:4px;padding-top:8px}.cad-dp__time.has-border{border-top:1px solid var(--cad-border);margin-top:8px}.cad-dp__spin{display:flex;flex-direction:column;align-items:center}.cad-dp__spin button{width:28px;height:20px;border:0;background:transparent;color:var(--cad-fg-muted);cursor:pointer;display:grid;place-items:center;border-radius:5px}.cad-dp__spin button:hover{background:var(--cad-hover);color:var(--cad-fg)}.cad-dp__spin input{width:36px;height:28px;text-align:center;border:1px solid var(--cad-input-border);border-radius:6px;background:var(--cad-input-bg);color:var(--cad-fg);font:500 14px var(--cad-font-mono);outline:0}.cad-dp__spin input:focus{border-color:var(--cad-accent);box-shadow:0 0 0 3px var(--cad-ring)}.cad-dp__colon{font-weight:600;color:var(--cad-fg-muted)}.cad-dp__ampm{margin-left:6px;height:28px;padding:0 8px;border:1px solid var(--cad-input-border);border-radius:6px;background:transparent;color:var(--cad-fg);font:600 11px var(--cad-font);cursor:pointer}.cad-dp__bar{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:8px;padding-top:8px;border-top:1px solid var(--cad-border)}.cad-dp__bar button{border:0;background:transparent;color:var(--cad-accent);font:500 12px var(--cad-font);padding:4px 8px;border-radius:6px;cursor:pointer}.cad-dp__bar button:hover{background:var(--cad-accent-soft)}.cad-dp__bar button.is-muted{color:var(--cad-fg-secondary)}.cad-dp__bar button.is-muted:hover{background:var(--cad-hover)}.cad-dp__bar button.is-ok{margin-left:auto;background:var(--cad-accent);color:var(--cad-fg-on-accent);padding:8px 18px;font-size:var(--cad-font-size)}.cad-dp__bar button.is-ok:hover{background:var(--cad-accent-hover)}.cad-dp__panel.is-sheet .cad-dp__bar button{min-height:40px}.cad-dp__count{font-size:11px;color:var(--cad-fg-muted)}\n"] }]
5973
+ `, styles: [":host{display:inline-block;width:100%;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg)}:host(.is-inline){width:auto}.cad-dp__box{display:flex;align-items:stretch;height:var(--cad-control-h);background:var(--cad-input-bg);border:1px solid var(--cad-input-border);border-radius:var(--cad-radius);transition:border-color var(--cad-dur),box-shadow var(--cad-dur);cursor:text}:host(.size-sm) .cad-dp__box{height:var(--cad-control-h-sm);font-size:var(--cad-font-size-sm);border-radius:var(--cad-radius-sm)}:host(.size-lg) .cad-dp__box{height:var(--cad-control-h-lg);font-size:var(--cad-font-size-lg)}.cad-dp__box:focus-within,:host(.is-open) .cad-dp__box{border-color:var(--cad-accent);box-shadow:0 0 0 3px var(--cad-ring)}:host(.is-invalid) .cad-dp__box{border-color:var(--cad-danger)}:host(.is-invalid) .cad-dp__box:focus-within{box-shadow:0 0 0 3px var(--cad-danger-soft)}:host(.is-disabled) .cad-dp__box{opacity:.6;background:var(--cad-bg-subtle);cursor:not-allowed}.cad-dp__input{flex:1 1 0;width:0;min-width:0;border:0;outline:0;background:transparent;color:inherit;font:inherit;padding:0 var(--cad-control-px);font-variant-numeric:tabular-nums;cursor:inherit}.cad-dp__input::placeholder{color:var(--cad-fg-muted)}.cad-dp__btn{border:0;background:transparent;color:var(--cad-fg-muted);cursor:pointer;padding:0 8px;display:grid;place-items:center}.cad-dp__btn:hover{color:var(--cad-fg)}.cad-dp__cal{padding-right:10px}.cad-dp__panel{background:var(--cad-overlay);--cad-hover: var(--cad-overlay-hover);border:1px solid var(--cad-border);border-radius:10px;box-shadow:var(--cad-shadow-lg);padding:10px;width:272px;box-sizing:border-box;-webkit-user-select:none;user-select:none}.cad-dp__panel.is-inline{box-shadow:none;background:var(--cad-surface)}.cad-dp__head{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px}.cad-dp__nav{width:26px;height:26px;border:0;border-radius:6px;background:transparent;color:var(--cad-fg-secondary);cursor:pointer;display:grid;place-items:center}.cad-dp__nav:hover{background:var(--cad-hover);color:var(--cad-fg)}.cad-dp__title{display:inline-flex;gap:4px;font-weight:600;text-transform:capitalize}.cad-dp__title button{border:0;background:transparent;color:inherit;font:inherit;font-weight:600;padding:3px 6px;border-radius:6px;cursor:pointer;text-transform:capitalize}.cad-dp__title button:hover{background:var(--cad-hover)}.cad-dp__grid{display:grid;gap:2px}.cad-dp__row{display:grid;grid-template-columns:repeat(7,1fr);gap:2px}.has-week .cad-dp__row{grid-template-columns:22px repeat(7,1fr)}.cad-dp__weekdays span{font-size:10.5px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--cad-fg-muted);text-align:center;height:22px;line-height:22px}.cad-dp__wk{font:10px var(--cad-font-mono);color:var(--cad-fg-muted);text-align:center;align-self:center}.cad-dp__day{position:relative;height:32px;border:0;border-radius:7px;background:transparent;color:var(--cad-fg);font:inherit;font-size:12.5px;cursor:pointer;font-variant-numeric:tabular-nums}.cad-dp__day:hover:not([disabled]){background:var(--cad-hover)}.cad-dp__day:focus-visible{outline:2px solid var(--cad-ring);outline-offset:-1px}.cad-dp__day.is-out{color:var(--cad-fg-muted);opacity:.7}.cad-dp__day.is-today:after{content:\"\";position:absolute;left:50%;bottom:4px;width:4px;height:4px;margin-left:-2px;border-radius:50%;background:var(--cad-accent)}.cad-dp__day.in-range,.cad-dp__day.is-hover-range{background:var(--cad-accent-soft);border-radius:0;color:var(--cad-fg)}.cad-dp__day.range-start{border-radius:7px 0 0 7px}.cad-dp__day.range-end{border-radius:0 7px 7px 0}.cad-dp__day.range-start.range-end{border-radius:7px}.cad-dp__day.is-sel{background:var(--cad-accent);color:var(--cad-fg-on-accent);font-weight:600}.cad-dp__day.is-sel.is-today:after{background:var(--cad-fg-on-accent)}.cad-dp__day[disabled]{color:var(--cad-fg-muted);opacity:.45;cursor:not-allowed;text-decoration:line-through}.cad-dp__cells{display:grid;grid-template-columns:repeat(3,1fr);gap:4px}.cad-dp__cells button{height:36px;border:0;border-radius:7px;background:transparent;color:var(--cad-fg);font:inherit;cursor:pointer;text-transform:capitalize}.cad-dp__cells button:hover:not([disabled]){background:var(--cad-hover)}.cad-dp__cells button.is-now{color:var(--cad-accent);font-weight:600}.cad-dp__cells button.is-sel{background:var(--cad-accent);color:var(--cad-fg-on-accent);font-weight:600}.cad-dp__cells button[disabled]{opacity:.45;cursor:not-allowed}.cad-dp__time{display:flex;align-items:center;justify-content:center;gap:4px;padding-top:8px}.cad-dp__time.has-border{border-top:1px solid var(--cad-border);margin-top:8px}.cad-dp__spin{display:flex;flex-direction:column;align-items:center}.cad-dp__spin button{width:28px;height:20px;border:0;background:transparent;color:var(--cad-fg-muted);cursor:pointer;display:grid;place-items:center;border-radius:5px}.cad-dp__spin button:hover{background:var(--cad-hover);color:var(--cad-fg)}.cad-dp__spin input{width:36px;height:28px;text-align:center;border:1px solid var(--cad-input-border);border-radius:6px;background:var(--cad-input-bg);color:var(--cad-fg);font:500 14px var(--cad-font-mono);outline:0}.cad-dp__spin input:focus{border-color:var(--cad-accent);box-shadow:0 0 0 3px var(--cad-ring)}.cad-dp__colon{font-weight:600;color:var(--cad-fg-muted)}.cad-dp__ampm{margin-left:6px;height:28px;padding:0 8px;border:1px solid var(--cad-input-border);border-radius:6px;background:transparent;color:var(--cad-fg);font:600 11px var(--cad-font);cursor:pointer}.cad-dp__bar{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:8px;padding-top:8px;border-top:1px solid var(--cad-border)}.cad-dp__bar button{border:0;background:transparent;color:var(--cad-accent);font:500 12px var(--cad-font);padding:4px 8px;border-radius:6px;cursor:pointer}.cad-dp__bar button:hover{background:var(--cad-accent-soft)}.cad-dp__bar button.is-muted{color:var(--cad-fg-secondary)}.cad-dp__bar button.is-muted:hover{background:var(--cad-hover)}.cad-dp__bar button.is-ok{margin-left:auto;background:var(--cad-accent);color:var(--cad-fg-on-accent);padding:8px 18px;font-size:var(--cad-font-size)}.cad-dp__bar button.is-ok:hover{background:var(--cad-accent-hover)}.cad-dp__panel.is-sheet .cad-dp__bar button{min-height:40px}.cad-dp__count{font-size:11px;color:var(--cad-fg-muted)}\n"] }]
5958
5974
  }], ctorParameters: () => [], propDecorators: { mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], selectionMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectionMode", required: false }] }], dataType: [{ type: i0.Input, args: [{ isSignal: true, alias: "dataType", required: false }] }], format: [{ type: i0.Input, args: [{ isSignal: true, alias: "format", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], disabledDates: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabledDates", required: false }] }], disabledDays: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabledDays", required: false }] }], showIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "showIcon", required: false }] }], inline: [{ type: i0.Input, args: [{ isSignal: true, alias: "inline", required: false }] }], showTime: [{ type: i0.Input, args: [{ isSignal: true, alias: "showTime", required: false }] }], hourFormat: [{ type: i0.Input, args: [{ isSignal: true, alias: "hourFormat", required: false }] }], stepMinute: [{ type: i0.Input, args: [{ isSignal: true, alias: "stepMinute", required: false }] }], showSeconds: [{ type: i0.Input, args: [{ isSignal: true, alias: "showSeconds", required: false }] }], showButtonBar: [{ type: i0.Input, args: [{ isSignal: true, alias: "showButtonBar", required: false }] }], showWeek: [{ type: i0.Input, args: [{ isSignal: true, alias: "showWeek", required: false }] }], firstDayOfWeek: [{ type: i0.Input, args: [{ isSignal: true, alias: "firstDayOfWeek", required: false }] }], locale: [{ type: i0.Input, args: [{ isSignal: true, alias: "locale", required: false }] }], readonlyInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonlyInput", required: false }] }], manualInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "manualInput", required: false }] }], clearable: [{ type: i0.Input, args: [{ isSignal: true, alias: "clearable", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], invalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], closeOnSelect: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOnSelect", required: false }] }], mobile: [{ type: i0.Input, args: [{ isSignal: true, alias: "mobile", required: false }] }], changed: [{ type: i0.Output, args: ["changed"] }], opened: [{ type: i0.Output, args: ["opened"] }], closed: [{ type: i0.Output, args: ["closed"] }], monthChange: [{ type: i0.Output, args: ["monthChange"] }], yearChange: [{ type: i0.Output, args: ["yearChange"] }], cleared: [{ type: i0.Output, args: ["cleared"] }], todayClick: [{ type: i0.Output, args: ["todayClick"] }], panelTpl: [{ type: i0.ViewChild, args: ['panelTpl', { isSignal: true }] }], inp: [{ type: i0.ViewChild, args: ['inp', { isSignal: true }] }] } });
5959
5975
 
5960
5976
  /** 'sm' → var(--cad-gap-sm) ; '12px' → 12px ; 'none' → 0. */
@@ -6314,6 +6330,44 @@ const CAD_SHELL = new InjectionToken('CAD_SHELL');
6314
6330
  * <cad-bottom-nav cadShellBottom [items]="dest" [(value)]="page"/>
6315
6331
  * </cad-app-shell>
6316
6332
  * ```
6333
+ *
6334
+ * ⚠️ N'ENVELOPPEZ JAMAIS UN EMPLACEMENT DANS UN `@if` (ni `@for`, ni `<ng-template>`).
6335
+ *
6336
+ * La projection de contenu est STATIQUE : Angular apparie les nœuds aux sélecteurs de
6337
+ * `ng-content` sur la structure déclarée. Un `<header cadShellBar>` placé dans un bloc de
6338
+ * flux de contrôle n'est jamais apparié — il tombe dans l'emplacement PAR DÉFAUT, donc dans
6339
+ * la zone de CONTENU. Rien ne le signale : ça compile, ça s'affiche, et la barre se met à
6340
+ * défiler avec le contenu — exactement le défaut que cette coquille existe pour empêcher.
6341
+ * Constaté au navigateur le 22/08/2026 sur le showcase (`.cad-shell__bar` mesurait 0×0).
6342
+ *
6343
+ * ```html
6344
+ * <!-- FAUX : la barre atterrit dans le contenu -->
6345
+ * @if (connecte()) { <header cadShellBar>…</header> }
6346
+ *
6347
+ * <!-- JUSTE : l'emplacement est toujours rendu, c'est son CONTENU qui varie -->
6348
+ * <header cadShellBar [class.est-masque]="!connecte()">…</header>
6349
+ * ```
6350
+ *
6351
+ * Une rangée ou une colonne `auto` dont l'unique enfant est en `display: none` se replie à
6352
+ * zéro : masquer ainsi ne laisse aucune trace dans la mise en page.
6353
+ *
6354
+ * ⚠️ ZONES SÛRES — DEUX CONDITIONS, ET LA PREMIÈRE EST DANS `index.html`.
6355
+ *
6356
+ * 1. **`<meta name="viewport" content="…, viewport-fit=cover">`**. Sans lui, iOS encadre la
6357
+ * page : elle ne s'étend jamais sous l'encoche, la bande du haut est peinte par le SYSTÈME,
6358
+ * et **tous les `env(safe-area-inset-*)` valent 0**. Toute la mécanique de zone sûre de la
6359
+ * bibliothèque — celle de `cad-bottom-nav`, celle du tiroir en mode temporaire — est alors
6360
+ * inerte sans que rien ne le signale.
6361
+ * 2. **La barre peint sa propre zone sûre haute** : `padding-top: env(safe-area-inset-top)`
6362
+ * sur l'élément projeté, PAS sur la coquille. Le rembourrage est intérieur au fond, donc la
6363
+ * couleur de la barre monte jusqu'au bord de l'écran. Le poser côté coquille laisserait la
6364
+ * bande sous l'encoche au fond de la COQUILLE : la cassure resterait, d'une autre couleur.
6365
+ * Avec `box-sizing: border-box`, penser au `min-height: calc(52px + env(safe-area-inset-top))`
6366
+ * — sinon l'encoche mange la hauteur du contenu.
6367
+ *
6368
+ * En application autonome (ajoutée à l'écran d'accueil), la page ne passe pas sous la bande
6369
+ * d'état : `viewport-fit=cover` n'y suffit pas et c'est `<meta name="theme-color">`, tenu à
6370
+ * jour avec le thème, qui donne la continuité.
6317
6371
  */
6318
6372
  class CadAppShellComponent {
6319
6373
  bp = inject(CadBreakpointService);
@@ -6672,7 +6726,7 @@ const CAD_TABLE_STYLES = `
6672
6726
  .dt-bar__btn.is-ghost { border-color: transparent; width: 26px; padding: 0; }
6673
6727
  .dt-bar__btn.is-on { color: var(--cad-accent); background: var(--cad-accent-soft); }
6674
6728
  .dt-bar__cols { position: relative; }
6675
- .dt-bar__menu { position: absolute; right: 0; top: calc(100% + 6px); z-index: 20; min-width: 200px; max-height: 280px; overflow: auto; background: var(--cad-overlay); border: 1px solid var(--cad-border); border-radius: 9px; box-shadow: var(--cad-shadow-lg); padding: 4px; }
6729
+ .dt-bar__menu { position: absolute; right: 0; top: calc(100% + 6px); z-index: 20; min-width: 200px; max-height: 280px; overflow: auto; background: var(--cad-overlay); --cad-hover: var(--cad-overlay-hover); border: 1px solid var(--cad-border); border-radius: 9px; box-shadow: var(--cad-shadow-lg); padding: 4px; }
6676
6730
  .dt-bar__menu label { display: flex; align-items: center; gap: 8px; padding: 6px 8px; border-radius: 6px; cursor: pointer; font-size: var(--cad-font-size); }
6677
6731
  .dt-bar__menu label:hover { background: var(--cad-hover); }
6678
6732
  .dt-bar__menu label.is-locked { opacity: .5; cursor: default; }
@@ -6869,7 +6923,7 @@ const CAD_TABLE_STYLES_3 = `
6869
6923
  :host(.is-reorderable) .tbl th.can-drag:hover .dh, :host(.is-reorderable) .tbl th.can-drag.cdk-drag-dragging .dh { display: grid; }
6870
6924
  .tbl th.cdk-drag-placeholder { opacity: .35; background: var(--cad-accent-soft); }
6871
6925
  .tbl th.cdk-drag-placeholder::before { content: ''; position: absolute; left: -1px; top: 4px; bottom: 4px; width: 2px; background: var(--cad-accent); }
6872
- .cdk-drag-preview.dt-th-preview { display: flex; align-items: center; height: 38px; padding: 0 12px; box-sizing: border-box; font: 600 var(--cad-font-size-sm) var(--cad-font); color: var(--cad-fg); background: var(--cad-overlay); border: 1px solid var(--cad-border); border-radius: 6px; box-shadow: var(--cad-shadow-lg); list-style: none; }
6926
+ .cdk-drag-preview.dt-th-preview { display: flex; align-items: center; height: 38px; padding: 0 12px; box-sizing: border-box; font: 600 var(--cad-font-size-sm) var(--cad-font); color: var(--cad-fg); background: var(--cad-overlay); --cad-hover: var(--cad-overlay-hover); border: 1px solid var(--cad-border); border-radius: 6px; box-shadow: var(--cad-shadow-lg); list-style: none; }
6873
6927
  .tbl thead tr.cdk-drop-list-dragging th:not(.cdk-drag-placeholder) { transition: transform 200ms cubic-bezier(0, 0, 0.2, 1); }
6874
6928
  .tbl th.cdk-drag-animating { transition: transform 200ms cubic-bezier(0, 0, 0.2, 1); }
6875
6929
  .dt-bar__menu .mv { display: inline-flex; gap: 0; margin-left: auto; }
@@ -6976,7 +7030,7 @@ const CAD_TABLE_STYLES_4 = `
6976
7030
  .tbl tr.dt-row.cdk-drag-placeholder { opacity: 0; }
6977
7031
  .tbl tbody.cdk-drop-list-dragging tr.dt-row:not(.cdk-drag-placeholder) { transition: transform 200ms cubic-bezier(0, 0, 0.2, 1); }
6978
7032
  .tbl tr.dt-row.cdk-drag-placeholder td { border-top: 2px solid var(--cad-accent); }
6979
- .cdk-drag-preview.dt-tr-preview { display: table; table-layout: fixed; box-sizing: border-box; background: var(--cad-overlay); border: 1px solid var(--cad-border); border-radius: 8px; box-shadow: var(--cad-shadow-lg); opacity: .95; font: var(--cad-font-size)/1.4 var(--cad-font); color: var(--cad-fg); }
7033
+ .cdk-drag-preview.dt-tr-preview { display: table; table-layout: fixed; box-sizing: border-box; background: var(--cad-overlay); --cad-hover: var(--cad-overlay-hover); border: 1px solid var(--cad-border); border-radius: 8px; box-shadow: var(--cad-shadow-lg); opacity: .95; font: var(--cad-font-size)/1.4 var(--cad-font); color: var(--cad-fg); }
6980
7034
  .cdk-drag-preview.dt-tr-preview td { padding: 0 12px; height: 42px; vertical-align: middle; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
6981
7035
  :host(.is-stacked) .tbl td.col-drag { display: none; }
6982
7036
 
@@ -8728,7 +8782,7 @@ class CadMenuComponent {
8728
8782
  }
8729
8783
  </div>
8730
8784
  </ng-template>
8731
- `, isInline: true, styles: [":host{display:contents}:host(.is-inline){display:block}.cad-menu{background:var(--cad-overlay);border:1px solid var(--cad-border);border-radius:9px;box-shadow:var(--cad-shadow-lg);padding:4px;min-width:180px;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg);box-sizing:border-box}:host(.is-inline)>.cad-menu{box-shadow:none}.cad-menu__wrap{position:relative}.cad-menu__item{all:unset;box-sizing:border-box;display:flex;align-items:center;gap:8px;width:100%;padding:6px 8px;border-radius:6px;cursor:pointer;white-space:nowrap}.cad-menu__item:hover:not([disabled]),.cad-menu__item.is-active:not([disabled]){background:var(--cad-hover)}.cad-menu__item:focus-visible{outline:2px solid var(--cad-ring);outline-offset:-2px}.cad-menu__item[disabled]{opacity:.5;cursor:not-allowed}.cad-menu__item.sev-danger{color:var(--cad-danger)}.cad-menu__item.sev-danger:hover:not([disabled]){background:var(--cad-danger-soft)}.cad-menu__ph{width:14px;flex:none}.cad-menu__label{flex:1}.cad-menu__kbd{font:11px var(--cad-font-mono);color:var(--cad-fg-muted);margin-left:16px}.cad-menu__badge{font:500 10.5px var(--cad-font-mono);padding:1px 6px;border-radius:999px;background:var(--cad-accent-soft);color:var(--cad-accent)}.cad-menu__sub-ic{color:var(--cad-fg-muted);margin-left:8px}.cad-menu__sep{height:1px;background:var(--cad-border);margin:4px 6px}.cad-menu--sub{position:absolute;top:-5px;left:calc(100% + 2px);z-index:1}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: CadIconComponent, selector: "cad-icon", inputs: ["name", "size", "strokeWidth", "label", "title", "spin", "filled", "flip", "rotate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
8785
+ `, isInline: true, styles: [":host{display:contents}:host(.is-inline){display:block}.cad-menu{background:var(--cad-overlay);--cad-hover: var(--cad-overlay-hover);border:1px solid var(--cad-border);border-radius:9px;box-shadow:var(--cad-shadow-lg);padding:4px;min-width:180px;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg);box-sizing:border-box}:host(.is-inline)>.cad-menu{box-shadow:none}.cad-menu__wrap{position:relative}.cad-menu__item{all:unset;box-sizing:border-box;display:flex;align-items:center;gap:8px;width:100%;padding:6px 8px;border-radius:6px;cursor:pointer;white-space:nowrap}.cad-menu__item:hover:not([disabled]),.cad-menu__item.is-active:not([disabled]){background:var(--cad-hover)}.cad-menu__item:focus-visible{outline:2px solid var(--cad-ring);outline-offset:-2px}.cad-menu__item[disabled]{opacity:.5;cursor:not-allowed}.cad-menu__item.sev-danger{color:var(--cad-danger)}.cad-menu__item.sev-danger:hover:not([disabled]){background:var(--cad-danger-soft)}.cad-menu__ph{width:14px;flex:none}.cad-menu__label{flex:1}.cad-menu__kbd{font:11px var(--cad-font-mono);color:var(--cad-fg-muted);margin-left:16px}.cad-menu__badge{font:500 10.5px var(--cad-font-mono);padding:1px 6px;border-radius:999px;background:var(--cad-accent-soft);color:var(--cad-accent)}.cad-menu__sub-ic{color:var(--cad-fg-muted);margin-left:8px}.cad-menu__sep{height:1px;background:var(--cad-border);margin:4px 6px}.cad-menu--sub{position:absolute;top:-5px;left:calc(100% + 2px);z-index:1}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: CadIconComponent, selector: "cad-icon", inputs: ["name", "size", "strokeWidth", "label", "title", "spin", "filled", "flip", "rotate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
8732
8786
  }
8733
8787
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: CadMenuComponent, decorators: [{
8734
8788
  type: Component,
@@ -8768,7 +8822,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImpo
8768
8822
  }
8769
8823
  </div>
8770
8824
  </ng-template>
8771
- `, styles: [":host{display:contents}:host(.is-inline){display:block}.cad-menu{background:var(--cad-overlay);border:1px solid var(--cad-border);border-radius:9px;box-shadow:var(--cad-shadow-lg);padding:4px;min-width:180px;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg);box-sizing:border-box}:host(.is-inline)>.cad-menu{box-shadow:none}.cad-menu__wrap{position:relative}.cad-menu__item{all:unset;box-sizing:border-box;display:flex;align-items:center;gap:8px;width:100%;padding:6px 8px;border-radius:6px;cursor:pointer;white-space:nowrap}.cad-menu__item:hover:not([disabled]),.cad-menu__item.is-active:not([disabled]){background:var(--cad-hover)}.cad-menu__item:focus-visible{outline:2px solid var(--cad-ring);outline-offset:-2px}.cad-menu__item[disabled]{opacity:.5;cursor:not-allowed}.cad-menu__item.sev-danger{color:var(--cad-danger)}.cad-menu__item.sev-danger:hover:not([disabled]){background:var(--cad-danger-soft)}.cad-menu__ph{width:14px;flex:none}.cad-menu__label{flex:1}.cad-menu__kbd{font:11px var(--cad-font-mono);color:var(--cad-fg-muted);margin-left:16px}.cad-menu__badge{font:500 10.5px var(--cad-font-mono);padding:1px 6px;border-radius:999px;background:var(--cad-accent-soft);color:var(--cad-accent)}.cad-menu__sub-ic{color:var(--cad-fg-muted);margin-left:8px}.cad-menu__sep{height:1px;background:var(--cad-border);margin:4px 6px}.cad-menu--sub{position:absolute;top:-5px;left:calc(100% + 2px);z-index:1}\n"] }]
8825
+ `, styles: [":host{display:contents}:host(.is-inline){display:block}.cad-menu{background:var(--cad-overlay);--cad-hover: var(--cad-overlay-hover);border:1px solid var(--cad-border);border-radius:9px;box-shadow:var(--cad-shadow-lg);padding:4px;min-width:180px;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg);box-sizing:border-box}:host(.is-inline)>.cad-menu{box-shadow:none}.cad-menu__wrap{position:relative}.cad-menu__item{all:unset;box-sizing:border-box;display:flex;align-items:center;gap:8px;width:100%;padding:6px 8px;border-radius:6px;cursor:pointer;white-space:nowrap}.cad-menu__item:hover:not([disabled]),.cad-menu__item.is-active:not([disabled]){background:var(--cad-hover)}.cad-menu__item:focus-visible{outline:2px solid var(--cad-ring);outline-offset:-2px}.cad-menu__item[disabled]{opacity:.5;cursor:not-allowed}.cad-menu__item.sev-danger{color:var(--cad-danger)}.cad-menu__item.sev-danger:hover:not([disabled]){background:var(--cad-danger-soft)}.cad-menu__ph{width:14px;flex:none}.cad-menu__label{flex:1}.cad-menu__kbd{font:11px var(--cad-font-mono);color:var(--cad-fg-muted);margin-left:16px}.cad-menu__badge{font:500 10.5px var(--cad-font-mono);padding:1px 6px;border-radius:999px;background:var(--cad-accent-soft);color:var(--cad-accent)}.cad-menu__sub-ic{color:var(--cad-fg-muted);margin-left:8px}.cad-menu__sep{height:1px;background:var(--cad-border);margin:4px 6px}.cad-menu--sub{position:absolute;top:-5px;left:calc(100% + 2px);z-index:1}\n"] }]
8772
8826
  }], ctorParameters: () => [], propDecorators: { items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], popup: [{ type: i0.Input, args: [{ isSignal: true, alias: "popup", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], minWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "minWidth", required: false }] }], closeOnSelect: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOnSelect", required: false }] }], mobile: [{ type: i0.Input, args: [{ isSignal: true, alias: "mobile", required: false }] }], sheetTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "sheetTitle", required: false }] }], itemClick: [{ type: i0.Output, args: ["itemClick"] }], shown: [{ type: i0.Output, args: ["shown"] }], hidden: [{ type: i0.Output, args: ["hidden"] }], panelTpl: [{ type: i0.ViewChild, args: ['panel', { isSignal: true }] }] } });
8773
8827
 
8774
8828
  /**
@@ -8972,7 +9026,7 @@ class CadMenubarComponent {
8972
9026
  }
8973
9027
  }
8974
9028
  </ng-template>
8975
- `, isInline: true, styles: [":host{display:flex;align-items:center;gap:8px;min-height:48px;padding:0 12px;background:var(--cad-surface);border-bottom:1px solid var(--cad-border);font-family:var(--cad-font);font-size:var(--cad-font-size);position:relative}.cad-menubar__start,.cad-menubar__end{display:flex;align-items:center;gap:8px}.cad-menubar__end{margin-left:auto}.cad-menubar__list{display:flex;align-items:center;gap:2px;list-style:none;margin:0;padding:0}.cad-menubar__root{all:unset;box-sizing:border-box;display:inline-flex;align-items:center;gap:6px;height:34px;padding:0 10px;border-radius:7px;color:var(--cad-fg-secondary);font-weight:500;cursor:pointer;position:relative;white-space:nowrap}.cad-menubar__root:hover,.cad-menubar__root.is-open{background:var(--cad-hover);color:var(--cad-fg)}.cad-menubar__root:focus-visible{outline:2px solid var(--cad-ring)}.cad-menubar__root.is-active{color:var(--cad-accent)}.cad-menubar__root.is-active:after{content:\"\";position:absolute;left:10px;right:10px;bottom:-8px;height:2px;border-radius:2px;background:var(--cad-accent)}.cad-menubar__root[disabled],.cad-menubar__root.is-disabled{opacity:.5;cursor:default}.cad-menubar__chev{color:var(--cad-fg-muted);transition:transform var(--cad-dur)}.is-open .cad-menubar__chev{transform:rotate(180deg)}.cad-menubar__badge{font:500 10.5px var(--cad-font-mono);padding:1px 6px;border-radius:999px;background:var(--cad-accent-soft);color:var(--cad-accent)}.cad-menubar__burger{all:unset;display:grid;place-items:center;width:36px;height:36px;border-radius:8px;color:var(--cad-fg-secondary);cursor:pointer}.cad-menubar__burger:hover{background:var(--cad-hover);color:var(--cad-fg)}.cad-menubar__mobile{position:absolute;left:0;right:0;top:100%;z-index:20;background:var(--cad-surface);border-bottom:1px solid var(--cad-border);box-shadow:var(--cad-shadow-lg);padding:6px 0;max-height:70vh;overflow:auto}.cad-menubar__mitem{all:unset;box-sizing:border-box;display:flex;align-items:center;gap:10px;width:100%;min-height:44px;padding:0 12px;color:var(--cad-fg);cursor:pointer}.cad-menubar__mitem:hover{background:var(--cad-hover)}.cad-menubar__mitem[disabled]{opacity:.5}.cad-menubar__mlabel{flex:1}.cad-menubar__sep{height:1px;background:var(--cad-border);margin:4px 12px}.cad-menubar__mega{display:flex;gap:22px;padding:14px 16px;background:var(--cad-overlay);border:1px solid var(--cad-border);border-radius:10px;box-shadow:var(--cad-shadow-lg)}.cad-menubar__col{display:flex;flex-direction:column;gap:2px;min-width:160px}.cad-menubar__colh{font:600 10.5px/1 var(--cad-font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--cad-fg-muted);padding:4px 8px 8px}.cad-menubar__citem{all:unset;box-sizing:border-box;display:flex;align-items:center;gap:8px;padding:7px 8px;border-radius:6px;color:var(--cad-fg);cursor:pointer;font-size:var(--cad-font-size)}.cad-menubar__citem:hover{background:var(--cad-hover)}.cad-menubar__citem:focus-visible{outline:2px solid var(--cad-ring)}.cad-menubar__citem[disabled]{opacity:.5}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "component", type: CadIconComponent, selector: "cad-icon", inputs: ["name", "size", "strokeWidth", "label", "title", "spin", "filled", "flip", "rotate"] }, { kind: "component", type: CadMenuComponent, selector: "cad-menu", inputs: ["items", "popup", "ariaLabel", "minWidth", "closeOnSelect", "mobile", "sheetTitle"], outputs: ["itemClick", "shown", "hidden"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
9029
+ `, isInline: true, styles: [":host{display:flex;align-items:center;gap:8px;min-height:48px;padding:0 12px;background:var(--cad-surface);border-bottom:1px solid var(--cad-border);font-family:var(--cad-font);font-size:var(--cad-font-size);position:relative}.cad-menubar__start,.cad-menubar__end{display:flex;align-items:center;gap:8px}.cad-menubar__end{margin-left:auto}.cad-menubar__list{display:flex;align-items:center;gap:2px;list-style:none;margin:0;padding:0}.cad-menubar__root{all:unset;box-sizing:border-box;display:inline-flex;align-items:center;gap:6px;height:34px;padding:0 10px;border-radius:7px;color:var(--cad-fg-secondary);font-weight:500;cursor:pointer;position:relative;white-space:nowrap}.cad-menubar__root:hover,.cad-menubar__root.is-open{background:var(--cad-hover);color:var(--cad-fg)}.cad-menubar__root:focus-visible{outline:2px solid var(--cad-ring)}.cad-menubar__root.is-active{color:var(--cad-accent)}.cad-menubar__root.is-active:after{content:\"\";position:absolute;left:10px;right:10px;bottom:-8px;height:2px;border-radius:2px;background:var(--cad-accent)}.cad-menubar__root[disabled],.cad-menubar__root.is-disabled{opacity:.5;cursor:default}.cad-menubar__chev{color:var(--cad-fg-muted);transition:transform var(--cad-dur)}.is-open .cad-menubar__chev{transform:rotate(180deg)}.cad-menubar__badge{font:500 10.5px var(--cad-font-mono);padding:1px 6px;border-radius:999px;background:var(--cad-accent-soft);color:var(--cad-accent)}.cad-menubar__burger{all:unset;display:grid;place-items:center;width:36px;height:36px;border-radius:8px;color:var(--cad-fg-secondary);cursor:pointer}.cad-menubar__burger:hover{background:var(--cad-hover);color:var(--cad-fg)}.cad-menubar__mobile{position:absolute;left:0;right:0;top:100%;z-index:20;background:var(--cad-surface);border-bottom:1px solid var(--cad-border);box-shadow:var(--cad-shadow-lg);padding:6px 0;max-height:70vh;overflow:auto}.cad-menubar__mitem{all:unset;box-sizing:border-box;display:flex;align-items:center;gap:10px;width:100%;min-height:44px;padding:0 12px;color:var(--cad-fg);cursor:pointer}.cad-menubar__mitem:hover{background:var(--cad-hover)}.cad-menubar__mitem[disabled]{opacity:.5}.cad-menubar__mlabel{flex:1}.cad-menubar__sep{height:1px;background:var(--cad-border);margin:4px 12px}.cad-menubar__mega{display:flex;gap:22px;padding:14px 16px;background:var(--cad-overlay);--cad-hover: var(--cad-overlay-hover);border:1px solid var(--cad-border);border-radius:10px;box-shadow:var(--cad-shadow-lg)}.cad-menubar__col{display:flex;flex-direction:column;gap:2px;min-width:160px}.cad-menubar__colh{font:600 10.5px/1 var(--cad-font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--cad-fg-muted);padding:4px 8px 8px}.cad-menubar__citem{all:unset;box-sizing:border-box;display:flex;align-items:center;gap:8px;padding:7px 8px;border-radius:6px;color:var(--cad-fg);cursor:pointer;font-size:var(--cad-font-size)}.cad-menubar__citem:hover{background:var(--cad-hover)}.cad-menubar__citem:focus-visible{outline:2px solid var(--cad-ring)}.cad-menubar__citem[disabled]{opacity:.5}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "component", type: CadIconComponent, selector: "cad-icon", inputs: ["name", "size", "strokeWidth", "label", "title", "spin", "filled", "flip", "rotate"] }, { kind: "component", type: CadMenuComponent, selector: "cad-menu", inputs: ["items", "popup", "ariaLabel", "minWidth", "closeOnSelect", "mobile", "sheetTitle"], outputs: ["itemClick", "shown", "hidden"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
8976
9030
  }
8977
9031
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: CadMenubarComponent, decorators: [{
8978
9032
  type: Component,
@@ -9035,7 +9089,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImpo
9035
9089
  }
9036
9090
  }
9037
9091
  </ng-template>
9038
- `, styles: [":host{display:flex;align-items:center;gap:8px;min-height:48px;padding:0 12px;background:var(--cad-surface);border-bottom:1px solid var(--cad-border);font-family:var(--cad-font);font-size:var(--cad-font-size);position:relative}.cad-menubar__start,.cad-menubar__end{display:flex;align-items:center;gap:8px}.cad-menubar__end{margin-left:auto}.cad-menubar__list{display:flex;align-items:center;gap:2px;list-style:none;margin:0;padding:0}.cad-menubar__root{all:unset;box-sizing:border-box;display:inline-flex;align-items:center;gap:6px;height:34px;padding:0 10px;border-radius:7px;color:var(--cad-fg-secondary);font-weight:500;cursor:pointer;position:relative;white-space:nowrap}.cad-menubar__root:hover,.cad-menubar__root.is-open{background:var(--cad-hover);color:var(--cad-fg)}.cad-menubar__root:focus-visible{outline:2px solid var(--cad-ring)}.cad-menubar__root.is-active{color:var(--cad-accent)}.cad-menubar__root.is-active:after{content:\"\";position:absolute;left:10px;right:10px;bottom:-8px;height:2px;border-radius:2px;background:var(--cad-accent)}.cad-menubar__root[disabled],.cad-menubar__root.is-disabled{opacity:.5;cursor:default}.cad-menubar__chev{color:var(--cad-fg-muted);transition:transform var(--cad-dur)}.is-open .cad-menubar__chev{transform:rotate(180deg)}.cad-menubar__badge{font:500 10.5px var(--cad-font-mono);padding:1px 6px;border-radius:999px;background:var(--cad-accent-soft);color:var(--cad-accent)}.cad-menubar__burger{all:unset;display:grid;place-items:center;width:36px;height:36px;border-radius:8px;color:var(--cad-fg-secondary);cursor:pointer}.cad-menubar__burger:hover{background:var(--cad-hover);color:var(--cad-fg)}.cad-menubar__mobile{position:absolute;left:0;right:0;top:100%;z-index:20;background:var(--cad-surface);border-bottom:1px solid var(--cad-border);box-shadow:var(--cad-shadow-lg);padding:6px 0;max-height:70vh;overflow:auto}.cad-menubar__mitem{all:unset;box-sizing:border-box;display:flex;align-items:center;gap:10px;width:100%;min-height:44px;padding:0 12px;color:var(--cad-fg);cursor:pointer}.cad-menubar__mitem:hover{background:var(--cad-hover)}.cad-menubar__mitem[disabled]{opacity:.5}.cad-menubar__mlabel{flex:1}.cad-menubar__sep{height:1px;background:var(--cad-border);margin:4px 12px}.cad-menubar__mega{display:flex;gap:22px;padding:14px 16px;background:var(--cad-overlay);border:1px solid var(--cad-border);border-radius:10px;box-shadow:var(--cad-shadow-lg)}.cad-menubar__col{display:flex;flex-direction:column;gap:2px;min-width:160px}.cad-menubar__colh{font:600 10.5px/1 var(--cad-font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--cad-fg-muted);padding:4px 8px 8px}.cad-menubar__citem{all:unset;box-sizing:border-box;display:flex;align-items:center;gap:8px;padding:7px 8px;border-radius:6px;color:var(--cad-fg);cursor:pointer;font-size:var(--cad-font-size)}.cad-menubar__citem:hover{background:var(--cad-hover)}.cad-menubar__citem:focus-visible{outline:2px solid var(--cad-ring)}.cad-menubar__citem[disabled]{opacity:.5}\n"] }]
9092
+ `, styles: [":host{display:flex;align-items:center;gap:8px;min-height:48px;padding:0 12px;background:var(--cad-surface);border-bottom:1px solid var(--cad-border);font-family:var(--cad-font);font-size:var(--cad-font-size);position:relative}.cad-menubar__start,.cad-menubar__end{display:flex;align-items:center;gap:8px}.cad-menubar__end{margin-left:auto}.cad-menubar__list{display:flex;align-items:center;gap:2px;list-style:none;margin:0;padding:0}.cad-menubar__root{all:unset;box-sizing:border-box;display:inline-flex;align-items:center;gap:6px;height:34px;padding:0 10px;border-radius:7px;color:var(--cad-fg-secondary);font-weight:500;cursor:pointer;position:relative;white-space:nowrap}.cad-menubar__root:hover,.cad-menubar__root.is-open{background:var(--cad-hover);color:var(--cad-fg)}.cad-menubar__root:focus-visible{outline:2px solid var(--cad-ring)}.cad-menubar__root.is-active{color:var(--cad-accent)}.cad-menubar__root.is-active:after{content:\"\";position:absolute;left:10px;right:10px;bottom:-8px;height:2px;border-radius:2px;background:var(--cad-accent)}.cad-menubar__root[disabled],.cad-menubar__root.is-disabled{opacity:.5;cursor:default}.cad-menubar__chev{color:var(--cad-fg-muted);transition:transform var(--cad-dur)}.is-open .cad-menubar__chev{transform:rotate(180deg)}.cad-menubar__badge{font:500 10.5px var(--cad-font-mono);padding:1px 6px;border-radius:999px;background:var(--cad-accent-soft);color:var(--cad-accent)}.cad-menubar__burger{all:unset;display:grid;place-items:center;width:36px;height:36px;border-radius:8px;color:var(--cad-fg-secondary);cursor:pointer}.cad-menubar__burger:hover{background:var(--cad-hover);color:var(--cad-fg)}.cad-menubar__mobile{position:absolute;left:0;right:0;top:100%;z-index:20;background:var(--cad-surface);border-bottom:1px solid var(--cad-border);box-shadow:var(--cad-shadow-lg);padding:6px 0;max-height:70vh;overflow:auto}.cad-menubar__mitem{all:unset;box-sizing:border-box;display:flex;align-items:center;gap:10px;width:100%;min-height:44px;padding:0 12px;color:var(--cad-fg);cursor:pointer}.cad-menubar__mitem:hover{background:var(--cad-hover)}.cad-menubar__mitem[disabled]{opacity:.5}.cad-menubar__mlabel{flex:1}.cad-menubar__sep{height:1px;background:var(--cad-border);margin:4px 12px}.cad-menubar__mega{display:flex;gap:22px;padding:14px 16px;background:var(--cad-overlay);--cad-hover: var(--cad-overlay-hover);border:1px solid var(--cad-border);border-radius:10px;box-shadow:var(--cad-shadow-lg)}.cad-menubar__col{display:flex;flex-direction:column;gap:2px;min-width:160px}.cad-menubar__colh{font:600 10.5px/1 var(--cad-font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--cad-fg-muted);padding:4px 8px 8px}.cad-menubar__citem{all:unset;box-sizing:border-box;display:flex;align-items:center;gap:8px;padding:7px 8px;border-radius:6px;color:var(--cad-fg);cursor:pointer;font-size:var(--cad-font-size)}.cad-menubar__citem:hover{background:var(--cad-hover)}.cad-menubar__citem:focus-visible{outline:2px solid var(--cad-ring)}.cad-menubar__citem[disabled]{opacity:.5}\n"] }]
9039
9093
  }], ctorParameters: () => [], propDecorators: { items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], breakpoint: [{ type: i0.Input, args: [{ isSignal: true, alias: "breakpoint", required: false }] }], openOnHover: [{ type: i0.Input, args: [{ isSignal: true, alias: "openOnHover", required: false }] }], itemClick: [{ type: i0.Output, args: ["itemClick"] }], opened: [{ type: i0.Output, args: ["opened"] }], closed: [{ type: i0.Output, args: ["closed"] }], panelTpl: [{ type: i0.ViewChild, args: ['panel', { isSignal: true }] }] } });
9040
9094
 
9041
9095
  /**
@@ -9284,7 +9338,7 @@ class CadBottomNavComponent {
9284
9338
  </span>
9285
9339
  @if (showLabel(it)) {<span class="cad-bottom-nav__label">{{ it.label }}</span>}
9286
9340
  </ng-template>
9287
- `, isInline: true, styles: [":host{display:block;position:sticky;bottom:0;z-index:20;background:var(--cad-overlay);border-top:1px solid var(--cad-border);padding-bottom:var(--cad-safe-bottom, env(safe-area-inset-bottom, 0px))}:host(.is-hidden){display:none}.cad-bottom-nav__list{display:flex;margin:0;padding:4px 4px 2px;list-style:none}.cad-bottom-nav__list>li{flex:1;min-width:0;display:flex}.cad-bottom-nav__item{all:unset;box-sizing:border-box;flex:1;min-width:0;cursor:pointer;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;min-height:44px;padding:5px 2px 6px;color:var(--cad-fg-muted);font:10px var(--cad-font);text-align:center;text-decoration:none;border-radius:var(--cad-radius);position:relative}.cad-bottom-nav__item:hover{color:var(--cad-fg-secondary)}.cad-bottom-nav__item:focus-visible{outline:2px solid var(--cad-accent);outline-offset:-2px}.cad-bottom-nav__item.is-active{color:var(--cad-accent)}.cad-bottom-nav__item.is-disabled,.cad-bottom-nav__item:disabled{opacity:.45;cursor:not-allowed}.cad-bottom-nav__icon{position:relative;display:grid;place-items:center;width:100%;height:26px}.cad-bottom-nav__pill{position:absolute;width:38px;height:26px;border-radius:var(--cad-radius-pill);background:transparent;transition:background var(--cad-dur) var(--cad-ease)}.cad-bottom-nav__item.is-active .cad-bottom-nav__pill{background:var(--cad-accent-soft)}.cad-bottom-nav__icon cad-icon{position:relative;z-index:1}.cad-bottom-nav__label{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.3;position:relative;z-index:1}.cad-bottom-nav__item.is-active .cad-bottom-nav__label{font-weight:500}.cad-bottom-nav__badge{position:absolute;top:-2px;left:50%;margin-left:6px;z-index:2;min-width:15px;height:15px;padding:0 4px;border-radius:var(--cad-radius-pill);background:var(--cad-danger, #f85149);color:#fff;font-size:9px;font-weight:600;line-height:15px;text-align:center;border:2px solid var(--cad-overlay);box-sizing:content-box}.cad-bottom-nav__badge.is-dot{min-width:8px;height:8px;padding:0;margin-left:8px}:host-context(.cad-touch) .cad-bottom-nav__item{min-height:52px}@media(prefers-reduced-motion:reduce){.cad-bottom-nav__pill{transition:none}}\n"], dependencies: [{ kind: "component", type: CadIconComponent, selector: "cad-icon", inputs: ["name", "size", "strokeWidth", "label", "title", "spin", "filled", "flip", "rotate"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
9341
+ `, isInline: true, styles: [":host{display:block;position:sticky;bottom:0;z-index:20;background:var(--cad-overlay);--cad-hover: var(--cad-overlay-hover);border-top:1px solid var(--cad-border);padding-bottom:var(--cad-safe-bottom, env(safe-area-inset-bottom, 0px))}:host(.is-hidden){display:none}.cad-bottom-nav__list{display:flex;margin:0;padding:4px 4px 2px;list-style:none}.cad-bottom-nav__list>li{flex:1;min-width:0;display:flex}.cad-bottom-nav__item{all:unset;box-sizing:border-box;flex:1;min-width:0;cursor:pointer;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;min-height:44px;padding:5px 2px 6px;color:var(--cad-fg-muted);font:10px var(--cad-font);text-align:center;text-decoration:none;border-radius:var(--cad-radius);position:relative}.cad-bottom-nav__item:hover{color:var(--cad-fg-secondary)}.cad-bottom-nav__item:focus-visible{outline:2px solid var(--cad-accent);outline-offset:-2px}.cad-bottom-nav__item.is-active{color:var(--cad-accent)}.cad-bottom-nav__item.is-disabled,.cad-bottom-nav__item:disabled{opacity:.45;cursor:not-allowed}.cad-bottom-nav__icon{position:relative;display:grid;place-items:center;width:100%;height:26px}.cad-bottom-nav__pill{position:absolute;width:38px;height:26px;border-radius:var(--cad-radius-pill);background:transparent;transition:background var(--cad-dur) var(--cad-ease)}.cad-bottom-nav__item.is-active .cad-bottom-nav__pill{background:var(--cad-accent-soft)}.cad-bottom-nav__icon cad-icon{position:relative;z-index:1}.cad-bottom-nav__label{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.3;position:relative;z-index:1}.cad-bottom-nav__item.is-active .cad-bottom-nav__label{font-weight:500}.cad-bottom-nav__badge{position:absolute;top:-2px;left:50%;margin-left:6px;z-index:2;min-width:15px;height:15px;padding:0 4px;border-radius:var(--cad-radius-pill);background:var(--cad-danger, #f85149);color:#fff;font-size:9px;font-weight:600;line-height:15px;text-align:center;border:2px solid var(--cad-overlay);box-sizing:content-box}.cad-bottom-nav__badge.is-dot{min-width:8px;height:8px;padding:0;margin-left:8px}:host-context(.cad-touch) .cad-bottom-nav__item{min-height:52px}@media(prefers-reduced-motion:reduce){.cad-bottom-nav__pill{transition:none}}\n"], dependencies: [{ kind: "component", type: CadIconComponent, selector: "cad-icon", inputs: ["name", "size", "strokeWidth", "label", "title", "spin", "filled", "flip", "rotate"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
9288
9342
  }
9289
9343
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: CadBottomNavComponent, decorators: [{
9290
9344
  type: Component,
@@ -9350,7 +9404,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImpo
9350
9404
  </span>
9351
9405
  @if (showLabel(it)) {<span class="cad-bottom-nav__label">{{ it.label }}</span>}
9352
9406
  </ng-template>
9353
- `, styles: [":host{display:block;position:sticky;bottom:0;z-index:20;background:var(--cad-overlay);border-top:1px solid var(--cad-border);padding-bottom:var(--cad-safe-bottom, env(safe-area-inset-bottom, 0px))}:host(.is-hidden){display:none}.cad-bottom-nav__list{display:flex;margin:0;padding:4px 4px 2px;list-style:none}.cad-bottom-nav__list>li{flex:1;min-width:0;display:flex}.cad-bottom-nav__item{all:unset;box-sizing:border-box;flex:1;min-width:0;cursor:pointer;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;min-height:44px;padding:5px 2px 6px;color:var(--cad-fg-muted);font:10px var(--cad-font);text-align:center;text-decoration:none;border-radius:var(--cad-radius);position:relative}.cad-bottom-nav__item:hover{color:var(--cad-fg-secondary)}.cad-bottom-nav__item:focus-visible{outline:2px solid var(--cad-accent);outline-offset:-2px}.cad-bottom-nav__item.is-active{color:var(--cad-accent)}.cad-bottom-nav__item.is-disabled,.cad-bottom-nav__item:disabled{opacity:.45;cursor:not-allowed}.cad-bottom-nav__icon{position:relative;display:grid;place-items:center;width:100%;height:26px}.cad-bottom-nav__pill{position:absolute;width:38px;height:26px;border-radius:var(--cad-radius-pill);background:transparent;transition:background var(--cad-dur) var(--cad-ease)}.cad-bottom-nav__item.is-active .cad-bottom-nav__pill{background:var(--cad-accent-soft)}.cad-bottom-nav__icon cad-icon{position:relative;z-index:1}.cad-bottom-nav__label{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.3;position:relative;z-index:1}.cad-bottom-nav__item.is-active .cad-bottom-nav__label{font-weight:500}.cad-bottom-nav__badge{position:absolute;top:-2px;left:50%;margin-left:6px;z-index:2;min-width:15px;height:15px;padding:0 4px;border-radius:var(--cad-radius-pill);background:var(--cad-danger, #f85149);color:#fff;font-size:9px;font-weight:600;line-height:15px;text-align:center;border:2px solid var(--cad-overlay);box-sizing:content-box}.cad-bottom-nav__badge.is-dot{min-width:8px;height:8px;padding:0;margin-left:8px}:host-context(.cad-touch) .cad-bottom-nav__item{min-height:52px}@media(prefers-reduced-motion:reduce){.cad-bottom-nav__pill{transition:none}}\n"] }]
9407
+ `, styles: [":host{display:block;position:sticky;bottom:0;z-index:20;background:var(--cad-overlay);--cad-hover: var(--cad-overlay-hover);border-top:1px solid var(--cad-border);padding-bottom:var(--cad-safe-bottom, env(safe-area-inset-bottom, 0px))}:host(.is-hidden){display:none}.cad-bottom-nav__list{display:flex;margin:0;padding:4px 4px 2px;list-style:none}.cad-bottom-nav__list>li{flex:1;min-width:0;display:flex}.cad-bottom-nav__item{all:unset;box-sizing:border-box;flex:1;min-width:0;cursor:pointer;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;min-height:44px;padding:5px 2px 6px;color:var(--cad-fg-muted);font:10px var(--cad-font);text-align:center;text-decoration:none;border-radius:var(--cad-radius);position:relative}.cad-bottom-nav__item:hover{color:var(--cad-fg-secondary)}.cad-bottom-nav__item:focus-visible{outline:2px solid var(--cad-accent);outline-offset:-2px}.cad-bottom-nav__item.is-active{color:var(--cad-accent)}.cad-bottom-nav__item.is-disabled,.cad-bottom-nav__item:disabled{opacity:.45;cursor:not-allowed}.cad-bottom-nav__icon{position:relative;display:grid;place-items:center;width:100%;height:26px}.cad-bottom-nav__pill{position:absolute;width:38px;height:26px;border-radius:var(--cad-radius-pill);background:transparent;transition:background var(--cad-dur) var(--cad-ease)}.cad-bottom-nav__item.is-active .cad-bottom-nav__pill{background:var(--cad-accent-soft)}.cad-bottom-nav__icon cad-icon{position:relative;z-index:1}.cad-bottom-nav__label{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.3;position:relative;z-index:1}.cad-bottom-nav__item.is-active .cad-bottom-nav__label{font-weight:500}.cad-bottom-nav__badge{position:absolute;top:-2px;left:50%;margin-left:6px;z-index:2;min-width:15px;height:15px;padding:0 4px;border-radius:var(--cad-radius-pill);background:var(--cad-danger, #f85149);color:#fff;font-size:9px;font-weight:600;line-height:15px;text-align:center;border:2px solid var(--cad-overlay);box-sizing:content-box}.cad-bottom-nav__badge.is-dot{min-width:8px;height:8px;padding:0;margin-left:8px}:host-context(.cad-touch) .cad-bottom-nav__item{min-height:52px}@media(prefers-reduced-motion:reduce){.cad-bottom-nav__pill{transition:none}}\n"] }]
9354
9408
  }], propDecorators: { items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], labels: [{ type: i0.Input, args: [{ isSignal: true, alias: "labels", required: false }] }], maxItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxItems", required: false }] }], breakpoint: [{ type: i0.Input, args: [{ isSignal: true, alias: "breakpoint", required: false }] }], alwaysShow: [{ type: i0.Input, args: [{ isSignal: true, alias: "alwaysShow", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], changed: [{ type: i0.Output, args: ["changed"] }], itemClick: [{ type: i0.Output, args: ["itemClick"] }] } });
9355
9409
 
9356
9410
  /**
@@ -9398,6 +9452,15 @@ class CadNavDrawerComponent {
9398
9452
  open = model(false, ...(ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []));
9399
9453
  /** Entrée courante, comparée à `item.value`. */
9400
9454
  value = model(null, ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
9455
+ /**
9456
+ * Clés des intertitres repliés (`item.value`, à défaut `item.label`).
9457
+ *
9458
+ * Un TABLEAU et non un `Set` : c'est ce qui se lie en deux sens, se compare, et surtout se
9459
+ * sérialise tel quel — l'hôte qui veut persister l'état le pose dans `localStorage` sans
9460
+ * conversion. Le composant ne persiste rien lui-même : il ne saurait pas sous quelle clé,
9461
+ * ni s'il a le droit.
9462
+ */
9463
+ collapsed = model([], ...(ngDevMode ? [{ debugName: "collapsed" }] : /* istanbul ignore next */ []));
9401
9464
  mode = input('auto', ...(ngDevMode ? [{ debugName: "mode" }] : /* istanbul ignore next */ []));
9402
9465
  /** Seuil de bascule permanent → tiroir, en mode `auto`. */
9403
9466
  breakpoint = input('md', ...(ngDevMode ? [{ debugName: "breakpoint" }] : /* istanbul ignore next */ []));
@@ -9426,6 +9489,42 @@ class CadNavDrawerComponent {
9426
9489
  }, ...(ngDevMode ? [{ debugName: "effective" }] : /* istanbul ignore next */ []));
9427
9490
  temporary = computed(() => this.effective() === 'temporary', ...(ngDevMode ? [{ debugName: "temporary" }] : /* istanbul ignore next */ []));
9428
9491
  rail = computed(() => this.effective() === 'rail', ...(ngDevMode ? [{ debugName: "rail" }] : /* istanbul ignore next */ []));
9492
+ /** Clé d'un intertitre. `value` d'abord : un libellé se renomme, une clé non. */
9493
+ cle(it) { return it.value ?? it.label; }
9494
+ /**
9495
+ * Les lignes à rendre : les intertitres toujours, les entrées seulement si leur intertitre
9496
+ * n'est pas replié. Une entrée qui précède tout intertitre n'appartient à aucun groupe et
9497
+ * ne se replie donc jamais — sans quoi elle serait masquée sans bouton pour la rouvrir.
9498
+ */
9499
+ rows = computed(() => {
9500
+ const replies = new Set(this.collapsed());
9501
+ const rail = this.rail();
9502
+ const out = [];
9503
+ let courante = null;
9504
+ for (const item of this.items()) {
9505
+ if (item.section) {
9506
+ // En rail l'intertitre devient un filet : plus de bouton, donc rien ne se replie.
9507
+ const collapsible = !rail && !!item.collapsible;
9508
+ const key = this.cle(item);
9509
+ courante = { item, key, collapsible, collapsed: collapsible && replies.has(key), count: 0 };
9510
+ out.push(courante);
9511
+ continue;
9512
+ }
9513
+ // Le compte est celui du GROUPE, pas de ce qui est visible : il doit rester le même
9514
+ // une fois replié, sinon il annoncerait zéro au moment où il sert le plus.
9515
+ if (courante)
9516
+ courante.count++;
9517
+ if (courante?.collapsed)
9518
+ continue;
9519
+ out.push({ item, key: '', collapsible: false, collapsed: false, count: 0 });
9520
+ }
9521
+ return out;
9522
+ }, ...(ngDevMode ? [{ debugName: "rows" }] : /* istanbul ignore next */ []));
9523
+ toggleSection(r) {
9524
+ const s = new Set(this.collapsed());
9525
+ s.has(r.key) ? s.delete(r.key) : s.add(r.key);
9526
+ this.collapsed.set([...s]);
9527
+ }
9429
9528
  wasOpen = signal(false, ...(ngDevMode ? [{ debugName: "wasOpen" }] : /* istanbul ignore next */ []));
9430
9529
  constructor() {
9431
9530
  effect(() => {
@@ -9471,7 +9570,7 @@ class CadNavDrawerComponent {
9471
9570
  this.open.set(false);
9472
9571
  }
9473
9572
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: CadNavDrawerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9474
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.20", type: CadNavDrawerComponent, isStandalone: true, selector: "cad-nav-drawer", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, breakpoint: { classPropertyName: "breakpoint", publicName: "breakpoint", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, closeOnNavigate: { classPropertyName: "closeOnNavigate", publicName: "closeOnNavigate", isSignal: true, isRequired: false, transformFunction: null }, closeOnEscape: { classPropertyName: "closeOnEscape", publicName: "closeOnEscape", isSignal: true, isRequired: false, transformFunction: null }, dismissableScrim: { classPropertyName: "dismissableScrim", publicName: "dismissableScrim", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { open: "openChange", value: "valueChange", opened: "opened", closed: "closed", itemClick: "itemClick", changed: "changed" }, host: { listeners: { "document:keydown.escape": "onEscape()" }, properties: { "class.is-temporary": "temporary()", "class.is-permanent": "!temporary()", "class.is-rail": "rail()", "class.is-open": "open()", "class.is-right": "position() === \"right\"" }, classAttribute: "cad-nav-drawer" }, queries: [{ propertyName: "headerSlot", first: true, predicate: CadNavDrawerHeaderDirective, descendants: true, isSignal: true }, { propertyName: "footerSlot", first: true, predicate: CadNavDrawerFooterDirective, descendants: true, isSignal: true }], ngImport: i0, template: `
9573
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.20", type: CadNavDrawerComponent, isStandalone: true, selector: "cad-nav-drawer", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, collapsed: { classPropertyName: "collapsed", publicName: "collapsed", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, breakpoint: { classPropertyName: "breakpoint", publicName: "breakpoint", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, closeOnNavigate: { classPropertyName: "closeOnNavigate", publicName: "closeOnNavigate", isSignal: true, isRequired: false, transformFunction: null }, closeOnEscape: { classPropertyName: "closeOnEscape", publicName: "closeOnEscape", isSignal: true, isRequired: false, transformFunction: null }, dismissableScrim: { classPropertyName: "dismissableScrim", publicName: "dismissableScrim", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { open: "openChange", value: "valueChange", collapsed: "collapsedChange", opened: "opened", closed: "closed", itemClick: "itemClick", changed: "changed" }, host: { listeners: { "document:keydown.escape": "onEscape()" }, properties: { "class.is-temporary": "temporary()", "class.is-permanent": "!temporary()", "class.is-rail": "rail()", "class.is-open": "open()", "class.is-right": "position() === \"right\"" }, classAttribute: "cad-nav-drawer" }, queries: [{ propertyName: "headerSlot", first: true, predicate: CadNavDrawerHeaderDirective, descendants: true, isSignal: true }, { propertyName: "footerSlot", first: true, predicate: CadNavDrawerFooterDirective, descendants: true, isSignal: true }], ngImport: i0, template: `
9475
9574
  <!-- Le voile n'existe qu'en mode tiroir : en permanent il n'y a rien à recouvrir. -->
9476
9575
  @if (temporary() && open()) {
9477
9576
  <div class="cad-nav-drawer__scrim" (click)="dismiss()" aria-hidden="true"></div>
@@ -9492,11 +9591,28 @@ class CadNavDrawerComponent {
9492
9591
  </div>
9493
9592
 
9494
9593
  <ul class="cad-nav-drawer__list" role="list">
9495
- @for (it of items(); track $index) {
9594
+ @for (r of rows(); track $index) {
9595
+ @let it = r.item;
9496
9596
  @if (it.section) {
9497
9597
  <!-- En rail, un intertitre n'a plus de place : un filet le remplace. -->
9498
9598
  @if (rail()) {
9499
9599
  <li class="cad-nav-drawer__rule" role="separator"></li>
9600
+ } @else if (r.collapsible) {
9601
+ <li>
9602
+ <button
9603
+ type="button"
9604
+ class="cad-nav-drawer__section is-collapsible"
9605
+ [class.is-collapsed]="r.collapsed"
9606
+ [attr.aria-expanded]="!r.collapsed"
9607
+ (click)="toggleSection(r)"
9608
+ >
9609
+ <cad-icon name="chevron-down" [size]="12" class="cad-nav-drawer__chev"/>
9610
+ <span class="cad-nav-drawer__label">{{ it.label }}</span>
9611
+ <!-- Un compte DÉCLARÉ l'emporte sur le compte calculé : une valeur posée
9612
+ par l'hôte est une affirmation, pas un oubli à combler. -->
9613
+ <span class="cad-nav-drawer__badge">{{ it.badge ?? r.count }}</span>
9614
+ </button>
9615
+ </li>
9500
9616
  } @else {
9501
9617
  <li class="cad-nav-drawer__section">{{ it.label }}</li>
9502
9618
  }
@@ -9547,7 +9663,7 @@ class CadNavDrawerComponent {
9547
9663
  <span class="cad-nav-drawer__dot" [attr.title]="it.badge"></span>
9548
9664
  }
9549
9665
  </ng-template>
9550
- `, isInline: true, styles: [":host{display:block}:host(.is-permanent){flex:none}.cad-nav-drawer__panel{display:flex;flex-direction:column;min-height:0;height:100%;width:var(--cad-nav-drawer-w, 240px);background:var(--cad-bg-subtle);border-right:1px solid var(--cad-border);transition:width var(--cad-dur) var(--cad-ease)}:host(.is-rail) .cad-nav-drawer__panel{width:var(--cad-nav-drawer-rail-w, 56px)}:host(.is-right) .cad-nav-drawer__panel{border-right:0;border-left:1px solid var(--cad-border)}:host(.is-temporary){position:fixed;inset:0 auto 0 0;z-index:var(--cad-z-overlay, 100002);pointer-events:none}:host(.is-temporary.is-right){inset:0 0 0 auto}:host(.is-temporary) .cad-nav-drawer__panel{pointer-events:auto;height:100%;box-shadow:var(--cad-shadow-lg, 0 12px 24px rgba(15,23,42,.18));transform:translate(-100%);transition:transform var(--cad-dur) var(--cad-ease)}:host(.is-temporary.is-right) .cad-nav-drawer__panel{transform:translate(100%)}:host(.is-temporary.is-open) .cad-nav-drawer__panel{transform:translate(0)}.cad-nav-drawer__scrim{position:fixed;inset:0;background:var(--cad-backdrop, rgba(2,6,23,.45));pointer-events:auto;z-index:-1}.cad-nav-drawer__head{display:flex;align-items:center;gap:9px;flex:none;padding:14px 14px 12px;border-bottom:1px solid var(--cad-border);min-height:48px;color:var(--cad-fg);font-size:13px}:host(.is-rail) .cad-nav-drawer__head{justify-content:center;padding:14px 0 12px}.cad-nav-drawer__head cad-icon{color:var(--cad-accent);flex:none}.cad-nav-drawer__list{list-style:none;margin:0;padding:8px 0;flex:1;min-height:0;overflow-y:auto}.cad-nav-drawer__section{padding:12px 14px 5px;font-size:10px;font-weight:500;letter-spacing:.07em;text-transform:uppercase;color:var(--cad-fg-muted)}.cad-nav-drawer__rule{height:1px;margin:8px 12px;background:var(--cad-border)}.cad-nav-drawer__item{all:unset;box-sizing:border-box;display:flex;align-items:center;gap:10px;width:100%;cursor:pointer;padding:8px 14px;min-height:38px;color:var(--cad-fg-secondary);font:12.5px var(--cad-font);text-decoration:none}:host(.is-rail) .cad-nav-drawer__item{justify-content:center;padding:10px 0}.cad-nav-drawer__item:hover{background:var(--cad-hover);color:var(--cad-fg)}.cad-nav-drawer__item:focus-visible{outline:2px solid var(--cad-accent);outline-offset:-2px}.cad-nav-drawer__item.is-active{background:var(--cad-accent-soft);color:var(--cad-accent);font-weight:500;box-shadow:inset 3px 0 0 var(--cad-accent)}:host(.is-right) .cad-nav-drawer__item.is-active{box-shadow:inset -3px 0 0 var(--cad-accent)}.cad-nav-drawer__item.is-disabled,.cad-nav-drawer__item:disabled{opacity:.45;cursor:not-allowed}.cad-nav-drawer__label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cad-nav-drawer__badge{flex:none;font-size:10.5px;font-family:var(--cad-font-mono);border-radius:var(--cad-radius-pill);padding:1px 7px;background:var(--cad-elevated, var(--cad-border));color:var(--cad-fg-secondary)}.cad-nav-drawer__item.is-active .cad-nav-drawer__badge{background:var(--cad-accent);color:var(--cad-fg-on-accent)}.cad-nav-drawer__dot{position:absolute;margin:-14px 0 0 14px;width:7px;height:7px;border-radius:50%;background:var(--cad-danger, #f85149)}.cad-nav-drawer__foot{flex:none;border-top:1px solid var(--cad-border);padding:10px 14px}.cad-nav-drawer__foot.is-empty{display:none}:host(.is-rail) .cad-nav-drawer__foot{padding:10px 0;display:flex;justify-content:center}:host-context(.cad-touch) .cad-nav-drawer__item{min-height:44px}@media(prefers-reduced-motion:reduce){.cad-nav-drawer__panel{transition:none}}\n"], dependencies: [{ kind: "component", type: CadIconComponent, selector: "cad-icon", inputs: ["name", "size", "strokeWidth", "label", "title", "spin", "filled", "flip", "rotate"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
9666
+ `, isInline: true, styles: [":host{display:block}:host(.is-permanent){flex:none}.cad-nav-drawer__panel{display:flex;flex-direction:column;min-height:0;height:100%;width:var(--cad-nav-drawer-w, 240px);background:var(--cad-bg-subtle);border-right:1px solid var(--cad-border);transition:width var(--cad-dur) var(--cad-ease)}:host(.is-rail) .cad-nav-drawer__panel{width:var(--cad-nav-drawer-rail-w, 56px)}:host(.is-right) .cad-nav-drawer__panel{border-right:0;border-left:1px solid var(--cad-border)}:host(.is-temporary){position:fixed;inset:0 auto 0 0;z-index:var(--cad-z-overlay, 100002);pointer-events:none}:host(.is-temporary.is-right){inset:0 0 0 auto}:host(.is-temporary) .cad-nav-drawer__panel{pointer-events:auto;height:100%;box-shadow:var(--cad-shadow-lg, 0 12px 24px rgba(15,23,42,.18));transform:translate(-100%);transition:transform var(--cad-dur) var(--cad-ease);padding-top:env(safe-area-inset-top,0px);padding-bottom:env(safe-area-inset-bottom,0px)}:host(.is-temporary.is-right) .cad-nav-drawer__panel{transform:translate(100%)}:host(.is-temporary.is-open) .cad-nav-drawer__panel{transform:translate(0)}.cad-nav-drawer__scrim{position:fixed;inset:0;background:var(--cad-backdrop, rgba(2,6,23,.45));pointer-events:auto;z-index:-1}.cad-nav-drawer__head{display:flex;align-items:center;gap:9px;flex:none;padding:14px 14px 12px;border-bottom:1px solid var(--cad-border);min-height:48px;color:var(--cad-fg);font-size:13px}:host(.is-rail) .cad-nav-drawer__head{justify-content:center;padding:14px 0 12px}.cad-nav-drawer__head cad-icon{color:var(--cad-accent);flex:none}.cad-nav-drawer__list{list-style:none;margin:0;padding:8px 0;flex:1;min-height:0;overflow-y:auto}.cad-nav-drawer__section{padding:12px 14px 5px;font-size:10px;font-weight:500;letter-spacing:.07em;text-transform:uppercase;color:var(--cad-fg-muted)}.cad-nav-drawer__rule{height:1px;margin:8px 12px;background:var(--cad-border)}.cad-nav-drawer__section.is-collapsible{all:unset;box-sizing:border-box;display:flex;align-items:center;gap:8px;width:100%;cursor:pointer;padding:12px 14px 5px;font:500 10px var(--cad-font);letter-spacing:.07em;text-transform:uppercase;color:var(--cad-fg-muted)}.cad-nav-drawer__section.is-collapsible:hover{color:var(--cad-fg-secondary)}.cad-nav-drawer__section.is-collapsible:focus-visible{outline:2px solid var(--cad-accent);outline-offset:-2px}.cad-nav-drawer__chev{flex:none;transition:transform var(--cad-dur) var(--cad-ease)}.cad-nav-drawer__section.is-collapsed .cad-nav-drawer__chev{transform:rotate(-90deg)}@media(prefers-reduced-motion:reduce){.cad-nav-drawer__chev{transition:none}}.cad-nav-drawer__item{all:unset;box-sizing:border-box;display:flex;align-items:center;gap:10px;width:100%;cursor:pointer;padding:8px 14px;min-height:38px;color:var(--cad-fg-secondary);font:12.5px var(--cad-font);text-decoration:none}:host(.is-rail) .cad-nav-drawer__item{justify-content:center;padding:10px 0}.cad-nav-drawer__item:hover{background:var(--cad-hover);color:var(--cad-fg)}.cad-nav-drawer__item:focus-visible{outline:2px solid var(--cad-accent);outline-offset:-2px}.cad-nav-drawer__item.is-active{background:var(--cad-accent-soft);color:var(--cad-accent);font-weight:500;box-shadow:inset 3px 0 0 var(--cad-accent)}:host(.is-right) .cad-nav-drawer__item.is-active{box-shadow:inset -3px 0 0 var(--cad-accent)}.cad-nav-drawer__item.is-disabled,.cad-nav-drawer__item:disabled{opacity:.45;cursor:not-allowed}.cad-nav-drawer__label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cad-nav-drawer__badge{flex:none;font-size:10.5px;font-family:var(--cad-font-mono);border-radius:var(--cad-radius-pill);padding:1px 7px;background:var(--cad-elevated, var(--cad-border));color:var(--cad-fg-secondary)}.cad-nav-drawer__item.is-active .cad-nav-drawer__badge{background:var(--cad-accent);color:var(--cad-fg-on-accent)}.cad-nav-drawer__dot{position:absolute;margin:-14px 0 0 14px;width:7px;height:7px;border-radius:50%;background:var(--cad-danger, #f85149)}.cad-nav-drawer__foot{flex:none;border-top:1px solid var(--cad-border);padding:10px 14px}.cad-nav-drawer__foot.is-empty{display:none}:host(.is-rail) .cad-nav-drawer__foot{padding:10px 0;display:flex;justify-content:center}:host-context(.cad-touch) .cad-nav-drawer__item{min-height:44px}@media(prefers-reduced-motion:reduce){.cad-nav-drawer__panel{transition:none}}\n"], dependencies: [{ kind: "component", type: CadIconComponent, selector: "cad-icon", inputs: ["name", "size", "strokeWidth", "label", "title", "spin", "filled", "flip", "rotate"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
9551
9667
  }
9552
9668
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: CadNavDrawerComponent, decorators: [{
9553
9669
  type: Component,
@@ -9579,11 +9695,28 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImpo
9579
9695
  </div>
9580
9696
 
9581
9697
  <ul class="cad-nav-drawer__list" role="list">
9582
- @for (it of items(); track $index) {
9698
+ @for (r of rows(); track $index) {
9699
+ @let it = r.item;
9583
9700
  @if (it.section) {
9584
9701
  <!-- En rail, un intertitre n'a plus de place : un filet le remplace. -->
9585
9702
  @if (rail()) {
9586
9703
  <li class="cad-nav-drawer__rule" role="separator"></li>
9704
+ } @else if (r.collapsible) {
9705
+ <li>
9706
+ <button
9707
+ type="button"
9708
+ class="cad-nav-drawer__section is-collapsible"
9709
+ [class.is-collapsed]="r.collapsed"
9710
+ [attr.aria-expanded]="!r.collapsed"
9711
+ (click)="toggleSection(r)"
9712
+ >
9713
+ <cad-icon name="chevron-down" [size]="12" class="cad-nav-drawer__chev"/>
9714
+ <span class="cad-nav-drawer__label">{{ it.label }}</span>
9715
+ <!-- Un compte DÉCLARÉ l'emporte sur le compte calculé : une valeur posée
9716
+ par l'hôte est une affirmation, pas un oubli à combler. -->
9717
+ <span class="cad-nav-drawer__badge">{{ it.badge ?? r.count }}</span>
9718
+ </button>
9719
+ </li>
9587
9720
  } @else {
9588
9721
  <li class="cad-nav-drawer__section">{{ it.label }}</li>
9589
9722
  }
@@ -9634,8 +9767,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImpo
9634
9767
  <span class="cad-nav-drawer__dot" [attr.title]="it.badge"></span>
9635
9768
  }
9636
9769
  </ng-template>
9637
- `, styles: [":host{display:block}:host(.is-permanent){flex:none}.cad-nav-drawer__panel{display:flex;flex-direction:column;min-height:0;height:100%;width:var(--cad-nav-drawer-w, 240px);background:var(--cad-bg-subtle);border-right:1px solid var(--cad-border);transition:width var(--cad-dur) var(--cad-ease)}:host(.is-rail) .cad-nav-drawer__panel{width:var(--cad-nav-drawer-rail-w, 56px)}:host(.is-right) .cad-nav-drawer__panel{border-right:0;border-left:1px solid var(--cad-border)}:host(.is-temporary){position:fixed;inset:0 auto 0 0;z-index:var(--cad-z-overlay, 100002);pointer-events:none}:host(.is-temporary.is-right){inset:0 0 0 auto}:host(.is-temporary) .cad-nav-drawer__panel{pointer-events:auto;height:100%;box-shadow:var(--cad-shadow-lg, 0 12px 24px rgba(15,23,42,.18));transform:translate(-100%);transition:transform var(--cad-dur) var(--cad-ease)}:host(.is-temporary.is-right) .cad-nav-drawer__panel{transform:translate(100%)}:host(.is-temporary.is-open) .cad-nav-drawer__panel{transform:translate(0)}.cad-nav-drawer__scrim{position:fixed;inset:0;background:var(--cad-backdrop, rgba(2,6,23,.45));pointer-events:auto;z-index:-1}.cad-nav-drawer__head{display:flex;align-items:center;gap:9px;flex:none;padding:14px 14px 12px;border-bottom:1px solid var(--cad-border);min-height:48px;color:var(--cad-fg);font-size:13px}:host(.is-rail) .cad-nav-drawer__head{justify-content:center;padding:14px 0 12px}.cad-nav-drawer__head cad-icon{color:var(--cad-accent);flex:none}.cad-nav-drawer__list{list-style:none;margin:0;padding:8px 0;flex:1;min-height:0;overflow-y:auto}.cad-nav-drawer__section{padding:12px 14px 5px;font-size:10px;font-weight:500;letter-spacing:.07em;text-transform:uppercase;color:var(--cad-fg-muted)}.cad-nav-drawer__rule{height:1px;margin:8px 12px;background:var(--cad-border)}.cad-nav-drawer__item{all:unset;box-sizing:border-box;display:flex;align-items:center;gap:10px;width:100%;cursor:pointer;padding:8px 14px;min-height:38px;color:var(--cad-fg-secondary);font:12.5px var(--cad-font);text-decoration:none}:host(.is-rail) .cad-nav-drawer__item{justify-content:center;padding:10px 0}.cad-nav-drawer__item:hover{background:var(--cad-hover);color:var(--cad-fg)}.cad-nav-drawer__item:focus-visible{outline:2px solid var(--cad-accent);outline-offset:-2px}.cad-nav-drawer__item.is-active{background:var(--cad-accent-soft);color:var(--cad-accent);font-weight:500;box-shadow:inset 3px 0 0 var(--cad-accent)}:host(.is-right) .cad-nav-drawer__item.is-active{box-shadow:inset -3px 0 0 var(--cad-accent)}.cad-nav-drawer__item.is-disabled,.cad-nav-drawer__item:disabled{opacity:.45;cursor:not-allowed}.cad-nav-drawer__label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cad-nav-drawer__badge{flex:none;font-size:10.5px;font-family:var(--cad-font-mono);border-radius:var(--cad-radius-pill);padding:1px 7px;background:var(--cad-elevated, var(--cad-border));color:var(--cad-fg-secondary)}.cad-nav-drawer__item.is-active .cad-nav-drawer__badge{background:var(--cad-accent);color:var(--cad-fg-on-accent)}.cad-nav-drawer__dot{position:absolute;margin:-14px 0 0 14px;width:7px;height:7px;border-radius:50%;background:var(--cad-danger, #f85149)}.cad-nav-drawer__foot{flex:none;border-top:1px solid var(--cad-border);padding:10px 14px}.cad-nav-drawer__foot.is-empty{display:none}:host(.is-rail) .cad-nav-drawer__foot{padding:10px 0;display:flex;justify-content:center}:host-context(.cad-touch) .cad-nav-drawer__item{min-height:44px}@media(prefers-reduced-motion:reduce){.cad-nav-drawer__panel{transition:none}}\n"] }]
9638
- }], ctorParameters: () => [], propDecorators: { items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }, { type: i0.Output, args: ["openChange"] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], breakpoint: [{ type: i0.Input, args: [{ isSignal: true, alias: "breakpoint", required: false }] }], position: [{ type: i0.Input, args: [{ isSignal: true, alias: "position", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], closeOnNavigate: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOnNavigate", required: false }] }], closeOnEscape: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOnEscape", required: false }] }], dismissableScrim: [{ type: i0.Input, args: [{ isSignal: true, alias: "dismissableScrim", required: false }] }], opened: [{ type: i0.Output, args: ["opened"] }], closed: [{ type: i0.Output, args: ["closed"] }], itemClick: [{ type: i0.Output, args: ["itemClick"] }], changed: [{ type: i0.Output, args: ["changed"] }], headerSlot: [{ type: i0.ContentChild, args: [i0.forwardRef(() => CadNavDrawerHeaderDirective), { isSignal: true }] }], footerSlot: [{ type: i0.ContentChild, args: [i0.forwardRef(() => CadNavDrawerFooterDirective), { isSignal: true }] }], onEscape: [{
9770
+ `, styles: [":host{display:block}:host(.is-permanent){flex:none}.cad-nav-drawer__panel{display:flex;flex-direction:column;min-height:0;height:100%;width:var(--cad-nav-drawer-w, 240px);background:var(--cad-bg-subtle);border-right:1px solid var(--cad-border);transition:width var(--cad-dur) var(--cad-ease)}:host(.is-rail) .cad-nav-drawer__panel{width:var(--cad-nav-drawer-rail-w, 56px)}:host(.is-right) .cad-nav-drawer__panel{border-right:0;border-left:1px solid var(--cad-border)}:host(.is-temporary){position:fixed;inset:0 auto 0 0;z-index:var(--cad-z-overlay, 100002);pointer-events:none}:host(.is-temporary.is-right){inset:0 0 0 auto}:host(.is-temporary) .cad-nav-drawer__panel{pointer-events:auto;height:100%;box-shadow:var(--cad-shadow-lg, 0 12px 24px rgba(15,23,42,.18));transform:translate(-100%);transition:transform var(--cad-dur) var(--cad-ease);padding-top:env(safe-area-inset-top,0px);padding-bottom:env(safe-area-inset-bottom,0px)}:host(.is-temporary.is-right) .cad-nav-drawer__panel{transform:translate(100%)}:host(.is-temporary.is-open) .cad-nav-drawer__panel{transform:translate(0)}.cad-nav-drawer__scrim{position:fixed;inset:0;background:var(--cad-backdrop, rgba(2,6,23,.45));pointer-events:auto;z-index:-1}.cad-nav-drawer__head{display:flex;align-items:center;gap:9px;flex:none;padding:14px 14px 12px;border-bottom:1px solid var(--cad-border);min-height:48px;color:var(--cad-fg);font-size:13px}:host(.is-rail) .cad-nav-drawer__head{justify-content:center;padding:14px 0 12px}.cad-nav-drawer__head cad-icon{color:var(--cad-accent);flex:none}.cad-nav-drawer__list{list-style:none;margin:0;padding:8px 0;flex:1;min-height:0;overflow-y:auto}.cad-nav-drawer__section{padding:12px 14px 5px;font-size:10px;font-weight:500;letter-spacing:.07em;text-transform:uppercase;color:var(--cad-fg-muted)}.cad-nav-drawer__rule{height:1px;margin:8px 12px;background:var(--cad-border)}.cad-nav-drawer__section.is-collapsible{all:unset;box-sizing:border-box;display:flex;align-items:center;gap:8px;width:100%;cursor:pointer;padding:12px 14px 5px;font:500 10px var(--cad-font);letter-spacing:.07em;text-transform:uppercase;color:var(--cad-fg-muted)}.cad-nav-drawer__section.is-collapsible:hover{color:var(--cad-fg-secondary)}.cad-nav-drawer__section.is-collapsible:focus-visible{outline:2px solid var(--cad-accent);outline-offset:-2px}.cad-nav-drawer__chev{flex:none;transition:transform var(--cad-dur) var(--cad-ease)}.cad-nav-drawer__section.is-collapsed .cad-nav-drawer__chev{transform:rotate(-90deg)}@media(prefers-reduced-motion:reduce){.cad-nav-drawer__chev{transition:none}}.cad-nav-drawer__item{all:unset;box-sizing:border-box;display:flex;align-items:center;gap:10px;width:100%;cursor:pointer;padding:8px 14px;min-height:38px;color:var(--cad-fg-secondary);font:12.5px var(--cad-font);text-decoration:none}:host(.is-rail) .cad-nav-drawer__item{justify-content:center;padding:10px 0}.cad-nav-drawer__item:hover{background:var(--cad-hover);color:var(--cad-fg)}.cad-nav-drawer__item:focus-visible{outline:2px solid var(--cad-accent);outline-offset:-2px}.cad-nav-drawer__item.is-active{background:var(--cad-accent-soft);color:var(--cad-accent);font-weight:500;box-shadow:inset 3px 0 0 var(--cad-accent)}:host(.is-right) .cad-nav-drawer__item.is-active{box-shadow:inset -3px 0 0 var(--cad-accent)}.cad-nav-drawer__item.is-disabled,.cad-nav-drawer__item:disabled{opacity:.45;cursor:not-allowed}.cad-nav-drawer__label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cad-nav-drawer__badge{flex:none;font-size:10.5px;font-family:var(--cad-font-mono);border-radius:var(--cad-radius-pill);padding:1px 7px;background:var(--cad-elevated, var(--cad-border));color:var(--cad-fg-secondary)}.cad-nav-drawer__item.is-active .cad-nav-drawer__badge{background:var(--cad-accent);color:var(--cad-fg-on-accent)}.cad-nav-drawer__dot{position:absolute;margin:-14px 0 0 14px;width:7px;height:7px;border-radius:50%;background:var(--cad-danger, #f85149)}.cad-nav-drawer__foot{flex:none;border-top:1px solid var(--cad-border);padding:10px 14px}.cad-nav-drawer__foot.is-empty{display:none}:host(.is-rail) .cad-nav-drawer__foot{padding:10px 0;display:flex;justify-content:center}:host-context(.cad-touch) .cad-nav-drawer__item{min-height:44px}@media(prefers-reduced-motion:reduce){.cad-nav-drawer__panel{transition:none}}\n"] }]
9771
+ }], ctorParameters: () => [], propDecorators: { items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }, { type: i0.Output, args: ["openChange"] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], collapsed: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapsed", required: false }] }, { type: i0.Output, args: ["collapsedChange"] }], mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], breakpoint: [{ type: i0.Input, args: [{ isSignal: true, alias: "breakpoint", required: false }] }], position: [{ type: i0.Input, args: [{ isSignal: true, alias: "position", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], closeOnNavigate: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOnNavigate", required: false }] }], closeOnEscape: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOnEscape", required: false }] }], dismissableScrim: [{ type: i0.Input, args: [{ isSignal: true, alias: "dismissableScrim", required: false }] }], opened: [{ type: i0.Output, args: ["opened"] }], closed: [{ type: i0.Output, args: ["closed"] }], itemClick: [{ type: i0.Output, args: ["itemClick"] }], changed: [{ type: i0.Output, args: ["changed"] }], headerSlot: [{ type: i0.ContentChild, args: [i0.forwardRef(() => CadNavDrawerHeaderDirective), { isSignal: true }] }], footerSlot: [{ type: i0.ContentChild, args: [i0.forwardRef(() => CadNavDrawerFooterDirective), { isSignal: true }] }], onEscape: [{
9639
9772
  type: HostListener,
9640
9773
  args: ['document:keydown.escape']
9641
9774
  }] } });
@@ -10647,7 +10780,7 @@ class CadTableComponent extends CadTableBase {
10647
10780
  cadDownloadCsv([cols.map(c => c.header() || c.field()), ...data.map(r => cols.map(c => { const v = cadResolve(r, c.field()); return this.cellFormatter() ? this.cellFormatter()(v, c, r) : v; }))], opts.filename ?? 'export', opts.separator);
10648
10781
  }
10649
10782
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: CadTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
10650
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.20", type: CadTableComponent, isStandalone: true, selector: "cad-table", host: { properties: { "class.is-dense": "dense()", "class.is-striped": "striped()", "class.is-hoverable": "hoverable()", "class.is-bordered": "bordered()", "class.is-borderless": "borderless()", "class.is-sticky-header": "stickyHeader()", "class.has-scroll-height": "!!scrollHeight()", "class.is-resizable": "resizableColumns()", "class.acts-always": "rowActionsAlwaysVisible()", "class.is-loading": "loading()", "class.is-tree": "isTree()", "class.is-grouped": "isGrouped()", "class.has-tree-lines": "showTreeLines()", "class.is-stacked": "resp.stacked()", "class.hide-p2": "resp.hiddenPriorities().has(2)", "class.hide-p3": "resp.hiddenPriorities().has(3)", "class.hide-p4": "resp.hiddenPriorities().has(4)", "class.hide-p5": "resp.hiddenPriorities().has(5)", "class.is-scrolled-x": "sticky.scrolledX()", "class.is-scrolled-x-end": "sticky.scrolledXEnd()", "class.is-virtual": "virtualScroll()", "class.is-reorderable": "reorderableColumns()", "class.has-row-numbers": "showRowNumber()", "class.rows-draggable": "rowDragEnabled()", "class.has-col-menu": "hasColumnMenu()", "class.edit-cell": "editMode() === \"cell\"", "class.edit-row": "editMode() === \"row\" || editMode() === \"row-inline\"", "class.show-edit-icon": "editMode() === \"cell\" && showEditIcon()", "style.--_scroll-h": "scrollHeight() || null", "style.--_detail-pl": "detailPaddingLeft()", "style.--_indent": "indent()" }, classAttribute: "cad-table" }, viewQueries: [{ propertyName: "scroller", first: true, predicate: ["scroller"], descendants: true, isSignal: true }, { propertyName: "dtEl", first: true, predicate: ["dt"], descendants: true, isSignal: true }, { propertyName: "headerMenu", first: true, predicate: ["hmenu"], descendants: true, isSignal: true }, { propertyName: "filterMenu", first: true, predicate: ["fmenu"], descendants: true, isSignal: true }, { propertyName: "inMenu", first: true, predicate: ["inmenu"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"dt\" #dt [class]=\"'dt ' + styleClass()\">\n <!-- barre de s\u00E9lection contextuelle (remplace la barre d'outils) -->\n @if (selectedCount() > 0 && showSelectionBar()) {\n <div class=\"dt-sel\" role=\"region\" aria-live=\"polite\">\n <cad-checkbox [value]=\"allState() === 'all'\" [indeterminate]=\"allState() === 'some'\" ariaLabel=\"Tout s\u00E9lectionner\" (changed)=\"toggleAll()\"/>\n <span>{{ selectedCount() }} {{ selectedCount() > 1 ? selectedLabelPlural() : selectedLabel() }}</span>\n <span class=\"dt-sel__grow\"></span>\n <ng-content select=\"[cadTableSelectionBar]\"/>\n <button type=\"button\" class=\"dt-sel__clear\" aria-label=\"Annuler la s\u00E9lection\" (click)=\"clearSelection()\"><cad-icon name=\"x\" [size]=\"14\"/></button>\n </div>\n } @else if (showToolbar()) {\n <div class=\"dt-bar\">\n @if (title()) {<span class=\"dt-bar__title\">{{ title() }}</span>}\n @if (showCount()) {<span class=\"dt-bar__count\">{{ count() ?? totalFiltered() }}</span>}\n @if (resp.stacked()) {\n <button type=\"button\" class=\"dt-bar__btn dt-bar__filters\" [class.is-on]=\"filtersOpen()\" [attr.aria-expanded]=\"filtersOpen()\" (click)=\"filtersOpen.set(!filtersOpen())\">\n <cad-icon name=\"filter\" [size]=\"13\"/>{{ filtersLabel() }}@if (activeFilterCount() > 0) {<span class=\"dt-bar__count\">{{ activeFilterCount() }}</span>}\n </button>\n }\n <span class=\"dt-bar__tools\" [class.is-open]=\"filtersOpen()\"><ng-content select=\"[cadTableToolbar]\"/></span>\n <span class=\"dt-bar__grow\"></span>\n @if (showSearch()) {\n <div class=\"dt-bar__search\">\n <cad-icon name=\"search\" [size]=\"14\"/>\n <input type=\"search\" [placeholder]=\"searchPlaceholder()\" [value]=\"searchText()\" (input)=\"onSearch($any($event.target).value)\" [attr.aria-label]=\"searchPlaceholder()\"/>\n @if (searchText()) {<button type=\"button\" class=\"dt-bar__clear\" aria-label=\"Effacer la recherche\" (click)=\"onSearch('', true)\"><cad-icon name=\"x\" [size]=\"12\"/></button>}\n </div>\n }\n <span class=\"dt-bar__tools-end\"><ng-content select=\"[cadTableToolbarEnd]\"/></span>\n @if (columnToggle()) {\n <div class=\"dt-bar__cols\">\n <button type=\"button\" class=\"dt-bar__btn\" [class.is-on]=\"colsMenuOpen()\" aria-haspopup=\"true\" [attr.aria-expanded]=\"colsMenuOpen()\" (click)=\"colsMenuOpen.set(!colsMenuOpen())\">\n {{ columnsLabel() }} <cad-icon name=\"chevron-down\" [size]=\"12\"/>\n </button>\n @if (colsMenuOpen()) {\n <div class=\"dt-bar__menu\" role=\"menu\" (keydown.escape)=\"colsMenuOpen.set(false)\">\n <div class=\"dt-bar__menu-title\">{{ columnsLabel() }}</div>\n @for (c of orderedColumns(); track c.id(); let ci = $index; let first = $first; let last = $last) {\n <label [class.is-locked]=\"!c.toggleable()\">\n <cad-checkbox [value]=\"!c.hidden()\" [disabled]=\"!c.toggleable()\" (changed)=\"toggleColumn(c, !$event)\"/>\n <span>{{ c.header() || c.field() }}</span>\n @if (reorderableColumns()) {\n <span class=\"mv\" (click)=\"$event.stopPropagation(); $event.preventDefault()\">\n <button type=\"button\" aria-label=\"Monter\" [disabled]=\"first\" (click)=\"moveColumn(ci, ci - 1)\"><cad-icon name=\"chevron-up\" [size]=\"12\"/></button>\n <button type=\"button\" aria-label=\"Descendre\" [disabled]=\"last\" (click)=\"moveColumn(ci, ci + 1)\"><cad-icon name=\"chevron-down\" [size]=\"12\"/></button>\n </span>\n }\n </label>\n }\n </div>\n }\n </div>\n }\n @if (showDensityToggle()) {\n <button type=\"button\" class=\"dt-bar__btn is-ghost dt-bar__density\" [class.is-on]=\"dense()\" [attr.aria-pressed]=\"dense()\" aria-label=\"Densit\u00E9\" title=\"Densit\u00E9\" (click)=\"dense.set(!dense())\"><cad-icon name=\"chevrons-up-down\" [size]=\"14\"/></button>\n }\n </div>\n }\n\n @if (showGroupZone() && !resp.stacked()) {\n <div class=\"dt-gz\" [class.is-empty]=\"!groupFields().length\" cdkDropList [id]=\"gzId\" cdkDropListOrientation=\"horizontal\" [cdkDropListData]=\"groupFields()\" [cdkDropListEnterPredicate]=\"gzEnter\" (cdkDropListDropped)=\"onGroupZoneDrop($event)\">\n <cad-icon name=\"layers\" [size]=\"14\"/>\n @if (!groupFields().length) {<span class=\"dt-gz__hint\">{{ groupZoneLabel() }}</span>}\n @for (f of groupFields(); track f) {\n <span class=\"dt-gz__chip\" cdkDrag [cdkDragData]=\"f\" cdkDragLockAxis=\"x\"><cad-icon name=\"drag\" [size]=\"11\" class=\"dt-gz__drag\"/><span>{{ groupChipLabel(f) }}</span><button type=\"button\" [attr.aria-label]=\"'Ne plus grouper par ' + groupChipLabel(f)\" (click)=\"ungroup(f)\"><cad-icon name=\"x\" [size]=\"11\"/></button></span>\n }\n </div>\n }\n\n <div class=\"dt-scroll\" #scroller (scroll)=\"onScroll()\">\n @if (loading() && hasData()) {<div class=\"dt-loading\"><cad-icon name=\"loader\" [size]=\"22\" spin/></div>}\n <table class=\"tbl\" [class]=\"'tbl ' + tableClass()\" [style]=\"tableStyle()\" [attr.aria-busy]=\"loading() ? 'true' : null\" [attr.aria-rowcount]=\"totalFiltered()\" [attr.role]=\"hierarchical() ? 'treegrid' : null\">\n @if (captionTpl()) {<caption><ng-container *ngTemplateOutlet=\"captionTpl()!.tpl\"/></caption>}\n <colgroup>\n @if (hasNumberColumn()) {<col style=\"width:44px\">}\n @if (hasSelectionColumn()) {<col style=\"width:36px\">}\n @if (rowDragEnabled()) {<col style=\"width:28px\">}\n @if (hasExpandColumn()) {<col style=\"width:30px\">}\n @for (c of visibleColumns(); track c.id()) {<col [style.width]=\"colWidth(c)\" [style.min-width]=\"c.minWidth() || null\" [style.max-width]=\"c.maxWidth() || null\">}\n @if (hasActionsColumn()) {<col [style.width]=\"rowActionsWidth()\">}\n </colgroup>\n <thead>\n @if (headerGroups().length && !resp.stacked()) {\n <tr class=\"hg\">\n @if (hasNumberColumn()) {<th [class]=\"stickyClass('num')\" [style.left.px]=\"stickyLeft('num')\"></th>}\n @if (hasSelectionColumn()) {<th [class]=\"stickyClass('sel')\" [style.left.px]=\"stickyLeft('sel')\"></th>}\n @if (rowDragEnabled()) {<th [class]=\"stickyClass('drag')\" [style.left.px]=\"stickyLeft('drag')\"></th>}\n @if (hasExpandColumn()) {<th [class]=\"stickyClass('exp')\" [style.left.px]=\"stickyLeft('exp')\"></th>}\n @for (g of headerGroups(); track $index) {<th scope=\"colgroup\" [attr.colspan]=\"g.span\" [class]=\"'hg-cell ' + (g.class || '')\">{{ g.header }}</th>}\n @if (hasActionsColumn()) {<th [class]=\"stickyClass('acts')\" [style.right.px]=\"stickyRight('acts')\"></th>}\n </tr>\n }\n <tr cdkDropList cdkDropListOrientation=\"horizontal\" [cdkDropListDisabled]=\"!reorderableColumns() && !showGroupZone()\" [cdkDropListSortingDisabled]=\"!reorderableColumns()\" [cdkDropListConnectedTo]=\"showGroupZone() ? [gzId] : []\" (cdkDropListDropped)=\"onColumnDrop($event)\">\n @if (hasNumberColumn()) {<th class=\"col-num\" scope=\"col\" data-sk=\"num\" [class]=\"'col-num ' + stickyClass('num')\" [style.left.px]=\"stickyLeft('num')\">#</th>}\n @if (hasSelectionColumn()) {\n <th class=\"col-sel\" scope=\"col\" data-sk=\"sel\" [class]=\"'col-sel ' + stickyClass('sel')\" [style.left.px]=\"stickyLeft('sel')\">\n @if (selectionMode() === 'multiple' && selectAll()) {\n <cad-checkbox [value]=\"allState() === 'all'\" [indeterminate]=\"allState() === 'some'\" ariaLabel=\"Tout s\u00E9lectionner\" (changed)=\"toggleAll()\"/>\n }\n </th>\n }\n @if (rowDragEnabled()) {<th class=\"col-drag\" scope=\"col\" data-sk=\"drag\" [class]=\"'col-drag ' + stickyClass('drag')\" [style.left.px]=\"stickyLeft('drag')\"><span hidden>D\u00E9placer</span></th>}\n @if (hasExpandColumn()) {<th class=\"col-exp\" scope=\"col\" data-sk=\"exp\" [class]=\"'col-exp ' + stickyClass('exp')\" [style.left.px]=\"stickyLeft('exp')\"><span hidden>D\u00E9tail</span></th>}\n @for (c of visibleColumns(); track c.id()) {\n <th scope=\"col\" [attr.data-sk]=\"c.id()\" [class]=\"thClass(c) + (canDrag(c) ? ' can-drag' : '') + (showsMenu(c) ? ' has-menu' : '') + (hasColFilter(c) ? ' is-filtered' : '')\" [attr.aria-sort]=\"ariaSort(c)\" [style.width]=\"colWidth(c)\" [style.left.px]=\"stickyLeft(c.id())\" [style.right.px]=\"stickyRight(c.id())\"\n cdkDrag [cdkDragDisabled]=\"!canDrag(c)\" [cdkDragData]=\"c\" [cdkDragLockAxis]=\"showGroupZone() ? null : 'x'\" cdkDragPreviewClass=\"dt-th-preview\" [cdkDragBoundary]=\"showGroupZone() ? '' : '.tbl thead'\">\n @if (canDrag(c)) {<span class=\"dh\" cdkDragHandle aria-hidden=\"true\" title=\"D\u00E9placer la colonne\"><cad-icon name=\"drag\" [size]=\"12\"/></span>}\n @if (c.headerTpl()) {\n <ng-container *ngTemplateOutlet=\"c.headerTpl()!.tpl; context: { $implicit: c }\"/>\n } @else if (c.sortable()) {\n <button type=\"button\" class=\"hd\" (click)=\"sort(c, $event)\" [attr.aria-label]=\"'Trier par ' + c.header()\">\n <span class=\"hd-txt\">{{ c.header() }}</span>\n <cad-icon [name]=\"sortIcon(c)\" [size]=\"12\"/>\n @if (sortMode() === 'multiple' && sortIndex(c) > 0) {<span class=\"hd-idx\">{{ sortIndex(c) }}</span>}\n </button>\n } @else {\n <span class=\"hd\"><span class=\"hd-txt\">{{ c.header() }}</span></span>\n }\n @if (showsMenu(c)) {<button type=\"button\" class=\"hm\" [class.is-on]=\"menuColumn() === c && !!headerMenu()?.visible()\" aria-label=\"Menu de la colonne\" aria-haspopup=\"menu\" (click)=\"openHeaderMenu(c, $event)\" (pointerdown)=\"$event.stopPropagation()\"><cad-icon name=\"more-vertical\" [size]=\"13\"/></button>}\n @if (isResizable(c)) {<span class=\"rz\" [class.is-active]=\"resizingId() === c.id()\" (pointerdown)=\"startResize($event, c)\" aria-hidden=\"true\"></span>}\n </th>\n }\n @if (hasActionsColumn()) {<th class=\"col-acts\" scope=\"col\" data-sk=\"acts\" [class]=\"'col-acts ' + stickyClass('acts')\" [style.right.px]=\"stickyRight('acts')\"><span hidden>Actions</span></th>}\n </tr>\n @if (hasFilterRow()) {\n <tr class=\"flt\">\n @if (hasNumberColumn()) {<th [class]=\"stickyClass('num')\" [style.left.px]=\"stickyLeft('num')\"></th>}\n @if (hasSelectionColumn()) {<th [class]=\"stickyClass('sel')\" [style.left.px]=\"stickyLeft('sel')\"></th>}\n @if (rowDragEnabled()) {<th [class]=\"stickyClass('drag')\" [style.left.px]=\"stickyLeft('drag')\"></th>}\n @if (hasExpandColumn()) {<th [class]=\"stickyClass('exp')\" [style.left.px]=\"stickyLeft('exp')\"></th>}\n @for (c of visibleColumns(); track c.id()) {\n <th [class]=\"stickyClass(c.id())\" [style.left.px]=\"stickyLeft(c.id())\" [style.right.px]=\"stickyRight(c.id())\">\n @if (c.filterable()) {\n @if (c.filterTpl()) {\n <ng-container *ngTemplateOutlet=\"c.filterTpl()!.tpl; context: { $implicit: c, value: filterValue(c), filter: filterFn(c) }\"/>\n } @else {\n @let kind = filterKind(c);\n @let op = filterOp(c);\n <div class=\"flt-cell\" [class.is-active]=\"hasColFilter(c)\" [class.is-range]=\"op.range\">\n @if (kind === 'boolean') {\n <select [value]=\"filterValue(c) == null ? '' : '' + filterValue(c)\" (change)=\"setFilter(c, $any($event.target).value === '' ? null : $any($event.target).value === 'true')\" [attr.aria-label]=\"'Filtrer ' + c.header()\">\n <option value=\"\">{{ c.filterPlaceholder() || 'Tous' }}</option><option value=\"true\">Oui</option><option value=\"false\">Non</option>\n </select>\n } @else if (kind === 'select' && op.mode !== 'eq') {\n <button type=\"button\" class=\"flt-in\" [class.is-ph]=\"!filterArray(c).length\" [attr.aria-label]=\"'Filtrer ' + c.header()\" (click)=\"openInMenu(c, $event)\">\n <span>{{ filterArray(c).length ? filterArray(c).length + ' s\u00E9lectionn\u00E9' + (filterArray(c).length > 1 ? 's' : '') : (c.filterPlaceholder() || 'Tous') }}</span><cad-icon name=\"chevron-down\" [size]=\"11\"/>\n </button>\n } @else if (kind === 'select') {\n <select [value]=\"filterValue(c) ?? ''\" (change)=\"setFilter(c, $any($event.target).value || null, 'eq')\" [attr.aria-label]=\"'Filtrer ' + c.header()\">\n <option value=\"\">{{ c.filterPlaceholder() || 'Tous' }}</option>\n @for (o of c.filterOptions(); track $index) {<option [value]=\"o.value\" [selected]=\"o.value === filterValue(c)\">{{ o.label }}</option>}\n </select>\n } @else if (!op.needsValue) {\n <span class=\"flt-txt\">{{ op.label }}</span>\n } @else if (op.range) {\n <input [type]=\"kind === 'number' ? 'number' : kind === 'date' ? 'date' : 'search'\" [value]=\"filterPart(c, 0)\" placeholder=\"min\" (input)=\"setFilterPart(c, 0, $any($event.target).value)\" [attr.aria-label]=\"'Filtrer ' + c.header() + ' (min)'\"/>\n <input [type]=\"kind === 'number' ? 'number' : kind === 'date' ? 'date' : 'search'\" [value]=\"filterPart(c, 1)\" placeholder=\"max\" (input)=\"setFilterPart(c, 1, $any($event.target).value)\" [attr.aria-label]=\"'Filtrer ' + c.header() + ' (max)'\"/>\n } @else {\n <input [type]=\"kind === 'number' ? 'number' : kind === 'date' ? 'date' : 'search'\" [value]=\"filterPart(c, 0)\" [placeholder]=\"c.filterPlaceholder() || op.label\" (input)=\"setFilterDebounced(c, $any($event.target).value)\" [attr.aria-label]=\"'Filtrer ' + c.header()\"/>\n }\n @if (kind !== 'boolean') {\n <button type=\"button\" class=\"flt-op\" [class.is-on]=\"hasColFilter(c) || op.mode !== filterOp(c).mode\" [attr.aria-label]=\"'Op\u00E9rateur : ' + op.label\" [title]=\"op.label\" (click)=\"openFilterMenu(c, $event)\"><cad-icon name=\"filter\" [size]=\"12\"/></button>\n }\n @if (hasColFilter(c)) {<button type=\"button\" class=\"flt-x\" aria-label=\"Effacer le filtre\" (click)=\"clearColumnFilter(c)\"><cad-icon name=\"x\" [size]=\"11\"/></button>}\n </div>\n }\n }\n </th>\n }\n @if (hasActionsColumn()) {<th [class]=\"stickyClass('acts')\" [style.right.px]=\"stickyRight('acts')\"></th>}\n </tr>\n }\n </thead>\n <tbody cdkDropList [cdkDropListDisabled]=\"!rowDragEnabled()\" cdkDropListLockAxis=\"y\" (cdkDropListDropped)=\"onRowDrop($event)\">\n @if (loading() && !hasData()) {\n @for (i of skeletonRows(); track i) {\n <tr class=\"dt-row is-skeleton\" aria-hidden=\"true\">\n @if (hasNumberColumn()) {<td class=\"col-num\"></td>}\n @if (hasSelectionColumn()) {<td class=\"col-sel\"></td>}\n @if (rowDragEnabled()) {<td class=\"col-drag\"></td>}\n @if (hasExpandColumn()) {<td class=\"col-exp\"></td>}\n @for (c of visibleColumns(); track c.id()) {<td [class]=\"tdClass(c)\"><div class=\"skel\" [style.width.%]=\"skeletonWidth(i, $index)\" [style.margin-left]=\"c.effectiveAlign() === 'right' ? 'auto' : null\"></div></td>}\n @if (hasActionsColumn()) {<td></td>}\n </tr>\n }\n } @else if (!displayRows().length) {\n <tr class=\"dt-empty\"><td [attr.colspan]=\"colspan()\">\n @if (emptyTpl()) {<ng-container *ngTemplateOutlet=\"emptyTpl()!.tpl\"/>}\n @else {\n <div class=\"empty\">\n @if (emptyIcon()) {<cad-icon [name]=\"emptyIcon()\" [size]=\"26\" [strokeWidth]=\"1.5\"/>}\n <b>{{ emptyMessage() }}</b>\n @if (emptyHint()) {<span>{{ emptyHint() }}</span>}\n </div>\n }\n </td></tr>\n } @else {\n @if (virtual.range().topPad > 0) {<tr class=\"dt-vpad\" aria-hidden=\"true\"><td [attr.colspan]=\"colspan()\" [style.height.px]=\"virtual.range().topPad\"></td></tr>}\n @for (d of renderRows(); track d.trackKey; let vi = $index) {\n @let i = vi + virtual.range().start;\n @if (d.kind === 'group') {\n <!-- en-t\u00EAte de groupe -->\n <tr class=\"dt-group\" [class.is-expanded]=\"d.node!.expanded\" [style.--_lvl]=\"d.level\" role=\"row\" [attr.aria-level]=\"d.level + 1\" [attr.aria-expanded]=\"d.node!.expanded\">\n <td [attr.colspan]=\"colspan()\" class=\"dt-group__cell\">\n <div class=\"dt-group__inner\">\n @if (hasSelectionColumn() && selectionMode() === 'multiple') {\n <cad-checkbox [value]=\"nodeState(d) === 'on'\" [indeterminate]=\"nodeState(d) === 'some'\" [ariaLabel]=\"'S\u00E9lectionner le groupe ' + d.node!.group!.label\" (changed)=\"toggleGroupSelection(d, $event)\"/>\n }\n <button type=\"button\" class=\"exp\" [attr.aria-expanded]=\"d.node!.expanded\" [attr.aria-label]=\"d.node!.expanded ? 'Replier' : 'D\u00E9plier'\" (click)=\"toggleGroup(d.node!)\"><cad-icon name=\"chevron-right\" [size]=\"13\"/></button>\n @if (groupHeaderTpl()) {\n <ng-container *ngTemplateOutlet=\"groupHeaderTpl()!.tpl; context: groupCtx(d)\"/>\n } @else {\n <span class=\"dt-group__label\">{{ d.node!.group!.label }}</span>\n <span class=\"dt-group__count\">{{ d.node!.group!.count }}</span>\n }\n </div>\n </td>\n </tr>\n } @else if (d.kind === 'groupFooter') {\n <!-- pied de groupe (agr\u00E9gats) -->\n <tr class=\"dt-group-foot\" [style.--_lvl]=\"d.level\">\n @if (groupFooterTpl()) {\n <td [attr.colspan]=\"colspan()\"><ng-container *ngTemplateOutlet=\"groupFooterTpl()!.tpl; context: groupCtx(d)\"/></td>\n } @else {\n @if (hasNumberColumn()) {<td class=\"col-num\"></td>}\n @if (hasSelectionColumn()) {<td class=\"col-sel\"></td>}\n @if (rowDragEnabled()) {<td class=\"col-drag\"></td>}\n @if (hasExpandColumn()) {<td class=\"col-exp\"></td>}\n @for (c of visibleColumns(); track c.id(); let ci = $index) {\n <td [class]=\"tdClass(c)\" [attr.data-l]=\"c.header()\">\n @if (ci === 0 && !hasAggregate(c)) {<span class=\"dt-group-foot__label\">Total {{ d.node!.group!.label }}</span>}\n @else if (hasAggregate(c)) {{{ formatCell(d.node!.group!.aggregates[c.field()], c) }}}\n </td>\n }\n @if (hasActionsColumn()) {<td></td>}\n }\n </tr>\n } @else if (resp.stacked() && cardTpl()) {\n <!-- carte custom (mode stack) -->\n <tr class=\"dt-row dt-card\" [class]=\"rowClasses(d.row, i, d)\" [style]=\"rowStyle()?.(d.row, i) || null\" [attr.tabindex]=\"selectionMode() ? 0 : null\" [attr.aria-selected]=\"selectionMode() ? isSelected(d.row) : null\"\n (click)=\"onRowClick(d.row, i, $event)\" (keydown)=\"onRowKey(d, i, $event)\">\n <td [attr.colspan]=\"colspan()\"><ng-container *ngTemplateOutlet=\"cardTpl()!.tpl; context: { $implicit: d.row, rowIndex: i, node: d.node, selected: isSelected(d.row) }\"/></td>\n </tr>\n } @else {\n <!-- ligne -->\n <tr class=\"dt-row\" [class]=\"rowClasses(d.row, i, d)\" [style]=\"rowStyle()?.(d.row, i) || null\" [style.--_lvl]=\"d.level\" [attr.data-key]=\"d.key\" [class.is-editing-row]=\"isRowEditing(d.row)\"\n cdkDrag [cdkDragDisabled]=\"!canDragRow(d.row)\" [cdkDragData]=\"d.row\" cdkDragLockAxis=\"y\" cdkDragPreviewClass=\"dt-tr-preview\" cdkDragBoundary=\".tbl\"\n [attr.tabindex]=\"selectionMode() || hierarchical() ? 0 : null\" [attr.aria-selected]=\"selectionMode() ? isSelected(d.row) : null\"\n [attr.role]=\"hierarchical() ? 'row' : null\" [attr.aria-level]=\"hierarchical() ? d.level + 1 : null\" [attr.aria-expanded]=\"d.node?.hasChildren ? d.node!.expanded : null\"\n [attr.aria-setsize]=\"d.node ? d.node.setSize : null\" [attr.aria-posinset]=\"d.node ? d.node.posInSet : null\"\n (click)=\"onRowClick(d.row, i, $event)\" (dblclick)=\"rowDblClick.emit({ row: d.row, index: i, event: $event })\" (keydown)=\"onRowKey(d, i, $event)\">\n @if (hasNumberColumn()) {<td class=\"col-num\" [class]=\"'col-num ' + stickyClass('num')\" [style.left.px]=\"stickyLeft('num')\">{{ rowNumber(d) }}</td>}\n @if (hasSelectionColumn()) {\n <td class=\"col-sel\" [class]=\"'col-sel ' + stickyClass('sel')\" [style.left.px]=\"stickyLeft('sel')\">\n @if (canSelect(d.row)) {\n @if (selectionMode() === 'multiple') {\n <cad-checkbox [value]=\"nodeState(d) === 'on'\" [indeterminate]=\"nodeState(d) === 'some'\" [ariaLabel]=\"'S\u00E9lectionner la ligne ' + (i + 1)\" (changed)=\"toggleRow(d.row, i, $event)\"/>\n } @else {\n <cad-checkbox [value]=\"isSelected(d.row)\" [ariaLabel]=\"'S\u00E9lectionner la ligne ' + (i + 1)\" (changed)=\"selectSingle(d.row, i)\"/>\n }\n }\n </td>\n }\n @if (rowDragEnabled()) {\n <td class=\"col-drag\" [class]=\"'col-drag ' + stickyClass('drag')\" [style.left.px]=\"stickyLeft('drag')\">\n @if (canDragRow(d.row)) {<span class=\"rdh\" cdkDragHandle title=\"D\u00E9placer la ligne\" aria-hidden=\"true\"><cad-icon name=\"drag\" [size]=\"13\"/></span>}\n </td>\n }\n @if (hasExpandColumn()) {\n <td class=\"col-exp\" [class]=\"'col-exp ' + stickyClass('exp')\" [style.left.px]=\"stickyLeft('exp')\">\n @if (canExpand(d.row)) {\n <button type=\"button\" class=\"exp\" [attr.aria-expanded]=\"isExpanded(d.row)\" [attr.aria-label]=\"isExpanded(d.row) ? 'Replier' : 'D\u00E9plier'\" (click)=\"toggleExpand(d.row, $event)\"><cad-icon name=\"chevron-right\" [size]=\"13\"/></button>\n }\n </td>\n }\n @for (c of visibleColumns(); track c.id(); let cFirst = $first) {\n <td [class]=\"tdClass(c) + ' ' + stickyClass(c.id()) + (isTreeColumn(c) ? ' dt-tree-cell' : '') + (cFirst ? ' dt-first' : '') + (editUi.canEditCell(c) ? ' is-editable' : '') + (edit.isEditing(d.row, c) ? ' is-editing' : '')\"\n [style.left.px]=\"stickyLeft(c.id())\" [style.right.px]=\"stickyRight(c.id())\" [attr.data-l]=\"c.header()\"\n (click)=\"editUi.onCellClick(d.row, c, $event, false)\" (dblclick)=\"editUi.onCellClick(d.row, c, $event, true)\">\n @if (edit.isEditing(d.row, c) && c.field()) {\n <!-- \u00E9diteur inline (mode cell ou row) -->\n <div class=\"dt-editor\" [class.is-invalid]=\"!!edit.cellError(d.row, c)\" (click)=\"$event.stopPropagation()\" (dblclick)=\"$event.stopPropagation()\" (keydown)=\"editUi.onKey(d.row, c, $event)\" (focusout)=\"editUi.onBlur(d.row, c)\">\n @if (c.editorTpl()) {\n <ng-container *ngTemplateOutlet=\"c.editorTpl()!.tpl; context: editUi.ctxFor(d.row, c, i)\"/>\n } @else {\n @switch (c.editor()) {\n @case ('select') {\n <select cadEditFocus [attr.aria-label]=\"c.header()\" (change)=\"editUi.onInput(d.row, c, $any($event.target).value)\">\n @for (o of c.effectiveEditorOptions(); track $index) {<option [value]=\"o.value\" [selected]=\"o.value === edit.valueOf(d.row, c)\">{{ o.label }}</option>}\n </select>\n }\n @case ('checkbox') {<input type=\"checkbox\" cadEditFocus [checked]=\"!!edit.valueOf(d.row, c)\" [attr.aria-label]=\"c.header()\" (change)=\"editUi.onInput(d.row, c, $any($event.target).checked)\"/>}\n @case ('textarea') {<textarea cadEditFocus rows=\"3\" [value]=\"edit.valueOf(d.row, c) ?? ''\" [attr.aria-label]=\"c.header()\" (input)=\"editUi.onInput(d.row, c, $any($event.target).value)\"></textarea>}\n @default {<input cadEditFocus [type]=\"editUi.inputType(c)\" [value]=\"edit.valueOf(d.row, c) ?? ''\" [attr.aria-label]=\"c.header()\" [attr.aria-invalid]=\"edit.cellError(d.row, c) ? 'true' : null\" (input)=\"editUi.onInput(d.row, c, $any($event.target).value)\"/>}\n }\n }\n @if (edit.cellError(d.row, c)) {<span class=\"dt-editor__err\" role=\"alert\">{{ edit.cellError(d.row, c) }}</span>}\n </div>\n } @else {\n @if (editUi.canEditCell(c) && showEditIcon()) {<button type=\"button\" class=\"ce\" tabindex=\"-1\" aria-label=\"Modifier\" (click)=\"$event.stopPropagation(); editUi.startEdit(d.row, c)\"><cad-icon name=\"edit\" [size]=\"11\"/></button>}\n @if (isTreeColumn(c) && d.node) {\n <span class=\"cad-tree-toggle\" [style.--_lvl]=\"d.level\">\n @if (showTreeLines()) { @for (l of levelsOf(d.level); track l) {<i class=\"tl\" aria-hidden=\"true\"></i>} }\n @else {<i class=\"ind\" aria-hidden=\"true\"></i>}\n <button type=\"button\" class=\"tg\" [class.is-leaf]=\"!d.node.hasChildren\" [class.is-open]=\"d.node.expanded\" [attr.tabindex]=\"d.node.hasChildren ? 0 : -1\"\n [attr.aria-expanded]=\"d.node.hasChildren ? d.node.expanded : null\" [attr.aria-label]=\"d.node.expanded ? 'Replier' : 'D\u00E9plier'\" (click)=\"toggleNode(d.node, $event)\">\n @if (d.node.loading) {<cad-icon name=\"loader\" [size]=\"12\" spin/>} @else {<cad-icon name=\"chevron-right\" [size]=\"13\"/>}\n </button>\n @if (treeIconOf(d.row)) {<cad-icon class=\"ic\" [name]=\"treeIconOf(d.row)!\" [size]=\"14\"/>}\n </span>\n }\n @if (c.cellTpl()) {\n <ng-container *ngTemplateOutlet=\"c.cellTpl()!.tpl; context: { $implicit: d.row, value: cell(d.row, c), rowIndex: i, column: c, level: d.level, expanded: d.node?.expanded ?? false, hasChildren: d.node?.hasChildren ?? false, node: d.node }\"/>\n } @else {<span class=\"cell-txt\">{{ formatCell(cell(d.row, c), c) }}</span>}\n }\n </td>\n }\n @if (hasActionsColumn()) {\n <td class=\"col-acts\" [class]=\"'col-acts ' + stickyClass('acts')\" [style.right.px]=\"stickyRight('acts')\"><span class=\"acts\" (click)=\"$event.stopPropagation()\">\n @if ((editMode() === 'row' || editMode() === 'row-inline') && showRowEditButton()) {\n @if (isRowEditing(d.row)) {\n <button type=\"button\" class=\"re ok\" aria-label=\"Enregistrer la ligne\" title=\"Enregistrer\" (click)=\"saveRowEdit(d.row)\"><cad-icon name=\"check\" [size]=\"15\"/></button>\n <button type=\"button\" class=\"re ko\" aria-label=\"Annuler l'\u00E9dition\" title=\"Annuler\" (click)=\"cancelRowEdit(d.row)\"><cad-icon name=\"x\" [size]=\"15\"/></button>\n } @else {\n <button type=\"button\" class=\"re\" aria-label=\"Modifier la ligne\" title=\"Modifier\" (click)=\"initRowEdit(d.row)\"><cad-icon name=\"edit\" [size]=\"14\"/></button>\n }\n }\n @if (rowActionsTpl()) {<ng-container *ngTemplateOutlet=\"rowActionsTpl()!.tpl; context: { $implicit: d.row, rowIndex: i, node: d.node, editing: isRowEditing(d.row) }\"/>}\n </span></td>\n }\n </tr>\n @if (isExpanded(d.row) && hasExpandColumn()) {\n <tr class=\"dt-detail\" [style.--_lvl]=\"d.level\"><td [attr.colspan]=\"colspan()\">\n @if (expansionTpl()) {\n <ng-container *ngTemplateOutlet=\"expansionTpl()!.tpl; context: { $implicit: d.row, rowIndex: i, hiddenColumns: hiddenByPriority(), node: d.node }\"/>\n } @else {\n <div class=\"kv\">\n @for (c of hiddenByPriority(); track c.id()) {<div><b>{{ c.header() || c.field() }}</b>\n @if (c.cellTpl()) {<ng-container *ngTemplateOutlet=\"c.cellTpl()!.tpl; context: { $implicit: d.row, value: cell(d.row, c), rowIndex: i, column: c, level: d.level, expanded: false, hasChildren: false, node: d.node }\"/>}\n @else {{{ formatCell(cell(d.row, c), c) }}}\n </div>}\n </div>\n }\n </td></tr>\n }\n }\n }\n @if (virtual.range().bottomPad > 0) {<tr class=\"dt-vpad\" aria-hidden=\"true\"><td [attr.colspan]=\"colspan()\" [style.height.px]=\"virtual.range().bottomPad\"></td></tr>}\n }\n </tbody>\n @if (footerTpl() || showGrandTotalRow()) {\n <tfoot>\n @if (showGrandTotalRow()) {\n <tr class=\"dt-grand\">\n @if (hasNumberColumn()) {<td class=\"col-num\"></td>}\n @if (hasSelectionColumn()) {<td class=\"col-sel\"></td>}\n @if (rowDragEnabled()) {<td class=\"col-drag\"></td>}\n @if (hasExpandColumn()) {<td class=\"col-exp\"></td>}\n @for (c of visibleColumns(); track c.id(); let ci = $index) {\n <td [class]=\"tdClass(c)\" [attr.data-l]=\"c.header()\">\n @if (ci === 0 && !hasAggregate(c)) {{{ grandTotalLabel() }}}\n @else if (hasAggregate(c)) {{{ formatCell(grandTotal()[c.field()], c) }}}\n </td>\n }\n @if (hasActionsColumn()) {<td></td>}\n </tr>\n }\n @if (footerTpl()) {<ng-container *ngTemplateOutlet=\"footerTpl()!.tpl; context: { $implicit: pageData(), columns: visibleColumns(), aggregates: grandTotal() }\"/>}\n </tfoot>\n }\n </table>\n </div>\n\n @if ((usePaginator() && (paginationTotal() > 0 || lazy())) || showRowCount()) {\n <div class=\"dt-foot\" [class.has-count]=\"showRowCount()\">\n @if (showRowCount()) {\n <span class=\"dt-foot__count\">\n @if (rowCountTpl()) {<ng-container *ngTemplateOutlet=\"rowCountTpl()!.tpl; context: { $implicit: totalRows(), total: totalRows(), filtered: totalFiltered(), selected: selectedCount() }\"/>}\n @else {{{ totalRows() }} {{ rowCountLabel() }}@if (totalFiltered() !== totalRows()) { \u00B7 {{ totalFiltered() }} filtr\u00E9e{{ totalFiltered() > 1 ? 's' : '' }}}@if (selectedCount() > 0) { \u00B7 {{ selectedCount() }} s\u00E9lectionn\u00E9e{{ selectedCount() > 1 ? 's' : '' }}}}\n </span>\n }\n @if (usePaginator() && (paginationTotal() > 0 || lazy())) {\n <cad-paginator [first]=\"first()\" [rows]=\"rows()\" [totalRecords]=\"paginationTotal()\" [rowsPerPageOptions]=\"rowsPerPageOptions()\" [pageLinks]=\"resp.stacked() ? 3 : pageLinks()\"\n [showCurrentPageReport]=\"showCurrentPageReport()\" [currentPageReportTemplate]=\"currentPageReportTemplate()\" [showFirstLastIcon]=\"showFirstLastIcon()\"\n [alwaysShow]=\"alwaysShowPaginator()\" (pageChange)=\"onPage($event)\"/>\n }\n </div>\n }\n <cad-menu #hmenu popup [items]=\"menuItems()\" ariaLabel=\"Menu de la colonne\"/>\n <cad-menu #fmenu popup [items]=\"filterMenuItems()\" ariaLabel=\"Op\u00E9rateur de filtre\" [minWidth]=\"200\"/>\n <cad-menu #inmenu popup [closeOnSelect]=\"false\" [items]=\"inMenuItems()\" ariaLabel=\"Valeurs du filtre\" [minWidth]=\"180\"/>\n</div>\n", styles: [":host{--_row-h: var(--cad-table-row-h, 42px);--_cell-px: 12px;display:block;min-width:0;max-width:100%;font:var(--cad-font-size)/1.4 var(--cad-font);color:var(--cad-fg)}:host(.is-dense){--_row-h: 34px}.dt{border:1px solid var(--cad-border);border-radius:var(--cad-radius-lg);background:var(--cad-surface);overflow:hidden;position:relative}:host(.is-borderless) .dt{border:0;border-radius:0}.dt-bar{display:flex;align-items:center;gap:8px;padding:10px 12px;border-bottom:1px solid var(--cad-border);flex-wrap:wrap}.dt-bar__title{font-weight:600;font-size:13.5px;margin-right:4px}.dt-bar__count{font:500 11px var(--cad-font-mono);padding:2px 7px;border-radius:999px;background:var(--cad-elevated);color:var(--cad-fg-secondary)}.dt-bar__grow{flex:1}.dt-bar__search{position:relative;display:flex;align-items:center;width:240px;max-width:100%}.dt-bar__search cad-icon{position:absolute;left:9px;color:var(--cad-fg-muted);pointer-events:none}.dt-bar__search input{width:100%;box-sizing:border-box;height:30px;padding:0 28px 0 30px;font:var(--cad-font-size) var(--cad-font);color:var(--cad-fg);background:var(--cad-input-bg);border:1px solid var(--cad-input-border);border-radius:var(--cad-radius);outline:0;transition:border-color var(--cad-dur),box-shadow var(--cad-dur)}.dt-bar__search input::placeholder{color:var(--cad-fg-muted)}.dt-bar__search input:focus{border-color:var(--cad-accent);box-shadow:0 0 0 3px var(--cad-ring)}.dt-bar__search .dt-bar__clear{position:absolute;right:6px;border:0;background:transparent;color:var(--cad-fg-muted);cursor:pointer;display:grid;place-items:center;padding:2px;border-radius:4px}.dt-bar__search .dt-bar__clear:hover{color:var(--cad-fg);background:var(--cad-hover)}.dt-bar__btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:26px;padding:0 8px;border-radius:var(--cad-radius-sm);border:1px solid var(--cad-border-strong);background:transparent;color:var(--cad-fg-secondary);font:500 var(--cad-font-size-sm) var(--cad-font);cursor:pointer;white-space:nowrap}.dt-bar__btn:hover{background:var(--cad-hover);color:var(--cad-fg)}.dt-bar__btn:focus-visible{outline:2px solid var(--cad-ring);outline-offset:1px}.dt-bar__btn.is-ghost{border-color:transparent;width:26px;padding:0}.dt-bar__btn.is-on{color:var(--cad-accent);background:var(--cad-accent-soft)}.dt-bar__cols{position:relative}.dt-bar__menu{position:absolute;right:0;top:calc(100% + 6px);z-index:20;min-width:200px;max-height:280px;overflow:auto;background:var(--cad-overlay);border:1px solid var(--cad-border);border-radius:9px;box-shadow:var(--cad-shadow-lg);padding:4px}.dt-bar__menu label{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:6px;cursor:pointer;font-size:var(--cad-font-size)}.dt-bar__menu label:hover{background:var(--cad-hover)}.dt-bar__menu label.is-locked{opacity:.5;cursor:default}.dt-bar__menu-title{font:600 10px/1 var(--cad-font-mono);letter-spacing:.1em;text-transform:uppercase;color:var(--cad-fg-muted);padding:6px 8px 4px}.dt-sel{display:flex;align-items:center;gap:8px;padding:8px 12px;background:var(--cad-accent-soft);border-bottom:1px solid var(--cad-border);font-size:12.5px;color:var(--cad-accent);font-weight:500;min-height:47px;box-sizing:border-box}.dt-sel__grow{flex:1}.dt-sel__clear{border:0;background:transparent;color:inherit;cursor:pointer;display:grid;place-items:center;width:26px;height:26px;border-radius:6px}.dt-sel__clear:hover{background:var(--cad-accent-soft)}.dt-scroll{overflow:auto;position:relative}:host(.has-scroll-height) .dt-scroll{max-height:var(--_scroll-h);scrollbar-width:thin;scrollbar-color:var(--cad-border-strong) transparent;scrollbar-gutter:stable}:host(.has-scroll-height) .dt-scroll::-webkit-scrollbar{width:10px;height:10px}:host(.has-scroll-height) .dt-scroll::-webkit-scrollbar-thumb{background:var(--cad-border-strong);border-radius:999px;border:2px solid var(--cad-surface)}:host(.has-scroll-height) .dt-scroll::-webkit-scrollbar-thumb:hover{background:var(--cad-fg-muted)}:host(.has-scroll-height) .dt-scroll::-webkit-scrollbar-track{background:transparent}.dt-loading{position:absolute;inset:0;display:grid;place-items:center;background:color-mix(in srgb,var(--cad-surface) 55%,transparent);z-index:5}.dt-loading cad-icon{color:var(--cad-accent)}.tbl{width:100%;border-collapse:separate;border-spacing:0;font-size:var(--cad-font-size)}:host(.is-resizable) .tbl{table-layout:fixed}.tbl caption{text-align:left;padding:10px 12px;font-weight:600;color:var(--cad-fg-secondary);font-size:var(--cad-font-size-sm)}.tbl th{position:relative;text-align:left;font-weight:600;font-size:var(--cad-font-size-sm);color:var(--cad-fg-secondary);background:var(--cad-bg-subtle);padding:0 var(--_cell-px);height:38px;border-bottom:1px solid var(--cad-border);white-space:nowrap;-webkit-user-select:none;user-select:none;box-sizing:border-box}:host(.is-sticky-header) .tbl thead th{position:sticky;top:0;z-index:3}.tbl th.al-right{text-align:right}.tbl th.al-center{text-align:center}.tbl th.st-left,.tbl td.st-left{position:sticky;left:0;z-index:2;background:var(--cad-surface)}.tbl th.st-right,.tbl td.st-right{position:sticky;right:0;z-index:2;background:var(--cad-surface)}.tbl th.st-left,.tbl th.st-right{background:var(--cad-bg-subtle);z-index:4}.tbl th .hd{display:inline-flex;align-items:center;gap:4px;max-width:100%}.tbl th.al-right .hd{flex-direction:row-reverse}.tbl th .hd-txt{overflow:hidden;text-overflow:ellipsis}.tbl th button.hd{all:unset;display:inline-flex;align-items:center;gap:4px;cursor:pointer;border-radius:4px;max-width:100%}.tbl th button.hd:focus-visible{outline:2px solid var(--cad-ring);outline-offset:2px}.tbl th .hd cad-icon{opacity:0;transition:opacity var(--cad-dur);flex:none}.tbl th:hover .hd cad-icon{opacity:.6}.tbl th.is-sorted .hd{color:var(--cad-accent)}.tbl th.is-sorted .hd cad-icon{opacity:1}.tbl th .hd-idx{font:600 9px var(--cad-font-mono);background:var(--cad-accent-soft);color:var(--cad-accent);border-radius:999px;padding:1px 4px}.tbl th .rz{position:absolute;right:0;top:8px;bottom:8px;width:5px;cursor:col-resize;z-index:1}.tbl th .rz:after{content:\"\";position:absolute;right:2px;top:0;bottom:0;width:1px;background:var(--cad-border);transition:background var(--cad-dur)}.tbl th .rz:hover:after,.tbl th .rz.is-active:after{background:var(--cad-accent);width:2px}.tbl th.col-sel,.tbl td.col-sel{width:36px;padding-right:0}.tbl th.col-exp,.tbl td.col-exp{width:30px;padding:0 4px}.tbl th.col-acts,.tbl td.col-acts{text-align:right;white-space:nowrap}.tbl tr.flt th{height:auto;padding:6px var(--_cell-px);background:var(--cad-surface);font-weight:400}.tbl tr.flt input,.tbl tr.flt select{width:100%;box-sizing:border-box;height:26px;padding:0 8px;font:var(--cad-font-size-sm) var(--cad-font);color:var(--cad-fg);background:var(--cad-input-bg);border:1px solid var(--cad-input-border);border-radius:var(--cad-radius-sm);outline:0}.tbl tr.flt input:focus,.tbl tr.flt select:focus{border-color:var(--cad-accent);box-shadow:0 0 0 2px var(--cad-ring)}.tbl td{padding:0 var(--_cell-px);height:var(--_row-h);border-bottom:1px solid var(--cad-border);vertical-align:middle;font-variant-numeric:tabular-nums;box-sizing:border-box}.tbl td.al-right{text-align:right}.tbl td.al-center{text-align:center}.tbl td.dt-num{font-family:var(--cad-font-mono);font-size:var(--cad-font-size-sm)}.tbl td.is-nowrap{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host(.is-bordered) .tbl td,:host(.is-bordered) .tbl th{border-right:1px solid var(--cad-border)}:host(.is-bordered) .tbl td:last-child,:host(.is-bordered) .tbl th:last-child{border-right:0}.tbl tbody tr:last-child td{border-bottom:0}:host(.is-striped) .tbl tbody tr.dt-row:nth-child(2n of.dt-row) td{background:var(--cad-table-stripe, var(--cad-bg-subtle))}:host(.is-hoverable) .tbl tbody tr.dt-row:hover td{background:var(--cad-hover)}.tbl tbody tr.dt-row.is-selectable{cursor:pointer}.tbl tbody tr.dt-row:focus-visible{outline:none}.tbl tbody tr.dt-row:focus-visible td{background:var(--cad-hover);box-shadow:inset 0 0 0 1px var(--cad-ring)}.tbl tbody tr.dt-row.is-selected td{background:var(--cad-accent-soft)}.tbl tbody tr.dt-row.is-selected td:first-child{box-shadow:inset 3px 0 0 var(--cad-accent)}.tbl tbody tr.dt-row.is-selected:focus-visible td{box-shadow:inset 0 0 0 1px var(--cad-ring)}.tbl tbody tr.dt-row.is-selected:focus-visible td:first-child{box-shadow:inset 3px 0 0 var(--cad-accent),inset 0 0 0 1px var(--cad-ring)}.tbl .exp{width:22px;height:22px;border:0;border-radius:5px;background:transparent;color:var(--cad-fg-muted);display:inline-grid;place-items:center;cursor:pointer;padding:0}.tbl .exp:hover{background:var(--cad-elevated);color:var(--cad-fg)}.tbl .exp:focus-visible{outline:2px solid var(--cad-ring)}.tbl .exp cad-icon{transition:transform var(--cad-dur)}.tbl tr.is-expanded .exp cad-icon{transform:rotate(90deg)}.tbl .acts{display:inline-flex;gap:2px;align-items:center;opacity:0;transition:opacity var(--cad-dur)}.tbl tr:hover .acts,.tbl tr.is-selected .acts,.tbl tr:focus-within .acts{opacity:1}:host(.acts-always) .tbl .acts{opacity:1}.tbl tr.dt-detail td{background:var(--cad-bg-subtle);height:auto;padding:12px var(--_cell-px) 14px var(--_detail-pl, 58px)}:host(.is-hoverable) .tbl tr.dt-detail:hover td{background:var(--cad-bg-subtle)}.tbl tfoot td{background:var(--cad-bg-subtle);font-weight:600;color:var(--cad-fg-secondary);border-top:1px solid var(--cad-border);border-bottom:0}.kv{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:10px 22px;font-size:12.5px}.kv b{display:block;font:600 10.5px/1 var(--cad-font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--cad-fg-muted);margin-bottom:4px}.skel{height:12px;border-radius:4px;background:linear-gradient(90deg,var(--cad-elevated),var(--cad-hover),var(--cad-elevated));background-size:200% 100%;animation:cad-tbl-sh 1.4s infinite}@keyframes cad-tbl-sh{to{background-position:-200% 0}}@media(prefers-reduced-motion:reduce){.skel{animation:none}.tbl .acts,.tbl .exp cad-icon,.tbl th .hd cad-icon{transition:none}}.empty{display:grid;place-items:center;gap:6px;padding:34px 12px;text-align:center;color:var(--cad-fg-secondary);font-size:12.5px}.empty cad-icon{color:var(--cad-fg-muted)}.empty b{color:var(--cad-fg);font-size:var(--cad-font-size)}.dt-foot{display:flex;align-items:center;gap:14px;padding:8px 12px;border-top:1px solid var(--cad-border)}.dt-foot cad-paginator{flex:1}\n", ".tbl th.st-left,.tbl td.st-left,.tbl th.st-right,.tbl td.st-right{position:sticky;z-index:2;background:var(--cad-surface);background-clip:padding-box}.tbl thead th.st-left,.tbl thead th.st-right{z-index:4;background:var(--cad-bg-subtle)}:host(.is-sticky-header) .tbl thead th.st-left,:host(.is-sticky-header) .tbl thead th.st-right{z-index:5}:host(.is-striped) .tbl tbody tr.dt-row:nth-child(2n of.dt-row) td.st-left,:host(.is-striped) .tbl tbody tr.dt-row:nth-child(2n of.dt-row) td.st-right{background:var(--cad-table-stripe, var(--cad-bg-subtle))}:host(.is-hoverable) .tbl tbody tr.dt-row:hover td.st-left,:host(.is-hoverable) .tbl tbody tr.dt-row:hover td.st-right{background:var(--cad-hover)}.tbl tbody tr.dt-row.is-selected td.st-left,.tbl tbody tr.dt-row.is-selected td.st-right{background:color-mix(in srgb,var(--cad-accent) 12%,var(--cad-surface))}.tbl td.st-last-left,.tbl th.st-last-left{transition:box-shadow var(--cad-dur)}:host(.is-scrolled-x) .tbl td.st-last-left,:host(.is-scrolled-x) .tbl th.st-last-left{box-shadow:1px 0 0 var(--cad-border),6px 0 12px -6px #0000002e}:host(:not(.is-scrolled-x-end)) .tbl td.st-first-right,:host(:not(.is-scrolled-x-end)) .tbl th.st-first-right{box-shadow:-1px 0 0 var(--cad-border),-6px 0 12px -6px #0000002e}.tbl td.st-right.col-acts .acts{background:inherit}.tbl td.dt-tree-cell{white-space:nowrap}.tbl td.dt-tree-cell .cell-txt{white-space:normal}.cad-tree-toggle{display:inline-flex;align-items:center;vertical-align:middle;margin-right:4px}.cad-tree-toggle .ind{display:inline-block;width:calc(var(--_lvl, 0) * var(--_indent, 20px));flex:none}.cad-tree-toggle .tl{display:inline-block;width:var(--_indent, 20px);align-self:stretch;flex:none;position:relative}:host(.has-tree-lines) .tbl td.dt-tree-cell{padding-top:0;padding-bottom:0}:host(.has-tree-lines) .cad-tree-toggle{align-self:stretch;height:var(--_row-h)}:host(.has-tree-lines) .cad-tree-toggle .tl:before{content:\"\";position:absolute;left:9px;top:0;bottom:0;border-left:1px solid var(--cad-border)}.cad-tree-toggle .tg{width:20px;height:20px;border:0;border-radius:5px;background:transparent;color:var(--cad-fg-muted);display:inline-grid;place-items:center;cursor:pointer;padding:0;flex:none}.cad-tree-toggle .tg:hover{background:var(--cad-elevated);color:var(--cad-fg)}.cad-tree-toggle .tg:focus-visible{outline:2px solid var(--cad-ring)}.cad-tree-toggle .tg cad-icon{transition:transform var(--cad-dur)}.cad-tree-toggle .tg.is-open cad-icon{transform:rotate(90deg)}.cad-tree-toggle .tg.is-leaf{visibility:hidden;pointer-events:none}.cad-tree-toggle .ic{color:var(--cad-fg-muted);margin:0 6px 0 2px}.tbl tr.dt-row.lvl-0.has-children td.dt-tree-cell{font-weight:500}.tbl tr.dt-group td{background:var(--cad-bg-subtle);height:34px;padding:0 var(--_cell-px);border-bottom:1px solid var(--cad-border)}.dt-group__inner{display:flex;align-items:center;gap:6px;padding-left:calc(var(--_lvl, 0) * var(--_indent, 20px));font-weight:600;font-size:var(--cad-font-size-sm)}.dt-group__inner .exp{width:22px;height:22px;border:0;border-radius:5px;background:transparent;color:var(--cad-fg-muted);display:inline-grid;place-items:center;cursor:pointer;padding:0}.dt-group__inner .exp:hover{background:var(--cad-elevated);color:var(--cad-fg)}.dt-group__inner .exp cad-icon{transition:transform var(--cad-dur)}.tbl tr.dt-group.is-expanded .dt-group__inner .exp cad-icon{transform:rotate(90deg)}.dt-group__count{font:500 10.5px var(--cad-font-mono);padding:1px 6px;border-radius:999px;background:var(--cad-elevated);color:var(--cad-fg-secondary)}.tbl tr.dt-group-foot td{background:var(--cad-bg-subtle);height:32px;color:var(--cad-fg-secondary);font-size:var(--cad-font-size-sm);border-bottom:1px solid var(--cad-border)}.tbl tr.dt-group-foot td.dt-num,.tbl tr.dt-grand td.dt-num{font-family:var(--cad-font-mono);font-weight:600}.dt-group-foot__label{padding-left:calc(var(--_lvl, 0) * var(--_indent, 20px) + 26px);font-weight:500}.tbl tfoot tr.dt-grand td{background:var(--cad-bg-subtle);font-weight:600;color:var(--cad-fg);border-top:2px solid var(--cad-border);height:36px}:host(.is-hoverable) .tbl tr.dt-group:hover td,:host(.is-hoverable) .tbl tr.dt-group-foot:hover td{background:var(--cad-bg-subtle)}.tbl tr.dt-detail td{padding-left:calc(var(--_detail-pl, 58px) + var(--_lvl, 0) * var(--_indent, 20px))}.dt-bar__tools,.dt-bar__tools-end{display:contents}.dt-bar__filters{display:inline-flex}.dt-bar__filters .dt-bar__count{padding:1px 6px;font-size:10px}:host(.is-stacked) .dt-bar{gap:8px}:host(.is-stacked) .dt-bar__tools{display:none}:host(.is-stacked) .dt-bar__tools.is-open{display:flex;flex-wrap:wrap;align-items:center;gap:8px;flex-basis:100%;order:10;padding-top:8px;border-top:1px dashed var(--cad-border)}:host(.is-stacked) .dt-bar__grow{display:none}:host(.is-stacked) .dt-bar__search{order:5;flex-basis:100%;width:100%}:host(.is-stacked) .dt-bar__cols,:host(.is-stacked) .dt-bar__density{display:none}:host(.is-stacked) .dt-sel{position:sticky;bottom:0;z-index:6;flex-wrap:wrap;border-top:1px solid var(--cad-border);order:99}:host(.is-stacked) .dt-scroll{overflow-x:hidden}:host(.is-stacked) .tbl,:host(.is-stacked) .tbl tbody,:host(.is-stacked) .tbl tfoot,:host(.is-stacked) .tbl tr,:host(.is-stacked) .tbl td{display:block}:host(.is-stacked) .tbl thead,:host(.is-stacked) .tbl colgroup,:host(.is-stacked) .tbl caption{display:none}:host(.is-stacked) .tbl tr.dt-row{position:relative;padding:10px 12px;border-bottom:1px solid var(--cad-border);height:auto}:host(.is-stacked) .tbl tr.dt-row.has-sel{padding-left:44px}:host(.is-stacked) .tbl tr.dt-row.is-selected{background:var(--cad-accent-soft);box-shadow:inset 3px 0 0 var(--cad-accent)}:host(.is-hoverable.is-stacked) .tbl tr.dt-row:hover{background:var(--cad-hover)}:host(.is-hoverable.is-stacked) .tbl tr.dt-row:hover td,:host(.is-stacked) .tbl tr.dt-row.is-selected td,:host(.is-striped.is-stacked) .tbl tr.dt-row td{background:transparent!important;box-shadow:none!important}:host(.is-stacked) .tbl tr.dt-row:focus-visible{box-shadow:inset 0 0 0 1px var(--cad-ring)}:host(.is-stacked) .tbl td{height:auto;padding:2px 0;border:0;white-space:normal;display:flex;justify-content:space-between;align-items:baseline;gap:12px;font-size:12.5px;position:static}:host(.is-stacked) .tbl td.st-left,:host(.is-stacked) .tbl td.st-right{position:static}:host(.is-stacked) .tbl td[data-l]:before{content:attr(data-l);color:var(--cad-fg-muted);font-size:11px;font-weight:500;text-transform:uppercase;letter-spacing:.04em;flex:none}:host(.is-stacked) .tbl td.col-sel{position:absolute;left:12px;top:12px;padding:0;width:auto}:host(.is-stacked) .tbl td.col-sel:before,:host(.is-stacked) .tbl td.col-exp:before,:host(.is-stacked) .tbl td.col-acts:before,:host(.is-stacked) .tbl td.dt-tree-cell:before,:host(.is-stacked) .tbl td.dt-first:before{content:none}:host(.is-stacked) .tbl td.col-exp{position:absolute;right:44px;top:8px;padding:0;width:auto}:host(.is-stacked) .tbl td.dt-first,:host(.is-stacked) .tbl td.dt-tree-cell{display:block;font-size:14px;font-weight:500;padding:0 44px 6px 0}:host(.is-stacked) .tbl td.dt-tree-cell .cad-tree-toggle .ind,:host(.is-stacked) .tbl td.dt-tree-cell .cad-tree-toggle .tl{display:none}:host(.is-stacked) .tbl td.col-acts{position:absolute;right:8px;top:8px;padding:0;width:auto}:host(.is-stacked) .tbl .acts{opacity:1}:host(.is-stacked) .tbl td.dt-num{text-align:right}:host(.is-stacked) .tbl tr.dt-detail td{padding:8px 12px 10px}:host(.is-stacked) .tbl tr.dt-row.lvl-1{margin-left:22px;border-left:2px solid var(--cad-border)}:host(.is-stacked) .tbl tr.dt-row.lvl-2{margin-left:44px;border-left:2px solid var(--cad-border)}:host(.is-stacked) .tbl tr.dt-row.lvl-3{margin-left:66px;border-left:2px solid var(--cad-border)}:host(.is-stacked) .tbl tr.dt-group td{padding:8px 12px;height:auto;display:block}:host(.is-stacked) .tbl tr.dt-group-foot{display:flex;flex-wrap:wrap;gap:4px 14px;padding:6px 12px 6px 44px}:host(.is-stacked) .tbl tr.dt-group-foot td{padding:0}:host(.is-stacked) .tbl tr.dt-group-foot td:empty{display:none}:host(.is-stacked) .tbl tfoot tr.dt-grand{padding:8px 12px}:host(.is-stacked) .tbl tfoot tr.dt-grand td:empty{display:none}:host(.is-stacked) .tbl tr.dt-empty td{display:block}:host(.is-stacked) .tbl tr.is-skeleton td{display:block;padding:4px 0}:host(.is-stacked) .tbl tr.dt-card td{padding:0;display:block}:host(.is-stacked) .dt-foot{flex-wrap:wrap;gap:8px}:host(.is-stacked) .dt-foot ::ng-deep .cad-paginator__rpp{display:none}\n", ".tbl th .dh{display:none;position:absolute;left:2px;top:50%;transform:translateY(-50%);width:14px;height:18px;color:var(--cad-fg-muted);cursor:grab;border-radius:3px;place-items:center}.tbl th .dh:hover{color:var(--cad-fg);background:var(--cad-elevated)}:host(.is-reorderable) .tbl th.can-drag{padding-left:calc(var(--_cell-px) + 6px)}:host(.is-reorderable) .tbl th.can-drag:hover .dh,:host(.is-reorderable) .tbl th.can-drag.cdk-drag-dragging .dh{display:grid}.tbl th.cdk-drag-placeholder{opacity:.35;background:var(--cad-accent-soft)}.tbl th.cdk-drag-placeholder:before{content:\"\";position:absolute;left:-1px;top:4px;bottom:4px;width:2px;background:var(--cad-accent)}.cdk-drag-preview.dt-th-preview{display:flex;align-items:center;height:38px;padding:0 12px;box-sizing:border-box;font:600 var(--cad-font-size-sm) var(--cad-font);color:var(--cad-fg);background:var(--cad-overlay);border:1px solid var(--cad-border);border-radius:6px;box-shadow:var(--cad-shadow-lg);list-style:none}.tbl thead tr.cdk-drop-list-dragging th:not(.cdk-drag-placeholder){transition:transform .2s cubic-bezier(0,0,.2,1)}.tbl th.cdk-drag-animating{transition:transform .2s cubic-bezier(0,0,.2,1)}.dt-bar__menu .mv{display:inline-flex;gap:0;margin-left:auto}.dt-bar__menu .mv button{border:0;background:transparent;color:var(--cad-fg-muted);width:20px;height:20px;border-radius:4px;cursor:pointer;display:grid;place-items:center;padding:0}.dt-bar__menu .mv button:hover:not([disabled]){background:var(--cad-hover);color:var(--cad-fg)}.dt-bar__menu .mv button[disabled]{opacity:.3;cursor:default}.tbl tr.hg th{height:30px;text-align:center;font:600 10.5px/1 var(--cad-font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--cad-fg-muted);border-bottom:1px solid var(--cad-border)}.tbl tr.hg th.hg-cell{border-left:1px solid var(--cad-border)}.tbl tr.hg th.hg-cell:first-child{border-left:0}:host(.is-sticky-header) .tbl tr.hg th{position:sticky;top:0;z-index:3}:host(.is-sticky-header) .tbl tr.hg+tr th{top:30px}.tbl tr.dt-vpad td{padding:0;border:0;height:auto}:host(.is-virtual) .dt-scroll{overflow-anchor:none}:host(.edit-cell) .tbl td.is-editable{cursor:text;position:relative}:host(.edit-cell.is-hoverable) .tbl tbody tr.dt-row td.is-editable:hover{background:var(--cad-hover);box-shadow:inset 0 0 0 1px var(--cad-border-strong)}:host(.show-edit-icon) .tbl td.is-editable{padding-right:calc(var(--_cell-px) + 16px)}.tbl td .ce{position:absolute;right:4px;top:50%;transform:translateY(-50%);width:20px;height:20px;border:0;border-radius:5px;background:transparent;color:var(--cad-fg-muted);display:grid;place-items:center;cursor:pointer;padding:0;opacity:0;transition:opacity var(--cad-dur),background var(--cad-dur)}.tbl td.is-editable:hover .ce,.tbl td .ce:focus-visible{opacity:.7}.tbl td .ce:hover{opacity:1!important;background:var(--cad-elevated);color:var(--cad-fg)}.tbl td.is-editing{padding-top:0;padding-bottom:0;background:var(--cad-surface)!important;box-shadow:none!important}.dt-editor{position:relative;display:flex;align-items:stretch;min-height:calc(var(--_row-h) - 8px);margin:4px 0}.tbl td.is-editing{height:auto;vertical-align:top}.dt-editor input,.dt-editor select,.dt-editor textarea{width:100%;height:calc(var(--_row-h) - 8px);box-sizing:border-box;padding:0 8px;font:var(--cad-font-size) var(--cad-font);color:var(--cad-fg);background:var(--cad-input-bg);border:1px solid var(--cad-accent);border-radius:var(--cad-radius-sm);outline:0;box-shadow:0 0 0 3px var(--cad-ring)}.dt-editor input[type=number]{font-family:var(--cad-font-mono);text-align:right}.dt-editor textarea{height:auto;min-height:76px;padding:6px 8px;resize:vertical;line-height:1.45;font:var(--cad-font-size)/1.45 var(--cad-font)}.dt-editor input[type=checkbox]{width:16px;height:16px;box-shadow:none;accent-color:var(--cad-accent)}.dt-editor.is-invalid input,.dt-editor.is-invalid select,.dt-editor.is-invalid textarea{border-color:var(--cad-danger);box-shadow:0 0 0 3px var(--cad-danger-soft)}.dt-editor__err{position:absolute;left:0;top:calc(100% + 4px);z-index:6;padding:3px 8px;border-radius:6px;background:var(--cad-danger);color:#fff;font-size:11px;white-space:nowrap;box-shadow:var(--cad-shadow-md);pointer-events:none}.dt-editor__err:before{content:\"\";position:absolute;left:10px;top:-4px;width:8px;height:8px;background:inherit;transform:rotate(45deg)}:host(.edit-row) .tbl tr.dt-row.is-editing-row td{background:var(--cad-accent-soft)}.tbl .acts .re{display:inline-grid;place-items:center;width:26px;height:26px;border:0;border-radius:6px;background:transparent;color:var(--cad-fg-secondary);cursor:pointer;padding:0}.tbl .acts .re:hover{background:var(--cad-hover);color:var(--cad-fg)}.tbl .acts .re.ok{color:var(--cad-success)}.tbl .acts .re.ko{color:var(--cad-danger)}.tbl .acts .re:focus-visible{outline:2px solid var(--cad-ring)}:host(.edit-row) .tbl tr.is-editing-row .acts{opacity:1}\n", ".dt-scroll{scrollbar-width:thin;scrollbar-color:var(--cad-border-strong) transparent}.dt-scroll::-webkit-scrollbar{height:10px;width:10px}.dt-scroll::-webkit-scrollbar-thumb{background:var(--cad-border-strong);border-radius:999px;border:2px solid var(--cad-surface)}.dt-scroll::-webkit-scrollbar-thumb:hover{background:var(--cad-fg-muted)}.dt-scroll::-webkit-scrollbar-track{background:transparent}.tbl th.has-menu{padding-right:calc(var(--_cell-px) + 20px)}.tbl th .hm{position:absolute;right:6px;top:50%;transform:translateY(-50%);width:22px;height:22px;border:0;border-radius:5px;background:transparent;color:var(--cad-fg-muted);display:grid;place-items:center;cursor:pointer;padding:0;opacity:0;transition:opacity var(--cad-dur),background var(--cad-dur);z-index:2}.tbl th:hover .hm,.tbl th .hm:focus-visible,.tbl th .hm.is-on,.tbl th.is-sorted .hm,.tbl th.is-filtered .hm{opacity:1}.tbl th .hm:hover,.tbl th .hm.is-on{background:var(--cad-elevated);color:var(--cad-fg)}.tbl th.is-filtered .hd-txt{color:var(--cad-accent)}:host(.is-resizable) .tbl th.has-menu .hm{right:10px}.tbl tr.flt th{padding:5px 6px}.flt-cell{position:relative;display:flex;align-items:center;gap:4px;min-width:0}.flt-cell input,.flt-cell select,.flt-cell .flt-in{flex:1 1 0;min-width:0;height:28px;padding:0 26px 0 8px;box-sizing:border-box;font:var(--cad-font-size-sm) var(--cad-font);color:var(--cad-fg);background:var(--cad-input-bg);border:1px solid var(--cad-input-border);border-radius:var(--cad-radius-sm);outline:0;transition:border-color var(--cad-dur),box-shadow var(--cad-dur)}.flt-cell.is-range input{padding-right:8px}.flt-cell.is-range input:last-of-type{padding-right:26px}.flt-cell input:focus,.flt-cell select:focus,.flt-cell .flt-in:focus-visible{border-color:var(--cad-accent);box-shadow:0 0 0 2px var(--cad-ring)}.flt-cell.is-active input,.flt-cell.is-active select,.flt-cell.is-active .flt-in{border-color:var(--cad-accent);background:var(--cad-accent-soft)}.flt-cell .flt-in{display:inline-flex;align-items:center;justify-content:space-between;gap:6px;text-align:left;cursor:pointer}.flt-cell .flt-in.is-ph{color:var(--cad-fg-muted)}.flt-cell .flt-in cad-icon{color:var(--cad-fg-muted);flex:none}.flt-cell .flt-txt{flex:1;height:28px;display:inline-flex;align-items:center;padding:0 26px 0 8px;font:italic var(--cad-font-size-sm) var(--cad-font);color:var(--cad-accent);background:var(--cad-accent-soft);border:1px solid var(--cad-accent);border-radius:var(--cad-radius-sm);box-sizing:border-box}.flt-cell .flt-op{position:absolute;right:4px;top:50%;transform:translateY(-50%);width:20px;height:20px;border:0;border-radius:4px;background:transparent;color:var(--cad-fg-muted);display:grid;place-items:center;cursor:pointer;padding:0}.flt-cell .flt-op:hover,.flt-cell .flt-op.is-on{color:var(--cad-accent);background:var(--cad-accent-soft)}.flt-cell.is-active .flt-op{right:22px}.flt-cell .flt-x{position:absolute;right:4px;top:50%;transform:translateY(-50%);width:18px;height:18px;border:0;border-radius:4px;background:transparent;color:var(--cad-fg-muted);display:grid;place-items:center;cursor:pointer;padding:0}.flt-cell .flt-x:hover{color:var(--cad-danger);background:var(--cad-danger-soft)}.flt-cell select{appearance:none;padding-right:26px}.dt-gz{display:flex;align-items:center;flex-wrap:wrap;gap:6px;min-height:40px;padding:6px 12px;border-bottom:1px solid var(--cad-border);background:var(--cad-bg-subtle);color:var(--cad-fg-muted);font-size:var(--cad-font-size-sm)}.dt-gz.cdk-drop-list-receiving,.dt-gz.cdk-drop-list-dragging{background:var(--cad-accent-soft);color:var(--cad-accent);outline:1px dashed var(--cad-accent);outline-offset:-4px}.dt-gz__hint{font-style:italic}.dt-gz__chip{display:inline-flex;align-items:center;gap:5px;height:26px;padding:0 4px 0 6px;border-radius:999px;background:var(--cad-accent-soft);color:var(--cad-accent);font-weight:500;cursor:grab}.dt-gz__chip .dt-gz__drag{opacity:.6}.dt-gz__chip button{width:18px;height:18px;border:0;border-radius:50%;background:transparent;color:inherit;display:grid;place-items:center;cursor:pointer;padding:0}.dt-gz__chip button:hover{background:var(--cad-accent);color:var(--cad-fg-on-accent)}.dt-gz__chip.cdk-drag-placeholder{opacity:.35}.cdk-drag-preview.dt-gz__chip{box-shadow:var(--cad-shadow-md)}:host(.is-stacked) .dt-gz{display:none}.tbl th.col-num,.tbl td.col-num{width:44px;text-align:right;font:11px var(--cad-font-mono);color:var(--cad-fg-muted);background:var(--cad-bg-subtle);padding:0 8px;-webkit-user-select:none;user-select:none}.tbl th.col-num{font-weight:600}.tbl tbody tr:hover td.col-num{background:var(--cad-bg-subtle)}:host(.is-stacked) .tbl td.col-num{position:absolute;left:auto;right:12px;bottom:6px;width:auto;background:transparent;padding:0}:host(.is-stacked) .tbl td.col-num:before{content:none}.tbl th.col-drag,.tbl td.col-drag{width:28px;padding:0 4px}.tbl td.col-drag .rdh{display:inline-grid;place-items:center;width:20px;height:24px;color:var(--cad-fg-muted);cursor:grab;opacity:0;transition:opacity var(--cad-dur);border-radius:4px}.tbl tbody tr:hover td.col-drag .rdh,.tbl tr.cdk-drag-dragging td.col-drag .rdh{opacity:.8}.tbl td.col-drag .rdh:hover{color:var(--cad-fg);background:var(--cad-elevated)}.tbl tr.dt-row.cdk-drag-placeholder{opacity:0}.tbl tbody.cdk-drop-list-dragging tr.dt-row:not(.cdk-drag-placeholder){transition:transform .2s cubic-bezier(0,0,.2,1)}.tbl tr.dt-row.cdk-drag-placeholder td{border-top:2px solid var(--cad-accent)}.cdk-drag-preview.dt-tr-preview{display:table;table-layout:fixed;box-sizing:border-box;background:var(--cad-overlay);border:1px solid var(--cad-border);border-radius:8px;box-shadow:var(--cad-shadow-lg);opacity:.95;font:var(--cad-font-size)/1.4 var(--cad-font);color:var(--cad-fg)}.cdk-drag-preview.dt-tr-preview td{padding:0 12px;height:42px;vertical-align:middle;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host(.is-stacked) .tbl td.col-drag{display:none}.dt-foot__count{font:var(--cad-font-size-sm) var(--cad-font-mono);color:var(--cad-fg-secondary);white-space:nowrap}.dt-foot.has-count cad-paginator{flex:1}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: CadIconComponent, selector: "cad-icon", inputs: ["name", "size", "strokeWidth", "label", "title", "spin", "filled", "flip", "rotate"] }, { kind: "component", type: CadCheckboxComponent, selector: "cad-checkbox", inputs: ["label", "ariaLabel", "indeterminate", "invalid", "readonly"], outputs: ["indeterminateChange", "changed"] }, { kind: "component", type: CadPaginatorComponent, selector: "cad-paginator", inputs: ["first", "rows", "totalRecords", "rowsPerPageOptions", "rowsPerPageLabel", "pageLinks", "showCurrentPageReport", "currentPageReportTemplate", "showFirstLastIcon", "showPageLinks", "alwaysShow"], outputs: ["firstChange", "rowsChange", "pageChange"] }, { kind: "directive", type: CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "directive", type: CadEditFocusDirective, selector: "[cadEditFocus]" }, { kind: "component", type: CadMenuComponent, selector: "cad-menu", inputs: ["items", "popup", "ariaLabel", "minWidth", "closeOnSelect", "mobile", "sheetTitle"], outputs: ["itemClick", "shown", "hidden"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
10783
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.20", type: CadTableComponent, isStandalone: true, selector: "cad-table", host: { properties: { "class.is-dense": "dense()", "class.is-striped": "striped()", "class.is-hoverable": "hoverable()", "class.is-bordered": "bordered()", "class.is-borderless": "borderless()", "class.is-sticky-header": "stickyHeader()", "class.has-scroll-height": "!!scrollHeight()", "class.is-resizable": "resizableColumns()", "class.acts-always": "rowActionsAlwaysVisible()", "class.is-loading": "loading()", "class.is-tree": "isTree()", "class.is-grouped": "isGrouped()", "class.has-tree-lines": "showTreeLines()", "class.is-stacked": "resp.stacked()", "class.hide-p2": "resp.hiddenPriorities().has(2)", "class.hide-p3": "resp.hiddenPriorities().has(3)", "class.hide-p4": "resp.hiddenPriorities().has(4)", "class.hide-p5": "resp.hiddenPriorities().has(5)", "class.is-scrolled-x": "sticky.scrolledX()", "class.is-scrolled-x-end": "sticky.scrolledXEnd()", "class.is-virtual": "virtualScroll()", "class.is-reorderable": "reorderableColumns()", "class.has-row-numbers": "showRowNumber()", "class.rows-draggable": "rowDragEnabled()", "class.has-col-menu": "hasColumnMenu()", "class.edit-cell": "editMode() === \"cell\"", "class.edit-row": "editMode() === \"row\" || editMode() === \"row-inline\"", "class.show-edit-icon": "editMode() === \"cell\" && showEditIcon()", "style.--_scroll-h": "scrollHeight() || null", "style.--_detail-pl": "detailPaddingLeft()", "style.--_indent": "indent()" }, classAttribute: "cad-table" }, viewQueries: [{ propertyName: "scroller", first: true, predicate: ["scroller"], descendants: true, isSignal: true }, { propertyName: "dtEl", first: true, predicate: ["dt"], descendants: true, isSignal: true }, { propertyName: "headerMenu", first: true, predicate: ["hmenu"], descendants: true, isSignal: true }, { propertyName: "filterMenu", first: true, predicate: ["fmenu"], descendants: true, isSignal: true }, { propertyName: "inMenu", first: true, predicate: ["inmenu"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"dt\" #dt [class]=\"'dt ' + styleClass()\">\n <!-- barre de s\u00E9lection contextuelle (remplace la barre d'outils) -->\n @if (selectedCount() > 0 && showSelectionBar()) {\n <div class=\"dt-sel\" role=\"region\" aria-live=\"polite\">\n <cad-checkbox [value]=\"allState() === 'all'\" [indeterminate]=\"allState() === 'some'\" ariaLabel=\"Tout s\u00E9lectionner\" (changed)=\"toggleAll()\"/>\n <span>{{ selectedCount() }} {{ selectedCount() > 1 ? selectedLabelPlural() : selectedLabel() }}</span>\n <span class=\"dt-sel__grow\"></span>\n <ng-content select=\"[cadTableSelectionBar]\"/>\n <button type=\"button\" class=\"dt-sel__clear\" aria-label=\"Annuler la s\u00E9lection\" (click)=\"clearSelection()\"><cad-icon name=\"x\" [size]=\"14\"/></button>\n </div>\n } @else if (showToolbar()) {\n <div class=\"dt-bar\">\n @if (title()) {<span class=\"dt-bar__title\">{{ title() }}</span>}\n @if (showCount()) {<span class=\"dt-bar__count\">{{ count() ?? totalFiltered() }}</span>}\n @if (resp.stacked()) {\n <button type=\"button\" class=\"dt-bar__btn dt-bar__filters\" [class.is-on]=\"filtersOpen()\" [attr.aria-expanded]=\"filtersOpen()\" (click)=\"filtersOpen.set(!filtersOpen())\">\n <cad-icon name=\"filter\" [size]=\"13\"/>{{ filtersLabel() }}@if (activeFilterCount() > 0) {<span class=\"dt-bar__count\">{{ activeFilterCount() }}</span>}\n </button>\n }\n <span class=\"dt-bar__tools\" [class.is-open]=\"filtersOpen()\"><ng-content select=\"[cadTableToolbar]\"/></span>\n <span class=\"dt-bar__grow\"></span>\n @if (showSearch()) {\n <div class=\"dt-bar__search\">\n <cad-icon name=\"search\" [size]=\"14\"/>\n <input type=\"search\" [placeholder]=\"searchPlaceholder()\" [value]=\"searchText()\" (input)=\"onSearch($any($event.target).value)\" [attr.aria-label]=\"searchPlaceholder()\"/>\n @if (searchText()) {<button type=\"button\" class=\"dt-bar__clear\" aria-label=\"Effacer la recherche\" (click)=\"onSearch('', true)\"><cad-icon name=\"x\" [size]=\"12\"/></button>}\n </div>\n }\n <span class=\"dt-bar__tools-end\"><ng-content select=\"[cadTableToolbarEnd]\"/></span>\n @if (columnToggle()) {\n <div class=\"dt-bar__cols\">\n <button type=\"button\" class=\"dt-bar__btn\" [class.is-on]=\"colsMenuOpen()\" aria-haspopup=\"true\" [attr.aria-expanded]=\"colsMenuOpen()\" (click)=\"colsMenuOpen.set(!colsMenuOpen())\">\n {{ columnsLabel() }} <cad-icon name=\"chevron-down\" [size]=\"12\"/>\n </button>\n @if (colsMenuOpen()) {\n <div class=\"dt-bar__menu\" role=\"menu\" (keydown.escape)=\"colsMenuOpen.set(false)\">\n <div class=\"dt-bar__menu-title\">{{ columnsLabel() }}</div>\n @for (c of orderedColumns(); track c.id(); let ci = $index; let first = $first; let last = $last) {\n <label [class.is-locked]=\"!c.toggleable()\">\n <cad-checkbox [value]=\"!c.hidden()\" [disabled]=\"!c.toggleable()\" (changed)=\"toggleColumn(c, !$event)\"/>\n <span>{{ c.header() || c.field() }}</span>\n @if (reorderableColumns()) {\n <span class=\"mv\" (click)=\"$event.stopPropagation(); $event.preventDefault()\">\n <button type=\"button\" aria-label=\"Monter\" [disabled]=\"first\" (click)=\"moveColumn(ci, ci - 1)\"><cad-icon name=\"chevron-up\" [size]=\"12\"/></button>\n <button type=\"button\" aria-label=\"Descendre\" [disabled]=\"last\" (click)=\"moveColumn(ci, ci + 1)\"><cad-icon name=\"chevron-down\" [size]=\"12\"/></button>\n </span>\n }\n </label>\n }\n </div>\n }\n </div>\n }\n @if (showDensityToggle()) {\n <button type=\"button\" class=\"dt-bar__btn is-ghost dt-bar__density\" [class.is-on]=\"dense()\" [attr.aria-pressed]=\"dense()\" aria-label=\"Densit\u00E9\" title=\"Densit\u00E9\" (click)=\"dense.set(!dense())\"><cad-icon name=\"chevrons-up-down\" [size]=\"14\"/></button>\n }\n </div>\n }\n\n @if (showGroupZone() && !resp.stacked()) {\n <div class=\"dt-gz\" [class.is-empty]=\"!groupFields().length\" cdkDropList [id]=\"gzId\" cdkDropListOrientation=\"horizontal\" [cdkDropListData]=\"groupFields()\" [cdkDropListEnterPredicate]=\"gzEnter\" (cdkDropListDropped)=\"onGroupZoneDrop($event)\">\n <cad-icon name=\"layers\" [size]=\"14\"/>\n @if (!groupFields().length) {<span class=\"dt-gz__hint\">{{ groupZoneLabel() }}</span>}\n @for (f of groupFields(); track f) {\n <span class=\"dt-gz__chip\" cdkDrag [cdkDragData]=\"f\" cdkDragLockAxis=\"x\"><cad-icon name=\"drag\" [size]=\"11\" class=\"dt-gz__drag\"/><span>{{ groupChipLabel(f) }}</span><button type=\"button\" [attr.aria-label]=\"'Ne plus grouper par ' + groupChipLabel(f)\" (click)=\"ungroup(f)\"><cad-icon name=\"x\" [size]=\"11\"/></button></span>\n }\n </div>\n }\n\n <div class=\"dt-scroll\" #scroller (scroll)=\"onScroll()\">\n @if (loading() && hasData()) {<div class=\"dt-loading\"><cad-icon name=\"loader\" [size]=\"22\" spin/></div>}\n <table class=\"tbl\" [class]=\"'tbl ' + tableClass()\" [style]=\"tableStyle()\" [attr.aria-busy]=\"loading() ? 'true' : null\" [attr.aria-rowcount]=\"totalFiltered()\" [attr.role]=\"hierarchical() ? 'treegrid' : null\">\n @if (captionTpl()) {<caption><ng-container *ngTemplateOutlet=\"captionTpl()!.tpl\"/></caption>}\n <colgroup>\n @if (hasNumberColumn()) {<col style=\"width:44px\">}\n @if (hasSelectionColumn()) {<col style=\"width:36px\">}\n @if (rowDragEnabled()) {<col style=\"width:28px\">}\n @if (hasExpandColumn()) {<col style=\"width:30px\">}\n @for (c of visibleColumns(); track c.id()) {<col [style.width]=\"colWidth(c)\" [style.min-width]=\"c.minWidth() || null\" [style.max-width]=\"c.maxWidth() || null\">}\n @if (hasActionsColumn()) {<col [style.width]=\"rowActionsWidth()\">}\n </colgroup>\n <thead>\n @if (headerGroups().length && !resp.stacked()) {\n <tr class=\"hg\">\n @if (hasNumberColumn()) {<th [class]=\"stickyClass('num')\" [style.left.px]=\"stickyLeft('num')\"></th>}\n @if (hasSelectionColumn()) {<th [class]=\"stickyClass('sel')\" [style.left.px]=\"stickyLeft('sel')\"></th>}\n @if (rowDragEnabled()) {<th [class]=\"stickyClass('drag')\" [style.left.px]=\"stickyLeft('drag')\"></th>}\n @if (hasExpandColumn()) {<th [class]=\"stickyClass('exp')\" [style.left.px]=\"stickyLeft('exp')\"></th>}\n @for (g of headerGroups(); track $index) {<th scope=\"colgroup\" [attr.colspan]=\"g.span\" [class]=\"'hg-cell ' + (g.class || '')\">{{ g.header }}</th>}\n @if (hasActionsColumn()) {<th [class]=\"stickyClass('acts')\" [style.right.px]=\"stickyRight('acts')\"></th>}\n </tr>\n }\n <tr cdkDropList cdkDropListOrientation=\"horizontal\" [cdkDropListDisabled]=\"!reorderableColumns() && !showGroupZone()\" [cdkDropListSortingDisabled]=\"!reorderableColumns()\" [cdkDropListConnectedTo]=\"showGroupZone() ? [gzId] : []\" (cdkDropListDropped)=\"onColumnDrop($event)\">\n @if (hasNumberColumn()) {<th class=\"col-num\" scope=\"col\" data-sk=\"num\" [class]=\"'col-num ' + stickyClass('num')\" [style.left.px]=\"stickyLeft('num')\">#</th>}\n @if (hasSelectionColumn()) {\n <th class=\"col-sel\" scope=\"col\" data-sk=\"sel\" [class]=\"'col-sel ' + stickyClass('sel')\" [style.left.px]=\"stickyLeft('sel')\">\n @if (selectionMode() === 'multiple' && selectAll()) {\n <cad-checkbox [value]=\"allState() === 'all'\" [indeterminate]=\"allState() === 'some'\" ariaLabel=\"Tout s\u00E9lectionner\" (changed)=\"toggleAll()\"/>\n }\n </th>\n }\n @if (rowDragEnabled()) {<th class=\"col-drag\" scope=\"col\" data-sk=\"drag\" [class]=\"'col-drag ' + stickyClass('drag')\" [style.left.px]=\"stickyLeft('drag')\"><span hidden>D\u00E9placer</span></th>}\n @if (hasExpandColumn()) {<th class=\"col-exp\" scope=\"col\" data-sk=\"exp\" [class]=\"'col-exp ' + stickyClass('exp')\" [style.left.px]=\"stickyLeft('exp')\"><span hidden>D\u00E9tail</span></th>}\n @for (c of visibleColumns(); track c.id()) {\n <th scope=\"col\" [attr.data-sk]=\"c.id()\" [class]=\"thClass(c) + (canDrag(c) ? ' can-drag' : '') + (showsMenu(c) ? ' has-menu' : '') + (hasColFilter(c) ? ' is-filtered' : '')\" [attr.aria-sort]=\"ariaSort(c)\" [style.width]=\"colWidth(c)\" [style.left.px]=\"stickyLeft(c.id())\" [style.right.px]=\"stickyRight(c.id())\"\n cdkDrag [cdkDragDisabled]=\"!canDrag(c)\" [cdkDragData]=\"c\" [cdkDragLockAxis]=\"showGroupZone() ? null : 'x'\" cdkDragPreviewClass=\"dt-th-preview\" [cdkDragBoundary]=\"showGroupZone() ? '' : '.tbl thead'\">\n @if (canDrag(c)) {<span class=\"dh\" cdkDragHandle aria-hidden=\"true\" title=\"D\u00E9placer la colonne\"><cad-icon name=\"drag\" [size]=\"12\"/></span>}\n @if (c.headerTpl()) {\n <ng-container *ngTemplateOutlet=\"c.headerTpl()!.tpl; context: { $implicit: c }\"/>\n } @else if (c.sortable()) {\n <button type=\"button\" class=\"hd\" (click)=\"sort(c, $event)\" [attr.aria-label]=\"'Trier par ' + c.header()\">\n <span class=\"hd-txt\">{{ c.header() }}</span>\n <cad-icon [name]=\"sortIcon(c)\" [size]=\"12\"/>\n @if (sortMode() === 'multiple' && sortIndex(c) > 0) {<span class=\"hd-idx\">{{ sortIndex(c) }}</span>}\n </button>\n } @else {\n <span class=\"hd\"><span class=\"hd-txt\">{{ c.header() }}</span></span>\n }\n @if (showsMenu(c)) {<button type=\"button\" class=\"hm\" [class.is-on]=\"menuColumn() === c && !!headerMenu()?.visible()\" aria-label=\"Menu de la colonne\" aria-haspopup=\"menu\" (click)=\"openHeaderMenu(c, $event)\" (pointerdown)=\"$event.stopPropagation()\"><cad-icon name=\"more-vertical\" [size]=\"13\"/></button>}\n @if (isResizable(c)) {<span class=\"rz\" [class.is-active]=\"resizingId() === c.id()\" (pointerdown)=\"startResize($event, c)\" aria-hidden=\"true\"></span>}\n </th>\n }\n @if (hasActionsColumn()) {<th class=\"col-acts\" scope=\"col\" data-sk=\"acts\" [class]=\"'col-acts ' + stickyClass('acts')\" [style.right.px]=\"stickyRight('acts')\"><span hidden>Actions</span></th>}\n </tr>\n @if (hasFilterRow()) {\n <tr class=\"flt\">\n @if (hasNumberColumn()) {<th [class]=\"stickyClass('num')\" [style.left.px]=\"stickyLeft('num')\"></th>}\n @if (hasSelectionColumn()) {<th [class]=\"stickyClass('sel')\" [style.left.px]=\"stickyLeft('sel')\"></th>}\n @if (rowDragEnabled()) {<th [class]=\"stickyClass('drag')\" [style.left.px]=\"stickyLeft('drag')\"></th>}\n @if (hasExpandColumn()) {<th [class]=\"stickyClass('exp')\" [style.left.px]=\"stickyLeft('exp')\"></th>}\n @for (c of visibleColumns(); track c.id()) {\n <th [class]=\"stickyClass(c.id())\" [style.left.px]=\"stickyLeft(c.id())\" [style.right.px]=\"stickyRight(c.id())\">\n @if (c.filterable()) {\n @if (c.filterTpl()) {\n <ng-container *ngTemplateOutlet=\"c.filterTpl()!.tpl; context: { $implicit: c, value: filterValue(c), filter: filterFn(c) }\"/>\n } @else {\n @let kind = filterKind(c);\n @let op = filterOp(c);\n <div class=\"flt-cell\" [class.is-active]=\"hasColFilter(c)\" [class.is-range]=\"op.range\">\n @if (kind === 'boolean') {\n <select [value]=\"filterValue(c) == null ? '' : '' + filterValue(c)\" (change)=\"setFilter(c, $any($event.target).value === '' ? null : $any($event.target).value === 'true')\" [attr.aria-label]=\"'Filtrer ' + c.header()\">\n <option value=\"\">{{ c.filterPlaceholder() || 'Tous' }}</option><option value=\"true\">Oui</option><option value=\"false\">Non</option>\n </select>\n } @else if (kind === 'select' && op.mode !== 'eq') {\n <button type=\"button\" class=\"flt-in\" [class.is-ph]=\"!filterArray(c).length\" [attr.aria-label]=\"'Filtrer ' + c.header()\" (click)=\"openInMenu(c, $event)\">\n <span>{{ filterArray(c).length ? filterArray(c).length + ' s\u00E9lectionn\u00E9' + (filterArray(c).length > 1 ? 's' : '') : (c.filterPlaceholder() || 'Tous') }}</span><cad-icon name=\"chevron-down\" [size]=\"11\"/>\n </button>\n } @else if (kind === 'select') {\n <select [value]=\"filterValue(c) ?? ''\" (change)=\"setFilter(c, $any($event.target).value || null, 'eq')\" [attr.aria-label]=\"'Filtrer ' + c.header()\">\n <option value=\"\">{{ c.filterPlaceholder() || 'Tous' }}</option>\n @for (o of c.filterOptions(); track $index) {<option [value]=\"o.value\" [selected]=\"o.value === filterValue(c)\">{{ o.label }}</option>}\n </select>\n } @else if (!op.needsValue) {\n <span class=\"flt-txt\">{{ op.label }}</span>\n } @else if (op.range) {\n <input [type]=\"kind === 'number' ? 'number' : kind === 'date' ? 'date' : 'search'\" [value]=\"filterPart(c, 0)\" placeholder=\"min\" (input)=\"setFilterPart(c, 0, $any($event.target).value)\" [attr.aria-label]=\"'Filtrer ' + c.header() + ' (min)'\"/>\n <input [type]=\"kind === 'number' ? 'number' : kind === 'date' ? 'date' : 'search'\" [value]=\"filterPart(c, 1)\" placeholder=\"max\" (input)=\"setFilterPart(c, 1, $any($event.target).value)\" [attr.aria-label]=\"'Filtrer ' + c.header() + ' (max)'\"/>\n } @else {\n <input [type]=\"kind === 'number' ? 'number' : kind === 'date' ? 'date' : 'search'\" [value]=\"filterPart(c, 0)\" [placeholder]=\"c.filterPlaceholder() || op.label\" (input)=\"setFilterDebounced(c, $any($event.target).value)\" [attr.aria-label]=\"'Filtrer ' + c.header()\"/>\n }\n @if (kind !== 'boolean') {\n <button type=\"button\" class=\"flt-op\" [class.is-on]=\"hasColFilter(c) || op.mode !== filterOp(c).mode\" [attr.aria-label]=\"'Op\u00E9rateur : ' + op.label\" [title]=\"op.label\" (click)=\"openFilterMenu(c, $event)\"><cad-icon name=\"filter\" [size]=\"12\"/></button>\n }\n @if (hasColFilter(c)) {<button type=\"button\" class=\"flt-x\" aria-label=\"Effacer le filtre\" (click)=\"clearColumnFilter(c)\"><cad-icon name=\"x\" [size]=\"11\"/></button>}\n </div>\n }\n }\n </th>\n }\n @if (hasActionsColumn()) {<th [class]=\"stickyClass('acts')\" [style.right.px]=\"stickyRight('acts')\"></th>}\n </tr>\n }\n </thead>\n <tbody cdkDropList [cdkDropListDisabled]=\"!rowDragEnabled()\" cdkDropListLockAxis=\"y\" (cdkDropListDropped)=\"onRowDrop($event)\">\n @if (loading() && !hasData()) {\n @for (i of skeletonRows(); track i) {\n <tr class=\"dt-row is-skeleton\" aria-hidden=\"true\">\n @if (hasNumberColumn()) {<td class=\"col-num\"></td>}\n @if (hasSelectionColumn()) {<td class=\"col-sel\"></td>}\n @if (rowDragEnabled()) {<td class=\"col-drag\"></td>}\n @if (hasExpandColumn()) {<td class=\"col-exp\"></td>}\n @for (c of visibleColumns(); track c.id()) {<td [class]=\"tdClass(c)\"><div class=\"skel\" [style.width.%]=\"skeletonWidth(i, $index)\" [style.margin-left]=\"c.effectiveAlign() === 'right' ? 'auto' : null\"></div></td>}\n @if (hasActionsColumn()) {<td></td>}\n </tr>\n }\n } @else if (!displayRows().length) {\n <tr class=\"dt-empty\"><td [attr.colspan]=\"colspan()\">\n @if (emptyTpl()) {<ng-container *ngTemplateOutlet=\"emptyTpl()!.tpl\"/>}\n @else {\n <div class=\"empty\">\n @if (emptyIcon()) {<cad-icon [name]=\"emptyIcon()\" [size]=\"26\" [strokeWidth]=\"1.5\"/>}\n <b>{{ emptyMessage() }}</b>\n @if (emptyHint()) {<span>{{ emptyHint() }}</span>}\n </div>\n }\n </td></tr>\n } @else {\n @if (virtual.range().topPad > 0) {<tr class=\"dt-vpad\" aria-hidden=\"true\"><td [attr.colspan]=\"colspan()\" [style.height.px]=\"virtual.range().topPad\"></td></tr>}\n @for (d of renderRows(); track d.trackKey; let vi = $index) {\n @let i = vi + virtual.range().start;\n @if (d.kind === 'group') {\n <!-- en-t\u00EAte de groupe -->\n <tr class=\"dt-group\" [class.is-expanded]=\"d.node!.expanded\" [style.--_lvl]=\"d.level\" role=\"row\" [attr.aria-level]=\"d.level + 1\" [attr.aria-expanded]=\"d.node!.expanded\">\n <td [attr.colspan]=\"colspan()\" class=\"dt-group__cell\">\n <div class=\"dt-group__inner\">\n @if (hasSelectionColumn() && selectionMode() === 'multiple') {\n <cad-checkbox [value]=\"nodeState(d) === 'on'\" [indeterminate]=\"nodeState(d) === 'some'\" [ariaLabel]=\"'S\u00E9lectionner le groupe ' + d.node!.group!.label\" (changed)=\"toggleGroupSelection(d, $event)\"/>\n }\n <button type=\"button\" class=\"exp\" [attr.aria-expanded]=\"d.node!.expanded\" [attr.aria-label]=\"d.node!.expanded ? 'Replier' : 'D\u00E9plier'\" (click)=\"toggleGroup(d.node!)\"><cad-icon name=\"chevron-right\" [size]=\"13\"/></button>\n @if (groupHeaderTpl()) {\n <ng-container *ngTemplateOutlet=\"groupHeaderTpl()!.tpl; context: groupCtx(d)\"/>\n } @else {\n <span class=\"dt-group__label\">{{ d.node!.group!.label }}</span>\n <span class=\"dt-group__count\">{{ d.node!.group!.count }}</span>\n }\n </div>\n </td>\n </tr>\n } @else if (d.kind === 'groupFooter') {\n <!-- pied de groupe (agr\u00E9gats) -->\n <tr class=\"dt-group-foot\" [style.--_lvl]=\"d.level\">\n @if (groupFooterTpl()) {\n <td [attr.colspan]=\"colspan()\"><ng-container *ngTemplateOutlet=\"groupFooterTpl()!.tpl; context: groupCtx(d)\"/></td>\n } @else {\n @if (hasNumberColumn()) {<td class=\"col-num\"></td>}\n @if (hasSelectionColumn()) {<td class=\"col-sel\"></td>}\n @if (rowDragEnabled()) {<td class=\"col-drag\"></td>}\n @if (hasExpandColumn()) {<td class=\"col-exp\"></td>}\n @for (c of visibleColumns(); track c.id(); let ci = $index) {\n <td [class]=\"tdClass(c)\" [attr.data-l]=\"c.header()\">\n @if (ci === 0 && !hasAggregate(c)) {<span class=\"dt-group-foot__label\">Total {{ d.node!.group!.label }}</span>}\n @else if (hasAggregate(c)) {{{ formatCell(d.node!.group!.aggregates[c.field()], c) }}}\n </td>\n }\n @if (hasActionsColumn()) {<td></td>}\n }\n </tr>\n } @else if (resp.stacked() && cardTpl()) {\n <!-- carte custom (mode stack) -->\n <tr class=\"dt-row dt-card\" [class]=\"rowClasses(d.row, i, d)\" [style]=\"rowStyle()?.(d.row, i) || null\" [attr.tabindex]=\"selectionMode() ? 0 : null\" [attr.aria-selected]=\"selectionMode() ? isSelected(d.row) : null\"\n (click)=\"onRowClick(d.row, i, $event)\" (keydown)=\"onRowKey(d, i, $event)\">\n <td [attr.colspan]=\"colspan()\"><ng-container *ngTemplateOutlet=\"cardTpl()!.tpl; context: { $implicit: d.row, rowIndex: i, node: d.node, selected: isSelected(d.row) }\"/></td>\n </tr>\n } @else {\n <!-- ligne -->\n <tr class=\"dt-row\" [class]=\"rowClasses(d.row, i, d)\" [style]=\"rowStyle()?.(d.row, i) || null\" [style.--_lvl]=\"d.level\" [attr.data-key]=\"d.key\" [class.is-editing-row]=\"isRowEditing(d.row)\"\n cdkDrag [cdkDragDisabled]=\"!canDragRow(d.row)\" [cdkDragData]=\"d.row\" cdkDragLockAxis=\"y\" cdkDragPreviewClass=\"dt-tr-preview\" cdkDragBoundary=\".tbl\"\n [attr.tabindex]=\"selectionMode() || hierarchical() ? 0 : null\" [attr.aria-selected]=\"selectionMode() ? isSelected(d.row) : null\"\n [attr.role]=\"hierarchical() ? 'row' : null\" [attr.aria-level]=\"hierarchical() ? d.level + 1 : null\" [attr.aria-expanded]=\"d.node?.hasChildren ? d.node!.expanded : null\"\n [attr.aria-setsize]=\"d.node ? d.node.setSize : null\" [attr.aria-posinset]=\"d.node ? d.node.posInSet : null\"\n (click)=\"onRowClick(d.row, i, $event)\" (dblclick)=\"rowDblClick.emit({ row: d.row, index: i, event: $event })\" (keydown)=\"onRowKey(d, i, $event)\">\n @if (hasNumberColumn()) {<td class=\"col-num\" [class]=\"'col-num ' + stickyClass('num')\" [style.left.px]=\"stickyLeft('num')\">{{ rowNumber(d) }}</td>}\n @if (hasSelectionColumn()) {\n <td class=\"col-sel\" [class]=\"'col-sel ' + stickyClass('sel')\" [style.left.px]=\"stickyLeft('sel')\">\n @if (canSelect(d.row)) {\n @if (selectionMode() === 'multiple') {\n <cad-checkbox [value]=\"nodeState(d) === 'on'\" [indeterminate]=\"nodeState(d) === 'some'\" [ariaLabel]=\"'S\u00E9lectionner la ligne ' + (i + 1)\" (changed)=\"toggleRow(d.row, i, $event)\"/>\n } @else {\n <cad-checkbox [value]=\"isSelected(d.row)\" [ariaLabel]=\"'S\u00E9lectionner la ligne ' + (i + 1)\" (changed)=\"selectSingle(d.row, i)\"/>\n }\n }\n </td>\n }\n @if (rowDragEnabled()) {\n <td class=\"col-drag\" [class]=\"'col-drag ' + stickyClass('drag')\" [style.left.px]=\"stickyLeft('drag')\">\n @if (canDragRow(d.row)) {<span class=\"rdh\" cdkDragHandle title=\"D\u00E9placer la ligne\" aria-hidden=\"true\"><cad-icon name=\"drag\" [size]=\"13\"/></span>}\n </td>\n }\n @if (hasExpandColumn()) {\n <td class=\"col-exp\" [class]=\"'col-exp ' + stickyClass('exp')\" [style.left.px]=\"stickyLeft('exp')\">\n @if (canExpand(d.row)) {\n <button type=\"button\" class=\"exp\" [attr.aria-expanded]=\"isExpanded(d.row)\" [attr.aria-label]=\"isExpanded(d.row) ? 'Replier' : 'D\u00E9plier'\" (click)=\"toggleExpand(d.row, $event)\"><cad-icon name=\"chevron-right\" [size]=\"13\"/></button>\n }\n </td>\n }\n @for (c of visibleColumns(); track c.id(); let cFirst = $first) {\n <td [class]=\"tdClass(c) + ' ' + stickyClass(c.id()) + (isTreeColumn(c) ? ' dt-tree-cell' : '') + (cFirst ? ' dt-first' : '') + (editUi.canEditCell(c) ? ' is-editable' : '') + (edit.isEditing(d.row, c) ? ' is-editing' : '')\"\n [style.left.px]=\"stickyLeft(c.id())\" [style.right.px]=\"stickyRight(c.id())\" [attr.data-l]=\"c.header()\"\n (click)=\"editUi.onCellClick(d.row, c, $event, false)\" (dblclick)=\"editUi.onCellClick(d.row, c, $event, true)\">\n @if (edit.isEditing(d.row, c) && c.field()) {\n <!-- \u00E9diteur inline (mode cell ou row) -->\n <div class=\"dt-editor\" [class.is-invalid]=\"!!edit.cellError(d.row, c)\" (click)=\"$event.stopPropagation()\" (dblclick)=\"$event.stopPropagation()\" (keydown)=\"editUi.onKey(d.row, c, $event)\" (focusout)=\"editUi.onBlur(d.row, c)\">\n @if (c.editorTpl()) {\n <ng-container *ngTemplateOutlet=\"c.editorTpl()!.tpl; context: editUi.ctxFor(d.row, c, i)\"/>\n } @else {\n @switch (c.editor()) {\n @case ('select') {\n <select cadEditFocus [attr.aria-label]=\"c.header()\" (change)=\"editUi.onInput(d.row, c, $any($event.target).value)\">\n @for (o of c.effectiveEditorOptions(); track $index) {<option [value]=\"o.value\" [selected]=\"o.value === edit.valueOf(d.row, c)\">{{ o.label }}</option>}\n </select>\n }\n @case ('checkbox') {<input type=\"checkbox\" cadEditFocus [checked]=\"!!edit.valueOf(d.row, c)\" [attr.aria-label]=\"c.header()\" (change)=\"editUi.onInput(d.row, c, $any($event.target).checked)\"/>}\n @case ('textarea') {<textarea cadEditFocus rows=\"3\" [value]=\"edit.valueOf(d.row, c) ?? ''\" [attr.aria-label]=\"c.header()\" (input)=\"editUi.onInput(d.row, c, $any($event.target).value)\"></textarea>}\n @default {<input cadEditFocus [type]=\"editUi.inputType(c)\" [value]=\"edit.valueOf(d.row, c) ?? ''\" [attr.aria-label]=\"c.header()\" [attr.aria-invalid]=\"edit.cellError(d.row, c) ? 'true' : null\" (input)=\"editUi.onInput(d.row, c, $any($event.target).value)\"/>}\n }\n }\n @if (edit.cellError(d.row, c)) {<span class=\"dt-editor__err\" role=\"alert\">{{ edit.cellError(d.row, c) }}</span>}\n </div>\n } @else {\n @if (editUi.canEditCell(c) && showEditIcon()) {<button type=\"button\" class=\"ce\" tabindex=\"-1\" aria-label=\"Modifier\" (click)=\"$event.stopPropagation(); editUi.startEdit(d.row, c)\"><cad-icon name=\"edit\" [size]=\"11\"/></button>}\n @if (isTreeColumn(c) && d.node) {\n <span class=\"cad-tree-toggle\" [style.--_lvl]=\"d.level\">\n @if (showTreeLines()) { @for (l of levelsOf(d.level); track l) {<i class=\"tl\" aria-hidden=\"true\"></i>} }\n @else {<i class=\"ind\" aria-hidden=\"true\"></i>}\n <button type=\"button\" class=\"tg\" [class.is-leaf]=\"!d.node.hasChildren\" [class.is-open]=\"d.node.expanded\" [attr.tabindex]=\"d.node.hasChildren ? 0 : -1\"\n [attr.aria-expanded]=\"d.node.hasChildren ? d.node.expanded : null\" [attr.aria-label]=\"d.node.expanded ? 'Replier' : 'D\u00E9plier'\" (click)=\"toggleNode(d.node, $event)\">\n @if (d.node.loading) {<cad-icon name=\"loader\" [size]=\"12\" spin/>} @else {<cad-icon name=\"chevron-right\" [size]=\"13\"/>}\n </button>\n @if (treeIconOf(d.row)) {<cad-icon class=\"ic\" [name]=\"treeIconOf(d.row)!\" [size]=\"14\"/>}\n </span>\n }\n @if (c.cellTpl()) {\n <ng-container *ngTemplateOutlet=\"c.cellTpl()!.tpl; context: { $implicit: d.row, value: cell(d.row, c), rowIndex: i, column: c, level: d.level, expanded: d.node?.expanded ?? false, hasChildren: d.node?.hasChildren ?? false, node: d.node }\"/>\n } @else {<span class=\"cell-txt\">{{ formatCell(cell(d.row, c), c) }}</span>}\n }\n </td>\n }\n @if (hasActionsColumn()) {\n <td class=\"col-acts\" [class]=\"'col-acts ' + stickyClass('acts')\" [style.right.px]=\"stickyRight('acts')\"><span class=\"acts\" (click)=\"$event.stopPropagation()\">\n @if ((editMode() === 'row' || editMode() === 'row-inline') && showRowEditButton()) {\n @if (isRowEditing(d.row)) {\n <button type=\"button\" class=\"re ok\" aria-label=\"Enregistrer la ligne\" title=\"Enregistrer\" (click)=\"saveRowEdit(d.row)\"><cad-icon name=\"check\" [size]=\"15\"/></button>\n <button type=\"button\" class=\"re ko\" aria-label=\"Annuler l'\u00E9dition\" title=\"Annuler\" (click)=\"cancelRowEdit(d.row)\"><cad-icon name=\"x\" [size]=\"15\"/></button>\n } @else {\n <button type=\"button\" class=\"re\" aria-label=\"Modifier la ligne\" title=\"Modifier\" (click)=\"initRowEdit(d.row)\"><cad-icon name=\"edit\" [size]=\"14\"/></button>\n }\n }\n @if (rowActionsTpl()) {<ng-container *ngTemplateOutlet=\"rowActionsTpl()!.tpl; context: { $implicit: d.row, rowIndex: i, node: d.node, editing: isRowEditing(d.row) }\"/>}\n </span></td>\n }\n </tr>\n @if (isExpanded(d.row) && hasExpandColumn()) {\n <tr class=\"dt-detail\" [style.--_lvl]=\"d.level\"><td [attr.colspan]=\"colspan()\">\n @if (expansionTpl()) {\n <ng-container *ngTemplateOutlet=\"expansionTpl()!.tpl; context: { $implicit: d.row, rowIndex: i, hiddenColumns: hiddenByPriority(), node: d.node }\"/>\n } @else {\n <div class=\"kv\">\n @for (c of hiddenByPriority(); track c.id()) {<div><b>{{ c.header() || c.field() }}</b>\n @if (c.cellTpl()) {<ng-container *ngTemplateOutlet=\"c.cellTpl()!.tpl; context: { $implicit: d.row, value: cell(d.row, c), rowIndex: i, column: c, level: d.level, expanded: false, hasChildren: false, node: d.node }\"/>}\n @else {{{ formatCell(cell(d.row, c), c) }}}\n </div>}\n </div>\n }\n </td></tr>\n }\n }\n }\n @if (virtual.range().bottomPad > 0) {<tr class=\"dt-vpad\" aria-hidden=\"true\"><td [attr.colspan]=\"colspan()\" [style.height.px]=\"virtual.range().bottomPad\"></td></tr>}\n }\n </tbody>\n @if (footerTpl() || showGrandTotalRow()) {\n <tfoot>\n @if (showGrandTotalRow()) {\n <tr class=\"dt-grand\">\n @if (hasNumberColumn()) {<td class=\"col-num\"></td>}\n @if (hasSelectionColumn()) {<td class=\"col-sel\"></td>}\n @if (rowDragEnabled()) {<td class=\"col-drag\"></td>}\n @if (hasExpandColumn()) {<td class=\"col-exp\"></td>}\n @for (c of visibleColumns(); track c.id(); let ci = $index) {\n <td [class]=\"tdClass(c)\" [attr.data-l]=\"c.header()\">\n @if (ci === 0 && !hasAggregate(c)) {{{ grandTotalLabel() }}}\n @else if (hasAggregate(c)) {{{ formatCell(grandTotal()[c.field()], c) }}}\n </td>\n }\n @if (hasActionsColumn()) {<td></td>}\n </tr>\n }\n @if (footerTpl()) {<ng-container *ngTemplateOutlet=\"footerTpl()!.tpl; context: { $implicit: pageData(), columns: visibleColumns(), aggregates: grandTotal() }\"/>}\n </tfoot>\n }\n </table>\n </div>\n\n @if ((usePaginator() && (paginationTotal() > 0 || lazy())) || showRowCount()) {\n <div class=\"dt-foot\" [class.has-count]=\"showRowCount()\">\n @if (showRowCount()) {\n <span class=\"dt-foot__count\">\n @if (rowCountTpl()) {<ng-container *ngTemplateOutlet=\"rowCountTpl()!.tpl; context: { $implicit: totalRows(), total: totalRows(), filtered: totalFiltered(), selected: selectedCount() }\"/>}\n @else {{{ totalRows() }} {{ rowCountLabel() }}@if (totalFiltered() !== totalRows()) { \u00B7 {{ totalFiltered() }} filtr\u00E9e{{ totalFiltered() > 1 ? 's' : '' }}}@if (selectedCount() > 0) { \u00B7 {{ selectedCount() }} s\u00E9lectionn\u00E9e{{ selectedCount() > 1 ? 's' : '' }}}}\n </span>\n }\n @if (usePaginator() && (paginationTotal() > 0 || lazy())) {\n <cad-paginator [first]=\"first()\" [rows]=\"rows()\" [totalRecords]=\"paginationTotal()\" [rowsPerPageOptions]=\"rowsPerPageOptions()\" [pageLinks]=\"resp.stacked() ? 3 : pageLinks()\"\n [showCurrentPageReport]=\"showCurrentPageReport()\" [currentPageReportTemplate]=\"currentPageReportTemplate()\" [showFirstLastIcon]=\"showFirstLastIcon()\"\n [alwaysShow]=\"alwaysShowPaginator()\" (pageChange)=\"onPage($event)\"/>\n }\n </div>\n }\n <cad-menu #hmenu popup [items]=\"menuItems()\" ariaLabel=\"Menu de la colonne\"/>\n <cad-menu #fmenu popup [items]=\"filterMenuItems()\" ariaLabel=\"Op\u00E9rateur de filtre\" [minWidth]=\"200\"/>\n <cad-menu #inmenu popup [closeOnSelect]=\"false\" [items]=\"inMenuItems()\" ariaLabel=\"Valeurs du filtre\" [minWidth]=\"180\"/>\n</div>\n", styles: [":host{--_row-h: var(--cad-table-row-h, 42px);--_cell-px: 12px;display:block;min-width:0;max-width:100%;font:var(--cad-font-size)/1.4 var(--cad-font);color:var(--cad-fg)}:host(.is-dense){--_row-h: 34px}.dt{border:1px solid var(--cad-border);border-radius:var(--cad-radius-lg);background:var(--cad-surface);overflow:hidden;position:relative}:host(.is-borderless) .dt{border:0;border-radius:0}.dt-bar{display:flex;align-items:center;gap:8px;padding:10px 12px;border-bottom:1px solid var(--cad-border);flex-wrap:wrap}.dt-bar__title{font-weight:600;font-size:13.5px;margin-right:4px}.dt-bar__count{font:500 11px var(--cad-font-mono);padding:2px 7px;border-radius:999px;background:var(--cad-elevated);color:var(--cad-fg-secondary)}.dt-bar__grow{flex:1}.dt-bar__search{position:relative;display:flex;align-items:center;width:240px;max-width:100%}.dt-bar__search cad-icon{position:absolute;left:9px;color:var(--cad-fg-muted);pointer-events:none}.dt-bar__search input{width:100%;box-sizing:border-box;height:30px;padding:0 28px 0 30px;font:var(--cad-font-size) var(--cad-font);color:var(--cad-fg);background:var(--cad-input-bg);border:1px solid var(--cad-input-border);border-radius:var(--cad-radius);outline:0;transition:border-color var(--cad-dur),box-shadow var(--cad-dur)}.dt-bar__search input::placeholder{color:var(--cad-fg-muted)}.dt-bar__search input:focus{border-color:var(--cad-accent);box-shadow:0 0 0 3px var(--cad-ring)}.dt-bar__search .dt-bar__clear{position:absolute;right:6px;border:0;background:transparent;color:var(--cad-fg-muted);cursor:pointer;display:grid;place-items:center;padding:2px;border-radius:4px}.dt-bar__search .dt-bar__clear:hover{color:var(--cad-fg);background:var(--cad-hover)}.dt-bar__btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:26px;padding:0 8px;border-radius:var(--cad-radius-sm);border:1px solid var(--cad-border-strong);background:transparent;color:var(--cad-fg-secondary);font:500 var(--cad-font-size-sm) var(--cad-font);cursor:pointer;white-space:nowrap}.dt-bar__btn:hover{background:var(--cad-hover);color:var(--cad-fg)}.dt-bar__btn:focus-visible{outline:2px solid var(--cad-ring);outline-offset:1px}.dt-bar__btn.is-ghost{border-color:transparent;width:26px;padding:0}.dt-bar__btn.is-on{color:var(--cad-accent);background:var(--cad-accent-soft)}.dt-bar__cols{position:relative}.dt-bar__menu{position:absolute;right:0;top:calc(100% + 6px);z-index:20;min-width:200px;max-height:280px;overflow:auto;background:var(--cad-overlay);--cad-hover: var(--cad-overlay-hover);border:1px solid var(--cad-border);border-radius:9px;box-shadow:var(--cad-shadow-lg);padding:4px}.dt-bar__menu label{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:6px;cursor:pointer;font-size:var(--cad-font-size)}.dt-bar__menu label:hover{background:var(--cad-hover)}.dt-bar__menu label.is-locked{opacity:.5;cursor:default}.dt-bar__menu-title{font:600 10px/1 var(--cad-font-mono);letter-spacing:.1em;text-transform:uppercase;color:var(--cad-fg-muted);padding:6px 8px 4px}.dt-sel{display:flex;align-items:center;gap:8px;padding:8px 12px;background:var(--cad-accent-soft);border-bottom:1px solid var(--cad-border);font-size:12.5px;color:var(--cad-accent);font-weight:500;min-height:47px;box-sizing:border-box}.dt-sel__grow{flex:1}.dt-sel__clear{border:0;background:transparent;color:inherit;cursor:pointer;display:grid;place-items:center;width:26px;height:26px;border-radius:6px}.dt-sel__clear:hover{background:var(--cad-accent-soft)}.dt-scroll{overflow:auto;position:relative}:host(.has-scroll-height) .dt-scroll{max-height:var(--_scroll-h);scrollbar-width:thin;scrollbar-color:var(--cad-border-strong) transparent;scrollbar-gutter:stable}:host(.has-scroll-height) .dt-scroll::-webkit-scrollbar{width:10px;height:10px}:host(.has-scroll-height) .dt-scroll::-webkit-scrollbar-thumb{background:var(--cad-border-strong);border-radius:999px;border:2px solid var(--cad-surface)}:host(.has-scroll-height) .dt-scroll::-webkit-scrollbar-thumb:hover{background:var(--cad-fg-muted)}:host(.has-scroll-height) .dt-scroll::-webkit-scrollbar-track{background:transparent}.dt-loading{position:absolute;inset:0;display:grid;place-items:center;background:color-mix(in srgb,var(--cad-surface) 55%,transparent);z-index:5}.dt-loading cad-icon{color:var(--cad-accent)}.tbl{width:100%;border-collapse:separate;border-spacing:0;font-size:var(--cad-font-size)}:host(.is-resizable) .tbl{table-layout:fixed}.tbl caption{text-align:left;padding:10px 12px;font-weight:600;color:var(--cad-fg-secondary);font-size:var(--cad-font-size-sm)}.tbl th{position:relative;text-align:left;font-weight:600;font-size:var(--cad-font-size-sm);color:var(--cad-fg-secondary);background:var(--cad-bg-subtle);padding:0 var(--_cell-px);height:38px;border-bottom:1px solid var(--cad-border);white-space:nowrap;-webkit-user-select:none;user-select:none;box-sizing:border-box}:host(.is-sticky-header) .tbl thead th{position:sticky;top:0;z-index:3}.tbl th.al-right{text-align:right}.tbl th.al-center{text-align:center}.tbl th.st-left,.tbl td.st-left{position:sticky;left:0;z-index:2;background:var(--cad-surface)}.tbl th.st-right,.tbl td.st-right{position:sticky;right:0;z-index:2;background:var(--cad-surface)}.tbl th.st-left,.tbl th.st-right{background:var(--cad-bg-subtle);z-index:4}.tbl th .hd{display:inline-flex;align-items:center;gap:4px;max-width:100%}.tbl th.al-right .hd{flex-direction:row-reverse}.tbl th .hd-txt{overflow:hidden;text-overflow:ellipsis}.tbl th button.hd{all:unset;display:inline-flex;align-items:center;gap:4px;cursor:pointer;border-radius:4px;max-width:100%}.tbl th button.hd:focus-visible{outline:2px solid var(--cad-ring);outline-offset:2px}.tbl th .hd cad-icon{opacity:0;transition:opacity var(--cad-dur);flex:none}.tbl th:hover .hd cad-icon{opacity:.6}.tbl th.is-sorted .hd{color:var(--cad-accent)}.tbl th.is-sorted .hd cad-icon{opacity:1}.tbl th .hd-idx{font:600 9px var(--cad-font-mono);background:var(--cad-accent-soft);color:var(--cad-accent);border-radius:999px;padding:1px 4px}.tbl th .rz{position:absolute;right:0;top:8px;bottom:8px;width:5px;cursor:col-resize;z-index:1}.tbl th .rz:after{content:\"\";position:absolute;right:2px;top:0;bottom:0;width:1px;background:var(--cad-border);transition:background var(--cad-dur)}.tbl th .rz:hover:after,.tbl th .rz.is-active:after{background:var(--cad-accent);width:2px}.tbl th.col-sel,.tbl td.col-sel{width:36px;padding-right:0}.tbl th.col-exp,.tbl td.col-exp{width:30px;padding:0 4px}.tbl th.col-acts,.tbl td.col-acts{text-align:right;white-space:nowrap}.tbl tr.flt th{height:auto;padding:6px var(--_cell-px);background:var(--cad-surface);font-weight:400}.tbl tr.flt input,.tbl tr.flt select{width:100%;box-sizing:border-box;height:26px;padding:0 8px;font:var(--cad-font-size-sm) var(--cad-font);color:var(--cad-fg);background:var(--cad-input-bg);border:1px solid var(--cad-input-border);border-radius:var(--cad-radius-sm);outline:0}.tbl tr.flt input:focus,.tbl tr.flt select:focus{border-color:var(--cad-accent);box-shadow:0 0 0 2px var(--cad-ring)}.tbl td{padding:0 var(--_cell-px);height:var(--_row-h);border-bottom:1px solid var(--cad-border);vertical-align:middle;font-variant-numeric:tabular-nums;box-sizing:border-box}.tbl td.al-right{text-align:right}.tbl td.al-center{text-align:center}.tbl td.dt-num{font-family:var(--cad-font-mono);font-size:var(--cad-font-size-sm)}.tbl td.is-nowrap{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host(.is-bordered) .tbl td,:host(.is-bordered) .tbl th{border-right:1px solid var(--cad-border)}:host(.is-bordered) .tbl td:last-child,:host(.is-bordered) .tbl th:last-child{border-right:0}.tbl tbody tr:last-child td{border-bottom:0}:host(.is-striped) .tbl tbody tr.dt-row:nth-child(2n of.dt-row) td{background:var(--cad-table-stripe, var(--cad-bg-subtle))}:host(.is-hoverable) .tbl tbody tr.dt-row:hover td{background:var(--cad-hover)}.tbl tbody tr.dt-row.is-selectable{cursor:pointer}.tbl tbody tr.dt-row:focus-visible{outline:none}.tbl tbody tr.dt-row:focus-visible td{background:var(--cad-hover);box-shadow:inset 0 0 0 1px var(--cad-ring)}.tbl tbody tr.dt-row.is-selected td{background:var(--cad-accent-soft)}.tbl tbody tr.dt-row.is-selected td:first-child{box-shadow:inset 3px 0 0 var(--cad-accent)}.tbl tbody tr.dt-row.is-selected:focus-visible td{box-shadow:inset 0 0 0 1px var(--cad-ring)}.tbl tbody tr.dt-row.is-selected:focus-visible td:first-child{box-shadow:inset 3px 0 0 var(--cad-accent),inset 0 0 0 1px var(--cad-ring)}.tbl .exp{width:22px;height:22px;border:0;border-radius:5px;background:transparent;color:var(--cad-fg-muted);display:inline-grid;place-items:center;cursor:pointer;padding:0}.tbl .exp:hover{background:var(--cad-elevated);color:var(--cad-fg)}.tbl .exp:focus-visible{outline:2px solid var(--cad-ring)}.tbl .exp cad-icon{transition:transform var(--cad-dur)}.tbl tr.is-expanded .exp cad-icon{transform:rotate(90deg)}.tbl .acts{display:inline-flex;gap:2px;align-items:center;opacity:0;transition:opacity var(--cad-dur)}.tbl tr:hover .acts,.tbl tr.is-selected .acts,.tbl tr:focus-within .acts{opacity:1}:host(.acts-always) .tbl .acts{opacity:1}.tbl tr.dt-detail td{background:var(--cad-bg-subtle);height:auto;padding:12px var(--_cell-px) 14px var(--_detail-pl, 58px)}:host(.is-hoverable) .tbl tr.dt-detail:hover td{background:var(--cad-bg-subtle)}.tbl tfoot td{background:var(--cad-bg-subtle);font-weight:600;color:var(--cad-fg-secondary);border-top:1px solid var(--cad-border);border-bottom:0}.kv{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:10px 22px;font-size:12.5px}.kv b{display:block;font:600 10.5px/1 var(--cad-font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--cad-fg-muted);margin-bottom:4px}.skel{height:12px;border-radius:4px;background:linear-gradient(90deg,var(--cad-elevated),var(--cad-hover),var(--cad-elevated));background-size:200% 100%;animation:cad-tbl-sh 1.4s infinite}@keyframes cad-tbl-sh{to{background-position:-200% 0}}@media(prefers-reduced-motion:reduce){.skel{animation:none}.tbl .acts,.tbl .exp cad-icon,.tbl th .hd cad-icon{transition:none}}.empty{display:grid;place-items:center;gap:6px;padding:34px 12px;text-align:center;color:var(--cad-fg-secondary);font-size:12.5px}.empty cad-icon{color:var(--cad-fg-muted)}.empty b{color:var(--cad-fg);font-size:var(--cad-font-size)}.dt-foot{display:flex;align-items:center;gap:14px;padding:8px 12px;border-top:1px solid var(--cad-border)}.dt-foot cad-paginator{flex:1}\n", ".tbl th.st-left,.tbl td.st-left,.tbl th.st-right,.tbl td.st-right{position:sticky;z-index:2;background:var(--cad-surface);background-clip:padding-box}.tbl thead th.st-left,.tbl thead th.st-right{z-index:4;background:var(--cad-bg-subtle)}:host(.is-sticky-header) .tbl thead th.st-left,:host(.is-sticky-header) .tbl thead th.st-right{z-index:5}:host(.is-striped) .tbl tbody tr.dt-row:nth-child(2n of.dt-row) td.st-left,:host(.is-striped) .tbl tbody tr.dt-row:nth-child(2n of.dt-row) td.st-right{background:var(--cad-table-stripe, var(--cad-bg-subtle))}:host(.is-hoverable) .tbl tbody tr.dt-row:hover td.st-left,:host(.is-hoverable) .tbl tbody tr.dt-row:hover td.st-right{background:var(--cad-hover)}.tbl tbody tr.dt-row.is-selected td.st-left,.tbl tbody tr.dt-row.is-selected td.st-right{background:color-mix(in srgb,var(--cad-accent) 12%,var(--cad-surface))}.tbl td.st-last-left,.tbl th.st-last-left{transition:box-shadow var(--cad-dur)}:host(.is-scrolled-x) .tbl td.st-last-left,:host(.is-scrolled-x) .tbl th.st-last-left{box-shadow:1px 0 0 var(--cad-border),6px 0 12px -6px #0000002e}:host(:not(.is-scrolled-x-end)) .tbl td.st-first-right,:host(:not(.is-scrolled-x-end)) .tbl th.st-first-right{box-shadow:-1px 0 0 var(--cad-border),-6px 0 12px -6px #0000002e}.tbl td.st-right.col-acts .acts{background:inherit}.tbl td.dt-tree-cell{white-space:nowrap}.tbl td.dt-tree-cell .cell-txt{white-space:normal}.cad-tree-toggle{display:inline-flex;align-items:center;vertical-align:middle;margin-right:4px}.cad-tree-toggle .ind{display:inline-block;width:calc(var(--_lvl, 0) * var(--_indent, 20px));flex:none}.cad-tree-toggle .tl{display:inline-block;width:var(--_indent, 20px);align-self:stretch;flex:none;position:relative}:host(.has-tree-lines) .tbl td.dt-tree-cell{padding-top:0;padding-bottom:0}:host(.has-tree-lines) .cad-tree-toggle{align-self:stretch;height:var(--_row-h)}:host(.has-tree-lines) .cad-tree-toggle .tl:before{content:\"\";position:absolute;left:9px;top:0;bottom:0;border-left:1px solid var(--cad-border)}.cad-tree-toggle .tg{width:20px;height:20px;border:0;border-radius:5px;background:transparent;color:var(--cad-fg-muted);display:inline-grid;place-items:center;cursor:pointer;padding:0;flex:none}.cad-tree-toggle .tg:hover{background:var(--cad-elevated);color:var(--cad-fg)}.cad-tree-toggle .tg:focus-visible{outline:2px solid var(--cad-ring)}.cad-tree-toggle .tg cad-icon{transition:transform var(--cad-dur)}.cad-tree-toggle .tg.is-open cad-icon{transform:rotate(90deg)}.cad-tree-toggle .tg.is-leaf{visibility:hidden;pointer-events:none}.cad-tree-toggle .ic{color:var(--cad-fg-muted);margin:0 6px 0 2px}.tbl tr.dt-row.lvl-0.has-children td.dt-tree-cell{font-weight:500}.tbl tr.dt-group td{background:var(--cad-bg-subtle);height:34px;padding:0 var(--_cell-px);border-bottom:1px solid var(--cad-border)}.dt-group__inner{display:flex;align-items:center;gap:6px;padding-left:calc(var(--_lvl, 0) * var(--_indent, 20px));font-weight:600;font-size:var(--cad-font-size-sm)}.dt-group__inner .exp{width:22px;height:22px;border:0;border-radius:5px;background:transparent;color:var(--cad-fg-muted);display:inline-grid;place-items:center;cursor:pointer;padding:0}.dt-group__inner .exp:hover{background:var(--cad-elevated);color:var(--cad-fg)}.dt-group__inner .exp cad-icon{transition:transform var(--cad-dur)}.tbl tr.dt-group.is-expanded .dt-group__inner .exp cad-icon{transform:rotate(90deg)}.dt-group__count{font:500 10.5px var(--cad-font-mono);padding:1px 6px;border-radius:999px;background:var(--cad-elevated);color:var(--cad-fg-secondary)}.tbl tr.dt-group-foot td{background:var(--cad-bg-subtle);height:32px;color:var(--cad-fg-secondary);font-size:var(--cad-font-size-sm);border-bottom:1px solid var(--cad-border)}.tbl tr.dt-group-foot td.dt-num,.tbl tr.dt-grand td.dt-num{font-family:var(--cad-font-mono);font-weight:600}.dt-group-foot__label{padding-left:calc(var(--_lvl, 0) * var(--_indent, 20px) + 26px);font-weight:500}.tbl tfoot tr.dt-grand td{background:var(--cad-bg-subtle);font-weight:600;color:var(--cad-fg);border-top:2px solid var(--cad-border);height:36px}:host(.is-hoverable) .tbl tr.dt-group:hover td,:host(.is-hoverable) .tbl tr.dt-group-foot:hover td{background:var(--cad-bg-subtle)}.tbl tr.dt-detail td{padding-left:calc(var(--_detail-pl, 58px) + var(--_lvl, 0) * var(--_indent, 20px))}.dt-bar__tools,.dt-bar__tools-end{display:contents}.dt-bar__filters{display:inline-flex}.dt-bar__filters .dt-bar__count{padding:1px 6px;font-size:10px}:host(.is-stacked) .dt-bar{gap:8px}:host(.is-stacked) .dt-bar__tools{display:none}:host(.is-stacked) .dt-bar__tools.is-open{display:flex;flex-wrap:wrap;align-items:center;gap:8px;flex-basis:100%;order:10;padding-top:8px;border-top:1px dashed var(--cad-border)}:host(.is-stacked) .dt-bar__grow{display:none}:host(.is-stacked) .dt-bar__search{order:5;flex-basis:100%;width:100%}:host(.is-stacked) .dt-bar__cols,:host(.is-stacked) .dt-bar__density{display:none}:host(.is-stacked) .dt-sel{position:sticky;bottom:0;z-index:6;flex-wrap:wrap;border-top:1px solid var(--cad-border);order:99}:host(.is-stacked) .dt-scroll{overflow-x:hidden}:host(.is-stacked) .tbl,:host(.is-stacked) .tbl tbody,:host(.is-stacked) .tbl tfoot,:host(.is-stacked) .tbl tr,:host(.is-stacked) .tbl td{display:block}:host(.is-stacked) .tbl thead,:host(.is-stacked) .tbl colgroup,:host(.is-stacked) .tbl caption{display:none}:host(.is-stacked) .tbl tr.dt-row{position:relative;padding:10px 12px;border-bottom:1px solid var(--cad-border);height:auto}:host(.is-stacked) .tbl tr.dt-row.has-sel{padding-left:44px}:host(.is-stacked) .tbl tr.dt-row.is-selected{background:var(--cad-accent-soft);box-shadow:inset 3px 0 0 var(--cad-accent)}:host(.is-hoverable.is-stacked) .tbl tr.dt-row:hover{background:var(--cad-hover)}:host(.is-hoverable.is-stacked) .tbl tr.dt-row:hover td,:host(.is-stacked) .tbl tr.dt-row.is-selected td,:host(.is-striped.is-stacked) .tbl tr.dt-row td{background:transparent!important;box-shadow:none!important}:host(.is-stacked) .tbl tr.dt-row:focus-visible{box-shadow:inset 0 0 0 1px var(--cad-ring)}:host(.is-stacked) .tbl td{height:auto;padding:2px 0;border:0;white-space:normal;display:flex;justify-content:space-between;align-items:baseline;gap:12px;font-size:12.5px;position:static}:host(.is-stacked) .tbl td.st-left,:host(.is-stacked) .tbl td.st-right{position:static}:host(.is-stacked) .tbl td[data-l]:before{content:attr(data-l);color:var(--cad-fg-muted);font-size:11px;font-weight:500;text-transform:uppercase;letter-spacing:.04em;flex:none}:host(.is-stacked) .tbl td.col-sel{position:absolute;left:12px;top:12px;padding:0;width:auto}:host(.is-stacked) .tbl td.col-sel:before,:host(.is-stacked) .tbl td.col-exp:before,:host(.is-stacked) .tbl td.col-acts:before,:host(.is-stacked) .tbl td.dt-tree-cell:before,:host(.is-stacked) .tbl td.dt-first:before{content:none}:host(.is-stacked) .tbl td.col-exp{position:absolute;right:44px;top:8px;padding:0;width:auto}:host(.is-stacked) .tbl td.dt-first,:host(.is-stacked) .tbl td.dt-tree-cell{display:block;font-size:14px;font-weight:500;padding:0 44px 6px 0}:host(.is-stacked) .tbl td.dt-tree-cell .cad-tree-toggle .ind,:host(.is-stacked) .tbl td.dt-tree-cell .cad-tree-toggle .tl{display:none}:host(.is-stacked) .tbl td.col-acts{position:absolute;right:8px;top:8px;padding:0;width:auto}:host(.is-stacked) .tbl .acts{opacity:1}:host(.is-stacked) .tbl td.dt-num{text-align:right}:host(.is-stacked) .tbl tr.dt-detail td{padding:8px 12px 10px}:host(.is-stacked) .tbl tr.dt-row.lvl-1{margin-left:22px;border-left:2px solid var(--cad-border)}:host(.is-stacked) .tbl tr.dt-row.lvl-2{margin-left:44px;border-left:2px solid var(--cad-border)}:host(.is-stacked) .tbl tr.dt-row.lvl-3{margin-left:66px;border-left:2px solid var(--cad-border)}:host(.is-stacked) .tbl tr.dt-group td{padding:8px 12px;height:auto;display:block}:host(.is-stacked) .tbl tr.dt-group-foot{display:flex;flex-wrap:wrap;gap:4px 14px;padding:6px 12px 6px 44px}:host(.is-stacked) .tbl tr.dt-group-foot td{padding:0}:host(.is-stacked) .tbl tr.dt-group-foot td:empty{display:none}:host(.is-stacked) .tbl tfoot tr.dt-grand{padding:8px 12px}:host(.is-stacked) .tbl tfoot tr.dt-grand td:empty{display:none}:host(.is-stacked) .tbl tr.dt-empty td{display:block}:host(.is-stacked) .tbl tr.is-skeleton td{display:block;padding:4px 0}:host(.is-stacked) .tbl tr.dt-card td{padding:0;display:block}:host(.is-stacked) .dt-foot{flex-wrap:wrap;gap:8px}:host(.is-stacked) .dt-foot ::ng-deep .cad-paginator__rpp{display:none}\n", ".tbl th .dh{display:none;position:absolute;left:2px;top:50%;transform:translateY(-50%);width:14px;height:18px;color:var(--cad-fg-muted);cursor:grab;border-radius:3px;place-items:center}.tbl th .dh:hover{color:var(--cad-fg);background:var(--cad-elevated)}:host(.is-reorderable) .tbl th.can-drag{padding-left:calc(var(--_cell-px) + 6px)}:host(.is-reorderable) .tbl th.can-drag:hover .dh,:host(.is-reorderable) .tbl th.can-drag.cdk-drag-dragging .dh{display:grid}.tbl th.cdk-drag-placeholder{opacity:.35;background:var(--cad-accent-soft)}.tbl th.cdk-drag-placeholder:before{content:\"\";position:absolute;left:-1px;top:4px;bottom:4px;width:2px;background:var(--cad-accent)}.cdk-drag-preview.dt-th-preview{display:flex;align-items:center;height:38px;padding:0 12px;box-sizing:border-box;font:600 var(--cad-font-size-sm) var(--cad-font);color:var(--cad-fg);background:var(--cad-overlay);--cad-hover: var(--cad-overlay-hover);border:1px solid var(--cad-border);border-radius:6px;box-shadow:var(--cad-shadow-lg);list-style:none}.tbl thead tr.cdk-drop-list-dragging th:not(.cdk-drag-placeholder){transition:transform .2s cubic-bezier(0,0,.2,1)}.tbl th.cdk-drag-animating{transition:transform .2s cubic-bezier(0,0,.2,1)}.dt-bar__menu .mv{display:inline-flex;gap:0;margin-left:auto}.dt-bar__menu .mv button{border:0;background:transparent;color:var(--cad-fg-muted);width:20px;height:20px;border-radius:4px;cursor:pointer;display:grid;place-items:center;padding:0}.dt-bar__menu .mv button:hover:not([disabled]){background:var(--cad-hover);color:var(--cad-fg)}.dt-bar__menu .mv button[disabled]{opacity:.3;cursor:default}.tbl tr.hg th{height:30px;text-align:center;font:600 10.5px/1 var(--cad-font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--cad-fg-muted);border-bottom:1px solid var(--cad-border)}.tbl tr.hg th.hg-cell{border-left:1px solid var(--cad-border)}.tbl tr.hg th.hg-cell:first-child{border-left:0}:host(.is-sticky-header) .tbl tr.hg th{position:sticky;top:0;z-index:3}:host(.is-sticky-header) .tbl tr.hg+tr th{top:30px}.tbl tr.dt-vpad td{padding:0;border:0;height:auto}:host(.is-virtual) .dt-scroll{overflow-anchor:none}:host(.edit-cell) .tbl td.is-editable{cursor:text;position:relative}:host(.edit-cell.is-hoverable) .tbl tbody tr.dt-row td.is-editable:hover{background:var(--cad-hover);box-shadow:inset 0 0 0 1px var(--cad-border-strong)}:host(.show-edit-icon) .tbl td.is-editable{padding-right:calc(var(--_cell-px) + 16px)}.tbl td .ce{position:absolute;right:4px;top:50%;transform:translateY(-50%);width:20px;height:20px;border:0;border-radius:5px;background:transparent;color:var(--cad-fg-muted);display:grid;place-items:center;cursor:pointer;padding:0;opacity:0;transition:opacity var(--cad-dur),background var(--cad-dur)}.tbl td.is-editable:hover .ce,.tbl td .ce:focus-visible{opacity:.7}.tbl td .ce:hover{opacity:1!important;background:var(--cad-elevated);color:var(--cad-fg)}.tbl td.is-editing{padding-top:0;padding-bottom:0;background:var(--cad-surface)!important;box-shadow:none!important}.dt-editor{position:relative;display:flex;align-items:stretch;min-height:calc(var(--_row-h) - 8px);margin:4px 0}.tbl td.is-editing{height:auto;vertical-align:top}.dt-editor input,.dt-editor select,.dt-editor textarea{width:100%;height:calc(var(--_row-h) - 8px);box-sizing:border-box;padding:0 8px;font:var(--cad-font-size) var(--cad-font);color:var(--cad-fg);background:var(--cad-input-bg);border:1px solid var(--cad-accent);border-radius:var(--cad-radius-sm);outline:0;box-shadow:0 0 0 3px var(--cad-ring)}.dt-editor input[type=number]{font-family:var(--cad-font-mono);text-align:right}.dt-editor textarea{height:auto;min-height:76px;padding:6px 8px;resize:vertical;line-height:1.45;font:var(--cad-font-size)/1.45 var(--cad-font)}.dt-editor input[type=checkbox]{width:16px;height:16px;box-shadow:none;accent-color:var(--cad-accent)}.dt-editor.is-invalid input,.dt-editor.is-invalid select,.dt-editor.is-invalid textarea{border-color:var(--cad-danger);box-shadow:0 0 0 3px var(--cad-danger-soft)}.dt-editor__err{position:absolute;left:0;top:calc(100% + 4px);z-index:6;padding:3px 8px;border-radius:6px;background:var(--cad-danger);color:#fff;font-size:11px;white-space:nowrap;box-shadow:var(--cad-shadow-md);pointer-events:none}.dt-editor__err:before{content:\"\";position:absolute;left:10px;top:-4px;width:8px;height:8px;background:inherit;transform:rotate(45deg)}:host(.edit-row) .tbl tr.dt-row.is-editing-row td{background:var(--cad-accent-soft)}.tbl .acts .re{display:inline-grid;place-items:center;width:26px;height:26px;border:0;border-radius:6px;background:transparent;color:var(--cad-fg-secondary);cursor:pointer;padding:0}.tbl .acts .re:hover{background:var(--cad-hover);color:var(--cad-fg)}.tbl .acts .re.ok{color:var(--cad-success)}.tbl .acts .re.ko{color:var(--cad-danger)}.tbl .acts .re:focus-visible{outline:2px solid var(--cad-ring)}:host(.edit-row) .tbl tr.is-editing-row .acts{opacity:1}\n", ".dt-scroll{scrollbar-width:thin;scrollbar-color:var(--cad-border-strong) transparent}.dt-scroll::-webkit-scrollbar{height:10px;width:10px}.dt-scroll::-webkit-scrollbar-thumb{background:var(--cad-border-strong);border-radius:999px;border:2px solid var(--cad-surface)}.dt-scroll::-webkit-scrollbar-thumb:hover{background:var(--cad-fg-muted)}.dt-scroll::-webkit-scrollbar-track{background:transparent}.tbl th.has-menu{padding-right:calc(var(--_cell-px) + 20px)}.tbl th .hm{position:absolute;right:6px;top:50%;transform:translateY(-50%);width:22px;height:22px;border:0;border-radius:5px;background:transparent;color:var(--cad-fg-muted);display:grid;place-items:center;cursor:pointer;padding:0;opacity:0;transition:opacity var(--cad-dur),background var(--cad-dur);z-index:2}.tbl th:hover .hm,.tbl th .hm:focus-visible,.tbl th .hm.is-on,.tbl th.is-sorted .hm,.tbl th.is-filtered .hm{opacity:1}.tbl th .hm:hover,.tbl th .hm.is-on{background:var(--cad-elevated);color:var(--cad-fg)}.tbl th.is-filtered .hd-txt{color:var(--cad-accent)}:host(.is-resizable) .tbl th.has-menu .hm{right:10px}.tbl tr.flt th{padding:5px 6px}.flt-cell{position:relative;display:flex;align-items:center;gap:4px;min-width:0}.flt-cell input,.flt-cell select,.flt-cell .flt-in{flex:1 1 0;min-width:0;height:28px;padding:0 26px 0 8px;box-sizing:border-box;font:var(--cad-font-size-sm) var(--cad-font);color:var(--cad-fg);background:var(--cad-input-bg);border:1px solid var(--cad-input-border);border-radius:var(--cad-radius-sm);outline:0;transition:border-color var(--cad-dur),box-shadow var(--cad-dur)}.flt-cell.is-range input{padding-right:8px}.flt-cell.is-range input:last-of-type{padding-right:26px}.flt-cell input:focus,.flt-cell select:focus,.flt-cell .flt-in:focus-visible{border-color:var(--cad-accent);box-shadow:0 0 0 2px var(--cad-ring)}.flt-cell.is-active input,.flt-cell.is-active select,.flt-cell.is-active .flt-in{border-color:var(--cad-accent);background:var(--cad-accent-soft)}.flt-cell .flt-in{display:inline-flex;align-items:center;justify-content:space-between;gap:6px;text-align:left;cursor:pointer}.flt-cell .flt-in.is-ph{color:var(--cad-fg-muted)}.flt-cell .flt-in cad-icon{color:var(--cad-fg-muted);flex:none}.flt-cell .flt-txt{flex:1;height:28px;display:inline-flex;align-items:center;padding:0 26px 0 8px;font:italic var(--cad-font-size-sm) var(--cad-font);color:var(--cad-accent);background:var(--cad-accent-soft);border:1px solid var(--cad-accent);border-radius:var(--cad-radius-sm);box-sizing:border-box}.flt-cell .flt-op{position:absolute;right:4px;top:50%;transform:translateY(-50%);width:20px;height:20px;border:0;border-radius:4px;background:transparent;color:var(--cad-fg-muted);display:grid;place-items:center;cursor:pointer;padding:0}.flt-cell .flt-op:hover,.flt-cell .flt-op.is-on{color:var(--cad-accent);background:var(--cad-accent-soft)}.flt-cell.is-active .flt-op{right:22px}.flt-cell .flt-x{position:absolute;right:4px;top:50%;transform:translateY(-50%);width:18px;height:18px;border:0;border-radius:4px;background:transparent;color:var(--cad-fg-muted);display:grid;place-items:center;cursor:pointer;padding:0}.flt-cell .flt-x:hover{color:var(--cad-danger);background:var(--cad-danger-soft)}.flt-cell select{appearance:none;padding-right:26px}.dt-gz{display:flex;align-items:center;flex-wrap:wrap;gap:6px;min-height:40px;padding:6px 12px;border-bottom:1px solid var(--cad-border);background:var(--cad-bg-subtle);color:var(--cad-fg-muted);font-size:var(--cad-font-size-sm)}.dt-gz.cdk-drop-list-receiving,.dt-gz.cdk-drop-list-dragging{background:var(--cad-accent-soft);color:var(--cad-accent);outline:1px dashed var(--cad-accent);outline-offset:-4px}.dt-gz__hint{font-style:italic}.dt-gz__chip{display:inline-flex;align-items:center;gap:5px;height:26px;padding:0 4px 0 6px;border-radius:999px;background:var(--cad-accent-soft);color:var(--cad-accent);font-weight:500;cursor:grab}.dt-gz__chip .dt-gz__drag{opacity:.6}.dt-gz__chip button{width:18px;height:18px;border:0;border-radius:50%;background:transparent;color:inherit;display:grid;place-items:center;cursor:pointer;padding:0}.dt-gz__chip button:hover{background:var(--cad-accent);color:var(--cad-fg-on-accent)}.dt-gz__chip.cdk-drag-placeholder{opacity:.35}.cdk-drag-preview.dt-gz__chip{box-shadow:var(--cad-shadow-md)}:host(.is-stacked) .dt-gz{display:none}.tbl th.col-num,.tbl td.col-num{width:44px;text-align:right;font:11px var(--cad-font-mono);color:var(--cad-fg-muted);background:var(--cad-bg-subtle);padding:0 8px;-webkit-user-select:none;user-select:none}.tbl th.col-num{font-weight:600}.tbl tbody tr:hover td.col-num{background:var(--cad-bg-subtle)}:host(.is-stacked) .tbl td.col-num{position:absolute;left:auto;right:12px;bottom:6px;width:auto;background:transparent;padding:0}:host(.is-stacked) .tbl td.col-num:before{content:none}.tbl th.col-drag,.tbl td.col-drag{width:28px;padding:0 4px}.tbl td.col-drag .rdh{display:inline-grid;place-items:center;width:20px;height:24px;color:var(--cad-fg-muted);cursor:grab;opacity:0;transition:opacity var(--cad-dur);border-radius:4px}.tbl tbody tr:hover td.col-drag .rdh,.tbl tr.cdk-drag-dragging td.col-drag .rdh{opacity:.8}.tbl td.col-drag .rdh:hover{color:var(--cad-fg);background:var(--cad-elevated)}.tbl tr.dt-row.cdk-drag-placeholder{opacity:0}.tbl tbody.cdk-drop-list-dragging tr.dt-row:not(.cdk-drag-placeholder){transition:transform .2s cubic-bezier(0,0,.2,1)}.tbl tr.dt-row.cdk-drag-placeholder td{border-top:2px solid var(--cad-accent)}.cdk-drag-preview.dt-tr-preview{display:table;table-layout:fixed;box-sizing:border-box;background:var(--cad-overlay);--cad-hover: var(--cad-overlay-hover);border:1px solid var(--cad-border);border-radius:8px;box-shadow:var(--cad-shadow-lg);opacity:.95;font:var(--cad-font-size)/1.4 var(--cad-font);color:var(--cad-fg)}.cdk-drag-preview.dt-tr-preview td{padding:0 12px;height:42px;vertical-align:middle;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host(.is-stacked) .tbl td.col-drag{display:none}.dt-foot__count{font:var(--cad-font-size-sm) var(--cad-font-mono);color:var(--cad-fg-secondary);white-space:nowrap}.dt-foot.has-count cad-paginator{flex:1}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: CadIconComponent, selector: "cad-icon", inputs: ["name", "size", "strokeWidth", "label", "title", "spin", "filled", "flip", "rotate"] }, { kind: "component", type: CadCheckboxComponent, selector: "cad-checkbox", inputs: ["label", "ariaLabel", "indeterminate", "invalid", "readonly"], outputs: ["indeterminateChange", "changed"] }, { kind: "component", type: CadPaginatorComponent, selector: "cad-paginator", inputs: ["first", "rows", "totalRecords", "rowsPerPageOptions", "rowsPerPageLabel", "pageLinks", "showCurrentPageReport", "currentPageReportTemplate", "showFirstLastIcon", "showPageLinks", "alwaysShow"], outputs: ["firstChange", "rowsChange", "pageChange"] }, { kind: "directive", type: CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "directive", type: CadEditFocusDirective, selector: "[cadEditFocus]" }, { kind: "component", type: CadMenuComponent, selector: "cad-menu", inputs: ["items", "popup", "ariaLabel", "minWidth", "closeOnSelect", "mobile", "sheetTitle"], outputs: ["itemClick", "shown", "hidden"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
10651
10784
  }
10652
10785
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: CadTableComponent, decorators: [{
10653
10786
  type: Component,
@@ -10684,7 +10817,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImpo
10684
10817
  '[style.--_scroll-h]': 'scrollHeight() || null',
10685
10818
  '[style.--_detail-pl]': 'detailPaddingLeft()',
10686
10819
  '[style.--_indent]': 'indent()',
10687
- }, template: "<div class=\"dt\" #dt [class]=\"'dt ' + styleClass()\">\n <!-- barre de s\u00E9lection contextuelle (remplace la barre d'outils) -->\n @if (selectedCount() > 0 && showSelectionBar()) {\n <div class=\"dt-sel\" role=\"region\" aria-live=\"polite\">\n <cad-checkbox [value]=\"allState() === 'all'\" [indeterminate]=\"allState() === 'some'\" ariaLabel=\"Tout s\u00E9lectionner\" (changed)=\"toggleAll()\"/>\n <span>{{ selectedCount() }} {{ selectedCount() > 1 ? selectedLabelPlural() : selectedLabel() }}</span>\n <span class=\"dt-sel__grow\"></span>\n <ng-content select=\"[cadTableSelectionBar]\"/>\n <button type=\"button\" class=\"dt-sel__clear\" aria-label=\"Annuler la s\u00E9lection\" (click)=\"clearSelection()\"><cad-icon name=\"x\" [size]=\"14\"/></button>\n </div>\n } @else if (showToolbar()) {\n <div class=\"dt-bar\">\n @if (title()) {<span class=\"dt-bar__title\">{{ title() }}</span>}\n @if (showCount()) {<span class=\"dt-bar__count\">{{ count() ?? totalFiltered() }}</span>}\n @if (resp.stacked()) {\n <button type=\"button\" class=\"dt-bar__btn dt-bar__filters\" [class.is-on]=\"filtersOpen()\" [attr.aria-expanded]=\"filtersOpen()\" (click)=\"filtersOpen.set(!filtersOpen())\">\n <cad-icon name=\"filter\" [size]=\"13\"/>{{ filtersLabel() }}@if (activeFilterCount() > 0) {<span class=\"dt-bar__count\">{{ activeFilterCount() }}</span>}\n </button>\n }\n <span class=\"dt-bar__tools\" [class.is-open]=\"filtersOpen()\"><ng-content select=\"[cadTableToolbar]\"/></span>\n <span class=\"dt-bar__grow\"></span>\n @if (showSearch()) {\n <div class=\"dt-bar__search\">\n <cad-icon name=\"search\" [size]=\"14\"/>\n <input type=\"search\" [placeholder]=\"searchPlaceholder()\" [value]=\"searchText()\" (input)=\"onSearch($any($event.target).value)\" [attr.aria-label]=\"searchPlaceholder()\"/>\n @if (searchText()) {<button type=\"button\" class=\"dt-bar__clear\" aria-label=\"Effacer la recherche\" (click)=\"onSearch('', true)\"><cad-icon name=\"x\" [size]=\"12\"/></button>}\n </div>\n }\n <span class=\"dt-bar__tools-end\"><ng-content select=\"[cadTableToolbarEnd]\"/></span>\n @if (columnToggle()) {\n <div class=\"dt-bar__cols\">\n <button type=\"button\" class=\"dt-bar__btn\" [class.is-on]=\"colsMenuOpen()\" aria-haspopup=\"true\" [attr.aria-expanded]=\"colsMenuOpen()\" (click)=\"colsMenuOpen.set(!colsMenuOpen())\">\n {{ columnsLabel() }} <cad-icon name=\"chevron-down\" [size]=\"12\"/>\n </button>\n @if (colsMenuOpen()) {\n <div class=\"dt-bar__menu\" role=\"menu\" (keydown.escape)=\"colsMenuOpen.set(false)\">\n <div class=\"dt-bar__menu-title\">{{ columnsLabel() }}</div>\n @for (c of orderedColumns(); track c.id(); let ci = $index; let first = $first; let last = $last) {\n <label [class.is-locked]=\"!c.toggleable()\">\n <cad-checkbox [value]=\"!c.hidden()\" [disabled]=\"!c.toggleable()\" (changed)=\"toggleColumn(c, !$event)\"/>\n <span>{{ c.header() || c.field() }}</span>\n @if (reorderableColumns()) {\n <span class=\"mv\" (click)=\"$event.stopPropagation(); $event.preventDefault()\">\n <button type=\"button\" aria-label=\"Monter\" [disabled]=\"first\" (click)=\"moveColumn(ci, ci - 1)\"><cad-icon name=\"chevron-up\" [size]=\"12\"/></button>\n <button type=\"button\" aria-label=\"Descendre\" [disabled]=\"last\" (click)=\"moveColumn(ci, ci + 1)\"><cad-icon name=\"chevron-down\" [size]=\"12\"/></button>\n </span>\n }\n </label>\n }\n </div>\n }\n </div>\n }\n @if (showDensityToggle()) {\n <button type=\"button\" class=\"dt-bar__btn is-ghost dt-bar__density\" [class.is-on]=\"dense()\" [attr.aria-pressed]=\"dense()\" aria-label=\"Densit\u00E9\" title=\"Densit\u00E9\" (click)=\"dense.set(!dense())\"><cad-icon name=\"chevrons-up-down\" [size]=\"14\"/></button>\n }\n </div>\n }\n\n @if (showGroupZone() && !resp.stacked()) {\n <div class=\"dt-gz\" [class.is-empty]=\"!groupFields().length\" cdkDropList [id]=\"gzId\" cdkDropListOrientation=\"horizontal\" [cdkDropListData]=\"groupFields()\" [cdkDropListEnterPredicate]=\"gzEnter\" (cdkDropListDropped)=\"onGroupZoneDrop($event)\">\n <cad-icon name=\"layers\" [size]=\"14\"/>\n @if (!groupFields().length) {<span class=\"dt-gz__hint\">{{ groupZoneLabel() }}</span>}\n @for (f of groupFields(); track f) {\n <span class=\"dt-gz__chip\" cdkDrag [cdkDragData]=\"f\" cdkDragLockAxis=\"x\"><cad-icon name=\"drag\" [size]=\"11\" class=\"dt-gz__drag\"/><span>{{ groupChipLabel(f) }}</span><button type=\"button\" [attr.aria-label]=\"'Ne plus grouper par ' + groupChipLabel(f)\" (click)=\"ungroup(f)\"><cad-icon name=\"x\" [size]=\"11\"/></button></span>\n }\n </div>\n }\n\n <div class=\"dt-scroll\" #scroller (scroll)=\"onScroll()\">\n @if (loading() && hasData()) {<div class=\"dt-loading\"><cad-icon name=\"loader\" [size]=\"22\" spin/></div>}\n <table class=\"tbl\" [class]=\"'tbl ' + tableClass()\" [style]=\"tableStyle()\" [attr.aria-busy]=\"loading() ? 'true' : null\" [attr.aria-rowcount]=\"totalFiltered()\" [attr.role]=\"hierarchical() ? 'treegrid' : null\">\n @if (captionTpl()) {<caption><ng-container *ngTemplateOutlet=\"captionTpl()!.tpl\"/></caption>}\n <colgroup>\n @if (hasNumberColumn()) {<col style=\"width:44px\">}\n @if (hasSelectionColumn()) {<col style=\"width:36px\">}\n @if (rowDragEnabled()) {<col style=\"width:28px\">}\n @if (hasExpandColumn()) {<col style=\"width:30px\">}\n @for (c of visibleColumns(); track c.id()) {<col [style.width]=\"colWidth(c)\" [style.min-width]=\"c.minWidth() || null\" [style.max-width]=\"c.maxWidth() || null\">}\n @if (hasActionsColumn()) {<col [style.width]=\"rowActionsWidth()\">}\n </colgroup>\n <thead>\n @if (headerGroups().length && !resp.stacked()) {\n <tr class=\"hg\">\n @if (hasNumberColumn()) {<th [class]=\"stickyClass('num')\" [style.left.px]=\"stickyLeft('num')\"></th>}\n @if (hasSelectionColumn()) {<th [class]=\"stickyClass('sel')\" [style.left.px]=\"stickyLeft('sel')\"></th>}\n @if (rowDragEnabled()) {<th [class]=\"stickyClass('drag')\" [style.left.px]=\"stickyLeft('drag')\"></th>}\n @if (hasExpandColumn()) {<th [class]=\"stickyClass('exp')\" [style.left.px]=\"stickyLeft('exp')\"></th>}\n @for (g of headerGroups(); track $index) {<th scope=\"colgroup\" [attr.colspan]=\"g.span\" [class]=\"'hg-cell ' + (g.class || '')\">{{ g.header }}</th>}\n @if (hasActionsColumn()) {<th [class]=\"stickyClass('acts')\" [style.right.px]=\"stickyRight('acts')\"></th>}\n </tr>\n }\n <tr cdkDropList cdkDropListOrientation=\"horizontal\" [cdkDropListDisabled]=\"!reorderableColumns() && !showGroupZone()\" [cdkDropListSortingDisabled]=\"!reorderableColumns()\" [cdkDropListConnectedTo]=\"showGroupZone() ? [gzId] : []\" (cdkDropListDropped)=\"onColumnDrop($event)\">\n @if (hasNumberColumn()) {<th class=\"col-num\" scope=\"col\" data-sk=\"num\" [class]=\"'col-num ' + stickyClass('num')\" [style.left.px]=\"stickyLeft('num')\">#</th>}\n @if (hasSelectionColumn()) {\n <th class=\"col-sel\" scope=\"col\" data-sk=\"sel\" [class]=\"'col-sel ' + stickyClass('sel')\" [style.left.px]=\"stickyLeft('sel')\">\n @if (selectionMode() === 'multiple' && selectAll()) {\n <cad-checkbox [value]=\"allState() === 'all'\" [indeterminate]=\"allState() === 'some'\" ariaLabel=\"Tout s\u00E9lectionner\" (changed)=\"toggleAll()\"/>\n }\n </th>\n }\n @if (rowDragEnabled()) {<th class=\"col-drag\" scope=\"col\" data-sk=\"drag\" [class]=\"'col-drag ' + stickyClass('drag')\" [style.left.px]=\"stickyLeft('drag')\"><span hidden>D\u00E9placer</span></th>}\n @if (hasExpandColumn()) {<th class=\"col-exp\" scope=\"col\" data-sk=\"exp\" [class]=\"'col-exp ' + stickyClass('exp')\" [style.left.px]=\"stickyLeft('exp')\"><span hidden>D\u00E9tail</span></th>}\n @for (c of visibleColumns(); track c.id()) {\n <th scope=\"col\" [attr.data-sk]=\"c.id()\" [class]=\"thClass(c) + (canDrag(c) ? ' can-drag' : '') + (showsMenu(c) ? ' has-menu' : '') + (hasColFilter(c) ? ' is-filtered' : '')\" [attr.aria-sort]=\"ariaSort(c)\" [style.width]=\"colWidth(c)\" [style.left.px]=\"stickyLeft(c.id())\" [style.right.px]=\"stickyRight(c.id())\"\n cdkDrag [cdkDragDisabled]=\"!canDrag(c)\" [cdkDragData]=\"c\" [cdkDragLockAxis]=\"showGroupZone() ? null : 'x'\" cdkDragPreviewClass=\"dt-th-preview\" [cdkDragBoundary]=\"showGroupZone() ? '' : '.tbl thead'\">\n @if (canDrag(c)) {<span class=\"dh\" cdkDragHandle aria-hidden=\"true\" title=\"D\u00E9placer la colonne\"><cad-icon name=\"drag\" [size]=\"12\"/></span>}\n @if (c.headerTpl()) {\n <ng-container *ngTemplateOutlet=\"c.headerTpl()!.tpl; context: { $implicit: c }\"/>\n } @else if (c.sortable()) {\n <button type=\"button\" class=\"hd\" (click)=\"sort(c, $event)\" [attr.aria-label]=\"'Trier par ' + c.header()\">\n <span class=\"hd-txt\">{{ c.header() }}</span>\n <cad-icon [name]=\"sortIcon(c)\" [size]=\"12\"/>\n @if (sortMode() === 'multiple' && sortIndex(c) > 0) {<span class=\"hd-idx\">{{ sortIndex(c) }}</span>}\n </button>\n } @else {\n <span class=\"hd\"><span class=\"hd-txt\">{{ c.header() }}</span></span>\n }\n @if (showsMenu(c)) {<button type=\"button\" class=\"hm\" [class.is-on]=\"menuColumn() === c && !!headerMenu()?.visible()\" aria-label=\"Menu de la colonne\" aria-haspopup=\"menu\" (click)=\"openHeaderMenu(c, $event)\" (pointerdown)=\"$event.stopPropagation()\"><cad-icon name=\"more-vertical\" [size]=\"13\"/></button>}\n @if (isResizable(c)) {<span class=\"rz\" [class.is-active]=\"resizingId() === c.id()\" (pointerdown)=\"startResize($event, c)\" aria-hidden=\"true\"></span>}\n </th>\n }\n @if (hasActionsColumn()) {<th class=\"col-acts\" scope=\"col\" data-sk=\"acts\" [class]=\"'col-acts ' + stickyClass('acts')\" [style.right.px]=\"stickyRight('acts')\"><span hidden>Actions</span></th>}\n </tr>\n @if (hasFilterRow()) {\n <tr class=\"flt\">\n @if (hasNumberColumn()) {<th [class]=\"stickyClass('num')\" [style.left.px]=\"stickyLeft('num')\"></th>}\n @if (hasSelectionColumn()) {<th [class]=\"stickyClass('sel')\" [style.left.px]=\"stickyLeft('sel')\"></th>}\n @if (rowDragEnabled()) {<th [class]=\"stickyClass('drag')\" [style.left.px]=\"stickyLeft('drag')\"></th>}\n @if (hasExpandColumn()) {<th [class]=\"stickyClass('exp')\" [style.left.px]=\"stickyLeft('exp')\"></th>}\n @for (c of visibleColumns(); track c.id()) {\n <th [class]=\"stickyClass(c.id())\" [style.left.px]=\"stickyLeft(c.id())\" [style.right.px]=\"stickyRight(c.id())\">\n @if (c.filterable()) {\n @if (c.filterTpl()) {\n <ng-container *ngTemplateOutlet=\"c.filterTpl()!.tpl; context: { $implicit: c, value: filterValue(c), filter: filterFn(c) }\"/>\n } @else {\n @let kind = filterKind(c);\n @let op = filterOp(c);\n <div class=\"flt-cell\" [class.is-active]=\"hasColFilter(c)\" [class.is-range]=\"op.range\">\n @if (kind === 'boolean') {\n <select [value]=\"filterValue(c) == null ? '' : '' + filterValue(c)\" (change)=\"setFilter(c, $any($event.target).value === '' ? null : $any($event.target).value === 'true')\" [attr.aria-label]=\"'Filtrer ' + c.header()\">\n <option value=\"\">{{ c.filterPlaceholder() || 'Tous' }}</option><option value=\"true\">Oui</option><option value=\"false\">Non</option>\n </select>\n } @else if (kind === 'select' && op.mode !== 'eq') {\n <button type=\"button\" class=\"flt-in\" [class.is-ph]=\"!filterArray(c).length\" [attr.aria-label]=\"'Filtrer ' + c.header()\" (click)=\"openInMenu(c, $event)\">\n <span>{{ filterArray(c).length ? filterArray(c).length + ' s\u00E9lectionn\u00E9' + (filterArray(c).length > 1 ? 's' : '') : (c.filterPlaceholder() || 'Tous') }}</span><cad-icon name=\"chevron-down\" [size]=\"11\"/>\n </button>\n } @else if (kind === 'select') {\n <select [value]=\"filterValue(c) ?? ''\" (change)=\"setFilter(c, $any($event.target).value || null, 'eq')\" [attr.aria-label]=\"'Filtrer ' + c.header()\">\n <option value=\"\">{{ c.filterPlaceholder() || 'Tous' }}</option>\n @for (o of c.filterOptions(); track $index) {<option [value]=\"o.value\" [selected]=\"o.value === filterValue(c)\">{{ o.label }}</option>}\n </select>\n } @else if (!op.needsValue) {\n <span class=\"flt-txt\">{{ op.label }}</span>\n } @else if (op.range) {\n <input [type]=\"kind === 'number' ? 'number' : kind === 'date' ? 'date' : 'search'\" [value]=\"filterPart(c, 0)\" placeholder=\"min\" (input)=\"setFilterPart(c, 0, $any($event.target).value)\" [attr.aria-label]=\"'Filtrer ' + c.header() + ' (min)'\"/>\n <input [type]=\"kind === 'number' ? 'number' : kind === 'date' ? 'date' : 'search'\" [value]=\"filterPart(c, 1)\" placeholder=\"max\" (input)=\"setFilterPart(c, 1, $any($event.target).value)\" [attr.aria-label]=\"'Filtrer ' + c.header() + ' (max)'\"/>\n } @else {\n <input [type]=\"kind === 'number' ? 'number' : kind === 'date' ? 'date' : 'search'\" [value]=\"filterPart(c, 0)\" [placeholder]=\"c.filterPlaceholder() || op.label\" (input)=\"setFilterDebounced(c, $any($event.target).value)\" [attr.aria-label]=\"'Filtrer ' + c.header()\"/>\n }\n @if (kind !== 'boolean') {\n <button type=\"button\" class=\"flt-op\" [class.is-on]=\"hasColFilter(c) || op.mode !== filterOp(c).mode\" [attr.aria-label]=\"'Op\u00E9rateur : ' + op.label\" [title]=\"op.label\" (click)=\"openFilterMenu(c, $event)\"><cad-icon name=\"filter\" [size]=\"12\"/></button>\n }\n @if (hasColFilter(c)) {<button type=\"button\" class=\"flt-x\" aria-label=\"Effacer le filtre\" (click)=\"clearColumnFilter(c)\"><cad-icon name=\"x\" [size]=\"11\"/></button>}\n </div>\n }\n }\n </th>\n }\n @if (hasActionsColumn()) {<th [class]=\"stickyClass('acts')\" [style.right.px]=\"stickyRight('acts')\"></th>}\n </tr>\n }\n </thead>\n <tbody cdkDropList [cdkDropListDisabled]=\"!rowDragEnabled()\" cdkDropListLockAxis=\"y\" (cdkDropListDropped)=\"onRowDrop($event)\">\n @if (loading() && !hasData()) {\n @for (i of skeletonRows(); track i) {\n <tr class=\"dt-row is-skeleton\" aria-hidden=\"true\">\n @if (hasNumberColumn()) {<td class=\"col-num\"></td>}\n @if (hasSelectionColumn()) {<td class=\"col-sel\"></td>}\n @if (rowDragEnabled()) {<td class=\"col-drag\"></td>}\n @if (hasExpandColumn()) {<td class=\"col-exp\"></td>}\n @for (c of visibleColumns(); track c.id()) {<td [class]=\"tdClass(c)\"><div class=\"skel\" [style.width.%]=\"skeletonWidth(i, $index)\" [style.margin-left]=\"c.effectiveAlign() === 'right' ? 'auto' : null\"></div></td>}\n @if (hasActionsColumn()) {<td></td>}\n </tr>\n }\n } @else if (!displayRows().length) {\n <tr class=\"dt-empty\"><td [attr.colspan]=\"colspan()\">\n @if (emptyTpl()) {<ng-container *ngTemplateOutlet=\"emptyTpl()!.tpl\"/>}\n @else {\n <div class=\"empty\">\n @if (emptyIcon()) {<cad-icon [name]=\"emptyIcon()\" [size]=\"26\" [strokeWidth]=\"1.5\"/>}\n <b>{{ emptyMessage() }}</b>\n @if (emptyHint()) {<span>{{ emptyHint() }}</span>}\n </div>\n }\n </td></tr>\n } @else {\n @if (virtual.range().topPad > 0) {<tr class=\"dt-vpad\" aria-hidden=\"true\"><td [attr.colspan]=\"colspan()\" [style.height.px]=\"virtual.range().topPad\"></td></tr>}\n @for (d of renderRows(); track d.trackKey; let vi = $index) {\n @let i = vi + virtual.range().start;\n @if (d.kind === 'group') {\n <!-- en-t\u00EAte de groupe -->\n <tr class=\"dt-group\" [class.is-expanded]=\"d.node!.expanded\" [style.--_lvl]=\"d.level\" role=\"row\" [attr.aria-level]=\"d.level + 1\" [attr.aria-expanded]=\"d.node!.expanded\">\n <td [attr.colspan]=\"colspan()\" class=\"dt-group__cell\">\n <div class=\"dt-group__inner\">\n @if (hasSelectionColumn() && selectionMode() === 'multiple') {\n <cad-checkbox [value]=\"nodeState(d) === 'on'\" [indeterminate]=\"nodeState(d) === 'some'\" [ariaLabel]=\"'S\u00E9lectionner le groupe ' + d.node!.group!.label\" (changed)=\"toggleGroupSelection(d, $event)\"/>\n }\n <button type=\"button\" class=\"exp\" [attr.aria-expanded]=\"d.node!.expanded\" [attr.aria-label]=\"d.node!.expanded ? 'Replier' : 'D\u00E9plier'\" (click)=\"toggleGroup(d.node!)\"><cad-icon name=\"chevron-right\" [size]=\"13\"/></button>\n @if (groupHeaderTpl()) {\n <ng-container *ngTemplateOutlet=\"groupHeaderTpl()!.tpl; context: groupCtx(d)\"/>\n } @else {\n <span class=\"dt-group__label\">{{ d.node!.group!.label }}</span>\n <span class=\"dt-group__count\">{{ d.node!.group!.count }}</span>\n }\n </div>\n </td>\n </tr>\n } @else if (d.kind === 'groupFooter') {\n <!-- pied de groupe (agr\u00E9gats) -->\n <tr class=\"dt-group-foot\" [style.--_lvl]=\"d.level\">\n @if (groupFooterTpl()) {\n <td [attr.colspan]=\"colspan()\"><ng-container *ngTemplateOutlet=\"groupFooterTpl()!.tpl; context: groupCtx(d)\"/></td>\n } @else {\n @if (hasNumberColumn()) {<td class=\"col-num\"></td>}\n @if (hasSelectionColumn()) {<td class=\"col-sel\"></td>}\n @if (rowDragEnabled()) {<td class=\"col-drag\"></td>}\n @if (hasExpandColumn()) {<td class=\"col-exp\"></td>}\n @for (c of visibleColumns(); track c.id(); let ci = $index) {\n <td [class]=\"tdClass(c)\" [attr.data-l]=\"c.header()\">\n @if (ci === 0 && !hasAggregate(c)) {<span class=\"dt-group-foot__label\">Total {{ d.node!.group!.label }}</span>}\n @else if (hasAggregate(c)) {{{ formatCell(d.node!.group!.aggregates[c.field()], c) }}}\n </td>\n }\n @if (hasActionsColumn()) {<td></td>}\n }\n </tr>\n } @else if (resp.stacked() && cardTpl()) {\n <!-- carte custom (mode stack) -->\n <tr class=\"dt-row dt-card\" [class]=\"rowClasses(d.row, i, d)\" [style]=\"rowStyle()?.(d.row, i) || null\" [attr.tabindex]=\"selectionMode() ? 0 : null\" [attr.aria-selected]=\"selectionMode() ? isSelected(d.row) : null\"\n (click)=\"onRowClick(d.row, i, $event)\" (keydown)=\"onRowKey(d, i, $event)\">\n <td [attr.colspan]=\"colspan()\"><ng-container *ngTemplateOutlet=\"cardTpl()!.tpl; context: { $implicit: d.row, rowIndex: i, node: d.node, selected: isSelected(d.row) }\"/></td>\n </tr>\n } @else {\n <!-- ligne -->\n <tr class=\"dt-row\" [class]=\"rowClasses(d.row, i, d)\" [style]=\"rowStyle()?.(d.row, i) || null\" [style.--_lvl]=\"d.level\" [attr.data-key]=\"d.key\" [class.is-editing-row]=\"isRowEditing(d.row)\"\n cdkDrag [cdkDragDisabled]=\"!canDragRow(d.row)\" [cdkDragData]=\"d.row\" cdkDragLockAxis=\"y\" cdkDragPreviewClass=\"dt-tr-preview\" cdkDragBoundary=\".tbl\"\n [attr.tabindex]=\"selectionMode() || hierarchical() ? 0 : null\" [attr.aria-selected]=\"selectionMode() ? isSelected(d.row) : null\"\n [attr.role]=\"hierarchical() ? 'row' : null\" [attr.aria-level]=\"hierarchical() ? d.level + 1 : null\" [attr.aria-expanded]=\"d.node?.hasChildren ? d.node!.expanded : null\"\n [attr.aria-setsize]=\"d.node ? d.node.setSize : null\" [attr.aria-posinset]=\"d.node ? d.node.posInSet : null\"\n (click)=\"onRowClick(d.row, i, $event)\" (dblclick)=\"rowDblClick.emit({ row: d.row, index: i, event: $event })\" (keydown)=\"onRowKey(d, i, $event)\">\n @if (hasNumberColumn()) {<td class=\"col-num\" [class]=\"'col-num ' + stickyClass('num')\" [style.left.px]=\"stickyLeft('num')\">{{ rowNumber(d) }}</td>}\n @if (hasSelectionColumn()) {\n <td class=\"col-sel\" [class]=\"'col-sel ' + stickyClass('sel')\" [style.left.px]=\"stickyLeft('sel')\">\n @if (canSelect(d.row)) {\n @if (selectionMode() === 'multiple') {\n <cad-checkbox [value]=\"nodeState(d) === 'on'\" [indeterminate]=\"nodeState(d) === 'some'\" [ariaLabel]=\"'S\u00E9lectionner la ligne ' + (i + 1)\" (changed)=\"toggleRow(d.row, i, $event)\"/>\n } @else {\n <cad-checkbox [value]=\"isSelected(d.row)\" [ariaLabel]=\"'S\u00E9lectionner la ligne ' + (i + 1)\" (changed)=\"selectSingle(d.row, i)\"/>\n }\n }\n </td>\n }\n @if (rowDragEnabled()) {\n <td class=\"col-drag\" [class]=\"'col-drag ' + stickyClass('drag')\" [style.left.px]=\"stickyLeft('drag')\">\n @if (canDragRow(d.row)) {<span class=\"rdh\" cdkDragHandle title=\"D\u00E9placer la ligne\" aria-hidden=\"true\"><cad-icon name=\"drag\" [size]=\"13\"/></span>}\n </td>\n }\n @if (hasExpandColumn()) {\n <td class=\"col-exp\" [class]=\"'col-exp ' + stickyClass('exp')\" [style.left.px]=\"stickyLeft('exp')\">\n @if (canExpand(d.row)) {\n <button type=\"button\" class=\"exp\" [attr.aria-expanded]=\"isExpanded(d.row)\" [attr.aria-label]=\"isExpanded(d.row) ? 'Replier' : 'D\u00E9plier'\" (click)=\"toggleExpand(d.row, $event)\"><cad-icon name=\"chevron-right\" [size]=\"13\"/></button>\n }\n </td>\n }\n @for (c of visibleColumns(); track c.id(); let cFirst = $first) {\n <td [class]=\"tdClass(c) + ' ' + stickyClass(c.id()) + (isTreeColumn(c) ? ' dt-tree-cell' : '') + (cFirst ? ' dt-first' : '') + (editUi.canEditCell(c) ? ' is-editable' : '') + (edit.isEditing(d.row, c) ? ' is-editing' : '')\"\n [style.left.px]=\"stickyLeft(c.id())\" [style.right.px]=\"stickyRight(c.id())\" [attr.data-l]=\"c.header()\"\n (click)=\"editUi.onCellClick(d.row, c, $event, false)\" (dblclick)=\"editUi.onCellClick(d.row, c, $event, true)\">\n @if (edit.isEditing(d.row, c) && c.field()) {\n <!-- \u00E9diteur inline (mode cell ou row) -->\n <div class=\"dt-editor\" [class.is-invalid]=\"!!edit.cellError(d.row, c)\" (click)=\"$event.stopPropagation()\" (dblclick)=\"$event.stopPropagation()\" (keydown)=\"editUi.onKey(d.row, c, $event)\" (focusout)=\"editUi.onBlur(d.row, c)\">\n @if (c.editorTpl()) {\n <ng-container *ngTemplateOutlet=\"c.editorTpl()!.tpl; context: editUi.ctxFor(d.row, c, i)\"/>\n } @else {\n @switch (c.editor()) {\n @case ('select') {\n <select cadEditFocus [attr.aria-label]=\"c.header()\" (change)=\"editUi.onInput(d.row, c, $any($event.target).value)\">\n @for (o of c.effectiveEditorOptions(); track $index) {<option [value]=\"o.value\" [selected]=\"o.value === edit.valueOf(d.row, c)\">{{ o.label }}</option>}\n </select>\n }\n @case ('checkbox') {<input type=\"checkbox\" cadEditFocus [checked]=\"!!edit.valueOf(d.row, c)\" [attr.aria-label]=\"c.header()\" (change)=\"editUi.onInput(d.row, c, $any($event.target).checked)\"/>}\n @case ('textarea') {<textarea cadEditFocus rows=\"3\" [value]=\"edit.valueOf(d.row, c) ?? ''\" [attr.aria-label]=\"c.header()\" (input)=\"editUi.onInput(d.row, c, $any($event.target).value)\"></textarea>}\n @default {<input cadEditFocus [type]=\"editUi.inputType(c)\" [value]=\"edit.valueOf(d.row, c) ?? ''\" [attr.aria-label]=\"c.header()\" [attr.aria-invalid]=\"edit.cellError(d.row, c) ? 'true' : null\" (input)=\"editUi.onInput(d.row, c, $any($event.target).value)\"/>}\n }\n }\n @if (edit.cellError(d.row, c)) {<span class=\"dt-editor__err\" role=\"alert\">{{ edit.cellError(d.row, c) }}</span>}\n </div>\n } @else {\n @if (editUi.canEditCell(c) && showEditIcon()) {<button type=\"button\" class=\"ce\" tabindex=\"-1\" aria-label=\"Modifier\" (click)=\"$event.stopPropagation(); editUi.startEdit(d.row, c)\"><cad-icon name=\"edit\" [size]=\"11\"/></button>}\n @if (isTreeColumn(c) && d.node) {\n <span class=\"cad-tree-toggle\" [style.--_lvl]=\"d.level\">\n @if (showTreeLines()) { @for (l of levelsOf(d.level); track l) {<i class=\"tl\" aria-hidden=\"true\"></i>} }\n @else {<i class=\"ind\" aria-hidden=\"true\"></i>}\n <button type=\"button\" class=\"tg\" [class.is-leaf]=\"!d.node.hasChildren\" [class.is-open]=\"d.node.expanded\" [attr.tabindex]=\"d.node.hasChildren ? 0 : -1\"\n [attr.aria-expanded]=\"d.node.hasChildren ? d.node.expanded : null\" [attr.aria-label]=\"d.node.expanded ? 'Replier' : 'D\u00E9plier'\" (click)=\"toggleNode(d.node, $event)\">\n @if (d.node.loading) {<cad-icon name=\"loader\" [size]=\"12\" spin/>} @else {<cad-icon name=\"chevron-right\" [size]=\"13\"/>}\n </button>\n @if (treeIconOf(d.row)) {<cad-icon class=\"ic\" [name]=\"treeIconOf(d.row)!\" [size]=\"14\"/>}\n </span>\n }\n @if (c.cellTpl()) {\n <ng-container *ngTemplateOutlet=\"c.cellTpl()!.tpl; context: { $implicit: d.row, value: cell(d.row, c), rowIndex: i, column: c, level: d.level, expanded: d.node?.expanded ?? false, hasChildren: d.node?.hasChildren ?? false, node: d.node }\"/>\n } @else {<span class=\"cell-txt\">{{ formatCell(cell(d.row, c), c) }}</span>}\n }\n </td>\n }\n @if (hasActionsColumn()) {\n <td class=\"col-acts\" [class]=\"'col-acts ' + stickyClass('acts')\" [style.right.px]=\"stickyRight('acts')\"><span class=\"acts\" (click)=\"$event.stopPropagation()\">\n @if ((editMode() === 'row' || editMode() === 'row-inline') && showRowEditButton()) {\n @if (isRowEditing(d.row)) {\n <button type=\"button\" class=\"re ok\" aria-label=\"Enregistrer la ligne\" title=\"Enregistrer\" (click)=\"saveRowEdit(d.row)\"><cad-icon name=\"check\" [size]=\"15\"/></button>\n <button type=\"button\" class=\"re ko\" aria-label=\"Annuler l'\u00E9dition\" title=\"Annuler\" (click)=\"cancelRowEdit(d.row)\"><cad-icon name=\"x\" [size]=\"15\"/></button>\n } @else {\n <button type=\"button\" class=\"re\" aria-label=\"Modifier la ligne\" title=\"Modifier\" (click)=\"initRowEdit(d.row)\"><cad-icon name=\"edit\" [size]=\"14\"/></button>\n }\n }\n @if (rowActionsTpl()) {<ng-container *ngTemplateOutlet=\"rowActionsTpl()!.tpl; context: { $implicit: d.row, rowIndex: i, node: d.node, editing: isRowEditing(d.row) }\"/>}\n </span></td>\n }\n </tr>\n @if (isExpanded(d.row) && hasExpandColumn()) {\n <tr class=\"dt-detail\" [style.--_lvl]=\"d.level\"><td [attr.colspan]=\"colspan()\">\n @if (expansionTpl()) {\n <ng-container *ngTemplateOutlet=\"expansionTpl()!.tpl; context: { $implicit: d.row, rowIndex: i, hiddenColumns: hiddenByPriority(), node: d.node }\"/>\n } @else {\n <div class=\"kv\">\n @for (c of hiddenByPriority(); track c.id()) {<div><b>{{ c.header() || c.field() }}</b>\n @if (c.cellTpl()) {<ng-container *ngTemplateOutlet=\"c.cellTpl()!.tpl; context: { $implicit: d.row, value: cell(d.row, c), rowIndex: i, column: c, level: d.level, expanded: false, hasChildren: false, node: d.node }\"/>}\n @else {{{ formatCell(cell(d.row, c), c) }}}\n </div>}\n </div>\n }\n </td></tr>\n }\n }\n }\n @if (virtual.range().bottomPad > 0) {<tr class=\"dt-vpad\" aria-hidden=\"true\"><td [attr.colspan]=\"colspan()\" [style.height.px]=\"virtual.range().bottomPad\"></td></tr>}\n }\n </tbody>\n @if (footerTpl() || showGrandTotalRow()) {\n <tfoot>\n @if (showGrandTotalRow()) {\n <tr class=\"dt-grand\">\n @if (hasNumberColumn()) {<td class=\"col-num\"></td>}\n @if (hasSelectionColumn()) {<td class=\"col-sel\"></td>}\n @if (rowDragEnabled()) {<td class=\"col-drag\"></td>}\n @if (hasExpandColumn()) {<td class=\"col-exp\"></td>}\n @for (c of visibleColumns(); track c.id(); let ci = $index) {\n <td [class]=\"tdClass(c)\" [attr.data-l]=\"c.header()\">\n @if (ci === 0 && !hasAggregate(c)) {{{ grandTotalLabel() }}}\n @else if (hasAggregate(c)) {{{ formatCell(grandTotal()[c.field()], c) }}}\n </td>\n }\n @if (hasActionsColumn()) {<td></td>}\n </tr>\n }\n @if (footerTpl()) {<ng-container *ngTemplateOutlet=\"footerTpl()!.tpl; context: { $implicit: pageData(), columns: visibleColumns(), aggregates: grandTotal() }\"/>}\n </tfoot>\n }\n </table>\n </div>\n\n @if ((usePaginator() && (paginationTotal() > 0 || lazy())) || showRowCount()) {\n <div class=\"dt-foot\" [class.has-count]=\"showRowCount()\">\n @if (showRowCount()) {\n <span class=\"dt-foot__count\">\n @if (rowCountTpl()) {<ng-container *ngTemplateOutlet=\"rowCountTpl()!.tpl; context: { $implicit: totalRows(), total: totalRows(), filtered: totalFiltered(), selected: selectedCount() }\"/>}\n @else {{{ totalRows() }} {{ rowCountLabel() }}@if (totalFiltered() !== totalRows()) { \u00B7 {{ totalFiltered() }} filtr\u00E9e{{ totalFiltered() > 1 ? 's' : '' }}}@if (selectedCount() > 0) { \u00B7 {{ selectedCount() }} s\u00E9lectionn\u00E9e{{ selectedCount() > 1 ? 's' : '' }}}}\n </span>\n }\n @if (usePaginator() && (paginationTotal() > 0 || lazy())) {\n <cad-paginator [first]=\"first()\" [rows]=\"rows()\" [totalRecords]=\"paginationTotal()\" [rowsPerPageOptions]=\"rowsPerPageOptions()\" [pageLinks]=\"resp.stacked() ? 3 : pageLinks()\"\n [showCurrentPageReport]=\"showCurrentPageReport()\" [currentPageReportTemplate]=\"currentPageReportTemplate()\" [showFirstLastIcon]=\"showFirstLastIcon()\"\n [alwaysShow]=\"alwaysShowPaginator()\" (pageChange)=\"onPage($event)\"/>\n }\n </div>\n }\n <cad-menu #hmenu popup [items]=\"menuItems()\" ariaLabel=\"Menu de la colonne\"/>\n <cad-menu #fmenu popup [items]=\"filterMenuItems()\" ariaLabel=\"Op\u00E9rateur de filtre\" [minWidth]=\"200\"/>\n <cad-menu #inmenu popup [closeOnSelect]=\"false\" [items]=\"inMenuItems()\" ariaLabel=\"Valeurs du filtre\" [minWidth]=\"180\"/>\n</div>\n", styles: [":host{--_row-h: var(--cad-table-row-h, 42px);--_cell-px: 12px;display:block;min-width:0;max-width:100%;font:var(--cad-font-size)/1.4 var(--cad-font);color:var(--cad-fg)}:host(.is-dense){--_row-h: 34px}.dt{border:1px solid var(--cad-border);border-radius:var(--cad-radius-lg);background:var(--cad-surface);overflow:hidden;position:relative}:host(.is-borderless) .dt{border:0;border-radius:0}.dt-bar{display:flex;align-items:center;gap:8px;padding:10px 12px;border-bottom:1px solid var(--cad-border);flex-wrap:wrap}.dt-bar__title{font-weight:600;font-size:13.5px;margin-right:4px}.dt-bar__count{font:500 11px var(--cad-font-mono);padding:2px 7px;border-radius:999px;background:var(--cad-elevated);color:var(--cad-fg-secondary)}.dt-bar__grow{flex:1}.dt-bar__search{position:relative;display:flex;align-items:center;width:240px;max-width:100%}.dt-bar__search cad-icon{position:absolute;left:9px;color:var(--cad-fg-muted);pointer-events:none}.dt-bar__search input{width:100%;box-sizing:border-box;height:30px;padding:0 28px 0 30px;font:var(--cad-font-size) var(--cad-font);color:var(--cad-fg);background:var(--cad-input-bg);border:1px solid var(--cad-input-border);border-radius:var(--cad-radius);outline:0;transition:border-color var(--cad-dur),box-shadow var(--cad-dur)}.dt-bar__search input::placeholder{color:var(--cad-fg-muted)}.dt-bar__search input:focus{border-color:var(--cad-accent);box-shadow:0 0 0 3px var(--cad-ring)}.dt-bar__search .dt-bar__clear{position:absolute;right:6px;border:0;background:transparent;color:var(--cad-fg-muted);cursor:pointer;display:grid;place-items:center;padding:2px;border-radius:4px}.dt-bar__search .dt-bar__clear:hover{color:var(--cad-fg);background:var(--cad-hover)}.dt-bar__btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:26px;padding:0 8px;border-radius:var(--cad-radius-sm);border:1px solid var(--cad-border-strong);background:transparent;color:var(--cad-fg-secondary);font:500 var(--cad-font-size-sm) var(--cad-font);cursor:pointer;white-space:nowrap}.dt-bar__btn:hover{background:var(--cad-hover);color:var(--cad-fg)}.dt-bar__btn:focus-visible{outline:2px solid var(--cad-ring);outline-offset:1px}.dt-bar__btn.is-ghost{border-color:transparent;width:26px;padding:0}.dt-bar__btn.is-on{color:var(--cad-accent);background:var(--cad-accent-soft)}.dt-bar__cols{position:relative}.dt-bar__menu{position:absolute;right:0;top:calc(100% + 6px);z-index:20;min-width:200px;max-height:280px;overflow:auto;background:var(--cad-overlay);border:1px solid var(--cad-border);border-radius:9px;box-shadow:var(--cad-shadow-lg);padding:4px}.dt-bar__menu label{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:6px;cursor:pointer;font-size:var(--cad-font-size)}.dt-bar__menu label:hover{background:var(--cad-hover)}.dt-bar__menu label.is-locked{opacity:.5;cursor:default}.dt-bar__menu-title{font:600 10px/1 var(--cad-font-mono);letter-spacing:.1em;text-transform:uppercase;color:var(--cad-fg-muted);padding:6px 8px 4px}.dt-sel{display:flex;align-items:center;gap:8px;padding:8px 12px;background:var(--cad-accent-soft);border-bottom:1px solid var(--cad-border);font-size:12.5px;color:var(--cad-accent);font-weight:500;min-height:47px;box-sizing:border-box}.dt-sel__grow{flex:1}.dt-sel__clear{border:0;background:transparent;color:inherit;cursor:pointer;display:grid;place-items:center;width:26px;height:26px;border-radius:6px}.dt-sel__clear:hover{background:var(--cad-accent-soft)}.dt-scroll{overflow:auto;position:relative}:host(.has-scroll-height) .dt-scroll{max-height:var(--_scroll-h);scrollbar-width:thin;scrollbar-color:var(--cad-border-strong) transparent;scrollbar-gutter:stable}:host(.has-scroll-height) .dt-scroll::-webkit-scrollbar{width:10px;height:10px}:host(.has-scroll-height) .dt-scroll::-webkit-scrollbar-thumb{background:var(--cad-border-strong);border-radius:999px;border:2px solid var(--cad-surface)}:host(.has-scroll-height) .dt-scroll::-webkit-scrollbar-thumb:hover{background:var(--cad-fg-muted)}:host(.has-scroll-height) .dt-scroll::-webkit-scrollbar-track{background:transparent}.dt-loading{position:absolute;inset:0;display:grid;place-items:center;background:color-mix(in srgb,var(--cad-surface) 55%,transparent);z-index:5}.dt-loading cad-icon{color:var(--cad-accent)}.tbl{width:100%;border-collapse:separate;border-spacing:0;font-size:var(--cad-font-size)}:host(.is-resizable) .tbl{table-layout:fixed}.tbl caption{text-align:left;padding:10px 12px;font-weight:600;color:var(--cad-fg-secondary);font-size:var(--cad-font-size-sm)}.tbl th{position:relative;text-align:left;font-weight:600;font-size:var(--cad-font-size-sm);color:var(--cad-fg-secondary);background:var(--cad-bg-subtle);padding:0 var(--_cell-px);height:38px;border-bottom:1px solid var(--cad-border);white-space:nowrap;-webkit-user-select:none;user-select:none;box-sizing:border-box}:host(.is-sticky-header) .tbl thead th{position:sticky;top:0;z-index:3}.tbl th.al-right{text-align:right}.tbl th.al-center{text-align:center}.tbl th.st-left,.tbl td.st-left{position:sticky;left:0;z-index:2;background:var(--cad-surface)}.tbl th.st-right,.tbl td.st-right{position:sticky;right:0;z-index:2;background:var(--cad-surface)}.tbl th.st-left,.tbl th.st-right{background:var(--cad-bg-subtle);z-index:4}.tbl th .hd{display:inline-flex;align-items:center;gap:4px;max-width:100%}.tbl th.al-right .hd{flex-direction:row-reverse}.tbl th .hd-txt{overflow:hidden;text-overflow:ellipsis}.tbl th button.hd{all:unset;display:inline-flex;align-items:center;gap:4px;cursor:pointer;border-radius:4px;max-width:100%}.tbl th button.hd:focus-visible{outline:2px solid var(--cad-ring);outline-offset:2px}.tbl th .hd cad-icon{opacity:0;transition:opacity var(--cad-dur);flex:none}.tbl th:hover .hd cad-icon{opacity:.6}.tbl th.is-sorted .hd{color:var(--cad-accent)}.tbl th.is-sorted .hd cad-icon{opacity:1}.tbl th .hd-idx{font:600 9px var(--cad-font-mono);background:var(--cad-accent-soft);color:var(--cad-accent);border-radius:999px;padding:1px 4px}.tbl th .rz{position:absolute;right:0;top:8px;bottom:8px;width:5px;cursor:col-resize;z-index:1}.tbl th .rz:after{content:\"\";position:absolute;right:2px;top:0;bottom:0;width:1px;background:var(--cad-border);transition:background var(--cad-dur)}.tbl th .rz:hover:after,.tbl th .rz.is-active:after{background:var(--cad-accent);width:2px}.tbl th.col-sel,.tbl td.col-sel{width:36px;padding-right:0}.tbl th.col-exp,.tbl td.col-exp{width:30px;padding:0 4px}.tbl th.col-acts,.tbl td.col-acts{text-align:right;white-space:nowrap}.tbl tr.flt th{height:auto;padding:6px var(--_cell-px);background:var(--cad-surface);font-weight:400}.tbl tr.flt input,.tbl tr.flt select{width:100%;box-sizing:border-box;height:26px;padding:0 8px;font:var(--cad-font-size-sm) var(--cad-font);color:var(--cad-fg);background:var(--cad-input-bg);border:1px solid var(--cad-input-border);border-radius:var(--cad-radius-sm);outline:0}.tbl tr.flt input:focus,.tbl tr.flt select:focus{border-color:var(--cad-accent);box-shadow:0 0 0 2px var(--cad-ring)}.tbl td{padding:0 var(--_cell-px);height:var(--_row-h);border-bottom:1px solid var(--cad-border);vertical-align:middle;font-variant-numeric:tabular-nums;box-sizing:border-box}.tbl td.al-right{text-align:right}.tbl td.al-center{text-align:center}.tbl td.dt-num{font-family:var(--cad-font-mono);font-size:var(--cad-font-size-sm)}.tbl td.is-nowrap{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host(.is-bordered) .tbl td,:host(.is-bordered) .tbl th{border-right:1px solid var(--cad-border)}:host(.is-bordered) .tbl td:last-child,:host(.is-bordered) .tbl th:last-child{border-right:0}.tbl tbody tr:last-child td{border-bottom:0}:host(.is-striped) .tbl tbody tr.dt-row:nth-child(2n of.dt-row) td{background:var(--cad-table-stripe, var(--cad-bg-subtle))}:host(.is-hoverable) .tbl tbody tr.dt-row:hover td{background:var(--cad-hover)}.tbl tbody tr.dt-row.is-selectable{cursor:pointer}.tbl tbody tr.dt-row:focus-visible{outline:none}.tbl tbody tr.dt-row:focus-visible td{background:var(--cad-hover);box-shadow:inset 0 0 0 1px var(--cad-ring)}.tbl tbody tr.dt-row.is-selected td{background:var(--cad-accent-soft)}.tbl tbody tr.dt-row.is-selected td:first-child{box-shadow:inset 3px 0 0 var(--cad-accent)}.tbl tbody tr.dt-row.is-selected:focus-visible td{box-shadow:inset 0 0 0 1px var(--cad-ring)}.tbl tbody tr.dt-row.is-selected:focus-visible td:first-child{box-shadow:inset 3px 0 0 var(--cad-accent),inset 0 0 0 1px var(--cad-ring)}.tbl .exp{width:22px;height:22px;border:0;border-radius:5px;background:transparent;color:var(--cad-fg-muted);display:inline-grid;place-items:center;cursor:pointer;padding:0}.tbl .exp:hover{background:var(--cad-elevated);color:var(--cad-fg)}.tbl .exp:focus-visible{outline:2px solid var(--cad-ring)}.tbl .exp cad-icon{transition:transform var(--cad-dur)}.tbl tr.is-expanded .exp cad-icon{transform:rotate(90deg)}.tbl .acts{display:inline-flex;gap:2px;align-items:center;opacity:0;transition:opacity var(--cad-dur)}.tbl tr:hover .acts,.tbl tr.is-selected .acts,.tbl tr:focus-within .acts{opacity:1}:host(.acts-always) .tbl .acts{opacity:1}.tbl tr.dt-detail td{background:var(--cad-bg-subtle);height:auto;padding:12px var(--_cell-px) 14px var(--_detail-pl, 58px)}:host(.is-hoverable) .tbl tr.dt-detail:hover td{background:var(--cad-bg-subtle)}.tbl tfoot td{background:var(--cad-bg-subtle);font-weight:600;color:var(--cad-fg-secondary);border-top:1px solid var(--cad-border);border-bottom:0}.kv{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:10px 22px;font-size:12.5px}.kv b{display:block;font:600 10.5px/1 var(--cad-font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--cad-fg-muted);margin-bottom:4px}.skel{height:12px;border-radius:4px;background:linear-gradient(90deg,var(--cad-elevated),var(--cad-hover),var(--cad-elevated));background-size:200% 100%;animation:cad-tbl-sh 1.4s infinite}@keyframes cad-tbl-sh{to{background-position:-200% 0}}@media(prefers-reduced-motion:reduce){.skel{animation:none}.tbl .acts,.tbl .exp cad-icon,.tbl th .hd cad-icon{transition:none}}.empty{display:grid;place-items:center;gap:6px;padding:34px 12px;text-align:center;color:var(--cad-fg-secondary);font-size:12.5px}.empty cad-icon{color:var(--cad-fg-muted)}.empty b{color:var(--cad-fg);font-size:var(--cad-font-size)}.dt-foot{display:flex;align-items:center;gap:14px;padding:8px 12px;border-top:1px solid var(--cad-border)}.dt-foot cad-paginator{flex:1}\n", ".tbl th.st-left,.tbl td.st-left,.tbl th.st-right,.tbl td.st-right{position:sticky;z-index:2;background:var(--cad-surface);background-clip:padding-box}.tbl thead th.st-left,.tbl thead th.st-right{z-index:4;background:var(--cad-bg-subtle)}:host(.is-sticky-header) .tbl thead th.st-left,:host(.is-sticky-header) .tbl thead th.st-right{z-index:5}:host(.is-striped) .tbl tbody tr.dt-row:nth-child(2n of.dt-row) td.st-left,:host(.is-striped) .tbl tbody tr.dt-row:nth-child(2n of.dt-row) td.st-right{background:var(--cad-table-stripe, var(--cad-bg-subtle))}:host(.is-hoverable) .tbl tbody tr.dt-row:hover td.st-left,:host(.is-hoverable) .tbl tbody tr.dt-row:hover td.st-right{background:var(--cad-hover)}.tbl tbody tr.dt-row.is-selected td.st-left,.tbl tbody tr.dt-row.is-selected td.st-right{background:color-mix(in srgb,var(--cad-accent) 12%,var(--cad-surface))}.tbl td.st-last-left,.tbl th.st-last-left{transition:box-shadow var(--cad-dur)}:host(.is-scrolled-x) .tbl td.st-last-left,:host(.is-scrolled-x) .tbl th.st-last-left{box-shadow:1px 0 0 var(--cad-border),6px 0 12px -6px #0000002e}:host(:not(.is-scrolled-x-end)) .tbl td.st-first-right,:host(:not(.is-scrolled-x-end)) .tbl th.st-first-right{box-shadow:-1px 0 0 var(--cad-border),-6px 0 12px -6px #0000002e}.tbl td.st-right.col-acts .acts{background:inherit}.tbl td.dt-tree-cell{white-space:nowrap}.tbl td.dt-tree-cell .cell-txt{white-space:normal}.cad-tree-toggle{display:inline-flex;align-items:center;vertical-align:middle;margin-right:4px}.cad-tree-toggle .ind{display:inline-block;width:calc(var(--_lvl, 0) * var(--_indent, 20px));flex:none}.cad-tree-toggle .tl{display:inline-block;width:var(--_indent, 20px);align-self:stretch;flex:none;position:relative}:host(.has-tree-lines) .tbl td.dt-tree-cell{padding-top:0;padding-bottom:0}:host(.has-tree-lines) .cad-tree-toggle{align-self:stretch;height:var(--_row-h)}:host(.has-tree-lines) .cad-tree-toggle .tl:before{content:\"\";position:absolute;left:9px;top:0;bottom:0;border-left:1px solid var(--cad-border)}.cad-tree-toggle .tg{width:20px;height:20px;border:0;border-radius:5px;background:transparent;color:var(--cad-fg-muted);display:inline-grid;place-items:center;cursor:pointer;padding:0;flex:none}.cad-tree-toggle .tg:hover{background:var(--cad-elevated);color:var(--cad-fg)}.cad-tree-toggle .tg:focus-visible{outline:2px solid var(--cad-ring)}.cad-tree-toggle .tg cad-icon{transition:transform var(--cad-dur)}.cad-tree-toggle .tg.is-open cad-icon{transform:rotate(90deg)}.cad-tree-toggle .tg.is-leaf{visibility:hidden;pointer-events:none}.cad-tree-toggle .ic{color:var(--cad-fg-muted);margin:0 6px 0 2px}.tbl tr.dt-row.lvl-0.has-children td.dt-tree-cell{font-weight:500}.tbl tr.dt-group td{background:var(--cad-bg-subtle);height:34px;padding:0 var(--_cell-px);border-bottom:1px solid var(--cad-border)}.dt-group__inner{display:flex;align-items:center;gap:6px;padding-left:calc(var(--_lvl, 0) * var(--_indent, 20px));font-weight:600;font-size:var(--cad-font-size-sm)}.dt-group__inner .exp{width:22px;height:22px;border:0;border-radius:5px;background:transparent;color:var(--cad-fg-muted);display:inline-grid;place-items:center;cursor:pointer;padding:0}.dt-group__inner .exp:hover{background:var(--cad-elevated);color:var(--cad-fg)}.dt-group__inner .exp cad-icon{transition:transform var(--cad-dur)}.tbl tr.dt-group.is-expanded .dt-group__inner .exp cad-icon{transform:rotate(90deg)}.dt-group__count{font:500 10.5px var(--cad-font-mono);padding:1px 6px;border-radius:999px;background:var(--cad-elevated);color:var(--cad-fg-secondary)}.tbl tr.dt-group-foot td{background:var(--cad-bg-subtle);height:32px;color:var(--cad-fg-secondary);font-size:var(--cad-font-size-sm);border-bottom:1px solid var(--cad-border)}.tbl tr.dt-group-foot td.dt-num,.tbl tr.dt-grand td.dt-num{font-family:var(--cad-font-mono);font-weight:600}.dt-group-foot__label{padding-left:calc(var(--_lvl, 0) * var(--_indent, 20px) + 26px);font-weight:500}.tbl tfoot tr.dt-grand td{background:var(--cad-bg-subtle);font-weight:600;color:var(--cad-fg);border-top:2px solid var(--cad-border);height:36px}:host(.is-hoverable) .tbl tr.dt-group:hover td,:host(.is-hoverable) .tbl tr.dt-group-foot:hover td{background:var(--cad-bg-subtle)}.tbl tr.dt-detail td{padding-left:calc(var(--_detail-pl, 58px) + var(--_lvl, 0) * var(--_indent, 20px))}.dt-bar__tools,.dt-bar__tools-end{display:contents}.dt-bar__filters{display:inline-flex}.dt-bar__filters .dt-bar__count{padding:1px 6px;font-size:10px}:host(.is-stacked) .dt-bar{gap:8px}:host(.is-stacked) .dt-bar__tools{display:none}:host(.is-stacked) .dt-bar__tools.is-open{display:flex;flex-wrap:wrap;align-items:center;gap:8px;flex-basis:100%;order:10;padding-top:8px;border-top:1px dashed var(--cad-border)}:host(.is-stacked) .dt-bar__grow{display:none}:host(.is-stacked) .dt-bar__search{order:5;flex-basis:100%;width:100%}:host(.is-stacked) .dt-bar__cols,:host(.is-stacked) .dt-bar__density{display:none}:host(.is-stacked) .dt-sel{position:sticky;bottom:0;z-index:6;flex-wrap:wrap;border-top:1px solid var(--cad-border);order:99}:host(.is-stacked) .dt-scroll{overflow-x:hidden}:host(.is-stacked) .tbl,:host(.is-stacked) .tbl tbody,:host(.is-stacked) .tbl tfoot,:host(.is-stacked) .tbl tr,:host(.is-stacked) .tbl td{display:block}:host(.is-stacked) .tbl thead,:host(.is-stacked) .tbl colgroup,:host(.is-stacked) .tbl caption{display:none}:host(.is-stacked) .tbl tr.dt-row{position:relative;padding:10px 12px;border-bottom:1px solid var(--cad-border);height:auto}:host(.is-stacked) .tbl tr.dt-row.has-sel{padding-left:44px}:host(.is-stacked) .tbl tr.dt-row.is-selected{background:var(--cad-accent-soft);box-shadow:inset 3px 0 0 var(--cad-accent)}:host(.is-hoverable.is-stacked) .tbl tr.dt-row:hover{background:var(--cad-hover)}:host(.is-hoverable.is-stacked) .tbl tr.dt-row:hover td,:host(.is-stacked) .tbl tr.dt-row.is-selected td,:host(.is-striped.is-stacked) .tbl tr.dt-row td{background:transparent!important;box-shadow:none!important}:host(.is-stacked) .tbl tr.dt-row:focus-visible{box-shadow:inset 0 0 0 1px var(--cad-ring)}:host(.is-stacked) .tbl td{height:auto;padding:2px 0;border:0;white-space:normal;display:flex;justify-content:space-between;align-items:baseline;gap:12px;font-size:12.5px;position:static}:host(.is-stacked) .tbl td.st-left,:host(.is-stacked) .tbl td.st-right{position:static}:host(.is-stacked) .tbl td[data-l]:before{content:attr(data-l);color:var(--cad-fg-muted);font-size:11px;font-weight:500;text-transform:uppercase;letter-spacing:.04em;flex:none}:host(.is-stacked) .tbl td.col-sel{position:absolute;left:12px;top:12px;padding:0;width:auto}:host(.is-stacked) .tbl td.col-sel:before,:host(.is-stacked) .tbl td.col-exp:before,:host(.is-stacked) .tbl td.col-acts:before,:host(.is-stacked) .tbl td.dt-tree-cell:before,:host(.is-stacked) .tbl td.dt-first:before{content:none}:host(.is-stacked) .tbl td.col-exp{position:absolute;right:44px;top:8px;padding:0;width:auto}:host(.is-stacked) .tbl td.dt-first,:host(.is-stacked) .tbl td.dt-tree-cell{display:block;font-size:14px;font-weight:500;padding:0 44px 6px 0}:host(.is-stacked) .tbl td.dt-tree-cell .cad-tree-toggle .ind,:host(.is-stacked) .tbl td.dt-tree-cell .cad-tree-toggle .tl{display:none}:host(.is-stacked) .tbl td.col-acts{position:absolute;right:8px;top:8px;padding:0;width:auto}:host(.is-stacked) .tbl .acts{opacity:1}:host(.is-stacked) .tbl td.dt-num{text-align:right}:host(.is-stacked) .tbl tr.dt-detail td{padding:8px 12px 10px}:host(.is-stacked) .tbl tr.dt-row.lvl-1{margin-left:22px;border-left:2px solid var(--cad-border)}:host(.is-stacked) .tbl tr.dt-row.lvl-2{margin-left:44px;border-left:2px solid var(--cad-border)}:host(.is-stacked) .tbl tr.dt-row.lvl-3{margin-left:66px;border-left:2px solid var(--cad-border)}:host(.is-stacked) .tbl tr.dt-group td{padding:8px 12px;height:auto;display:block}:host(.is-stacked) .tbl tr.dt-group-foot{display:flex;flex-wrap:wrap;gap:4px 14px;padding:6px 12px 6px 44px}:host(.is-stacked) .tbl tr.dt-group-foot td{padding:0}:host(.is-stacked) .tbl tr.dt-group-foot td:empty{display:none}:host(.is-stacked) .tbl tfoot tr.dt-grand{padding:8px 12px}:host(.is-stacked) .tbl tfoot tr.dt-grand td:empty{display:none}:host(.is-stacked) .tbl tr.dt-empty td{display:block}:host(.is-stacked) .tbl tr.is-skeleton td{display:block;padding:4px 0}:host(.is-stacked) .tbl tr.dt-card td{padding:0;display:block}:host(.is-stacked) .dt-foot{flex-wrap:wrap;gap:8px}:host(.is-stacked) .dt-foot ::ng-deep .cad-paginator__rpp{display:none}\n", ".tbl th .dh{display:none;position:absolute;left:2px;top:50%;transform:translateY(-50%);width:14px;height:18px;color:var(--cad-fg-muted);cursor:grab;border-radius:3px;place-items:center}.tbl th .dh:hover{color:var(--cad-fg);background:var(--cad-elevated)}:host(.is-reorderable) .tbl th.can-drag{padding-left:calc(var(--_cell-px) + 6px)}:host(.is-reorderable) .tbl th.can-drag:hover .dh,:host(.is-reorderable) .tbl th.can-drag.cdk-drag-dragging .dh{display:grid}.tbl th.cdk-drag-placeholder{opacity:.35;background:var(--cad-accent-soft)}.tbl th.cdk-drag-placeholder:before{content:\"\";position:absolute;left:-1px;top:4px;bottom:4px;width:2px;background:var(--cad-accent)}.cdk-drag-preview.dt-th-preview{display:flex;align-items:center;height:38px;padding:0 12px;box-sizing:border-box;font:600 var(--cad-font-size-sm) var(--cad-font);color:var(--cad-fg);background:var(--cad-overlay);border:1px solid var(--cad-border);border-radius:6px;box-shadow:var(--cad-shadow-lg);list-style:none}.tbl thead tr.cdk-drop-list-dragging th:not(.cdk-drag-placeholder){transition:transform .2s cubic-bezier(0,0,.2,1)}.tbl th.cdk-drag-animating{transition:transform .2s cubic-bezier(0,0,.2,1)}.dt-bar__menu .mv{display:inline-flex;gap:0;margin-left:auto}.dt-bar__menu .mv button{border:0;background:transparent;color:var(--cad-fg-muted);width:20px;height:20px;border-radius:4px;cursor:pointer;display:grid;place-items:center;padding:0}.dt-bar__menu .mv button:hover:not([disabled]){background:var(--cad-hover);color:var(--cad-fg)}.dt-bar__menu .mv button[disabled]{opacity:.3;cursor:default}.tbl tr.hg th{height:30px;text-align:center;font:600 10.5px/1 var(--cad-font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--cad-fg-muted);border-bottom:1px solid var(--cad-border)}.tbl tr.hg th.hg-cell{border-left:1px solid var(--cad-border)}.tbl tr.hg th.hg-cell:first-child{border-left:0}:host(.is-sticky-header) .tbl tr.hg th{position:sticky;top:0;z-index:3}:host(.is-sticky-header) .tbl tr.hg+tr th{top:30px}.tbl tr.dt-vpad td{padding:0;border:0;height:auto}:host(.is-virtual) .dt-scroll{overflow-anchor:none}:host(.edit-cell) .tbl td.is-editable{cursor:text;position:relative}:host(.edit-cell.is-hoverable) .tbl tbody tr.dt-row td.is-editable:hover{background:var(--cad-hover);box-shadow:inset 0 0 0 1px var(--cad-border-strong)}:host(.show-edit-icon) .tbl td.is-editable{padding-right:calc(var(--_cell-px) + 16px)}.tbl td .ce{position:absolute;right:4px;top:50%;transform:translateY(-50%);width:20px;height:20px;border:0;border-radius:5px;background:transparent;color:var(--cad-fg-muted);display:grid;place-items:center;cursor:pointer;padding:0;opacity:0;transition:opacity var(--cad-dur),background var(--cad-dur)}.tbl td.is-editable:hover .ce,.tbl td .ce:focus-visible{opacity:.7}.tbl td .ce:hover{opacity:1!important;background:var(--cad-elevated);color:var(--cad-fg)}.tbl td.is-editing{padding-top:0;padding-bottom:0;background:var(--cad-surface)!important;box-shadow:none!important}.dt-editor{position:relative;display:flex;align-items:stretch;min-height:calc(var(--_row-h) - 8px);margin:4px 0}.tbl td.is-editing{height:auto;vertical-align:top}.dt-editor input,.dt-editor select,.dt-editor textarea{width:100%;height:calc(var(--_row-h) - 8px);box-sizing:border-box;padding:0 8px;font:var(--cad-font-size) var(--cad-font);color:var(--cad-fg);background:var(--cad-input-bg);border:1px solid var(--cad-accent);border-radius:var(--cad-radius-sm);outline:0;box-shadow:0 0 0 3px var(--cad-ring)}.dt-editor input[type=number]{font-family:var(--cad-font-mono);text-align:right}.dt-editor textarea{height:auto;min-height:76px;padding:6px 8px;resize:vertical;line-height:1.45;font:var(--cad-font-size)/1.45 var(--cad-font)}.dt-editor input[type=checkbox]{width:16px;height:16px;box-shadow:none;accent-color:var(--cad-accent)}.dt-editor.is-invalid input,.dt-editor.is-invalid select,.dt-editor.is-invalid textarea{border-color:var(--cad-danger);box-shadow:0 0 0 3px var(--cad-danger-soft)}.dt-editor__err{position:absolute;left:0;top:calc(100% + 4px);z-index:6;padding:3px 8px;border-radius:6px;background:var(--cad-danger);color:#fff;font-size:11px;white-space:nowrap;box-shadow:var(--cad-shadow-md);pointer-events:none}.dt-editor__err:before{content:\"\";position:absolute;left:10px;top:-4px;width:8px;height:8px;background:inherit;transform:rotate(45deg)}:host(.edit-row) .tbl tr.dt-row.is-editing-row td{background:var(--cad-accent-soft)}.tbl .acts .re{display:inline-grid;place-items:center;width:26px;height:26px;border:0;border-radius:6px;background:transparent;color:var(--cad-fg-secondary);cursor:pointer;padding:0}.tbl .acts .re:hover{background:var(--cad-hover);color:var(--cad-fg)}.tbl .acts .re.ok{color:var(--cad-success)}.tbl .acts .re.ko{color:var(--cad-danger)}.tbl .acts .re:focus-visible{outline:2px solid var(--cad-ring)}:host(.edit-row) .tbl tr.is-editing-row .acts{opacity:1}\n", ".dt-scroll{scrollbar-width:thin;scrollbar-color:var(--cad-border-strong) transparent}.dt-scroll::-webkit-scrollbar{height:10px;width:10px}.dt-scroll::-webkit-scrollbar-thumb{background:var(--cad-border-strong);border-radius:999px;border:2px solid var(--cad-surface)}.dt-scroll::-webkit-scrollbar-thumb:hover{background:var(--cad-fg-muted)}.dt-scroll::-webkit-scrollbar-track{background:transparent}.tbl th.has-menu{padding-right:calc(var(--_cell-px) + 20px)}.tbl th .hm{position:absolute;right:6px;top:50%;transform:translateY(-50%);width:22px;height:22px;border:0;border-radius:5px;background:transparent;color:var(--cad-fg-muted);display:grid;place-items:center;cursor:pointer;padding:0;opacity:0;transition:opacity var(--cad-dur),background var(--cad-dur);z-index:2}.tbl th:hover .hm,.tbl th .hm:focus-visible,.tbl th .hm.is-on,.tbl th.is-sorted .hm,.tbl th.is-filtered .hm{opacity:1}.tbl th .hm:hover,.tbl th .hm.is-on{background:var(--cad-elevated);color:var(--cad-fg)}.tbl th.is-filtered .hd-txt{color:var(--cad-accent)}:host(.is-resizable) .tbl th.has-menu .hm{right:10px}.tbl tr.flt th{padding:5px 6px}.flt-cell{position:relative;display:flex;align-items:center;gap:4px;min-width:0}.flt-cell input,.flt-cell select,.flt-cell .flt-in{flex:1 1 0;min-width:0;height:28px;padding:0 26px 0 8px;box-sizing:border-box;font:var(--cad-font-size-sm) var(--cad-font);color:var(--cad-fg);background:var(--cad-input-bg);border:1px solid var(--cad-input-border);border-radius:var(--cad-radius-sm);outline:0;transition:border-color var(--cad-dur),box-shadow var(--cad-dur)}.flt-cell.is-range input{padding-right:8px}.flt-cell.is-range input:last-of-type{padding-right:26px}.flt-cell input:focus,.flt-cell select:focus,.flt-cell .flt-in:focus-visible{border-color:var(--cad-accent);box-shadow:0 0 0 2px var(--cad-ring)}.flt-cell.is-active input,.flt-cell.is-active select,.flt-cell.is-active .flt-in{border-color:var(--cad-accent);background:var(--cad-accent-soft)}.flt-cell .flt-in{display:inline-flex;align-items:center;justify-content:space-between;gap:6px;text-align:left;cursor:pointer}.flt-cell .flt-in.is-ph{color:var(--cad-fg-muted)}.flt-cell .flt-in cad-icon{color:var(--cad-fg-muted);flex:none}.flt-cell .flt-txt{flex:1;height:28px;display:inline-flex;align-items:center;padding:0 26px 0 8px;font:italic var(--cad-font-size-sm) var(--cad-font);color:var(--cad-accent);background:var(--cad-accent-soft);border:1px solid var(--cad-accent);border-radius:var(--cad-radius-sm);box-sizing:border-box}.flt-cell .flt-op{position:absolute;right:4px;top:50%;transform:translateY(-50%);width:20px;height:20px;border:0;border-radius:4px;background:transparent;color:var(--cad-fg-muted);display:grid;place-items:center;cursor:pointer;padding:0}.flt-cell .flt-op:hover,.flt-cell .flt-op.is-on{color:var(--cad-accent);background:var(--cad-accent-soft)}.flt-cell.is-active .flt-op{right:22px}.flt-cell .flt-x{position:absolute;right:4px;top:50%;transform:translateY(-50%);width:18px;height:18px;border:0;border-radius:4px;background:transparent;color:var(--cad-fg-muted);display:grid;place-items:center;cursor:pointer;padding:0}.flt-cell .flt-x:hover{color:var(--cad-danger);background:var(--cad-danger-soft)}.flt-cell select{appearance:none;padding-right:26px}.dt-gz{display:flex;align-items:center;flex-wrap:wrap;gap:6px;min-height:40px;padding:6px 12px;border-bottom:1px solid var(--cad-border);background:var(--cad-bg-subtle);color:var(--cad-fg-muted);font-size:var(--cad-font-size-sm)}.dt-gz.cdk-drop-list-receiving,.dt-gz.cdk-drop-list-dragging{background:var(--cad-accent-soft);color:var(--cad-accent);outline:1px dashed var(--cad-accent);outline-offset:-4px}.dt-gz__hint{font-style:italic}.dt-gz__chip{display:inline-flex;align-items:center;gap:5px;height:26px;padding:0 4px 0 6px;border-radius:999px;background:var(--cad-accent-soft);color:var(--cad-accent);font-weight:500;cursor:grab}.dt-gz__chip .dt-gz__drag{opacity:.6}.dt-gz__chip button{width:18px;height:18px;border:0;border-radius:50%;background:transparent;color:inherit;display:grid;place-items:center;cursor:pointer;padding:0}.dt-gz__chip button:hover{background:var(--cad-accent);color:var(--cad-fg-on-accent)}.dt-gz__chip.cdk-drag-placeholder{opacity:.35}.cdk-drag-preview.dt-gz__chip{box-shadow:var(--cad-shadow-md)}:host(.is-stacked) .dt-gz{display:none}.tbl th.col-num,.tbl td.col-num{width:44px;text-align:right;font:11px var(--cad-font-mono);color:var(--cad-fg-muted);background:var(--cad-bg-subtle);padding:0 8px;-webkit-user-select:none;user-select:none}.tbl th.col-num{font-weight:600}.tbl tbody tr:hover td.col-num{background:var(--cad-bg-subtle)}:host(.is-stacked) .tbl td.col-num{position:absolute;left:auto;right:12px;bottom:6px;width:auto;background:transparent;padding:0}:host(.is-stacked) .tbl td.col-num:before{content:none}.tbl th.col-drag,.tbl td.col-drag{width:28px;padding:0 4px}.tbl td.col-drag .rdh{display:inline-grid;place-items:center;width:20px;height:24px;color:var(--cad-fg-muted);cursor:grab;opacity:0;transition:opacity var(--cad-dur);border-radius:4px}.tbl tbody tr:hover td.col-drag .rdh,.tbl tr.cdk-drag-dragging td.col-drag .rdh{opacity:.8}.tbl td.col-drag .rdh:hover{color:var(--cad-fg);background:var(--cad-elevated)}.tbl tr.dt-row.cdk-drag-placeholder{opacity:0}.tbl tbody.cdk-drop-list-dragging tr.dt-row:not(.cdk-drag-placeholder){transition:transform .2s cubic-bezier(0,0,.2,1)}.tbl tr.dt-row.cdk-drag-placeholder td{border-top:2px solid var(--cad-accent)}.cdk-drag-preview.dt-tr-preview{display:table;table-layout:fixed;box-sizing:border-box;background:var(--cad-overlay);border:1px solid var(--cad-border);border-radius:8px;box-shadow:var(--cad-shadow-lg);opacity:.95;font:var(--cad-font-size)/1.4 var(--cad-font);color:var(--cad-fg)}.cdk-drag-preview.dt-tr-preview td{padding:0 12px;height:42px;vertical-align:middle;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host(.is-stacked) .tbl td.col-drag{display:none}.dt-foot__count{font:var(--cad-font-size-sm) var(--cad-font-mono);color:var(--cad-fg-secondary);white-space:nowrap}.dt-foot.has-count cad-paginator{flex:1}\n"] }]
10820
+ }, template: "<div class=\"dt\" #dt [class]=\"'dt ' + styleClass()\">\n <!-- barre de s\u00E9lection contextuelle (remplace la barre d'outils) -->\n @if (selectedCount() > 0 && showSelectionBar()) {\n <div class=\"dt-sel\" role=\"region\" aria-live=\"polite\">\n <cad-checkbox [value]=\"allState() === 'all'\" [indeterminate]=\"allState() === 'some'\" ariaLabel=\"Tout s\u00E9lectionner\" (changed)=\"toggleAll()\"/>\n <span>{{ selectedCount() }} {{ selectedCount() > 1 ? selectedLabelPlural() : selectedLabel() }}</span>\n <span class=\"dt-sel__grow\"></span>\n <ng-content select=\"[cadTableSelectionBar]\"/>\n <button type=\"button\" class=\"dt-sel__clear\" aria-label=\"Annuler la s\u00E9lection\" (click)=\"clearSelection()\"><cad-icon name=\"x\" [size]=\"14\"/></button>\n </div>\n } @else if (showToolbar()) {\n <div class=\"dt-bar\">\n @if (title()) {<span class=\"dt-bar__title\">{{ title() }}</span>}\n @if (showCount()) {<span class=\"dt-bar__count\">{{ count() ?? totalFiltered() }}</span>}\n @if (resp.stacked()) {\n <button type=\"button\" class=\"dt-bar__btn dt-bar__filters\" [class.is-on]=\"filtersOpen()\" [attr.aria-expanded]=\"filtersOpen()\" (click)=\"filtersOpen.set(!filtersOpen())\">\n <cad-icon name=\"filter\" [size]=\"13\"/>{{ filtersLabel() }}@if (activeFilterCount() > 0) {<span class=\"dt-bar__count\">{{ activeFilterCount() }}</span>}\n </button>\n }\n <span class=\"dt-bar__tools\" [class.is-open]=\"filtersOpen()\"><ng-content select=\"[cadTableToolbar]\"/></span>\n <span class=\"dt-bar__grow\"></span>\n @if (showSearch()) {\n <div class=\"dt-bar__search\">\n <cad-icon name=\"search\" [size]=\"14\"/>\n <input type=\"search\" [placeholder]=\"searchPlaceholder()\" [value]=\"searchText()\" (input)=\"onSearch($any($event.target).value)\" [attr.aria-label]=\"searchPlaceholder()\"/>\n @if (searchText()) {<button type=\"button\" class=\"dt-bar__clear\" aria-label=\"Effacer la recherche\" (click)=\"onSearch('', true)\"><cad-icon name=\"x\" [size]=\"12\"/></button>}\n </div>\n }\n <span class=\"dt-bar__tools-end\"><ng-content select=\"[cadTableToolbarEnd]\"/></span>\n @if (columnToggle()) {\n <div class=\"dt-bar__cols\">\n <button type=\"button\" class=\"dt-bar__btn\" [class.is-on]=\"colsMenuOpen()\" aria-haspopup=\"true\" [attr.aria-expanded]=\"colsMenuOpen()\" (click)=\"colsMenuOpen.set(!colsMenuOpen())\">\n {{ columnsLabel() }} <cad-icon name=\"chevron-down\" [size]=\"12\"/>\n </button>\n @if (colsMenuOpen()) {\n <div class=\"dt-bar__menu\" role=\"menu\" (keydown.escape)=\"colsMenuOpen.set(false)\">\n <div class=\"dt-bar__menu-title\">{{ columnsLabel() }}</div>\n @for (c of orderedColumns(); track c.id(); let ci = $index; let first = $first; let last = $last) {\n <label [class.is-locked]=\"!c.toggleable()\">\n <cad-checkbox [value]=\"!c.hidden()\" [disabled]=\"!c.toggleable()\" (changed)=\"toggleColumn(c, !$event)\"/>\n <span>{{ c.header() || c.field() }}</span>\n @if (reorderableColumns()) {\n <span class=\"mv\" (click)=\"$event.stopPropagation(); $event.preventDefault()\">\n <button type=\"button\" aria-label=\"Monter\" [disabled]=\"first\" (click)=\"moveColumn(ci, ci - 1)\"><cad-icon name=\"chevron-up\" [size]=\"12\"/></button>\n <button type=\"button\" aria-label=\"Descendre\" [disabled]=\"last\" (click)=\"moveColumn(ci, ci + 1)\"><cad-icon name=\"chevron-down\" [size]=\"12\"/></button>\n </span>\n }\n </label>\n }\n </div>\n }\n </div>\n }\n @if (showDensityToggle()) {\n <button type=\"button\" class=\"dt-bar__btn is-ghost dt-bar__density\" [class.is-on]=\"dense()\" [attr.aria-pressed]=\"dense()\" aria-label=\"Densit\u00E9\" title=\"Densit\u00E9\" (click)=\"dense.set(!dense())\"><cad-icon name=\"chevrons-up-down\" [size]=\"14\"/></button>\n }\n </div>\n }\n\n @if (showGroupZone() && !resp.stacked()) {\n <div class=\"dt-gz\" [class.is-empty]=\"!groupFields().length\" cdkDropList [id]=\"gzId\" cdkDropListOrientation=\"horizontal\" [cdkDropListData]=\"groupFields()\" [cdkDropListEnterPredicate]=\"gzEnter\" (cdkDropListDropped)=\"onGroupZoneDrop($event)\">\n <cad-icon name=\"layers\" [size]=\"14\"/>\n @if (!groupFields().length) {<span class=\"dt-gz__hint\">{{ groupZoneLabel() }}</span>}\n @for (f of groupFields(); track f) {\n <span class=\"dt-gz__chip\" cdkDrag [cdkDragData]=\"f\" cdkDragLockAxis=\"x\"><cad-icon name=\"drag\" [size]=\"11\" class=\"dt-gz__drag\"/><span>{{ groupChipLabel(f) }}</span><button type=\"button\" [attr.aria-label]=\"'Ne plus grouper par ' + groupChipLabel(f)\" (click)=\"ungroup(f)\"><cad-icon name=\"x\" [size]=\"11\"/></button></span>\n }\n </div>\n }\n\n <div class=\"dt-scroll\" #scroller (scroll)=\"onScroll()\">\n @if (loading() && hasData()) {<div class=\"dt-loading\"><cad-icon name=\"loader\" [size]=\"22\" spin/></div>}\n <table class=\"tbl\" [class]=\"'tbl ' + tableClass()\" [style]=\"tableStyle()\" [attr.aria-busy]=\"loading() ? 'true' : null\" [attr.aria-rowcount]=\"totalFiltered()\" [attr.role]=\"hierarchical() ? 'treegrid' : null\">\n @if (captionTpl()) {<caption><ng-container *ngTemplateOutlet=\"captionTpl()!.tpl\"/></caption>}\n <colgroup>\n @if (hasNumberColumn()) {<col style=\"width:44px\">}\n @if (hasSelectionColumn()) {<col style=\"width:36px\">}\n @if (rowDragEnabled()) {<col style=\"width:28px\">}\n @if (hasExpandColumn()) {<col style=\"width:30px\">}\n @for (c of visibleColumns(); track c.id()) {<col [style.width]=\"colWidth(c)\" [style.min-width]=\"c.minWidth() || null\" [style.max-width]=\"c.maxWidth() || null\">}\n @if (hasActionsColumn()) {<col [style.width]=\"rowActionsWidth()\">}\n </colgroup>\n <thead>\n @if (headerGroups().length && !resp.stacked()) {\n <tr class=\"hg\">\n @if (hasNumberColumn()) {<th [class]=\"stickyClass('num')\" [style.left.px]=\"stickyLeft('num')\"></th>}\n @if (hasSelectionColumn()) {<th [class]=\"stickyClass('sel')\" [style.left.px]=\"stickyLeft('sel')\"></th>}\n @if (rowDragEnabled()) {<th [class]=\"stickyClass('drag')\" [style.left.px]=\"stickyLeft('drag')\"></th>}\n @if (hasExpandColumn()) {<th [class]=\"stickyClass('exp')\" [style.left.px]=\"stickyLeft('exp')\"></th>}\n @for (g of headerGroups(); track $index) {<th scope=\"colgroup\" [attr.colspan]=\"g.span\" [class]=\"'hg-cell ' + (g.class || '')\">{{ g.header }}</th>}\n @if (hasActionsColumn()) {<th [class]=\"stickyClass('acts')\" [style.right.px]=\"stickyRight('acts')\"></th>}\n </tr>\n }\n <tr cdkDropList cdkDropListOrientation=\"horizontal\" [cdkDropListDisabled]=\"!reorderableColumns() && !showGroupZone()\" [cdkDropListSortingDisabled]=\"!reorderableColumns()\" [cdkDropListConnectedTo]=\"showGroupZone() ? [gzId] : []\" (cdkDropListDropped)=\"onColumnDrop($event)\">\n @if (hasNumberColumn()) {<th class=\"col-num\" scope=\"col\" data-sk=\"num\" [class]=\"'col-num ' + stickyClass('num')\" [style.left.px]=\"stickyLeft('num')\">#</th>}\n @if (hasSelectionColumn()) {\n <th class=\"col-sel\" scope=\"col\" data-sk=\"sel\" [class]=\"'col-sel ' + stickyClass('sel')\" [style.left.px]=\"stickyLeft('sel')\">\n @if (selectionMode() === 'multiple' && selectAll()) {\n <cad-checkbox [value]=\"allState() === 'all'\" [indeterminate]=\"allState() === 'some'\" ariaLabel=\"Tout s\u00E9lectionner\" (changed)=\"toggleAll()\"/>\n }\n </th>\n }\n @if (rowDragEnabled()) {<th class=\"col-drag\" scope=\"col\" data-sk=\"drag\" [class]=\"'col-drag ' + stickyClass('drag')\" [style.left.px]=\"stickyLeft('drag')\"><span hidden>D\u00E9placer</span></th>}\n @if (hasExpandColumn()) {<th class=\"col-exp\" scope=\"col\" data-sk=\"exp\" [class]=\"'col-exp ' + stickyClass('exp')\" [style.left.px]=\"stickyLeft('exp')\"><span hidden>D\u00E9tail</span></th>}\n @for (c of visibleColumns(); track c.id()) {\n <th scope=\"col\" [attr.data-sk]=\"c.id()\" [class]=\"thClass(c) + (canDrag(c) ? ' can-drag' : '') + (showsMenu(c) ? ' has-menu' : '') + (hasColFilter(c) ? ' is-filtered' : '')\" [attr.aria-sort]=\"ariaSort(c)\" [style.width]=\"colWidth(c)\" [style.left.px]=\"stickyLeft(c.id())\" [style.right.px]=\"stickyRight(c.id())\"\n cdkDrag [cdkDragDisabled]=\"!canDrag(c)\" [cdkDragData]=\"c\" [cdkDragLockAxis]=\"showGroupZone() ? null : 'x'\" cdkDragPreviewClass=\"dt-th-preview\" [cdkDragBoundary]=\"showGroupZone() ? '' : '.tbl thead'\">\n @if (canDrag(c)) {<span class=\"dh\" cdkDragHandle aria-hidden=\"true\" title=\"D\u00E9placer la colonne\"><cad-icon name=\"drag\" [size]=\"12\"/></span>}\n @if (c.headerTpl()) {\n <ng-container *ngTemplateOutlet=\"c.headerTpl()!.tpl; context: { $implicit: c }\"/>\n } @else if (c.sortable()) {\n <button type=\"button\" class=\"hd\" (click)=\"sort(c, $event)\" [attr.aria-label]=\"'Trier par ' + c.header()\">\n <span class=\"hd-txt\">{{ c.header() }}</span>\n <cad-icon [name]=\"sortIcon(c)\" [size]=\"12\"/>\n @if (sortMode() === 'multiple' && sortIndex(c) > 0) {<span class=\"hd-idx\">{{ sortIndex(c) }}</span>}\n </button>\n } @else {\n <span class=\"hd\"><span class=\"hd-txt\">{{ c.header() }}</span></span>\n }\n @if (showsMenu(c)) {<button type=\"button\" class=\"hm\" [class.is-on]=\"menuColumn() === c && !!headerMenu()?.visible()\" aria-label=\"Menu de la colonne\" aria-haspopup=\"menu\" (click)=\"openHeaderMenu(c, $event)\" (pointerdown)=\"$event.stopPropagation()\"><cad-icon name=\"more-vertical\" [size]=\"13\"/></button>}\n @if (isResizable(c)) {<span class=\"rz\" [class.is-active]=\"resizingId() === c.id()\" (pointerdown)=\"startResize($event, c)\" aria-hidden=\"true\"></span>}\n </th>\n }\n @if (hasActionsColumn()) {<th class=\"col-acts\" scope=\"col\" data-sk=\"acts\" [class]=\"'col-acts ' + stickyClass('acts')\" [style.right.px]=\"stickyRight('acts')\"><span hidden>Actions</span></th>}\n </tr>\n @if (hasFilterRow()) {\n <tr class=\"flt\">\n @if (hasNumberColumn()) {<th [class]=\"stickyClass('num')\" [style.left.px]=\"stickyLeft('num')\"></th>}\n @if (hasSelectionColumn()) {<th [class]=\"stickyClass('sel')\" [style.left.px]=\"stickyLeft('sel')\"></th>}\n @if (rowDragEnabled()) {<th [class]=\"stickyClass('drag')\" [style.left.px]=\"stickyLeft('drag')\"></th>}\n @if (hasExpandColumn()) {<th [class]=\"stickyClass('exp')\" [style.left.px]=\"stickyLeft('exp')\"></th>}\n @for (c of visibleColumns(); track c.id()) {\n <th [class]=\"stickyClass(c.id())\" [style.left.px]=\"stickyLeft(c.id())\" [style.right.px]=\"stickyRight(c.id())\">\n @if (c.filterable()) {\n @if (c.filterTpl()) {\n <ng-container *ngTemplateOutlet=\"c.filterTpl()!.tpl; context: { $implicit: c, value: filterValue(c), filter: filterFn(c) }\"/>\n } @else {\n @let kind = filterKind(c);\n @let op = filterOp(c);\n <div class=\"flt-cell\" [class.is-active]=\"hasColFilter(c)\" [class.is-range]=\"op.range\">\n @if (kind === 'boolean') {\n <select [value]=\"filterValue(c) == null ? '' : '' + filterValue(c)\" (change)=\"setFilter(c, $any($event.target).value === '' ? null : $any($event.target).value === 'true')\" [attr.aria-label]=\"'Filtrer ' + c.header()\">\n <option value=\"\">{{ c.filterPlaceholder() || 'Tous' }}</option><option value=\"true\">Oui</option><option value=\"false\">Non</option>\n </select>\n } @else if (kind === 'select' && op.mode !== 'eq') {\n <button type=\"button\" class=\"flt-in\" [class.is-ph]=\"!filterArray(c).length\" [attr.aria-label]=\"'Filtrer ' + c.header()\" (click)=\"openInMenu(c, $event)\">\n <span>{{ filterArray(c).length ? filterArray(c).length + ' s\u00E9lectionn\u00E9' + (filterArray(c).length > 1 ? 's' : '') : (c.filterPlaceholder() || 'Tous') }}</span><cad-icon name=\"chevron-down\" [size]=\"11\"/>\n </button>\n } @else if (kind === 'select') {\n <select [value]=\"filterValue(c) ?? ''\" (change)=\"setFilter(c, $any($event.target).value || null, 'eq')\" [attr.aria-label]=\"'Filtrer ' + c.header()\">\n <option value=\"\">{{ c.filterPlaceholder() || 'Tous' }}</option>\n @for (o of c.filterOptions(); track $index) {<option [value]=\"o.value\" [selected]=\"o.value === filterValue(c)\">{{ o.label }}</option>}\n </select>\n } @else if (!op.needsValue) {\n <span class=\"flt-txt\">{{ op.label }}</span>\n } @else if (op.range) {\n <input [type]=\"kind === 'number' ? 'number' : kind === 'date' ? 'date' : 'search'\" [value]=\"filterPart(c, 0)\" placeholder=\"min\" (input)=\"setFilterPart(c, 0, $any($event.target).value)\" [attr.aria-label]=\"'Filtrer ' + c.header() + ' (min)'\"/>\n <input [type]=\"kind === 'number' ? 'number' : kind === 'date' ? 'date' : 'search'\" [value]=\"filterPart(c, 1)\" placeholder=\"max\" (input)=\"setFilterPart(c, 1, $any($event.target).value)\" [attr.aria-label]=\"'Filtrer ' + c.header() + ' (max)'\"/>\n } @else {\n <input [type]=\"kind === 'number' ? 'number' : kind === 'date' ? 'date' : 'search'\" [value]=\"filterPart(c, 0)\" [placeholder]=\"c.filterPlaceholder() || op.label\" (input)=\"setFilterDebounced(c, $any($event.target).value)\" [attr.aria-label]=\"'Filtrer ' + c.header()\"/>\n }\n @if (kind !== 'boolean') {\n <button type=\"button\" class=\"flt-op\" [class.is-on]=\"hasColFilter(c) || op.mode !== filterOp(c).mode\" [attr.aria-label]=\"'Op\u00E9rateur : ' + op.label\" [title]=\"op.label\" (click)=\"openFilterMenu(c, $event)\"><cad-icon name=\"filter\" [size]=\"12\"/></button>\n }\n @if (hasColFilter(c)) {<button type=\"button\" class=\"flt-x\" aria-label=\"Effacer le filtre\" (click)=\"clearColumnFilter(c)\"><cad-icon name=\"x\" [size]=\"11\"/></button>}\n </div>\n }\n }\n </th>\n }\n @if (hasActionsColumn()) {<th [class]=\"stickyClass('acts')\" [style.right.px]=\"stickyRight('acts')\"></th>}\n </tr>\n }\n </thead>\n <tbody cdkDropList [cdkDropListDisabled]=\"!rowDragEnabled()\" cdkDropListLockAxis=\"y\" (cdkDropListDropped)=\"onRowDrop($event)\">\n @if (loading() && !hasData()) {\n @for (i of skeletonRows(); track i) {\n <tr class=\"dt-row is-skeleton\" aria-hidden=\"true\">\n @if (hasNumberColumn()) {<td class=\"col-num\"></td>}\n @if (hasSelectionColumn()) {<td class=\"col-sel\"></td>}\n @if (rowDragEnabled()) {<td class=\"col-drag\"></td>}\n @if (hasExpandColumn()) {<td class=\"col-exp\"></td>}\n @for (c of visibleColumns(); track c.id()) {<td [class]=\"tdClass(c)\"><div class=\"skel\" [style.width.%]=\"skeletonWidth(i, $index)\" [style.margin-left]=\"c.effectiveAlign() === 'right' ? 'auto' : null\"></div></td>}\n @if (hasActionsColumn()) {<td></td>}\n </tr>\n }\n } @else if (!displayRows().length) {\n <tr class=\"dt-empty\"><td [attr.colspan]=\"colspan()\">\n @if (emptyTpl()) {<ng-container *ngTemplateOutlet=\"emptyTpl()!.tpl\"/>}\n @else {\n <div class=\"empty\">\n @if (emptyIcon()) {<cad-icon [name]=\"emptyIcon()\" [size]=\"26\" [strokeWidth]=\"1.5\"/>}\n <b>{{ emptyMessage() }}</b>\n @if (emptyHint()) {<span>{{ emptyHint() }}</span>}\n </div>\n }\n </td></tr>\n } @else {\n @if (virtual.range().topPad > 0) {<tr class=\"dt-vpad\" aria-hidden=\"true\"><td [attr.colspan]=\"colspan()\" [style.height.px]=\"virtual.range().topPad\"></td></tr>}\n @for (d of renderRows(); track d.trackKey; let vi = $index) {\n @let i = vi + virtual.range().start;\n @if (d.kind === 'group') {\n <!-- en-t\u00EAte de groupe -->\n <tr class=\"dt-group\" [class.is-expanded]=\"d.node!.expanded\" [style.--_lvl]=\"d.level\" role=\"row\" [attr.aria-level]=\"d.level + 1\" [attr.aria-expanded]=\"d.node!.expanded\">\n <td [attr.colspan]=\"colspan()\" class=\"dt-group__cell\">\n <div class=\"dt-group__inner\">\n @if (hasSelectionColumn() && selectionMode() === 'multiple') {\n <cad-checkbox [value]=\"nodeState(d) === 'on'\" [indeterminate]=\"nodeState(d) === 'some'\" [ariaLabel]=\"'S\u00E9lectionner le groupe ' + d.node!.group!.label\" (changed)=\"toggleGroupSelection(d, $event)\"/>\n }\n <button type=\"button\" class=\"exp\" [attr.aria-expanded]=\"d.node!.expanded\" [attr.aria-label]=\"d.node!.expanded ? 'Replier' : 'D\u00E9plier'\" (click)=\"toggleGroup(d.node!)\"><cad-icon name=\"chevron-right\" [size]=\"13\"/></button>\n @if (groupHeaderTpl()) {\n <ng-container *ngTemplateOutlet=\"groupHeaderTpl()!.tpl; context: groupCtx(d)\"/>\n } @else {\n <span class=\"dt-group__label\">{{ d.node!.group!.label }}</span>\n <span class=\"dt-group__count\">{{ d.node!.group!.count }}</span>\n }\n </div>\n </td>\n </tr>\n } @else if (d.kind === 'groupFooter') {\n <!-- pied de groupe (agr\u00E9gats) -->\n <tr class=\"dt-group-foot\" [style.--_lvl]=\"d.level\">\n @if (groupFooterTpl()) {\n <td [attr.colspan]=\"colspan()\"><ng-container *ngTemplateOutlet=\"groupFooterTpl()!.tpl; context: groupCtx(d)\"/></td>\n } @else {\n @if (hasNumberColumn()) {<td class=\"col-num\"></td>}\n @if (hasSelectionColumn()) {<td class=\"col-sel\"></td>}\n @if (rowDragEnabled()) {<td class=\"col-drag\"></td>}\n @if (hasExpandColumn()) {<td class=\"col-exp\"></td>}\n @for (c of visibleColumns(); track c.id(); let ci = $index) {\n <td [class]=\"tdClass(c)\" [attr.data-l]=\"c.header()\">\n @if (ci === 0 && !hasAggregate(c)) {<span class=\"dt-group-foot__label\">Total {{ d.node!.group!.label }}</span>}\n @else if (hasAggregate(c)) {{{ formatCell(d.node!.group!.aggregates[c.field()], c) }}}\n </td>\n }\n @if (hasActionsColumn()) {<td></td>}\n }\n </tr>\n } @else if (resp.stacked() && cardTpl()) {\n <!-- carte custom (mode stack) -->\n <tr class=\"dt-row dt-card\" [class]=\"rowClasses(d.row, i, d)\" [style]=\"rowStyle()?.(d.row, i) || null\" [attr.tabindex]=\"selectionMode() ? 0 : null\" [attr.aria-selected]=\"selectionMode() ? isSelected(d.row) : null\"\n (click)=\"onRowClick(d.row, i, $event)\" (keydown)=\"onRowKey(d, i, $event)\">\n <td [attr.colspan]=\"colspan()\"><ng-container *ngTemplateOutlet=\"cardTpl()!.tpl; context: { $implicit: d.row, rowIndex: i, node: d.node, selected: isSelected(d.row) }\"/></td>\n </tr>\n } @else {\n <!-- ligne -->\n <tr class=\"dt-row\" [class]=\"rowClasses(d.row, i, d)\" [style]=\"rowStyle()?.(d.row, i) || null\" [style.--_lvl]=\"d.level\" [attr.data-key]=\"d.key\" [class.is-editing-row]=\"isRowEditing(d.row)\"\n cdkDrag [cdkDragDisabled]=\"!canDragRow(d.row)\" [cdkDragData]=\"d.row\" cdkDragLockAxis=\"y\" cdkDragPreviewClass=\"dt-tr-preview\" cdkDragBoundary=\".tbl\"\n [attr.tabindex]=\"selectionMode() || hierarchical() ? 0 : null\" [attr.aria-selected]=\"selectionMode() ? isSelected(d.row) : null\"\n [attr.role]=\"hierarchical() ? 'row' : null\" [attr.aria-level]=\"hierarchical() ? d.level + 1 : null\" [attr.aria-expanded]=\"d.node?.hasChildren ? d.node!.expanded : null\"\n [attr.aria-setsize]=\"d.node ? d.node.setSize : null\" [attr.aria-posinset]=\"d.node ? d.node.posInSet : null\"\n (click)=\"onRowClick(d.row, i, $event)\" (dblclick)=\"rowDblClick.emit({ row: d.row, index: i, event: $event })\" (keydown)=\"onRowKey(d, i, $event)\">\n @if (hasNumberColumn()) {<td class=\"col-num\" [class]=\"'col-num ' + stickyClass('num')\" [style.left.px]=\"stickyLeft('num')\">{{ rowNumber(d) }}</td>}\n @if (hasSelectionColumn()) {\n <td class=\"col-sel\" [class]=\"'col-sel ' + stickyClass('sel')\" [style.left.px]=\"stickyLeft('sel')\">\n @if (canSelect(d.row)) {\n @if (selectionMode() === 'multiple') {\n <cad-checkbox [value]=\"nodeState(d) === 'on'\" [indeterminate]=\"nodeState(d) === 'some'\" [ariaLabel]=\"'S\u00E9lectionner la ligne ' + (i + 1)\" (changed)=\"toggleRow(d.row, i, $event)\"/>\n } @else {\n <cad-checkbox [value]=\"isSelected(d.row)\" [ariaLabel]=\"'S\u00E9lectionner la ligne ' + (i + 1)\" (changed)=\"selectSingle(d.row, i)\"/>\n }\n }\n </td>\n }\n @if (rowDragEnabled()) {\n <td class=\"col-drag\" [class]=\"'col-drag ' + stickyClass('drag')\" [style.left.px]=\"stickyLeft('drag')\">\n @if (canDragRow(d.row)) {<span class=\"rdh\" cdkDragHandle title=\"D\u00E9placer la ligne\" aria-hidden=\"true\"><cad-icon name=\"drag\" [size]=\"13\"/></span>}\n </td>\n }\n @if (hasExpandColumn()) {\n <td class=\"col-exp\" [class]=\"'col-exp ' + stickyClass('exp')\" [style.left.px]=\"stickyLeft('exp')\">\n @if (canExpand(d.row)) {\n <button type=\"button\" class=\"exp\" [attr.aria-expanded]=\"isExpanded(d.row)\" [attr.aria-label]=\"isExpanded(d.row) ? 'Replier' : 'D\u00E9plier'\" (click)=\"toggleExpand(d.row, $event)\"><cad-icon name=\"chevron-right\" [size]=\"13\"/></button>\n }\n </td>\n }\n @for (c of visibleColumns(); track c.id(); let cFirst = $first) {\n <td [class]=\"tdClass(c) + ' ' + stickyClass(c.id()) + (isTreeColumn(c) ? ' dt-tree-cell' : '') + (cFirst ? ' dt-first' : '') + (editUi.canEditCell(c) ? ' is-editable' : '') + (edit.isEditing(d.row, c) ? ' is-editing' : '')\"\n [style.left.px]=\"stickyLeft(c.id())\" [style.right.px]=\"stickyRight(c.id())\" [attr.data-l]=\"c.header()\"\n (click)=\"editUi.onCellClick(d.row, c, $event, false)\" (dblclick)=\"editUi.onCellClick(d.row, c, $event, true)\">\n @if (edit.isEditing(d.row, c) && c.field()) {\n <!-- \u00E9diteur inline (mode cell ou row) -->\n <div class=\"dt-editor\" [class.is-invalid]=\"!!edit.cellError(d.row, c)\" (click)=\"$event.stopPropagation()\" (dblclick)=\"$event.stopPropagation()\" (keydown)=\"editUi.onKey(d.row, c, $event)\" (focusout)=\"editUi.onBlur(d.row, c)\">\n @if (c.editorTpl()) {\n <ng-container *ngTemplateOutlet=\"c.editorTpl()!.tpl; context: editUi.ctxFor(d.row, c, i)\"/>\n } @else {\n @switch (c.editor()) {\n @case ('select') {\n <select cadEditFocus [attr.aria-label]=\"c.header()\" (change)=\"editUi.onInput(d.row, c, $any($event.target).value)\">\n @for (o of c.effectiveEditorOptions(); track $index) {<option [value]=\"o.value\" [selected]=\"o.value === edit.valueOf(d.row, c)\">{{ o.label }}</option>}\n </select>\n }\n @case ('checkbox') {<input type=\"checkbox\" cadEditFocus [checked]=\"!!edit.valueOf(d.row, c)\" [attr.aria-label]=\"c.header()\" (change)=\"editUi.onInput(d.row, c, $any($event.target).checked)\"/>}\n @case ('textarea') {<textarea cadEditFocus rows=\"3\" [value]=\"edit.valueOf(d.row, c) ?? ''\" [attr.aria-label]=\"c.header()\" (input)=\"editUi.onInput(d.row, c, $any($event.target).value)\"></textarea>}\n @default {<input cadEditFocus [type]=\"editUi.inputType(c)\" [value]=\"edit.valueOf(d.row, c) ?? ''\" [attr.aria-label]=\"c.header()\" [attr.aria-invalid]=\"edit.cellError(d.row, c) ? 'true' : null\" (input)=\"editUi.onInput(d.row, c, $any($event.target).value)\"/>}\n }\n }\n @if (edit.cellError(d.row, c)) {<span class=\"dt-editor__err\" role=\"alert\">{{ edit.cellError(d.row, c) }}</span>}\n </div>\n } @else {\n @if (editUi.canEditCell(c) && showEditIcon()) {<button type=\"button\" class=\"ce\" tabindex=\"-1\" aria-label=\"Modifier\" (click)=\"$event.stopPropagation(); editUi.startEdit(d.row, c)\"><cad-icon name=\"edit\" [size]=\"11\"/></button>}\n @if (isTreeColumn(c) && d.node) {\n <span class=\"cad-tree-toggle\" [style.--_lvl]=\"d.level\">\n @if (showTreeLines()) { @for (l of levelsOf(d.level); track l) {<i class=\"tl\" aria-hidden=\"true\"></i>} }\n @else {<i class=\"ind\" aria-hidden=\"true\"></i>}\n <button type=\"button\" class=\"tg\" [class.is-leaf]=\"!d.node.hasChildren\" [class.is-open]=\"d.node.expanded\" [attr.tabindex]=\"d.node.hasChildren ? 0 : -1\"\n [attr.aria-expanded]=\"d.node.hasChildren ? d.node.expanded : null\" [attr.aria-label]=\"d.node.expanded ? 'Replier' : 'D\u00E9plier'\" (click)=\"toggleNode(d.node, $event)\">\n @if (d.node.loading) {<cad-icon name=\"loader\" [size]=\"12\" spin/>} @else {<cad-icon name=\"chevron-right\" [size]=\"13\"/>}\n </button>\n @if (treeIconOf(d.row)) {<cad-icon class=\"ic\" [name]=\"treeIconOf(d.row)!\" [size]=\"14\"/>}\n </span>\n }\n @if (c.cellTpl()) {\n <ng-container *ngTemplateOutlet=\"c.cellTpl()!.tpl; context: { $implicit: d.row, value: cell(d.row, c), rowIndex: i, column: c, level: d.level, expanded: d.node?.expanded ?? false, hasChildren: d.node?.hasChildren ?? false, node: d.node }\"/>\n } @else {<span class=\"cell-txt\">{{ formatCell(cell(d.row, c), c) }}</span>}\n }\n </td>\n }\n @if (hasActionsColumn()) {\n <td class=\"col-acts\" [class]=\"'col-acts ' + stickyClass('acts')\" [style.right.px]=\"stickyRight('acts')\"><span class=\"acts\" (click)=\"$event.stopPropagation()\">\n @if ((editMode() === 'row' || editMode() === 'row-inline') && showRowEditButton()) {\n @if (isRowEditing(d.row)) {\n <button type=\"button\" class=\"re ok\" aria-label=\"Enregistrer la ligne\" title=\"Enregistrer\" (click)=\"saveRowEdit(d.row)\"><cad-icon name=\"check\" [size]=\"15\"/></button>\n <button type=\"button\" class=\"re ko\" aria-label=\"Annuler l'\u00E9dition\" title=\"Annuler\" (click)=\"cancelRowEdit(d.row)\"><cad-icon name=\"x\" [size]=\"15\"/></button>\n } @else {\n <button type=\"button\" class=\"re\" aria-label=\"Modifier la ligne\" title=\"Modifier\" (click)=\"initRowEdit(d.row)\"><cad-icon name=\"edit\" [size]=\"14\"/></button>\n }\n }\n @if (rowActionsTpl()) {<ng-container *ngTemplateOutlet=\"rowActionsTpl()!.tpl; context: { $implicit: d.row, rowIndex: i, node: d.node, editing: isRowEditing(d.row) }\"/>}\n </span></td>\n }\n </tr>\n @if (isExpanded(d.row) && hasExpandColumn()) {\n <tr class=\"dt-detail\" [style.--_lvl]=\"d.level\"><td [attr.colspan]=\"colspan()\">\n @if (expansionTpl()) {\n <ng-container *ngTemplateOutlet=\"expansionTpl()!.tpl; context: { $implicit: d.row, rowIndex: i, hiddenColumns: hiddenByPriority(), node: d.node }\"/>\n } @else {\n <div class=\"kv\">\n @for (c of hiddenByPriority(); track c.id()) {<div><b>{{ c.header() || c.field() }}</b>\n @if (c.cellTpl()) {<ng-container *ngTemplateOutlet=\"c.cellTpl()!.tpl; context: { $implicit: d.row, value: cell(d.row, c), rowIndex: i, column: c, level: d.level, expanded: false, hasChildren: false, node: d.node }\"/>}\n @else {{{ formatCell(cell(d.row, c), c) }}}\n </div>}\n </div>\n }\n </td></tr>\n }\n }\n }\n @if (virtual.range().bottomPad > 0) {<tr class=\"dt-vpad\" aria-hidden=\"true\"><td [attr.colspan]=\"colspan()\" [style.height.px]=\"virtual.range().bottomPad\"></td></tr>}\n }\n </tbody>\n @if (footerTpl() || showGrandTotalRow()) {\n <tfoot>\n @if (showGrandTotalRow()) {\n <tr class=\"dt-grand\">\n @if (hasNumberColumn()) {<td class=\"col-num\"></td>}\n @if (hasSelectionColumn()) {<td class=\"col-sel\"></td>}\n @if (rowDragEnabled()) {<td class=\"col-drag\"></td>}\n @if (hasExpandColumn()) {<td class=\"col-exp\"></td>}\n @for (c of visibleColumns(); track c.id(); let ci = $index) {\n <td [class]=\"tdClass(c)\" [attr.data-l]=\"c.header()\">\n @if (ci === 0 && !hasAggregate(c)) {{{ grandTotalLabel() }}}\n @else if (hasAggregate(c)) {{{ formatCell(grandTotal()[c.field()], c) }}}\n </td>\n }\n @if (hasActionsColumn()) {<td></td>}\n </tr>\n }\n @if (footerTpl()) {<ng-container *ngTemplateOutlet=\"footerTpl()!.tpl; context: { $implicit: pageData(), columns: visibleColumns(), aggregates: grandTotal() }\"/>}\n </tfoot>\n }\n </table>\n </div>\n\n @if ((usePaginator() && (paginationTotal() > 0 || lazy())) || showRowCount()) {\n <div class=\"dt-foot\" [class.has-count]=\"showRowCount()\">\n @if (showRowCount()) {\n <span class=\"dt-foot__count\">\n @if (rowCountTpl()) {<ng-container *ngTemplateOutlet=\"rowCountTpl()!.tpl; context: { $implicit: totalRows(), total: totalRows(), filtered: totalFiltered(), selected: selectedCount() }\"/>}\n @else {{{ totalRows() }} {{ rowCountLabel() }}@if (totalFiltered() !== totalRows()) { \u00B7 {{ totalFiltered() }} filtr\u00E9e{{ totalFiltered() > 1 ? 's' : '' }}}@if (selectedCount() > 0) { \u00B7 {{ selectedCount() }} s\u00E9lectionn\u00E9e{{ selectedCount() > 1 ? 's' : '' }}}}\n </span>\n }\n @if (usePaginator() && (paginationTotal() > 0 || lazy())) {\n <cad-paginator [first]=\"first()\" [rows]=\"rows()\" [totalRecords]=\"paginationTotal()\" [rowsPerPageOptions]=\"rowsPerPageOptions()\" [pageLinks]=\"resp.stacked() ? 3 : pageLinks()\"\n [showCurrentPageReport]=\"showCurrentPageReport()\" [currentPageReportTemplate]=\"currentPageReportTemplate()\" [showFirstLastIcon]=\"showFirstLastIcon()\"\n [alwaysShow]=\"alwaysShowPaginator()\" (pageChange)=\"onPage($event)\"/>\n }\n </div>\n }\n <cad-menu #hmenu popup [items]=\"menuItems()\" ariaLabel=\"Menu de la colonne\"/>\n <cad-menu #fmenu popup [items]=\"filterMenuItems()\" ariaLabel=\"Op\u00E9rateur de filtre\" [minWidth]=\"200\"/>\n <cad-menu #inmenu popup [closeOnSelect]=\"false\" [items]=\"inMenuItems()\" ariaLabel=\"Valeurs du filtre\" [minWidth]=\"180\"/>\n</div>\n", styles: [":host{--_row-h: var(--cad-table-row-h, 42px);--_cell-px: 12px;display:block;min-width:0;max-width:100%;font:var(--cad-font-size)/1.4 var(--cad-font);color:var(--cad-fg)}:host(.is-dense){--_row-h: 34px}.dt{border:1px solid var(--cad-border);border-radius:var(--cad-radius-lg);background:var(--cad-surface);overflow:hidden;position:relative}:host(.is-borderless) .dt{border:0;border-radius:0}.dt-bar{display:flex;align-items:center;gap:8px;padding:10px 12px;border-bottom:1px solid var(--cad-border);flex-wrap:wrap}.dt-bar__title{font-weight:600;font-size:13.5px;margin-right:4px}.dt-bar__count{font:500 11px var(--cad-font-mono);padding:2px 7px;border-radius:999px;background:var(--cad-elevated);color:var(--cad-fg-secondary)}.dt-bar__grow{flex:1}.dt-bar__search{position:relative;display:flex;align-items:center;width:240px;max-width:100%}.dt-bar__search cad-icon{position:absolute;left:9px;color:var(--cad-fg-muted);pointer-events:none}.dt-bar__search input{width:100%;box-sizing:border-box;height:30px;padding:0 28px 0 30px;font:var(--cad-font-size) var(--cad-font);color:var(--cad-fg);background:var(--cad-input-bg);border:1px solid var(--cad-input-border);border-radius:var(--cad-radius);outline:0;transition:border-color var(--cad-dur),box-shadow var(--cad-dur)}.dt-bar__search input::placeholder{color:var(--cad-fg-muted)}.dt-bar__search input:focus{border-color:var(--cad-accent);box-shadow:0 0 0 3px var(--cad-ring)}.dt-bar__search .dt-bar__clear{position:absolute;right:6px;border:0;background:transparent;color:var(--cad-fg-muted);cursor:pointer;display:grid;place-items:center;padding:2px;border-radius:4px}.dt-bar__search .dt-bar__clear:hover{color:var(--cad-fg);background:var(--cad-hover)}.dt-bar__btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:26px;padding:0 8px;border-radius:var(--cad-radius-sm);border:1px solid var(--cad-border-strong);background:transparent;color:var(--cad-fg-secondary);font:500 var(--cad-font-size-sm) var(--cad-font);cursor:pointer;white-space:nowrap}.dt-bar__btn:hover{background:var(--cad-hover);color:var(--cad-fg)}.dt-bar__btn:focus-visible{outline:2px solid var(--cad-ring);outline-offset:1px}.dt-bar__btn.is-ghost{border-color:transparent;width:26px;padding:0}.dt-bar__btn.is-on{color:var(--cad-accent);background:var(--cad-accent-soft)}.dt-bar__cols{position:relative}.dt-bar__menu{position:absolute;right:0;top:calc(100% + 6px);z-index:20;min-width:200px;max-height:280px;overflow:auto;background:var(--cad-overlay);--cad-hover: var(--cad-overlay-hover);border:1px solid var(--cad-border);border-radius:9px;box-shadow:var(--cad-shadow-lg);padding:4px}.dt-bar__menu label{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:6px;cursor:pointer;font-size:var(--cad-font-size)}.dt-bar__menu label:hover{background:var(--cad-hover)}.dt-bar__menu label.is-locked{opacity:.5;cursor:default}.dt-bar__menu-title{font:600 10px/1 var(--cad-font-mono);letter-spacing:.1em;text-transform:uppercase;color:var(--cad-fg-muted);padding:6px 8px 4px}.dt-sel{display:flex;align-items:center;gap:8px;padding:8px 12px;background:var(--cad-accent-soft);border-bottom:1px solid var(--cad-border);font-size:12.5px;color:var(--cad-accent);font-weight:500;min-height:47px;box-sizing:border-box}.dt-sel__grow{flex:1}.dt-sel__clear{border:0;background:transparent;color:inherit;cursor:pointer;display:grid;place-items:center;width:26px;height:26px;border-radius:6px}.dt-sel__clear:hover{background:var(--cad-accent-soft)}.dt-scroll{overflow:auto;position:relative}:host(.has-scroll-height) .dt-scroll{max-height:var(--_scroll-h);scrollbar-width:thin;scrollbar-color:var(--cad-border-strong) transparent;scrollbar-gutter:stable}:host(.has-scroll-height) .dt-scroll::-webkit-scrollbar{width:10px;height:10px}:host(.has-scroll-height) .dt-scroll::-webkit-scrollbar-thumb{background:var(--cad-border-strong);border-radius:999px;border:2px solid var(--cad-surface)}:host(.has-scroll-height) .dt-scroll::-webkit-scrollbar-thumb:hover{background:var(--cad-fg-muted)}:host(.has-scroll-height) .dt-scroll::-webkit-scrollbar-track{background:transparent}.dt-loading{position:absolute;inset:0;display:grid;place-items:center;background:color-mix(in srgb,var(--cad-surface) 55%,transparent);z-index:5}.dt-loading cad-icon{color:var(--cad-accent)}.tbl{width:100%;border-collapse:separate;border-spacing:0;font-size:var(--cad-font-size)}:host(.is-resizable) .tbl{table-layout:fixed}.tbl caption{text-align:left;padding:10px 12px;font-weight:600;color:var(--cad-fg-secondary);font-size:var(--cad-font-size-sm)}.tbl th{position:relative;text-align:left;font-weight:600;font-size:var(--cad-font-size-sm);color:var(--cad-fg-secondary);background:var(--cad-bg-subtle);padding:0 var(--_cell-px);height:38px;border-bottom:1px solid var(--cad-border);white-space:nowrap;-webkit-user-select:none;user-select:none;box-sizing:border-box}:host(.is-sticky-header) .tbl thead th{position:sticky;top:0;z-index:3}.tbl th.al-right{text-align:right}.tbl th.al-center{text-align:center}.tbl th.st-left,.tbl td.st-left{position:sticky;left:0;z-index:2;background:var(--cad-surface)}.tbl th.st-right,.tbl td.st-right{position:sticky;right:0;z-index:2;background:var(--cad-surface)}.tbl th.st-left,.tbl th.st-right{background:var(--cad-bg-subtle);z-index:4}.tbl th .hd{display:inline-flex;align-items:center;gap:4px;max-width:100%}.tbl th.al-right .hd{flex-direction:row-reverse}.tbl th .hd-txt{overflow:hidden;text-overflow:ellipsis}.tbl th button.hd{all:unset;display:inline-flex;align-items:center;gap:4px;cursor:pointer;border-radius:4px;max-width:100%}.tbl th button.hd:focus-visible{outline:2px solid var(--cad-ring);outline-offset:2px}.tbl th .hd cad-icon{opacity:0;transition:opacity var(--cad-dur);flex:none}.tbl th:hover .hd cad-icon{opacity:.6}.tbl th.is-sorted .hd{color:var(--cad-accent)}.tbl th.is-sorted .hd cad-icon{opacity:1}.tbl th .hd-idx{font:600 9px var(--cad-font-mono);background:var(--cad-accent-soft);color:var(--cad-accent);border-radius:999px;padding:1px 4px}.tbl th .rz{position:absolute;right:0;top:8px;bottom:8px;width:5px;cursor:col-resize;z-index:1}.tbl th .rz:after{content:\"\";position:absolute;right:2px;top:0;bottom:0;width:1px;background:var(--cad-border);transition:background var(--cad-dur)}.tbl th .rz:hover:after,.tbl th .rz.is-active:after{background:var(--cad-accent);width:2px}.tbl th.col-sel,.tbl td.col-sel{width:36px;padding-right:0}.tbl th.col-exp,.tbl td.col-exp{width:30px;padding:0 4px}.tbl th.col-acts,.tbl td.col-acts{text-align:right;white-space:nowrap}.tbl tr.flt th{height:auto;padding:6px var(--_cell-px);background:var(--cad-surface);font-weight:400}.tbl tr.flt input,.tbl tr.flt select{width:100%;box-sizing:border-box;height:26px;padding:0 8px;font:var(--cad-font-size-sm) var(--cad-font);color:var(--cad-fg);background:var(--cad-input-bg);border:1px solid var(--cad-input-border);border-radius:var(--cad-radius-sm);outline:0}.tbl tr.flt input:focus,.tbl tr.flt select:focus{border-color:var(--cad-accent);box-shadow:0 0 0 2px var(--cad-ring)}.tbl td{padding:0 var(--_cell-px);height:var(--_row-h);border-bottom:1px solid var(--cad-border);vertical-align:middle;font-variant-numeric:tabular-nums;box-sizing:border-box}.tbl td.al-right{text-align:right}.tbl td.al-center{text-align:center}.tbl td.dt-num{font-family:var(--cad-font-mono);font-size:var(--cad-font-size-sm)}.tbl td.is-nowrap{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host(.is-bordered) .tbl td,:host(.is-bordered) .tbl th{border-right:1px solid var(--cad-border)}:host(.is-bordered) .tbl td:last-child,:host(.is-bordered) .tbl th:last-child{border-right:0}.tbl tbody tr:last-child td{border-bottom:0}:host(.is-striped) .tbl tbody tr.dt-row:nth-child(2n of.dt-row) td{background:var(--cad-table-stripe, var(--cad-bg-subtle))}:host(.is-hoverable) .tbl tbody tr.dt-row:hover td{background:var(--cad-hover)}.tbl tbody tr.dt-row.is-selectable{cursor:pointer}.tbl tbody tr.dt-row:focus-visible{outline:none}.tbl tbody tr.dt-row:focus-visible td{background:var(--cad-hover);box-shadow:inset 0 0 0 1px var(--cad-ring)}.tbl tbody tr.dt-row.is-selected td{background:var(--cad-accent-soft)}.tbl tbody tr.dt-row.is-selected td:first-child{box-shadow:inset 3px 0 0 var(--cad-accent)}.tbl tbody tr.dt-row.is-selected:focus-visible td{box-shadow:inset 0 0 0 1px var(--cad-ring)}.tbl tbody tr.dt-row.is-selected:focus-visible td:first-child{box-shadow:inset 3px 0 0 var(--cad-accent),inset 0 0 0 1px var(--cad-ring)}.tbl .exp{width:22px;height:22px;border:0;border-radius:5px;background:transparent;color:var(--cad-fg-muted);display:inline-grid;place-items:center;cursor:pointer;padding:0}.tbl .exp:hover{background:var(--cad-elevated);color:var(--cad-fg)}.tbl .exp:focus-visible{outline:2px solid var(--cad-ring)}.tbl .exp cad-icon{transition:transform var(--cad-dur)}.tbl tr.is-expanded .exp cad-icon{transform:rotate(90deg)}.tbl .acts{display:inline-flex;gap:2px;align-items:center;opacity:0;transition:opacity var(--cad-dur)}.tbl tr:hover .acts,.tbl tr.is-selected .acts,.tbl tr:focus-within .acts{opacity:1}:host(.acts-always) .tbl .acts{opacity:1}.tbl tr.dt-detail td{background:var(--cad-bg-subtle);height:auto;padding:12px var(--_cell-px) 14px var(--_detail-pl, 58px)}:host(.is-hoverable) .tbl tr.dt-detail:hover td{background:var(--cad-bg-subtle)}.tbl tfoot td{background:var(--cad-bg-subtle);font-weight:600;color:var(--cad-fg-secondary);border-top:1px solid var(--cad-border);border-bottom:0}.kv{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:10px 22px;font-size:12.5px}.kv b{display:block;font:600 10.5px/1 var(--cad-font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--cad-fg-muted);margin-bottom:4px}.skel{height:12px;border-radius:4px;background:linear-gradient(90deg,var(--cad-elevated),var(--cad-hover),var(--cad-elevated));background-size:200% 100%;animation:cad-tbl-sh 1.4s infinite}@keyframes cad-tbl-sh{to{background-position:-200% 0}}@media(prefers-reduced-motion:reduce){.skel{animation:none}.tbl .acts,.tbl .exp cad-icon,.tbl th .hd cad-icon{transition:none}}.empty{display:grid;place-items:center;gap:6px;padding:34px 12px;text-align:center;color:var(--cad-fg-secondary);font-size:12.5px}.empty cad-icon{color:var(--cad-fg-muted)}.empty b{color:var(--cad-fg);font-size:var(--cad-font-size)}.dt-foot{display:flex;align-items:center;gap:14px;padding:8px 12px;border-top:1px solid var(--cad-border)}.dt-foot cad-paginator{flex:1}\n", ".tbl th.st-left,.tbl td.st-left,.tbl th.st-right,.tbl td.st-right{position:sticky;z-index:2;background:var(--cad-surface);background-clip:padding-box}.tbl thead th.st-left,.tbl thead th.st-right{z-index:4;background:var(--cad-bg-subtle)}:host(.is-sticky-header) .tbl thead th.st-left,:host(.is-sticky-header) .tbl thead th.st-right{z-index:5}:host(.is-striped) .tbl tbody tr.dt-row:nth-child(2n of.dt-row) td.st-left,:host(.is-striped) .tbl tbody tr.dt-row:nth-child(2n of.dt-row) td.st-right{background:var(--cad-table-stripe, var(--cad-bg-subtle))}:host(.is-hoverable) .tbl tbody tr.dt-row:hover td.st-left,:host(.is-hoverable) .tbl tbody tr.dt-row:hover td.st-right{background:var(--cad-hover)}.tbl tbody tr.dt-row.is-selected td.st-left,.tbl tbody tr.dt-row.is-selected td.st-right{background:color-mix(in srgb,var(--cad-accent) 12%,var(--cad-surface))}.tbl td.st-last-left,.tbl th.st-last-left{transition:box-shadow var(--cad-dur)}:host(.is-scrolled-x) .tbl td.st-last-left,:host(.is-scrolled-x) .tbl th.st-last-left{box-shadow:1px 0 0 var(--cad-border),6px 0 12px -6px #0000002e}:host(:not(.is-scrolled-x-end)) .tbl td.st-first-right,:host(:not(.is-scrolled-x-end)) .tbl th.st-first-right{box-shadow:-1px 0 0 var(--cad-border),-6px 0 12px -6px #0000002e}.tbl td.st-right.col-acts .acts{background:inherit}.tbl td.dt-tree-cell{white-space:nowrap}.tbl td.dt-tree-cell .cell-txt{white-space:normal}.cad-tree-toggle{display:inline-flex;align-items:center;vertical-align:middle;margin-right:4px}.cad-tree-toggle .ind{display:inline-block;width:calc(var(--_lvl, 0) * var(--_indent, 20px));flex:none}.cad-tree-toggle .tl{display:inline-block;width:var(--_indent, 20px);align-self:stretch;flex:none;position:relative}:host(.has-tree-lines) .tbl td.dt-tree-cell{padding-top:0;padding-bottom:0}:host(.has-tree-lines) .cad-tree-toggle{align-self:stretch;height:var(--_row-h)}:host(.has-tree-lines) .cad-tree-toggle .tl:before{content:\"\";position:absolute;left:9px;top:0;bottom:0;border-left:1px solid var(--cad-border)}.cad-tree-toggle .tg{width:20px;height:20px;border:0;border-radius:5px;background:transparent;color:var(--cad-fg-muted);display:inline-grid;place-items:center;cursor:pointer;padding:0;flex:none}.cad-tree-toggle .tg:hover{background:var(--cad-elevated);color:var(--cad-fg)}.cad-tree-toggle .tg:focus-visible{outline:2px solid var(--cad-ring)}.cad-tree-toggle .tg cad-icon{transition:transform var(--cad-dur)}.cad-tree-toggle .tg.is-open cad-icon{transform:rotate(90deg)}.cad-tree-toggle .tg.is-leaf{visibility:hidden;pointer-events:none}.cad-tree-toggle .ic{color:var(--cad-fg-muted);margin:0 6px 0 2px}.tbl tr.dt-row.lvl-0.has-children td.dt-tree-cell{font-weight:500}.tbl tr.dt-group td{background:var(--cad-bg-subtle);height:34px;padding:0 var(--_cell-px);border-bottom:1px solid var(--cad-border)}.dt-group__inner{display:flex;align-items:center;gap:6px;padding-left:calc(var(--_lvl, 0) * var(--_indent, 20px));font-weight:600;font-size:var(--cad-font-size-sm)}.dt-group__inner .exp{width:22px;height:22px;border:0;border-radius:5px;background:transparent;color:var(--cad-fg-muted);display:inline-grid;place-items:center;cursor:pointer;padding:0}.dt-group__inner .exp:hover{background:var(--cad-elevated);color:var(--cad-fg)}.dt-group__inner .exp cad-icon{transition:transform var(--cad-dur)}.tbl tr.dt-group.is-expanded .dt-group__inner .exp cad-icon{transform:rotate(90deg)}.dt-group__count{font:500 10.5px var(--cad-font-mono);padding:1px 6px;border-radius:999px;background:var(--cad-elevated);color:var(--cad-fg-secondary)}.tbl tr.dt-group-foot td{background:var(--cad-bg-subtle);height:32px;color:var(--cad-fg-secondary);font-size:var(--cad-font-size-sm);border-bottom:1px solid var(--cad-border)}.tbl tr.dt-group-foot td.dt-num,.tbl tr.dt-grand td.dt-num{font-family:var(--cad-font-mono);font-weight:600}.dt-group-foot__label{padding-left:calc(var(--_lvl, 0) * var(--_indent, 20px) + 26px);font-weight:500}.tbl tfoot tr.dt-grand td{background:var(--cad-bg-subtle);font-weight:600;color:var(--cad-fg);border-top:2px solid var(--cad-border);height:36px}:host(.is-hoverable) .tbl tr.dt-group:hover td,:host(.is-hoverable) .tbl tr.dt-group-foot:hover td{background:var(--cad-bg-subtle)}.tbl tr.dt-detail td{padding-left:calc(var(--_detail-pl, 58px) + var(--_lvl, 0) * var(--_indent, 20px))}.dt-bar__tools,.dt-bar__tools-end{display:contents}.dt-bar__filters{display:inline-flex}.dt-bar__filters .dt-bar__count{padding:1px 6px;font-size:10px}:host(.is-stacked) .dt-bar{gap:8px}:host(.is-stacked) .dt-bar__tools{display:none}:host(.is-stacked) .dt-bar__tools.is-open{display:flex;flex-wrap:wrap;align-items:center;gap:8px;flex-basis:100%;order:10;padding-top:8px;border-top:1px dashed var(--cad-border)}:host(.is-stacked) .dt-bar__grow{display:none}:host(.is-stacked) .dt-bar__search{order:5;flex-basis:100%;width:100%}:host(.is-stacked) .dt-bar__cols,:host(.is-stacked) .dt-bar__density{display:none}:host(.is-stacked) .dt-sel{position:sticky;bottom:0;z-index:6;flex-wrap:wrap;border-top:1px solid var(--cad-border);order:99}:host(.is-stacked) .dt-scroll{overflow-x:hidden}:host(.is-stacked) .tbl,:host(.is-stacked) .tbl tbody,:host(.is-stacked) .tbl tfoot,:host(.is-stacked) .tbl tr,:host(.is-stacked) .tbl td{display:block}:host(.is-stacked) .tbl thead,:host(.is-stacked) .tbl colgroup,:host(.is-stacked) .tbl caption{display:none}:host(.is-stacked) .tbl tr.dt-row{position:relative;padding:10px 12px;border-bottom:1px solid var(--cad-border);height:auto}:host(.is-stacked) .tbl tr.dt-row.has-sel{padding-left:44px}:host(.is-stacked) .tbl tr.dt-row.is-selected{background:var(--cad-accent-soft);box-shadow:inset 3px 0 0 var(--cad-accent)}:host(.is-hoverable.is-stacked) .tbl tr.dt-row:hover{background:var(--cad-hover)}:host(.is-hoverable.is-stacked) .tbl tr.dt-row:hover td,:host(.is-stacked) .tbl tr.dt-row.is-selected td,:host(.is-striped.is-stacked) .tbl tr.dt-row td{background:transparent!important;box-shadow:none!important}:host(.is-stacked) .tbl tr.dt-row:focus-visible{box-shadow:inset 0 0 0 1px var(--cad-ring)}:host(.is-stacked) .tbl td{height:auto;padding:2px 0;border:0;white-space:normal;display:flex;justify-content:space-between;align-items:baseline;gap:12px;font-size:12.5px;position:static}:host(.is-stacked) .tbl td.st-left,:host(.is-stacked) .tbl td.st-right{position:static}:host(.is-stacked) .tbl td[data-l]:before{content:attr(data-l);color:var(--cad-fg-muted);font-size:11px;font-weight:500;text-transform:uppercase;letter-spacing:.04em;flex:none}:host(.is-stacked) .tbl td.col-sel{position:absolute;left:12px;top:12px;padding:0;width:auto}:host(.is-stacked) .tbl td.col-sel:before,:host(.is-stacked) .tbl td.col-exp:before,:host(.is-stacked) .tbl td.col-acts:before,:host(.is-stacked) .tbl td.dt-tree-cell:before,:host(.is-stacked) .tbl td.dt-first:before{content:none}:host(.is-stacked) .tbl td.col-exp{position:absolute;right:44px;top:8px;padding:0;width:auto}:host(.is-stacked) .tbl td.dt-first,:host(.is-stacked) .tbl td.dt-tree-cell{display:block;font-size:14px;font-weight:500;padding:0 44px 6px 0}:host(.is-stacked) .tbl td.dt-tree-cell .cad-tree-toggle .ind,:host(.is-stacked) .tbl td.dt-tree-cell .cad-tree-toggle .tl{display:none}:host(.is-stacked) .tbl td.col-acts{position:absolute;right:8px;top:8px;padding:0;width:auto}:host(.is-stacked) .tbl .acts{opacity:1}:host(.is-stacked) .tbl td.dt-num{text-align:right}:host(.is-stacked) .tbl tr.dt-detail td{padding:8px 12px 10px}:host(.is-stacked) .tbl tr.dt-row.lvl-1{margin-left:22px;border-left:2px solid var(--cad-border)}:host(.is-stacked) .tbl tr.dt-row.lvl-2{margin-left:44px;border-left:2px solid var(--cad-border)}:host(.is-stacked) .tbl tr.dt-row.lvl-3{margin-left:66px;border-left:2px solid var(--cad-border)}:host(.is-stacked) .tbl tr.dt-group td{padding:8px 12px;height:auto;display:block}:host(.is-stacked) .tbl tr.dt-group-foot{display:flex;flex-wrap:wrap;gap:4px 14px;padding:6px 12px 6px 44px}:host(.is-stacked) .tbl tr.dt-group-foot td{padding:0}:host(.is-stacked) .tbl tr.dt-group-foot td:empty{display:none}:host(.is-stacked) .tbl tfoot tr.dt-grand{padding:8px 12px}:host(.is-stacked) .tbl tfoot tr.dt-grand td:empty{display:none}:host(.is-stacked) .tbl tr.dt-empty td{display:block}:host(.is-stacked) .tbl tr.is-skeleton td{display:block;padding:4px 0}:host(.is-stacked) .tbl tr.dt-card td{padding:0;display:block}:host(.is-stacked) .dt-foot{flex-wrap:wrap;gap:8px}:host(.is-stacked) .dt-foot ::ng-deep .cad-paginator__rpp{display:none}\n", ".tbl th .dh{display:none;position:absolute;left:2px;top:50%;transform:translateY(-50%);width:14px;height:18px;color:var(--cad-fg-muted);cursor:grab;border-radius:3px;place-items:center}.tbl th .dh:hover{color:var(--cad-fg);background:var(--cad-elevated)}:host(.is-reorderable) .tbl th.can-drag{padding-left:calc(var(--_cell-px) + 6px)}:host(.is-reorderable) .tbl th.can-drag:hover .dh,:host(.is-reorderable) .tbl th.can-drag.cdk-drag-dragging .dh{display:grid}.tbl th.cdk-drag-placeholder{opacity:.35;background:var(--cad-accent-soft)}.tbl th.cdk-drag-placeholder:before{content:\"\";position:absolute;left:-1px;top:4px;bottom:4px;width:2px;background:var(--cad-accent)}.cdk-drag-preview.dt-th-preview{display:flex;align-items:center;height:38px;padding:0 12px;box-sizing:border-box;font:600 var(--cad-font-size-sm) var(--cad-font);color:var(--cad-fg);background:var(--cad-overlay);--cad-hover: var(--cad-overlay-hover);border:1px solid var(--cad-border);border-radius:6px;box-shadow:var(--cad-shadow-lg);list-style:none}.tbl thead tr.cdk-drop-list-dragging th:not(.cdk-drag-placeholder){transition:transform .2s cubic-bezier(0,0,.2,1)}.tbl th.cdk-drag-animating{transition:transform .2s cubic-bezier(0,0,.2,1)}.dt-bar__menu .mv{display:inline-flex;gap:0;margin-left:auto}.dt-bar__menu .mv button{border:0;background:transparent;color:var(--cad-fg-muted);width:20px;height:20px;border-radius:4px;cursor:pointer;display:grid;place-items:center;padding:0}.dt-bar__menu .mv button:hover:not([disabled]){background:var(--cad-hover);color:var(--cad-fg)}.dt-bar__menu .mv button[disabled]{opacity:.3;cursor:default}.tbl tr.hg th{height:30px;text-align:center;font:600 10.5px/1 var(--cad-font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--cad-fg-muted);border-bottom:1px solid var(--cad-border)}.tbl tr.hg th.hg-cell{border-left:1px solid var(--cad-border)}.tbl tr.hg th.hg-cell:first-child{border-left:0}:host(.is-sticky-header) .tbl tr.hg th{position:sticky;top:0;z-index:3}:host(.is-sticky-header) .tbl tr.hg+tr th{top:30px}.tbl tr.dt-vpad td{padding:0;border:0;height:auto}:host(.is-virtual) .dt-scroll{overflow-anchor:none}:host(.edit-cell) .tbl td.is-editable{cursor:text;position:relative}:host(.edit-cell.is-hoverable) .tbl tbody tr.dt-row td.is-editable:hover{background:var(--cad-hover);box-shadow:inset 0 0 0 1px var(--cad-border-strong)}:host(.show-edit-icon) .tbl td.is-editable{padding-right:calc(var(--_cell-px) + 16px)}.tbl td .ce{position:absolute;right:4px;top:50%;transform:translateY(-50%);width:20px;height:20px;border:0;border-radius:5px;background:transparent;color:var(--cad-fg-muted);display:grid;place-items:center;cursor:pointer;padding:0;opacity:0;transition:opacity var(--cad-dur),background var(--cad-dur)}.tbl td.is-editable:hover .ce,.tbl td .ce:focus-visible{opacity:.7}.tbl td .ce:hover{opacity:1!important;background:var(--cad-elevated);color:var(--cad-fg)}.tbl td.is-editing{padding-top:0;padding-bottom:0;background:var(--cad-surface)!important;box-shadow:none!important}.dt-editor{position:relative;display:flex;align-items:stretch;min-height:calc(var(--_row-h) - 8px);margin:4px 0}.tbl td.is-editing{height:auto;vertical-align:top}.dt-editor input,.dt-editor select,.dt-editor textarea{width:100%;height:calc(var(--_row-h) - 8px);box-sizing:border-box;padding:0 8px;font:var(--cad-font-size) var(--cad-font);color:var(--cad-fg);background:var(--cad-input-bg);border:1px solid var(--cad-accent);border-radius:var(--cad-radius-sm);outline:0;box-shadow:0 0 0 3px var(--cad-ring)}.dt-editor input[type=number]{font-family:var(--cad-font-mono);text-align:right}.dt-editor textarea{height:auto;min-height:76px;padding:6px 8px;resize:vertical;line-height:1.45;font:var(--cad-font-size)/1.45 var(--cad-font)}.dt-editor input[type=checkbox]{width:16px;height:16px;box-shadow:none;accent-color:var(--cad-accent)}.dt-editor.is-invalid input,.dt-editor.is-invalid select,.dt-editor.is-invalid textarea{border-color:var(--cad-danger);box-shadow:0 0 0 3px var(--cad-danger-soft)}.dt-editor__err{position:absolute;left:0;top:calc(100% + 4px);z-index:6;padding:3px 8px;border-radius:6px;background:var(--cad-danger);color:#fff;font-size:11px;white-space:nowrap;box-shadow:var(--cad-shadow-md);pointer-events:none}.dt-editor__err:before{content:\"\";position:absolute;left:10px;top:-4px;width:8px;height:8px;background:inherit;transform:rotate(45deg)}:host(.edit-row) .tbl tr.dt-row.is-editing-row td{background:var(--cad-accent-soft)}.tbl .acts .re{display:inline-grid;place-items:center;width:26px;height:26px;border:0;border-radius:6px;background:transparent;color:var(--cad-fg-secondary);cursor:pointer;padding:0}.tbl .acts .re:hover{background:var(--cad-hover);color:var(--cad-fg)}.tbl .acts .re.ok{color:var(--cad-success)}.tbl .acts .re.ko{color:var(--cad-danger)}.tbl .acts .re:focus-visible{outline:2px solid var(--cad-ring)}:host(.edit-row) .tbl tr.is-editing-row .acts{opacity:1}\n", ".dt-scroll{scrollbar-width:thin;scrollbar-color:var(--cad-border-strong) transparent}.dt-scroll::-webkit-scrollbar{height:10px;width:10px}.dt-scroll::-webkit-scrollbar-thumb{background:var(--cad-border-strong);border-radius:999px;border:2px solid var(--cad-surface)}.dt-scroll::-webkit-scrollbar-thumb:hover{background:var(--cad-fg-muted)}.dt-scroll::-webkit-scrollbar-track{background:transparent}.tbl th.has-menu{padding-right:calc(var(--_cell-px) + 20px)}.tbl th .hm{position:absolute;right:6px;top:50%;transform:translateY(-50%);width:22px;height:22px;border:0;border-radius:5px;background:transparent;color:var(--cad-fg-muted);display:grid;place-items:center;cursor:pointer;padding:0;opacity:0;transition:opacity var(--cad-dur),background var(--cad-dur);z-index:2}.tbl th:hover .hm,.tbl th .hm:focus-visible,.tbl th .hm.is-on,.tbl th.is-sorted .hm,.tbl th.is-filtered .hm{opacity:1}.tbl th .hm:hover,.tbl th .hm.is-on{background:var(--cad-elevated);color:var(--cad-fg)}.tbl th.is-filtered .hd-txt{color:var(--cad-accent)}:host(.is-resizable) .tbl th.has-menu .hm{right:10px}.tbl tr.flt th{padding:5px 6px}.flt-cell{position:relative;display:flex;align-items:center;gap:4px;min-width:0}.flt-cell input,.flt-cell select,.flt-cell .flt-in{flex:1 1 0;min-width:0;height:28px;padding:0 26px 0 8px;box-sizing:border-box;font:var(--cad-font-size-sm) var(--cad-font);color:var(--cad-fg);background:var(--cad-input-bg);border:1px solid var(--cad-input-border);border-radius:var(--cad-radius-sm);outline:0;transition:border-color var(--cad-dur),box-shadow var(--cad-dur)}.flt-cell.is-range input{padding-right:8px}.flt-cell.is-range input:last-of-type{padding-right:26px}.flt-cell input:focus,.flt-cell select:focus,.flt-cell .flt-in:focus-visible{border-color:var(--cad-accent);box-shadow:0 0 0 2px var(--cad-ring)}.flt-cell.is-active input,.flt-cell.is-active select,.flt-cell.is-active .flt-in{border-color:var(--cad-accent);background:var(--cad-accent-soft)}.flt-cell .flt-in{display:inline-flex;align-items:center;justify-content:space-between;gap:6px;text-align:left;cursor:pointer}.flt-cell .flt-in.is-ph{color:var(--cad-fg-muted)}.flt-cell .flt-in cad-icon{color:var(--cad-fg-muted);flex:none}.flt-cell .flt-txt{flex:1;height:28px;display:inline-flex;align-items:center;padding:0 26px 0 8px;font:italic var(--cad-font-size-sm) var(--cad-font);color:var(--cad-accent);background:var(--cad-accent-soft);border:1px solid var(--cad-accent);border-radius:var(--cad-radius-sm);box-sizing:border-box}.flt-cell .flt-op{position:absolute;right:4px;top:50%;transform:translateY(-50%);width:20px;height:20px;border:0;border-radius:4px;background:transparent;color:var(--cad-fg-muted);display:grid;place-items:center;cursor:pointer;padding:0}.flt-cell .flt-op:hover,.flt-cell .flt-op.is-on{color:var(--cad-accent);background:var(--cad-accent-soft)}.flt-cell.is-active .flt-op{right:22px}.flt-cell .flt-x{position:absolute;right:4px;top:50%;transform:translateY(-50%);width:18px;height:18px;border:0;border-radius:4px;background:transparent;color:var(--cad-fg-muted);display:grid;place-items:center;cursor:pointer;padding:0}.flt-cell .flt-x:hover{color:var(--cad-danger);background:var(--cad-danger-soft)}.flt-cell select{appearance:none;padding-right:26px}.dt-gz{display:flex;align-items:center;flex-wrap:wrap;gap:6px;min-height:40px;padding:6px 12px;border-bottom:1px solid var(--cad-border);background:var(--cad-bg-subtle);color:var(--cad-fg-muted);font-size:var(--cad-font-size-sm)}.dt-gz.cdk-drop-list-receiving,.dt-gz.cdk-drop-list-dragging{background:var(--cad-accent-soft);color:var(--cad-accent);outline:1px dashed var(--cad-accent);outline-offset:-4px}.dt-gz__hint{font-style:italic}.dt-gz__chip{display:inline-flex;align-items:center;gap:5px;height:26px;padding:0 4px 0 6px;border-radius:999px;background:var(--cad-accent-soft);color:var(--cad-accent);font-weight:500;cursor:grab}.dt-gz__chip .dt-gz__drag{opacity:.6}.dt-gz__chip button{width:18px;height:18px;border:0;border-radius:50%;background:transparent;color:inherit;display:grid;place-items:center;cursor:pointer;padding:0}.dt-gz__chip button:hover{background:var(--cad-accent);color:var(--cad-fg-on-accent)}.dt-gz__chip.cdk-drag-placeholder{opacity:.35}.cdk-drag-preview.dt-gz__chip{box-shadow:var(--cad-shadow-md)}:host(.is-stacked) .dt-gz{display:none}.tbl th.col-num,.tbl td.col-num{width:44px;text-align:right;font:11px var(--cad-font-mono);color:var(--cad-fg-muted);background:var(--cad-bg-subtle);padding:0 8px;-webkit-user-select:none;user-select:none}.tbl th.col-num{font-weight:600}.tbl tbody tr:hover td.col-num{background:var(--cad-bg-subtle)}:host(.is-stacked) .tbl td.col-num{position:absolute;left:auto;right:12px;bottom:6px;width:auto;background:transparent;padding:0}:host(.is-stacked) .tbl td.col-num:before{content:none}.tbl th.col-drag,.tbl td.col-drag{width:28px;padding:0 4px}.tbl td.col-drag .rdh{display:inline-grid;place-items:center;width:20px;height:24px;color:var(--cad-fg-muted);cursor:grab;opacity:0;transition:opacity var(--cad-dur);border-radius:4px}.tbl tbody tr:hover td.col-drag .rdh,.tbl tr.cdk-drag-dragging td.col-drag .rdh{opacity:.8}.tbl td.col-drag .rdh:hover{color:var(--cad-fg);background:var(--cad-elevated)}.tbl tr.dt-row.cdk-drag-placeholder{opacity:0}.tbl tbody.cdk-drop-list-dragging tr.dt-row:not(.cdk-drag-placeholder){transition:transform .2s cubic-bezier(0,0,.2,1)}.tbl tr.dt-row.cdk-drag-placeholder td{border-top:2px solid var(--cad-accent)}.cdk-drag-preview.dt-tr-preview{display:table;table-layout:fixed;box-sizing:border-box;background:var(--cad-overlay);--cad-hover: var(--cad-overlay-hover);border:1px solid var(--cad-border);border-radius:8px;box-shadow:var(--cad-shadow-lg);opacity:.95;font:var(--cad-font-size)/1.4 var(--cad-font);color:var(--cad-fg)}.cdk-drag-preview.dt-tr-preview td{padding:0 12px;height:42px;vertical-align:middle;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host(.is-stacked) .tbl td.col-drag{display:none}.dt-foot__count{font:var(--cad-font-size-sm) var(--cad-font-mono);color:var(--cad-fg-secondary);white-space:nowrap}.dt-foot.has-count cad-paginator{flex:1}\n"] }]
10688
10821
  }], ctorParameters: () => [], propDecorators: { scroller: [{ type: i0.ViewChild, args: ['scroller', { isSignal: true }] }], dtEl: [{ type: i0.ViewChild, args: ['dt', { isSignal: true }] }], headerMenu: [{ type: i0.ViewChild, args: ['hmenu', { isSignal: true }] }], filterMenu: [{ type: i0.ViewChild, args: ['fmenu', { isSignal: true }] }], inMenu: [{ type: i0.ViewChild, args: ['inmenu', { isSignal: true }] }] } });
10689
10822
 
10690
10823
  /** Template de nœud : `<ng-template cadTreeNode let-node let-row="row" let-level="level" let-selected="selected">`. */
@@ -11009,7 +11142,7 @@ const CAD_TABLE_PANEL_STYLES = `
11009
11142
  .col-row .dh.is-disabled { visibility: hidden; }
11010
11143
  .col-row .lbl { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
11011
11144
  .col-row .pin { color: var(--cad-fg-muted); }
11012
- .col-row.cdk-drag-preview { background: var(--cad-overlay); border: 1px solid var(--cad-border); box-shadow: var(--cad-shadow-lg); }
11145
+ .col-row.cdk-drag-preview { background: var(--cad-overlay); --cad-hover: var(--cad-overlay-hover); border: 1px solid var(--cad-border); box-shadow: var(--cad-shadow-lg); }
11013
11146
  .col-row.cdk-drag-placeholder { opacity: .3; }
11014
11147
  .cols.cdk-drop-list-dragging .col-row:not(.cdk-drag-placeholder) { transition: transform 180ms cubic-bezier(0,0,.2,1); }
11015
11148
  .all-row { display: flex; align-items: center; gap: 6px; height: 28px; padding: 0 4px; margin-bottom: 4px; }
@@ -11381,7 +11514,7 @@ class CadTablePanelComponent {
11381
11514
  @if (!aggsWritable()) {<div class="empty">Note : <code>aggregates</code> n'est pas un model sur cette table — écoutez <code>(aggregatesChange)</code>.</div>}
11382
11515
  </div>
11383
11516
  </ng-template>
11384
- `, isInline: true, styles: [":host{display:flex;align-items:stretch;height:100%;min-height:0;font:var(--cad-font-size)/1.4 var(--cad-font);color:var(--cad-fg);position:relative}:host(.pos-left){flex-direction:row-reverse}.rail{display:flex;flex-direction:column;gap:2px;width:34px;padding:6px 0;background:var(--cad-bg-subtle);border-left:1px solid var(--cad-border);flex:none}:host(.pos-left) .rail{border-left:0;border-right:1px solid var(--cad-border)}.rail button{all:unset;display:flex;flex-direction:column;align-items:center;gap:6px;padding:10px 0;cursor:pointer;color:var(--cad-fg-secondary);border-radius:6px;margin:0 4px;writing-mode:vertical-rl;font-size:11.5px;font-weight:500;letter-spacing:.02em}.rail button cad-icon{writing-mode:horizontal-tb}.rail button:hover{background:var(--cad-hover);color:var(--cad-fg)}.rail button.is-active{background:var(--cad-accent-soft);color:var(--cad-accent)}.rail button:focus-visible{outline:2px solid var(--cad-ring)}.body{width:var(--_w, 260px);min-width:0;background:var(--cad-bg-subtle);border-left:1px solid var(--cad-border);display:flex;flex-direction:column;overflow:hidden}:host(.pos-left) .body{border-left:0;border-right:1px solid var(--cad-border)}:host(:not(.is-open)) .body{display:none}.body__scroll{flex:1;overflow-y:auto;overflow-x:hidden;scrollbar-width:thin;scrollbar-color:var(--cad-border-strong) transparent}.sec{padding:10px 12px 12px;border-bottom:1px solid var(--cad-border)}.sec:last-child{border-bottom:0}.sec__ttl{display:flex;align-items:center;gap:6px;font:600 10.5px/1 var(--cad-font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--cad-fg-muted);margin:0 0 8px}.sec__ttl .grow{flex:1}.sec__ttl button.lnk{all:unset;cursor:pointer;color:var(--cad-accent);font:500 11px var(--cad-font);text-transform:none;letter-spacing:0}.sec__ttl button.lnk:hover{text-decoration:underline}.srch{display:flex;align-items:center;gap:6px;height:28px;padding:0 8px;background:var(--cad-input-bg);border:1px solid var(--cad-input-border);border-radius:var(--cad-radius-sm);margin-bottom:8px;color:var(--cad-fg-muted)}.srch:focus-within{border-color:var(--cad-accent);box-shadow:0 0 0 3px var(--cad-ring)}.srch input{flex:1 1 0;width:0;min-width:0;border:0;outline:0;background:transparent;color:var(--cad-fg);font:var(--cad-font-size-sm) var(--cad-font)}.srch input::placeholder{color:var(--cad-fg-muted)}.cols{display:flex;flex-direction:column;gap:1px}.col-row{display:flex;align-items:center;gap:6px;height:28px;padding:0 4px;border-radius:6px;font-size:12.5px}.col-row:hover{background:var(--cad-hover)}.col-row.is-off{color:var(--cad-fg-muted)}.col-row .dh{display:grid;place-items:center;width:16px;height:20px;color:var(--cad-fg-muted);cursor:grab;flex:none;border-radius:3px}.col-row .dh:hover{color:var(--cad-fg);background:var(--cad-elevated)}.col-row .dh.is-disabled{visibility:hidden}.col-row .lbl{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.col-row .pin{color:var(--cad-fg-muted)}.col-row.cdk-drag-preview{background:var(--cad-overlay);border:1px solid var(--cad-border);box-shadow:var(--cad-shadow-lg)}.col-row.cdk-drag-placeholder{opacity:.3}.cols.cdk-drop-list-dragging .col-row:not(.cdk-drag-placeholder){transition:transform .18s cubic-bezier(0,0,.2,1)}.all-row{display:flex;align-items:center;gap:6px;height:28px;padding:0 4px;margin-bottom:4px}.all-row .cnt{margin-left:auto;font:500 10.5px var(--cad-font-mono);color:var(--cad-fg-muted)}.drop{min-height:40px;border:1px dashed var(--cad-border-strong);border-radius:8px;padding:6px;display:flex;flex-wrap:wrap;gap:6px;align-items:center;color:var(--cad-fg-muted);font-size:12px;transition:border-color var(--cad-dur),background var(--cad-dur)}.drop.cdk-drop-list-receiving,.drop.cdk-drop-list-dragging{border-color:var(--cad-accent);background:var(--cad-accent-soft)}.drop .hint{display:inline-flex;align-items:center;gap:6px;padding:0 4px}.chip{display:inline-flex;align-items:center;gap:4px;height:24px;padding:0 6px 0 8px;border-radius:999px;background:var(--cad-elevated);color:var(--cad-fg);font-size:12px;white-space:nowrap}.chip .dh{display:grid;place-items:center;width:12px;color:var(--cad-fg-muted);cursor:grab}.chip .fn{font:500 11px var(--cad-font-mono);color:var(--cad-fg-secondary)}.chip button{all:unset;display:grid;place-items:center;width:16px;height:16px;border-radius:50%;color:var(--cad-fg-muted);cursor:pointer}.chip button:hover{background:var(--cad-hover);color:var(--cad-fg)}.chip.cdk-drag-preview{box-shadow:var(--cad-shadow-lg)}.chip.cdk-drag-placeholder{opacity:.3}.add{all:unset;display:inline-flex;align-items:center;gap:4px;height:24px;padding:0 8px;border-radius:999px;border:1px dashed var(--cad-border-strong);color:var(--cad-fg-secondary);font-size:12px;cursor:pointer}.add:hover{border-color:var(--cad-accent);color:var(--cad-accent)}.picker{display:grid;gap:6px;padding:8px;margin-top:8px;border:1px solid var(--cad-border);border-radius:8px;background:var(--cad-surface)}.picker .row{display:flex;gap:6px}.flt{border:1px solid var(--cad-border);border-radius:8px;background:var(--cad-surface);margin-bottom:6px;overflow:hidden}.flt__hd{display:flex;align-items:center;gap:6px;height:30px;padding:0 8px;cursor:pointer;font-size:12.5px;-webkit-user-select:none;user-select:none}.flt__hd:hover{background:var(--cad-hover)}.flt__hd .chev{color:var(--cad-fg-muted);transition:transform var(--cad-dur)}.flt.is-open .flt__hd .chev{transform:rotate(90deg)}.flt__hd .lbl{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.flt__hd .on{font:600 10px var(--cad-font-mono);padding:1px 6px;border-radius:999px;background:var(--cad-accent-soft);color:var(--cad-accent)}.flt__hd .clr{all:unset;display:grid;place-items:center;width:18px;height:18px;border-radius:4px;color:var(--cad-fg-muted);cursor:pointer}.flt__hd .clr:hover{background:var(--cad-hover);color:var(--cad-fg)}.flt__bd{display:grid;gap:6px;padding:4px 8px 10px}.flt__bd .two{display:grid;grid-template-columns:1fr 1fr;gap:6px}.opts{max-height:160px;overflow:auto;display:grid;gap:2px}.opts label{display:flex;align-items:center;gap:6px;height:24px;font-size:12.5px}.empty{color:var(--cad-fg-muted);font-size:12px;padding:4px 0}:host(.is-overlay){position:absolute;top:0;right:0;bottom:0;z-index:20}:host(.is-overlay.is-open) .body{box-shadow:var(--cad-shadow-lg)}:host(.is-overlay.pos-left){right:auto;left:0}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: CadIconComponent, selector: "cad-icon", inputs: ["name", "size", "strokeWidth", "label", "title", "spin", "filled", "flip", "rotate"] }, { kind: "component", type: CadButtonComponent, selector: "button[cadButton], a[cadButton]", inputs: ["severity", "variant", "size", "loading", "disabled", "icon", "block", "value", "pressed"] }, { kind: "component", type: CadCheckboxComponent, selector: "cad-checkbox", inputs: ["label", "ariaLabel", "indeterminate", "invalid", "readonly"], outputs: ["indeterminateChange", "changed"] }, { kind: "component", type: CadSegmentedComponent, selector: "cad-segmented", inputs: ["options", "optionLabel", "optionValue", "multiple", "allowEmpty", "block", "size", "shape", "ariaLabel"], outputs: ["changed"] }, { kind: "component", type: CadSelectComponent, selector: "cad-select", outputs: ["changed"] }, { kind: "component", type: CadNumberComponent, selector: "cad-number", inputs: ["min", "max", "step", "decimals", "locale", "prefix", "suffix", "placeholder", "showButtons", "readonly", "invalid", "size"], outputs: ["changed", "focusChange"] }, { kind: "component", type: CadDatepickerComponent, selector: "cad-datepicker", inputs: ["mode", "selectionMode", "dataType", "format", "placeholder", "min", "max", "disabledDates", "disabledDays", "showIcon", "inline", "showTime", "hourFormat", "stepMinute", "showSeconds", "showButtonBar", "showWeek", "firstDayOfWeek", "locale", "readonlyInput", "manualInput", "clearable", "size", "invalid", "closeOnSelect", "mobile"], outputs: ["changed", "opened", "closed", "monthChange", "yearChange", "cleared", "todayClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
11517
+ `, isInline: true, styles: [":host{display:flex;align-items:stretch;height:100%;min-height:0;font:var(--cad-font-size)/1.4 var(--cad-font);color:var(--cad-fg);position:relative}:host(.pos-left){flex-direction:row-reverse}.rail{display:flex;flex-direction:column;gap:2px;width:34px;padding:6px 0;background:var(--cad-bg-subtle);border-left:1px solid var(--cad-border);flex:none}:host(.pos-left) .rail{border-left:0;border-right:1px solid var(--cad-border)}.rail button{all:unset;display:flex;flex-direction:column;align-items:center;gap:6px;padding:10px 0;cursor:pointer;color:var(--cad-fg-secondary);border-radius:6px;margin:0 4px;writing-mode:vertical-rl;font-size:11.5px;font-weight:500;letter-spacing:.02em}.rail button cad-icon{writing-mode:horizontal-tb}.rail button:hover{background:var(--cad-hover);color:var(--cad-fg)}.rail button.is-active{background:var(--cad-accent-soft);color:var(--cad-accent)}.rail button:focus-visible{outline:2px solid var(--cad-ring)}.body{width:var(--_w, 260px);min-width:0;background:var(--cad-bg-subtle);border-left:1px solid var(--cad-border);display:flex;flex-direction:column;overflow:hidden}:host(.pos-left) .body{border-left:0;border-right:1px solid var(--cad-border)}:host(:not(.is-open)) .body{display:none}.body__scroll{flex:1;overflow-y:auto;overflow-x:hidden;scrollbar-width:thin;scrollbar-color:var(--cad-border-strong) transparent}.sec{padding:10px 12px 12px;border-bottom:1px solid var(--cad-border)}.sec:last-child{border-bottom:0}.sec__ttl{display:flex;align-items:center;gap:6px;font:600 10.5px/1 var(--cad-font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--cad-fg-muted);margin:0 0 8px}.sec__ttl .grow{flex:1}.sec__ttl button.lnk{all:unset;cursor:pointer;color:var(--cad-accent);font:500 11px var(--cad-font);text-transform:none;letter-spacing:0}.sec__ttl button.lnk:hover{text-decoration:underline}.srch{display:flex;align-items:center;gap:6px;height:28px;padding:0 8px;background:var(--cad-input-bg);border:1px solid var(--cad-input-border);border-radius:var(--cad-radius-sm);margin-bottom:8px;color:var(--cad-fg-muted)}.srch:focus-within{border-color:var(--cad-accent);box-shadow:0 0 0 3px var(--cad-ring)}.srch input{flex:1 1 0;width:0;min-width:0;border:0;outline:0;background:transparent;color:var(--cad-fg);font:var(--cad-font-size-sm) var(--cad-font)}.srch input::placeholder{color:var(--cad-fg-muted)}.cols{display:flex;flex-direction:column;gap:1px}.col-row{display:flex;align-items:center;gap:6px;height:28px;padding:0 4px;border-radius:6px;font-size:12.5px}.col-row:hover{background:var(--cad-hover)}.col-row.is-off{color:var(--cad-fg-muted)}.col-row .dh{display:grid;place-items:center;width:16px;height:20px;color:var(--cad-fg-muted);cursor:grab;flex:none;border-radius:3px}.col-row .dh:hover{color:var(--cad-fg);background:var(--cad-elevated)}.col-row .dh.is-disabled{visibility:hidden}.col-row .lbl{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.col-row .pin{color:var(--cad-fg-muted)}.col-row.cdk-drag-preview{background:var(--cad-overlay);--cad-hover: var(--cad-overlay-hover);border:1px solid var(--cad-border);box-shadow:var(--cad-shadow-lg)}.col-row.cdk-drag-placeholder{opacity:.3}.cols.cdk-drop-list-dragging .col-row:not(.cdk-drag-placeholder){transition:transform .18s cubic-bezier(0,0,.2,1)}.all-row{display:flex;align-items:center;gap:6px;height:28px;padding:0 4px;margin-bottom:4px}.all-row .cnt{margin-left:auto;font:500 10.5px var(--cad-font-mono);color:var(--cad-fg-muted)}.drop{min-height:40px;border:1px dashed var(--cad-border-strong);border-radius:8px;padding:6px;display:flex;flex-wrap:wrap;gap:6px;align-items:center;color:var(--cad-fg-muted);font-size:12px;transition:border-color var(--cad-dur),background var(--cad-dur)}.drop.cdk-drop-list-receiving,.drop.cdk-drop-list-dragging{border-color:var(--cad-accent);background:var(--cad-accent-soft)}.drop .hint{display:inline-flex;align-items:center;gap:6px;padding:0 4px}.chip{display:inline-flex;align-items:center;gap:4px;height:24px;padding:0 6px 0 8px;border-radius:999px;background:var(--cad-elevated);color:var(--cad-fg);font-size:12px;white-space:nowrap}.chip .dh{display:grid;place-items:center;width:12px;color:var(--cad-fg-muted);cursor:grab}.chip .fn{font:500 11px var(--cad-font-mono);color:var(--cad-fg-secondary)}.chip button{all:unset;display:grid;place-items:center;width:16px;height:16px;border-radius:50%;color:var(--cad-fg-muted);cursor:pointer}.chip button:hover{background:var(--cad-hover);color:var(--cad-fg)}.chip.cdk-drag-preview{box-shadow:var(--cad-shadow-lg)}.chip.cdk-drag-placeholder{opacity:.3}.add{all:unset;display:inline-flex;align-items:center;gap:4px;height:24px;padding:0 8px;border-radius:999px;border:1px dashed var(--cad-border-strong);color:var(--cad-fg-secondary);font-size:12px;cursor:pointer}.add:hover{border-color:var(--cad-accent);color:var(--cad-accent)}.picker{display:grid;gap:6px;padding:8px;margin-top:8px;border:1px solid var(--cad-border);border-radius:8px;background:var(--cad-surface)}.picker .row{display:flex;gap:6px}.flt{border:1px solid var(--cad-border);border-radius:8px;background:var(--cad-surface);margin-bottom:6px;overflow:hidden}.flt__hd{display:flex;align-items:center;gap:6px;height:30px;padding:0 8px;cursor:pointer;font-size:12.5px;-webkit-user-select:none;user-select:none}.flt__hd:hover{background:var(--cad-hover)}.flt__hd .chev{color:var(--cad-fg-muted);transition:transform var(--cad-dur)}.flt.is-open .flt__hd .chev{transform:rotate(90deg)}.flt__hd .lbl{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.flt__hd .on{font:600 10px var(--cad-font-mono);padding:1px 6px;border-radius:999px;background:var(--cad-accent-soft);color:var(--cad-accent)}.flt__hd .clr{all:unset;display:grid;place-items:center;width:18px;height:18px;border-radius:4px;color:var(--cad-fg-muted);cursor:pointer}.flt__hd .clr:hover{background:var(--cad-hover);color:var(--cad-fg)}.flt__bd{display:grid;gap:6px;padding:4px 8px 10px}.flt__bd .two{display:grid;grid-template-columns:1fr 1fr;gap:6px}.opts{max-height:160px;overflow:auto;display:grid;gap:2px}.opts label{display:flex;align-items:center;gap:6px;height:24px;font-size:12.5px}.empty{color:var(--cad-fg-muted);font-size:12px;padding:4px 0}:host(.is-overlay){position:absolute;top:0;right:0;bottom:0;z-index:20}:host(.is-overlay.is-open) .body{box-shadow:var(--cad-shadow-lg)}:host(.is-overlay.pos-left){right:auto;left:0}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: CadIconComponent, selector: "cad-icon", inputs: ["name", "size", "strokeWidth", "label", "title", "spin", "filled", "flip", "rotate"] }, { kind: "component", type: CadButtonComponent, selector: "button[cadButton], a[cadButton]", inputs: ["severity", "variant", "size", "loading", "disabled", "icon", "block", "value", "pressed"] }, { kind: "component", type: CadCheckboxComponent, selector: "cad-checkbox", inputs: ["label", "ariaLabel", "indeterminate", "invalid", "readonly"], outputs: ["indeterminateChange", "changed"] }, { kind: "component", type: CadSegmentedComponent, selector: "cad-segmented", inputs: ["options", "optionLabel", "optionValue", "multiple", "allowEmpty", "block", "size", "shape", "ariaLabel"], outputs: ["changed"] }, { kind: "component", type: CadSelectComponent, selector: "cad-select", outputs: ["changed"] }, { kind: "component", type: CadNumberComponent, selector: "cad-number", inputs: ["min", "max", "step", "decimals", "locale", "prefix", "suffix", "placeholder", "showButtons", "readonly", "invalid", "size"], outputs: ["changed", "focusChange"] }, { kind: "component", type: CadDatepickerComponent, selector: "cad-datepicker", inputs: ["mode", "selectionMode", "dataType", "format", "placeholder", "min", "max", "disabledDates", "disabledDays", "showIcon", "inline", "showTime", "hourFormat", "stepMinute", "showSeconds", "showButtonBar", "showWeek", "firstDayOfWeek", "locale", "readonlyInput", "manualInput", "clearable", "size", "invalid", "closeOnSelect", "mobile"], outputs: ["changed", "opened", "closed", "monthChange", "yearChange", "cleared", "todayClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
11385
11518
  }
11386
11519
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: CadTablePanelComponent, decorators: [{
11387
11520
  type: Component,
@@ -11512,7 +11645,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImpo
11512
11645
  @if (!aggsWritable()) {<div class="empty">Note : <code>aggregates</code> n'est pas un model sur cette table — écoutez <code>(aggregatesChange)</code>.</div>}
11513
11646
  </div>
11514
11647
  </ng-template>
11515
- `, styles: [":host{display:flex;align-items:stretch;height:100%;min-height:0;font:var(--cad-font-size)/1.4 var(--cad-font);color:var(--cad-fg);position:relative}:host(.pos-left){flex-direction:row-reverse}.rail{display:flex;flex-direction:column;gap:2px;width:34px;padding:6px 0;background:var(--cad-bg-subtle);border-left:1px solid var(--cad-border);flex:none}:host(.pos-left) .rail{border-left:0;border-right:1px solid var(--cad-border)}.rail button{all:unset;display:flex;flex-direction:column;align-items:center;gap:6px;padding:10px 0;cursor:pointer;color:var(--cad-fg-secondary);border-radius:6px;margin:0 4px;writing-mode:vertical-rl;font-size:11.5px;font-weight:500;letter-spacing:.02em}.rail button cad-icon{writing-mode:horizontal-tb}.rail button:hover{background:var(--cad-hover);color:var(--cad-fg)}.rail button.is-active{background:var(--cad-accent-soft);color:var(--cad-accent)}.rail button:focus-visible{outline:2px solid var(--cad-ring)}.body{width:var(--_w, 260px);min-width:0;background:var(--cad-bg-subtle);border-left:1px solid var(--cad-border);display:flex;flex-direction:column;overflow:hidden}:host(.pos-left) .body{border-left:0;border-right:1px solid var(--cad-border)}:host(:not(.is-open)) .body{display:none}.body__scroll{flex:1;overflow-y:auto;overflow-x:hidden;scrollbar-width:thin;scrollbar-color:var(--cad-border-strong) transparent}.sec{padding:10px 12px 12px;border-bottom:1px solid var(--cad-border)}.sec:last-child{border-bottom:0}.sec__ttl{display:flex;align-items:center;gap:6px;font:600 10.5px/1 var(--cad-font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--cad-fg-muted);margin:0 0 8px}.sec__ttl .grow{flex:1}.sec__ttl button.lnk{all:unset;cursor:pointer;color:var(--cad-accent);font:500 11px var(--cad-font);text-transform:none;letter-spacing:0}.sec__ttl button.lnk:hover{text-decoration:underline}.srch{display:flex;align-items:center;gap:6px;height:28px;padding:0 8px;background:var(--cad-input-bg);border:1px solid var(--cad-input-border);border-radius:var(--cad-radius-sm);margin-bottom:8px;color:var(--cad-fg-muted)}.srch:focus-within{border-color:var(--cad-accent);box-shadow:0 0 0 3px var(--cad-ring)}.srch input{flex:1 1 0;width:0;min-width:0;border:0;outline:0;background:transparent;color:var(--cad-fg);font:var(--cad-font-size-sm) var(--cad-font)}.srch input::placeholder{color:var(--cad-fg-muted)}.cols{display:flex;flex-direction:column;gap:1px}.col-row{display:flex;align-items:center;gap:6px;height:28px;padding:0 4px;border-radius:6px;font-size:12.5px}.col-row:hover{background:var(--cad-hover)}.col-row.is-off{color:var(--cad-fg-muted)}.col-row .dh{display:grid;place-items:center;width:16px;height:20px;color:var(--cad-fg-muted);cursor:grab;flex:none;border-radius:3px}.col-row .dh:hover{color:var(--cad-fg);background:var(--cad-elevated)}.col-row .dh.is-disabled{visibility:hidden}.col-row .lbl{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.col-row .pin{color:var(--cad-fg-muted)}.col-row.cdk-drag-preview{background:var(--cad-overlay);border:1px solid var(--cad-border);box-shadow:var(--cad-shadow-lg)}.col-row.cdk-drag-placeholder{opacity:.3}.cols.cdk-drop-list-dragging .col-row:not(.cdk-drag-placeholder){transition:transform .18s cubic-bezier(0,0,.2,1)}.all-row{display:flex;align-items:center;gap:6px;height:28px;padding:0 4px;margin-bottom:4px}.all-row .cnt{margin-left:auto;font:500 10.5px var(--cad-font-mono);color:var(--cad-fg-muted)}.drop{min-height:40px;border:1px dashed var(--cad-border-strong);border-radius:8px;padding:6px;display:flex;flex-wrap:wrap;gap:6px;align-items:center;color:var(--cad-fg-muted);font-size:12px;transition:border-color var(--cad-dur),background var(--cad-dur)}.drop.cdk-drop-list-receiving,.drop.cdk-drop-list-dragging{border-color:var(--cad-accent);background:var(--cad-accent-soft)}.drop .hint{display:inline-flex;align-items:center;gap:6px;padding:0 4px}.chip{display:inline-flex;align-items:center;gap:4px;height:24px;padding:0 6px 0 8px;border-radius:999px;background:var(--cad-elevated);color:var(--cad-fg);font-size:12px;white-space:nowrap}.chip .dh{display:grid;place-items:center;width:12px;color:var(--cad-fg-muted);cursor:grab}.chip .fn{font:500 11px var(--cad-font-mono);color:var(--cad-fg-secondary)}.chip button{all:unset;display:grid;place-items:center;width:16px;height:16px;border-radius:50%;color:var(--cad-fg-muted);cursor:pointer}.chip button:hover{background:var(--cad-hover);color:var(--cad-fg)}.chip.cdk-drag-preview{box-shadow:var(--cad-shadow-lg)}.chip.cdk-drag-placeholder{opacity:.3}.add{all:unset;display:inline-flex;align-items:center;gap:4px;height:24px;padding:0 8px;border-radius:999px;border:1px dashed var(--cad-border-strong);color:var(--cad-fg-secondary);font-size:12px;cursor:pointer}.add:hover{border-color:var(--cad-accent);color:var(--cad-accent)}.picker{display:grid;gap:6px;padding:8px;margin-top:8px;border:1px solid var(--cad-border);border-radius:8px;background:var(--cad-surface)}.picker .row{display:flex;gap:6px}.flt{border:1px solid var(--cad-border);border-radius:8px;background:var(--cad-surface);margin-bottom:6px;overflow:hidden}.flt__hd{display:flex;align-items:center;gap:6px;height:30px;padding:0 8px;cursor:pointer;font-size:12.5px;-webkit-user-select:none;user-select:none}.flt__hd:hover{background:var(--cad-hover)}.flt__hd .chev{color:var(--cad-fg-muted);transition:transform var(--cad-dur)}.flt.is-open .flt__hd .chev{transform:rotate(90deg)}.flt__hd .lbl{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.flt__hd .on{font:600 10px var(--cad-font-mono);padding:1px 6px;border-radius:999px;background:var(--cad-accent-soft);color:var(--cad-accent)}.flt__hd .clr{all:unset;display:grid;place-items:center;width:18px;height:18px;border-radius:4px;color:var(--cad-fg-muted);cursor:pointer}.flt__hd .clr:hover{background:var(--cad-hover);color:var(--cad-fg)}.flt__bd{display:grid;gap:6px;padding:4px 8px 10px}.flt__bd .two{display:grid;grid-template-columns:1fr 1fr;gap:6px}.opts{max-height:160px;overflow:auto;display:grid;gap:2px}.opts label{display:flex;align-items:center;gap:6px;height:24px;font-size:12.5px}.empty{color:var(--cad-fg-muted);font-size:12px;padding:4px 0}:host(.is-overlay){position:absolute;top:0;right:0;bottom:0;z-index:20}:host(.is-overlay.is-open) .body{box-shadow:var(--cad-shadow-lg)}:host(.is-overlay.pos-left){right:auto;left:0}\n"] }]
11648
+ `, styles: [":host{display:flex;align-items:stretch;height:100%;min-height:0;font:var(--cad-font-size)/1.4 var(--cad-font);color:var(--cad-fg);position:relative}:host(.pos-left){flex-direction:row-reverse}.rail{display:flex;flex-direction:column;gap:2px;width:34px;padding:6px 0;background:var(--cad-bg-subtle);border-left:1px solid var(--cad-border);flex:none}:host(.pos-left) .rail{border-left:0;border-right:1px solid var(--cad-border)}.rail button{all:unset;display:flex;flex-direction:column;align-items:center;gap:6px;padding:10px 0;cursor:pointer;color:var(--cad-fg-secondary);border-radius:6px;margin:0 4px;writing-mode:vertical-rl;font-size:11.5px;font-weight:500;letter-spacing:.02em}.rail button cad-icon{writing-mode:horizontal-tb}.rail button:hover{background:var(--cad-hover);color:var(--cad-fg)}.rail button.is-active{background:var(--cad-accent-soft);color:var(--cad-accent)}.rail button:focus-visible{outline:2px solid var(--cad-ring)}.body{width:var(--_w, 260px);min-width:0;background:var(--cad-bg-subtle);border-left:1px solid var(--cad-border);display:flex;flex-direction:column;overflow:hidden}:host(.pos-left) .body{border-left:0;border-right:1px solid var(--cad-border)}:host(:not(.is-open)) .body{display:none}.body__scroll{flex:1;overflow-y:auto;overflow-x:hidden;scrollbar-width:thin;scrollbar-color:var(--cad-border-strong) transparent}.sec{padding:10px 12px 12px;border-bottom:1px solid var(--cad-border)}.sec:last-child{border-bottom:0}.sec__ttl{display:flex;align-items:center;gap:6px;font:600 10.5px/1 var(--cad-font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--cad-fg-muted);margin:0 0 8px}.sec__ttl .grow{flex:1}.sec__ttl button.lnk{all:unset;cursor:pointer;color:var(--cad-accent);font:500 11px var(--cad-font);text-transform:none;letter-spacing:0}.sec__ttl button.lnk:hover{text-decoration:underline}.srch{display:flex;align-items:center;gap:6px;height:28px;padding:0 8px;background:var(--cad-input-bg);border:1px solid var(--cad-input-border);border-radius:var(--cad-radius-sm);margin-bottom:8px;color:var(--cad-fg-muted)}.srch:focus-within{border-color:var(--cad-accent);box-shadow:0 0 0 3px var(--cad-ring)}.srch input{flex:1 1 0;width:0;min-width:0;border:0;outline:0;background:transparent;color:var(--cad-fg);font:var(--cad-font-size-sm) var(--cad-font)}.srch input::placeholder{color:var(--cad-fg-muted)}.cols{display:flex;flex-direction:column;gap:1px}.col-row{display:flex;align-items:center;gap:6px;height:28px;padding:0 4px;border-radius:6px;font-size:12.5px}.col-row:hover{background:var(--cad-hover)}.col-row.is-off{color:var(--cad-fg-muted)}.col-row .dh{display:grid;place-items:center;width:16px;height:20px;color:var(--cad-fg-muted);cursor:grab;flex:none;border-radius:3px}.col-row .dh:hover{color:var(--cad-fg);background:var(--cad-elevated)}.col-row .dh.is-disabled{visibility:hidden}.col-row .lbl{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.col-row .pin{color:var(--cad-fg-muted)}.col-row.cdk-drag-preview{background:var(--cad-overlay);--cad-hover: var(--cad-overlay-hover);border:1px solid var(--cad-border);box-shadow:var(--cad-shadow-lg)}.col-row.cdk-drag-placeholder{opacity:.3}.cols.cdk-drop-list-dragging .col-row:not(.cdk-drag-placeholder){transition:transform .18s cubic-bezier(0,0,.2,1)}.all-row{display:flex;align-items:center;gap:6px;height:28px;padding:0 4px;margin-bottom:4px}.all-row .cnt{margin-left:auto;font:500 10.5px var(--cad-font-mono);color:var(--cad-fg-muted)}.drop{min-height:40px;border:1px dashed var(--cad-border-strong);border-radius:8px;padding:6px;display:flex;flex-wrap:wrap;gap:6px;align-items:center;color:var(--cad-fg-muted);font-size:12px;transition:border-color var(--cad-dur),background var(--cad-dur)}.drop.cdk-drop-list-receiving,.drop.cdk-drop-list-dragging{border-color:var(--cad-accent);background:var(--cad-accent-soft)}.drop .hint{display:inline-flex;align-items:center;gap:6px;padding:0 4px}.chip{display:inline-flex;align-items:center;gap:4px;height:24px;padding:0 6px 0 8px;border-radius:999px;background:var(--cad-elevated);color:var(--cad-fg);font-size:12px;white-space:nowrap}.chip .dh{display:grid;place-items:center;width:12px;color:var(--cad-fg-muted);cursor:grab}.chip .fn{font:500 11px var(--cad-font-mono);color:var(--cad-fg-secondary)}.chip button{all:unset;display:grid;place-items:center;width:16px;height:16px;border-radius:50%;color:var(--cad-fg-muted);cursor:pointer}.chip button:hover{background:var(--cad-hover);color:var(--cad-fg)}.chip.cdk-drag-preview{box-shadow:var(--cad-shadow-lg)}.chip.cdk-drag-placeholder{opacity:.3}.add{all:unset;display:inline-flex;align-items:center;gap:4px;height:24px;padding:0 8px;border-radius:999px;border:1px dashed var(--cad-border-strong);color:var(--cad-fg-secondary);font-size:12px;cursor:pointer}.add:hover{border-color:var(--cad-accent);color:var(--cad-accent)}.picker{display:grid;gap:6px;padding:8px;margin-top:8px;border:1px solid var(--cad-border);border-radius:8px;background:var(--cad-surface)}.picker .row{display:flex;gap:6px}.flt{border:1px solid var(--cad-border);border-radius:8px;background:var(--cad-surface);margin-bottom:6px;overflow:hidden}.flt__hd{display:flex;align-items:center;gap:6px;height:30px;padding:0 8px;cursor:pointer;font-size:12.5px;-webkit-user-select:none;user-select:none}.flt__hd:hover{background:var(--cad-hover)}.flt__hd .chev{color:var(--cad-fg-muted);transition:transform var(--cad-dur)}.flt.is-open .flt__hd .chev{transform:rotate(90deg)}.flt__hd .lbl{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.flt__hd .on{font:600 10px var(--cad-font-mono);padding:1px 6px;border-radius:999px;background:var(--cad-accent-soft);color:var(--cad-accent)}.flt__hd .clr{all:unset;display:grid;place-items:center;width:18px;height:18px;border-radius:4px;color:var(--cad-fg-muted);cursor:pointer}.flt__hd .clr:hover{background:var(--cad-hover);color:var(--cad-fg)}.flt__bd{display:grid;gap:6px;padding:4px 8px 10px}.flt__bd .two{display:grid;grid-template-columns:1fr 1fr;gap:6px}.opts{max-height:160px;overflow:auto;display:grid;gap:2px}.opts label{display:flex;align-items:center;gap:6px;height:24px;font-size:12.5px}.empty{color:var(--cad-fg-muted);font-size:12px;padding:4px 0}:host(.is-overlay){position:absolute;top:0;right:0;bottom:0;z-index:20}:host(.is-overlay.is-open) .body{box-shadow:var(--cad-shadow-lg)}:host(.is-overlay.pos-left){right:auto;left:0}\n"] }]
11516
11649
  }], ctorParameters: () => [], propDecorators: { table: [{ type: i0.Input, args: [{ isSignal: true, alias: "table", required: true }] }], tabs: [{ type: i0.Input, args: [{ isSignal: true, alias: "tabs", required: false }] }], position: [{ type: i0.Input, args: [{ isSignal: true, alias: "position", required: false }] }], open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }, { type: i0.Output, args: ["openChange"] }], activeTab: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeTab", required: false }] }, { type: i0.Output, args: ["activeTabChange"] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], collapsible: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapsible", required: false }] }], overlayBelow: [{ type: i0.Input, args: [{ isSignal: true, alias: "overlayBelow", required: false }] }], columnsChange: [{ type: i0.Output, args: ["columnsChange"] }], groupsChange: [{ type: i0.Output, args: ["groupsChange"] }], aggregatesChange: [{ type: i0.Output, args: ["aggregatesChange"] }], filtersChange: [{ type: i0.Output, args: ["filtersChange"] }] } });
11517
11650
 
11518
11651
  /** <cad-skeleton width="70%" height="12px" shape="text|rect|circle" [lines]="3" [animation]="true" /> */
@@ -11751,7 +11884,7 @@ class CadTreeselectComponent extends CadValueAccessor {
11751
11884
  @if (isMulti()) {<div class="sp__foot"><button type="button" class="ok" (click)="close()">OK{{ selectedNodes().length ? ' (' + selectedNodes().length + ')' : '' }}</button></div>}
11752
11885
  </div>
11753
11886
  </ng-template>
11754
- `, isInline: true, styles: [":host{display:inline-flex;width:100%;box-sizing:border-box;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg);vertical-align:middle}.st{display:flex;align-items:center;gap:6px;width:100%;box-sizing:border-box;min-height:var(--cad-control-h);padding:0 8px 0 var(--cad-control-px);background:var(--cad-input-bg);border:1px solid var(--cad-input-border);border-radius:var(--cad-radius);cursor:pointer;outline:none;-webkit-user-select:none;user-select:none;transition:border-color var(--cad-dur) var(--cad-ease),box-shadow var(--cad-dur) var(--cad-ease)}:host(.size-sm) .st{min-height:var(--cad-control-h-sm);font-size:var(--cad-font-size-sm);border-radius:var(--cad-radius-sm)}:host(.size-lg) .st{min-height:var(--cad-control-h-lg);font-size:var(--cad-font-size-lg)}.st:focus-visible,.st:focus-within,:host(.is-open) .st{border-color:var(--cad-accent);box-shadow:0 0 0 3px var(--cad-ring)}:host(.is-invalid) .st{border-color:var(--cad-danger)}:host(.is-invalid.is-open) .st,:host(.is-invalid) .st:focus-within{box-shadow:0 0 0 3px var(--cad-danger-soft)}:host(.is-disabled) .st{opacity:.6;cursor:not-allowed;background:var(--cad-bg-subtle)}.st__val{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:flex;align-items:center;gap:6px}.st__val.is-ph{color:var(--cad-fg-muted)}.st__chips{flex:1;min-width:0;display:flex;flex-wrap:wrap;gap:4px;padding:3px 0}.st__chip{display:inline-flex;align-items:center;gap:4px;height:22px;padding:0 6px 0 8px;border-radius:999px;background:var(--cad-accent-soft);color:var(--cad-accent);font-size:var(--cad-font-size-sm);font-weight:500}.st__chip button{all:unset;display:grid;place-items:center;width:14px;height:14px;border-radius:50%;cursor:pointer}.st__chip button:hover{background:#00000014}.st__input{flex:1;min-width:40px;border:0;outline:0;background:transparent;color:var(--cad-fg);font:inherit;padding:0;height:calc(var(--cad-control-h) - 2px)}.st__input::placeholder{color:var(--cad-fg-muted)}.st__chev{color:var(--cad-fg-muted);flex:none;transition:transform var(--cad-dur) var(--cad-ease)}:host(.is-open) .st__chev{transform:rotate(180deg)}.st__clear,.st__dd{all:unset;display:grid;place-items:center;width:18px;height:18px;border-radius:4px;color:var(--cad-fg-muted);cursor:pointer}.st__clear:hover,.st__dd:hover{color:var(--cad-fg);background:var(--cad-hover)}.st__spin{color:var(--cad-fg-muted)}.sp{display:flex;flex-direction:column;box-sizing:border-box;background:var(--cad-overlay);border:1px solid var(--cad-border);border-radius:9px;box-shadow:var(--cad-shadow-lg);overflow:hidden;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg)}.sp__empty{padding:12px;text-align:center;color:var(--cad-fg-muted);font-size:var(--cad-font-size-sm)}\n", ".sp__foot{display:flex;justify-content:flex-end;padding:6px 8px;border-top:1px solid var(--cad-border)}.sp__foot .ok{all:unset;padding:4px 12px;border-radius:6px;background:var(--cad-accent);color:var(--cad-fg-on-accent);font-size:var(--cad-font-size-sm);font-weight:500;cursor:pointer}\n"], dependencies: [{ kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i1.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation", "cdkConnectedOverlayUsePopover", "cdkConnectedOverlayMatchWidth", "cdkConnectedOverlay"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i1.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: CadIconComponent, selector: "cad-icon", inputs: ["name", "size", "strokeWidth", "label", "title", "spin", "filled", "flip", "rotate"] }, { kind: "component", type: CadTreeComponent, selector: "cad-tree", inputs: ["value", "treeField", "parentKey", "dataKey", "labelField", "expandedKeys", "selection", "selectionMode", "selectionPropagation", "nodeSelectable", "filter", "filterPlaceholder", "filterBy", "lazyChildren", "hasChildren", "indent", "showLines", "icons", "emptyMessage", "emptyFilterMessage", "ariaLabel", "toggleOnClick"], outputs: ["expandedKeysChange", "selectionChange", "nodeSelect", "nodeUnselect", "nodeExpand", "nodeCollapse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
11887
+ `, isInline: true, styles: [":host{display:inline-flex;width:100%;box-sizing:border-box;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg);vertical-align:middle}.st{display:flex;align-items:center;gap:6px;width:100%;box-sizing:border-box;min-height:var(--cad-control-h);padding:0 8px 0 var(--cad-control-px);background:var(--cad-input-bg);border:1px solid var(--cad-input-border);border-radius:var(--cad-radius);cursor:pointer;outline:none;-webkit-user-select:none;user-select:none;transition:border-color var(--cad-dur) var(--cad-ease),box-shadow var(--cad-dur) var(--cad-ease)}:host(.size-sm) .st{min-height:var(--cad-control-h-sm);font-size:var(--cad-font-size-sm);border-radius:var(--cad-radius-sm)}:host(.size-lg) .st{min-height:var(--cad-control-h-lg);font-size:var(--cad-font-size-lg)}.st:focus-visible,.st:focus-within,:host(.is-open) .st{border-color:var(--cad-accent);box-shadow:0 0 0 3px var(--cad-ring)}:host(.is-invalid) .st{border-color:var(--cad-danger)}:host(.is-invalid.is-open) .st,:host(.is-invalid) .st:focus-within{box-shadow:0 0 0 3px var(--cad-danger-soft)}:host(.is-disabled) .st{opacity:.6;cursor:not-allowed;background:var(--cad-bg-subtle)}.st__val{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:flex;align-items:center;gap:6px}.st__val.is-ph{color:var(--cad-fg-muted)}.st__chips{flex:1;min-width:0;display:flex;flex-wrap:wrap;gap:4px;padding:3px 0}.st__chip{display:inline-flex;align-items:center;gap:4px;height:22px;padding:0 6px 0 8px;border-radius:999px;background:var(--cad-accent-soft);color:var(--cad-accent);font-size:var(--cad-font-size-sm);font-weight:500}.st__chip button{all:unset;display:grid;place-items:center;width:14px;height:14px;border-radius:50%;cursor:pointer}.st__chip button:hover{background:#00000014}.st__input{flex:1;min-width:40px;border:0;outline:0;background:transparent;color:var(--cad-fg);font:inherit;padding:0;height:calc(var(--cad-control-h) - 2px)}.st__input::placeholder{color:var(--cad-fg-muted)}.st__chev{color:var(--cad-fg-muted);flex:none;transition:transform var(--cad-dur) var(--cad-ease)}:host(.is-open) .st__chev{transform:rotate(180deg)}.st__clear,.st__dd{all:unset;display:grid;place-items:center;width:18px;height:18px;border-radius:4px;color:var(--cad-fg-muted);cursor:pointer}.st__clear:hover,.st__dd:hover{color:var(--cad-fg);background:var(--cad-hover)}.st__spin{color:var(--cad-fg-muted)}.sp{display:flex;flex-direction:column;box-sizing:border-box;background:var(--cad-overlay);--cad-hover: var(--cad-overlay-hover);border:1px solid var(--cad-border);border-radius:9px;box-shadow:var(--cad-shadow-lg);overflow:hidden;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg)}.sp__empty{padding:12px;text-align:center;color:var(--cad-fg-muted);font-size:var(--cad-font-size-sm)}\n", ".sp__foot{display:flex;justify-content:flex-end;padding:6px 8px;border-top:1px solid var(--cad-border)}.sp__foot .ok{all:unset;padding:4px 12px;border-radius:6px;background:var(--cad-accent);color:var(--cad-fg-on-accent);font-size:var(--cad-font-size-sm);font-weight:500;cursor:pointer}\n"], dependencies: [{ kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i1.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation", "cdkConnectedOverlayUsePopover", "cdkConnectedOverlayMatchWidth", "cdkConnectedOverlay"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i1.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: CadIconComponent, selector: "cad-icon", inputs: ["name", "size", "strokeWidth", "label", "title", "spin", "filled", "flip", "rotate"] }, { kind: "component", type: CadTreeComponent, selector: "cad-tree", inputs: ["value", "treeField", "parentKey", "dataKey", "labelField", "expandedKeys", "selection", "selectionMode", "selectionPropagation", "nodeSelectable", "filter", "filterPlaceholder", "filterBy", "lazyChildren", "hasChildren", "indent", "showLines", "icons", "emptyMessage", "emptyFilterMessage", "ariaLabel", "toggleOnClick"], outputs: ["expandedKeysChange", "selectionChange", "nodeSelect", "nodeUnselect", "nodeExpand", "nodeCollapse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
11755
11888
  }
11756
11889
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: CadTreeselectComponent, decorators: [{
11757
11890
  type: Component,
@@ -11774,7 +11907,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImpo
11774
11907
  @if (isMulti()) {<div class="sp__foot"><button type="button" class="ok" (click)="close()">OK{{ selectedNodes().length ? ' (' + selectedNodes().length + ')' : '' }}</button></div>}
11775
11908
  </div>
11776
11909
  </ng-template>
11777
- `, styles: [":host{display:inline-flex;width:100%;box-sizing:border-box;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg);vertical-align:middle}.st{display:flex;align-items:center;gap:6px;width:100%;box-sizing:border-box;min-height:var(--cad-control-h);padding:0 8px 0 var(--cad-control-px);background:var(--cad-input-bg);border:1px solid var(--cad-input-border);border-radius:var(--cad-radius);cursor:pointer;outline:none;-webkit-user-select:none;user-select:none;transition:border-color var(--cad-dur) var(--cad-ease),box-shadow var(--cad-dur) var(--cad-ease)}:host(.size-sm) .st{min-height:var(--cad-control-h-sm);font-size:var(--cad-font-size-sm);border-radius:var(--cad-radius-sm)}:host(.size-lg) .st{min-height:var(--cad-control-h-lg);font-size:var(--cad-font-size-lg)}.st:focus-visible,.st:focus-within,:host(.is-open) .st{border-color:var(--cad-accent);box-shadow:0 0 0 3px var(--cad-ring)}:host(.is-invalid) .st{border-color:var(--cad-danger)}:host(.is-invalid.is-open) .st,:host(.is-invalid) .st:focus-within{box-shadow:0 0 0 3px var(--cad-danger-soft)}:host(.is-disabled) .st{opacity:.6;cursor:not-allowed;background:var(--cad-bg-subtle)}.st__val{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:flex;align-items:center;gap:6px}.st__val.is-ph{color:var(--cad-fg-muted)}.st__chips{flex:1;min-width:0;display:flex;flex-wrap:wrap;gap:4px;padding:3px 0}.st__chip{display:inline-flex;align-items:center;gap:4px;height:22px;padding:0 6px 0 8px;border-radius:999px;background:var(--cad-accent-soft);color:var(--cad-accent);font-size:var(--cad-font-size-sm);font-weight:500}.st__chip button{all:unset;display:grid;place-items:center;width:14px;height:14px;border-radius:50%;cursor:pointer}.st__chip button:hover{background:#00000014}.st__input{flex:1;min-width:40px;border:0;outline:0;background:transparent;color:var(--cad-fg);font:inherit;padding:0;height:calc(var(--cad-control-h) - 2px)}.st__input::placeholder{color:var(--cad-fg-muted)}.st__chev{color:var(--cad-fg-muted);flex:none;transition:transform var(--cad-dur) var(--cad-ease)}:host(.is-open) .st__chev{transform:rotate(180deg)}.st__clear,.st__dd{all:unset;display:grid;place-items:center;width:18px;height:18px;border-radius:4px;color:var(--cad-fg-muted);cursor:pointer}.st__clear:hover,.st__dd:hover{color:var(--cad-fg);background:var(--cad-hover)}.st__spin{color:var(--cad-fg-muted)}.sp{display:flex;flex-direction:column;box-sizing:border-box;background:var(--cad-overlay);border:1px solid var(--cad-border);border-radius:9px;box-shadow:var(--cad-shadow-lg);overflow:hidden;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg)}.sp__empty{padding:12px;text-align:center;color:var(--cad-fg-muted);font-size:var(--cad-font-size-sm)}\n", ".sp__foot{display:flex;justify-content:flex-end;padding:6px 8px;border-top:1px solid var(--cad-border)}.sp__foot .ok{all:unset;padding:4px 12px;border-radius:6px;background:var(--cad-accent);color:var(--cad-fg-on-accent);font-size:var(--cad-font-size-sm);font-weight:500;cursor:pointer}\n"] }]
11910
+ `, styles: [":host{display:inline-flex;width:100%;box-sizing:border-box;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg);vertical-align:middle}.st{display:flex;align-items:center;gap:6px;width:100%;box-sizing:border-box;min-height:var(--cad-control-h);padding:0 8px 0 var(--cad-control-px);background:var(--cad-input-bg);border:1px solid var(--cad-input-border);border-radius:var(--cad-radius);cursor:pointer;outline:none;-webkit-user-select:none;user-select:none;transition:border-color var(--cad-dur) var(--cad-ease),box-shadow var(--cad-dur) var(--cad-ease)}:host(.size-sm) .st{min-height:var(--cad-control-h-sm);font-size:var(--cad-font-size-sm);border-radius:var(--cad-radius-sm)}:host(.size-lg) .st{min-height:var(--cad-control-h-lg);font-size:var(--cad-font-size-lg)}.st:focus-visible,.st:focus-within,:host(.is-open) .st{border-color:var(--cad-accent);box-shadow:0 0 0 3px var(--cad-ring)}:host(.is-invalid) .st{border-color:var(--cad-danger)}:host(.is-invalid.is-open) .st,:host(.is-invalid) .st:focus-within{box-shadow:0 0 0 3px var(--cad-danger-soft)}:host(.is-disabled) .st{opacity:.6;cursor:not-allowed;background:var(--cad-bg-subtle)}.st__val{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:flex;align-items:center;gap:6px}.st__val.is-ph{color:var(--cad-fg-muted)}.st__chips{flex:1;min-width:0;display:flex;flex-wrap:wrap;gap:4px;padding:3px 0}.st__chip{display:inline-flex;align-items:center;gap:4px;height:22px;padding:0 6px 0 8px;border-radius:999px;background:var(--cad-accent-soft);color:var(--cad-accent);font-size:var(--cad-font-size-sm);font-weight:500}.st__chip button{all:unset;display:grid;place-items:center;width:14px;height:14px;border-radius:50%;cursor:pointer}.st__chip button:hover{background:#00000014}.st__input{flex:1;min-width:40px;border:0;outline:0;background:transparent;color:var(--cad-fg);font:inherit;padding:0;height:calc(var(--cad-control-h) - 2px)}.st__input::placeholder{color:var(--cad-fg-muted)}.st__chev{color:var(--cad-fg-muted);flex:none;transition:transform var(--cad-dur) var(--cad-ease)}:host(.is-open) .st__chev{transform:rotate(180deg)}.st__clear,.st__dd{all:unset;display:grid;place-items:center;width:18px;height:18px;border-radius:4px;color:var(--cad-fg-muted);cursor:pointer}.st__clear:hover,.st__dd:hover{color:var(--cad-fg);background:var(--cad-hover)}.st__spin{color:var(--cad-fg-muted)}.sp{display:flex;flex-direction:column;box-sizing:border-box;background:var(--cad-overlay);--cad-hover: var(--cad-overlay-hover);border:1px solid var(--cad-border);border-radius:9px;box-shadow:var(--cad-shadow-lg);overflow:hidden;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg)}.sp__empty{padding:12px;text-align:center;color:var(--cad-fg-muted);font-size:var(--cad-font-size-sm)}\n", ".sp__foot{display:flex;justify-content:flex-end;padding:6px 8px;border-top:1px solid var(--cad-border)}.sp__foot .ok{all:unset;padding:4px 12px;border-radius:6px;background:var(--cad-accent);color:var(--cad-fg-on-accent);font-size:var(--cad-font-size-sm);font-weight:500;cursor:pointer}\n"] }]
11778
11911
  }], ctorParameters: () => [], propDecorators: { options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], treeField: [{ type: i0.Input, args: [{ isSignal: true, alias: "treeField", required: false }] }], parentKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "parentKey", required: false }] }], dataKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "dataKey", required: false }] }], labelField: [{ type: i0.Input, args: [{ isSignal: true, alias: "labelField", required: false }] }], optionValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "optionValue", required: false }] }], selectionMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectionMode", required: false }] }], selectionPropagation: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectionPropagation", required: false }] }], display: [{ type: i0.Input, args: [{ isSignal: true, alias: "display", required: false }] }], selectedItemsLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedItemsLabel", required: false }] }], filter: [{ type: i0.Input, args: [{ isSignal: true, alias: "filter", required: false }] }], filterPlaceholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterPlaceholder", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], clearable: [{ type: i0.Input, args: [{ isSignal: true, alias: "clearable", required: false }] }], invalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], panelMaxHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "panelMaxHeight", required: false }] }], emptyMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "emptyMessage", required: false }] }], showLines: [{ type: i0.Input, args: [{ isSignal: true, alias: "showLines", required: false }] }], icons: [{ type: i0.Input, args: [{ isSignal: true, alias: "icons", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], changed: [{ type: i0.Output, args: ["changed"] }], opened: [{ type: i0.Output, args: ["opened"] }], closed: [{ type: i0.Output, args: ["closed"] }], nodeExpand: [{ type: i0.Output, args: ["nodeExpand"] }], trigger: [{ type: i0.ViewChild, args: ['trigger', { isSignal: true }] }] } });
11779
11912
 
11780
11913
  /**
@@ -11930,7 +12063,7 @@ class CadCascadeSelectComponent extends CadValueAccessor {
11930
12063
  }
11931
12064
  </div>
11932
12065
  </ng-template>
11933
- `, isInline: true, styles: [":host{display:inline-flex;width:100%;box-sizing:border-box;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg);vertical-align:middle}.st{display:flex;align-items:center;gap:6px;width:100%;box-sizing:border-box;min-height:var(--cad-control-h);padding:0 8px 0 var(--cad-control-px);background:var(--cad-input-bg);border:1px solid var(--cad-input-border);border-radius:var(--cad-radius);cursor:pointer;outline:none;-webkit-user-select:none;user-select:none;transition:border-color var(--cad-dur) var(--cad-ease),box-shadow var(--cad-dur) var(--cad-ease)}:host(.size-sm) .st{min-height:var(--cad-control-h-sm);font-size:var(--cad-font-size-sm);border-radius:var(--cad-radius-sm)}:host(.size-lg) .st{min-height:var(--cad-control-h-lg);font-size:var(--cad-font-size-lg)}.st:focus-visible,.st:focus-within,:host(.is-open) .st{border-color:var(--cad-accent);box-shadow:0 0 0 3px var(--cad-ring)}:host(.is-invalid) .st{border-color:var(--cad-danger)}:host(.is-invalid.is-open) .st,:host(.is-invalid) .st:focus-within{box-shadow:0 0 0 3px var(--cad-danger-soft)}:host(.is-disabled) .st{opacity:.6;cursor:not-allowed;background:var(--cad-bg-subtle)}.st__val{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:flex;align-items:center;gap:6px}.st__val.is-ph{color:var(--cad-fg-muted)}.st__chips{flex:1;min-width:0;display:flex;flex-wrap:wrap;gap:4px;padding:3px 0}.st__chip{display:inline-flex;align-items:center;gap:4px;height:22px;padding:0 6px 0 8px;border-radius:999px;background:var(--cad-accent-soft);color:var(--cad-accent);font-size:var(--cad-font-size-sm);font-weight:500}.st__chip button{all:unset;display:grid;place-items:center;width:14px;height:14px;border-radius:50%;cursor:pointer}.st__chip button:hover{background:#00000014}.st__input{flex:1;min-width:40px;border:0;outline:0;background:transparent;color:var(--cad-fg);font:inherit;padding:0;height:calc(var(--cad-control-h) - 2px)}.st__input::placeholder{color:var(--cad-fg-muted)}.st__chev{color:var(--cad-fg-muted);flex:none;transition:transform var(--cad-dur) var(--cad-ease)}:host(.is-open) .st__chev{transform:rotate(180deg)}.st__clear,.st__dd{all:unset;display:grid;place-items:center;width:18px;height:18px;border-radius:4px;color:var(--cad-fg-muted);cursor:pointer}.st__clear:hover,.st__dd:hover{color:var(--cad-fg);background:var(--cad-hover)}.st__spin{color:var(--cad-fg-muted)}.sp{display:flex;flex-direction:column;box-sizing:border-box;background:var(--cad-overlay);border:1px solid var(--cad-border);border-radius:9px;box-shadow:var(--cad-shadow-lg);overflow:hidden;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg)}.sp__empty{padding:12px;text-align:center;color:var(--cad-fg-muted);font-size:var(--cad-font-size-sm)}\n", ".cs{flex-direction:row;padding:4px}.cs__col{list-style:none;margin:0;padding:0 4px 0 0;min-width:160px;max-height:280px;overflow:auto;border-right:1px solid var(--cad-border)}.cs__col:last-child{border-right:0;padding-right:0}.cs__col li{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:6px;cursor:pointer;font-size:var(--cad-font-size)}.cs__col li .lbl{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cs__col li .ar{color:var(--cad-fg-muted)}.cs__col li.is-active{background:var(--cad-hover)}.cs__col li.is-on{background:var(--cad-accent-soft);color:var(--cad-accent);font-weight:500}\n"], dependencies: [{ kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i1.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation", "cdkConnectedOverlayUsePopover", "cdkConnectedOverlayMatchWidth", "cdkConnectedOverlay"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i1.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: CadIconComponent, selector: "cad-icon", inputs: ["name", "size", "strokeWidth", "label", "title", "spin", "filled", "flip", "rotate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
12066
+ `, isInline: true, styles: [":host{display:inline-flex;width:100%;box-sizing:border-box;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg);vertical-align:middle}.st{display:flex;align-items:center;gap:6px;width:100%;box-sizing:border-box;min-height:var(--cad-control-h);padding:0 8px 0 var(--cad-control-px);background:var(--cad-input-bg);border:1px solid var(--cad-input-border);border-radius:var(--cad-radius);cursor:pointer;outline:none;-webkit-user-select:none;user-select:none;transition:border-color var(--cad-dur) var(--cad-ease),box-shadow var(--cad-dur) var(--cad-ease)}:host(.size-sm) .st{min-height:var(--cad-control-h-sm);font-size:var(--cad-font-size-sm);border-radius:var(--cad-radius-sm)}:host(.size-lg) .st{min-height:var(--cad-control-h-lg);font-size:var(--cad-font-size-lg)}.st:focus-visible,.st:focus-within,:host(.is-open) .st{border-color:var(--cad-accent);box-shadow:0 0 0 3px var(--cad-ring)}:host(.is-invalid) .st{border-color:var(--cad-danger)}:host(.is-invalid.is-open) .st,:host(.is-invalid) .st:focus-within{box-shadow:0 0 0 3px var(--cad-danger-soft)}:host(.is-disabled) .st{opacity:.6;cursor:not-allowed;background:var(--cad-bg-subtle)}.st__val{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:flex;align-items:center;gap:6px}.st__val.is-ph{color:var(--cad-fg-muted)}.st__chips{flex:1;min-width:0;display:flex;flex-wrap:wrap;gap:4px;padding:3px 0}.st__chip{display:inline-flex;align-items:center;gap:4px;height:22px;padding:0 6px 0 8px;border-radius:999px;background:var(--cad-accent-soft);color:var(--cad-accent);font-size:var(--cad-font-size-sm);font-weight:500}.st__chip button{all:unset;display:grid;place-items:center;width:14px;height:14px;border-radius:50%;cursor:pointer}.st__chip button:hover{background:#00000014}.st__input{flex:1;min-width:40px;border:0;outline:0;background:transparent;color:var(--cad-fg);font:inherit;padding:0;height:calc(var(--cad-control-h) - 2px)}.st__input::placeholder{color:var(--cad-fg-muted)}.st__chev{color:var(--cad-fg-muted);flex:none;transition:transform var(--cad-dur) var(--cad-ease)}:host(.is-open) .st__chev{transform:rotate(180deg)}.st__clear,.st__dd{all:unset;display:grid;place-items:center;width:18px;height:18px;border-radius:4px;color:var(--cad-fg-muted);cursor:pointer}.st__clear:hover,.st__dd:hover{color:var(--cad-fg);background:var(--cad-hover)}.st__spin{color:var(--cad-fg-muted)}.sp{display:flex;flex-direction:column;box-sizing:border-box;background:var(--cad-overlay);--cad-hover: var(--cad-overlay-hover);border:1px solid var(--cad-border);border-radius:9px;box-shadow:var(--cad-shadow-lg);overflow:hidden;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg)}.sp__empty{padding:12px;text-align:center;color:var(--cad-fg-muted);font-size:var(--cad-font-size-sm)}\n", ".cs{flex-direction:row;padding:4px}.cs__col{list-style:none;margin:0;padding:0 4px 0 0;min-width:160px;max-height:280px;overflow:auto;border-right:1px solid var(--cad-border)}.cs__col:last-child{border-right:0;padding-right:0}.cs__col li{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:6px;cursor:pointer;font-size:var(--cad-font-size)}.cs__col li .lbl{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cs__col li .ar{color:var(--cad-fg-muted)}.cs__col li.is-active{background:var(--cad-hover)}.cs__col li.is-on{background:var(--cad-accent-soft);color:var(--cad-accent);font-weight:500}\n"], dependencies: [{ kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i1.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation", "cdkConnectedOverlayUsePopover", "cdkConnectedOverlayMatchWidth", "cdkConnectedOverlay"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i1.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: CadIconComponent, selector: "cad-icon", inputs: ["name", "size", "strokeWidth", "label", "title", "spin", "filled", "flip", "rotate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
11934
12067
  }
11935
12068
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: CadCascadeSelectComponent, decorators: [{
11936
12069
  type: Component,
@@ -11953,7 +12086,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImpo
11953
12086
  }
11954
12087
  </div>
11955
12088
  </ng-template>
11956
- `, styles: [":host{display:inline-flex;width:100%;box-sizing:border-box;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg);vertical-align:middle}.st{display:flex;align-items:center;gap:6px;width:100%;box-sizing:border-box;min-height:var(--cad-control-h);padding:0 8px 0 var(--cad-control-px);background:var(--cad-input-bg);border:1px solid var(--cad-input-border);border-radius:var(--cad-radius);cursor:pointer;outline:none;-webkit-user-select:none;user-select:none;transition:border-color var(--cad-dur) var(--cad-ease),box-shadow var(--cad-dur) var(--cad-ease)}:host(.size-sm) .st{min-height:var(--cad-control-h-sm);font-size:var(--cad-font-size-sm);border-radius:var(--cad-radius-sm)}:host(.size-lg) .st{min-height:var(--cad-control-h-lg);font-size:var(--cad-font-size-lg)}.st:focus-visible,.st:focus-within,:host(.is-open) .st{border-color:var(--cad-accent);box-shadow:0 0 0 3px var(--cad-ring)}:host(.is-invalid) .st{border-color:var(--cad-danger)}:host(.is-invalid.is-open) .st,:host(.is-invalid) .st:focus-within{box-shadow:0 0 0 3px var(--cad-danger-soft)}:host(.is-disabled) .st{opacity:.6;cursor:not-allowed;background:var(--cad-bg-subtle)}.st__val{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:flex;align-items:center;gap:6px}.st__val.is-ph{color:var(--cad-fg-muted)}.st__chips{flex:1;min-width:0;display:flex;flex-wrap:wrap;gap:4px;padding:3px 0}.st__chip{display:inline-flex;align-items:center;gap:4px;height:22px;padding:0 6px 0 8px;border-radius:999px;background:var(--cad-accent-soft);color:var(--cad-accent);font-size:var(--cad-font-size-sm);font-weight:500}.st__chip button{all:unset;display:grid;place-items:center;width:14px;height:14px;border-radius:50%;cursor:pointer}.st__chip button:hover{background:#00000014}.st__input{flex:1;min-width:40px;border:0;outline:0;background:transparent;color:var(--cad-fg);font:inherit;padding:0;height:calc(var(--cad-control-h) - 2px)}.st__input::placeholder{color:var(--cad-fg-muted)}.st__chev{color:var(--cad-fg-muted);flex:none;transition:transform var(--cad-dur) var(--cad-ease)}:host(.is-open) .st__chev{transform:rotate(180deg)}.st__clear,.st__dd{all:unset;display:grid;place-items:center;width:18px;height:18px;border-radius:4px;color:var(--cad-fg-muted);cursor:pointer}.st__clear:hover,.st__dd:hover{color:var(--cad-fg);background:var(--cad-hover)}.st__spin{color:var(--cad-fg-muted)}.sp{display:flex;flex-direction:column;box-sizing:border-box;background:var(--cad-overlay);border:1px solid var(--cad-border);border-radius:9px;box-shadow:var(--cad-shadow-lg);overflow:hidden;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg)}.sp__empty{padding:12px;text-align:center;color:var(--cad-fg-muted);font-size:var(--cad-font-size-sm)}\n", ".cs{flex-direction:row;padding:4px}.cs__col{list-style:none;margin:0;padding:0 4px 0 0;min-width:160px;max-height:280px;overflow:auto;border-right:1px solid var(--cad-border)}.cs__col:last-child{border-right:0;padding-right:0}.cs__col li{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:6px;cursor:pointer;font-size:var(--cad-font-size)}.cs__col li .lbl{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cs__col li .ar{color:var(--cad-fg-muted)}.cs__col li.is-active{background:var(--cad-hover)}.cs__col li.is-on{background:var(--cad-accent-soft);color:var(--cad-accent);font-weight:500}\n"] }]
12089
+ `, styles: [":host{display:inline-flex;width:100%;box-sizing:border-box;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg);vertical-align:middle}.st{display:flex;align-items:center;gap:6px;width:100%;box-sizing:border-box;min-height:var(--cad-control-h);padding:0 8px 0 var(--cad-control-px);background:var(--cad-input-bg);border:1px solid var(--cad-input-border);border-radius:var(--cad-radius);cursor:pointer;outline:none;-webkit-user-select:none;user-select:none;transition:border-color var(--cad-dur) var(--cad-ease),box-shadow var(--cad-dur) var(--cad-ease)}:host(.size-sm) .st{min-height:var(--cad-control-h-sm);font-size:var(--cad-font-size-sm);border-radius:var(--cad-radius-sm)}:host(.size-lg) .st{min-height:var(--cad-control-h-lg);font-size:var(--cad-font-size-lg)}.st:focus-visible,.st:focus-within,:host(.is-open) .st{border-color:var(--cad-accent);box-shadow:0 0 0 3px var(--cad-ring)}:host(.is-invalid) .st{border-color:var(--cad-danger)}:host(.is-invalid.is-open) .st,:host(.is-invalid) .st:focus-within{box-shadow:0 0 0 3px var(--cad-danger-soft)}:host(.is-disabled) .st{opacity:.6;cursor:not-allowed;background:var(--cad-bg-subtle)}.st__val{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:flex;align-items:center;gap:6px}.st__val.is-ph{color:var(--cad-fg-muted)}.st__chips{flex:1;min-width:0;display:flex;flex-wrap:wrap;gap:4px;padding:3px 0}.st__chip{display:inline-flex;align-items:center;gap:4px;height:22px;padding:0 6px 0 8px;border-radius:999px;background:var(--cad-accent-soft);color:var(--cad-accent);font-size:var(--cad-font-size-sm);font-weight:500}.st__chip button{all:unset;display:grid;place-items:center;width:14px;height:14px;border-radius:50%;cursor:pointer}.st__chip button:hover{background:#00000014}.st__input{flex:1;min-width:40px;border:0;outline:0;background:transparent;color:var(--cad-fg);font:inherit;padding:0;height:calc(var(--cad-control-h) - 2px)}.st__input::placeholder{color:var(--cad-fg-muted)}.st__chev{color:var(--cad-fg-muted);flex:none;transition:transform var(--cad-dur) var(--cad-ease)}:host(.is-open) .st__chev{transform:rotate(180deg)}.st__clear,.st__dd{all:unset;display:grid;place-items:center;width:18px;height:18px;border-radius:4px;color:var(--cad-fg-muted);cursor:pointer}.st__clear:hover,.st__dd:hover{color:var(--cad-fg);background:var(--cad-hover)}.st__spin{color:var(--cad-fg-muted)}.sp{display:flex;flex-direction:column;box-sizing:border-box;background:var(--cad-overlay);--cad-hover: var(--cad-overlay-hover);border:1px solid var(--cad-border);border-radius:9px;box-shadow:var(--cad-shadow-lg);overflow:hidden;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg)}.sp__empty{padding:12px;text-align:center;color:var(--cad-fg-muted);font-size:var(--cad-font-size-sm)}\n", ".cs{flex-direction:row;padding:4px}.cs__col{list-style:none;margin:0;padding:0 4px 0 0;min-width:160px;max-height:280px;overflow:auto;border-right:1px solid var(--cad-border)}.cs__col:last-child{border-right:0;padding-right:0}.cs__col li{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:6px;cursor:pointer;font-size:var(--cad-font-size)}.cs__col li .lbl{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cs__col li .ar{color:var(--cad-fg-muted)}.cs__col li.is-active{background:var(--cad-hover)}.cs__col li.is-on{background:var(--cad-accent-soft);color:var(--cad-accent);font-weight:500}\n"] }]
11957
12090
  }], ctorParameters: () => [], propDecorators: { options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], optionLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "optionLabel", required: false }] }], optionValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "optionValue", required: false }] }], optionGroupLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "optionGroupLabel", required: false }] }], optionGroupChildren: [{ type: i0.Input, args: [{ isSignal: true, alias: "optionGroupChildren", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], showPath: [{ type: i0.Input, args: [{ isSignal: true, alias: "showPath", required: false }] }], pathSeparator: [{ type: i0.Input, args: [{ isSignal: true, alias: "pathSeparator", required: false }] }], clearable: [{ type: i0.Input, args: [{ isSignal: true, alias: "clearable", required: false }] }], invalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], emptyMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "emptyMessage", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], changed: [{ type: i0.Output, args: ["changed"] }], opened: [{ type: i0.Output, args: ["opened"] }], closed: [{ type: i0.Output, args: ["closed"] }], groupChange: [{ type: i0.Output, args: ["groupChange"] }], trigger: [{ type: i0.ViewChild, args: ['trigger', { isSignal: true }] }] } });
11958
12091
 
11959
12092
  /**
@@ -12175,7 +12308,7 @@ class CadComboComponent extends CadValueAccessor {
12175
12308
  </ul>
12176
12309
  </div>
12177
12310
  </ng-template>
12178
- `, isInline: true, styles: [":host{display:inline-flex;width:100%;box-sizing:border-box;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg);vertical-align:middle}.st{display:flex;align-items:center;gap:6px;width:100%;box-sizing:border-box;min-height:var(--cad-control-h);padding:0 8px 0 var(--cad-control-px);background:var(--cad-input-bg);border:1px solid var(--cad-input-border);border-radius:var(--cad-radius);cursor:pointer;outline:none;-webkit-user-select:none;user-select:none;transition:border-color var(--cad-dur) var(--cad-ease),box-shadow var(--cad-dur) var(--cad-ease)}:host(.size-sm) .st{min-height:var(--cad-control-h-sm);font-size:var(--cad-font-size-sm);border-radius:var(--cad-radius-sm)}:host(.size-lg) .st{min-height:var(--cad-control-h-lg);font-size:var(--cad-font-size-lg)}.st:focus-visible,.st:focus-within,:host(.is-open) .st{border-color:var(--cad-accent);box-shadow:0 0 0 3px var(--cad-ring)}:host(.is-invalid) .st{border-color:var(--cad-danger)}:host(.is-invalid.is-open) .st,:host(.is-invalid) .st:focus-within{box-shadow:0 0 0 3px var(--cad-danger-soft)}:host(.is-disabled) .st{opacity:.6;cursor:not-allowed;background:var(--cad-bg-subtle)}.st__val{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:flex;align-items:center;gap:6px}.st__val.is-ph{color:var(--cad-fg-muted)}.st__chips{flex:1;min-width:0;display:flex;flex-wrap:wrap;gap:4px;padding:3px 0}.st__chip{display:inline-flex;align-items:center;gap:4px;height:22px;padding:0 6px 0 8px;border-radius:999px;background:var(--cad-accent-soft);color:var(--cad-accent);font-size:var(--cad-font-size-sm);font-weight:500}.st__chip button{all:unset;display:grid;place-items:center;width:14px;height:14px;border-radius:50%;cursor:pointer}.st__chip button:hover{background:#00000014}.st__input{flex:1;min-width:40px;border:0;outline:0;background:transparent;color:var(--cad-fg);font:inherit;padding:0;height:calc(var(--cad-control-h) - 2px)}.st__input::placeholder{color:var(--cad-fg-muted)}.st__chev{color:var(--cad-fg-muted);flex:none;transition:transform var(--cad-dur) var(--cad-ease)}:host(.is-open) .st__chev{transform:rotate(180deg)}.st__clear,.st__dd{all:unset;display:grid;place-items:center;width:18px;height:18px;border-radius:4px;color:var(--cad-fg-muted);cursor:pointer}.st__clear:hover,.st__dd:hover{color:var(--cad-fg);background:var(--cad-hover)}.st__spin{color:var(--cad-fg-muted)}.sp{display:flex;flex-direction:column;box-sizing:border-box;background:var(--cad-overlay);border:1px solid var(--cad-border);border-radius:9px;box-shadow:var(--cad-shadow-lg);overflow:hidden;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg)}.sp__empty{padding:12px;text-align:center;color:var(--cad-fg-muted);font-size:var(--cad-font-size-sm)}\n", ".st{cursor:text}.st--multi{align-items:flex-start}.cb__list{list-style:none;margin:0;padding:4px;overflow:auto}.cb__list li{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:6px;cursor:pointer}.cb__list li.is-active{background:var(--cad-hover)}.cb__list li.is-on{background:var(--cad-accent-soft);color:var(--cad-accent);font-weight:500}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i1.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation", "cdkConnectedOverlayUsePopover", "cdkConnectedOverlayMatchWidth", "cdkConnectedOverlay"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i1.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: CadIconComponent, selector: "cad-icon", inputs: ["name", "size", "strokeWidth", "label", "title", "spin", "filled", "flip", "rotate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
12311
+ `, isInline: true, styles: [":host{display:inline-flex;width:100%;box-sizing:border-box;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg);vertical-align:middle}.st{display:flex;align-items:center;gap:6px;width:100%;box-sizing:border-box;min-height:var(--cad-control-h);padding:0 8px 0 var(--cad-control-px);background:var(--cad-input-bg);border:1px solid var(--cad-input-border);border-radius:var(--cad-radius);cursor:pointer;outline:none;-webkit-user-select:none;user-select:none;transition:border-color var(--cad-dur) var(--cad-ease),box-shadow var(--cad-dur) var(--cad-ease)}:host(.size-sm) .st{min-height:var(--cad-control-h-sm);font-size:var(--cad-font-size-sm);border-radius:var(--cad-radius-sm)}:host(.size-lg) .st{min-height:var(--cad-control-h-lg);font-size:var(--cad-font-size-lg)}.st:focus-visible,.st:focus-within,:host(.is-open) .st{border-color:var(--cad-accent);box-shadow:0 0 0 3px var(--cad-ring)}:host(.is-invalid) .st{border-color:var(--cad-danger)}:host(.is-invalid.is-open) .st,:host(.is-invalid) .st:focus-within{box-shadow:0 0 0 3px var(--cad-danger-soft)}:host(.is-disabled) .st{opacity:.6;cursor:not-allowed;background:var(--cad-bg-subtle)}.st__val{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:flex;align-items:center;gap:6px}.st__val.is-ph{color:var(--cad-fg-muted)}.st__chips{flex:1;min-width:0;display:flex;flex-wrap:wrap;gap:4px;padding:3px 0}.st__chip{display:inline-flex;align-items:center;gap:4px;height:22px;padding:0 6px 0 8px;border-radius:999px;background:var(--cad-accent-soft);color:var(--cad-accent);font-size:var(--cad-font-size-sm);font-weight:500}.st__chip button{all:unset;display:grid;place-items:center;width:14px;height:14px;border-radius:50%;cursor:pointer}.st__chip button:hover{background:#00000014}.st__input{flex:1;min-width:40px;border:0;outline:0;background:transparent;color:var(--cad-fg);font:inherit;padding:0;height:calc(var(--cad-control-h) - 2px)}.st__input::placeholder{color:var(--cad-fg-muted)}.st__chev{color:var(--cad-fg-muted);flex:none;transition:transform var(--cad-dur) var(--cad-ease)}:host(.is-open) .st__chev{transform:rotate(180deg)}.st__clear,.st__dd{all:unset;display:grid;place-items:center;width:18px;height:18px;border-radius:4px;color:var(--cad-fg-muted);cursor:pointer}.st__clear:hover,.st__dd:hover{color:var(--cad-fg);background:var(--cad-hover)}.st__spin{color:var(--cad-fg-muted)}.sp{display:flex;flex-direction:column;box-sizing:border-box;background:var(--cad-overlay);--cad-hover: var(--cad-overlay-hover);border:1px solid var(--cad-border);border-radius:9px;box-shadow:var(--cad-shadow-lg);overflow:hidden;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg)}.sp__empty{padding:12px;text-align:center;color:var(--cad-fg-muted);font-size:var(--cad-font-size-sm)}\n", ".st{cursor:text}.st--multi{align-items:flex-start}.cb__list{list-style:none;margin:0;padding:4px;overflow:auto}.cb__list li{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:6px;cursor:pointer}.cb__list li.is-active{background:var(--cad-hover)}.cb__list li.is-on{background:var(--cad-accent-soft);color:var(--cad-accent);font-weight:500}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i1.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation", "cdkConnectedOverlayUsePopover", "cdkConnectedOverlayMatchWidth", "cdkConnectedOverlay"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i1.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: CadIconComponent, selector: "cad-icon", inputs: ["name", "size", "strokeWidth", "label", "title", "spin", "filled", "flip", "rotate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
12179
12312
  }
12180
12313
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: CadComboComponent, decorators: [{
12181
12314
  type: Component,
@@ -12204,7 +12337,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImpo
12204
12337
  </ul>
12205
12338
  </div>
12206
12339
  </ng-template>
12207
- `, styles: [":host{display:inline-flex;width:100%;box-sizing:border-box;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg);vertical-align:middle}.st{display:flex;align-items:center;gap:6px;width:100%;box-sizing:border-box;min-height:var(--cad-control-h);padding:0 8px 0 var(--cad-control-px);background:var(--cad-input-bg);border:1px solid var(--cad-input-border);border-radius:var(--cad-radius);cursor:pointer;outline:none;-webkit-user-select:none;user-select:none;transition:border-color var(--cad-dur) var(--cad-ease),box-shadow var(--cad-dur) var(--cad-ease)}:host(.size-sm) .st{min-height:var(--cad-control-h-sm);font-size:var(--cad-font-size-sm);border-radius:var(--cad-radius-sm)}:host(.size-lg) .st{min-height:var(--cad-control-h-lg);font-size:var(--cad-font-size-lg)}.st:focus-visible,.st:focus-within,:host(.is-open) .st{border-color:var(--cad-accent);box-shadow:0 0 0 3px var(--cad-ring)}:host(.is-invalid) .st{border-color:var(--cad-danger)}:host(.is-invalid.is-open) .st,:host(.is-invalid) .st:focus-within{box-shadow:0 0 0 3px var(--cad-danger-soft)}:host(.is-disabled) .st{opacity:.6;cursor:not-allowed;background:var(--cad-bg-subtle)}.st__val{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:flex;align-items:center;gap:6px}.st__val.is-ph{color:var(--cad-fg-muted)}.st__chips{flex:1;min-width:0;display:flex;flex-wrap:wrap;gap:4px;padding:3px 0}.st__chip{display:inline-flex;align-items:center;gap:4px;height:22px;padding:0 6px 0 8px;border-radius:999px;background:var(--cad-accent-soft);color:var(--cad-accent);font-size:var(--cad-font-size-sm);font-weight:500}.st__chip button{all:unset;display:grid;place-items:center;width:14px;height:14px;border-radius:50%;cursor:pointer}.st__chip button:hover{background:#00000014}.st__input{flex:1;min-width:40px;border:0;outline:0;background:transparent;color:var(--cad-fg);font:inherit;padding:0;height:calc(var(--cad-control-h) - 2px)}.st__input::placeholder{color:var(--cad-fg-muted)}.st__chev{color:var(--cad-fg-muted);flex:none;transition:transform var(--cad-dur) var(--cad-ease)}:host(.is-open) .st__chev{transform:rotate(180deg)}.st__clear,.st__dd{all:unset;display:grid;place-items:center;width:18px;height:18px;border-radius:4px;color:var(--cad-fg-muted);cursor:pointer}.st__clear:hover,.st__dd:hover{color:var(--cad-fg);background:var(--cad-hover)}.st__spin{color:var(--cad-fg-muted)}.sp{display:flex;flex-direction:column;box-sizing:border-box;background:var(--cad-overlay);border:1px solid var(--cad-border);border-radius:9px;box-shadow:var(--cad-shadow-lg);overflow:hidden;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg)}.sp__empty{padding:12px;text-align:center;color:var(--cad-fg-muted);font-size:var(--cad-font-size-sm)}\n", ".st{cursor:text}.st--multi{align-items:flex-start}.cb__list{list-style:none;margin:0;padding:4px;overflow:auto}.cb__list li{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:6px;cursor:pointer}.cb__list li.is-active{background:var(--cad-hover)}.cb__list li.is-on{background:var(--cad-accent-soft);color:var(--cad-accent);font-weight:500}\n"] }]
12340
+ `, styles: [":host{display:inline-flex;width:100%;box-sizing:border-box;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg);vertical-align:middle}.st{display:flex;align-items:center;gap:6px;width:100%;box-sizing:border-box;min-height:var(--cad-control-h);padding:0 8px 0 var(--cad-control-px);background:var(--cad-input-bg);border:1px solid var(--cad-input-border);border-radius:var(--cad-radius);cursor:pointer;outline:none;-webkit-user-select:none;user-select:none;transition:border-color var(--cad-dur) var(--cad-ease),box-shadow var(--cad-dur) var(--cad-ease)}:host(.size-sm) .st{min-height:var(--cad-control-h-sm);font-size:var(--cad-font-size-sm);border-radius:var(--cad-radius-sm)}:host(.size-lg) .st{min-height:var(--cad-control-h-lg);font-size:var(--cad-font-size-lg)}.st:focus-visible,.st:focus-within,:host(.is-open) .st{border-color:var(--cad-accent);box-shadow:0 0 0 3px var(--cad-ring)}:host(.is-invalid) .st{border-color:var(--cad-danger)}:host(.is-invalid.is-open) .st,:host(.is-invalid) .st:focus-within{box-shadow:0 0 0 3px var(--cad-danger-soft)}:host(.is-disabled) .st{opacity:.6;cursor:not-allowed;background:var(--cad-bg-subtle)}.st__val{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:flex;align-items:center;gap:6px}.st__val.is-ph{color:var(--cad-fg-muted)}.st__chips{flex:1;min-width:0;display:flex;flex-wrap:wrap;gap:4px;padding:3px 0}.st__chip{display:inline-flex;align-items:center;gap:4px;height:22px;padding:0 6px 0 8px;border-radius:999px;background:var(--cad-accent-soft);color:var(--cad-accent);font-size:var(--cad-font-size-sm);font-weight:500}.st__chip button{all:unset;display:grid;place-items:center;width:14px;height:14px;border-radius:50%;cursor:pointer}.st__chip button:hover{background:#00000014}.st__input{flex:1;min-width:40px;border:0;outline:0;background:transparent;color:var(--cad-fg);font:inherit;padding:0;height:calc(var(--cad-control-h) - 2px)}.st__input::placeholder{color:var(--cad-fg-muted)}.st__chev{color:var(--cad-fg-muted);flex:none;transition:transform var(--cad-dur) var(--cad-ease)}:host(.is-open) .st__chev{transform:rotate(180deg)}.st__clear,.st__dd{all:unset;display:grid;place-items:center;width:18px;height:18px;border-radius:4px;color:var(--cad-fg-muted);cursor:pointer}.st__clear:hover,.st__dd:hover{color:var(--cad-fg);background:var(--cad-hover)}.st__spin{color:var(--cad-fg-muted)}.sp{display:flex;flex-direction:column;box-sizing:border-box;background:var(--cad-overlay);--cad-hover: var(--cad-overlay-hover);border:1px solid var(--cad-border);border-radius:9px;box-shadow:var(--cad-shadow-lg);overflow:hidden;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg)}.sp__empty{padding:12px;text-align:center;color:var(--cad-fg-muted);font-size:var(--cad-font-size-sm)}\n", ".st{cursor:text}.st--multi{align-items:flex-start}.cb__list{list-style:none;margin:0;padding:4px;overflow:auto}.cb__list li{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:6px;cursor:pointer}.cb__list li.is-active{background:var(--cad-hover)}.cb__list li.is-on{background:var(--cad-accent-soft);color:var(--cad-accent);font-weight:500}\n"] }]
12208
12341
  }], ctorParameters: () => [], propDecorators: { suggestions: [{ type: i0.Input, args: [{ isSignal: true, alias: "suggestions", required: false }] }], optionLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "optionLabel", required: false }] }], minLength: [{ type: i0.Input, args: [{ isSignal: true, alias: "minLength", required: false }] }], delay: [{ type: i0.Input, args: [{ isSignal: true, alias: "delay", required: false }] }], dropdown: [{ type: i0.Input, args: [{ isSignal: true, alias: "dropdown", required: false }] }], forceSelection: [{ type: i0.Input, args: [{ isSignal: true, alias: "forceSelection", required: false }] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], clearable: [{ type: i0.Input, args: [{ isSignal: true, alias: "clearable", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], invalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], emptyMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "emptyMessage", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], panelMaxHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "panelMaxHeight", required: false }] }], changed: [{ type: i0.Output, args: ["changed"] }], completeMethod: [{ type: i0.Output, args: ["completeMethod"] }], opened: [{ type: i0.Output, args: ["opened"] }], closed: [{ type: i0.Output, args: ["closed"] }], itemTpl: [{ type: i0.ContentChild, args: [i0.forwardRef(() => CadSelectItemDirective), { isSignal: true }] }], trigger: [{ type: i0.ViewChild, args: ['trigger', { isSignal: true }] }], inputEl: [{ type: i0.ViewChild, args: ['input', { isSignal: true }] }] } });
12209
12342
 
12210
12343
  let toastSeq = 0;
@@ -12376,7 +12509,7 @@ class CadToastComponent {
12376
12509
  }
12377
12510
  </div>
12378
12511
  }
12379
- `, isInline: true, styles: [":host{position:fixed;display:flex;flex-direction:column;gap:8px;width:340px;max-width:calc(100% - 32px);pointer-events:none;font-family:var(--cad-font)}:host(.pos-top-right){top:16px;right:16px}:host(.pos-top-left){top:16px;left:16px}:host(.pos-bottom-right){bottom:16px;right:16px;flex-direction:column-reverse}:host(.pos-bottom-left){bottom:16px;left:16px;flex-direction:column-reverse}:host(.pos-top-center){top:16px;left:50%;transform:translate(-50%)}:host(.pos-bottom-center){bottom:16px;left:50%;transform:translate(-50%);flex-direction:column-reverse}.cad-toast__item{--_c: var(--cad-accent);position:relative;overflow:hidden;pointer-events:auto;display:flex;gap:10px;align-items:flex-start;padding:10px 12px;border-radius:10px;background:var(--cad-overlay);border:1px solid var(--cad-border);border-left:3px solid var(--_c);box-shadow:var(--cad-shadow-lg);color:var(--cad-fg);animation:cad-toast-in .18s var(--cad-ease)}.cad-toast__item.is-out{animation:cad-toast-out .16s var(--cad-ease) forwards}:host(.pos-top-left) .cad-toast__item,:host(.pos-bottom-left) .cad-toast__item{animation-name:cad-toast-in-l}.cad-toast__item.sev-success{--_c: var(--cad-success)}.cad-toast__item.sev-info{--_c: var(--cad-info)}.cad-toast__item.sev-warning{--_c: var(--cad-warning)}.cad-toast__item.sev-danger{--_c: var(--cad-danger)}.cad-toast__item.sev-secondary{--_c: var(--cad-fg-muted)}.cad-toast__item.sev-contrast{--_c: var(--cad-fg);background:var(--cad-fg);color:var(--cad-bg)}.cad-toast__icon{color:var(--_c);margin-top:1px;flex:none}.cad-toast__text{display:grid;gap:2px;flex:1;min-width:0}.cad-toast__text b{font-weight:600;font-size:13px}.cad-toast__text span{color:var(--cad-fg-secondary);font-size:12.5px;line-height:1.4}.sev-contrast .cad-toast__text span{color:inherit;opacity:.8}.cad-toast__actions{display:flex;gap:4px;margin-top:4px;margin-left:-8px}.cad-toast__close{border:0;background:transparent;color:var(--cad-fg-muted);cursor:pointer;padding:2px;border-radius:4px;display:grid;place-items:center;flex:none;margin:-2px -4px 0 0}.cad-toast__close:hover{color:var(--cad-fg);background:var(--cad-hover)}.cad-toast__progress{position:absolute;left:0;bottom:0;height:2px;width:100%;background:var(--_c);opacity:.5;transform-origin:left;animation:cad-toast-life linear forwards}@keyframes cad-toast-in{0%{opacity:0;transform:translate(24px)}to{opacity:1;transform:none}}@keyframes cad-toast-in-l{0%{opacity:0;transform:translate(-24px)}to{opacity:1;transform:none}}@keyframes cad-toast-out{to{opacity:0;transform:scale(.96)}}@keyframes cad-toast-life{0%{transform:scaleX(1)}to{transform:scaleX(0)}}@media(prefers-reduced-motion:reduce){.cad-toast__item,.cad-toast__item.is-out{animation-duration:1ms}}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: CadIconComponent, selector: "cad-icon", inputs: ["name", "size", "strokeWidth", "label", "title", "spin", "filled", "flip", "rotate"] }, { kind: "component", type: CadButtonComponent, selector: "button[cadButton], a[cadButton]", inputs: ["severity", "variant", "size", "loading", "disabled", "icon", "block", "value", "pressed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
12512
+ `, isInline: true, styles: [":host{position:fixed;display:flex;flex-direction:column;gap:8px;width:340px;max-width:calc(100% - 32px);pointer-events:none;font-family:var(--cad-font)}:host{--_haut: calc(16px + max(var(--cad-shell-top, 0px), env(safe-area-inset-top, 0px))) ;--_bas: calc(16px + max(var(--cad-shell-bottom, 0px), env(safe-area-inset-bottom, 0px))) }:host(.pos-top-right){top:var(--_haut);right:16px}:host(.pos-top-left){top:var(--_haut);left:16px}:host(.pos-bottom-right){bottom:var(--_bas);right:16px;flex-direction:column-reverse}:host(.pos-bottom-left){bottom:var(--_bas);left:16px;flex-direction:column-reverse}:host(.pos-top-center){top:var(--_haut);left:50%;transform:translate(-50%)}:host(.pos-bottom-center){bottom:var(--_bas);left:50%;transform:translate(-50%);flex-direction:column-reverse}.cad-toast__item{--_c: var(--cad-accent);position:relative;overflow:hidden;pointer-events:auto;display:flex;gap:10px;align-items:flex-start;padding:10px 12px;border-radius:10px;background:var(--cad-overlay);--cad-hover: var(--cad-overlay-hover);border:1px solid var(--cad-border);border-left:3px solid var(--_c);box-shadow:var(--cad-shadow-lg);color:var(--cad-fg);animation:cad-toast-in .18s var(--cad-ease)}.cad-toast__item.is-out{animation:cad-toast-out .16s var(--cad-ease) forwards}:host(.pos-top-left) .cad-toast__item,:host(.pos-bottom-left) .cad-toast__item{animation-name:cad-toast-in-l}.cad-toast__item.sev-success{--_c: var(--cad-success)}.cad-toast__item.sev-info{--_c: var(--cad-info)}.cad-toast__item.sev-warning{--_c: var(--cad-warning)}.cad-toast__item.sev-danger{--_c: var(--cad-danger)}.cad-toast__item.sev-secondary{--_c: var(--cad-fg-muted)}.cad-toast__item.sev-contrast{--_c: var(--cad-fg);background:var(--cad-fg);color:var(--cad-bg)}.cad-toast__icon{color:var(--_c);margin-top:1px;flex:none}.cad-toast__text{display:grid;gap:2px;flex:1;min-width:0}.cad-toast__text b{font-weight:600;font-size:13px}.cad-toast__text span{color:var(--cad-fg-secondary);font-size:12.5px;line-height:1.4}.sev-contrast .cad-toast__text span{color:inherit;opacity:.8}.cad-toast__actions{display:flex;gap:4px;margin-top:4px;margin-left:-8px}.cad-toast__close{border:0;background:transparent;color:var(--cad-fg-muted);cursor:pointer;padding:2px;border-radius:4px;display:grid;place-items:center;flex:none;margin:-2px -4px 0 0}.cad-toast__close:hover{color:var(--cad-fg);background:var(--cad-hover)}.cad-toast__progress{position:absolute;left:0;bottom:0;height:2px;width:100%;background:var(--_c);opacity:.5;transform-origin:left;animation:cad-toast-life linear forwards}@keyframes cad-toast-in{0%{opacity:0;transform:translate(24px)}to{opacity:1;transform:none}}@keyframes cad-toast-in-l{0%{opacity:0;transform:translate(-24px)}to{opacity:1;transform:none}}@keyframes cad-toast-out{to{opacity:0;transform:scale(.96)}}@keyframes cad-toast-life{0%{transform:scaleX(1)}to{transform:scaleX(0)}}@media(prefers-reduced-motion:reduce){.cad-toast__item,.cad-toast__item.is-out{animation-duration:1ms}}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: CadIconComponent, selector: "cad-icon", inputs: ["name", "size", "strokeWidth", "label", "title", "spin", "filled", "flip", "rotate"] }, { kind: "component", type: CadButtonComponent, selector: "button[cadButton], a[cadButton]", inputs: ["severity", "variant", "size", "loading", "disabled", "icon", "block", "value", "pressed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
12380
12513
  }
12381
12514
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: CadToastComponent, decorators: [{
12382
12515
  type: Component,
@@ -12409,7 +12542,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImpo
12409
12542
  }
12410
12543
  </div>
12411
12544
  }
12412
- `, styles: [":host{position:fixed;display:flex;flex-direction:column;gap:8px;width:340px;max-width:calc(100% - 32px);pointer-events:none;font-family:var(--cad-font)}:host(.pos-top-right){top:16px;right:16px}:host(.pos-top-left){top:16px;left:16px}:host(.pos-bottom-right){bottom:16px;right:16px;flex-direction:column-reverse}:host(.pos-bottom-left){bottom:16px;left:16px;flex-direction:column-reverse}:host(.pos-top-center){top:16px;left:50%;transform:translate(-50%)}:host(.pos-bottom-center){bottom:16px;left:50%;transform:translate(-50%);flex-direction:column-reverse}.cad-toast__item{--_c: var(--cad-accent);position:relative;overflow:hidden;pointer-events:auto;display:flex;gap:10px;align-items:flex-start;padding:10px 12px;border-radius:10px;background:var(--cad-overlay);border:1px solid var(--cad-border);border-left:3px solid var(--_c);box-shadow:var(--cad-shadow-lg);color:var(--cad-fg);animation:cad-toast-in .18s var(--cad-ease)}.cad-toast__item.is-out{animation:cad-toast-out .16s var(--cad-ease) forwards}:host(.pos-top-left) .cad-toast__item,:host(.pos-bottom-left) .cad-toast__item{animation-name:cad-toast-in-l}.cad-toast__item.sev-success{--_c: var(--cad-success)}.cad-toast__item.sev-info{--_c: var(--cad-info)}.cad-toast__item.sev-warning{--_c: var(--cad-warning)}.cad-toast__item.sev-danger{--_c: var(--cad-danger)}.cad-toast__item.sev-secondary{--_c: var(--cad-fg-muted)}.cad-toast__item.sev-contrast{--_c: var(--cad-fg);background:var(--cad-fg);color:var(--cad-bg)}.cad-toast__icon{color:var(--_c);margin-top:1px;flex:none}.cad-toast__text{display:grid;gap:2px;flex:1;min-width:0}.cad-toast__text b{font-weight:600;font-size:13px}.cad-toast__text span{color:var(--cad-fg-secondary);font-size:12.5px;line-height:1.4}.sev-contrast .cad-toast__text span{color:inherit;opacity:.8}.cad-toast__actions{display:flex;gap:4px;margin-top:4px;margin-left:-8px}.cad-toast__close{border:0;background:transparent;color:var(--cad-fg-muted);cursor:pointer;padding:2px;border-radius:4px;display:grid;place-items:center;flex:none;margin:-2px -4px 0 0}.cad-toast__close:hover{color:var(--cad-fg);background:var(--cad-hover)}.cad-toast__progress{position:absolute;left:0;bottom:0;height:2px;width:100%;background:var(--_c);opacity:.5;transform-origin:left;animation:cad-toast-life linear forwards}@keyframes cad-toast-in{0%{opacity:0;transform:translate(24px)}to{opacity:1;transform:none}}@keyframes cad-toast-in-l{0%{opacity:0;transform:translate(-24px)}to{opacity:1;transform:none}}@keyframes cad-toast-out{to{opacity:0;transform:scale(.96)}}@keyframes cad-toast-life{0%{transform:scaleX(1)}to{transform:scaleX(0)}}@media(prefers-reduced-motion:reduce){.cad-toast__item,.cad-toast__item.is-out{animation-duration:1ms}}\n"] }]
12545
+ `, styles: [":host{position:fixed;display:flex;flex-direction:column;gap:8px;width:340px;max-width:calc(100% - 32px);pointer-events:none;font-family:var(--cad-font)}:host{--_haut: calc(16px + max(var(--cad-shell-top, 0px), env(safe-area-inset-top, 0px))) ;--_bas: calc(16px + max(var(--cad-shell-bottom, 0px), env(safe-area-inset-bottom, 0px))) }:host(.pos-top-right){top:var(--_haut);right:16px}:host(.pos-top-left){top:var(--_haut);left:16px}:host(.pos-bottom-right){bottom:var(--_bas);right:16px;flex-direction:column-reverse}:host(.pos-bottom-left){bottom:var(--_bas);left:16px;flex-direction:column-reverse}:host(.pos-top-center){top:var(--_haut);left:50%;transform:translate(-50%)}:host(.pos-bottom-center){bottom:var(--_bas);left:50%;transform:translate(-50%);flex-direction:column-reverse}.cad-toast__item{--_c: var(--cad-accent);position:relative;overflow:hidden;pointer-events:auto;display:flex;gap:10px;align-items:flex-start;padding:10px 12px;border-radius:10px;background:var(--cad-overlay);--cad-hover: var(--cad-overlay-hover);border:1px solid var(--cad-border);border-left:3px solid var(--_c);box-shadow:var(--cad-shadow-lg);color:var(--cad-fg);animation:cad-toast-in .18s var(--cad-ease)}.cad-toast__item.is-out{animation:cad-toast-out .16s var(--cad-ease) forwards}:host(.pos-top-left) .cad-toast__item,:host(.pos-bottom-left) .cad-toast__item{animation-name:cad-toast-in-l}.cad-toast__item.sev-success{--_c: var(--cad-success)}.cad-toast__item.sev-info{--_c: var(--cad-info)}.cad-toast__item.sev-warning{--_c: var(--cad-warning)}.cad-toast__item.sev-danger{--_c: var(--cad-danger)}.cad-toast__item.sev-secondary{--_c: var(--cad-fg-muted)}.cad-toast__item.sev-contrast{--_c: var(--cad-fg);background:var(--cad-fg);color:var(--cad-bg)}.cad-toast__icon{color:var(--_c);margin-top:1px;flex:none}.cad-toast__text{display:grid;gap:2px;flex:1;min-width:0}.cad-toast__text b{font-weight:600;font-size:13px}.cad-toast__text span{color:var(--cad-fg-secondary);font-size:12.5px;line-height:1.4}.sev-contrast .cad-toast__text span{color:inherit;opacity:.8}.cad-toast__actions{display:flex;gap:4px;margin-top:4px;margin-left:-8px}.cad-toast__close{border:0;background:transparent;color:var(--cad-fg-muted);cursor:pointer;padding:2px;border-radius:4px;display:grid;place-items:center;flex:none;margin:-2px -4px 0 0}.cad-toast__close:hover{color:var(--cad-fg);background:var(--cad-hover)}.cad-toast__progress{position:absolute;left:0;bottom:0;height:2px;width:100%;background:var(--_c);opacity:.5;transform-origin:left;animation:cad-toast-life linear forwards}@keyframes cad-toast-in{0%{opacity:0;transform:translate(24px)}to{opacity:1;transform:none}}@keyframes cad-toast-in-l{0%{opacity:0;transform:translate(-24px)}to{opacity:1;transform:none}}@keyframes cad-toast-out{to{opacity:0;transform:scale(.96)}}@keyframes cad-toast-life{0%{transform:scaleX(1)}to{transform:scaleX(0)}}@media(prefers-reduced-motion:reduce){.cad-toast__item,.cad-toast__item.is-out{animation-duration:1ms}}\n"] }]
12413
12546
  }], ctorParameters: () => [], propDecorators: { position: [{ type: i0.Input, args: [{ isSignal: true, alias: "position", required: false }] }], key: [{ type: i0.Input, args: [{ isSignal: true, alias: "key", required: false }] }], life: [{ type: i0.Input, args: [{ isSignal: true, alias: "life", required: false }] }], maxVisible: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxVisible", required: false }] }], preventDuplicates: [{ type: i0.Input, args: [{ isSignal: true, alias: "preventDuplicates", required: false }] }], showProgress: [{ type: i0.Input, args: [{ isSignal: true, alias: "showProgress", required: false }] }], zIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "zIndex", required: false }] }], closed: [{ type: i0.Output, args: ["closed"] }], clicked: [{ type: i0.Output, args: ["clicked"] }], itemTpl: [{ type: i0.ContentChild, args: [i0.forwardRef(() => CadToastItemDirective), { isSignal: true }] }] } });
12414
12547
 
12415
12548
  /**
@@ -13769,7 +13902,7 @@ const CAD_MAP_GLOBAL_STYLES = `
13769
13902
  .cad-map .maplibregl-ctrl-attrib.maplibregl-compact { min-height: 24px; }
13770
13903
  .cad-map .maplibregl-ctrl-attrib-button { ${mask(ico("%3Ccircle cx='12' cy='12' r='9'/%3E%3Cpath d='M12 11v5M12 8v.5'/%3E"))} color: var(--cad-fg-muted); }
13771
13904
  .cad-map .maplibregl-popup { z-index: 5; max-width: 320px !important; }
13772
- .cad-map .maplibregl-popup-content { background: var(--cad-overlay); color: var(--cad-fg); border: 1px solid var(--cad-border); border-radius: 10px; box-shadow: var(--cad-shadow-lg); padding: 10px 12px; font: 12.5px/1.4 var(--cad-font); min-width: 160px; }
13905
+ .cad-map .maplibregl-popup-content { background: var(--cad-overlay); --cad-hover: var(--cad-overlay-hover); color: var(--cad-fg); border: 1px solid var(--cad-border); border-radius: 10px; box-shadow: var(--cad-shadow-lg); padding: 10px 12px; font: 12.5px/1.4 var(--cad-font); min-width: 160px; }
13773
13906
  .cad-map .maplibregl-popup-anchor-bottom .maplibregl-popup-tip { border-top-color: var(--cad-overlay); }
13774
13907
  .cad-map .maplibregl-popup-anchor-top .maplibregl-popup-tip { border-bottom-color: var(--cad-overlay); }
13775
13908
  .cad-map .maplibregl-popup-anchor-left .maplibregl-popup-tip { border-right-color: var(--cad-overlay); }
@@ -14885,7 +15018,7 @@ class CadMapSearchComponent {
14885
15018
  } @else if (open() && q().length >= 3 && !busy() && searched()) {
14886
15019
  <ul class="list"><li class="empty">Aucun résultat</li></ul>
14887
15020
  }
14888
- `, isInline: true, styles: [":host{display:block;position:relative;width:300px;max-width:calc(100% - 80px);font:var(--cad-font-size) var(--cad-font);z-index:6}.box{display:flex;align-items:center;gap:8px;height:34px;padding:0 10px;background:var(--cad-surface);border:1px solid var(--cad-border);border-radius:8px;box-shadow:0 2px 6px #0000001f;color:var(--cad-fg-muted);transition:border-color var(--cad-dur),box-shadow var(--cad-dur)}.box.has-focus{border-color:var(--cad-accent);box-shadow:0 0 0 3px var(--cad-ring)}input{flex:1 1 0;width:0;min-width:0;border:0;outline:0;background:transparent;color:var(--cad-fg);font:inherit}input::placeholder{color:var(--cad-fg-muted)}input::-webkit-search-cancel-button{display:none}.clr{border:0;background:transparent;color:var(--cad-fg-muted);cursor:pointer;display:grid;place-items:center;width:20px;height:20px;border-radius:4px;padding:0}.clr:hover{background:var(--cad-hover);color:var(--cad-fg)}.spin{color:var(--cad-accent)}.list{position:absolute;left:0;right:0;top:calc(100% + 6px);margin:0;padding:4px;list-style:none;background:var(--cad-overlay);border:1px solid var(--cad-border);border-radius:9px;box-shadow:var(--cad-shadow-lg);max-height:280px;overflow:auto}li{display:flex;align-items:center;gap:8px;padding:7px 8px;border-radius:6px;cursor:pointer;color:var(--cad-fg);font-size:12.5px}li .lbl{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}li small{color:var(--cad-fg-muted);font-size:11px;white-space:nowrap}li cad-icon{color:var(--cad-fg-muted)}li.is-active{background:var(--cad-hover)}li.empty{color:var(--cad-fg-muted);cursor:default;font-style:italic}\n"], dependencies: [{ kind: "component", type: CadIconComponent, selector: "cad-icon", inputs: ["name", "size", "strokeWidth", "label", "title", "spin", "filled", "flip", "rotate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
15021
+ `, isInline: true, styles: [":host{display:block;position:relative;width:300px;max-width:calc(100% - 80px);font:var(--cad-font-size) var(--cad-font);z-index:6}.box{display:flex;align-items:center;gap:8px;height:34px;padding:0 10px;background:var(--cad-surface);border:1px solid var(--cad-border);border-radius:8px;box-shadow:0 2px 6px #0000001f;color:var(--cad-fg-muted);transition:border-color var(--cad-dur),box-shadow var(--cad-dur)}.box.has-focus{border-color:var(--cad-accent);box-shadow:0 0 0 3px var(--cad-ring)}input{flex:1 1 0;width:0;min-width:0;border:0;outline:0;background:transparent;color:var(--cad-fg);font:inherit}input::placeholder{color:var(--cad-fg-muted)}input::-webkit-search-cancel-button{display:none}.clr{border:0;background:transparent;color:var(--cad-fg-muted);cursor:pointer;display:grid;place-items:center;width:20px;height:20px;border-radius:4px;padding:0}.clr:hover{background:var(--cad-hover);color:var(--cad-fg)}.spin{color:var(--cad-accent)}.list{position:absolute;left:0;right:0;top:calc(100% + 6px);margin:0;padding:4px;list-style:none;background:var(--cad-overlay);--cad-hover: var(--cad-overlay-hover);border:1px solid var(--cad-border);border-radius:9px;box-shadow:var(--cad-shadow-lg);max-height:280px;overflow:auto}li{display:flex;align-items:center;gap:8px;padding:7px 8px;border-radius:6px;cursor:pointer;color:var(--cad-fg);font-size:12.5px}li .lbl{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}li small{color:var(--cad-fg-muted);font-size:11px;white-space:nowrap}li cad-icon{color:var(--cad-fg-muted)}li.is-active{background:var(--cad-hover)}li.empty{color:var(--cad-fg-muted);cursor:default;font-style:italic}\n"], dependencies: [{ kind: "component", type: CadIconComponent, selector: "cad-icon", inputs: ["name", "size", "strokeWidth", "label", "title", "spin", "filled", "flip", "rotate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
14889
15022
  }
14890
15023
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: CadMapSearchComponent, decorators: [{
14891
15024
  type: Component,
@@ -14908,7 +15041,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImpo
14908
15041
  } @else if (open() && q().length >= 3 && !busy() && searched()) {
14909
15042
  <ul class="list"><li class="empty">Aucun résultat</li></ul>
14910
15043
  }
14911
- `, styles: [":host{display:block;position:relative;width:300px;max-width:calc(100% - 80px);font:var(--cad-font-size) var(--cad-font);z-index:6}.box{display:flex;align-items:center;gap:8px;height:34px;padding:0 10px;background:var(--cad-surface);border:1px solid var(--cad-border);border-radius:8px;box-shadow:0 2px 6px #0000001f;color:var(--cad-fg-muted);transition:border-color var(--cad-dur),box-shadow var(--cad-dur)}.box.has-focus{border-color:var(--cad-accent);box-shadow:0 0 0 3px var(--cad-ring)}input{flex:1 1 0;width:0;min-width:0;border:0;outline:0;background:transparent;color:var(--cad-fg);font:inherit}input::placeholder{color:var(--cad-fg-muted)}input::-webkit-search-cancel-button{display:none}.clr{border:0;background:transparent;color:var(--cad-fg-muted);cursor:pointer;display:grid;place-items:center;width:20px;height:20px;border-radius:4px;padding:0}.clr:hover{background:var(--cad-hover);color:var(--cad-fg)}.spin{color:var(--cad-accent)}.list{position:absolute;left:0;right:0;top:calc(100% + 6px);margin:0;padding:4px;list-style:none;background:var(--cad-overlay);border:1px solid var(--cad-border);border-radius:9px;box-shadow:var(--cad-shadow-lg);max-height:280px;overflow:auto}li{display:flex;align-items:center;gap:8px;padding:7px 8px;border-radius:6px;cursor:pointer;color:var(--cad-fg);font-size:12.5px}li .lbl{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}li small{color:var(--cad-fg-muted);font-size:11px;white-space:nowrap}li cad-icon{color:var(--cad-fg-muted)}li.is-active{background:var(--cad-hover)}li.empty{color:var(--cad-fg-muted);cursor:default;font-style:italic}\n"] }]
15044
+ `, styles: [":host{display:block;position:relative;width:300px;max-width:calc(100% - 80px);font:var(--cad-font-size) var(--cad-font);z-index:6}.box{display:flex;align-items:center;gap:8px;height:34px;padding:0 10px;background:var(--cad-surface);border:1px solid var(--cad-border);border-radius:8px;box-shadow:0 2px 6px #0000001f;color:var(--cad-fg-muted);transition:border-color var(--cad-dur),box-shadow var(--cad-dur)}.box.has-focus{border-color:var(--cad-accent);box-shadow:0 0 0 3px var(--cad-ring)}input{flex:1 1 0;width:0;min-width:0;border:0;outline:0;background:transparent;color:var(--cad-fg);font:inherit}input::placeholder{color:var(--cad-fg-muted)}input::-webkit-search-cancel-button{display:none}.clr{border:0;background:transparent;color:var(--cad-fg-muted);cursor:pointer;display:grid;place-items:center;width:20px;height:20px;border-radius:4px;padding:0}.clr:hover{background:var(--cad-hover);color:var(--cad-fg)}.spin{color:var(--cad-accent)}.list{position:absolute;left:0;right:0;top:calc(100% + 6px);margin:0;padding:4px;list-style:none;background:var(--cad-overlay);--cad-hover: var(--cad-overlay-hover);border:1px solid var(--cad-border);border-radius:9px;box-shadow:var(--cad-shadow-lg);max-height:280px;overflow:auto}li{display:flex;align-items:center;gap:8px;padding:7px 8px;border-radius:6px;cursor:pointer;color:var(--cad-fg);font-size:12.5px}li .lbl{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}li small{color:var(--cad-fg-muted);font-size:11px;white-space:nowrap}li cad-icon{color:var(--cad-fg-muted)}li.is-active{background:var(--cad-hover)}li.empty{color:var(--cad-fg-muted);cursor:default;font-style:italic}\n"] }]
14912
15045
  }], ctorParameters: () => [], propDecorators: { inp: [{ type: i0.ViewChild, args: ['inp', { isSignal: true }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], limit: [{ type: i0.Input, args: [{ isSignal: true, alias: "limit", required: false }] }], debounce: [{ type: i0.Input, args: [{ isSignal: true, alias: "debounce", required: false }] }], provider: [{ type: i0.Input, args: [{ isSignal: true, alias: "provider", required: false }] }], flyZoom: [{ type: i0.Input, args: [{ isSignal: true, alias: "flyZoom", required: false }] }], marker: [{ type: i0.Input, args: [{ isSignal: true, alias: "marker", required: false }] }], nearMap: [{ type: i0.Input, args: [{ isSignal: true, alias: "nearMap", required: false }] }], select: [{ type: i0.Output, args: ["select"] }], cleared: [{ type: i0.Output, args: ["cleared"] }] } });
14913
15046
  const escapeHtml = (s) => s.replace(/[&<>"']/g, c => ({ '&': '&amp;', '<': '&lt;', '>': '&gt;', '"': '&quot;', "'": '&#39;' })[c]);
14914
15047
 
@@ -17156,7 +17289,7 @@ class CadOrderlistComponent extends CadValueAccessor {
17156
17289
  } @empty { <div class="cad-orderlist__empty">{{ query() ? 'Aucun résultat' : emptyMessage() }}</div> }
17157
17290
  </div>
17158
17291
  </div>
17159
- `, isInline: true, styles: [":host{display:flex;gap:8px;align-items:flex-start;min-width:0;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg)}:host(.controls-top){flex-direction:column}:host(.controls-top) .cad-orderlist__ctrl{flex-direction:row}:host(.is-disabled){opacity:.6}.cad-orderlist__ctrl{display:flex;flex-direction:column;gap:4px;flex:none}.cad-orderlist__box{flex:1;min-width:0;display:flex;flex-direction:column;background:var(--cad-input-bg);border:1px solid var(--cad-input-border);border-radius:var(--cad-radius);overflow:hidden}:host(:focus-within) .cad-orderlist__box{border-color:var(--cad-accent);box-shadow:0 0 0 3px var(--cad-ring)}.cad-orderlist__hd{display:flex;align-items:center;gap:8px;padding:8px 12px;font-weight:600;font-size:12.5px;border-bottom:1px solid var(--cad-border);background:var(--cad-bg-subtle)}.cad-orderlist__hd small{margin-left:auto;font:500 10.5px var(--cad-font-mono);padding:1px 6px;border-radius:999px;background:var(--cad-elevated);color:var(--cad-fg-secondary)}.cad-orderlist__filter{display:flex;align-items:center;gap:6px;padding:6px 8px;border-bottom:1px solid var(--cad-border);color:var(--cad-fg-muted)}.cad-orderlist__filter input{flex:1 1 0;width:0;border:0;outline:0;background:transparent;color:var(--cad-fg);font:inherit;font-size:var(--cad-font-size-sm)}.cad-orderlist__list{flex:1;overflow-y:auto;padding:4px;outline:none;min-height:40px}.cad-orderlist__item{display:flex;align-items:center;gap:8px;padding:7px 8px;border-radius:6px;cursor:default;-webkit-user-select:none;user-select:none;background:var(--cad-input-bg)}:host(.is-striped) .cad-orderlist__item:nth-child(2n){background:var(--cad-bg-subtle)}.cad-orderlist__item:hover,.cad-orderlist__item.is-active{background:var(--cad-hover)}.cad-orderlist__item.is-selected{background:var(--cad-accent-soft);color:var(--cad-accent);font-weight:500}.cad-orderlist__item .lbl{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cad-orderlist__item .dh{color:var(--cad-fg-muted);cursor:grab;display:inline-grid;place-items:center}.cad-orderlist__item.cdk-drag-preview{box-shadow:var(--cad-shadow-lg);border:1px solid var(--cad-border);background:var(--cad-overlay);border-radius:6px}.cad-orderlist__ph{height:32px;border:1px dashed var(--cad-accent);border-radius:6px;background:var(--cad-accent-soft);margin:2px 0}.cdk-drop-list-dragging .cad-orderlist__item:not(.cdk-drag-placeholder){transition:transform .2s cubic-bezier(0,0,.2,1)}.cad-orderlist__empty{padding:14px;text-align:center;color:var(--cad-fg-muted);font-size:var(--cad-font-size-sm)}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "directive", type: CdkDragPlaceholder, selector: "ng-template[cdkDragPlaceholder]", inputs: ["data"] }, { kind: "component", type: CadIconComponent, selector: "cad-icon", inputs: ["name", "size", "strokeWidth", "label", "title", "spin", "filled", "flip", "rotate"] }, { kind: "component", type: CadButtonComponent, selector: "button[cadButton], a[cadButton]", inputs: ["severity", "variant", "size", "loading", "disabled", "icon", "block", "value", "pressed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
17292
+ `, isInline: true, styles: [":host{display:flex;gap:8px;align-items:flex-start;min-width:0;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg)}:host(.controls-top){flex-direction:column}:host(.controls-top) .cad-orderlist__ctrl{flex-direction:row}:host(.is-disabled){opacity:.6}.cad-orderlist__ctrl{display:flex;flex-direction:column;gap:4px;flex:none}.cad-orderlist__box{flex:1;min-width:0;display:flex;flex-direction:column;background:var(--cad-input-bg);border:1px solid var(--cad-input-border);border-radius:var(--cad-radius);overflow:hidden}:host(:focus-within) .cad-orderlist__box{border-color:var(--cad-accent);box-shadow:0 0 0 3px var(--cad-ring)}.cad-orderlist__hd{display:flex;align-items:center;gap:8px;padding:8px 12px;font-weight:600;font-size:12.5px;border-bottom:1px solid var(--cad-border);background:var(--cad-bg-subtle)}.cad-orderlist__hd small{margin-left:auto;font:500 10.5px var(--cad-font-mono);padding:1px 6px;border-radius:999px;background:var(--cad-elevated);color:var(--cad-fg-secondary)}.cad-orderlist__filter{display:flex;align-items:center;gap:6px;padding:6px 8px;border-bottom:1px solid var(--cad-border);color:var(--cad-fg-muted)}.cad-orderlist__filter input{flex:1 1 0;width:0;border:0;outline:0;background:transparent;color:var(--cad-fg);font:inherit;font-size:var(--cad-font-size-sm)}.cad-orderlist__list{flex:1;overflow-y:auto;padding:4px;outline:none;min-height:40px}.cad-orderlist__item{display:flex;align-items:center;gap:8px;padding:7px 8px;border-radius:6px;cursor:default;-webkit-user-select:none;user-select:none;background:var(--cad-input-bg)}:host(.is-striped) .cad-orderlist__item:nth-child(2n){background:var(--cad-bg-subtle)}.cad-orderlist__item:hover,.cad-orderlist__item.is-active{background:var(--cad-hover)}.cad-orderlist__item.is-selected{background:var(--cad-accent-soft);color:var(--cad-accent);font-weight:500}.cad-orderlist__item .lbl{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cad-orderlist__item .dh{color:var(--cad-fg-muted);cursor:grab;display:inline-grid;place-items:center}.cad-orderlist__item.cdk-drag-preview{box-shadow:var(--cad-shadow-lg);border:1px solid var(--cad-border);background:var(--cad-overlay);--cad-hover: var(--cad-overlay-hover);border-radius:6px}.cad-orderlist__ph{height:32px;border:1px dashed var(--cad-accent);border-radius:6px;background:var(--cad-accent-soft);margin:2px 0}.cdk-drop-list-dragging .cad-orderlist__item:not(.cdk-drag-placeholder){transition:transform .2s cubic-bezier(0,0,.2,1)}.cad-orderlist__empty{padding:14px;text-align:center;color:var(--cad-fg-muted);font-size:var(--cad-font-size-sm)}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "directive", type: CdkDragPlaceholder, selector: "ng-template[cdkDragPlaceholder]", inputs: ["data"] }, { kind: "component", type: CadIconComponent, selector: "cad-icon", inputs: ["name", "size", "strokeWidth", "label", "title", "spin", "filled", "flip", "rotate"] }, { kind: "component", type: CadButtonComponent, selector: "button[cadButton], a[cadButton]", inputs: ["severity", "variant", "size", "loading", "disabled", "icon", "block", "value", "pressed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
17160
17293
  }
17161
17294
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: CadOrderlistComponent, decorators: [{
17162
17295
  type: Component,
@@ -17184,7 +17317,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImpo
17184
17317
  } @empty { <div class="cad-orderlist__empty">{{ query() ? 'Aucun résultat' : emptyMessage() }}</div> }
17185
17318
  </div>
17186
17319
  </div>
17187
- `, styles: [":host{display:flex;gap:8px;align-items:flex-start;min-width:0;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg)}:host(.controls-top){flex-direction:column}:host(.controls-top) .cad-orderlist__ctrl{flex-direction:row}:host(.is-disabled){opacity:.6}.cad-orderlist__ctrl{display:flex;flex-direction:column;gap:4px;flex:none}.cad-orderlist__box{flex:1;min-width:0;display:flex;flex-direction:column;background:var(--cad-input-bg);border:1px solid var(--cad-input-border);border-radius:var(--cad-radius);overflow:hidden}:host(:focus-within) .cad-orderlist__box{border-color:var(--cad-accent);box-shadow:0 0 0 3px var(--cad-ring)}.cad-orderlist__hd{display:flex;align-items:center;gap:8px;padding:8px 12px;font-weight:600;font-size:12.5px;border-bottom:1px solid var(--cad-border);background:var(--cad-bg-subtle)}.cad-orderlist__hd small{margin-left:auto;font:500 10.5px var(--cad-font-mono);padding:1px 6px;border-radius:999px;background:var(--cad-elevated);color:var(--cad-fg-secondary)}.cad-orderlist__filter{display:flex;align-items:center;gap:6px;padding:6px 8px;border-bottom:1px solid var(--cad-border);color:var(--cad-fg-muted)}.cad-orderlist__filter input{flex:1 1 0;width:0;border:0;outline:0;background:transparent;color:var(--cad-fg);font:inherit;font-size:var(--cad-font-size-sm)}.cad-orderlist__list{flex:1;overflow-y:auto;padding:4px;outline:none;min-height:40px}.cad-orderlist__item{display:flex;align-items:center;gap:8px;padding:7px 8px;border-radius:6px;cursor:default;-webkit-user-select:none;user-select:none;background:var(--cad-input-bg)}:host(.is-striped) .cad-orderlist__item:nth-child(2n){background:var(--cad-bg-subtle)}.cad-orderlist__item:hover,.cad-orderlist__item.is-active{background:var(--cad-hover)}.cad-orderlist__item.is-selected{background:var(--cad-accent-soft);color:var(--cad-accent);font-weight:500}.cad-orderlist__item .lbl{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cad-orderlist__item .dh{color:var(--cad-fg-muted);cursor:grab;display:inline-grid;place-items:center}.cad-orderlist__item.cdk-drag-preview{box-shadow:var(--cad-shadow-lg);border:1px solid var(--cad-border);background:var(--cad-overlay);border-radius:6px}.cad-orderlist__ph{height:32px;border:1px dashed var(--cad-accent);border-radius:6px;background:var(--cad-accent-soft);margin:2px 0}.cdk-drop-list-dragging .cad-orderlist__item:not(.cdk-drag-placeholder){transition:transform .2s cubic-bezier(0,0,.2,1)}.cad-orderlist__empty{padding:14px;text-align:center;color:var(--cad-fg-muted);font-size:var(--cad-font-size-sm)}\n"] }]
17320
+ `, styles: [":host{display:flex;gap:8px;align-items:flex-start;min-width:0;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg)}:host(.controls-top){flex-direction:column}:host(.controls-top) .cad-orderlist__ctrl{flex-direction:row}:host(.is-disabled){opacity:.6}.cad-orderlist__ctrl{display:flex;flex-direction:column;gap:4px;flex:none}.cad-orderlist__box{flex:1;min-width:0;display:flex;flex-direction:column;background:var(--cad-input-bg);border:1px solid var(--cad-input-border);border-radius:var(--cad-radius);overflow:hidden}:host(:focus-within) .cad-orderlist__box{border-color:var(--cad-accent);box-shadow:0 0 0 3px var(--cad-ring)}.cad-orderlist__hd{display:flex;align-items:center;gap:8px;padding:8px 12px;font-weight:600;font-size:12.5px;border-bottom:1px solid var(--cad-border);background:var(--cad-bg-subtle)}.cad-orderlist__hd small{margin-left:auto;font:500 10.5px var(--cad-font-mono);padding:1px 6px;border-radius:999px;background:var(--cad-elevated);color:var(--cad-fg-secondary)}.cad-orderlist__filter{display:flex;align-items:center;gap:6px;padding:6px 8px;border-bottom:1px solid var(--cad-border);color:var(--cad-fg-muted)}.cad-orderlist__filter input{flex:1 1 0;width:0;border:0;outline:0;background:transparent;color:var(--cad-fg);font:inherit;font-size:var(--cad-font-size-sm)}.cad-orderlist__list{flex:1;overflow-y:auto;padding:4px;outline:none;min-height:40px}.cad-orderlist__item{display:flex;align-items:center;gap:8px;padding:7px 8px;border-radius:6px;cursor:default;-webkit-user-select:none;user-select:none;background:var(--cad-input-bg)}:host(.is-striped) .cad-orderlist__item:nth-child(2n){background:var(--cad-bg-subtle)}.cad-orderlist__item:hover,.cad-orderlist__item.is-active{background:var(--cad-hover)}.cad-orderlist__item.is-selected{background:var(--cad-accent-soft);color:var(--cad-accent);font-weight:500}.cad-orderlist__item .lbl{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cad-orderlist__item .dh{color:var(--cad-fg-muted);cursor:grab;display:inline-grid;place-items:center}.cad-orderlist__item.cdk-drag-preview{box-shadow:var(--cad-shadow-lg);border:1px solid var(--cad-border);background:var(--cad-overlay);--cad-hover: var(--cad-overlay-hover);border-radius:6px}.cad-orderlist__ph{height:32px;border:1px dashed var(--cad-accent);border-radius:6px;background:var(--cad-accent-soft);margin:2px 0}.cdk-drop-list-dragging .cad-orderlist__item:not(.cdk-drag-placeholder){transition:transform .2s cubic-bezier(0,0,.2,1)}.cad-orderlist__empty{padding:14px;text-align:center;color:var(--cad-fg-muted);font-size:var(--cad-font-size-sm)}\n"] }]
17188
17321
  }], propDecorators: { optionLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "optionLabel", required: false }] }], dataKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "dataKey", required: false }] }], header: [{ type: i0.Input, args: [{ isSignal: true, alias: "header", required: false }] }], controls: [{ type: i0.Input, args: [{ isSignal: true, alias: "controls", required: false }] }], dragHandle: [{ type: i0.Input, args: [{ isSignal: true, alias: "dragHandle", required: false }] }], filter: [{ type: i0.Input, args: [{ isSignal: true, alias: "filter", required: false }] }], filterPlaceholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterPlaceholder", required: false }] }], listHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "listHeight", required: false }] }], stripedRows: [{ type: i0.Input, args: [{ isSignal: true, alias: "stripedRows", required: false }] }], metaKeySelection: [{ type: i0.Input, args: [{ isSignal: true, alias: "metaKeySelection", required: false }] }], emptyMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "emptyMessage", required: false }] }], reorder: [{ type: i0.Output, args: ["reorder"] }], selectionChange: [{ type: i0.Output, args: ["selectionChange"] }], itemTpl: [{ type: i0.ContentChild, args: [i0.forwardRef(() => CadListItemDirective), { isSignal: true }] }], headerTpl: [{ type: i0.ContentChild, args: [i0.forwardRef(() => CadListHeaderDirective), { isSignal: true }] }] } });
17189
17322
 
17190
17323
  /**
@@ -17383,7 +17516,7 @@ class CadPicklistComponent extends CadValueAccessor {
17383
17516
  </div>
17384
17517
  <ng-container *ngTemplateOutlet="listTpl; context: { side: 'target' }"/>
17385
17518
  @if (showTargetControls()) { <div class="pl-ctrl side" role="group" aria-label="Réordonner la cible">@for (b of ORDER; track b.k) {<button cadButton severity="secondary" size="sm" icon [attr.aria-label]="b.l" [title]="b.l" [disabled]="!sel.target().length" (click)="order('target', b.k)"><cad-icon [name]="b.i" [size]="13" [style.transform]="b.rot ? 'rotate(180deg)' : null"/></button>} </div> }
17386
- `, isInline: true, styles: [":host{display:flex;gap:10px;align-items:stretch;min-width:0;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg)}:host(.is-disabled){opacity:.6}.pl-box{flex:1 1 0;min-width:0;display:flex;flex-direction:column;background:var(--cad-input-bg);border:1px solid var(--cad-input-border);border-radius:var(--cad-radius);overflow:hidden}.pl-box:focus-within{border-color:var(--cad-accent);box-shadow:0 0 0 3px var(--cad-ring)}.pl-hd{display:flex;align-items:center;gap:8px;padding:8px 12px;font-weight:600;font-size:12.5px;border-bottom:1px solid var(--cad-border);background:var(--cad-bg-subtle)}.pl-hd small{margin-left:auto;font:500 10.5px var(--cad-font-mono);padding:1px 6px;border-radius:999px;background:var(--cad-elevated);color:var(--cad-fg-secondary)}.pl-filter{display:flex;align-items:center;gap:6px;padding:6px 8px;border-bottom:1px solid var(--cad-border);color:var(--cad-fg-muted)}.pl-filter input{flex:1 1 0;width:0;border:0;outline:0;background:transparent;color:var(--cad-fg);font:inherit;font-size:var(--cad-font-size-sm)}.pl-list{flex:1;overflow-y:auto;padding:4px;outline:none;min-height:120px}.pl-item{display:flex;align-items:center;gap:8px;padding:7px 8px;border-radius:6px;cursor:grab;-webkit-user-select:none;user-select:none;background:var(--cad-input-bg)}.pl-item:hover{background:var(--cad-hover)}.pl-item.is-selected{background:var(--cad-accent-soft);color:var(--cad-accent);font-weight:500}.pl-item .lbl{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pl-item.cdk-drag-preview{box-shadow:var(--cad-shadow-lg);border:1px solid var(--cad-border);background:var(--cad-overlay);border-radius:6px}.pl-ph{height:32px;border:1px dashed var(--cad-accent);border-radius:6px;background:var(--cad-accent-soft);margin:2px 0}.cdk-drop-list-dragging .pl-item:not(.cdk-drag-placeholder){transition:transform .2s cubic-bezier(0,0,.2,1)}.pl-list.cdk-drop-list-receiving{background:var(--cad-accent-soft)}.pl-empty{padding:14px;text-align:center;color:var(--cad-fg-muted);font-size:var(--cad-font-size-sm)}.pl-ctrl{display:flex;flex-direction:column;gap:4px;justify-content:center;flex:none}:host(.is-stacked){flex-direction:column}:host(.is-stacked) .pl-ctrl{flex-direction:row;justify-content:center}:host(.is-stacked) .pl-ctrl.mid .r{transform:rotate(90deg)}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: CdkDragPlaceholder, selector: "ng-template[cdkDragPlaceholder]", inputs: ["data"] }, { kind: "component", type: CadIconComponent, selector: "cad-icon", inputs: ["name", "size", "strokeWidth", "label", "title", "spin", "filled", "flip", "rotate"] }, { kind: "component", type: CadButtonComponent, selector: "button[cadButton], a[cadButton]", inputs: ["severity", "variant", "size", "loading", "disabled", "icon", "block", "value", "pressed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
17519
+ `, isInline: true, styles: [":host{display:flex;gap:10px;align-items:stretch;min-width:0;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg)}:host(.is-disabled){opacity:.6}.pl-box{flex:1 1 0;min-width:0;display:flex;flex-direction:column;background:var(--cad-input-bg);border:1px solid var(--cad-input-border);border-radius:var(--cad-radius);overflow:hidden}.pl-box:focus-within{border-color:var(--cad-accent);box-shadow:0 0 0 3px var(--cad-ring)}.pl-hd{display:flex;align-items:center;gap:8px;padding:8px 12px;font-weight:600;font-size:12.5px;border-bottom:1px solid var(--cad-border);background:var(--cad-bg-subtle)}.pl-hd small{margin-left:auto;font:500 10.5px var(--cad-font-mono);padding:1px 6px;border-radius:999px;background:var(--cad-elevated);color:var(--cad-fg-secondary)}.pl-filter{display:flex;align-items:center;gap:6px;padding:6px 8px;border-bottom:1px solid var(--cad-border);color:var(--cad-fg-muted)}.pl-filter input{flex:1 1 0;width:0;border:0;outline:0;background:transparent;color:var(--cad-fg);font:inherit;font-size:var(--cad-font-size-sm)}.pl-list{flex:1;overflow-y:auto;padding:4px;outline:none;min-height:120px}.pl-item{display:flex;align-items:center;gap:8px;padding:7px 8px;border-radius:6px;cursor:grab;-webkit-user-select:none;user-select:none;background:var(--cad-input-bg)}.pl-item:hover{background:var(--cad-hover)}.pl-item.is-selected{background:var(--cad-accent-soft);color:var(--cad-accent);font-weight:500}.pl-item .lbl{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pl-item.cdk-drag-preview{box-shadow:var(--cad-shadow-lg);border:1px solid var(--cad-border);background:var(--cad-overlay);--cad-hover: var(--cad-overlay-hover);border-radius:6px}.pl-ph{height:32px;border:1px dashed var(--cad-accent);border-radius:6px;background:var(--cad-accent-soft);margin:2px 0}.cdk-drop-list-dragging .pl-item:not(.cdk-drag-placeholder){transition:transform .2s cubic-bezier(0,0,.2,1)}.pl-list.cdk-drop-list-receiving{background:var(--cad-accent-soft)}.pl-empty{padding:14px;text-align:center;color:var(--cad-fg-muted);font-size:var(--cad-font-size-sm)}.pl-ctrl{display:flex;flex-direction:column;gap:4px;justify-content:center;flex:none}:host(.is-stacked){flex-direction:column}:host(.is-stacked) .pl-ctrl{flex-direction:row;justify-content:center}:host(.is-stacked) .pl-ctrl.mid .r{transform:rotate(90deg)}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: CdkDragPlaceholder, selector: "ng-template[cdkDragPlaceholder]", inputs: ["data"] }, { kind: "component", type: CadIconComponent, selector: "cad-icon", inputs: ["name", "size", "strokeWidth", "label", "title", "spin", "filled", "flip", "rotate"] }, { kind: "component", type: CadButtonComponent, selector: "button[cadButton], a[cadButton]", inputs: ["severity", "variant", "size", "loading", "disabled", "icon", "block", "value", "pressed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
17387
17520
  }
17388
17521
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: CadPicklistComponent, decorators: [{
17389
17522
  type: Component,
@@ -17414,7 +17547,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImpo
17414
17547
  </div>
17415
17548
  <ng-container *ngTemplateOutlet="listTpl; context: { side: 'target' }"/>
17416
17549
  @if (showTargetControls()) { <div class="pl-ctrl side" role="group" aria-label="Réordonner la cible">@for (b of ORDER; track b.k) {<button cadButton severity="secondary" size="sm" icon [attr.aria-label]="b.l" [title]="b.l" [disabled]="!sel.target().length" (click)="order('target', b.k)"><cad-icon [name]="b.i" [size]="13" [style.transform]="b.rot ? 'rotate(180deg)' : null"/></button>} </div> }
17417
- `, styles: [":host{display:flex;gap:10px;align-items:stretch;min-width:0;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg)}:host(.is-disabled){opacity:.6}.pl-box{flex:1 1 0;min-width:0;display:flex;flex-direction:column;background:var(--cad-input-bg);border:1px solid var(--cad-input-border);border-radius:var(--cad-radius);overflow:hidden}.pl-box:focus-within{border-color:var(--cad-accent);box-shadow:0 0 0 3px var(--cad-ring)}.pl-hd{display:flex;align-items:center;gap:8px;padding:8px 12px;font-weight:600;font-size:12.5px;border-bottom:1px solid var(--cad-border);background:var(--cad-bg-subtle)}.pl-hd small{margin-left:auto;font:500 10.5px var(--cad-font-mono);padding:1px 6px;border-radius:999px;background:var(--cad-elevated);color:var(--cad-fg-secondary)}.pl-filter{display:flex;align-items:center;gap:6px;padding:6px 8px;border-bottom:1px solid var(--cad-border);color:var(--cad-fg-muted)}.pl-filter input{flex:1 1 0;width:0;border:0;outline:0;background:transparent;color:var(--cad-fg);font:inherit;font-size:var(--cad-font-size-sm)}.pl-list{flex:1;overflow-y:auto;padding:4px;outline:none;min-height:120px}.pl-item{display:flex;align-items:center;gap:8px;padding:7px 8px;border-radius:6px;cursor:grab;-webkit-user-select:none;user-select:none;background:var(--cad-input-bg)}.pl-item:hover{background:var(--cad-hover)}.pl-item.is-selected{background:var(--cad-accent-soft);color:var(--cad-accent);font-weight:500}.pl-item .lbl{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pl-item.cdk-drag-preview{box-shadow:var(--cad-shadow-lg);border:1px solid var(--cad-border);background:var(--cad-overlay);border-radius:6px}.pl-ph{height:32px;border:1px dashed var(--cad-accent);border-radius:6px;background:var(--cad-accent-soft);margin:2px 0}.cdk-drop-list-dragging .pl-item:not(.cdk-drag-placeholder){transition:transform .2s cubic-bezier(0,0,.2,1)}.pl-list.cdk-drop-list-receiving{background:var(--cad-accent-soft)}.pl-empty{padding:14px;text-align:center;color:var(--cad-fg-muted);font-size:var(--cad-font-size-sm)}.pl-ctrl{display:flex;flex-direction:column;gap:4px;justify-content:center;flex:none}:host(.is-stacked){flex-direction:column}:host(.is-stacked) .pl-ctrl{flex-direction:row;justify-content:center}:host(.is-stacked) .pl-ctrl.mid .r{transform:rotate(90deg)}\n"] }]
17550
+ `, styles: [":host{display:flex;gap:10px;align-items:stretch;min-width:0;font-family:var(--cad-font);font-size:var(--cad-font-size);color:var(--cad-fg)}:host(.is-disabled){opacity:.6}.pl-box{flex:1 1 0;min-width:0;display:flex;flex-direction:column;background:var(--cad-input-bg);border:1px solid var(--cad-input-border);border-radius:var(--cad-radius);overflow:hidden}.pl-box:focus-within{border-color:var(--cad-accent);box-shadow:0 0 0 3px var(--cad-ring)}.pl-hd{display:flex;align-items:center;gap:8px;padding:8px 12px;font-weight:600;font-size:12.5px;border-bottom:1px solid var(--cad-border);background:var(--cad-bg-subtle)}.pl-hd small{margin-left:auto;font:500 10.5px var(--cad-font-mono);padding:1px 6px;border-radius:999px;background:var(--cad-elevated);color:var(--cad-fg-secondary)}.pl-filter{display:flex;align-items:center;gap:6px;padding:6px 8px;border-bottom:1px solid var(--cad-border);color:var(--cad-fg-muted)}.pl-filter input{flex:1 1 0;width:0;border:0;outline:0;background:transparent;color:var(--cad-fg);font:inherit;font-size:var(--cad-font-size-sm)}.pl-list{flex:1;overflow-y:auto;padding:4px;outline:none;min-height:120px}.pl-item{display:flex;align-items:center;gap:8px;padding:7px 8px;border-radius:6px;cursor:grab;-webkit-user-select:none;user-select:none;background:var(--cad-input-bg)}.pl-item:hover{background:var(--cad-hover)}.pl-item.is-selected{background:var(--cad-accent-soft);color:var(--cad-accent);font-weight:500}.pl-item .lbl{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pl-item.cdk-drag-preview{box-shadow:var(--cad-shadow-lg);border:1px solid var(--cad-border);background:var(--cad-overlay);--cad-hover: var(--cad-overlay-hover);border-radius:6px}.pl-ph{height:32px;border:1px dashed var(--cad-accent);border-radius:6px;background:var(--cad-accent-soft);margin:2px 0}.cdk-drop-list-dragging .pl-item:not(.cdk-drag-placeholder){transition:transform .2s cubic-bezier(0,0,.2,1)}.pl-list.cdk-drop-list-receiving{background:var(--cad-accent-soft)}.pl-empty{padding:14px;text-align:center;color:var(--cad-fg-muted);font-size:var(--cad-font-size-sm)}.pl-ctrl{display:flex;flex-direction:column;gap:4px;justify-content:center;flex:none}:host(.is-stacked){flex-direction:column}:host(.is-stacked) .pl-ctrl{flex-direction:row;justify-content:center}:host(.is-stacked) .pl-ctrl.mid .r{transform:rotate(90deg)}\n"] }]
17418
17551
  }], ctorParameters: () => [], propDecorators: { options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], optionLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "optionLabel", required: false }] }], dataKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "dataKey", required: false }] }], sourceHeader: [{ type: i0.Input, args: [{ isSignal: true, alias: "sourceHeader", required: false }] }], targetHeader: [{ type: i0.Input, args: [{ isSignal: true, alias: "targetHeader", required: false }] }], sourceEmpty: [{ type: i0.Input, args: [{ isSignal: true, alias: "sourceEmpty", required: false }] }], targetEmpty: [{ type: i0.Input, args: [{ isSignal: true, alias: "targetEmpty", required: false }] }], filter: [{ type: i0.Input, args: [{ isSignal: true, alias: "filter", required: false }] }], filterPlaceholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterPlaceholder", required: false }] }], showSourceControls: [{ type: i0.Input, args: [{ isSignal: true, alias: "showSourceControls", required: false }] }], showTargetControls: [{ type: i0.Input, args: [{ isSignal: true, alias: "showTargetControls", required: false }] }], listHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "listHeight", required: false }] }], responsive: [{ type: i0.Input, args: [{ isSignal: true, alias: "responsive", required: false }] }], stackAt: [{ type: i0.Input, args: [{ isSignal: true, alias: "stackAt", required: false }] }], metaKeySelection: [{ type: i0.Input, args: [{ isSignal: true, alias: "metaKeySelection", required: false }] }], moveToTarget: [{ type: i0.Output, args: ["moveToTarget"] }], moveToSource: [{ type: i0.Output, args: ["moveToSource"] }], moveAllToTarget: [{ type: i0.Output, args: ["moveAllToTarget"] }], moveAllToSource: [{ type: i0.Output, args: ["moveAllToSource"] }], targetReorder: [{ type: i0.Output, args: ["targetReorder"] }], sourceReorder: [{ type: i0.Output, args: ["sourceReorder"] }], changed: [{ type: i0.Output, args: ["changed"] }], itemTpl: [{ type: i0.ContentChild, args: [i0.forwardRef(() => CadListItemDirective), { isSignal: true }] }] } });
17419
17552
 
17420
17553
  /**
@@ -19079,7 +19212,7 @@ const CAD_TASKBOARD_STYLES = `
19079
19212
  .tb__mob { display: none; align-items: center; gap: 7px; }
19080
19213
 
19081
19214
  /* ---------------- glisser (CDK) ---------------- */
19082
- .cdk-drag-preview { box-shadow: var(--cad-shadow-lg); border-radius: var(--cad-radius-sm); background: var(--cad-overlay); border: 1px solid var(--cad-border); }
19215
+ .cdk-drag-preview { box-shadow: var(--cad-shadow-lg); border-radius: var(--cad-radius-sm); background: var(--cad-overlay); --cad-hover: var(--cad-overlay-hover); border: 1px solid var(--cad-border); }
19083
19216
  .cdk-drag-placeholder { opacity: .34; }
19084
19217
  .cdk-drag-animating { transition: transform 180ms var(--cad-ease); }
19085
19218
  .tb__list.cdk-drop-list-dragging .tb__card:not(.cdk-drag-placeholder),
@@ -19438,7 +19571,7 @@ class CadTaskboardComponent {
19438
19571
  }
19439
19572
  </div>
19440
19573
  }
19441
- `, isInline: true, styles: [":host{display:flex;flex-direction:column;min-height:0;height:100%;font:var(--cad-font-size)/1.35 var(--cad-font);color:var(--cad-fg);background:var(--cad-bg)}.tb__board{flex:1;min-height:0;display:flex;gap:12px;padding:12px;overflow-x:auto;overflow-y:hidden;scrollbar-gutter:stable}.tb__col{flex:0 0 var(--cad-taskboard-col, 258px);display:flex;flex-direction:column;min-height:0;background:var(--cad-bg-subtle);border:1px solid var(--cad-border);border-radius:var(--cad-radius)}.tb__head{display:flex;align-items:center;gap:8px;padding:9px 11px;border-bottom:1px solid var(--cad-border)}.tb__dot{width:8px;height:8px;border-radius:50%;flex:none;background:var(--_c, var(--cad-border-strong))}.tb__name{font-weight:500;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tb__count{font-family:var(--cad-font-mono);font-size:var(--cad-font-size-sm);padding:2px 7px;border-radius:var(--cad-radius-pill);background:var(--cad-elevated);color:var(--cad-fg-muted);font-variant-numeric:tabular-nums;white-space:nowrap}.tb__count.is-full{background:var(--cad-warning-soft);color:var(--cad-warning)}.tb__count.is-over{background:var(--cad-danger-soft);color:var(--cad-danger);font-weight:500}.tb__list{flex:1;min-height:0;overflow-y:auto;padding:8px;display:flex;flex-direction:column;gap:8px;scrollbar-gutter:stable}.tb__list.cdk-drop-list-dragging{background:var(--cad-accent-soft)}.tb__card{background:var(--cad-surface);border:1px solid var(--cad-border);border-radius:var(--cad-radius-sm);padding:9px 10px;box-shadow:var(--cad-shadow-sm);display:flex;flex-direction:column;gap:7px;cursor:grab;-webkit-user-select:none;user-select:none;transition:border-color var(--cad-dur) var(--cad-ease),box-shadow var(--cad-dur) var(--cad-ease)}.tb__card:hover{border-color:var(--cad-border-strong);box-shadow:var(--cad-shadow-md)}.tb__card:focus-visible{outline:2px solid var(--cad-ring);outline-offset:1px}.tb__card.is-orphan{border-left:2px dashed var(--cad-warning)}:host(.is-static) .tb__card,:host(.is-static) .tb__row{cursor:default}.tb__title{font-weight:500;line-height:1.32}.tb__meta{display:flex;align-items:center;gap:7px;flex-wrap:wrap}.tb__tag{font-family:var(--cad-font-mono);font-size:10px;padding:2px 6px;border-radius:var(--cad-radius-sm);background:var(--cad-elevated);color:var(--cad-fg-secondary)}.tb__due{font-family:var(--cad-font-mono);font-size:var(--cad-font-size-sm);color:var(--cad-fg-muted);font-variant-numeric:tabular-nums}.tb__due.is-late{color:var(--cad-danger);font-weight:500}.tb__sp{flex:1 1 auto}.tb__prog{height:3px;border-radius:var(--cad-radius-pill);background:var(--cad-elevated);overflow:hidden}.tb__prog i{display:block;height:100%;border-radius:var(--cad-radius-pill);background:var(--cad-accent)}.tb__prog.is-done i{background:var(--cad-success)}.tb__empty{padding:14px 10px;text-align:center;color:var(--cad-fg-muted);font-size:var(--cad-font-size-sm);border:1px dashed var(--cad-border-strong);border-radius:var(--cad-radius-sm)}.tb__rows{flex:1;min-height:0;overflow-y:auto;padding-bottom:12px;scrollbar-gutter:stable}.tb__grp{display:flex;align-items:center;gap:8px;width:100%;padding:8px 14px;background:var(--cad-bg-subtle);border-top:1px solid var(--cad-border);border-bottom:1px solid var(--cad-border);position:sticky;top:0;z-index:1;cursor:pointer;text-align:left;font:inherit;color:inherit}.tb__grp:hover{background:var(--cad-hover)}.tb__grp:focus-visible{outline:2px solid var(--cad-ring);outline-offset:-2px}.tb__grp cad-icon{color:var(--cad-fg-muted);transition:transform var(--cad-dur) var(--cad-ease)}.tb__grp.is-collapsed cad-icon{transform:rotate(-90deg)}.tb__grp b{font-weight:500}.tb__group-list{display:block}.tb__row{display:grid;grid-template-columns:1fr 92px 88px 26px;align-items:center;gap:12px;padding:8px 14px;border-bottom:1px solid var(--cad-border);cursor:grab;-webkit-user-select:none;user-select:none;background:var(--cad-bg)}.tb__row:hover{background:var(--cad-hover)}.tb__row:focus-visible{outline:2px solid var(--cad-ring);outline-offset:-2px}.tb__row.is-orphan{box-shadow:inset 2px 0 0 var(--cad-warning)}.tb__main{min-width:0;display:flex;flex-direction:column;gap:4px}.tb__main .tb__title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tb__pct{display:flex;align-items:center;gap:7px}.tb__pct .tb__prog{flex:1}.tb__pct span{font-family:var(--cad-font-mono);font-size:10px;color:var(--cad-fg-muted);font-variant-numeric:tabular-nums}:host(.is-compact) .tb__row{grid-template-columns:1fr 26px}:host(.is-compact) .tb__cell-due,:host(.is-compact) .tb__pct{display:none}:host(.is-compact) .tb__mob{display:inline-flex}.tb__mob{display:none;align-items:center;gap:7px}.cdk-drag-preview{box-shadow:var(--cad-shadow-lg);border-radius:var(--cad-radius-sm);background:var(--cad-overlay);border:1px solid var(--cad-border)}.cdk-drag-placeholder{opacity:.34}.cdk-drag-animating{transition:transform .18s var(--cad-ease)}.tb__list.cdk-drop-list-dragging .tb__card:not(.cdk-drag-placeholder),.tb__group-list.cdk-drop-list-dragging .tb__row:not(.cdk-drag-placeholder){transition:transform .18s var(--cad-ease)}.tb__live{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}@media(prefers-reduced-motion:reduce){.cdk-drag-animating,.tb__list.cdk-drop-list-dragging .tb__card,.tb__grp cad-icon{transition:none}}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: CdkDropListGroup, selector: "[cdkDropListGroup]", inputs: ["cdkDropListGroupDisabled"], exportAs: ["cdkDropListGroup"] }, { kind: "component", type: CadAvatarComponent, selector: "cad-avatar", inputs: ["src", "text", "icon", "size", "shape", "color", "label"] }, { kind: "component", type: CadIconComponent, selector: "cad-icon", inputs: ["name", "size", "strokeWidth", "label", "title", "spin", "filled", "flip", "rotate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
19574
+ `, isInline: true, styles: [":host{display:flex;flex-direction:column;min-height:0;height:100%;font:var(--cad-font-size)/1.35 var(--cad-font);color:var(--cad-fg);background:var(--cad-bg)}.tb__board{flex:1;min-height:0;display:flex;gap:12px;padding:12px;overflow-x:auto;overflow-y:hidden;scrollbar-gutter:stable}.tb__col{flex:0 0 var(--cad-taskboard-col, 258px);display:flex;flex-direction:column;min-height:0;background:var(--cad-bg-subtle);border:1px solid var(--cad-border);border-radius:var(--cad-radius)}.tb__head{display:flex;align-items:center;gap:8px;padding:9px 11px;border-bottom:1px solid var(--cad-border)}.tb__dot{width:8px;height:8px;border-radius:50%;flex:none;background:var(--_c, var(--cad-border-strong))}.tb__name{font-weight:500;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tb__count{font-family:var(--cad-font-mono);font-size:var(--cad-font-size-sm);padding:2px 7px;border-radius:var(--cad-radius-pill);background:var(--cad-elevated);color:var(--cad-fg-muted);font-variant-numeric:tabular-nums;white-space:nowrap}.tb__count.is-full{background:var(--cad-warning-soft);color:var(--cad-warning)}.tb__count.is-over{background:var(--cad-danger-soft);color:var(--cad-danger);font-weight:500}.tb__list{flex:1;min-height:0;overflow-y:auto;padding:8px;display:flex;flex-direction:column;gap:8px;scrollbar-gutter:stable}.tb__list.cdk-drop-list-dragging{background:var(--cad-accent-soft)}.tb__card{background:var(--cad-surface);border:1px solid var(--cad-border);border-radius:var(--cad-radius-sm);padding:9px 10px;box-shadow:var(--cad-shadow-sm);display:flex;flex-direction:column;gap:7px;cursor:grab;-webkit-user-select:none;user-select:none;transition:border-color var(--cad-dur) var(--cad-ease),box-shadow var(--cad-dur) var(--cad-ease)}.tb__card:hover{border-color:var(--cad-border-strong);box-shadow:var(--cad-shadow-md)}.tb__card:focus-visible{outline:2px solid var(--cad-ring);outline-offset:1px}.tb__card.is-orphan{border-left:2px dashed var(--cad-warning)}:host(.is-static) .tb__card,:host(.is-static) .tb__row{cursor:default}.tb__title{font-weight:500;line-height:1.32}.tb__meta{display:flex;align-items:center;gap:7px;flex-wrap:wrap}.tb__tag{font-family:var(--cad-font-mono);font-size:10px;padding:2px 6px;border-radius:var(--cad-radius-sm);background:var(--cad-elevated);color:var(--cad-fg-secondary)}.tb__due{font-family:var(--cad-font-mono);font-size:var(--cad-font-size-sm);color:var(--cad-fg-muted);font-variant-numeric:tabular-nums}.tb__due.is-late{color:var(--cad-danger);font-weight:500}.tb__sp{flex:1 1 auto}.tb__prog{height:3px;border-radius:var(--cad-radius-pill);background:var(--cad-elevated);overflow:hidden}.tb__prog i{display:block;height:100%;border-radius:var(--cad-radius-pill);background:var(--cad-accent)}.tb__prog.is-done i{background:var(--cad-success)}.tb__empty{padding:14px 10px;text-align:center;color:var(--cad-fg-muted);font-size:var(--cad-font-size-sm);border:1px dashed var(--cad-border-strong);border-radius:var(--cad-radius-sm)}.tb__rows{flex:1;min-height:0;overflow-y:auto;padding-bottom:12px;scrollbar-gutter:stable}.tb__grp{display:flex;align-items:center;gap:8px;width:100%;padding:8px 14px;background:var(--cad-bg-subtle);border-top:1px solid var(--cad-border);border-bottom:1px solid var(--cad-border);position:sticky;top:0;z-index:1;cursor:pointer;text-align:left;font:inherit;color:inherit}.tb__grp:hover{background:var(--cad-hover)}.tb__grp:focus-visible{outline:2px solid var(--cad-ring);outline-offset:-2px}.tb__grp cad-icon{color:var(--cad-fg-muted);transition:transform var(--cad-dur) var(--cad-ease)}.tb__grp.is-collapsed cad-icon{transform:rotate(-90deg)}.tb__grp b{font-weight:500}.tb__group-list{display:block}.tb__row{display:grid;grid-template-columns:1fr 92px 88px 26px;align-items:center;gap:12px;padding:8px 14px;border-bottom:1px solid var(--cad-border);cursor:grab;-webkit-user-select:none;user-select:none;background:var(--cad-bg)}.tb__row:hover{background:var(--cad-hover)}.tb__row:focus-visible{outline:2px solid var(--cad-ring);outline-offset:-2px}.tb__row.is-orphan{box-shadow:inset 2px 0 0 var(--cad-warning)}.tb__main{min-width:0;display:flex;flex-direction:column;gap:4px}.tb__main .tb__title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tb__pct{display:flex;align-items:center;gap:7px}.tb__pct .tb__prog{flex:1}.tb__pct span{font-family:var(--cad-font-mono);font-size:10px;color:var(--cad-fg-muted);font-variant-numeric:tabular-nums}:host(.is-compact) .tb__row{grid-template-columns:1fr 26px}:host(.is-compact) .tb__cell-due,:host(.is-compact) .tb__pct{display:none}:host(.is-compact) .tb__mob{display:inline-flex}.tb__mob{display:none;align-items:center;gap:7px}.cdk-drag-preview{box-shadow:var(--cad-shadow-lg);border-radius:var(--cad-radius-sm);background:var(--cad-overlay);--cad-hover: var(--cad-overlay-hover);border:1px solid var(--cad-border)}.cdk-drag-placeholder{opacity:.34}.cdk-drag-animating{transition:transform .18s var(--cad-ease)}.tb__list.cdk-drop-list-dragging .tb__card:not(.cdk-drag-placeholder),.tb__group-list.cdk-drop-list-dragging .tb__row:not(.cdk-drag-placeholder){transition:transform .18s var(--cad-ease)}.tb__live{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}@media(prefers-reduced-motion:reduce){.cdk-drag-animating,.tb__list.cdk-drop-list-dragging .tb__card,.tb__grp cad-icon{transition:none}}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: CdkDropListGroup, selector: "[cdkDropListGroup]", inputs: ["cdkDropListGroupDisabled"], exportAs: ["cdkDropListGroup"] }, { kind: "component", type: CadAvatarComponent, selector: "cad-avatar", inputs: ["src", "text", "icon", "size", "shape", "color", "label"] }, { kind: "component", type: CadIconComponent, selector: "cad-icon", inputs: ["name", "size", "strokeWidth", "label", "title", "spin", "filled", "flip", "rotate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
19442
19575
  }
19443
19576
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: CadTaskboardComponent, decorators: [{
19444
19577
  type: Component,
@@ -19537,7 +19670,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImpo
19537
19670
  }
19538
19671
  </div>
19539
19672
  }
19540
- `, styles: [":host{display:flex;flex-direction:column;min-height:0;height:100%;font:var(--cad-font-size)/1.35 var(--cad-font);color:var(--cad-fg);background:var(--cad-bg)}.tb__board{flex:1;min-height:0;display:flex;gap:12px;padding:12px;overflow-x:auto;overflow-y:hidden;scrollbar-gutter:stable}.tb__col{flex:0 0 var(--cad-taskboard-col, 258px);display:flex;flex-direction:column;min-height:0;background:var(--cad-bg-subtle);border:1px solid var(--cad-border);border-radius:var(--cad-radius)}.tb__head{display:flex;align-items:center;gap:8px;padding:9px 11px;border-bottom:1px solid var(--cad-border)}.tb__dot{width:8px;height:8px;border-radius:50%;flex:none;background:var(--_c, var(--cad-border-strong))}.tb__name{font-weight:500;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tb__count{font-family:var(--cad-font-mono);font-size:var(--cad-font-size-sm);padding:2px 7px;border-radius:var(--cad-radius-pill);background:var(--cad-elevated);color:var(--cad-fg-muted);font-variant-numeric:tabular-nums;white-space:nowrap}.tb__count.is-full{background:var(--cad-warning-soft);color:var(--cad-warning)}.tb__count.is-over{background:var(--cad-danger-soft);color:var(--cad-danger);font-weight:500}.tb__list{flex:1;min-height:0;overflow-y:auto;padding:8px;display:flex;flex-direction:column;gap:8px;scrollbar-gutter:stable}.tb__list.cdk-drop-list-dragging{background:var(--cad-accent-soft)}.tb__card{background:var(--cad-surface);border:1px solid var(--cad-border);border-radius:var(--cad-radius-sm);padding:9px 10px;box-shadow:var(--cad-shadow-sm);display:flex;flex-direction:column;gap:7px;cursor:grab;-webkit-user-select:none;user-select:none;transition:border-color var(--cad-dur) var(--cad-ease),box-shadow var(--cad-dur) var(--cad-ease)}.tb__card:hover{border-color:var(--cad-border-strong);box-shadow:var(--cad-shadow-md)}.tb__card:focus-visible{outline:2px solid var(--cad-ring);outline-offset:1px}.tb__card.is-orphan{border-left:2px dashed var(--cad-warning)}:host(.is-static) .tb__card,:host(.is-static) .tb__row{cursor:default}.tb__title{font-weight:500;line-height:1.32}.tb__meta{display:flex;align-items:center;gap:7px;flex-wrap:wrap}.tb__tag{font-family:var(--cad-font-mono);font-size:10px;padding:2px 6px;border-radius:var(--cad-radius-sm);background:var(--cad-elevated);color:var(--cad-fg-secondary)}.tb__due{font-family:var(--cad-font-mono);font-size:var(--cad-font-size-sm);color:var(--cad-fg-muted);font-variant-numeric:tabular-nums}.tb__due.is-late{color:var(--cad-danger);font-weight:500}.tb__sp{flex:1 1 auto}.tb__prog{height:3px;border-radius:var(--cad-radius-pill);background:var(--cad-elevated);overflow:hidden}.tb__prog i{display:block;height:100%;border-radius:var(--cad-radius-pill);background:var(--cad-accent)}.tb__prog.is-done i{background:var(--cad-success)}.tb__empty{padding:14px 10px;text-align:center;color:var(--cad-fg-muted);font-size:var(--cad-font-size-sm);border:1px dashed var(--cad-border-strong);border-radius:var(--cad-radius-sm)}.tb__rows{flex:1;min-height:0;overflow-y:auto;padding-bottom:12px;scrollbar-gutter:stable}.tb__grp{display:flex;align-items:center;gap:8px;width:100%;padding:8px 14px;background:var(--cad-bg-subtle);border-top:1px solid var(--cad-border);border-bottom:1px solid var(--cad-border);position:sticky;top:0;z-index:1;cursor:pointer;text-align:left;font:inherit;color:inherit}.tb__grp:hover{background:var(--cad-hover)}.tb__grp:focus-visible{outline:2px solid var(--cad-ring);outline-offset:-2px}.tb__grp cad-icon{color:var(--cad-fg-muted);transition:transform var(--cad-dur) var(--cad-ease)}.tb__grp.is-collapsed cad-icon{transform:rotate(-90deg)}.tb__grp b{font-weight:500}.tb__group-list{display:block}.tb__row{display:grid;grid-template-columns:1fr 92px 88px 26px;align-items:center;gap:12px;padding:8px 14px;border-bottom:1px solid var(--cad-border);cursor:grab;-webkit-user-select:none;user-select:none;background:var(--cad-bg)}.tb__row:hover{background:var(--cad-hover)}.tb__row:focus-visible{outline:2px solid var(--cad-ring);outline-offset:-2px}.tb__row.is-orphan{box-shadow:inset 2px 0 0 var(--cad-warning)}.tb__main{min-width:0;display:flex;flex-direction:column;gap:4px}.tb__main .tb__title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tb__pct{display:flex;align-items:center;gap:7px}.tb__pct .tb__prog{flex:1}.tb__pct span{font-family:var(--cad-font-mono);font-size:10px;color:var(--cad-fg-muted);font-variant-numeric:tabular-nums}:host(.is-compact) .tb__row{grid-template-columns:1fr 26px}:host(.is-compact) .tb__cell-due,:host(.is-compact) .tb__pct{display:none}:host(.is-compact) .tb__mob{display:inline-flex}.tb__mob{display:none;align-items:center;gap:7px}.cdk-drag-preview{box-shadow:var(--cad-shadow-lg);border-radius:var(--cad-radius-sm);background:var(--cad-overlay);border:1px solid var(--cad-border)}.cdk-drag-placeholder{opacity:.34}.cdk-drag-animating{transition:transform .18s var(--cad-ease)}.tb__list.cdk-drop-list-dragging .tb__card:not(.cdk-drag-placeholder),.tb__group-list.cdk-drop-list-dragging .tb__row:not(.cdk-drag-placeholder){transition:transform .18s var(--cad-ease)}.tb__live{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}@media(prefers-reduced-motion:reduce){.cdk-drag-animating,.tb__list.cdk-drop-list-dragging .tb__card,.tb__grp cad-icon{transition:none}}\n"] }]
19673
+ `, styles: [":host{display:flex;flex-direction:column;min-height:0;height:100%;font:var(--cad-font-size)/1.35 var(--cad-font);color:var(--cad-fg);background:var(--cad-bg)}.tb__board{flex:1;min-height:0;display:flex;gap:12px;padding:12px;overflow-x:auto;overflow-y:hidden;scrollbar-gutter:stable}.tb__col{flex:0 0 var(--cad-taskboard-col, 258px);display:flex;flex-direction:column;min-height:0;background:var(--cad-bg-subtle);border:1px solid var(--cad-border);border-radius:var(--cad-radius)}.tb__head{display:flex;align-items:center;gap:8px;padding:9px 11px;border-bottom:1px solid var(--cad-border)}.tb__dot{width:8px;height:8px;border-radius:50%;flex:none;background:var(--_c, var(--cad-border-strong))}.tb__name{font-weight:500;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tb__count{font-family:var(--cad-font-mono);font-size:var(--cad-font-size-sm);padding:2px 7px;border-radius:var(--cad-radius-pill);background:var(--cad-elevated);color:var(--cad-fg-muted);font-variant-numeric:tabular-nums;white-space:nowrap}.tb__count.is-full{background:var(--cad-warning-soft);color:var(--cad-warning)}.tb__count.is-over{background:var(--cad-danger-soft);color:var(--cad-danger);font-weight:500}.tb__list{flex:1;min-height:0;overflow-y:auto;padding:8px;display:flex;flex-direction:column;gap:8px;scrollbar-gutter:stable}.tb__list.cdk-drop-list-dragging{background:var(--cad-accent-soft)}.tb__card{background:var(--cad-surface);border:1px solid var(--cad-border);border-radius:var(--cad-radius-sm);padding:9px 10px;box-shadow:var(--cad-shadow-sm);display:flex;flex-direction:column;gap:7px;cursor:grab;-webkit-user-select:none;user-select:none;transition:border-color var(--cad-dur) var(--cad-ease),box-shadow var(--cad-dur) var(--cad-ease)}.tb__card:hover{border-color:var(--cad-border-strong);box-shadow:var(--cad-shadow-md)}.tb__card:focus-visible{outline:2px solid var(--cad-ring);outline-offset:1px}.tb__card.is-orphan{border-left:2px dashed var(--cad-warning)}:host(.is-static) .tb__card,:host(.is-static) .tb__row{cursor:default}.tb__title{font-weight:500;line-height:1.32}.tb__meta{display:flex;align-items:center;gap:7px;flex-wrap:wrap}.tb__tag{font-family:var(--cad-font-mono);font-size:10px;padding:2px 6px;border-radius:var(--cad-radius-sm);background:var(--cad-elevated);color:var(--cad-fg-secondary)}.tb__due{font-family:var(--cad-font-mono);font-size:var(--cad-font-size-sm);color:var(--cad-fg-muted);font-variant-numeric:tabular-nums}.tb__due.is-late{color:var(--cad-danger);font-weight:500}.tb__sp{flex:1 1 auto}.tb__prog{height:3px;border-radius:var(--cad-radius-pill);background:var(--cad-elevated);overflow:hidden}.tb__prog i{display:block;height:100%;border-radius:var(--cad-radius-pill);background:var(--cad-accent)}.tb__prog.is-done i{background:var(--cad-success)}.tb__empty{padding:14px 10px;text-align:center;color:var(--cad-fg-muted);font-size:var(--cad-font-size-sm);border:1px dashed var(--cad-border-strong);border-radius:var(--cad-radius-sm)}.tb__rows{flex:1;min-height:0;overflow-y:auto;padding-bottom:12px;scrollbar-gutter:stable}.tb__grp{display:flex;align-items:center;gap:8px;width:100%;padding:8px 14px;background:var(--cad-bg-subtle);border-top:1px solid var(--cad-border);border-bottom:1px solid var(--cad-border);position:sticky;top:0;z-index:1;cursor:pointer;text-align:left;font:inherit;color:inherit}.tb__grp:hover{background:var(--cad-hover)}.tb__grp:focus-visible{outline:2px solid var(--cad-ring);outline-offset:-2px}.tb__grp cad-icon{color:var(--cad-fg-muted);transition:transform var(--cad-dur) var(--cad-ease)}.tb__grp.is-collapsed cad-icon{transform:rotate(-90deg)}.tb__grp b{font-weight:500}.tb__group-list{display:block}.tb__row{display:grid;grid-template-columns:1fr 92px 88px 26px;align-items:center;gap:12px;padding:8px 14px;border-bottom:1px solid var(--cad-border);cursor:grab;-webkit-user-select:none;user-select:none;background:var(--cad-bg)}.tb__row:hover{background:var(--cad-hover)}.tb__row:focus-visible{outline:2px solid var(--cad-ring);outline-offset:-2px}.tb__row.is-orphan{box-shadow:inset 2px 0 0 var(--cad-warning)}.tb__main{min-width:0;display:flex;flex-direction:column;gap:4px}.tb__main .tb__title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tb__pct{display:flex;align-items:center;gap:7px}.tb__pct .tb__prog{flex:1}.tb__pct span{font-family:var(--cad-font-mono);font-size:10px;color:var(--cad-fg-muted);font-variant-numeric:tabular-nums}:host(.is-compact) .tb__row{grid-template-columns:1fr 26px}:host(.is-compact) .tb__cell-due,:host(.is-compact) .tb__pct{display:none}:host(.is-compact) .tb__mob{display:inline-flex}.tb__mob{display:none;align-items:center;gap:7px}.cdk-drag-preview{box-shadow:var(--cad-shadow-lg);border-radius:var(--cad-radius-sm);background:var(--cad-overlay);--cad-hover: var(--cad-overlay-hover);border:1px solid var(--cad-border)}.cdk-drag-placeholder{opacity:.34}.cdk-drag-animating{transition:transform .18s var(--cad-ease)}.tb__list.cdk-drop-list-dragging .tb__card:not(.cdk-drag-placeholder),.tb__group-list.cdk-drop-list-dragging .tb__row:not(.cdk-drag-placeholder){transition:transform .18s var(--cad-ease)}.tb__live{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}@media(prefers-reduced-motion:reduce){.cdk-drag-animating,.tb__list.cdk-drop-list-dragging .tb__card,.tb__grp cad-icon{transition:none}}\n"] }]
19541
19674
  }], propDecorators: { plan: [{ type: i0.Input, args: [{ isSignal: true, alias: "plan", required: false }] }], mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], groupBy: [{ type: i0.Input, args: [{ isSignal: true, alias: "groupBy", required: false }] }], dragDisabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "dragDisabled", required: false }] }], collapsedKeys: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapsedKeys", required: false }] }, { type: i0.Output, args: ["collapsedKeysChange"] }], emptyText: [{ type: i0.Input, args: [{ isSignal: true, alias: "emptyText", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], dateFormat: [{ type: i0.Input, args: [{ isSignal: true, alias: "dateFormat", required: false }] }], today: [{ type: i0.Input, args: [{ isSignal: true, alias: "today", required: false }] }], taskMove: [{ type: i0.Output, args: ["taskMove"] }], taskAssign: [{ type: i0.Output, args: ["taskAssign"] }], taskOpen: [{ type: i0.Output, args: ["taskOpen"] }], wipExceeded: [{ type: i0.Output, args: ["wipExceeded"] }], cardTpl: [{ type: i0.ContentChild, args: [i0.forwardRef(() => CadTaskCardDirective), { isSignal: true }] }], rowTpl: [{ type: i0.ContentChild, args: [i0.forwardRef(() => CadTaskRowDirective), { isSignal: true }] }] } });
19542
19675
 
19543
19676
  /**