@cadriciel/ui 0.3.0 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/fesm2022/cadriciel-ui.mjs +1494 -50
- package/fesm2022/cadriciel-ui.mjs.map +1 -1
- package/package.json +2 -2
- package/styles/tokens.scss +8 -0
- package/types/cadriciel-ui.d.ts +590 -3
|
@@ -11,7 +11,7 @@ import { PortalModule, ComponentPortal, TemplatePortal, Portal } from '@angular/
|
|
|
11
11
|
import * as i2 from '@angular/cdk/a11y';
|
|
12
12
|
import { A11yModule, ConfigurableFocusTrapFactory } from '@angular/cdk/a11y';
|
|
13
13
|
import { Subject, isObservable } from 'rxjs';
|
|
14
|
-
import { moveItemInArray, CdkDropList, CdkDrag, CdkDragHandle, CdkDragPlaceholder, transferArrayItem } from '@angular/cdk/drag-drop';
|
|
14
|
+
import { moveItemInArray, CdkDropList, CdkDrag, CdkDragHandle, CdkDragPlaceholder, transferArrayItem, CdkDropListGroup } from '@angular/cdk/drag-drop';
|
|
15
15
|
import { RouterLink, Router, RouterLinkActive } from '@angular/router';
|
|
16
16
|
import { HttpClient, HttpHeaders, HttpEventType } from '@angular/common/http';
|
|
17
17
|
|
|
@@ -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
|
|
|
@@ -4970,7 +4970,7 @@ class CadPopoverComponent {
|
|
|
4970
4970
|
<ng-content />
|
|
4971
4971
|
</div>
|
|
4972
4972
|
</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 });
|
|
4973
|
+
`, 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
4974
|
}
|
|
4975
4975
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: CadPopoverComponent, decorators: [{
|
|
4976
4976
|
type: Component,
|
|
@@ -4982,7 +4982,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImpo
|
|
|
4982
4982
|
<ng-content />
|
|
4983
4983
|
</div>
|
|
4984
4984
|
</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"] }]
|
|
4985
|
+
`, 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
4986
|
}], 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
4987
|
|
|
4988
4988
|
/** Utilitaires date cadriciel-ui — zéro dépendance. Dates LOCALES (pas d'UTC). */
|
|
@@ -5824,7 +5824,7 @@ class CadDatepickerComponent extends CadValueAccessor {
|
|
|
5824
5824
|
</div>
|
|
5825
5825
|
}
|
|
5826
5826
|
</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 });
|
|
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);--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
5828
|
}
|
|
5829
5829
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: CadDatepickerComponent, decorators: [{
|
|
5830
5830
|
type: Component,
|
|
@@ -5954,7 +5954,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImpo
|
|
|
5954
5954
|
</div>
|
|
5955
5955
|
}
|
|
5956
5956
|
</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"] }]
|
|
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);--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
5958
|
}], 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
5959
|
|
|
5960
5960
|
/** 'sm' → var(--cad-gap-sm) ; '12px' → 12px ; 'none' → 0. */
|
|
@@ -6004,7 +6004,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImpo
|
|
|
6004
6004
|
}], ctorParameters: () => [], propDecorators: { cadIf: [{ type: i0.Input, args: [{ isSignal: true, alias: "cadIf", required: true }] }] } });
|
|
6005
6005
|
|
|
6006
6006
|
const J = { start: 'flex-start', center: 'center', end: 'flex-end', between: 'space-between', around: 'space-around', evenly: 'space-evenly' };
|
|
6007
|
-
const A = { stretch: 'stretch', start: 'flex-start', center: 'center', end: 'flex-end', baseline: 'baseline' };
|
|
6007
|
+
const A$1 = { stretch: 'stretch', start: 'flex-start', center: 'center', end: 'flex-end', baseline: 'baseline' };
|
|
6008
6008
|
/** Pile verticale : `<cad-stack gap="sm" align="stretch">` — les enfants s'empilent avec un gap uniforme (jamais de marges). */
|
|
6009
6009
|
class CadStackComponent {
|
|
6010
6010
|
gap = input('md', ...(ngDevMode ? [{ debugName: "gap" }] : /* istanbul ignore next */ []));
|
|
@@ -6012,7 +6012,7 @@ class CadStackComponent {
|
|
|
6012
6012
|
justify = input('start', ...(ngDevMode ? [{ debugName: "justify" }] : /* istanbul ignore next */ []));
|
|
6013
6013
|
inline = input(false, { ...(ngDevMode ? { debugName: "inline" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
6014
6014
|
g = computed(() => cadGap(this.gap()), ...(ngDevMode ? [{ debugName: "g" }] : /* istanbul ignore next */ []));
|
|
6015
|
-
a = computed(() => A[this.align()], ...(ngDevMode ? [{ debugName: "a" }] : /* istanbul ignore next */ []));
|
|
6015
|
+
a = computed(() => A$1[this.align()], ...(ngDevMode ? [{ debugName: "a" }] : /* istanbul ignore next */ []));
|
|
6016
6016
|
j = computed(() => J[this.justify()], ...(ngDevMode ? [{ debugName: "j" }] : /* istanbul ignore next */ []));
|
|
6017
6017
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: CadStackComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
6018
6018
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.20", type: CadStackComponent, isStandalone: true, selector: "cad-stack", inputs: { gap: { classPropertyName: "gap", publicName: "gap", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, justify: { classPropertyName: "justify", publicName: "justify", isSignal: true, isRequired: false, transformFunction: null }, inline: { classPropertyName: "inline", publicName: "inline", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "style.gap": "g()", "style.align-items": "a()", "style.justify-content": "j()", "class.is-inline": "inline()" }, classAttribute: "cad-stack" }, ngImport: i0, template: `<ng-content />`, isInline: true, styles: [":host{display:flex;flex-direction:column;min-width:0}:host(.is-inline){display:inline-flex}:host ::ng-deep>*{min-width:0}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
@@ -6029,7 +6029,7 @@ class CadClusterComponent {
|
|
|
6029
6029
|
wrap = input(true, { ...(ngDevMode ? { debugName: "wrap" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
6030
6030
|
inline = input(false, { ...(ngDevMode ? { debugName: "inline" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
6031
6031
|
g = computed(() => cadGap(this.gap()), ...(ngDevMode ? [{ debugName: "g" }] : /* istanbul ignore next */ []));
|
|
6032
|
-
a = computed(() => A[this.align()], ...(ngDevMode ? [{ debugName: "a" }] : /* istanbul ignore next */ []));
|
|
6032
|
+
a = computed(() => A$1[this.align()], ...(ngDevMode ? [{ debugName: "a" }] : /* istanbul ignore next */ []));
|
|
6033
6033
|
j = computed(() => J[this.justify()], ...(ngDevMode ? [{ debugName: "j" }] : /* istanbul ignore next */ []));
|
|
6034
6034
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: CadClusterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
6035
6035
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.20", type: CadClusterComponent, isStandalone: true, selector: "cad-cluster", inputs: { gap: { classPropertyName: "gap", publicName: "gap", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, justify: { classPropertyName: "justify", publicName: "justify", isSignal: true, isRequired: false, transformFunction: null }, wrap: { classPropertyName: "wrap", publicName: "wrap", isSignal: true, isRequired: false, transformFunction: null }, inline: { classPropertyName: "inline", publicName: "inline", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "style.gap": "g()", "style.align-items": "a()", "style.justify-content": "j()", "style.flex-wrap": "wrap() ? \"wrap\" : \"nowrap\"", "class.is-inline": "inline()" }, classAttribute: "cad-cluster" }, ngImport: i0, template: `<ng-content />`, isInline: true, styles: [":host{display:flex;min-width:0}:host(.is-inline){display:inline-flex}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
@@ -6054,7 +6054,7 @@ class CadGridComponent {
|
|
|
6054
6054
|
tpl = computed(() => this.min() ? `repeat(auto-fit, minmax(min(${this.min()}, 100%), 1fr))` : `repeat(${this.c() ?? 1}, minmax(0, 1fr))`, ...(ngDevMode ? [{ debugName: "tpl" }] : /* istanbul ignore next */ []));
|
|
6055
6055
|
g = computed(() => cadGap(this.gap()), ...(ngDevMode ? [{ debugName: "g" }] : /* istanbul ignore next */ []));
|
|
6056
6056
|
rg = computed(() => this.rowGap() ? cadGap(this.rowGap()) : null, ...(ngDevMode ? [{ debugName: "rg" }] : /* istanbul ignore next */ []));
|
|
6057
|
-
a = computed(() => A[this.align()], ...(ngDevMode ? [{ debugName: "a" }] : /* istanbul ignore next */ []));
|
|
6057
|
+
a = computed(() => A$1[this.align()], ...(ngDevMode ? [{ debugName: "a" }] : /* istanbul ignore next */ []));
|
|
6058
6058
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: CadGridComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
6059
6059
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.20", type: CadGridComponent, isStandalone: true, selector: "cad-grid", inputs: { cols: { classPropertyName: "cols", publicName: "cols", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, gap: { classPropertyName: "gap", publicName: "gap", isSignal: true, isRequired: false, transformFunction: null }, rowGap: { classPropertyName: "rowGap", publicName: "rowGap", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, dense: { classPropertyName: "dense", publicName: "dense", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "style.grid-template-columns": "tpl()", "style.gap": "g()", "style.row-gap": "rg()", "style.align-items": "a()", "style.grid-auto-flow": "dense() ? \"row dense\" : null" }, classAttribute: "cad-grid" }, ngImport: i0, template: `<ng-content />`, isInline: true, styles: [":host{display:grid;min-width:0}:host ::ng-deep>*{min-width:0}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
6060
6060
|
}
|
|
@@ -6083,7 +6083,7 @@ class CadSplitComponent {
|
|
|
6083
6083
|
stackAt = input('sm', ...(ngDevMode ? [{ debugName: "stackAt" }] : /* istanbul ignore next */ []));
|
|
6084
6084
|
tpl = computed(() => (this.stackAt() && this.bp.down(this.stackAt())) ? '1fr' : this.ratio(), ...(ngDevMode ? [{ debugName: "tpl" }] : /* istanbul ignore next */ []));
|
|
6085
6085
|
g = computed(() => cadGap(this.gap()), ...(ngDevMode ? [{ debugName: "g" }] : /* istanbul ignore next */ []));
|
|
6086
|
-
a = computed(() => A[this.align()], ...(ngDevMode ? [{ debugName: "a" }] : /* istanbul ignore next */ []));
|
|
6086
|
+
a = computed(() => A$1[this.align()], ...(ngDevMode ? [{ debugName: "a" }] : /* istanbul ignore next */ []));
|
|
6087
6087
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: CadSplitComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
6088
6088
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.20", type: CadSplitComponent, isStandalone: true, selector: "cad-split", inputs: { ratio: { classPropertyName: "ratio", publicName: "ratio", isSignal: true, isRequired: false, transformFunction: null }, gap: { classPropertyName: "gap", publicName: "gap", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, stackAt: { classPropertyName: "stackAt", publicName: "stackAt", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "style.grid-template-columns": "tpl()", "style.gap": "g()", "style.align-items": "a()" }, classAttribute: "cad-split" }, ngImport: i0, template: `<ng-content />`, isInline: true, styles: [":host{display:grid;min-width:0}:host ::ng-deep>*{min-width:0}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
6089
6089
|
}
|
|
@@ -6114,7 +6114,7 @@ class CadSidebarComponent {
|
|
|
6114
6114
|
collapseAt = input('', ...(ngDevMode ? [{ debugName: "collapseAt" }] : /* istanbul ignore next */ []));
|
|
6115
6115
|
collapsed = computed(() => !!this.collapseAt() && this.bp.down(this.collapseAt()), ...(ngDevMode ? [{ debugName: "collapsed" }] : /* istanbul ignore next */ []));
|
|
6116
6116
|
g = computed(() => cadGap(this.gap()), ...(ngDevMode ? [{ debugName: "g" }] : /* istanbul ignore next */ []));
|
|
6117
|
-
a = computed(() => A[this.align()], ...(ngDevMode ? [{ debugName: "a" }] : /* istanbul ignore next */ []));
|
|
6117
|
+
a = computed(() => A$1[this.align()], ...(ngDevMode ? [{ debugName: "a" }] : /* istanbul ignore next */ []));
|
|
6118
6118
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: CadSidebarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
6119
6119
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.20", type: CadSidebarComponent, isStandalone: true, selector: "cad-sidebar", inputs: { side: { classPropertyName: "side", publicName: "side", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, contentMin: { classPropertyName: "contentMin", publicName: "contentMin", isSignal: true, isRequired: false, transformFunction: null }, gap: { classPropertyName: "gap", publicName: "gap", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, collapseAt: { classPropertyName: "collapseAt", publicName: "collapseAt", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "style.gap": "g()", "class.side-left": "side() === \"left\"", "class.is-collapsed": "collapsed()", "style.--cad-sb-w": "width()", "style.--cad-sb-min": "contentMin()", "style.align-items": "a()" }, classAttribute: "cad-sidebar" }, ngImport: i0, template: `<ng-content />`, isInline: true, styles: [":host{display:flex;flex-wrap:wrap;min-width:0}:host ::ng-deep>*{flex-basis:0;flex-grow:999;min-inline-size:var(--cad-sb-min, 60%);min-width:0}:host ::ng-deep>.cad-sidebar__panel{flex-basis:var(--cad-sb-w, 280px);flex-grow:1;min-inline-size:0}:host(.side-left) ::ng-deep>.cad-sidebar__panel{order:-1}:host(.is-collapsed) ::ng-deep>*{flex-basis:100%!important;min-inline-size:0!important}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
6120
6120
|
}
|
|
@@ -6672,7 +6672,7 @@ const CAD_TABLE_STYLES = `
|
|
|
6672
6672
|
.dt-bar__btn.is-ghost { border-color: transparent; width: 26px; padding: 0; }
|
|
6673
6673
|
.dt-bar__btn.is-on { color: var(--cad-accent); background: var(--cad-accent-soft); }
|
|
6674
6674
|
.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; }
|
|
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); --cad-hover: var(--cad-overlay-hover); border: 1px solid var(--cad-border); border-radius: 9px; box-shadow: var(--cad-shadow-lg); padding: 4px; }
|
|
6676
6676
|
.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
6677
|
.dt-bar__menu label:hover { background: var(--cad-hover); }
|
|
6678
6678
|
.dt-bar__menu label.is-locked { opacity: .5; cursor: default; }
|
|
@@ -6869,7 +6869,7 @@ const CAD_TABLE_STYLES_3 = `
|
|
|
6869
6869
|
:host(.is-reorderable) .tbl th.can-drag:hover .dh, :host(.is-reorderable) .tbl th.can-drag.cdk-drag-dragging .dh { display: grid; }
|
|
6870
6870
|
.tbl th.cdk-drag-placeholder { opacity: .35; background: var(--cad-accent-soft); }
|
|
6871
6871
|
.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; }
|
|
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); --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
6873
|
.tbl thead tr.cdk-drop-list-dragging th:not(.cdk-drag-placeholder) { transition: transform 200ms cubic-bezier(0, 0, 0.2, 1); }
|
|
6874
6874
|
.tbl th.cdk-drag-animating { transition: transform 200ms cubic-bezier(0, 0, 0.2, 1); }
|
|
6875
6875
|
.dt-bar__menu .mv { display: inline-flex; gap: 0; margin-left: auto; }
|
|
@@ -6976,7 +6976,7 @@ const CAD_TABLE_STYLES_4 = `
|
|
|
6976
6976
|
.tbl tr.dt-row.cdk-drag-placeholder { opacity: 0; }
|
|
6977
6977
|
.tbl tbody.cdk-drop-list-dragging tr.dt-row:not(.cdk-drag-placeholder) { transition: transform 200ms cubic-bezier(0, 0, 0.2, 1); }
|
|
6978
6978
|
.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); }
|
|
6979
|
+
.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
6980
|
.cdk-drag-preview.dt-tr-preview td { padding: 0 12px; height: 42px; vertical-align: middle; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
6981
6981
|
:host(.is-stacked) .tbl td.col-drag { display: none; }
|
|
6982
6982
|
|
|
@@ -8728,7 +8728,7 @@ class CadMenuComponent {
|
|
|
8728
8728
|
}
|
|
8729
8729
|
</div>
|
|
8730
8730
|
</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 });
|
|
8731
|
+
`, 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
8732
|
}
|
|
8733
8733
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: CadMenuComponent, decorators: [{
|
|
8734
8734
|
type: Component,
|
|
@@ -8768,7 +8768,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImpo
|
|
|
8768
8768
|
}
|
|
8769
8769
|
</div>
|
|
8770
8770
|
</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"] }]
|
|
8771
|
+
`, 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
8772
|
}], 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
8773
|
|
|
8774
8774
|
/**
|
|
@@ -8972,7 +8972,7 @@ class CadMenubarComponent {
|
|
|
8972
8972
|
}
|
|
8973
8973
|
}
|
|
8974
8974
|
</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 });
|
|
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);--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
8976
|
}
|
|
8977
8977
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: CadMenubarComponent, decorators: [{
|
|
8978
8978
|
type: Component,
|
|
@@ -9035,7 +9035,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImpo
|
|
|
9035
9035
|
}
|
|
9036
9036
|
}
|
|
9037
9037
|
</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"] }]
|
|
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);--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
9039
|
}], 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
9040
|
|
|
9041
9041
|
/**
|
|
@@ -9284,7 +9284,7 @@ class CadBottomNavComponent {
|
|
|
9284
9284
|
</span>
|
|
9285
9285
|
@if (showLabel(it)) {<span class="cad-bottom-nav__label">{{ it.label }}</span>}
|
|
9286
9286
|
</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 });
|
|
9287
|
+
`, 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
9288
|
}
|
|
9289
9289
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: CadBottomNavComponent, decorators: [{
|
|
9290
9290
|
type: Component,
|
|
@@ -9350,7 +9350,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImpo
|
|
|
9350
9350
|
</span>
|
|
9351
9351
|
@if (showLabel(it)) {<span class="cad-bottom-nav__label">{{ it.label }}</span>}
|
|
9352
9352
|
</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"] }]
|
|
9353
|
+
`, 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
9354
|
}], 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
9355
|
|
|
9356
9356
|
/**
|
|
@@ -10647,7 +10647,7 @@ class CadTableComponent extends CadTableBase {
|
|
|
10647
10647
|
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
10648
|
}
|
|
10649
10649
|
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 });
|
|
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);--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
10651
|
}
|
|
10652
10652
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: CadTableComponent, decorators: [{
|
|
10653
10653
|
type: Component,
|
|
@@ -10684,7 +10684,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImpo
|
|
|
10684
10684
|
'[style.--_scroll-h]': 'scrollHeight() || null',
|
|
10685
10685
|
'[style.--_detail-pl]': 'detailPaddingLeft()',
|
|
10686
10686
|
'[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"] }]
|
|
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);--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
10688
|
}], 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
10689
|
|
|
10690
10690
|
/** Template de nœud : `<ng-template cadTreeNode let-node let-row="row" let-level="level" let-selected="selected">`. */
|
|
@@ -11009,7 +11009,7 @@ const CAD_TABLE_PANEL_STYLES = `
|
|
|
11009
11009
|
.col-row .dh.is-disabled { visibility: hidden; }
|
|
11010
11010
|
.col-row .lbl { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
11011
11011
|
.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); }
|
|
11012
|
+
.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
11013
|
.col-row.cdk-drag-placeholder { opacity: .3; }
|
|
11014
11014
|
.cols.cdk-drop-list-dragging .col-row:not(.cdk-drag-placeholder) { transition: transform 180ms cubic-bezier(0,0,.2,1); }
|
|
11015
11015
|
.all-row { display: flex; align-items: center; gap: 6px; height: 28px; padding: 0 4px; margin-bottom: 4px; }
|
|
@@ -11381,7 +11381,7 @@ class CadTablePanelComponent {
|
|
|
11381
11381
|
@if (!aggsWritable()) {<div class="empty">Note : <code>aggregates</code> n'est pas un model sur cette table — écoutez <code>(aggregatesChange)</code>.</div>}
|
|
11382
11382
|
</div>
|
|
11383
11383
|
</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 });
|
|
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);--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
11385
|
}
|
|
11386
11386
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: CadTablePanelComponent, decorators: [{
|
|
11387
11387
|
type: Component,
|
|
@@ -11512,7 +11512,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImpo
|
|
|
11512
11512
|
@if (!aggsWritable()) {<div class="empty">Note : <code>aggregates</code> n'est pas un model sur cette table — écoutez <code>(aggregatesChange)</code>.</div>}
|
|
11513
11513
|
</div>
|
|
11514
11514
|
</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"] }]
|
|
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);--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
11516
|
}], 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
11517
|
|
|
11518
11518
|
/** <cad-skeleton width="70%" height="12px" shape="text|rect|circle" [lines]="3" [animation]="true" /> */
|
|
@@ -11751,7 +11751,7 @@ class CadTreeselectComponent extends CadValueAccessor {
|
|
|
11751
11751
|
@if (isMulti()) {<div class="sp__foot"><button type="button" class="ok" (click)="close()">OK{{ selectedNodes().length ? ' (' + selectedNodes().length + ')' : '' }}</button></div>}
|
|
11752
11752
|
</div>
|
|
11753
11753
|
</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 });
|
|
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);--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
11755
|
}
|
|
11756
11756
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: CadTreeselectComponent, decorators: [{
|
|
11757
11757
|
type: Component,
|
|
@@ -11774,7 +11774,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImpo
|
|
|
11774
11774
|
@if (isMulti()) {<div class="sp__foot"><button type="button" class="ok" (click)="close()">OK{{ selectedNodes().length ? ' (' + selectedNodes().length + ')' : '' }}</button></div>}
|
|
11775
11775
|
</div>
|
|
11776
11776
|
</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"] }]
|
|
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);--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
11778
|
}], 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
11779
|
|
|
11780
11780
|
/**
|
|
@@ -11930,7 +11930,7 @@ class CadCascadeSelectComponent extends CadValueAccessor {
|
|
|
11930
11930
|
}
|
|
11931
11931
|
</div>
|
|
11932
11932
|
</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 });
|
|
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);--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
11934
|
}
|
|
11935
11935
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: CadCascadeSelectComponent, decorators: [{
|
|
11936
11936
|
type: Component,
|
|
@@ -11953,7 +11953,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImpo
|
|
|
11953
11953
|
}
|
|
11954
11954
|
</div>
|
|
11955
11955
|
</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"] }]
|
|
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);--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
11957
|
}], 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
11958
|
|
|
11959
11959
|
/**
|
|
@@ -12175,7 +12175,7 @@ class CadComboComponent extends CadValueAccessor {
|
|
|
12175
12175
|
</ul>
|
|
12176
12176
|
</div>
|
|
12177
12177
|
</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 });
|
|
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);--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
12179
|
}
|
|
12180
12180
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: CadComboComponent, decorators: [{
|
|
12181
12181
|
type: Component,
|
|
@@ -12204,7 +12204,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImpo
|
|
|
12204
12204
|
</ul>
|
|
12205
12205
|
</div>
|
|
12206
12206
|
</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"] }]
|
|
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);--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
12208
|
}], 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
12209
|
|
|
12210
12210
|
let toastSeq = 0;
|
|
@@ -12376,7 +12376,7 @@ class CadToastComponent {
|
|
|
12376
12376
|
}
|
|
12377
12377
|
</div>
|
|
12378
12378
|
}
|
|
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 });
|
|
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);--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
12380
|
}
|
|
12381
12381
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: CadToastComponent, decorators: [{
|
|
12382
12382
|
type: Component,
|
|
@@ -12409,7 +12409,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImpo
|
|
|
12409
12409
|
}
|
|
12410
12410
|
</div>
|
|
12411
12411
|
}
|
|
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"] }]
|
|
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);--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
12413
|
}], 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
12414
|
|
|
12415
12415
|
/**
|
|
@@ -13769,7 +13769,7 @@ const CAD_MAP_GLOBAL_STYLES = `
|
|
|
13769
13769
|
.cad-map .maplibregl-ctrl-attrib.maplibregl-compact { min-height: 24px; }
|
|
13770
13770
|
.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
13771
|
.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; }
|
|
13772
|
+
.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
13773
|
.cad-map .maplibregl-popup-anchor-bottom .maplibregl-popup-tip { border-top-color: var(--cad-overlay); }
|
|
13774
13774
|
.cad-map .maplibregl-popup-anchor-top .maplibregl-popup-tip { border-bottom-color: var(--cad-overlay); }
|
|
13775
13775
|
.cad-map .maplibregl-popup-anchor-left .maplibregl-popup-tip { border-right-color: var(--cad-overlay); }
|
|
@@ -14885,7 +14885,7 @@ class CadMapSearchComponent {
|
|
|
14885
14885
|
} @else if (open() && q().length >= 3 && !busy() && searched()) {
|
|
14886
14886
|
<ul class="list"><li class="empty">Aucun résultat</li></ul>
|
|
14887
14887
|
}
|
|
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 });
|
|
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);--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
14889
|
}
|
|
14890
14890
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: CadMapSearchComponent, decorators: [{
|
|
14891
14891
|
type: Component,
|
|
@@ -14908,7 +14908,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImpo
|
|
|
14908
14908
|
} @else if (open() && q().length >= 3 && !busy() && searched()) {
|
|
14909
14909
|
<ul class="list"><li class="empty">Aucun résultat</li></ul>
|
|
14910
14910
|
}
|
|
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"] }]
|
|
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);--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
14912
|
}], 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
14913
|
const escapeHtml = (s) => s.replace(/[&<>"']/g, c => ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' })[c]);
|
|
14914
14914
|
|
|
@@ -17156,7 +17156,7 @@ class CadOrderlistComponent extends CadValueAccessor {
|
|
|
17156
17156
|
} @empty { <div class="cad-orderlist__empty">{{ query() ? 'Aucun résultat' : emptyMessage() }}</div> }
|
|
17157
17157
|
</div>
|
|
17158
17158
|
</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 });
|
|
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);--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
17160
|
}
|
|
17161
17161
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: CadOrderlistComponent, decorators: [{
|
|
17162
17162
|
type: Component,
|
|
@@ -17184,7 +17184,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImpo
|
|
|
17184
17184
|
} @empty { <div class="cad-orderlist__empty">{{ query() ? 'Aucun résultat' : emptyMessage() }}</div> }
|
|
17185
17185
|
</div>
|
|
17186
17186
|
</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"] }]
|
|
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);--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
17188
|
}], 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
17189
|
|
|
17190
17190
|
/**
|
|
@@ -17383,7 +17383,7 @@ class CadPicklistComponent extends CadValueAccessor {
|
|
|
17383
17383
|
</div>
|
|
17384
17384
|
<ng-container *ngTemplateOutlet="listTpl; context: { side: 'target' }"/>
|
|
17385
17385
|
@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 });
|
|
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);--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
17387
|
}
|
|
17388
17388
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: CadPicklistComponent, decorators: [{
|
|
17389
17389
|
type: Component,
|
|
@@ -17414,7 +17414,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImpo
|
|
|
17414
17414
|
</div>
|
|
17415
17415
|
<ng-container *ngTemplateOutlet="listTpl; context: { side: 'target' }"/>
|
|
17416
17416
|
@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"] }]
|
|
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);--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
17418
|
}], 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
17419
|
|
|
17420
17420
|
/**
|
|
@@ -18096,9 +18096,1453 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImpo
|
|
|
18096
18096
|
`, styles: [":host{display:block;font-family:var(--cad-font)}.cad-chart__box{position:relative;width:100%;height:var(--cad-chart-h, 280px)}.cad-chart__box canvas{width:100%!important;height:100%!important}.cad-chart__state{position:absolute;inset:0;display:grid;place-items:center}.cad-chart__table{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}:host(.show-table) .cad-chart__table{position:static;width:100%;height:auto;clip:auto;white-space:normal;margin-top:8px;border-collapse:collapse;font-size:12px}:host(.show-table) .cad-chart__table th,:host(.show-table) .cad-chart__table td{border:1px solid var(--cad-border);padding:4px 8px;text-align:right}:host(.show-table) .cad-chart__table th{background:var(--cad-bg-subtle);text-align:left}\n"] }]
|
|
18097
18097
|
}], ctorParameters: () => [], propDecorators: { canvas: [{ type: i0.ViewChild, args: ['canvas', { isSignal: true }] }], type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: false }] }], data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: false }] }], options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], plugins: [{ type: i0.Input, args: [{ isSignal: true, alias: "plugins", required: false }] }], height: [{ type: i0.Input, args: [{ isSignal: true, alias: "height", required: false }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], responsive: [{ type: i0.Input, args: [{ isSignal: true, alias: "responsive", required: false }] }], palette: [{ type: i0.Input, args: [{ isSignal: true, alias: "palette", required: false }] }], themed: [{ type: i0.Input, args: [{ isSignal: true, alias: "themed", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], accessibleTable: [{ type: i0.Input, args: [{ isSignal: true, alias: "accessibleTable", required: false }] }], chartClick: [{ type: i0.Output, args: ["chartClick"] }], chartHover: [{ type: i0.Output, args: ["chartHover"] }], ready: [{ type: i0.Output, args: ["ready"] }], error: [{ type: i0.Output, args: ["error"] }] } });
|
|
18098
18098
|
|
|
18099
|
+
/**
|
|
18100
|
+
* Modèle de planification commun aux trois vues (taskboard, scheduler, gantt).
|
|
18101
|
+
*
|
|
18102
|
+
* DOCTRINE — aucun champ n'est obligatoire hors `id`. Chaque vue déclare ses prérequis et
|
|
18103
|
+
* son repli : une tâche qu'une vue ne sait pas placer part dans sa zone « non planifié »,
|
|
18104
|
+
* jamais dans le silence. C'est cette règle, et elle seule, qui rend le document commun.
|
|
18105
|
+
*
|
|
18106
|
+
* Les noms suivent les conventions EXISTANTES plutôt qu'une invention maison :
|
|
18107
|
+
* - RFC 5545 (iCalendar) pour l'événement daté et sa récurrence : rrule, exdates, recurrenceId ;
|
|
18108
|
+
* - MS Project / Primavera P6 pour les liens FS/SS/FF/SF et le décalage (lag).
|
|
18109
|
+
* camelCase partout : c'est la convention du reste de la bibliothèque ET celle de slapi,
|
|
18110
|
+
* ce qui donne une correspondance 1 pour 1 entre le JSON et les colonnes.
|
|
18111
|
+
*/
|
|
18112
|
+
|
|
18113
|
+
/**
|
|
18114
|
+
* Durées en unités OUVRÉES : '3d', '4h', '90m', '2w', '1.5d', '-2d'.
|
|
18115
|
+
*
|
|
18116
|
+
* Une durée n'a de sens qu'appuyée sur un calendrier : 'd' vaut une JOURNÉE OUVRÉE, dont la
|
|
18117
|
+
* longueur dépend des horaires déclarés (8 h ouvrées ou 24 h). La conversion en minutes se
|
|
18118
|
+
* fait donc via `CadWorkCalendar.dailyMinutes`, jamais par une constante.
|
|
18119
|
+
*
|
|
18120
|
+
* 'w' vaut une semaine OUVRÉE = nombre de jours ouvrés déclarés (5 par défaut), pas 7 jours.
|
|
18121
|
+
*/
|
|
18122
|
+
const RE = /^\s*([+-]?\d+(?:[.,]\d+)?)\s*(m|min|h|d|j|w|s)\s*$/i;
|
|
18123
|
+
/**
|
|
18124
|
+
* Analyse une durée. Accepte les alias français ('j' = jour, 's' = semaine) et la virgule
|
|
18125
|
+
* décimale. Rend null si la forme est invalide — l'appelant en fait une anomalie, pas un plantage.
|
|
18126
|
+
*/
|
|
18127
|
+
function cadParseDuration(input) {
|
|
18128
|
+
if (input == null || input === '')
|
|
18129
|
+
return null;
|
|
18130
|
+
if (typeof input === 'number')
|
|
18131
|
+
return Number.isFinite(input) ? { value: input, unit: 'd' } : null;
|
|
18132
|
+
const m = RE.exec(String(input));
|
|
18133
|
+
if (!m)
|
|
18134
|
+
return null;
|
|
18135
|
+
const value = Number(m[1].replace(',', '.'));
|
|
18136
|
+
if (!Number.isFinite(value))
|
|
18137
|
+
return null;
|
|
18138
|
+
const u = m[2].toLowerCase();
|
|
18139
|
+
const unit = u === 'min' ? 'm' : u === 'j' ? 'd' : u === 's' ? 'w' : u;
|
|
18140
|
+
return { value, unit };
|
|
18141
|
+
}
|
|
18142
|
+
/**
|
|
18143
|
+
* Convertit une durée en MINUTES OUVRÉES.
|
|
18144
|
+
* `dailyMinutes` = minutes ouvrées d'une journée type, `weekDays` = jours ouvrés par semaine.
|
|
18145
|
+
*/
|
|
18146
|
+
function cadDurationToMinutes(d, dailyMinutes, weekDays) {
|
|
18147
|
+
if (!d)
|
|
18148
|
+
return 0;
|
|
18149
|
+
switch (d.unit) {
|
|
18150
|
+
case 'm': return d.value;
|
|
18151
|
+
case 'h': return d.value * 60;
|
|
18152
|
+
case 'd': return d.value * dailyMinutes;
|
|
18153
|
+
case 'w': return d.value * dailyMinutes * Math.max(1, weekDays);
|
|
18154
|
+
}
|
|
18155
|
+
}
|
|
18156
|
+
/** Rend une durée sous sa forme la plus lisible ('3d', '4h', '90m') depuis des minutes ouvrées. */
|
|
18157
|
+
function cadFormatDuration(minutes, dailyMinutes) {
|
|
18158
|
+
const abs = Math.abs(minutes);
|
|
18159
|
+
const sign = minutes < 0 ? '-' : '';
|
|
18160
|
+
if (dailyMinutes > 0 && abs % dailyMinutes === 0)
|
|
18161
|
+
return sign + abs / dailyMinutes + 'd';
|
|
18162
|
+
if (abs % 60 === 0)
|
|
18163
|
+
return sign + abs / 60 + 'h';
|
|
18164
|
+
return sign + abs + 'm';
|
|
18165
|
+
}
|
|
18166
|
+
|
|
18167
|
+
/**
|
|
18168
|
+
* Rang FRACTIONNAIRE : une chaîne ordonnable dans laquelle on peut toujours insérer.
|
|
18169
|
+
*
|
|
18170
|
+
* POURQUOI — déplacer une carte entre deux autres ne doit pas réécrire toute la colonne en
|
|
18171
|
+
* base. À plusieurs utilisateurs, une renumérotation entière garantit les collisions et coûte
|
|
18172
|
+
* un UPDATE par carte. Ici, insérer entre deux voisins produit une nouvelle chaîne comprise
|
|
18173
|
+
* entre les leurs : UN SEUL enregistrement change.
|
|
18174
|
+
*
|
|
18175
|
+
* C'est un FORMAT STOCKÉ, pas une astuce d'affichage — d'où sa place au socle, avant toute vue.
|
|
18176
|
+
*
|
|
18177
|
+
* INVARIANT — un rang produit ici ne se termine JAMAIS par le caractère plancher ('0'), sans
|
|
18178
|
+
* quoi il existerait des couples sans intervalle (rien ne tient entre '0' et '00'). Tous les
|
|
18179
|
+
* rangs manipulés doivent donc venir de ces fonctions.
|
|
18180
|
+
*/
|
|
18181
|
+
const A = '0123456789abcdefghijklmnopqrstuvwxyz';
|
|
18182
|
+
const RADIX = A.length;
|
|
18183
|
+
const CH = (v) => A[Math.max(0, Math.min(RADIX - 1, v))];
|
|
18184
|
+
const IDX = (c) => {
|
|
18185
|
+
const i = A.indexOf(c);
|
|
18186
|
+
return i < 0 ? 0 : i;
|
|
18187
|
+
};
|
|
18188
|
+
/** Vrai si la chaîne est un rang exploitable (alphabet connu, pas de plancher final). */
|
|
18189
|
+
function cadIsRank(s) {
|
|
18190
|
+
return typeof s === 'string' && s.length > 0 && !s.endsWith(A[0]) && [...s].every(c => A.includes(c));
|
|
18191
|
+
}
|
|
18192
|
+
/**
|
|
18193
|
+
* Rang strictement compris entre `prev` et `next`.
|
|
18194
|
+
* `prev` absent = insertion en tête, `next` absent = insertion en queue, les deux = première carte.
|
|
18195
|
+
*/
|
|
18196
|
+
function cadRankBetween(prev, next) {
|
|
18197
|
+
const a = cadIsRank(prev) ? prev : '';
|
|
18198
|
+
const b = cadIsRank(next) ? next : '';
|
|
18199
|
+
if (a && b && a >= b)
|
|
18200
|
+
throw new Error('cadRankBetween : ' + a + ' n\'est pas avant ' + b);
|
|
18201
|
+
let out = '';
|
|
18202
|
+
for (let i = 0; i < 64; i++) {
|
|
18203
|
+
const va = i < a.length ? IDX(a[i]) : 0; // a épuisé -> plancher
|
|
18204
|
+
const vb = i < b.length ? IDX(b[i]) : RADIX; // b épuisé -> plafond ouvert
|
|
18205
|
+
if (va + 1 < vb)
|
|
18206
|
+
return out + CH((va + vb) >> 1); // de la place : on coupe au milieu
|
|
18207
|
+
out += i < a.length ? a[i] : A[0]; // pas de place : on descend d'un cran
|
|
18208
|
+
}
|
|
18209
|
+
/* Inatteignable en pratique : 64 caractères = plus d'insertions successives au même point
|
|
18210
|
+
que ce qu'une session humaine produit. Le repli reste ordonné. */
|
|
18211
|
+
return out + CH(RADIX >> 1);
|
|
18212
|
+
}
|
|
18213
|
+
/** Rang d'une carte posée AVANT toutes les autres. */
|
|
18214
|
+
const cadRankFirst = (first) => cadRankBetween(null, first);
|
|
18215
|
+
/** Rang d'une carte posée APRÈS toutes les autres. */
|
|
18216
|
+
const cadRankLast = (last) => cadRankBetween(last, null);
|
|
18217
|
+
/**
|
|
18218
|
+
* `n` rangs croissants bien répartis — pour initialiser une colonne ou rattraper des données
|
|
18219
|
+
* qui n'en portaient pas. La répartition laisse de la place entre chaque voisin.
|
|
18220
|
+
*/
|
|
18221
|
+
function cadRankSequence(n) {
|
|
18222
|
+
const count = Math.max(0, Math.floor(n));
|
|
18223
|
+
if (!count)
|
|
18224
|
+
return [];
|
|
18225
|
+
const span = RADIX * RADIX;
|
|
18226
|
+
const out = [];
|
|
18227
|
+
for (let i = 0; i < count; i++) {
|
|
18228
|
+
let v = Math.floor(((i + 1) * span) / (count + 1));
|
|
18229
|
+
if (v % RADIX === 0)
|
|
18230
|
+
v += 1; // jamais de plancher final
|
|
18231
|
+
out.push(CH(Math.floor(v / RADIX)) + CH(v % RADIX));
|
|
18232
|
+
}
|
|
18233
|
+
return out;
|
|
18234
|
+
}
|
|
18235
|
+
/** Comparateur de rangs, utilisable tel quel dans un `sort`. */
|
|
18236
|
+
const cadCompareRank = (a, b) => (a < b ? -1 : a > b ? 1 : 0);
|
|
18237
|
+
|
|
18238
|
+
/**
|
|
18239
|
+
* Calendrier ouvré — le référentiel temps partagé par le scheduler et le gantt.
|
|
18240
|
+
*
|
|
18241
|
+
* Tout se calcule en HEURE MURALE locale (pas en millisecondes écoulées) : « 3 jours ouvrés »
|
|
18242
|
+
* veut dire trois fois les horaires déclarés, que la période traverse ou non un changement
|
|
18243
|
+
* d'heure. C'est la seule sémantique qui corresponde à ce qu'un planificateur attend.
|
|
18244
|
+
*
|
|
18245
|
+
* Les exceptions peuvent viser une ressource précise : un congé n'est pas un jour férié.
|
|
18246
|
+
* La recherche est donc toujours « exception de CETTE ressource, sinon exception globale ».
|
|
18247
|
+
*/
|
|
18248
|
+
/** Au-delà, on considère le calendrier impraticable plutôt que de boucler (10 ans de jours). */
|
|
18249
|
+
const MAX_SCAN = 3660;
|
|
18250
|
+
const DAY = 1440;
|
|
18251
|
+
const dayStart = (d) => new Date(d.getFullYear(), d.getMonth(), d.getDate());
|
|
18252
|
+
const minutesOf = (d) => d.getHours() * 60 + d.getMinutes();
|
|
18253
|
+
const atMinutes = (day, min) => new Date(day.getFullYear(), day.getMonth(), day.getDate(), Math.floor(min / 60), Math.round(min % 60));
|
|
18254
|
+
/** 'HH:mm' -> minutes depuis minuit. '24:00' vaut la fin de journée. NaN si illisible. */
|
|
18255
|
+
function parseClock(v) {
|
|
18256
|
+
const m = /^\s*(\d{1,2}):(\d{2})\s*$/.exec(String(v ?? ''));
|
|
18257
|
+
if (!m)
|
|
18258
|
+
return NaN;
|
|
18259
|
+
const min = +m[1] * 60 + +m[2];
|
|
18260
|
+
return min >= 0 && min <= DAY ? min : NaN;
|
|
18261
|
+
}
|
|
18262
|
+
/** Nettoie une liste d'horaires : bornes valides, tri, fusion des recouvrements. */
|
|
18263
|
+
function normalizeHours(hours) {
|
|
18264
|
+
const raw = [];
|
|
18265
|
+
for (const h of hours ?? []) {
|
|
18266
|
+
const a = parseClock(h?.from);
|
|
18267
|
+
const b = parseClock(h?.to);
|
|
18268
|
+
if (Number.isNaN(a) || Number.isNaN(b) || b <= a)
|
|
18269
|
+
continue;
|
|
18270
|
+
raw.push([a, b]);
|
|
18271
|
+
}
|
|
18272
|
+
raw.sort((x, y) => x[0] - y[0]);
|
|
18273
|
+
const out = [];
|
|
18274
|
+
for (const [a, b] of raw) {
|
|
18275
|
+
const last = out[out.length - 1];
|
|
18276
|
+
if (last && a <= last[1])
|
|
18277
|
+
last[1] = Math.max(last[1], b);
|
|
18278
|
+
else
|
|
18279
|
+
out.push([a, b]);
|
|
18280
|
+
}
|
|
18281
|
+
return out;
|
|
18282
|
+
}
|
|
18283
|
+
const FULL_DAY = [[0, DAY]];
|
|
18284
|
+
/**
|
|
18285
|
+
* Jours fériés français d'une année, au format 'yyyy-MM-dd' — les huit dates fixes plus les
|
|
18286
|
+
* trois mobiles adossées à Pâques. Évite d'avoir à saisir la liste à la main chaque année.
|
|
18287
|
+
*/
|
|
18288
|
+
function cadFrenchHolidays(year) {
|
|
18289
|
+
// Pâques, algorithme grégorien anonyme.
|
|
18290
|
+
const a = year % 19;
|
|
18291
|
+
const b = Math.floor(year / 100);
|
|
18292
|
+
const c = year % 100;
|
|
18293
|
+
const d = Math.floor(b / 4);
|
|
18294
|
+
const e = b % 4;
|
|
18295
|
+
const f = Math.floor((b + 8) / 25);
|
|
18296
|
+
const g = Math.floor((b - f + 1) / 3);
|
|
18297
|
+
const h = (19 * a + b - d - g + 15) % 30;
|
|
18298
|
+
const i = Math.floor(c / 4);
|
|
18299
|
+
const k = c % 4;
|
|
18300
|
+
const l = (32 + 2 * e + 2 * i - h - k) % 7;
|
|
18301
|
+
const m = Math.floor((a + 11 * h + 22 * l) / 451);
|
|
18302
|
+
const month = Math.floor((h + l - 7 * m + 114) / 31);
|
|
18303
|
+
const day = ((h + l - 7 * m + 114) % 31) + 1;
|
|
18304
|
+
const easter = new Date(year, month - 1, day);
|
|
18305
|
+
const fixed = ['01-01', '05-01', '05-08', '07-14', '08-15', '11-01', '11-11', '12-25'];
|
|
18306
|
+
const mobile = [1, 39, 50].map(n => isoOf(addDays(easter, n)));
|
|
18307
|
+
return [...fixed.map(s => year + '-' + s), ...mobile].sort();
|
|
18308
|
+
}
|
|
18309
|
+
/**
|
|
18310
|
+
* Calendrier ouvré immuable. Toute la logique est pure : elle se teste sans DOM et sans horloge.
|
|
18311
|
+
*
|
|
18312
|
+
* ```ts
|
|
18313
|
+
* const cal = new CadWorkCalendar({ workdays: [1,2,3,4,5], holidays: cadFrenchHolidays(2026) });
|
|
18314
|
+
* cal.addMinutes(new Date(2026, 7, 21, 16, 0), 4 * 60); // vendredi 16 h + 4 h ouvrées -> lundi
|
|
18315
|
+
* ```
|
|
18316
|
+
*/
|
|
18317
|
+
class CadWorkCalendar {
|
|
18318
|
+
/** Jours ouvrés, 0 = dimanche. */
|
|
18319
|
+
workdays;
|
|
18320
|
+
/** Minutes ouvrées d'une journée type — sert d'étalon à l'unité 'd'. */
|
|
18321
|
+
dailyMinutes;
|
|
18322
|
+
/** Jours ouvrés par semaine — sert d'étalon à l'unité 'w'. */
|
|
18323
|
+
weekDays;
|
|
18324
|
+
base;
|
|
18325
|
+
holidays;
|
|
18326
|
+
/** Clé 'yyyy-MM-dd' pour une exception globale, 'yyyy-MM-dd|ressource' pour une exception ciblée. */
|
|
18327
|
+
exceptions;
|
|
18328
|
+
constructor(spec) {
|
|
18329
|
+
/* Un défaut ne s'applique qu'à ce qui n'a PAS été déclaré. Déclarer `workdays: []`, c'est
|
|
18330
|
+
dire que rien n'est ouvert : le remplacer par lundi-vendredi reviendrait à contredire
|
|
18331
|
+
l'appelant en silence, et rendrait `empty` inatteignable. */
|
|
18332
|
+
this.workdays = new Set(spec?.workdays === undefined
|
|
18333
|
+
? [1, 2, 3, 4, 5]
|
|
18334
|
+
: spec.workdays.filter(n => Number.isInteger(n) && n >= 0 && n <= 6));
|
|
18335
|
+
this.base = spec?.hours === undefined ? FULL_DAY : normalizeHours(spec.hours);
|
|
18336
|
+
this.dailyMinutes = this.base.reduce((s, [a, b]) => s + (b - a), 0);
|
|
18337
|
+
this.weekDays = this.workdays.size;
|
|
18338
|
+
this.holidays = new Set((spec?.holidays ?? []).filter(s => typeof s === 'string'));
|
|
18339
|
+
const ex = new Map();
|
|
18340
|
+
for (const e of spec?.exceptions ?? []) {
|
|
18341
|
+
if (!e?.date)
|
|
18342
|
+
continue;
|
|
18343
|
+
const key = e.resource ? e.date + '|' + e.resource : e.date;
|
|
18344
|
+
ex.set(key, e.off ? null : normalizeHours(e.hours ?? []));
|
|
18345
|
+
}
|
|
18346
|
+
this.exceptions = ex;
|
|
18347
|
+
}
|
|
18348
|
+
/** Vrai si aucun temps ouvré n'est déclarable — le normaliseur en fait une anomalie. */
|
|
18349
|
+
get empty() {
|
|
18350
|
+
return this.workdays.size === 0 || this.dailyMinutes === 0;
|
|
18351
|
+
}
|
|
18352
|
+
/** Intervalles ouvrés d'une journée, en minutes depuis minuit. Vide = jour chômé. */
|
|
18353
|
+
intervals(date, resource) {
|
|
18354
|
+
if (!isValidDate(date))
|
|
18355
|
+
return [];
|
|
18356
|
+
const iso = isoOf(date);
|
|
18357
|
+
if (resource) {
|
|
18358
|
+
const scoped = this.exceptions.get(iso + '|' + resource);
|
|
18359
|
+
if (scoped !== undefined)
|
|
18360
|
+
return scoped ?? [];
|
|
18361
|
+
// une exception ciblée peut aussi OUVRIR un jour normalement chômé
|
|
18362
|
+
}
|
|
18363
|
+
const global = this.exceptions.get(iso);
|
|
18364
|
+
if (global !== undefined)
|
|
18365
|
+
return global ?? [];
|
|
18366
|
+
if (this.holidays.has(iso))
|
|
18367
|
+
return [];
|
|
18368
|
+
return this.workdays.has(date.getDay()) ? this.base : [];
|
|
18369
|
+
}
|
|
18370
|
+
/** Vrai si la journée comporte au moins un intervalle ouvré. */
|
|
18371
|
+
isWorkday(date, resource) {
|
|
18372
|
+
return this.intervals(date, resource).length > 0;
|
|
18373
|
+
}
|
|
18374
|
+
/** Vrai si l'instant tombe DANS un intervalle ouvré (borne de fin exclue). */
|
|
18375
|
+
isWorkingTime(date, resource) {
|
|
18376
|
+
if (!isValidDate(date))
|
|
18377
|
+
return false;
|
|
18378
|
+
const m = minutesOf(date);
|
|
18379
|
+
return this.intervals(date, resource).some(([a, b]) => m >= a && m < b);
|
|
18380
|
+
}
|
|
18381
|
+
/** Premier instant ouvré à partir de `date` (`date` lui-même s'il l'est). null si introuvable. */
|
|
18382
|
+
nextWorkingStart(date, resource) {
|
|
18383
|
+
const c = this.scanForward(this.cursorOf(date), resource);
|
|
18384
|
+
return c ? atMinutes(c.day, c.min) : null;
|
|
18385
|
+
}
|
|
18386
|
+
/** Dernier instant ouvré jusqu'à `date` (exclu). null si introuvable. */
|
|
18387
|
+
prevWorkingEnd(date, resource) {
|
|
18388
|
+
const c = this.scanBackward(this.cursorOf(date), resource);
|
|
18389
|
+
return c ? atMinutes(c.day, c.min) : null;
|
|
18390
|
+
}
|
|
18391
|
+
/**
|
|
18392
|
+
* Avance (ou recule, si négatif) de `minutes` OUVRÉES depuis `from`.
|
|
18393
|
+
* Rend null si le calendrier ne permet pas d'y arriver (aucun jour ouvré déclaré).
|
|
18394
|
+
*/
|
|
18395
|
+
addMinutes(from, minutes, resource) {
|
|
18396
|
+
if (!isValidDate(from) || !Number.isFinite(minutes))
|
|
18397
|
+
return null;
|
|
18398
|
+
if (minutes === 0)
|
|
18399
|
+
return this.nextWorkingStart(from, resource);
|
|
18400
|
+
return minutes > 0
|
|
18401
|
+
? this.walkForward(from, minutes, resource)
|
|
18402
|
+
: this.walkBackward(from, -minutes, resource);
|
|
18403
|
+
}
|
|
18404
|
+
/** Minutes OUVRÉES entre deux instants. Négatif si `b` précède `a`. */
|
|
18405
|
+
minutesBetween(a, b, resource) {
|
|
18406
|
+
if (!isValidDate(a) || !isValidDate(b))
|
|
18407
|
+
return 0;
|
|
18408
|
+
if (b.getTime() < a.getTime())
|
|
18409
|
+
return -this.minutesBetween(b, a, resource);
|
|
18410
|
+
const end = this.cursorOf(b);
|
|
18411
|
+
let day = dayStart(a);
|
|
18412
|
+
let from = minutesOf(a);
|
|
18413
|
+
let total = 0;
|
|
18414
|
+
for (let guard = 0; guard < MAX_SCAN; guard++) {
|
|
18415
|
+
const last = day.getTime() >= end.day.getTime();
|
|
18416
|
+
const to = last ? end.min : DAY;
|
|
18417
|
+
for (const [s, e] of this.intervals(day, resource)) {
|
|
18418
|
+
const lo = Math.max(s, from);
|
|
18419
|
+
const hi = Math.min(e, to);
|
|
18420
|
+
if (hi > lo)
|
|
18421
|
+
total += hi - lo;
|
|
18422
|
+
}
|
|
18423
|
+
if (last)
|
|
18424
|
+
return total;
|
|
18425
|
+
day = addDays(day, 1);
|
|
18426
|
+
from = 0;
|
|
18427
|
+
}
|
|
18428
|
+
return total;
|
|
18429
|
+
}
|
|
18430
|
+
/* ---------------- interne : un curseur (jour, minute) évite l'ambiguïté de 24:00 -------- */
|
|
18431
|
+
cursorOf(d) {
|
|
18432
|
+
return { day: dayStart(d), min: minutesOf(d) };
|
|
18433
|
+
}
|
|
18434
|
+
scanForward(c, resource) {
|
|
18435
|
+
if (this.empty)
|
|
18436
|
+
return null;
|
|
18437
|
+
let { day, min } = c;
|
|
18438
|
+
for (let i = 0; i < MAX_SCAN; i++) {
|
|
18439
|
+
for (const [s, e] of this.intervals(day, resource)) {
|
|
18440
|
+
if (e > min)
|
|
18441
|
+
return { day, min: Math.max(s, min) };
|
|
18442
|
+
}
|
|
18443
|
+
day = addDays(day, 1);
|
|
18444
|
+
min = 0;
|
|
18445
|
+
}
|
|
18446
|
+
return null;
|
|
18447
|
+
}
|
|
18448
|
+
scanBackward(c, resource) {
|
|
18449
|
+
if (this.empty)
|
|
18450
|
+
return null;
|
|
18451
|
+
let { day, min } = c;
|
|
18452
|
+
for (let i = 0; i < MAX_SCAN; i++) {
|
|
18453
|
+
const ivs = this.intervals(day, resource);
|
|
18454
|
+
for (let k = ivs.length - 1; k >= 0; k--) {
|
|
18455
|
+
const [s, e] = ivs[k];
|
|
18456
|
+
if (s < min)
|
|
18457
|
+
return { day, min: Math.min(e, min) };
|
|
18458
|
+
}
|
|
18459
|
+
day = addDays(day, -1);
|
|
18460
|
+
min = DAY;
|
|
18461
|
+
}
|
|
18462
|
+
return null;
|
|
18463
|
+
}
|
|
18464
|
+
walkForward(from, minutes, resource) {
|
|
18465
|
+
let c = this.scanForward(this.cursorOf(from), resource);
|
|
18466
|
+
if (!c)
|
|
18467
|
+
return null;
|
|
18468
|
+
let left = minutes;
|
|
18469
|
+
for (let guard = 0; guard < MAX_SCAN; guard++) {
|
|
18470
|
+
for (const [s, e] of this.intervals(c.day, resource)) {
|
|
18471
|
+
if (e <= c.min)
|
|
18472
|
+
continue;
|
|
18473
|
+
const start = Math.max(s, c.min);
|
|
18474
|
+
const avail = e - start;
|
|
18475
|
+
if (avail >= left)
|
|
18476
|
+
return atMinutes(c.day, start + left);
|
|
18477
|
+
left -= avail;
|
|
18478
|
+
}
|
|
18479
|
+
c = { day: addDays(c.day, 1), min: 0 };
|
|
18480
|
+
}
|
|
18481
|
+
return null;
|
|
18482
|
+
}
|
|
18483
|
+
walkBackward(from, minutes, resource) {
|
|
18484
|
+
let c = this.scanBackward(this.cursorOf(from), resource);
|
|
18485
|
+
if (!c)
|
|
18486
|
+
return null;
|
|
18487
|
+
let left = minutes;
|
|
18488
|
+
for (let guard = 0; guard < MAX_SCAN; guard++) {
|
|
18489
|
+
const ivs = this.intervals(c.day, resource);
|
|
18490
|
+
for (let k = ivs.length - 1; k >= 0; k--) {
|
|
18491
|
+
const [s, e] = ivs[k];
|
|
18492
|
+
if (s >= c.min)
|
|
18493
|
+
continue;
|
|
18494
|
+
const end = Math.min(e, c.min);
|
|
18495
|
+
const avail = end - s;
|
|
18496
|
+
if (avail >= left)
|
|
18497
|
+
return atMinutes(c.day, end - left);
|
|
18498
|
+
left -= avail;
|
|
18499
|
+
}
|
|
18500
|
+
c = { day: addDays(c.day, -1), min: DAY };
|
|
18501
|
+
}
|
|
18502
|
+
return null;
|
|
18503
|
+
}
|
|
18504
|
+
}
|
|
18505
|
+
|
|
18506
|
+
/**
|
|
18507
|
+
* Axe de temps : graduations, et conversion pixel <-> date.
|
|
18508
|
+
*
|
|
18509
|
+
* LE POINT CRITIQUE — l'axe n'est PAS une division. Écrire `x = (t - t0) / msParPixel` est
|
|
18510
|
+
* faux dès qu'on dézoome : un jour ne fait pas toujours 24 h (changement d'heure), un mois n'a
|
|
18511
|
+
* pas de largeur fixe, une année pas davantage. Février et mars occuperaient alors des largeurs
|
|
18512
|
+
* différentes alors que l'oeil attend des colonnes égales, et le défaut ne se voit qu'en mars
|
|
18513
|
+
* et en octobre — donc jamais pendant le développement.
|
|
18514
|
+
*
|
|
18515
|
+
* Ici, l'axe est une LISTE DE GRADUATIONS de largeur égale, et la conversion est une recherche
|
|
18516
|
+
* dans cette liste suivie d'une interpolation À L'INTÉRIEUR de la graduation trouvée. Chaque
|
|
18517
|
+
* graduation porte sa vraie durée ; l'arithmétique linéaire ne s'applique que localement.
|
|
18518
|
+
*
|
|
18519
|
+
* Corollaire de rendu : la grille de fond n'a pas à exister en DOM. Des graduations de largeur
|
|
18520
|
+
* égale se peignent en `repeating-linear-gradient`, ce qui évite de virtualiser 1 100 colonnes
|
|
18521
|
+
* pour trois ans au jour. Seuls l'en-tête visible et les barres sont rendus.
|
|
18522
|
+
*/
|
|
18523
|
+
/** Échelle du bandeau supérieur d'un en-tête à deux étages. */
|
|
18524
|
+
const PARENT = {
|
|
18525
|
+
hour: 'day',
|
|
18526
|
+
day: 'month',
|
|
18527
|
+
week: 'month',
|
|
18528
|
+
month: 'year',
|
|
18529
|
+
quarter: 'year',
|
|
18530
|
+
year: null,
|
|
18531
|
+
};
|
|
18532
|
+
const MAX_TICKS = 20000;
|
|
18533
|
+
const startOfWeek = (d, firstDay) => {
|
|
18534
|
+
const s = startOfDay(d);
|
|
18535
|
+
const delta = (s.getDay() - firstDay + 7) % 7;
|
|
18536
|
+
return addDays(s, -delta);
|
|
18537
|
+
};
|
|
18538
|
+
const startOfQuarter = (d) => new Date(d.getFullYear(), Math.floor(d.getMonth() / 3) * 3, 1);
|
|
18539
|
+
const startOfHour = (d) => new Date(d.getFullYear(), d.getMonth(), d.getDate(), d.getHours());
|
|
18540
|
+
/** Aligne un instant sur le début de sa graduation. */
|
|
18541
|
+
function cadScaleStart(date, scale, firstDay = 1) {
|
|
18542
|
+
switch (scale) {
|
|
18543
|
+
case 'hour': return startOfHour(date);
|
|
18544
|
+
case 'day': return startOfDay(date);
|
|
18545
|
+
case 'week': return startOfWeek(date, firstDay);
|
|
18546
|
+
case 'month': return startOfMonth(date);
|
|
18547
|
+
case 'quarter': return startOfQuarter(date);
|
|
18548
|
+
case 'year': return new Date(date.getFullYear(), 0, 1);
|
|
18549
|
+
}
|
|
18550
|
+
}
|
|
18551
|
+
/**
|
|
18552
|
+
* Début de la graduation SUIVANTE. Construit en heure locale, donc juste aux changements d'heure.
|
|
18553
|
+
* L'entrée est alignée au préalable : `cadScaleNext(31 janvier, 'month')` rend le 1er février,
|
|
18554
|
+
* jamais le 28 — sans quoi une date de milieu de mois produirait une graduation décalée.
|
|
18555
|
+
*/
|
|
18556
|
+
function cadScaleNext(date, scale, firstDay = 1) {
|
|
18557
|
+
const start = cadScaleStart(date, scale, firstDay);
|
|
18558
|
+
switch (scale) {
|
|
18559
|
+
case 'hour': return new Date(start.getFullYear(), start.getMonth(), start.getDate(), start.getHours() + 1);
|
|
18560
|
+
case 'day': return addDays(start, 1);
|
|
18561
|
+
case 'week': return addDays(start, 7);
|
|
18562
|
+
case 'month': return addMonths(start, 1);
|
|
18563
|
+
case 'quarter': return addMonths(start, 3);
|
|
18564
|
+
case 'year': return addYears(start, 1);
|
|
18565
|
+
}
|
|
18566
|
+
}
|
|
18567
|
+
const intl = (locale, opts) => new Intl.DateTimeFormat(locale, opts);
|
|
18568
|
+
function defaultLabel(d, scale, locale) {
|
|
18569
|
+
switch (scale) {
|
|
18570
|
+
case 'hour': return intl(locale, { hour: '2-digit', minute: '2-digit' }).format(d);
|
|
18571
|
+
case 'day': return String(d.getDate());
|
|
18572
|
+
case 'week': return 'S' + isoWeek(d);
|
|
18573
|
+
case 'month': return intl(locale, { month: 'short' }).format(d);
|
|
18574
|
+
case 'quarter': return 'T' + (Math.floor(d.getMonth() / 3) + 1);
|
|
18575
|
+
case 'year': return String(d.getFullYear());
|
|
18576
|
+
}
|
|
18577
|
+
}
|
|
18578
|
+
/** Libellé du bandeau supérieur — plus explicite, puisqu'il porte le contexte. */
|
|
18579
|
+
function bandLabel(d, scale, locale) {
|
|
18580
|
+
switch (scale) {
|
|
18581
|
+
case 'day': return intl(locale, { weekday: 'short', day: 'numeric', month: 'long' }).format(d);
|
|
18582
|
+
case 'month': return intl(locale, { month: 'long', year: 'numeric' }).format(d);
|
|
18583
|
+
case 'year': return String(d.getFullYear());
|
|
18584
|
+
default: return defaultLabel(d, scale, locale);
|
|
18585
|
+
}
|
|
18586
|
+
}
|
|
18587
|
+
/** Une graduation est « majeure » quand elle ouvre l'unité supérieure. */
|
|
18588
|
+
function isMajor(d, scale, firstDay) {
|
|
18589
|
+
switch (scale) {
|
|
18590
|
+
case 'hour': return d.getHours() === 0;
|
|
18591
|
+
case 'day': return d.getDate() === 1;
|
|
18592
|
+
case 'week': return d.getDate() <= 7;
|
|
18593
|
+
case 'month': return d.getMonth() === 0;
|
|
18594
|
+
case 'quarter': return d.getMonth() === 0;
|
|
18595
|
+
case 'year': return true;
|
|
18596
|
+
}
|
|
18597
|
+
}
|
|
18598
|
+
/**
|
|
18599
|
+
* Graduations couvrant [from, to], alignées sur l'échelle.
|
|
18600
|
+
* La dernière graduation dépasse `to` si nécessaire : un axe ne coupe jamais une unité en deux.
|
|
18601
|
+
*/
|
|
18602
|
+
function cadPlanTicks(from, to, scale, options = {}) {
|
|
18603
|
+
if (!isValidDate(from) || !isValidDate(to) || to.getTime() < from.getTime())
|
|
18604
|
+
return [];
|
|
18605
|
+
const locale = options.locale ?? 'fr-FR';
|
|
18606
|
+
const firstDay = options.firstDay ?? 1;
|
|
18607
|
+
const label = options.label ?? defaultLabel;
|
|
18608
|
+
const cal = options.calendar ?? null;
|
|
18609
|
+
const today = options.today === null ? null : (options.today ?? new Date());
|
|
18610
|
+
const max = Math.max(1, options.max ?? MAX_TICKS);
|
|
18611
|
+
const limit = to.getTime();
|
|
18612
|
+
const now = today ? today.getTime() : NaN;
|
|
18613
|
+
const out = [];
|
|
18614
|
+
let start = cadScaleStart(from, scale, firstDay);
|
|
18615
|
+
for (let i = 0; i < max; i++) {
|
|
18616
|
+
const end = cadScaleNext(start, scale, firstDay);
|
|
18617
|
+
out.push({
|
|
18618
|
+
start,
|
|
18619
|
+
end,
|
|
18620
|
+
label: label(start, scale, locale),
|
|
18621
|
+
major: isMajor(start, scale, firstDay),
|
|
18622
|
+
off: cal
|
|
18623
|
+
? scale === 'hour'
|
|
18624
|
+
? !cal.isWorkingTime(start)
|
|
18625
|
+
: scale === 'day'
|
|
18626
|
+
? !cal.isWorkday(start)
|
|
18627
|
+
: false
|
|
18628
|
+
: false,
|
|
18629
|
+
today: today ? now >= start.getTime() && now < end.getTime() : false,
|
|
18630
|
+
});
|
|
18631
|
+
if (end.getTime() > limit)
|
|
18632
|
+
break;
|
|
18633
|
+
start = end;
|
|
18634
|
+
}
|
|
18635
|
+
return out;
|
|
18636
|
+
}
|
|
18637
|
+
function cadPlanHeader(from, to, scale, options = {}) {
|
|
18638
|
+
const lower = cadPlanTicks(from, to, scale, options);
|
|
18639
|
+
const parent = PARENT[scale];
|
|
18640
|
+
if (!parent || !lower.length)
|
|
18641
|
+
return { upper: [], lower };
|
|
18642
|
+
const upper = cadPlanTicks(lower[0].start, lower[lower.length - 1].end, parent, {
|
|
18643
|
+
...options,
|
|
18644
|
+
calendar: null,
|
|
18645
|
+
label: options.label ?? bandLabel,
|
|
18646
|
+
});
|
|
18647
|
+
return { upper, lower };
|
|
18648
|
+
}
|
|
18649
|
+
/**
|
|
18650
|
+
* Conversion pixel <-> date sur une liste de graduations de largeur égale.
|
|
18651
|
+
*
|
|
18652
|
+
* Hors de l'axe, la position est EXTRAPOLÉE sur la durée de la graduation de bord plutôt que
|
|
18653
|
+
* rabattue sur la borne : une barre qui commence avant la fenêtre garde une position cohérente,
|
|
18654
|
+
* et l'appelant décide seul de la découper ou de la masquer.
|
|
18655
|
+
*/
|
|
18656
|
+
class CadTimeAxis {
|
|
18657
|
+
ticks;
|
|
18658
|
+
unitWidth;
|
|
18659
|
+
constructor(ticks,
|
|
18660
|
+
/** Largeur d'une graduation, en pixels. */
|
|
18661
|
+
unitWidth) {
|
|
18662
|
+
this.ticks = ticks;
|
|
18663
|
+
this.unitWidth = unitWidth;
|
|
18664
|
+
}
|
|
18665
|
+
get width() { return this.ticks.length * this.unitWidth; }
|
|
18666
|
+
get start() { return this.ticks.length ? this.ticks[0].start : null; }
|
|
18667
|
+
get end() { return this.ticks.length ? this.ticks[this.ticks.length - 1].end : null; }
|
|
18668
|
+
/** Indice de la graduation contenant `t` (millisecondes), par recherche binaire. */
|
|
18669
|
+
indexOf(t) {
|
|
18670
|
+
let lo = 0;
|
|
18671
|
+
let hi = this.ticks.length - 1;
|
|
18672
|
+
while (lo < hi) {
|
|
18673
|
+
const mid = (lo + hi + 1) >> 1;
|
|
18674
|
+
if (this.ticks[mid].start.getTime() <= t)
|
|
18675
|
+
lo = mid;
|
|
18676
|
+
else
|
|
18677
|
+
hi = mid - 1;
|
|
18678
|
+
}
|
|
18679
|
+
return lo;
|
|
18680
|
+
}
|
|
18681
|
+
/** Abscisse d'une date, en pixels depuis le début de l'axe. */
|
|
18682
|
+
xOf(date) {
|
|
18683
|
+
const n = this.ticks.length;
|
|
18684
|
+
if (!n || !isValidDate(date))
|
|
18685
|
+
return 0;
|
|
18686
|
+
const t = date.getTime();
|
|
18687
|
+
const first = this.ticks[0];
|
|
18688
|
+
const last = this.ticks[n - 1];
|
|
18689
|
+
if (t < first.start.getTime()) {
|
|
18690
|
+
const len = first.end.getTime() - first.start.getTime();
|
|
18691
|
+
return len ? ((t - first.start.getTime()) / len) * this.unitWidth : 0;
|
|
18692
|
+
}
|
|
18693
|
+
if (t >= last.end.getTime()) {
|
|
18694
|
+
const len = last.end.getTime() - last.start.getTime();
|
|
18695
|
+
return this.width + (len ? ((t - last.end.getTime()) / len) * this.unitWidth : 0);
|
|
18696
|
+
}
|
|
18697
|
+
const i = this.indexOf(t);
|
|
18698
|
+
const tk = this.ticks[i];
|
|
18699
|
+
const len = tk.end.getTime() - tk.start.getTime();
|
|
18700
|
+
return (i + (len ? (t - tk.start.getTime()) / len : 0)) * this.unitWidth;
|
|
18701
|
+
}
|
|
18702
|
+
/** Date à une abscisse donnée. */
|
|
18703
|
+
dateAt(x) {
|
|
18704
|
+
const n = this.ticks.length;
|
|
18705
|
+
if (!n || !Number.isFinite(x) || this.unitWidth <= 0)
|
|
18706
|
+
return null;
|
|
18707
|
+
const u = x / this.unitWidth;
|
|
18708
|
+
const i = Math.floor(u);
|
|
18709
|
+
if (i < 0) {
|
|
18710
|
+
const first = this.ticks[0];
|
|
18711
|
+
const len = first.end.getTime() - first.start.getTime();
|
|
18712
|
+
return new Date(first.start.getTime() + u * len);
|
|
18713
|
+
}
|
|
18714
|
+
if (i >= n) {
|
|
18715
|
+
const last = this.ticks[n - 1];
|
|
18716
|
+
const len = last.end.getTime() - last.start.getTime();
|
|
18717
|
+
return new Date(last.end.getTime() + (u - n) * len);
|
|
18718
|
+
}
|
|
18719
|
+
const tk = this.ticks[i];
|
|
18720
|
+
const len = tk.end.getTime() - tk.start.getTime();
|
|
18721
|
+
return new Date(tk.start.getTime() + (u - i) * len);
|
|
18722
|
+
}
|
|
18723
|
+
/** Position et largeur d'une barre. La largeur ne descend jamais sous zéro. */
|
|
18724
|
+
spanOf(start, end) {
|
|
18725
|
+
const x = this.xOf(start);
|
|
18726
|
+
return { x, width: Math.max(0, this.xOf(end) - x) };
|
|
18727
|
+
}
|
|
18728
|
+
}
|
|
18729
|
+
|
|
18730
|
+
/**
|
|
18731
|
+
* Normalisation du document de planification : ce que les trois vues consomment réellement.
|
|
18732
|
+
*
|
|
18733
|
+
* RÈGLE FONDATRICE — hors `id`, aucun champ n'est obligatoire. Une tâche sans dates reste une
|
|
18734
|
+
* tâche : le taskboard la montre, le gantt et le scheduler la rangent dans leur zone « non
|
|
18735
|
+
* planifié ». Rien n'est jamais écarté en silence ; tout écart devient une entrée de `issues`
|
|
18736
|
+
* portant un code stable, que l'appelant affiche ou ignore, mais qu'il peut toujours lire.
|
|
18737
|
+
*
|
|
18738
|
+
* Le normaliseur ne DÉCIDE de rien qu'il ne puisse justifier : il ne replanifie pas, ne
|
|
18739
|
+
* réordonne pas les dates, ne corrige pas les chevauchements. Il résout, indexe et signale.
|
|
18740
|
+
*/
|
|
18741
|
+
const LINK_TYPES = ['FS', 'SS', 'FF', 'SF'];
|
|
18742
|
+
const clamp01 = (v) => {
|
|
18743
|
+
const n = typeof v === 'number' ? v : Number(v);
|
|
18744
|
+
return Number.isFinite(n) ? Math.max(0, Math.min(1, n)) : 0;
|
|
18745
|
+
};
|
|
18746
|
+
/**
|
|
18747
|
+
* Résout un document brut : dates coercées, durées converties par le calendrier, hiérarchie
|
|
18748
|
+
* établie, rangs complétés, liens validés.
|
|
18749
|
+
*/
|
|
18750
|
+
function cadNormalizePlan(plan, options = {}) {
|
|
18751
|
+
const issues = [];
|
|
18752
|
+
const add = (level, code, message, ref) => {
|
|
18753
|
+
issues.push({ level, code, message, ref });
|
|
18754
|
+
};
|
|
18755
|
+
const calendar = new CadWorkCalendar(plan?.calendar);
|
|
18756
|
+
if (calendar.empty)
|
|
18757
|
+
add('error', 'empty-calendar', 'Aucun temps ouvré déclaré : les durées ne peuvent pas être converties.');
|
|
18758
|
+
const resources = (plan?.resources ?? []).filter(r => r && typeof r.id === 'string');
|
|
18759
|
+
const resourceIds = new Set(resources.map(r => r.id));
|
|
18760
|
+
const buckets = [...(plan?.buckets ?? [])]
|
|
18761
|
+
.filter(b => b && typeof b.id === 'string')
|
|
18762
|
+
.map((b, i) => ({ ...b, order: b.order ?? i }))
|
|
18763
|
+
.sort((a, b) => (a.order ?? 0) - (b.order ?? 0));
|
|
18764
|
+
const bucketIds = new Set(buckets.map(b => b.id));
|
|
18765
|
+
/* ---- 1. index des tâches, doublons écartés ---- */
|
|
18766
|
+
const raw = new Map();
|
|
18767
|
+
for (const t of plan?.tasks ?? []) {
|
|
18768
|
+
if (!t || typeof t.id !== 'string' || !t.id)
|
|
18769
|
+
continue;
|
|
18770
|
+
if (raw.has(t.id)) {
|
|
18771
|
+
add('error', 'duplicate-task', 'Identifiant en double : la première occurrence est retenue.', t.id);
|
|
18772
|
+
continue;
|
|
18773
|
+
}
|
|
18774
|
+
raw.set(t.id, t);
|
|
18775
|
+
}
|
|
18776
|
+
/* ---- 2. tâches résolues, hors hiérarchie et hors rollup ---- */
|
|
18777
|
+
const tasks = new Map();
|
|
18778
|
+
for (const [id, t] of raw) {
|
|
18779
|
+
let start = toDate(t.start ?? null);
|
|
18780
|
+
let end = toDate(t.end ?? null);
|
|
18781
|
+
const milestone = !!t.milestone;
|
|
18782
|
+
if (t.start != null && t.start !== '' && !start)
|
|
18783
|
+
add('warning', 'bad-date', 'Date de début illisible.', id);
|
|
18784
|
+
if (t.end != null && t.end !== '' && !end)
|
|
18785
|
+
add('warning', 'bad-date', 'Date de fin illisible.', id);
|
|
18786
|
+
if (milestone) {
|
|
18787
|
+
end = start;
|
|
18788
|
+
}
|
|
18789
|
+
else if (t.duration) {
|
|
18790
|
+
const d = cadParseDuration(t.duration);
|
|
18791
|
+
if (!d)
|
|
18792
|
+
add('warning', 'bad-duration', 'Durée illisible : ' + t.duration, id);
|
|
18793
|
+
else {
|
|
18794
|
+
const minutes = cadDurationToMinutes(d, calendar.dailyMinutes, calendar.weekDays);
|
|
18795
|
+
if (start && !end)
|
|
18796
|
+
end = calendar.addMinutes(start, minutes);
|
|
18797
|
+
else if (!start && end)
|
|
18798
|
+
start = calendar.addMinutes(end, -minutes);
|
|
18799
|
+
}
|
|
18800
|
+
}
|
|
18801
|
+
if (start && end && end.getTime() < start.getTime()) {
|
|
18802
|
+
add('warning', 'end-before-start', 'La fin précède le début : la fin est ramenée au début.', id);
|
|
18803
|
+
end = start;
|
|
18804
|
+
}
|
|
18805
|
+
const assignments = (t.assignments ?? [])
|
|
18806
|
+
.filter(a => a && typeof a.resource === 'string')
|
|
18807
|
+
.map(a => {
|
|
18808
|
+
if (!resourceIds.has(a.resource))
|
|
18809
|
+
add('warning', 'unknown-resource', 'Ressource inconnue : ' + a.resource, id);
|
|
18810
|
+
return { resource: a.resource, units: Number.isFinite(a.units) ? a.units : 1 };
|
|
18811
|
+
});
|
|
18812
|
+
if (t.bucket && !bucketIds.has(t.bucket))
|
|
18813
|
+
add('warning', 'unknown-bucket', 'Colonne inconnue : ' + t.bucket, id);
|
|
18814
|
+
tasks.set(id, {
|
|
18815
|
+
id,
|
|
18816
|
+
label: t.label ?? id,
|
|
18817
|
+
parent: null,
|
|
18818
|
+
start,
|
|
18819
|
+
end,
|
|
18820
|
+
milestone,
|
|
18821
|
+
bucket: t.bucket ?? null,
|
|
18822
|
+
rank: cadIsRank(t.rank) ? t.rank : '',
|
|
18823
|
+
assignments,
|
|
18824
|
+
progress: clamp01(t.progress),
|
|
18825
|
+
tags: [...(t.tags ?? [])],
|
|
18826
|
+
color: t.color ?? null,
|
|
18827
|
+
locked: !!t.locked,
|
|
18828
|
+
rrule: t.rrule ?? null,
|
|
18829
|
+
exdates: [...(t.exdates ?? [])],
|
|
18830
|
+
masterId: t.masterId ?? null,
|
|
18831
|
+
recurrenceId: toDate(t.recurrenceId ?? null),
|
|
18832
|
+
level: 0,
|
|
18833
|
+
children: [],
|
|
18834
|
+
scheduled: false,
|
|
18835
|
+
rolled: false,
|
|
18836
|
+
recurring: !!t.rrule,
|
|
18837
|
+
meta: t.meta ?? {},
|
|
18838
|
+
source: t,
|
|
18839
|
+
});
|
|
18840
|
+
}
|
|
18841
|
+
/* ---- 3. hiérarchie : parent inconnu, auto-parent et cycles deviennent des racines ---- */
|
|
18842
|
+
for (const [id, t] of raw) {
|
|
18843
|
+
const node = tasks.get(id);
|
|
18844
|
+
const parent = t.parent ?? null;
|
|
18845
|
+
if (!parent)
|
|
18846
|
+
continue;
|
|
18847
|
+
if (parent === id) {
|
|
18848
|
+
add('error', 'self-parent', 'Une tâche ne peut pas être son propre parent.', id);
|
|
18849
|
+
continue;
|
|
18850
|
+
}
|
|
18851
|
+
if (!tasks.has(parent)) {
|
|
18852
|
+
add('warning', 'unknown-parent', 'Parent inconnu : ' + parent + ' — la tâche devient racine.', id);
|
|
18853
|
+
continue;
|
|
18854
|
+
}
|
|
18855
|
+
node.parent = parent;
|
|
18856
|
+
}
|
|
18857
|
+
for (const node of tasks.values()) {
|
|
18858
|
+
const seen = new Set([node.id]);
|
|
18859
|
+
let cur = node.parent;
|
|
18860
|
+
while (cur) {
|
|
18861
|
+
if (seen.has(cur)) {
|
|
18862
|
+
add('error', 'parent-cycle', 'Cycle de parenté rompu à cette tâche.', node.id);
|
|
18863
|
+
node.parent = null;
|
|
18864
|
+
break;
|
|
18865
|
+
}
|
|
18866
|
+
seen.add(cur);
|
|
18867
|
+
cur = tasks.get(cur)?.parent ?? null;
|
|
18868
|
+
}
|
|
18869
|
+
}
|
|
18870
|
+
/* ---- 4. fratries et rangs : les rangs existants font l'ordre, les manquants sont complétés ---- */
|
|
18871
|
+
const groups = new Map();
|
|
18872
|
+
for (const id of tasks.keys()) {
|
|
18873
|
+
const key = tasks.get(id).parent;
|
|
18874
|
+
const list = groups.get(key);
|
|
18875
|
+
if (list)
|
|
18876
|
+
list.push(id);
|
|
18877
|
+
else
|
|
18878
|
+
groups.set(key, [id]);
|
|
18879
|
+
}
|
|
18880
|
+
for (const [key, ids] of groups) {
|
|
18881
|
+
const ranked = ids.filter(i => tasks.get(i).rank).sort((a, b) => (tasks.get(a).rank < tasks.get(b).rank ? -1 : 1));
|
|
18882
|
+
const unranked = ids.filter(i => !tasks.get(i).rank);
|
|
18883
|
+
const ordered = [...ranked, ...unranked];
|
|
18884
|
+
for (let i = 0; i < ordered.length; i++) {
|
|
18885
|
+
const node = tasks.get(ordered[i]);
|
|
18886
|
+
if (node.rank)
|
|
18887
|
+
continue;
|
|
18888
|
+
node.rank = cadRankBetween(i > 0 ? tasks.get(ordered[i - 1]).rank : null, null);
|
|
18889
|
+
}
|
|
18890
|
+
groups.set(key, ordered);
|
|
18891
|
+
if (key !== null)
|
|
18892
|
+
tasks.get(key).children = ordered;
|
|
18893
|
+
}
|
|
18894
|
+
/* ---- 5. ordre final : parcours en profondeur, niveaux ---- */
|
|
18895
|
+
const roots = groups.get(null) ?? [];
|
|
18896
|
+
const order = [];
|
|
18897
|
+
const walk = (ids, level) => {
|
|
18898
|
+
for (const id of ids) {
|
|
18899
|
+
const node = tasks.get(id);
|
|
18900
|
+
node.level = level;
|
|
18901
|
+
order.push(node);
|
|
18902
|
+
if (node.children.length)
|
|
18903
|
+
walk(node.children, level + 1);
|
|
18904
|
+
}
|
|
18905
|
+
};
|
|
18906
|
+
walk(roots, 0);
|
|
18907
|
+
/* ---- 6. barres récapitulatives : un parent sans dates prend l'étendue de ses descendants ---- */
|
|
18908
|
+
if (options.rollup !== false) {
|
|
18909
|
+
for (let i = order.length - 1; i >= 0; i--) {
|
|
18910
|
+
const node = order[i];
|
|
18911
|
+
if (!node.children.length || (node.start && node.end))
|
|
18912
|
+
continue;
|
|
18913
|
+
let lo = null;
|
|
18914
|
+
let hi = null;
|
|
18915
|
+
for (const cid of node.children) {
|
|
18916
|
+
const c = tasks.get(cid);
|
|
18917
|
+
if (c.start)
|
|
18918
|
+
lo = lo === null ? c.start.getTime() : Math.min(lo, c.start.getTime());
|
|
18919
|
+
if (c.end)
|
|
18920
|
+
hi = hi === null ? c.end.getTime() : Math.max(hi, c.end.getTime());
|
|
18921
|
+
}
|
|
18922
|
+
if (lo !== null && hi !== null) {
|
|
18923
|
+
node.start = new Date(lo);
|
|
18924
|
+
node.end = new Date(hi);
|
|
18925
|
+
node.rolled = true;
|
|
18926
|
+
}
|
|
18927
|
+
}
|
|
18928
|
+
}
|
|
18929
|
+
for (const node of order)
|
|
18930
|
+
node.scheduled = !!(node.start && node.end);
|
|
18931
|
+
/* ---- 7. liens ---- */
|
|
18932
|
+
const links = [];
|
|
18933
|
+
const seenLink = new Set();
|
|
18934
|
+
for (const l of plan?.links ?? []) {
|
|
18935
|
+
if (!l || typeof l.from !== 'string' || typeof l.to !== 'string')
|
|
18936
|
+
continue;
|
|
18937
|
+
if (l.from === l.to) {
|
|
18938
|
+
add('error', 'self-link', 'Une tâche ne peut pas dépendre d\'elle-même.', l.from);
|
|
18939
|
+
continue;
|
|
18940
|
+
}
|
|
18941
|
+
if (!tasks.has(l.from) || !tasks.has(l.to)) {
|
|
18942
|
+
add('warning', 'unknown-link-end', 'Lien ignoré : ' + l.from + ' -> ' + l.to + ' vise une tâche absente.', l.id);
|
|
18943
|
+
continue;
|
|
18944
|
+
}
|
|
18945
|
+
const key = l.from + '>' + l.to;
|
|
18946
|
+
if (seenLink.has(key))
|
|
18947
|
+
continue;
|
|
18948
|
+
seenLink.add(key);
|
|
18949
|
+
const d = l.lag ? cadParseDuration(l.lag) : null;
|
|
18950
|
+
if (l.lag && !d)
|
|
18951
|
+
add('warning', 'bad-duration', 'Décalage illisible : ' + l.lag, l.id);
|
|
18952
|
+
links.push({
|
|
18953
|
+
id: l.id ?? key,
|
|
18954
|
+
from: l.from,
|
|
18955
|
+
to: l.to,
|
|
18956
|
+
type: LINK_TYPES.includes(l.type) ? l.type : 'FS',
|
|
18957
|
+
lagMinutes: cadDurationToMinutes(d, calendar.dailyMinutes, calendar.weekDays),
|
|
18958
|
+
});
|
|
18959
|
+
}
|
|
18960
|
+
for (const id of cadFindLinkCycle(links)) {
|
|
18961
|
+
add('error', 'link-cycle', 'Cette tâche participe à un cycle de dépendances.', id);
|
|
18962
|
+
}
|
|
18963
|
+
/* ---- 8. étendue ---- */
|
|
18964
|
+
let lo = null;
|
|
18965
|
+
let hi = null;
|
|
18966
|
+
for (const t of order) {
|
|
18967
|
+
if (!t.scheduled)
|
|
18968
|
+
continue;
|
|
18969
|
+
lo = lo === null ? t.start.getTime() : Math.min(lo, t.start.getTime());
|
|
18970
|
+
hi = hi === null ? t.end.getTime() : Math.max(hi, t.end.getTime());
|
|
18971
|
+
}
|
|
18972
|
+
return {
|
|
18973
|
+
tasks: order,
|
|
18974
|
+
byId: tasks,
|
|
18975
|
+
roots,
|
|
18976
|
+
links,
|
|
18977
|
+
resources,
|
|
18978
|
+
buckets,
|
|
18979
|
+
calendar,
|
|
18980
|
+
range: lo !== null && hi !== null ? { start: new Date(lo), end: new Date(hi) } : null,
|
|
18981
|
+
issues,
|
|
18982
|
+
};
|
|
18983
|
+
}
|
|
18984
|
+
/**
|
|
18985
|
+
* Identifiants participant à un cycle de dépendances, par tri topologique (Kahn) :
|
|
18986
|
+
* ce qui ne sort jamais de la file est exactement ce qui est pris dans un cycle.
|
|
18987
|
+
* Nécessaire bien avant le moteur de replanification — un cycle non détecté s'y traduirait
|
|
18988
|
+
* par une boucle infinie plutôt que par un message.
|
|
18989
|
+
*/
|
|
18990
|
+
function cadFindLinkCycle(links) {
|
|
18991
|
+
const out = new Map();
|
|
18992
|
+
const indeg = new Map();
|
|
18993
|
+
for (const l of links) {
|
|
18994
|
+
const edges = out.get(l.from);
|
|
18995
|
+
if (edges)
|
|
18996
|
+
edges.push(l.to);
|
|
18997
|
+
else
|
|
18998
|
+
out.set(l.from, [l.to]);
|
|
18999
|
+
if (!indeg.has(l.from))
|
|
19000
|
+
indeg.set(l.from, 0);
|
|
19001
|
+
indeg.set(l.to, (indeg.get(l.to) ?? 0) + 1);
|
|
19002
|
+
}
|
|
19003
|
+
const queue = [...indeg.keys()].filter(k => !indeg.get(k));
|
|
19004
|
+
let seen = 0;
|
|
19005
|
+
while (queue.length) {
|
|
19006
|
+
const id = queue.shift();
|
|
19007
|
+
seen++;
|
|
19008
|
+
for (const next of out.get(id) ?? []) {
|
|
19009
|
+
const n = (indeg.get(next) ?? 0) - 1;
|
|
19010
|
+
indeg.set(next, n);
|
|
19011
|
+
if (n === 0)
|
|
19012
|
+
queue.push(next);
|
|
19013
|
+
}
|
|
19014
|
+
}
|
|
19015
|
+
return seen === indeg.size ? [] : [...indeg.keys()].filter(k => (indeg.get(k) ?? 0) > 0);
|
|
19016
|
+
}
|
|
19017
|
+
/** Tâches qu'aucune vue temporelle ne sait placer — la zone « non planifié », jamais le silence. */
|
|
19018
|
+
const cadUnscheduled = (plan) => plan.tasks.filter(t => !t.scheduled);
|
|
19019
|
+
|
|
19020
|
+
/** Styles de cad-taskboard (présentations cartes et liste). Tokens --cad-* uniquement. */
|
|
19021
|
+
const CAD_TASKBOARD_STYLES = `
|
|
19022
|
+
: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); }
|
|
19023
|
+
|
|
19024
|
+
/* ---------------- présentation CARTES ---------------- */
|
|
19025
|
+
.tb__board { flex: 1; min-height: 0; display: flex; gap: 12px; padding: 12px; overflow-x: auto; overflow-y: hidden; scrollbar-gutter: stable; }
|
|
19026
|
+
.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); }
|
|
19027
|
+
.tb__head { display: flex; align-items: center; gap: 8px; padding: 9px 11px; border-bottom: 1px solid var(--cad-border); }
|
|
19028
|
+
.tb__dot { width: 8px; height: 8px; border-radius: 50%; flex: none; background: var(--_c, var(--cad-border-strong)); }
|
|
19029
|
+
.tb__name { font-weight: 500; flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
19030
|
+
.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; }
|
|
19031
|
+
.tb__count.is-full { background: var(--cad-warning-soft); color: var(--cad-warning); }
|
|
19032
|
+
.tb__count.is-over { background: var(--cad-danger-soft); color: var(--cad-danger); font-weight: 500; }
|
|
19033
|
+
|
|
19034
|
+
.tb__list { flex: 1; min-height: 0; overflow-y: auto; padding: 8px; display: flex; flex-direction: column; gap: 8px; scrollbar-gutter: stable; }
|
|
19035
|
+
.tb__list.cdk-drop-list-dragging { background: var(--cad-accent-soft); }
|
|
19036
|
+
|
|
19037
|
+
.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; user-select: none; transition: border-color var(--cad-dur) var(--cad-ease), box-shadow var(--cad-dur) var(--cad-ease); }
|
|
19038
|
+
.tb__card:hover { border-color: var(--cad-border-strong); box-shadow: var(--cad-shadow-md); }
|
|
19039
|
+
.tb__card:focus-visible { outline: 2px solid var(--cad-ring); outline-offset: 1px; }
|
|
19040
|
+
.tb__card.is-orphan { border-left: 2px dashed var(--cad-warning); }
|
|
19041
|
+
:host(.is-static) .tb__card, :host(.is-static) .tb__row { cursor: default; }
|
|
19042
|
+
|
|
19043
|
+
.tb__title { font-weight: 500; line-height: 1.32; }
|
|
19044
|
+
.tb__meta { display: flex; align-items: center; gap: 7px; flex-wrap: wrap; }
|
|
19045
|
+
.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); }
|
|
19046
|
+
.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; }
|
|
19047
|
+
.tb__due.is-late { color: var(--cad-danger); font-weight: 500; }
|
|
19048
|
+
.tb__sp { flex: 1 1 auto; }
|
|
19049
|
+
.tb__prog { height: 3px; border-radius: var(--cad-radius-pill); background: var(--cad-elevated); overflow: hidden; }
|
|
19050
|
+
.tb__prog i { display: block; height: 100%; border-radius: var(--cad-radius-pill); background: var(--cad-accent); }
|
|
19051
|
+
.tb__prog.is-done i { background: var(--cad-success); }
|
|
19052
|
+
|
|
19053
|
+
.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); }
|
|
19054
|
+
|
|
19055
|
+
/* ---------------- présentation LISTE ---------------- */
|
|
19056
|
+
.tb__rows { flex: 1; min-height: 0; overflow-y: auto; padding-bottom: 12px; scrollbar-gutter: stable; }
|
|
19057
|
+
.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; }
|
|
19058
|
+
.tb__grp:hover { background: var(--cad-hover); }
|
|
19059
|
+
.tb__grp:focus-visible { outline: 2px solid var(--cad-ring); outline-offset: -2px; }
|
|
19060
|
+
.tb__grp cad-icon { color: var(--cad-fg-muted); transition: transform var(--cad-dur) var(--cad-ease); }
|
|
19061
|
+
.tb__grp.is-collapsed cad-icon { transform: rotate(-90deg); }
|
|
19062
|
+
.tb__grp b { font-weight: 500; }
|
|
19063
|
+
|
|
19064
|
+
.tb__group-list { display: block; }
|
|
19065
|
+
.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; user-select: none; background: var(--cad-bg); }
|
|
19066
|
+
.tb__row:hover { background: var(--cad-hover); }
|
|
19067
|
+
.tb__row:focus-visible { outline: 2px solid var(--cad-ring); outline-offset: -2px; }
|
|
19068
|
+
.tb__row.is-orphan { box-shadow: inset 2px 0 0 var(--cad-warning); }
|
|
19069
|
+
.tb__main { min-width: 0; display: flex; flex-direction: column; gap: 4px; }
|
|
19070
|
+
.tb__main .tb__title { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
19071
|
+
.tb__pct { display: flex; align-items: center; gap: 7px; }
|
|
19072
|
+
.tb__pct .tb__prog { flex: 1; }
|
|
19073
|
+
.tb__pct span { font-family: var(--cad-font-mono); font-size: 10px; color: var(--cad-fg-muted); font-variant-numeric: tabular-nums; }
|
|
19074
|
+
|
|
19075
|
+
/* sous le seuil, la liste se resserre : l'échéance rejoint le titre, l'avancement s'efface */
|
|
19076
|
+
:host(.is-compact) .tb__row { grid-template-columns: 1fr 26px; }
|
|
19077
|
+
:host(.is-compact) .tb__cell-due, :host(.is-compact) .tb__pct { display: none; }
|
|
19078
|
+
:host(.is-compact) .tb__mob { display: inline-flex; }
|
|
19079
|
+
.tb__mob { display: none; align-items: center; gap: 7px; }
|
|
19080
|
+
|
|
19081
|
+
/* ---------------- glisser (CDK) ---------------- */
|
|
19082
|
+
.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
|
+
.cdk-drag-placeholder { opacity: .34; }
|
|
19084
|
+
.cdk-drag-animating { transition: transform 180ms var(--cad-ease); }
|
|
19085
|
+
.tb__list.cdk-drop-list-dragging .tb__card:not(.cdk-drag-placeholder),
|
|
19086
|
+
.tb__group-list.cdk-drop-list-dragging .tb__row:not(.cdk-drag-placeholder) { transition: transform 180ms var(--cad-ease); }
|
|
19087
|
+
|
|
19088
|
+
/* annonce aux lecteurs d'écran — hors flux, jamais display:none (elle ne serait plus lue) */
|
|
19089
|
+
.tb__live { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; border: 0; }
|
|
19090
|
+
|
|
19091
|
+
@media (prefers-reduced-motion: reduce) { .cdk-drag-animating, .tb__list.cdk-drop-list-dragging .tb__card, .tb__grp cad-icon { transition: none; } }
|
|
19092
|
+
`;
|
|
19093
|
+
|
|
19094
|
+
/** Contenu d'une carte : `<ng-template cadTaskCard let-task let-bucket="bucket">`. */
|
|
19095
|
+
class CadTaskCardDirective {
|
|
19096
|
+
tpl = inject(TemplateRef);
|
|
19097
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: CadTaskCardDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
19098
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.20", type: CadTaskCardDirective, isStandalone: true, selector: "[cadTaskCard]", ngImport: i0 });
|
|
19099
|
+
}
|
|
19100
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: CadTaskCardDirective, decorators: [{
|
|
19101
|
+
type: Directive,
|
|
19102
|
+
args: [{ selector: '[cadTaskCard]', standalone: true }]
|
|
19103
|
+
}] });
|
|
19104
|
+
/** Contenu d'une ligne : `<ng-template cadTaskRow let-task let-group="group">`. */
|
|
19105
|
+
class CadTaskRowDirective {
|
|
19106
|
+
tpl = inject(TemplateRef);
|
|
19107
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: CadTaskRowDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
19108
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.20", type: CadTaskRowDirective, isStandalone: true, selector: "[cadTaskRow]", ngImport: i0 });
|
|
19109
|
+
}
|
|
19110
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: CadTaskRowDirective, decorators: [{
|
|
19111
|
+
type: Directive,
|
|
19112
|
+
args: [{ selector: '[cadTaskRow]', standalone: true }]
|
|
19113
|
+
}] });
|
|
19114
|
+
const EMPTY_PATCH = { src: undefined, map: new Map() };
|
|
19115
|
+
const NO_RESOURCE = ' none';
|
|
19116
|
+
/**
|
|
19117
|
+
* <cad-taskboard [plan]="plan" mode="auto" groupBy="bucket" (taskMove) (taskAssign) (taskOpen) (wipExceeded)>
|
|
19118
|
+
* <ng-template cadTaskCard let-t>…</ng-template>
|
|
19119
|
+
* <ng-template cadTaskRow let-t>…</ng-template>
|
|
19120
|
+
* </cad-taskboard>
|
|
19121
|
+
*
|
|
19122
|
+
* UNE SEULE ENTRÉE sépare les deux présentations : `mode`. On transforme la présentation, jamais
|
|
19123
|
+
* l'architecture de l'information — mêmes tâches, même rang, même geste, même intention. `auto`
|
|
19124
|
+
* bascule en liste sous le seuil mobile, sur le patron de `cad-nav-drawer`.
|
|
19125
|
+
*
|
|
19126
|
+
* LE COMPOSANT N'ÉCRIT JAMAIS. Il émet `taskMove` / `taskAssign` et laisse l'application décider :
|
|
19127
|
+
* c'est ce qui rend la source indifférente (slapi ou document statique). Pour que le geste reste
|
|
19128
|
+
* vivant sans mentir, il conserve un CORRECTIF LOCAL optimiste, abandonné dès qu'un nouveau `plan`
|
|
19129
|
+
* arrive — l'entrée n'est jamais mutée, et l'affichage suit l'application si elle refuse.
|
|
19130
|
+
*
|
|
19131
|
+
* La limite de travail en cours ALERTE mais ne bloque pas : un tableau qui refuse un geste sans
|
|
19132
|
+
* l'expliquer se contourne au lieu d'être lu.
|
|
19133
|
+
*
|
|
19134
|
+
* Clavier : Entrée / Espace ouvrent la tâche ; Ctrl (ou Cmd) + flèches la déplacent — gauche et
|
|
19135
|
+
* droite changent de colonne, haut et bas changent de rang. Chaque déplacement est annoncé.
|
|
19136
|
+
*/
|
|
19137
|
+
class CadTaskboardComponent {
|
|
19138
|
+
/** Document de planification brut ; il est normalisé en interne et jamais muté. */
|
|
19139
|
+
plan = input(null, ...(ngDevMode ? [{ debugName: "plan" }] : /* istanbul ignore next */ []));
|
|
19140
|
+
/** 'board' = cartes, 'list' = lignes groupées, 'auto' = liste sous le seuil mobile. */
|
|
19141
|
+
mode = input('auto', ...(ngDevMode ? [{ debugName: "mode" }] : /* istanbul ignore next */ []));
|
|
19142
|
+
/** Regroupement de la présentation liste. Par personne, le glisser réaffecte au lieu de ranger. */
|
|
19143
|
+
groupBy = input('bucket', ...(ngDevMode ? [{ debugName: "groupBy" }] : /* istanbul ignore next */ []));
|
|
19144
|
+
dragDisabled = input(false, { ...(ngDevMode ? { debugName: "dragDisabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
19145
|
+
/** Groupes repliés (présentation liste). */
|
|
19146
|
+
collapsedKeys = model(new Set(), ...(ngDevMode ? [{ debugName: "collapsedKeys" }] : /* istanbul ignore next */ []));
|
|
19147
|
+
emptyText = input('Rien ici', ...(ngDevMode ? [{ debugName: "emptyText" }] : /* istanbul ignore next */ []));
|
|
19148
|
+
ariaLabel = input('', ...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
19149
|
+
/** Format d'échéance (jetons de `formatDate`). */
|
|
19150
|
+
dateFormat = input('dd/MM', ...(ngDevMode ? [{ debugName: "dateFormat" }] : /* istanbul ignore next */ []));
|
|
19151
|
+
/** Instant de référence pour « en retard ». Explicite en test, sinon maintenant. */
|
|
19152
|
+
today = input(null, ...(ngDevMode ? [{ debugName: "today" }] : /* istanbul ignore next */ []));
|
|
19153
|
+
taskMove = output();
|
|
19154
|
+
taskAssign = output();
|
|
19155
|
+
taskOpen = output();
|
|
19156
|
+
wipExceeded = output();
|
|
19157
|
+
cardTpl = contentChild(CadTaskCardDirective, ...(ngDevMode ? [{ debugName: "cardTpl" }] : /* istanbul ignore next */ []));
|
|
19158
|
+
rowTpl = contentChild(CadTaskRowDirective, ...(ngDevMode ? [{ debugName: "rowTpl" }] : /* istanbul ignore next */ []));
|
|
19159
|
+
orphanHint = 'Sans colonne connue — rangée par défaut, jamais escamotée';
|
|
19160
|
+
announcement = signal('', ...(ngDevMode ? [{ debugName: "announcement" }] : /* istanbul ignore next */ []));
|
|
19161
|
+
bp = inject(CadBreakpointService);
|
|
19162
|
+
patch = signal(EMPTY_PATCH, ...(ngDevMode ? [{ debugName: "patch" }] : /* istanbul ignore next */ []));
|
|
19163
|
+
/** Document résolu par le socle de planification. */
|
|
19164
|
+
normalized = computed(() => cadNormalizePlan(this.plan()), ...(ngDevMode ? [{ debugName: "normalized" }] : /* istanbul ignore next */ []));
|
|
19165
|
+
/** Présentation effective, une fois `auto` tranché par le seuil. */
|
|
19166
|
+
view = computed(() => {
|
|
19167
|
+
const m = this.mode();
|
|
19168
|
+
return m === 'auto' ? (this.bp.isMobile() ? 'list' : 'board') : m;
|
|
19169
|
+
}, ...(ngDevMode ? [{ debugName: "view" }] : /* istanbul ignore next */ []));
|
|
19170
|
+
compact = computed(() => this.view() === 'list' && this.bp.isMobile(), ...(ngDevMode ? [{ debugName: "compact" }] : /* istanbul ignore next */ []));
|
|
19171
|
+
/** Tâches après application du correctif optimiste (abandonné dès que `plan` change). */
|
|
19172
|
+
tasks = computed(() => {
|
|
19173
|
+
const base = this.normalized().tasks;
|
|
19174
|
+
const p = this.patch();
|
|
19175
|
+
if (p.src !== this.plan() || !p.map.size)
|
|
19176
|
+
return base;
|
|
19177
|
+
return base.map(t => {
|
|
19178
|
+
const o = p.map.get(t.id);
|
|
19179
|
+
if (!o)
|
|
19180
|
+
return t;
|
|
19181
|
+
const next = { ...t, rank: o.rank };
|
|
19182
|
+
if (o.bucket !== undefined)
|
|
19183
|
+
next.bucket = o.bucket;
|
|
19184
|
+
if (o.resource !== undefined) {
|
|
19185
|
+
next.assignments = o.resource ? [{ resource: o.resource, units: t.assignments[0]?.units ?? 1 }] : [];
|
|
19186
|
+
}
|
|
19187
|
+
return next;
|
|
19188
|
+
});
|
|
19189
|
+
}, ...(ngDevMode ? [{ debugName: "tasks" }] : /* istanbul ignore next */ []));
|
|
19190
|
+
/** Colonnes déclarées, ou une colonne implicite : un tableau sans colonne reste un tableau. */
|
|
19191
|
+
declared = computed(() => {
|
|
19192
|
+
const b = this.normalized().buckets;
|
|
19193
|
+
return b.length ? b : [{ id: '', label: 'Tâches' }];
|
|
19194
|
+
}, ...(ngDevMode ? [{ debugName: "declared" }] : /* istanbul ignore next */ []));
|
|
19195
|
+
/** Colonnes (cartes, ou liste groupée par colonne) ou personnes (liste groupée par personne). */
|
|
19196
|
+
columns = computed(() => {
|
|
19197
|
+
const tasks = this.tasks();
|
|
19198
|
+
const byRank = (a, b) => (a.rank < b.rank ? -1 : a.rank > b.rank ? 1 : 0);
|
|
19199
|
+
if (this.view() === 'list' && this.groupBy() === 'resource') {
|
|
19200
|
+
const res = this.normalized().resources;
|
|
19201
|
+
const known = new Set(res.map(r => r.id));
|
|
19202
|
+
const groups = res.map(r => ({
|
|
19203
|
+
id: r.id,
|
|
19204
|
+
label: r['label'] ?? r.id,
|
|
19205
|
+
color: r.color ?? null,
|
|
19206
|
+
wipLimit: null,
|
|
19207
|
+
tasks: tasks.filter(t => t.assignments[0]?.resource === r.id).sort(byRank),
|
|
19208
|
+
}));
|
|
19209
|
+
groups.push({
|
|
19210
|
+
id: NO_RESOURCE,
|
|
19211
|
+
label: 'Non affectées',
|
|
19212
|
+
color: null,
|
|
19213
|
+
wipLimit: null,
|
|
19214
|
+
tasks: tasks.filter(t => !t.assignments.length || !known.has(t.assignments[0].resource)).sort(byRank),
|
|
19215
|
+
});
|
|
19216
|
+
return groups;
|
|
19217
|
+
}
|
|
19218
|
+
return this.declared().map((b, i) => ({
|
|
19219
|
+
id: b.id,
|
|
19220
|
+
label: b.label ?? b.id,
|
|
19221
|
+
color: b.color ?? null,
|
|
19222
|
+
wipLimit: b.wipLimit ?? null,
|
|
19223
|
+
tasks: tasks.filter(t => (this.isOrphan(t) ? i === 0 : t.bucket === b.id)).sort(byRank),
|
|
19224
|
+
}));
|
|
19225
|
+
}, ...(ngDevMode ? [{ debugName: "columns" }] : /* istanbul ignore next */ []));
|
|
19226
|
+
/* ---------------- lecture ---------------- */
|
|
19227
|
+
/** Colonne réelle d'une tâche : la sienne si elle existe, sinon la première. Jamais « nulle part ». */
|
|
19228
|
+
bucketOf(t) {
|
|
19229
|
+
const declared = this.declared();
|
|
19230
|
+
return declared.some(b => b.id === t.bucket) ? t.bucket : declared[0].id;
|
|
19231
|
+
}
|
|
19232
|
+
isOrphan(t) {
|
|
19233
|
+
return !this.declared().some(b => b.id === t.bucket);
|
|
19234
|
+
}
|
|
19235
|
+
countOf(c) {
|
|
19236
|
+
return c.wipLimit == null ? String(c.tasks.length) : c.tasks.length + '/' + c.wipLimit;
|
|
19237
|
+
}
|
|
19238
|
+
wipState(c) {
|
|
19239
|
+
if (c.wipLimit == null)
|
|
19240
|
+
return 'none';
|
|
19241
|
+
return c.tasks.length > c.wipLimit ? 'over' : c.tasks.length === c.wipLimit ? 'full' : 'none';
|
|
19242
|
+
}
|
|
19243
|
+
due(t) {
|
|
19244
|
+
return t.end ? formatDate(t.end, this.dateFormat()) : '';
|
|
19245
|
+
}
|
|
19246
|
+
isLate(t) {
|
|
19247
|
+
return !!t.end && t.progress < 1 && t.end.getTime() < (this.today() ?? new Date()).getTime();
|
|
19248
|
+
}
|
|
19249
|
+
pct(t) { return Math.round(t.progress * 100); }
|
|
19250
|
+
labelOfResource(id) {
|
|
19251
|
+
const r = this.normalized().resources.find(x => x.id === id);
|
|
19252
|
+
return (r?.['label'] ?? id).slice(0, 24);
|
|
19253
|
+
}
|
|
19254
|
+
/** Initiales d'une personne : « S. Zuccatti » donne SZ, « Charles » donne CH. */
|
|
19255
|
+
initialsOfResource(id) {
|
|
19256
|
+
const mots = this.labelOfResource(id).split(/[\s.'-]+/).filter(Boolean);
|
|
19257
|
+
return (mots.length > 1 ? mots[0][0] + mots[1][0] : (mots[0] ?? id).slice(0, 2)).toUpperCase();
|
|
19258
|
+
}
|
|
19259
|
+
colorOfResource(id) {
|
|
19260
|
+
return this.normalized().resources.find(x => x.id === id)?.color ?? null;
|
|
19261
|
+
}
|
|
19262
|
+
isCollapsed(key) { return this.collapsedKeys().has(key); }
|
|
19263
|
+
toggle(key) {
|
|
19264
|
+
const next = new Set(this.collapsedKeys());
|
|
19265
|
+
if (next.has(key))
|
|
19266
|
+
next.delete(key);
|
|
19267
|
+
else
|
|
19268
|
+
next.add(key);
|
|
19269
|
+
this.collapsedKeys.set(next);
|
|
19270
|
+
}
|
|
19271
|
+
open(t, event) {
|
|
19272
|
+
this.taskOpen.emit({ id: t.id, task: t, event });
|
|
19273
|
+
}
|
|
19274
|
+
/* ---------------- déplacement ---------------- */
|
|
19275
|
+
onDrop(e, kind) {
|
|
19276
|
+
const same = e.previousContainer === e.container;
|
|
19277
|
+
this.apply(e.item.data, e.container.data, e.currentIndex, kind, same ? e.previousIndex : -1);
|
|
19278
|
+
}
|
|
19279
|
+
onKey(e, t, colId) {
|
|
19280
|
+
if (e.key === 'Enter' || e.key === ' ') {
|
|
19281
|
+
e.preventDefault();
|
|
19282
|
+
this.open(t, e);
|
|
19283
|
+
return;
|
|
19284
|
+
}
|
|
19285
|
+
if ((!e.ctrlKey && !e.metaKey) || this.dragDisabled() || t.locked)
|
|
19286
|
+
return;
|
|
19287
|
+
const cols = this.columns();
|
|
19288
|
+
const ci = cols.findIndex(c => c.id === colId);
|
|
19289
|
+
if (ci < 0)
|
|
19290
|
+
return;
|
|
19291
|
+
const here = cols[ci].tasks.findIndex(x => x.id === t.id);
|
|
19292
|
+
const kind = this.view() === 'list' ? this.groupBy() : 'bucket';
|
|
19293
|
+
if (e.key === 'ArrowUp' || e.key === 'ArrowDown') {
|
|
19294
|
+
const to = here + (e.key === 'ArrowUp' ? -1 : 1);
|
|
19295
|
+
if (to < 0 || to >= cols[ci].tasks.length)
|
|
19296
|
+
return;
|
|
19297
|
+
e.preventDefault();
|
|
19298
|
+
this.apply(t.id, colId, to, kind, here);
|
|
19299
|
+
}
|
|
19300
|
+
else if (e.key === 'ArrowLeft' || e.key === 'ArrowRight') {
|
|
19301
|
+
const target = cols[ci + (e.key === 'ArrowLeft' ? -1 : 1)];
|
|
19302
|
+
if (!target)
|
|
19303
|
+
return;
|
|
19304
|
+
e.preventDefault();
|
|
19305
|
+
this.apply(t.id, target.id, Math.min(here, target.tasks.length), kind, -1);
|
|
19306
|
+
}
|
|
19307
|
+
}
|
|
19308
|
+
/**
|
|
19309
|
+
* Calcule le nouveau rang entre les deux voisins, pose le correctif optimiste et ÉMET.
|
|
19310
|
+
* `fromIndex` >= 0 signale un déplacement dans le même groupe : le voisinage se lit alors sur
|
|
19311
|
+
* la liste privée de la tâche déplacée, exactement comme le fait `moveItemInArray`.
|
|
19312
|
+
*/
|
|
19313
|
+
apply(id, target, index, kind, fromIndex) {
|
|
19314
|
+
const task = this.tasks().find(t => t.id === id);
|
|
19315
|
+
const column = this.columns().find(c => c.id === target);
|
|
19316
|
+
if (!task || !column)
|
|
19317
|
+
return;
|
|
19318
|
+
const items = column.tasks.filter(t => t.id !== id);
|
|
19319
|
+
const at = Math.max(0, Math.min(index, items.length));
|
|
19320
|
+
const rank = cadRankBetween(items[at - 1]?.rank ?? null, items[at]?.rank ?? null);
|
|
19321
|
+
const previousRank = task.rank;
|
|
19322
|
+
if (fromIndex === at)
|
|
19323
|
+
return;
|
|
19324
|
+
const current = this.patch();
|
|
19325
|
+
const map = new Map(current.src === this.plan() ? current.map : []);
|
|
19326
|
+
if (kind === 'resource') {
|
|
19327
|
+
const from = task.assignments[0]?.resource ?? null;
|
|
19328
|
+
const to = target === NO_RESOURCE ? null : target;
|
|
19329
|
+
map.set(id, { ...map.get(id), resource: to, rank });
|
|
19330
|
+
this.patch.set({ src: this.plan(), map });
|
|
19331
|
+
this.taskAssign.emit({ id, task, from, to, rank });
|
|
19332
|
+
this.announce(task, target, column.label, at, 'affectée à ');
|
|
19333
|
+
return;
|
|
19334
|
+
}
|
|
19335
|
+
const from = this.bucketOf(task);
|
|
19336
|
+
map.set(id, { ...map.get(id), bucket: target, rank });
|
|
19337
|
+
this.patch.set({ src: this.plan(), map });
|
|
19338
|
+
this.taskMove.emit({ id, task, from, to: target, rank, previousRank, index: at });
|
|
19339
|
+
this.announce(task, target, column.label, at, 'déplacée dans ');
|
|
19340
|
+
const after = this.columns().find(c => c.id === target);
|
|
19341
|
+
if (after && after.wipLimit != null && after.tasks.length > after.wipLimit) {
|
|
19342
|
+
this.wipExceeded.emit({ bucket: target, limit: after.wipLimit, count: after.tasks.length });
|
|
19343
|
+
}
|
|
19344
|
+
}
|
|
19345
|
+
/** L'annonce ne dit pas « déplacé » : elle dit OÙ et À QUELLE PLACE — la seule information utile sans la vue. */
|
|
19346
|
+
announce(task, key, label, at, verb) {
|
|
19347
|
+
const total = this.columns().find(c => c.id === key)?.tasks.length ?? 0;
|
|
19348
|
+
this.announcement.set(task.label + ' — ' + verb + label + ', position ' + (at + 1) + ' sur ' + total + '.');
|
|
19349
|
+
}
|
|
19350
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: CadTaskboardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
19351
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.20", type: CadTaskboardComponent, isStandalone: true, selector: "cad-taskboard", inputs: { plan: { classPropertyName: "plan", publicName: "plan", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, groupBy: { classPropertyName: "groupBy", publicName: "groupBy", isSignal: true, isRequired: false, transformFunction: null }, dragDisabled: { classPropertyName: "dragDisabled", publicName: "dragDisabled", isSignal: true, isRequired: false, transformFunction: null }, collapsedKeys: { classPropertyName: "collapsedKeys", publicName: "collapsedKeys", isSignal: true, isRequired: false, transformFunction: null }, emptyText: { classPropertyName: "emptyText", publicName: "emptyText", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, dateFormat: { classPropertyName: "dateFormat", publicName: "dateFormat", isSignal: true, isRequired: false, transformFunction: null }, today: { classPropertyName: "today", publicName: "today", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { collapsedKeys: "collapsedKeysChange", taskMove: "taskMove", taskAssign: "taskAssign", taskOpen: "taskOpen", wipExceeded: "wipExceeded" }, host: { properties: { "class.is-compact": "compact()", "class.is-static": "dragDisabled()", "attr.aria-label": "ariaLabel() || null" }, classAttribute: "cad-taskboard" }, queries: [{ propertyName: "cardTpl", first: true, predicate: CadTaskCardDirective, descendants: true, isSignal: true }, { propertyName: "rowTpl", first: true, predicate: CadTaskRowDirective, descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
19352
|
+
<p class="tb__live" role="status" aria-live="polite">{{ announcement() }}</p>
|
|
19353
|
+
|
|
19354
|
+
@if (view() === 'board') {
|
|
19355
|
+
<div class="tb__board" cdkDropListGroup>
|
|
19356
|
+
@for (col of columns(); track col.id) {
|
|
19357
|
+
<section class="tb__col">
|
|
19358
|
+
<header class="tb__head">
|
|
19359
|
+
<span class="tb__dot" [style.--_c]="col.color"></span>
|
|
19360
|
+
<span class="tb__name">{{ col.label }}</span>
|
|
19361
|
+
<span class="tb__count" [class.is-full]="wipState(col) === 'full'" [class.is-over]="wipState(col) === 'over'"
|
|
19362
|
+
[attr.title]="col.wipLimit != null ? 'Limite de travail en cours' : null">{{ countOf(col) }}</span>
|
|
19363
|
+
</header>
|
|
19364
|
+
<div class="tb__list" cdkDropList [cdkDropListData]="col.id" [cdkDropListDisabled]="dragDisabled()"
|
|
19365
|
+
(cdkDropListDropped)="onDrop($event, 'bucket')" [attr.aria-label]="col.label">
|
|
19366
|
+
@for (t of col.tasks; track t.id) {
|
|
19367
|
+
<article class="tb__card" cdkDrag [cdkDragData]="t.id" [cdkDragDisabled]="dragDisabled() || t.locked"
|
|
19368
|
+
tabindex="0" role="button" [attr.data-id]="t.id" [class.is-orphan]="isOrphan(t)"
|
|
19369
|
+
[attr.title]="isOrphan(t) ? orphanHint : null"
|
|
19370
|
+
(click)="open(t, $event)" (keydown)="onKey($event, t, col.id)">
|
|
19371
|
+
@if (cardTpl()) {
|
|
19372
|
+
<ng-container *ngTemplateOutlet="cardTpl()!.tpl; context: { $implicit: t, bucket: col.id }"/>
|
|
19373
|
+
} @else {
|
|
19374
|
+
<p class="tb__title">{{ t.label }}</p>
|
|
19375
|
+
@if (t.progress > 0) {<div class="tb__prog" [class.is-done]="t.progress >= 1"><i [style.width.%]="t.progress * 100"></i></div>}
|
|
19376
|
+
<div class="tb__meta">
|
|
19377
|
+
@for (g of t.tags; track g) {<span class="tb__tag">{{ g }}</span>}
|
|
19378
|
+
<span class="tb__sp"></span>
|
|
19379
|
+
@if (t.end) {<span class="tb__due" [class.is-late]="isLate(t)" title="Échéance">{{ due(t) }}</span>}
|
|
19380
|
+
@for (a of t.assignments; track a.resource) {
|
|
19381
|
+
<cad-avatar size="sm" [text]="initialsOfResource(a.resource)" [color]="colorOfResource(a.resource)" [title]="labelOfResource(a.resource)"/>
|
|
19382
|
+
}
|
|
19383
|
+
</div>
|
|
19384
|
+
}
|
|
19385
|
+
</article>
|
|
19386
|
+
} @empty {
|
|
19387
|
+
<p class="tb__empty">{{ emptyText() }}</p>
|
|
19388
|
+
}
|
|
19389
|
+
</div>
|
|
19390
|
+
</section>
|
|
19391
|
+
}
|
|
19392
|
+
</div>
|
|
19393
|
+
} @else {
|
|
19394
|
+
<div class="tb__rows" cdkDropListGroup>
|
|
19395
|
+
@for (col of columns(); track col.id) {
|
|
19396
|
+
<button type="button" class="tb__grp" [class.is-collapsed]="isCollapsed(col.id)"
|
|
19397
|
+
[attr.aria-expanded]="!isCollapsed(col.id)" (click)="toggle(col.id)">
|
|
19398
|
+
<cad-icon name="chevron-down" [size]="14"/>
|
|
19399
|
+
<span class="tb__dot" [style.--_c]="col.color"></span>
|
|
19400
|
+
<b>{{ col.label }}</b>
|
|
19401
|
+
<span class="tb__sp"></span>
|
|
19402
|
+
<span class="tb__count" [class.is-full]="wipState(col) === 'full'" [class.is-over]="wipState(col) === 'over'">{{ countOf(col) }}</span>
|
|
19403
|
+
</button>
|
|
19404
|
+
@if (!isCollapsed(col.id)) {
|
|
19405
|
+
<div class="tb__group-list" cdkDropList [cdkDropListData]="col.id" [cdkDropListDisabled]="dragDisabled()"
|
|
19406
|
+
(cdkDropListDropped)="onDrop($event, groupBy())" [attr.aria-label]="col.label">
|
|
19407
|
+
@for (t of col.tasks; track t.id) {
|
|
19408
|
+
<div class="tb__row" cdkDrag [cdkDragData]="t.id" [cdkDragDisabled]="dragDisabled() || t.locked"
|
|
19409
|
+
tabindex="0" role="button" [attr.data-id]="t.id" [class.is-orphan]="isOrphan(t)"
|
|
19410
|
+
[attr.title]="isOrphan(t) ? orphanHint : null"
|
|
19411
|
+
(click)="open(t, $event)" (keydown)="onKey($event, t, col.id)">
|
|
19412
|
+
@if (rowTpl()) {
|
|
19413
|
+
<ng-container *ngTemplateOutlet="rowTpl()!.tpl; context: { $implicit: t, group: col.id }"/>
|
|
19414
|
+
} @else {
|
|
19415
|
+
<div class="tb__main">
|
|
19416
|
+
<span class="tb__title">{{ t.label }}</span>
|
|
19417
|
+
<div class="tb__meta">
|
|
19418
|
+
@for (g of t.tags; track g) {<span class="tb__tag">{{ g }}</span>}
|
|
19419
|
+
@if (t.end) {<span class="tb__mob tb__due" [class.is-late]="isLate(t)">{{ due(t) }}</span>}
|
|
19420
|
+
</div>
|
|
19421
|
+
</div>
|
|
19422
|
+
<span class="tb__due tb__cell-due" [class.is-late]="isLate(t)">{{ t.end ? due(t) : '—' }}</span>
|
|
19423
|
+
<div class="tb__pct">
|
|
19424
|
+
<div class="tb__prog" [class.is-done]="t.progress >= 1"><i [style.width.%]="t.progress * 100"></i></div>
|
|
19425
|
+
<span>{{ pct(t) }}%</span>
|
|
19426
|
+
</div>
|
|
19427
|
+
@if (t.assignments.length) {
|
|
19428
|
+
<cad-avatar size="sm" [text]="initialsOfResource(t.assignments[0].resource)"
|
|
19429
|
+
[color]="colorOfResource(t.assignments[0].resource)" [title]="labelOfResource(t.assignments[0].resource)"/>
|
|
19430
|
+
} @else {<span class="tb__due">—</span>}
|
|
19431
|
+
}
|
|
19432
|
+
</div>
|
|
19433
|
+
} @empty {
|
|
19434
|
+
<p class="tb__empty" style="margin: 10px 14px">{{ emptyText() }}</p>
|
|
19435
|
+
}
|
|
19436
|
+
</div>
|
|
19437
|
+
}
|
|
19438
|
+
}
|
|
19439
|
+
</div>
|
|
19440
|
+
}
|
|
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);--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
|
+
}
|
|
19443
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: CadTaskboardComponent, decorators: [{
|
|
19444
|
+
type: Component,
|
|
19445
|
+
args: [{ selector: 'cad-taskboard', standalone: true, imports: [NgTemplateOutlet, CdkDrag, CdkDropList, CdkDropListGroup, CadAvatarComponent, CadIconComponent], changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
19446
|
+
class: 'cad-taskboard',
|
|
19447
|
+
'[class.is-compact]': 'compact()',
|
|
19448
|
+
'[class.is-static]': 'dragDisabled()',
|
|
19449
|
+
'[attr.aria-label]': 'ariaLabel() || null',
|
|
19450
|
+
}, template: `
|
|
19451
|
+
<p class="tb__live" role="status" aria-live="polite">{{ announcement() }}</p>
|
|
19452
|
+
|
|
19453
|
+
@if (view() === 'board') {
|
|
19454
|
+
<div class="tb__board" cdkDropListGroup>
|
|
19455
|
+
@for (col of columns(); track col.id) {
|
|
19456
|
+
<section class="tb__col">
|
|
19457
|
+
<header class="tb__head">
|
|
19458
|
+
<span class="tb__dot" [style.--_c]="col.color"></span>
|
|
19459
|
+
<span class="tb__name">{{ col.label }}</span>
|
|
19460
|
+
<span class="tb__count" [class.is-full]="wipState(col) === 'full'" [class.is-over]="wipState(col) === 'over'"
|
|
19461
|
+
[attr.title]="col.wipLimit != null ? 'Limite de travail en cours' : null">{{ countOf(col) }}</span>
|
|
19462
|
+
</header>
|
|
19463
|
+
<div class="tb__list" cdkDropList [cdkDropListData]="col.id" [cdkDropListDisabled]="dragDisabled()"
|
|
19464
|
+
(cdkDropListDropped)="onDrop($event, 'bucket')" [attr.aria-label]="col.label">
|
|
19465
|
+
@for (t of col.tasks; track t.id) {
|
|
19466
|
+
<article class="tb__card" cdkDrag [cdkDragData]="t.id" [cdkDragDisabled]="dragDisabled() || t.locked"
|
|
19467
|
+
tabindex="0" role="button" [attr.data-id]="t.id" [class.is-orphan]="isOrphan(t)"
|
|
19468
|
+
[attr.title]="isOrphan(t) ? orphanHint : null"
|
|
19469
|
+
(click)="open(t, $event)" (keydown)="onKey($event, t, col.id)">
|
|
19470
|
+
@if (cardTpl()) {
|
|
19471
|
+
<ng-container *ngTemplateOutlet="cardTpl()!.tpl; context: { $implicit: t, bucket: col.id }"/>
|
|
19472
|
+
} @else {
|
|
19473
|
+
<p class="tb__title">{{ t.label }}</p>
|
|
19474
|
+
@if (t.progress > 0) {<div class="tb__prog" [class.is-done]="t.progress >= 1"><i [style.width.%]="t.progress * 100"></i></div>}
|
|
19475
|
+
<div class="tb__meta">
|
|
19476
|
+
@for (g of t.tags; track g) {<span class="tb__tag">{{ g }}</span>}
|
|
19477
|
+
<span class="tb__sp"></span>
|
|
19478
|
+
@if (t.end) {<span class="tb__due" [class.is-late]="isLate(t)" title="Échéance">{{ due(t) }}</span>}
|
|
19479
|
+
@for (a of t.assignments; track a.resource) {
|
|
19480
|
+
<cad-avatar size="sm" [text]="initialsOfResource(a.resource)" [color]="colorOfResource(a.resource)" [title]="labelOfResource(a.resource)"/>
|
|
19481
|
+
}
|
|
19482
|
+
</div>
|
|
19483
|
+
}
|
|
19484
|
+
</article>
|
|
19485
|
+
} @empty {
|
|
19486
|
+
<p class="tb__empty">{{ emptyText() }}</p>
|
|
19487
|
+
}
|
|
19488
|
+
</div>
|
|
19489
|
+
</section>
|
|
19490
|
+
}
|
|
19491
|
+
</div>
|
|
19492
|
+
} @else {
|
|
19493
|
+
<div class="tb__rows" cdkDropListGroup>
|
|
19494
|
+
@for (col of columns(); track col.id) {
|
|
19495
|
+
<button type="button" class="tb__grp" [class.is-collapsed]="isCollapsed(col.id)"
|
|
19496
|
+
[attr.aria-expanded]="!isCollapsed(col.id)" (click)="toggle(col.id)">
|
|
19497
|
+
<cad-icon name="chevron-down" [size]="14"/>
|
|
19498
|
+
<span class="tb__dot" [style.--_c]="col.color"></span>
|
|
19499
|
+
<b>{{ col.label }}</b>
|
|
19500
|
+
<span class="tb__sp"></span>
|
|
19501
|
+
<span class="tb__count" [class.is-full]="wipState(col) === 'full'" [class.is-over]="wipState(col) === 'over'">{{ countOf(col) }}</span>
|
|
19502
|
+
</button>
|
|
19503
|
+
@if (!isCollapsed(col.id)) {
|
|
19504
|
+
<div class="tb__group-list" cdkDropList [cdkDropListData]="col.id" [cdkDropListDisabled]="dragDisabled()"
|
|
19505
|
+
(cdkDropListDropped)="onDrop($event, groupBy())" [attr.aria-label]="col.label">
|
|
19506
|
+
@for (t of col.tasks; track t.id) {
|
|
19507
|
+
<div class="tb__row" cdkDrag [cdkDragData]="t.id" [cdkDragDisabled]="dragDisabled() || t.locked"
|
|
19508
|
+
tabindex="0" role="button" [attr.data-id]="t.id" [class.is-orphan]="isOrphan(t)"
|
|
19509
|
+
[attr.title]="isOrphan(t) ? orphanHint : null"
|
|
19510
|
+
(click)="open(t, $event)" (keydown)="onKey($event, t, col.id)">
|
|
19511
|
+
@if (rowTpl()) {
|
|
19512
|
+
<ng-container *ngTemplateOutlet="rowTpl()!.tpl; context: { $implicit: t, group: col.id }"/>
|
|
19513
|
+
} @else {
|
|
19514
|
+
<div class="tb__main">
|
|
19515
|
+
<span class="tb__title">{{ t.label }}</span>
|
|
19516
|
+
<div class="tb__meta">
|
|
19517
|
+
@for (g of t.tags; track g) {<span class="tb__tag">{{ g }}</span>}
|
|
19518
|
+
@if (t.end) {<span class="tb__mob tb__due" [class.is-late]="isLate(t)">{{ due(t) }}</span>}
|
|
19519
|
+
</div>
|
|
19520
|
+
</div>
|
|
19521
|
+
<span class="tb__due tb__cell-due" [class.is-late]="isLate(t)">{{ t.end ? due(t) : '—' }}</span>
|
|
19522
|
+
<div class="tb__pct">
|
|
19523
|
+
<div class="tb__prog" [class.is-done]="t.progress >= 1"><i [style.width.%]="t.progress * 100"></i></div>
|
|
19524
|
+
<span>{{ pct(t) }}%</span>
|
|
19525
|
+
</div>
|
|
19526
|
+
@if (t.assignments.length) {
|
|
19527
|
+
<cad-avatar size="sm" [text]="initialsOfResource(t.assignments[0].resource)"
|
|
19528
|
+
[color]="colorOfResource(t.assignments[0].resource)" [title]="labelOfResource(t.assignments[0].resource)"/>
|
|
19529
|
+
} @else {<span class="tb__due">—</span>}
|
|
19530
|
+
}
|
|
19531
|
+
</div>
|
|
19532
|
+
} @empty {
|
|
19533
|
+
<p class="tb__empty" style="margin: 10px 14px">{{ emptyText() }}</p>
|
|
19534
|
+
}
|
|
19535
|
+
</div>
|
|
19536
|
+
}
|
|
19537
|
+
}
|
|
19538
|
+
</div>
|
|
19539
|
+
}
|
|
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);--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
|
+
}], 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
|
+
|
|
18099
19543
|
/**
|
|
18100
19544
|
* Generated bundle index. Do not edit.
|
|
18101
19545
|
*/
|
|
18102
19546
|
|
|
18103
|
-
export { BanGeocoder, CAD_BREAKPOINTS, CAD_CHART_PALETTE, CAD_COLOR_PRESETS, CAD_DEFAULT_BASEMAPS, CAD_DEFAULT_PRIORITY_BREAKPOINTS, CAD_DIALOG_DATA, CAD_FILTER_OPERATORS, CAD_GEOCODER, CAD_ICONS, CAD_ICONS_CEREMA, CAD_ICONS_CORE, CAD_ICONS_DATA, CAD_ICONS_FILES, CAD_ICONS_GEO, CAD_ICONS_SUBSET, CAD_ICONS_TOKEN, CAD_ICONS_UI, CAD_ICON_ALIASES, CAD_ICON_CATEGORIES, CAD_MAPLIBRE_CSS_URL, CAD_MAP_CHILD, CAD_MAP_DEFAULTS, CAD_MAP_GLOBAL_STYLES, CAD_MAP_GLYPHS, CAD_MAP_PALETTE, CAD_MASK_PRESETS, CAD_MOBILE_BREAKPOINT, CAD_SELECT_POSITIONS, CAD_SELECT_TRIGGER_STYLES, CAD_SHEET_DATA, CAD_SHELL, CAD_TOUCH_DENSITY, CadAccordionComponent, CadAccordionPanelComponent, CadAppShellComponent, CadAvatarComponent, CadAvatarGroupComponent, CadBadgeComponent, CadBadgeDirective, CadBlockDirective, CadBlockOverlayComponent, CadBlockUiComponent, CadBottomNavComponent, CadBreadcrumbComponent, CadBreadcrumbItemDirective, CadBreakpointService, CadButtonComponent, CadButtonGroupComponent, CadCaptionDirective, CadCardComponent, CadCardDirective, CadCardHeaderDirective, CadCarouselComponent, CadCarouselItemDirective, CadCascadeSelectComponent, CadCellTemplateDirective, CadCenterComponent, CadChartComponent, CadCheckboxComponent, CadChipComponent, CadClusterComponent, CadColDirective, CadColorpickerComponent, CadColumnComponent, CadComboComponent, CadConfirmContentComponent, CadConfirmDialogComponent, CadConfirmService, CadContainerComponent, CadDataviewComponent, CadDataviewGridDirective, CadDataviewListDirective, CadDatepickerComponent, CadDialogComponent, CadDialogContainerComponent, CadDialogFooterDirective, CadDialogHeaderDirective, CadDialogRef, CadDialogService, CadDividerComponent, CadDrawerComponent, CadEditFocusDirective, CadEditorTemplateDirective, CadEmptyDirective, CadFieldComponent, CadFieldsetComponent, CadFieldsetLegendDirective, CadFilterChipComponent, CadFilterTemplateDirective, CadGeocodingService, CadGridComponent, CadGroupFooterDirective, CadGroupHeaderDirective, CadHeaderTemplateDirective, CadIconComponent, CadIconRegistry, CadIfDirective, CadImageComponent, CadInplaceComponent, CadInplaceContentDirective, CadInplaceDisplayDirective, CadInputDirective, CadJsonEditorComponent, CadKeyFilterDirective, CadListEmptyDirective, CadListFooterDirective, CadListHeaderDirective, CadListItemDirective, CadListboxComponent, CadMapBasemapRegistry, CadMapBasemapsComponent, CadMapCardComponent, CadMapChromeComponent, CadMapComponent, CadMapDrawEngine, CadMapLayerComponent, CadMapLayerGroupComponent, CadMapLayerToggleComponent, CadMapLegendComponent, CadMapMenuComponent, CadMapPanelComponent, CadMapPanels, CadMapRailComponent, CadMapRailItemComponent, CadMapSearchComponent, CadMapSectionComponent, CadMaskDirective, CadMenuComponent, CadMenubarComponent, CadMessageComponent, CadMeterComponent, CadMeterLabelDirective, CadMultiselectComponent, CadNavDrawerComponent, CadNavDrawerFooterDirective, CadNavDrawerHeaderDirective, CadNumberComponent, CadOptionListComponent, CadOrderlistComponent, CadOrgNodeDirective, CadOrgchartComponent, CadOverlayBase, CadPaginatorComponent, CadPanelComponent, CadPanelContentDirective, CadPanelHeaderDirective, CadPanelHeadingDirective, CadPasswordComponent, CadPicklistComponent, CadPopoverComponent, CadProgressComponent, CadRadioComponent, CadRadioGroupComponent, CadRatingComponent, CadRowActionsDirective, CadRowCountDirective, CadRowExpansionDirective, CadScrollTopComponent, CadSegmentedComponent, CadSelectBase, CadSelectComponent, CadSelectEmptyDirective, CadSelectFooterDirective, CadSelectHeaderDirective, CadSelectItemDirective, CadSelectSelectedDirective, CadSheetContainerComponent, CadSheetRef, CadSheetService, CadSidebarComponent, CadSidebarPanelDirective, CadSkeletonComponent, CadSliderComponent, CadSpacerComponent, CadSpeedDialComponent, CadSpinnerComponent, CadSplitButtonComponent, CadSplitComponent, CadSplitterComponent, CadSplitterPanelComponent, CadStackComponent, CadStepComponent, CadStepperComponent, CadSwitchComponent, CadTabComponent, CadTabContentDirective, CadTabLabelDirective, CadTableBase, CadTableComponent, CadTableEdit, CadTableEditUi, CadTableFooterDirective, CadTablePanelComponent, CadTableResponsive, CadTableSelection, CadTableSticky, CadTableVirtual, CadTabsComponent, CadTagComponent, CadTimelineComponent, CadTimelineContentDirective, CadTimelineMarkerDirective, CadTimelineOppositeDirective, CadToastComponent, CadToastItemDirective, CadToastService, CadToggleButtonComponent, CadTooltipComponent, CadTooltipDirective, CadTreeAdapter, CadTreeComponent, CadTreeNodeDirective, CadTreeselectComponent, CadUploadComponent, CadUploadContentDirective, CadUploadEmptyDirective, CadUploadItemDirective, CadValueAccessor, MAPLIBRE_MIN_CSS, addDays, addMonths, addYears, cadAggregate, cadApplyColumnOrder, cadApplyMask, cadArea, cadAutosizeWidth, cadBasemapThumbnail, cadBoundsOf, cadCategories, cadCentroid, cadColorExpr, cadCompare, cadCurrentOperator, cadDefaultMatchMode, cadDistance, cadDownloadCsv, cadFilterData, cadFilterKindOf, cadFilterOperators, cadFilterRows, cadFmtArea, cadFmtLength, cadFormatCell, cadFormatColor, cadFormatSize, cadGap, cadGeoJSONStats, cadGeometryKinds, cadHeaderMenuItems, cadHighlightJson, cadHslToRgb, cadHsvToRgb, cadId, cadIsGroupKey, cadJsonErrorPos, cadLegendFromStyle, cadLength, cadMapEstVivante, cadMapLayerOf, cadMapLayersOf, cadMatch, cadMoveColumn, cadMoveItems, cadNormalize, cadNormalizeOptions, cadNumberExpr, cadPadBounds, cadParseColor, cadParseResponsive, cadPropsTable, cadResolve, cadResolveResponsive, cadResponsive, cadRgbToHsl, cadRgbToHsv, cadRingArea, cadRowKey, cadRowPredicate, cadSameValue, cadSortData, cadStartResize, cadStyleToExpressions, cadUnmask, cadValidateGeoJSON, cadValueForOperator, cadWriteField, compareDay, daysInMonth, endOfMonth, ensureMaplibreCss, formatDate, isBetweenDay, isSameDay, isSameMonth, isValidDate, isoOf, isoWeek, loadChartJs, loadMaplibre, monthNames, pad2, parseIso, parseWithFormat, provideCadIcons, startOfDay, startOfMonth, toDate, weekdayNames };
|
|
19547
|
+
export { BanGeocoder, CAD_BREAKPOINTS, CAD_CHART_PALETTE, CAD_COLOR_PRESETS, CAD_DEFAULT_BASEMAPS, CAD_DEFAULT_PRIORITY_BREAKPOINTS, CAD_DIALOG_DATA, CAD_FILTER_OPERATORS, CAD_GEOCODER, CAD_ICONS, CAD_ICONS_CEREMA, CAD_ICONS_CORE, CAD_ICONS_DATA, CAD_ICONS_FILES, CAD_ICONS_GEO, CAD_ICONS_SUBSET, CAD_ICONS_TOKEN, CAD_ICONS_UI, CAD_ICON_ALIASES, CAD_ICON_CATEGORIES, CAD_MAPLIBRE_CSS_URL, CAD_MAP_CHILD, CAD_MAP_DEFAULTS, CAD_MAP_GLOBAL_STYLES, CAD_MAP_GLYPHS, CAD_MAP_PALETTE, CAD_MASK_PRESETS, CAD_MOBILE_BREAKPOINT, CAD_SELECT_POSITIONS, CAD_SELECT_TRIGGER_STYLES, CAD_SHEET_DATA, CAD_SHELL, CAD_TOUCH_DENSITY, CadAccordionComponent, CadAccordionPanelComponent, CadAppShellComponent, CadAvatarComponent, CadAvatarGroupComponent, CadBadgeComponent, CadBadgeDirective, CadBlockDirective, CadBlockOverlayComponent, CadBlockUiComponent, CadBottomNavComponent, CadBreadcrumbComponent, CadBreadcrumbItemDirective, CadBreakpointService, CadButtonComponent, CadButtonGroupComponent, CadCaptionDirective, CadCardComponent, CadCardDirective, CadCardHeaderDirective, CadCarouselComponent, CadCarouselItemDirective, CadCascadeSelectComponent, CadCellTemplateDirective, CadCenterComponent, CadChartComponent, CadCheckboxComponent, CadChipComponent, CadClusterComponent, CadColDirective, CadColorpickerComponent, CadColumnComponent, CadComboComponent, CadConfirmContentComponent, CadConfirmDialogComponent, CadConfirmService, CadContainerComponent, CadDataviewComponent, CadDataviewGridDirective, CadDataviewListDirective, CadDatepickerComponent, CadDialogComponent, CadDialogContainerComponent, CadDialogFooterDirective, CadDialogHeaderDirective, CadDialogRef, CadDialogService, CadDividerComponent, CadDrawerComponent, CadEditFocusDirective, CadEditorTemplateDirective, CadEmptyDirective, CadFieldComponent, CadFieldsetComponent, CadFieldsetLegendDirective, CadFilterChipComponent, CadFilterTemplateDirective, CadGeocodingService, CadGridComponent, CadGroupFooterDirective, CadGroupHeaderDirective, CadHeaderTemplateDirective, CadIconComponent, CadIconRegistry, CadIfDirective, CadImageComponent, CadInplaceComponent, CadInplaceContentDirective, CadInplaceDisplayDirective, CadInputDirective, CadJsonEditorComponent, CadKeyFilterDirective, CadListEmptyDirective, CadListFooterDirective, CadListHeaderDirective, CadListItemDirective, CadListboxComponent, CadMapBasemapRegistry, CadMapBasemapsComponent, CadMapCardComponent, CadMapChromeComponent, CadMapComponent, CadMapDrawEngine, CadMapLayerComponent, CadMapLayerGroupComponent, CadMapLayerToggleComponent, CadMapLegendComponent, CadMapMenuComponent, CadMapPanelComponent, CadMapPanels, CadMapRailComponent, CadMapRailItemComponent, CadMapSearchComponent, CadMapSectionComponent, CadMaskDirective, CadMenuComponent, CadMenubarComponent, CadMessageComponent, CadMeterComponent, CadMeterLabelDirective, CadMultiselectComponent, CadNavDrawerComponent, CadNavDrawerFooterDirective, CadNavDrawerHeaderDirective, CadNumberComponent, CadOptionListComponent, CadOrderlistComponent, CadOrgNodeDirective, CadOrgchartComponent, CadOverlayBase, CadPaginatorComponent, CadPanelComponent, CadPanelContentDirective, CadPanelHeaderDirective, CadPanelHeadingDirective, CadPasswordComponent, CadPicklistComponent, CadPopoverComponent, CadProgressComponent, CadRadioComponent, CadRadioGroupComponent, CadRatingComponent, CadRowActionsDirective, CadRowCountDirective, CadRowExpansionDirective, CadScrollTopComponent, CadSegmentedComponent, CadSelectBase, CadSelectComponent, CadSelectEmptyDirective, CadSelectFooterDirective, CadSelectHeaderDirective, CadSelectItemDirective, CadSelectSelectedDirective, CadSheetContainerComponent, CadSheetRef, CadSheetService, CadSidebarComponent, CadSidebarPanelDirective, CadSkeletonComponent, CadSliderComponent, CadSpacerComponent, CadSpeedDialComponent, CadSpinnerComponent, CadSplitButtonComponent, CadSplitComponent, CadSplitterComponent, CadSplitterPanelComponent, CadStackComponent, CadStepComponent, CadStepperComponent, CadSwitchComponent, CadTabComponent, CadTabContentDirective, CadTabLabelDirective, CadTableBase, CadTableComponent, CadTableEdit, CadTableEditUi, CadTableFooterDirective, CadTablePanelComponent, CadTableResponsive, CadTableSelection, CadTableSticky, CadTableVirtual, CadTabsComponent, CadTagComponent, CadTaskCardDirective, CadTaskRowDirective, CadTaskboardComponent, CadTimeAxis, CadTimelineComponent, CadTimelineContentDirective, CadTimelineMarkerDirective, CadTimelineOppositeDirective, CadToastComponent, CadToastItemDirective, CadToastService, CadToggleButtonComponent, CadTooltipComponent, CadTooltipDirective, CadTreeAdapter, CadTreeComponent, CadTreeNodeDirective, CadTreeselectComponent, CadUploadComponent, CadUploadContentDirective, CadUploadEmptyDirective, CadUploadItemDirective, CadValueAccessor, CadWorkCalendar, MAPLIBRE_MIN_CSS, addDays, addMonths, addYears, cadAggregate, cadApplyColumnOrder, cadApplyMask, cadArea, cadAutosizeWidth, cadBasemapThumbnail, cadBoundsOf, cadCategories, cadCentroid, cadColorExpr, cadCompare, cadCompareRank, cadCurrentOperator, cadDefaultMatchMode, cadDistance, cadDownloadCsv, cadDurationToMinutes, cadFilterData, cadFilterKindOf, cadFilterOperators, cadFilterRows, cadFindLinkCycle, cadFmtArea, cadFmtLength, cadFormatCell, cadFormatColor, cadFormatDuration, cadFormatSize, cadFrenchHolidays, cadGap, cadGeoJSONStats, cadGeometryKinds, cadHeaderMenuItems, cadHighlightJson, cadHslToRgb, cadHsvToRgb, cadId, cadIsGroupKey, cadIsRank, cadJsonErrorPos, cadLegendFromStyle, cadLength, cadMapEstVivante, cadMapLayerOf, cadMapLayersOf, cadMatch, cadMoveColumn, cadMoveItems, cadNormalize, cadNormalizeOptions, cadNormalizePlan, cadNumberExpr, cadPadBounds, cadParseColor, cadParseDuration, cadParseResponsive, cadPlanHeader, cadPlanTicks, cadPropsTable, cadRankBetween, cadRankFirst, cadRankLast, cadRankSequence, cadResolve, cadResolveResponsive, cadResponsive, cadRgbToHsl, cadRgbToHsv, cadRingArea, cadRowKey, cadRowPredicate, cadSameValue, cadScaleNext, cadScaleStart, cadSortData, cadStartResize, cadStyleToExpressions, cadUnmask, cadUnscheduled, cadValidateGeoJSON, cadValueForOperator, cadWriteField, compareDay, daysInMonth, endOfMonth, ensureMaplibreCss, formatDate, isBetweenDay, isSameDay, isSameMonth, isValidDate, isoOf, isoWeek, loadChartJs, loadMaplibre, monthNames, pad2, parseIso, parseWithFormat, provideCadIcons, startOfDay, startOfMonth, toDate, weekdayNames };
|
|
18104
19548
|
//# sourceMappingURL=cadriciel-ui.mjs.map
|