@kksdev/ds-angular 1.2.5 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/kksdev-ds-angular.mjs +1055 -34
- package/fesm2022/kksdev-ds-angular.mjs.map +1 -1
- package/index.d.ts +353 -3
- package/package.json +2 -2
- package/src/styles/themes/_custom.scss +243 -0
- package/src/styles/themes/_dark.scss +185 -0
- package/src/styles/themes/_light.scss +185 -0
- package/src/styles/tokens/_primitives.scss +2 -0
- package/src/styles/tokens/_semantic.scss +77 -0
- package/src/styles/tokens/_tokens.scss +57 -0
|
@@ -2,14 +2,14 @@ import * as i0 from '@angular/core';
|
|
|
2
2
|
import { input, Component, output, HostBinding, model, signal, computed, forwardRef, effect, ElementRef, ViewChildren, ViewChild, EventEmitter, inject, HostListener, ContentChild, Output, Directive, DestroyRef, Injectable, ChangeDetectionStrategy, viewChild } from '@angular/core';
|
|
3
3
|
import * as i1 from '@angular/common';
|
|
4
4
|
import { CommonModule, DOCUMENT, NgClass } from '@angular/common';
|
|
5
|
-
import * as
|
|
5
|
+
import * as i1$1 from '@fortawesome/angular-fontawesome';
|
|
6
6
|
import { FaIconComponent, FontAwesomeModule } from '@fortawesome/angular-fontawesome';
|
|
7
|
-
import * as i1$
|
|
7
|
+
import * as i1$4 from '@angular/forms';
|
|
8
8
|
import { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
9
|
-
import { faInfoCircle, faTimesCircle, faExclamationTriangle, faCheckCircle, faTimes, faEye, faEyeSlash, faClose, faCircleInfo, faCircleXmark, faCircleExclamation, faCircleCheck, faChevronDown, faChevronLeft, faChevronRight, faAnglesLeft, faAnglesRight, faCheck, faSearch, faXmark, faSpinner, faCalendar } from '@fortawesome/free-solid-svg-icons';
|
|
10
|
-
import * as i1$
|
|
9
|
+
import { faInfoCircle, faTimesCircle, faExclamationTriangle, faCheckCircle, faTimes, faEye, faEyeSlash, faClose, faCircleInfo, faCircleXmark, faCircleExclamation, faCircleCheck, faChevronDown, faChevronLeft, faChevronRight, faAnglesLeft, faAnglesRight, faCheck, faSearch, faXmark, faSpinner, faCalendar, faCloudArrowUp, faFile, faFileImage, faFilePdf, faFileWord, faFileExcel } from '@fortawesome/free-solid-svg-icons';
|
|
10
|
+
import * as i1$2 from '@angular/router';
|
|
11
11
|
import { RouterModule } from '@angular/router';
|
|
12
|
-
import * as i1$
|
|
12
|
+
import * as i1$3 from '@angular/cdk/overlay';
|
|
13
13
|
import { CdkConnectedOverlay, CdkOverlayOrigin } from '@angular/cdk/overlay';
|
|
14
14
|
import { FocusTrapFactory } from '@angular/cdk/a11y';
|
|
15
15
|
import { TemplatePortal, ComponentPortal } from '@angular/cdk/portal';
|
|
@@ -250,7 +250,7 @@ class PrimitiveBadge {
|
|
|
250
250
|
return this.customStyles();
|
|
251
251
|
}
|
|
252
252
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: PrimitiveBadge, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
253
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: PrimitiveBadge, isStandalone: true, selector: "primitive-badge", inputs: { type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, shape: { classPropertyName: "shape", publicName: "shape", isSignal: true, isRequired: false, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, iconStart: { classPropertyName: "iconStart", publicName: "iconStart", isSignal: true, isRequired: false, transformFunction: null }, iconEnd: { classPropertyName: "iconEnd", publicName: "iconEnd", isSignal: true, isRequired: false, transformFunction: null }, customStyles: { classPropertyName: "customStyles", publicName: "customStyles", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<span [ngClass]=\"badgeClasses\" [ngStyle]=\"styleOverrides\" [attr.data-type]=\"type()\">\n @if (iconStart()) {\n <fa-icon [icon]=\"iconStart()!\" class=\"icon-start\" />\n }\n <ng-content></ng-content>\n @if (iconEnd()) {\n <fa-icon [icon]=\"iconEnd()!\" class=\"icon-end\" />\n }\n</span>\n", styles: ["@charset \"UTF-8\";:host{display:inline-flex}span{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-1);min-height:var(--badge-height);padding:var(--badge-padding-vertical-md) var(--badge-padding-horizontal-md);font-weight:var(--font-weight-medium);font-size:var(--badge-font-size-md);line-height:var(--line-height-tight);border-radius:var(--badge-radius);white-space:nowrap;border:1px solid transparent;background-color:var(--badge-bg);color:var(--badge-text);border-color:var(--badge-border-color, transparent);transition:background-color var(--duration-fast) var(--easing-out),color var(--duration-fast) var(--easing-out),border-color var(--duration-fast) var(--easing-out)}span.outline{background-color:transparent;color:var(--badge-outline-text-color, var(--badge-border-color, var(--badge-bg)));border-color:var(--badge-border-color, var(--badge-bg))}span.primary{--badge-bg: var(--badge-primary-bg);--badge-text: var(--badge-primary-text);--badge-border-color: var(--badge-primary-bg)}span.secondary{--badge-bg: var(--badge-secondary-bg);--badge-text: var(--badge-secondary-text);--badge-border-color: var(--badge-secondary-bg)}span.success{--badge-bg: var(--badge-success-bg);--badge-text: var(--badge-success-text);--badge-border-color: var(--badge-success-bg)}span.warning{--badge-bg: var(--badge-warning-bg);--badge-text: var(--badge-warning-text);--badge-border-color: var(--badge-warning-bg);--badge-outline-text-color: var(--badge-warning-outline-text, var(--badge-warning-bg))}span.error{--badge-bg: var(--badge-error-bg);--badge-text: var(--badge-error-text);--badge-border-color: var(--badge-error-bg)}span.info{--badge-bg: var(--badge-info-bg);--badge-text: var(--badge-info-text);--badge-border-color: var(--badge-info-bg)}span.neutral{--badge-bg: var(--badge-neutral-bg);--badge-text: var(--badge-neutral-text);--badge-border-color: var(--badge-neutral-bg)}span.accent{--badge-bg: var(--badge-accent-bg);--badge-text: var(--badge-accent-text);--badge-border-color: var(--badge-accent-bg)}span.sm{font-size:var(--badge-font-size-sm);padding:var(--badge-padding-vertical-sm) var(--badge-padding-horizontal-sm)}span.md{font-size:var(--badge-font-size-md);padding:var(--badge-padding-vertical-md) var(--badge-padding-horizontal-md)}span.lg{font-size:var(--badge-font-size-lg);padding:var(--badge-padding-vertical-lg) var(--badge-padding-horizontal-lg)}span.rounded{border-radius:var(--badge-radius)}span.pill{border-radius:var(--badge-pill-radius)}.icon-start,.icon-end{font-size:var(--icon-size-sm)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }] });
|
|
253
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: PrimitiveBadge, isStandalone: true, selector: "primitive-badge", inputs: { type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, shape: { classPropertyName: "shape", publicName: "shape", isSignal: true, isRequired: false, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, iconStart: { classPropertyName: "iconStart", publicName: "iconStart", isSignal: true, isRequired: false, transformFunction: null }, iconEnd: { classPropertyName: "iconEnd", publicName: "iconEnd", isSignal: true, isRequired: false, transformFunction: null }, customStyles: { classPropertyName: "customStyles", publicName: "customStyles", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<span [ngClass]=\"badgeClasses\" [ngStyle]=\"styleOverrides\" [attr.data-type]=\"type()\">\n @if (iconStart()) {\n <fa-icon [icon]=\"iconStart()!\" class=\"icon-start\" />\n }\n <ng-content></ng-content>\n @if (iconEnd()) {\n <fa-icon [icon]=\"iconEnd()!\" class=\"icon-end\" />\n }\n</span>\n", styles: ["@charset \"UTF-8\";:host{display:inline-flex}span{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-1);min-height:var(--badge-height);padding:var(--badge-padding-vertical-md) var(--badge-padding-horizontal-md);font-weight:var(--font-weight-medium);font-size:var(--badge-font-size-md);line-height:var(--line-height-tight);border-radius:var(--badge-radius);white-space:nowrap;border:1px solid transparent;background-color:var(--badge-bg);color:var(--badge-text);border-color:var(--badge-border-color, transparent);transition:background-color var(--duration-fast) var(--easing-out),color var(--duration-fast) var(--easing-out),border-color var(--duration-fast) var(--easing-out)}span.outline{background-color:transparent;color:var(--badge-outline-text-color, var(--badge-border-color, var(--badge-bg)));border-color:var(--badge-border-color, var(--badge-bg))}span.primary{--badge-bg: var(--badge-primary-bg);--badge-text: var(--badge-primary-text);--badge-border-color: var(--badge-primary-bg)}span.secondary{--badge-bg: var(--badge-secondary-bg);--badge-text: var(--badge-secondary-text);--badge-border-color: var(--badge-secondary-bg)}span.success{--badge-bg: var(--badge-success-bg);--badge-text: var(--badge-success-text);--badge-border-color: var(--badge-success-bg)}span.warning{--badge-bg: var(--badge-warning-bg);--badge-text: var(--badge-warning-text);--badge-border-color: var(--badge-warning-bg);--badge-outline-text-color: var(--badge-warning-outline-text, var(--badge-warning-bg))}span.error{--badge-bg: var(--badge-error-bg);--badge-text: var(--badge-error-text);--badge-border-color: var(--badge-error-bg)}span.info{--badge-bg: var(--badge-info-bg);--badge-text: var(--badge-info-text);--badge-border-color: var(--badge-info-bg)}span.neutral{--badge-bg: var(--badge-neutral-bg);--badge-text: var(--badge-neutral-text);--badge-border-color: var(--badge-neutral-bg)}span.accent{--badge-bg: var(--badge-accent-bg);--badge-text: var(--badge-accent-text);--badge-border-color: var(--badge-accent-bg)}span.sm{font-size:var(--badge-font-size-sm);padding:var(--badge-padding-vertical-sm) var(--badge-padding-horizontal-sm)}span.md{font-size:var(--badge-font-size-md);padding:var(--badge-padding-vertical-md) var(--badge-padding-horizontal-md)}span.lg{font-size:var(--badge-font-size-lg);padding:var(--badge-padding-vertical-lg) var(--badge-padding-horizontal-lg)}span.rounded{border-radius:var(--badge-radius)}span.pill{border-radius:var(--badge-pill-radius)}.icon-start,.icon-end{font-size:var(--icon-size-sm)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"], outputs: ["iconChange", "titleChange", "animationChange", "maskChange", "flipChange", "sizeChange", "pullChange", "borderChange", "inverseChange", "symbolChange", "rotateChange", "fixedWidthChange", "transformChange", "a11yRoleChange"] }] });
|
|
254
254
|
}
|
|
255
255
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: PrimitiveBadge, decorators: [{
|
|
256
256
|
type: Component,
|
|
@@ -505,7 +505,7 @@ class PrimitiveButton {
|
|
|
505
505
|
}
|
|
506
506
|
}
|
|
507
507
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: PrimitiveButton, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
508
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: PrimitiveButton, isStandalone: true, selector: "primitive-button", inputs: { type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, iconStart: { classPropertyName: "iconStart", publicName: "iconStart", isSignal: true, isRequired: false, transformFunction: null }, iconEnd: { classPropertyName: "iconEnd", publicName: "iconEnd", isSignal: true, isRequired: false, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, block: { classPropertyName: "block", publicName: "block", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { clicked: "clicked" }, host: { properties: { "class.block": "this.hostBlock" } }, ngImport: i0, template: "<button\n [type]=\"type()\"\n [class]=\"buttonClasses\"\n [disabled]=\"disabled()\"\n (click)=\"handleClick()\">\n @if (iconStart()) {\n <fa-icon [icon]=\"iconStart()!\" class=\"icon-start\" />\n }\n <ng-content></ng-content>\n @if (iconEnd()) {\n <fa-icon [icon]=\"iconEnd()!\" class=\"icon-end\" />\n }\n</button>\n", styles: [":host{display:inline-flex}:host.block{display:flex;width:100%}:host.block button,button.block{width:100%}button{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:var(--space-2);padding:var(--btn-padding-vertical-md) var(--btn-padding-horizontal-md);border:1px solid transparent;border-radius:var(--btn-radius);font-weight:var(--font-weight-medium);font-size:var(--btn-font-size-md);cursor:pointer;transition:all var(--duration-fast) var(--easing-default)}button.primary{background-color:var(--btn-primary-bg);color:var(--btn-primary-text);border-color:var(--btn-primary-border)}button.primary:hover:not(:disabled){background-color:var(--btn-primary-hover-bg);color:var(--btn-primary-hover-text)}button.secondary{background-color:var(--btn-secondary-bg);color:var(--btn-secondary-text);border-color:var(--btn-secondary-border)}button.secondary:hover:not(:disabled){background-color:var(--btn-secondary-hover-bg);color:var(--btn-secondary-hover-text)}button.ghost{background-color:var(--btn-ghost-bg);color:var(--btn-ghost-text);border-color:var(--btn-ghost-border)}button.ghost:hover:not(:disabled){background-color:var(--btn-ghost-hover-bg);color:var(--btn-ghost-hover-text)}button.success{background-color:var(--btn-success-bg);color:var(--btn-success-text);border-color:var(--btn-success-border)}button.success:hover:not(:disabled){background-color:var(--btn-success-hover-bg);color:var(--btn-success-hover-text)}button.warning{background-color:var(--btn-warning-bg);color:var(--btn-warning-text);border-color:var(--btn-warning-border)}button.warning:hover:not(:disabled){background-color:var(--btn-warning-hover-bg);color:var(--btn-warning-hover-text)}button.error{background-color:var(--btn-error-bg);color:var(--btn-error-text);border-color:var(--btn-error-border)}button.error:hover:not(:disabled){background-color:var(--btn-error-hover-bg);color:var(--btn-error-hover-text)}button.info{background-color:var(--btn-info-bg);color:var(--btn-info-text);border-color:var(--btn-info-border)}button.info:hover:not(:disabled){background-color:var(--btn-info-hover-bg);color:var(--btn-info-hover-text)}button.outline{background-color:transparent;border:1px solid currentColor}button.outline.primary{color:var(--btn-primary-bg);border-color:var(--btn-primary-bg)}button.outline.primary:hover:not(:disabled){background-color:color-mix(in srgb,var(--btn-primary-bg) 15%,transparent)}button.outline.secondary{color:var(--btn-secondary-bg);border-color:var(--btn-secondary-bg)}button.outline.secondary:hover:not(:disabled){background-color:color-mix(in srgb,var(--btn-secondary-bg) 15%,transparent)}button.outline.ghost{color:var(--btn-ghost-text);border-color:transparent}button.outline.ghost:hover:not(:disabled){background-color:color-mix(in srgb,var(--btn-ghost-bg) 15%,transparent);border-color:var(--btn-ghost-hover-bg)}button.outline.success{color:var(--btn-success-bg);border-color:var(--btn-success-bg)}button.outline.success:hover:not(:disabled){background-color:color-mix(in srgb,var(--btn-success-bg) 15%,transparent)}button.outline.warning{color:var(--btn-warning-bg);border-color:var(--btn-warning-bg)}button.outline.warning:hover:not(:disabled){background-color:color-mix(in srgb,var(--btn-warning-bg) 15%,transparent)}button.outline.error{color:var(--btn-error-bg);border-color:var(--btn-error-bg)}button.outline.error:hover:not(:disabled){background-color:color-mix(in srgb,var(--btn-error-bg) 15%,transparent)}button.outline.info{color:var(--btn-info-bg);border-color:var(--btn-info-bg)}button.outline.info:hover:not(:disabled){background-color:color-mix(in srgb,var(--btn-info-bg) 15%,transparent)}button.sm{font-size:var(--btn-font-size-sm);padding:var(--btn-padding-vertical-sm) var(--btn-padding-horizontal-sm)}button.md{font-size:var(--btn-font-size-md);padding:var(--btn-padding-vertical-md) var(--btn-padding-horizontal-md)}button.lg{font-size:var(--btn-font-size-lg);padding:var(--btn-padding-vertical-lg) var(--btn-padding-horizontal-lg)}button:disabled{opacity:.6;cursor:not-allowed}.icon-start{margin-right:var(--space-1)}.icon-end{margin-left:var(--space-1)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }] });
|
|
508
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: PrimitiveButton, isStandalone: true, selector: "primitive-button", inputs: { type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, iconStart: { classPropertyName: "iconStart", publicName: "iconStart", isSignal: true, isRequired: false, transformFunction: null }, iconEnd: { classPropertyName: "iconEnd", publicName: "iconEnd", isSignal: true, isRequired: false, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, block: { classPropertyName: "block", publicName: "block", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { clicked: "clicked" }, host: { properties: { "class.block": "this.hostBlock" } }, ngImport: i0, template: "<button\n [type]=\"type()\"\n [class]=\"buttonClasses\"\n [disabled]=\"disabled()\"\n (click)=\"handleClick()\">\n @if (iconStart()) {\n <fa-icon [icon]=\"iconStart()!\" class=\"icon-start\" />\n }\n <ng-content></ng-content>\n @if (iconEnd()) {\n <fa-icon [icon]=\"iconEnd()!\" class=\"icon-end\" />\n }\n</button>\n", styles: [":host{display:inline-flex}:host.block{display:flex;width:100%}:host.block button,button.block{width:100%}button{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:var(--space-2);padding:var(--btn-padding-vertical-md) var(--btn-padding-horizontal-md);border:1px solid transparent;border-radius:var(--btn-radius);font-weight:var(--font-weight-medium);font-size:var(--btn-font-size-md);cursor:pointer;transition:all var(--duration-fast) var(--easing-default)}button.primary{background-color:var(--btn-primary-bg);color:var(--btn-primary-text);border-color:var(--btn-primary-border)}button.primary:hover:not(:disabled){background-color:var(--btn-primary-hover-bg);color:var(--btn-primary-hover-text)}button.secondary{background-color:var(--btn-secondary-bg);color:var(--btn-secondary-text);border-color:var(--btn-secondary-border)}button.secondary:hover:not(:disabled){background-color:var(--btn-secondary-hover-bg);color:var(--btn-secondary-hover-text)}button.ghost{background-color:var(--btn-ghost-bg);color:var(--btn-ghost-text);border-color:var(--btn-ghost-border)}button.ghost:hover:not(:disabled){background-color:var(--btn-ghost-hover-bg);color:var(--btn-ghost-hover-text)}button.success{background-color:var(--btn-success-bg);color:var(--btn-success-text);border-color:var(--btn-success-border)}button.success:hover:not(:disabled){background-color:var(--btn-success-hover-bg);color:var(--btn-success-hover-text)}button.warning{background-color:var(--btn-warning-bg);color:var(--btn-warning-text);border-color:var(--btn-warning-border)}button.warning:hover:not(:disabled){background-color:var(--btn-warning-hover-bg);color:var(--btn-warning-hover-text)}button.error{background-color:var(--btn-error-bg);color:var(--btn-error-text);border-color:var(--btn-error-border)}button.error:hover:not(:disabled){background-color:var(--btn-error-hover-bg);color:var(--btn-error-hover-text)}button.info{background-color:var(--btn-info-bg);color:var(--btn-info-text);border-color:var(--btn-info-border)}button.info:hover:not(:disabled){background-color:var(--btn-info-hover-bg);color:var(--btn-info-hover-text)}button.outline{background-color:transparent;border:1px solid currentColor}button.outline.primary{color:var(--btn-primary-bg);border-color:var(--btn-primary-bg)}button.outline.primary:hover:not(:disabled){background-color:color-mix(in srgb,var(--btn-primary-bg) 15%,transparent)}button.outline.secondary{color:var(--btn-secondary-bg);border-color:var(--btn-secondary-bg)}button.outline.secondary:hover:not(:disabled){background-color:color-mix(in srgb,var(--btn-secondary-bg) 15%,transparent)}button.outline.ghost{color:var(--btn-ghost-text);border-color:transparent}button.outline.ghost:hover:not(:disabled){background-color:color-mix(in srgb,var(--btn-ghost-bg) 15%,transparent);border-color:var(--btn-ghost-hover-bg)}button.outline.success{color:var(--btn-success-bg);border-color:var(--btn-success-bg)}button.outline.success:hover:not(:disabled){background-color:color-mix(in srgb,var(--btn-success-bg) 15%,transparent)}button.outline.warning{color:var(--btn-warning-bg);border-color:var(--btn-warning-bg)}button.outline.warning:hover:not(:disabled){background-color:color-mix(in srgb,var(--btn-warning-bg) 15%,transparent)}button.outline.error{color:var(--btn-error-bg);border-color:var(--btn-error-bg)}button.outline.error:hover:not(:disabled){background-color:color-mix(in srgb,var(--btn-error-bg) 15%,transparent)}button.outline.info{color:var(--btn-info-bg);border-color:var(--btn-info-bg)}button.outline.info:hover:not(:disabled){background-color:color-mix(in srgb,var(--btn-info-bg) 15%,transparent)}button.sm{font-size:var(--btn-font-size-sm);padding:var(--btn-padding-vertical-sm) var(--btn-padding-horizontal-sm)}button.md{font-size:var(--btn-font-size-md);padding:var(--btn-padding-vertical-md) var(--btn-padding-horizontal-md)}button.lg{font-size:var(--btn-font-size-lg);padding:var(--btn-padding-vertical-lg) var(--btn-padding-horizontal-lg)}button:disabled{opacity:.6;cursor:not-allowed}.icon-start{margin-right:var(--space-1)}.icon-end{margin-left:var(--space-1)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"], outputs: ["iconChange", "titleChange", "animationChange", "maskChange", "flipChange", "sizeChange", "pullChange", "borderChange", "inverseChange", "symbolChange", "rotateChange", "fixedWidthChange", "transformChange", "a11yRoleChange"] }] });
|
|
509
509
|
}
|
|
510
510
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: PrimitiveButton, decorators: [{
|
|
511
511
|
type: Component,
|
|
@@ -1239,7 +1239,7 @@ class PrimitiveInput {
|
|
|
1239
1239
|
this.inputFocused.emit();
|
|
1240
1240
|
}
|
|
1241
1241
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: PrimitiveInput, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1242
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: PrimitiveInput, isStandalone: true, selector: "primitive-input", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, autocomplete: { classPropertyName: "autocomplete", publicName: "autocomplete", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, maxlength: { classPropertyName: "maxlength", publicName: "maxlength", isSignal: true, isRequired: false, transformFunction: null }, state: { classPropertyName: "state", publicName: "state", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, iconStart: { classPropertyName: "iconStart", publicName: "iconStart", isSignal: true, isRequired: false, transformFunction: null }, iconEnd: { classPropertyName: "iconEnd", publicName: "iconEnd", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, ariaDescribedBy: { classPropertyName: "ariaDescribedBy", publicName: "ariaDescribedBy", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", inputChanged: "inputChanged", inputBlurred: "inputBlurred", inputFocused: "inputFocused" }, ngImport: i0, template: "<div class=\"input-wrapper\" [class]=\"wrapperClasses\">\n @if (iconStart()) {\n <fa-icon [icon]=\"iconStart()!\" class=\"icon-start\" />\n }\n <input\n [attr.id]=\"id()\"\n [attr.name]=\"name()\"\n [attr.autocomplete]=\"autocomplete()\"\n [attr.maxLength]=\"maxlength()\"\n [type]=\"type()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [value]=\"value()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-describedby]=\"ariaDescribedBy()\"\n [attr.aria-invalid]=\"state() === 'error' ? 'true' : 'false'\"\n [attr.aria-readonly]=\"readonly() ? 'true' : 'false'\"\n [attr.aria-disabled]=\"disabled() ? 'true' : 'false'\"\n [attr.aria-required]=\"required() ? 'true' : 'false'\"\n (input)=\"handleInput($event)\"\n (blur)=\"handleBlur()\"\n (focus)=\"handleFocus()\"\n />\n @if (iconEnd()) {\n <fa-icon [icon]=\"iconEnd()!\" class=\"icon-end\" />\n }\n</div>\n", styles: [":host{display:inline-flex}.input-wrapper{position:relative;display:inline-flex;align-items:center;gap:var(--space-2);width:100%;padding:0 var(--input-padding-horizontal-md);background-color:var(--input-bg);border:1px solid var(--input-border);border-radius:var(--input-radius);transition:all var(--duration-fast) var(--easing-default)}.input-wrapper:hover:not(.disabled){border-color:var(--input-hover-border)}.input-wrapper:focus-within{border-color:var(--input-focus-border);box-shadow:var(--input-focus-shadow)}.input-wrapper.disabled{cursor:not-allowed;opacity:.8}.input-wrapper.readonly{background-color:var(--input-disabled-bg)}input{flex:1;height:var(--input-height-md);padding:0;border:none;background:transparent;font-size:var(--input-font-size-md);font-weight:var(--font-weight-normal);color:var(--input-text);outline:none}input::placeholder{color:var(--input-placeholder)}input:disabled{cursor:not-allowed;opacity:.6}input:read-only{color:var(--input-placeholder);cursor:default}.input-wrapper.outline{background:transparent;border-width:2px}.input-wrapper.ghost{background:transparent;border:none;border-bottom:1px solid var(--input-border);border-radius:0}.input-wrapper.ghost:focus-within{border-bottom-color:var(--input-focus-border);box-shadow:none}.input-wrapper.sm{padding:0 var(--input-padding-horizontal-sm)}.input-wrapper.sm input{height:var(--input-height-sm);font-size:var(--input-font-size-sm)}.input-wrapper.md{padding:0 var(--input-padding-horizontal-md)}.input-wrapper.md input{height:var(--input-height-md);font-size:var(--input-font-size-md)}.input-wrapper.lg{padding:0 var(--input-padding-horizontal-lg)}.input-wrapper.lg input{height:var(--input-height-lg);font-size:var(--input-font-size-lg)}.input-wrapper.success{border-color:var(--input-success-border)}.input-wrapper.warning{border-color:var(--input-warning-border)}.input-wrapper.error{border-color:var(--input-error-border)}.input-wrapper.ghost.success{border-bottom-color:var(--input-success-border)}.input-wrapper.ghost.warning{border-bottom-color:var(--input-warning-border)}.input-wrapper.ghost.error{border-bottom-color:var(--input-error-border)}.icon-start,.icon-end{color:var(--input-icon);font-size:var(--input-icon-size-md)}.input-wrapper.sm .icon-start,.input-wrapper.sm .icon-end{font-size:var(--input-icon-size-sm)}.input-wrapper.lg .icon-start,.input-wrapper.lg .icon-end{font-size:var(--input-icon-size-lg)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }] });
|
|
1242
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: PrimitiveInput, isStandalone: true, selector: "primitive-input", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, autocomplete: { classPropertyName: "autocomplete", publicName: "autocomplete", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, maxlength: { classPropertyName: "maxlength", publicName: "maxlength", isSignal: true, isRequired: false, transformFunction: null }, state: { classPropertyName: "state", publicName: "state", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, iconStart: { classPropertyName: "iconStart", publicName: "iconStart", isSignal: true, isRequired: false, transformFunction: null }, iconEnd: { classPropertyName: "iconEnd", publicName: "iconEnd", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, ariaDescribedBy: { classPropertyName: "ariaDescribedBy", publicName: "ariaDescribedBy", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", inputChanged: "inputChanged", inputBlurred: "inputBlurred", inputFocused: "inputFocused" }, ngImport: i0, template: "<div class=\"input-wrapper\" [class]=\"wrapperClasses\">\n @if (iconStart()) {\n <fa-icon [icon]=\"iconStart()!\" class=\"icon-start\" />\n }\n <input\n [attr.id]=\"id()\"\n [attr.name]=\"name()\"\n [attr.autocomplete]=\"autocomplete()\"\n [attr.maxLength]=\"maxlength()\"\n [type]=\"type()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [value]=\"value()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-describedby]=\"ariaDescribedBy()\"\n [attr.aria-invalid]=\"state() === 'error' ? 'true' : 'false'\"\n [attr.aria-readonly]=\"readonly() ? 'true' : 'false'\"\n [attr.aria-disabled]=\"disabled() ? 'true' : 'false'\"\n [attr.aria-required]=\"required() ? 'true' : 'false'\"\n (input)=\"handleInput($event)\"\n (blur)=\"handleBlur()\"\n (focus)=\"handleFocus()\"\n />\n @if (iconEnd()) {\n <fa-icon [icon]=\"iconEnd()!\" class=\"icon-end\" />\n }\n</div>\n", styles: [":host{display:inline-flex}.input-wrapper{position:relative;display:inline-flex;align-items:center;gap:var(--space-2);width:100%;padding:0 var(--input-padding-horizontal-md);background-color:var(--input-bg);border:1px solid var(--input-border);border-radius:var(--input-radius);transition:all var(--duration-fast) var(--easing-default)}.input-wrapper:hover:not(.disabled){border-color:var(--input-hover-border)}.input-wrapper:focus-within{border-color:var(--input-focus-border);box-shadow:var(--input-focus-shadow)}.input-wrapper.disabled{cursor:not-allowed;opacity:.8}.input-wrapper.readonly{background-color:var(--input-disabled-bg)}input{flex:1;height:var(--input-height-md);padding:0;border:none;background:transparent;font-size:var(--input-font-size-md);font-weight:var(--font-weight-normal);color:var(--input-text);outline:none}input::placeholder{color:var(--input-placeholder)}input:disabled{cursor:not-allowed;opacity:.6}input:read-only{color:var(--input-placeholder);cursor:default}.input-wrapper.outline{background:transparent;border-width:2px}.input-wrapper.ghost{background:transparent;border:none;border-bottom:1px solid var(--input-border);border-radius:0}.input-wrapper.ghost:focus-within{border-bottom-color:var(--input-focus-border);box-shadow:none}.input-wrapper.sm{padding:0 var(--input-padding-horizontal-sm)}.input-wrapper.sm input{height:var(--input-height-sm);font-size:var(--input-font-size-sm)}.input-wrapper.md{padding:0 var(--input-padding-horizontal-md)}.input-wrapper.md input{height:var(--input-height-md);font-size:var(--input-font-size-md)}.input-wrapper.lg{padding:0 var(--input-padding-horizontal-lg)}.input-wrapper.lg input{height:var(--input-height-lg);font-size:var(--input-font-size-lg)}.input-wrapper.success{border-color:var(--input-success-border)}.input-wrapper.warning{border-color:var(--input-warning-border)}.input-wrapper.error{border-color:var(--input-error-border)}.input-wrapper.ghost.success{border-bottom-color:var(--input-success-border)}.input-wrapper.ghost.warning{border-bottom-color:var(--input-warning-border)}.input-wrapper.ghost.error{border-bottom-color:var(--input-error-border)}.icon-start,.icon-end{color:var(--input-icon);font-size:var(--input-icon-size-md)}.input-wrapper.sm .icon-start,.input-wrapper.sm .icon-end{font-size:var(--input-icon-size-sm)}.input-wrapper.lg .icon-start,.input-wrapper.lg .icon-end{font-size:var(--input-icon-size-lg)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"], outputs: ["iconChange", "titleChange", "animationChange", "maskChange", "flipChange", "sizeChange", "pullChange", "borderChange", "inverseChange", "symbolChange", "rotateChange", "fixedWidthChange", "transformChange", "a11yRoleChange"] }] });
|
|
1243
1243
|
}
|
|
1244
1244
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: PrimitiveInput, decorators: [{
|
|
1245
1245
|
type: Component,
|
|
@@ -1986,7 +1986,7 @@ class PrimitiveTextarea {
|
|
|
1986
1986
|
this.inputFocused.emit();
|
|
1987
1987
|
}
|
|
1988
1988
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: PrimitiveTextarea, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1989
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: PrimitiveTextarea, isStandalone: true, selector: "primitive-textarea", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, state: { classPropertyName: "state", publicName: "state", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, resize: { classPropertyName: "resize", publicName: "resize", isSignal: true, isRequired: false, transformFunction: null }, rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null }, cols: { classPropertyName: "cols", publicName: "cols", isSignal: true, isRequired: false, transformFunction: null }, maxlength: { classPropertyName: "maxlength", publicName: "maxlength", isSignal: true, isRequired: false, transformFunction: null }, iconStart: { classPropertyName: "iconStart", publicName: "iconStart", isSignal: true, isRequired: false, transformFunction: null }, iconEnd: { classPropertyName: "iconEnd", publicName: "iconEnd", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, ariaDescribedBy: { classPropertyName: "ariaDescribedBy", publicName: "ariaDescribedBy", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", inputChanged: "inputChanged", inputBlurred: "inputBlurred", inputFocused: "inputFocused" }, ngImport: i0, template: "<div class=\"textarea-wrapper\" [class]=\"wrapperClasses\">\n @if (iconStart()) {\n <fa-icon [icon]=\"iconStart()!\" class=\"icon-start\" />\n }\n <textarea\n [id]=\"id()\"\n [name]=\"name()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [attr.rows]=\"rows()\"\n [attr.cols]=\"cols()\"\n [attr.maxLength]=\"maxlength()\"\n [value]=\"value()\"\n (input)=\"handleInput($event)\"\n (blur)=\"handleBlur()\"\n (focus)=\"handleFocus()\"\n [style.resize]=\"resize()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-invalid]=\"state() === 'error' ? 'true' : 'false'\"\n [attr.aria-readonly]=\"readonly() ? 'true' : 'false'\"\n [attr.aria-disabled]=\"disabled() ? 'true' : 'false'\"\n [attr.aria-required]=\"required() ? 'true' : 'false'\"\n [attr.aria-describedby]=\"ariaDescribedBy()\"\n ></textarea>\n @if (iconEnd()) {\n <fa-icon [icon]=\"iconEnd()!\" class=\"icon-end\" />\n }\n</div>\n", styles: ["@charset \"UTF-8\";:host{display:inline-flex;width:100%}.textarea-wrapper{position:relative;display:inline-flex;align-items:flex-start;gap:var(--space-2);width:100%;padding:var(--space-2) var(--input-padding-horizontal-md);background-color:var(--input-bg);border:1px solid var(--input-border);border-radius:var(--input-radius);transition:all var(--duration-fast) var(--easing-default)}.textarea-wrapper:hover:not(.disabled):not(.readonly){border-color:var(--input-hover-border)}.textarea-wrapper:focus-within{border-color:var(--input-focus-border);box-shadow:var(--input-focus-shadow)}.textarea-wrapper.disabled{cursor:not-allowed;opacity:.85}.textarea-wrapper.readonly{background-color:var(--input-disabled-bg)}.textarea-wrapper.readonly textarea{color:var(--input-placeholder)}.textarea-wrapper.disabled textarea{color:var(--input-disabled-text)}textarea{flex:1;width:100%;min-height:var(--input-height-lg);border:none;background:transparent;font-size:var(--input-font-size-md);font-weight:var(--font-weight-normal);color:var(--input-text);line-height:var(--line-height-normal);resize:none;outline:none;padding:0}textarea::placeholder{color:var(--input-placeholder)}textarea:disabled{cursor:not-allowed;opacity:.6}.textarea-wrapper.outline{background:transparent;border-width:2px}.textarea-wrapper.ghost{background:transparent;border:none;border-bottom:1px solid var(--input-border);border-radius:0;padding-right:0;padding-left:0}.textarea-wrapper.ghost:focus-within{border-bottom-color:var(--input-focus-border);box-shadow:none}.textarea-wrapper.sm{padding:var(--space-1) var(--input-padding-horizontal-sm)}.textarea-wrapper.sm textarea{min-height:var(--input-height-sm);font-size:var(--input-font-size-sm)}.textarea-wrapper.md{padding:var(--space-2) var(--input-padding-horizontal-md)}.textarea-wrapper.md textarea{min-height:var(--input-height-md);font-size:var(--input-font-size-md)}.textarea-wrapper.lg{padding:var(--space-3) var(--input-padding-horizontal-lg)}.textarea-wrapper.lg textarea{min-height:var(--input-height-lg);font-size:var(--input-font-size-lg)}.textarea-wrapper.success{border-color:var(--input-success-border)}.textarea-wrapper.warning{border-color:var(--input-warning-border)}.textarea-wrapper.error{border-color:var(--input-error-border)}.textarea-wrapper.ghost.success{border-bottom-color:var(--input-success-border)}.textarea-wrapper.ghost.warning{border-bottom-color:var(--input-warning-border)}.textarea-wrapper.ghost.error{border-bottom-color:var(--input-error-border)}.icon-start,.icon-end{color:var(--input-icon);font-size:var(--input-icon-size-md);margin-top:var(--space-1)}.textarea-wrapper.sm .icon-start,.textarea-wrapper.sm .icon-end{font-size:var(--input-icon-size-sm)}.textarea-wrapper.lg .icon-start,.textarea-wrapper.lg .icon-end{font-size:var(--input-icon-size-lg)}.textarea-wrapper.has-icon-start textarea{margin-left:var(--space-1)}.textarea-wrapper.has-icon-end textarea{margin-right:var(--space-1)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }] });
|
|
1989
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: PrimitiveTextarea, isStandalone: true, selector: "primitive-textarea", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, state: { classPropertyName: "state", publicName: "state", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, resize: { classPropertyName: "resize", publicName: "resize", isSignal: true, isRequired: false, transformFunction: null }, rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null }, cols: { classPropertyName: "cols", publicName: "cols", isSignal: true, isRequired: false, transformFunction: null }, maxlength: { classPropertyName: "maxlength", publicName: "maxlength", isSignal: true, isRequired: false, transformFunction: null }, iconStart: { classPropertyName: "iconStart", publicName: "iconStart", isSignal: true, isRequired: false, transformFunction: null }, iconEnd: { classPropertyName: "iconEnd", publicName: "iconEnd", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, ariaDescribedBy: { classPropertyName: "ariaDescribedBy", publicName: "ariaDescribedBy", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", inputChanged: "inputChanged", inputBlurred: "inputBlurred", inputFocused: "inputFocused" }, ngImport: i0, template: "<div class=\"textarea-wrapper\" [class]=\"wrapperClasses\">\n @if (iconStart()) {\n <fa-icon [icon]=\"iconStart()!\" class=\"icon-start\" />\n }\n <textarea\n [id]=\"id()\"\n [name]=\"name()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [attr.rows]=\"rows()\"\n [attr.cols]=\"cols()\"\n [attr.maxLength]=\"maxlength()\"\n [value]=\"value()\"\n (input)=\"handleInput($event)\"\n (blur)=\"handleBlur()\"\n (focus)=\"handleFocus()\"\n [style.resize]=\"resize()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-invalid]=\"state() === 'error' ? 'true' : 'false'\"\n [attr.aria-readonly]=\"readonly() ? 'true' : 'false'\"\n [attr.aria-disabled]=\"disabled() ? 'true' : 'false'\"\n [attr.aria-required]=\"required() ? 'true' : 'false'\"\n [attr.aria-describedby]=\"ariaDescribedBy()\"\n ></textarea>\n @if (iconEnd()) {\n <fa-icon [icon]=\"iconEnd()!\" class=\"icon-end\" />\n }\n</div>\n", styles: ["@charset \"UTF-8\";:host{display:inline-flex;width:100%}.textarea-wrapper{position:relative;display:inline-flex;align-items:flex-start;gap:var(--space-2);width:100%;padding:var(--space-2) var(--input-padding-horizontal-md);background-color:var(--input-bg);border:1px solid var(--input-border);border-radius:var(--input-radius);transition:all var(--duration-fast) var(--easing-default)}.textarea-wrapper:hover:not(.disabled):not(.readonly){border-color:var(--input-hover-border)}.textarea-wrapper:focus-within{border-color:var(--input-focus-border);box-shadow:var(--input-focus-shadow)}.textarea-wrapper.disabled{cursor:not-allowed;opacity:.85}.textarea-wrapper.readonly{background-color:var(--input-disabled-bg)}.textarea-wrapper.readonly textarea{color:var(--input-placeholder)}.textarea-wrapper.disabled textarea{color:var(--input-disabled-text)}textarea{flex:1;width:100%;min-height:var(--input-height-lg);border:none;background:transparent;font-size:var(--input-font-size-md);font-weight:var(--font-weight-normal);color:var(--input-text);line-height:var(--line-height-normal);resize:none;outline:none;padding:0}textarea::placeholder{color:var(--input-placeholder)}textarea:disabled{cursor:not-allowed;opacity:.6}.textarea-wrapper.outline{background:transparent;border-width:2px}.textarea-wrapper.ghost{background:transparent;border:none;border-bottom:1px solid var(--input-border);border-radius:0;padding-right:0;padding-left:0}.textarea-wrapper.ghost:focus-within{border-bottom-color:var(--input-focus-border);box-shadow:none}.textarea-wrapper.sm{padding:var(--space-1) var(--input-padding-horizontal-sm)}.textarea-wrapper.sm textarea{min-height:var(--input-height-sm);font-size:var(--input-font-size-sm)}.textarea-wrapper.md{padding:var(--space-2) var(--input-padding-horizontal-md)}.textarea-wrapper.md textarea{min-height:var(--input-height-md);font-size:var(--input-font-size-md)}.textarea-wrapper.lg{padding:var(--space-3) var(--input-padding-horizontal-lg)}.textarea-wrapper.lg textarea{min-height:var(--input-height-lg);font-size:var(--input-font-size-lg)}.textarea-wrapper.success{border-color:var(--input-success-border)}.textarea-wrapper.warning{border-color:var(--input-warning-border)}.textarea-wrapper.error{border-color:var(--input-error-border)}.textarea-wrapper.ghost.success{border-bottom-color:var(--input-success-border)}.textarea-wrapper.ghost.warning{border-bottom-color:var(--input-warning-border)}.textarea-wrapper.ghost.error{border-bottom-color:var(--input-error-border)}.icon-start,.icon-end{color:var(--input-icon);font-size:var(--input-icon-size-md);margin-top:var(--space-1)}.textarea-wrapper.sm .icon-start,.textarea-wrapper.sm .icon-end{font-size:var(--input-icon-size-sm)}.textarea-wrapper.lg .icon-start,.textarea-wrapper.lg .icon-end{font-size:var(--input-icon-size-lg)}.textarea-wrapper.has-icon-start textarea{margin-left:var(--space-1)}.textarea-wrapper.has-icon-end textarea{margin-right:var(--space-1)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"], outputs: ["iconChange", "titleChange", "animationChange", "maskChange", "flipChange", "sizeChange", "pullChange", "borderChange", "inverseChange", "symbolChange", "rotateChange", "fixedWidthChange", "transformChange", "a11yRoleChange"] }] });
|
|
1990
1990
|
}
|
|
1991
1991
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: PrimitiveTextarea, decorators: [{
|
|
1992
1992
|
type: Component,
|
|
@@ -2349,7 +2349,7 @@ class DsAlert {
|
|
|
2349
2349
|
this.closed.emit();
|
|
2350
2350
|
}
|
|
2351
2351
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DsAlert, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2352
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: DsAlert, isStandalone: true, selector: "ds-alert", inputs: { type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, showIcon: { classPropertyName: "showIcon", publicName: "showIcon", isSignal: true, isRequired: false, transformFunction: null }, closable: { classPropertyName: "closable", publicName: "closable", isSignal: true, isRequired: false, transformFunction: null }, hidden: { classPropertyName: "hidden", publicName: "hidden", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed" }, ngImport: i0, template: "<div\n [class]=\"alertClasses.join(' ')\"\n role=\"alert\"\n [attr.aria-hidden]=\"hidden() ? 'true' : null\"\n>\n @if (showIcon()) {\n <div class=\"ds-alert__icon\" aria-hidden=\"true\">\n <fa-icon [icon]=\"currentIcon\"></fa-icon>\n </div>\n }\n\n <div class=\"ds-alert__content\">\n <ng-content></ng-content>\n </div>\n\n @if (closable()) {\n <button\n class=\"ds-alert__close\"\n type=\"button\"\n aria-label=\"Fermer l'alerte\"\n (click)=\"handleClose()\"\n >\n <fa-icon [icon]=\"closeIcon\"></fa-icon>\n </button>\n }\n</div>\n", styles: ["@charset \"UTF-8\";.ds-alert{display:flex;align-items:flex-start;gap:var(--alert-gap, var(--space-3));border-radius:var(--alert-radius, var(--radius-2));border-width:1px;border-style:solid;transition:all var(--duration-fast, .15s) ease}.ds-alert--success{background-color:var(--alert-success-bg, var(--bg-success));border-color:var(--alert-success-border, var(--success));color:var(--alert-success-text, var(--text-success))}.ds-alert--success .ds-alert__icon{color:var(--alert-success-icon, var(--success))}.ds-alert--warning{background-color:var(--alert-warning-bg, var(--bg-warning));border-color:var(--alert-warning-border, var(--warning));color:var(--alert-warning-text, var(--text-warning))}.ds-alert--warning .ds-alert__icon{color:var(--alert-warning-icon, var(--warning))}.ds-alert--error{background-color:var(--alert-error-bg, var(--bg-error));border-color:var(--alert-error-border, var(--error));color:var(--alert-error-text, var(--text-error))}.ds-alert--error .ds-alert__icon{color:var(--alert-error-icon, var(--error))}.ds-alert--info{background-color:var(--alert-info-bg, var(--bg-info));border-color:var(--alert-info-border, var(--info));color:var(--alert-info-text, var(--text-info))}.ds-alert--info .ds-alert__icon{color:var(--alert-info-icon, var(--info))}.ds-alert--sm{padding:var(--alert-padding-sm, var(--space-2));font-size:var(--alert-font-size-sm, var(--font-size-2))}.ds-alert--sm .ds-alert__icon{font-size:var(--alert-icon-size-sm, 16px)}.ds-alert--sm .ds-alert__close{width:20px;height:20px;font-size:12px}.ds-alert--md{padding:var(--alert-padding-md, var(--space-3));font-size:var(--alert-font-size-md, var(--font-size-3))}.ds-alert--md .ds-alert__icon{font-size:var(--alert-icon-size-md, 20px)}.ds-alert--md .ds-alert__close{width:24px;height:24px;font-size:14px}.ds-alert--lg{padding:var(--alert-padding-lg, var(--space-4));font-size:var(--alert-font-size-lg, var(--font-size-4))}.ds-alert--lg .ds-alert__icon{font-size:var(--alert-icon-size-lg, 24px)}.ds-alert--lg .ds-alert__close{width:28px;height:28px;font-size:16px}.ds-alert--hidden{display:none}.ds-alert__icon{flex-shrink:0;display:flex;align-items:center;justify-content:center;line-height:1}.ds-alert__content{flex:1;min-width:0}.ds-alert__content>:first-child{margin-top:0}.ds-alert__content>:last-child{margin-bottom:0}.ds-alert__close{flex-shrink:0;display:flex;align-items:center;justify-content:center;background:transparent;border:none;border-radius:var(--radius-1, 4px);cursor:pointer;transition:all var(--duration-fast, .15s) ease;color:currentColor;opacity:.7}.ds-alert__close:hover{opacity:1;background-color:var(--hover-bg, rgba(0, 0, 0, .05))}.ds-alert__close:active{transform:scale(.95)}.ds-alert__close:focus-visible{outline:2px solid currentColor;outline-offset:2px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FontAwesomeModule }, { kind: "component", type:
|
|
2352
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: DsAlert, isStandalone: true, selector: "ds-alert", inputs: { type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, showIcon: { classPropertyName: "showIcon", publicName: "showIcon", isSignal: true, isRequired: false, transformFunction: null }, closable: { classPropertyName: "closable", publicName: "closable", isSignal: true, isRequired: false, transformFunction: null }, hidden: { classPropertyName: "hidden", publicName: "hidden", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed" }, ngImport: i0, template: "<div\n [class]=\"alertClasses.join(' ')\"\n role=\"alert\"\n [attr.aria-hidden]=\"hidden() ? 'true' : null\"\n>\n @if (showIcon()) {\n <div class=\"ds-alert__icon\" aria-hidden=\"true\">\n <fa-icon [icon]=\"currentIcon\"></fa-icon>\n </div>\n }\n\n <div class=\"ds-alert__content\">\n <ng-content></ng-content>\n </div>\n\n @if (closable()) {\n <button\n class=\"ds-alert__close\"\n type=\"button\"\n aria-label=\"Fermer l'alerte\"\n (click)=\"handleClose()\"\n >\n <fa-icon [icon]=\"closeIcon\"></fa-icon>\n </button>\n }\n</div>\n", styles: ["@charset \"UTF-8\";.ds-alert{display:flex;align-items:flex-start;gap:var(--alert-gap, var(--space-3));border-radius:var(--alert-radius, var(--radius-2));border-width:1px;border-style:solid;transition:all var(--duration-fast, .15s) ease}.ds-alert--success{background-color:var(--alert-success-bg, var(--bg-success));border-color:var(--alert-success-border, var(--success));color:var(--alert-success-text, var(--text-success))}.ds-alert--success .ds-alert__icon{color:var(--alert-success-icon, var(--success))}.ds-alert--warning{background-color:var(--alert-warning-bg, var(--bg-warning));border-color:var(--alert-warning-border, var(--warning));color:var(--alert-warning-text, var(--text-warning))}.ds-alert--warning .ds-alert__icon{color:var(--alert-warning-icon, var(--warning))}.ds-alert--error{background-color:var(--alert-error-bg, var(--bg-error));border-color:var(--alert-error-border, var(--error));color:var(--alert-error-text, var(--text-error))}.ds-alert--error .ds-alert__icon{color:var(--alert-error-icon, var(--error))}.ds-alert--info{background-color:var(--alert-info-bg, var(--bg-info));border-color:var(--alert-info-border, var(--info));color:var(--alert-info-text, var(--text-info))}.ds-alert--info .ds-alert__icon{color:var(--alert-info-icon, var(--info))}.ds-alert--sm{padding:var(--alert-padding-sm, var(--space-2));font-size:var(--alert-font-size-sm, var(--font-size-2))}.ds-alert--sm .ds-alert__icon{font-size:var(--alert-icon-size-sm, 16px)}.ds-alert--sm .ds-alert__close{width:20px;height:20px;font-size:12px}.ds-alert--md{padding:var(--alert-padding-md, var(--space-3));font-size:var(--alert-font-size-md, var(--font-size-3))}.ds-alert--md .ds-alert__icon{font-size:var(--alert-icon-size-md, 20px)}.ds-alert--md .ds-alert__close{width:24px;height:24px;font-size:14px}.ds-alert--lg{padding:var(--alert-padding-lg, var(--space-4));font-size:var(--alert-font-size-lg, var(--font-size-4))}.ds-alert--lg .ds-alert__icon{font-size:var(--alert-icon-size-lg, 24px)}.ds-alert--lg .ds-alert__close{width:28px;height:28px;font-size:16px}.ds-alert--hidden{display:none}.ds-alert__icon{flex-shrink:0;display:flex;align-items:center;justify-content:center;line-height:1}.ds-alert__content{flex:1;min-width:0}.ds-alert__content>:first-child{margin-top:0}.ds-alert__content>:last-child{margin-bottom:0}.ds-alert__close{flex-shrink:0;display:flex;align-items:center;justify-content:center;background:transparent;border:none;border-radius:var(--radius-1, 4px);cursor:pointer;transition:all var(--duration-fast, .15s) ease;color:currentColor;opacity:.7}.ds-alert__close:hover{opacity:1;background-color:var(--hover-bg, rgba(0, 0, 0, .05))}.ds-alert__close:active{transform:scale(.95)}.ds-alert__close:focus-visible{outline:2px solid currentColor;outline-offset:2px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FontAwesomeModule }, { kind: "component", type: i1$1.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"], outputs: ["iconChange", "titleChange", "animationChange", "maskChange", "flipChange", "sizeChange", "pullChange", "borderChange", "inverseChange", "symbolChange", "rotateChange", "fixedWidthChange", "transformChange", "a11yRoleChange"] }] });
|
|
2353
2353
|
}
|
|
2354
2354
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DsAlert, decorators: [{
|
|
2355
2355
|
type: Component,
|
|
@@ -2447,7 +2447,7 @@ class DsBreadcrumb {
|
|
|
2447
2447
|
return index;
|
|
2448
2448
|
}
|
|
2449
2449
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DsBreadcrumb, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2450
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: DsBreadcrumb, isStandalone: true, selector: "ds-breadcrumb", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: true, transformFunction: null }, separator: { classPropertyName: "separator", publicName: "separator", isSignal: true, isRequired: false, transformFunction: null }, maxItems: { classPropertyName: "maxItems", publicName: "maxItems", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemClicked: "itemClicked" }, ngImport: i0, template: "<nav class=\"ds-breadcrumb\" aria-label=\"Breadcrumb\">\n <ol class=\"ds-breadcrumb__list\">\n @for (item of visibleItems; track trackByIndex($index)) {\n <li class=\"ds-breadcrumb__item\" [class.ds-breadcrumb__item--active]=\"isLastItem($index)\">\n @if (item.href && !item.disabled && !isLastItem($index)) {\n <a\n [routerLink]=\"item.href\"\n class=\"ds-breadcrumb__link\"\n (click)=\"onItemClick(item, $event)\"\n [attr.aria-current]=\"isLastItem($index) ? 'page' : null\"\n >\n {{ item.label }}\n </a>\n } @else {\n <span\n class=\"ds-breadcrumb__text\"\n [class.ds-breadcrumb__text--disabled]=\"item.disabled\"\n [attr.aria-current]=\"isLastItem($index) ? 'page' : null\"\n >\n {{ item.label }}\n </span>\n }\n\n @if (!isLastItem($index)) {\n <span class=\"ds-breadcrumb__separator\" aria-hidden=\"true\">{{ separator() }}</span>\n }\n </li>\n }\n </ol>\n</nav>\n", styles: [".ds-breadcrumb{font-size:var(--breadcrumb-font-size)}.ds-breadcrumb__list{display:flex;align-items:center;flex-wrap:wrap;gap:var(--breadcrumb-spacing);list-style:none;padding:0;margin:0}.ds-breadcrumb__item{display:flex;align-items:center;gap:var(--breadcrumb-spacing)}.ds-breadcrumb__item--active .ds-breadcrumb__text{color:var(--breadcrumb-active);font-weight:var(--font-weight-medium)}.ds-breadcrumb__link{color:var(--breadcrumb-link);text-decoration:none;padding:var(--breadcrumb-item-padding);border-radius:var(--radius-1);transition:color var(--transition-default)}.ds-breadcrumb__link:hover{color:var(--breadcrumb-link-hover)}.ds-breadcrumb__link:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.ds-breadcrumb__text{padding:var(--breadcrumb-item-padding);color:var(--breadcrumb-active)}.ds-breadcrumb__text--disabled{color:var(--text-disabled);cursor:default}.ds-breadcrumb__separator{color:var(--breadcrumb-separator-color);-webkit-user-select:none;user-select:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1$
|
|
2450
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: DsBreadcrumb, isStandalone: true, selector: "ds-breadcrumb", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: true, transformFunction: null }, separator: { classPropertyName: "separator", publicName: "separator", isSignal: true, isRequired: false, transformFunction: null }, maxItems: { classPropertyName: "maxItems", publicName: "maxItems", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemClicked: "itemClicked" }, ngImport: i0, template: "<nav class=\"ds-breadcrumb\" aria-label=\"Breadcrumb\">\n <ol class=\"ds-breadcrumb__list\">\n @for (item of visibleItems; track trackByIndex($index)) {\n <li class=\"ds-breadcrumb__item\" [class.ds-breadcrumb__item--active]=\"isLastItem($index)\">\n @if (item.href && !item.disabled && !isLastItem($index)) {\n <a\n [routerLink]=\"item.href\"\n class=\"ds-breadcrumb__link\"\n (click)=\"onItemClick(item, $event)\"\n [attr.aria-current]=\"isLastItem($index) ? 'page' : null\"\n >\n {{ item.label }}\n </a>\n } @else {\n <span\n class=\"ds-breadcrumb__text\"\n [class.ds-breadcrumb__text--disabled]=\"item.disabled\"\n [attr.aria-current]=\"isLastItem($index) ? 'page' : null\"\n >\n {{ item.label }}\n </span>\n }\n\n @if (!isLastItem($index)) {\n <span class=\"ds-breadcrumb__separator\" aria-hidden=\"true\">{{ separator() }}</span>\n }\n </li>\n }\n </ol>\n</nav>\n", styles: [".ds-breadcrumb{font-size:var(--breadcrumb-font-size)}.ds-breadcrumb__list{display:flex;align-items:center;flex-wrap:wrap;gap:var(--breadcrumb-spacing);list-style:none;padding:0;margin:0}.ds-breadcrumb__item{display:flex;align-items:center;gap:var(--breadcrumb-spacing)}.ds-breadcrumb__item--active .ds-breadcrumb__text{color:var(--breadcrumb-active);font-weight:var(--font-weight-medium)}.ds-breadcrumb__link{color:var(--breadcrumb-link);text-decoration:none;padding:var(--breadcrumb-item-padding);border-radius:var(--radius-1);transition:color var(--transition-default)}.ds-breadcrumb__link:hover{color:var(--breadcrumb-link-hover)}.ds-breadcrumb__link:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.ds-breadcrumb__text{padding:var(--breadcrumb-item-padding);color:var(--breadcrumb-active)}.ds-breadcrumb__text--disabled{color:var(--text-disabled);cursor:default}.ds-breadcrumb__separator{color:var(--breadcrumb-separator-color);-webkit-user-select:none;user-select:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1$2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] });
|
|
2451
2451
|
}
|
|
2452
2452
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DsBreadcrumb, decorators: [{
|
|
2453
2453
|
type: Component,
|
|
@@ -3279,7 +3279,7 @@ class DsDropdown {
|
|
|
3279
3279
|
useExisting: forwardRef(() => DsDropdown),
|
|
3280
3280
|
multi: true,
|
|
3281
3281
|
},
|
|
3282
|
-
], viewQueries: [{ propertyName: "triggerButton", first: true, predicate: ["triggerButton"], descendants: true, read: ElementRef }, { propertyName: "menuItems", predicate: ["menuItemRef"], descendants: true }], ngImport: i0, template: "<primitive-button\n #triggerOrigin=\"cdkOverlayOrigin\"\n #triggerButton\n cdkOverlayOrigin\n [attr.id]=\"id()\"\n [type]=\"buttonType()\"\n [variant]=\"type()\"\n [appearance]=\"variant()\"\n [size]=\"size()\"\n [block]=\"block()\"\n [disabled]=\"isDisabled()\"\n [iconStart]=\"effectiveStartIcon()\"\n [iconEnd]=\"effectiveEndIcon()\"\n [attr.aria-haspopup]=\"'menu'\"\n [attr.aria-expanded]=\"isMenuOpen()\"\n [attr.aria-controls]=\"isMenuOpen() ? id() + '-menu' : null\"\n [attr.aria-label]=\"ariaLabel() ?? null\"\n [attr.aria-labelledby]=\"ariaLabelledBy() ?? null\"\n (clicked)=\"toggleMenu()\"\n (keydown)=\"onTriggerKeydown($event)\"\n>\n @if (loading()) {\n <span class=\"spinner\" aria-hidden=\"true\"></span>\n } @else {\n <ng-content></ng-content>\n }\n</primitive-button>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"triggerOrigin\"\n [cdkConnectedOverlayOpen]=\"isMenuOpen()\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayBackdropClass]=\"'menu-overlay'\"\n [cdkConnectedOverlayPanelClass]=\"overlayPanelClasses()\"\n (backdropClick)=\"closeMenu()\"\n (detach)=\"onOverlayDetach()\"\n>\n <div\n class=\"menu-sort-and-group\"\n role=\"menu\"\n [attr.id]=\"id() + '-menu'\"\n [attr.aria-activedescendant]=\"activeDescendantId()\"\n >\n @for (item of dropdownItems(); track item.code; let index = $index) {\n <button\n #menuItemRef\n type=\"button\"\n class=\"menu-item-content\"\n [class.active]=\"isItemActive(item.code)\"\n [attr.id]=\"id() + '-option-' + item.code\"\n [attr.aria-checked]=\"isItemActive(item.code)\"\n [attr.data-index]=\"index\"\n role=\"menuitemradio\"\n (click)=\"setSelectedItem(item.code)\"\n (keydown)=\"onMenuKeydown($event, index)\"\n (mouseenter)=\"onMenuMouseEnter(index)\"\n >\n @if (item.startIcon) {\n <fa-icon\n [icon]=\"item.startIcon\"\n [style.color]=\"item.iconColor || null\">\n </fa-icon>\n }\n <span>{{ item.label }}</span>\n @if (isItemActive(item.code) && item.endIcon) {\n <fa-icon\n [icon]=\"item.endIcon\"\n [style.color]=\"item.iconColor || null\">\n </fa-icon>\n }\n </button>\n }\n </div>\n</ng-template>\n", styles: [":host{display:inline-flex}.menu-sort-and-group{background:var(--dropdown-bg);border:1px solid var(--dropdown-border-color);border-radius:var(--dropdown-radius);box-shadow:var(--dropdown-shadow);padding:var(--dropdown-padding);min-width:var(--dropdown-min-width)}.menu-item-content{display:flex;align-items:center;width:100%;gap:var(--dropdown-gap);padding:var(--dropdown-item-padding-y) var(--dropdown-item-padding-x);border-radius:var(--dropdown-item-radius);border:none;cursor:pointer;color:var(--dropdown-item-color);background:transparent;transition:background-color var(--duration-fast) var(--easing-default),color var(--duration-fast) var(--easing-default)}.menu-item-content fa-icon{flex-shrink:0}.menu-item-content span{flex:1;text-align:left}.menu-item-content.active{background:var(--dropdown-item-active-bg);color:var(--dropdown-item-active-color);font-weight:var(--font-weight-semibold)}.menu-item-content:not(.active):hover{background:var(--dropdown-item-hover-bg);color:var(--dropdown-item-hover-color)}.menu-item-content:focus-visible{outline:2px solid var(--focus-color);outline-offset:2px}.menu-item-content:active{opacity:.9}.menu-overlay{background:var(--dropdown-backdrop)}.spinner{border:2px solid var(--spinner-border);border-top-color:var(--spinner-border-active);border-radius:50%;width:1em;height:1em;animation:spin .6s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: PrimitiveButton, selector: "primitive-button", inputs: ["type", "variant", "size", "disabled", "iconStart", "iconEnd", "appearance", "block"], outputs: ["clicked"] }, { kind: "component", type: FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }, { 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"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }] });
|
|
3282
|
+
], viewQueries: [{ propertyName: "triggerButton", first: true, predicate: ["triggerButton"], descendants: true, read: ElementRef }, { propertyName: "menuItems", predicate: ["menuItemRef"], descendants: true }], ngImport: i0, template: "<primitive-button\n #triggerOrigin=\"cdkOverlayOrigin\"\n #triggerButton\n cdkOverlayOrigin\n [attr.id]=\"id()\"\n [type]=\"buttonType()\"\n [variant]=\"type()\"\n [appearance]=\"variant()\"\n [size]=\"size()\"\n [block]=\"block()\"\n [disabled]=\"isDisabled()\"\n [iconStart]=\"effectiveStartIcon()\"\n [iconEnd]=\"effectiveEndIcon()\"\n [attr.aria-haspopup]=\"'menu'\"\n [attr.aria-expanded]=\"isMenuOpen()\"\n [attr.aria-controls]=\"isMenuOpen() ? id() + '-menu' : null\"\n [attr.aria-label]=\"ariaLabel() ?? null\"\n [attr.aria-labelledby]=\"ariaLabelledBy() ?? null\"\n (clicked)=\"toggleMenu()\"\n (keydown)=\"onTriggerKeydown($event)\"\n>\n @if (loading()) {\n <span class=\"spinner\" aria-hidden=\"true\"></span>\n } @else {\n <ng-content></ng-content>\n }\n</primitive-button>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"triggerOrigin\"\n [cdkConnectedOverlayOpen]=\"isMenuOpen()\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayBackdropClass]=\"'menu-overlay'\"\n [cdkConnectedOverlayPanelClass]=\"overlayPanelClasses()\"\n (backdropClick)=\"closeMenu()\"\n (detach)=\"onOverlayDetach()\"\n>\n <div\n class=\"menu-sort-and-group\"\n role=\"menu\"\n [attr.id]=\"id() + '-menu'\"\n [attr.aria-activedescendant]=\"activeDescendantId()\"\n >\n @for (item of dropdownItems(); track item.code; let index = $index) {\n <button\n #menuItemRef\n type=\"button\"\n class=\"menu-item-content\"\n [class.active]=\"isItemActive(item.code)\"\n [attr.id]=\"id() + '-option-' + item.code\"\n [attr.aria-checked]=\"isItemActive(item.code)\"\n [attr.data-index]=\"index\"\n role=\"menuitemradio\"\n (click)=\"setSelectedItem(item.code)\"\n (keydown)=\"onMenuKeydown($event, index)\"\n (mouseenter)=\"onMenuMouseEnter(index)\"\n >\n @if (item.startIcon) {\n <fa-icon\n [icon]=\"item.startIcon\"\n [style.color]=\"item.iconColor || null\">\n </fa-icon>\n }\n <span>{{ item.label }}</span>\n @if (isItemActive(item.code) && item.endIcon) {\n <fa-icon\n [icon]=\"item.endIcon\"\n [style.color]=\"item.iconColor || null\">\n </fa-icon>\n }\n </button>\n }\n </div>\n</ng-template>\n", styles: [":host{display:inline-flex}.menu-sort-and-group{background:var(--dropdown-bg);border:1px solid var(--dropdown-border-color);border-radius:var(--dropdown-radius);box-shadow:var(--dropdown-shadow);padding:var(--dropdown-padding);min-width:var(--dropdown-min-width)}.menu-item-content{display:flex;align-items:center;width:100%;gap:var(--dropdown-gap);padding:var(--dropdown-item-padding-y) var(--dropdown-item-padding-x);border-radius:var(--dropdown-item-radius);border:none;cursor:pointer;color:var(--dropdown-item-color);background:transparent;transition:background-color var(--duration-fast) var(--easing-default),color var(--duration-fast) var(--easing-default)}.menu-item-content fa-icon{flex-shrink:0}.menu-item-content span{flex:1;text-align:left}.menu-item-content.active{background:var(--dropdown-item-active-bg);color:var(--dropdown-item-active-color);font-weight:var(--font-weight-semibold)}.menu-item-content:not(.active):hover{background:var(--dropdown-item-hover-bg);color:var(--dropdown-item-hover-color)}.menu-item-content:focus-visible{outline:2px solid var(--focus-color);outline-offset:2px}.menu-item-content:active{opacity:.9}.menu-overlay{background:var(--dropdown-backdrop)}.spinner{border:2px solid var(--spinner-border);border-top-color:var(--spinner-border-active);border-radius:50%;width:1em;height:1em;animation:spin .6s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: PrimitiveButton, selector: "primitive-button", inputs: ["type", "variant", "size", "disabled", "iconStart", "iconEnd", "appearance", "block"], outputs: ["clicked"] }, { kind: "component", type: FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"], outputs: ["iconChange", "titleChange", "animationChange", "maskChange", "flipChange", "sizeChange", "pullChange", "borderChange", "inverseChange", "symbolChange", "rotateChange", "fixedWidthChange", "transformChange", "a11yRoleChange"] }, { 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"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }] });
|
|
3283
3283
|
}
|
|
3284
3284
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DsDropdown, decorators: [{
|
|
3285
3285
|
type: Component,
|
|
@@ -3427,7 +3427,7 @@ class DsInputField {
|
|
|
3427
3427
|
useExisting: forwardRef(() => DsInputField),
|
|
3428
3428
|
multi: true,
|
|
3429
3429
|
},
|
|
3430
|
-
], ngImport: i0, template: "<div\n class=\"ds-input-field\"\n [ngClass]=\"[\n variant(),\n inputState(),\n isDisabled() ? 'is-disabled' : '',\n readonly() ? 'is-readonly' : ''\n ]\">\n @if (label()) {\n <label [for]=\"id()\" [attr.data-state]=\"inputState()\">\n {{ label() }}\n @if (required()) {\n <span class=\"required\">*</span>\n }\n </label>\n }\n\n <div class=\"input-container\">\n <primitive-input\n [id]=\"id()\"\n [name]=\"name()\"\n [autocomplete]=\"autocomplete()\"\n [ariaLabel]=\"ariaLabel()\"\n [ariaDescribedBy]=\"ariaDescribedBy()\"\n [maxlength]=\"maxlength()\"\n [placeholder]=\"placeholder()\"\n [type]=\"actualType()\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [state]=\"inputState()\"\n [size]=\"size()\"\n [appearance]=\"variant()\"\n [iconStart]=\"iconStart()\"\n [iconEnd]=\"iconEnd()\"\n [value]=\"internalValue()\"\n (valueChange)=\"onPrimitiveValueChange($event)\"\n (inputBlurred)=\"onInputBlur()\"\n >\n </primitive-input>\n\n @if (showClearButton()) {\n <button\n type=\"button\"\n class=\"icon-btn clear\"\n (click)=\"clearValue()\"\n aria-label=\"Clear input\">\n <fa-icon [icon]=\"faClose\" />\n </button>\n }\n\n @if (showTogglePassword()) {\n <button\n type=\"button\"\n class=\"icon-btn toggle\"\n (click)=\"togglePasswordVisibility()\"\n [attr.aria-label]=\"passwordVisible() ? 'Hide password' : 'Show password'\">\n <fa-icon [icon]=\"passwordVisible() ? faEyeSlash : faEye\" />\n </button>\n }\n </div>\n\n @if (error()) {\n <p class=\"error\" [id]=\"errorId()\" role=\"alert\">\n {{ error() }}\n </p>\n }\n\n @if (!error() && helper()) {\n <p class=\"helper\" [id]=\"helperId()\">\n {{ helper() }}\n </p>\n }\n\n @if (maxlength()) {\n <p class=\"counter\" [id]=\"counterId()\">\n {{ characterCount() }}/{{ maxlength() }}\n </p>\n }\n</div>\n", styles: ["@charset \"UTF-8\";:host{display:block;width:100%}.ds-input-field{display:flex;flex-direction:column;gap:var(--space-1);width:100%}.ds-input-field.error label{color:var(--input-error-border, var(--error))}.ds-input-field.success label{color:var(--input-success-border, var(--success))}.ds-input-field.warning label{color:var(--input-warning-border, var(--warning))}.ds-input-field.is-disabled label,.ds-input-field.is-readonly label{color:var(--text-muted)}label{display:block;font-weight:var(--font-weight-medium);font-size:var(--input-label-font-size, var(--font-size-2));color:var(--input-label-color, var(--text-default));margin-bottom:var(--space-1)}label .required{color:var(--input-error-border, var(--error));margin-left:var(--space-1)}.input-container{position:relative;display:flex;align-items:center;width:100%}.input-container primitive-input{flex:1}.icon-btn{position:absolute;right:var(--space-2);display:flex;align-items:center;justify-content:center;width:32px;height:32px;border:none;background:transparent;color:var(--input-icon, var(--text-muted));cursor:pointer;border-radius:var(--radius-1);transition:all var(--duration-fast) var(--easing-default)}.icon-btn:hover{background:var(--surface-hover);color:var(--text-default)}.icon-btn:active{transform:scale(.95)}.icon-btn fa-icon{font-size:var(--icon-size-md)}.ds-input-field.is-disabled .icon-btn,.ds-input-field.is-readonly .icon-btn{cursor:not-allowed;opacity:.4;pointer-events:none}.icon-btn.clear{right:calc(var(--space-2) + 40px)}.icon-btn.toggle{right:var(--space-2)}.helper{font-size:var(--font-size-1);color:var(--text-muted);margin:0}.ds-input-field.success .helper{color:var(--input-success-border, var(--success))}.ds-input-field.warning .helper{color:var(--input-warning-border, var(--warning))}.error{font-size:var(--font-size-1);color:var(--input-error-border, var(--error));margin:0}.counter{font-size:var(--font-size-1);color:var(--text-muted);text-align:right;margin:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }, { kind: "component", type: PrimitiveInput, selector: "primitive-input", inputs: ["id", "name", "autocomplete", "placeholder", "type", "disabled", "readonly", "required", "maxlength", "state", "size", "appearance", "iconStart", "iconEnd", "ariaLabel", "ariaDescribedBy", "value"], outputs: ["valueChange", "inputChanged", "inputBlurred", "inputFocused"] }] });
|
|
3430
|
+
], ngImport: i0, template: "<div\n class=\"ds-input-field\"\n [ngClass]=\"[\n variant(),\n inputState(),\n isDisabled() ? 'is-disabled' : '',\n readonly() ? 'is-readonly' : ''\n ]\">\n @if (label()) {\n <label [for]=\"id()\" [attr.data-state]=\"inputState()\">\n {{ label() }}\n @if (required()) {\n <span class=\"required\">*</span>\n }\n </label>\n }\n\n <div class=\"input-container\">\n <primitive-input\n [id]=\"id()\"\n [name]=\"name()\"\n [autocomplete]=\"autocomplete()\"\n [ariaLabel]=\"ariaLabel()\"\n [ariaDescribedBy]=\"ariaDescribedBy()\"\n [maxlength]=\"maxlength()\"\n [placeholder]=\"placeholder()\"\n [type]=\"actualType()\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [state]=\"inputState()\"\n [size]=\"size()\"\n [appearance]=\"variant()\"\n [iconStart]=\"iconStart()\"\n [iconEnd]=\"iconEnd()\"\n [value]=\"internalValue()\"\n (valueChange)=\"onPrimitiveValueChange($event)\"\n (inputBlurred)=\"onInputBlur()\"\n >\n </primitive-input>\n\n @if (showClearButton()) {\n <button\n type=\"button\"\n class=\"icon-btn clear\"\n (click)=\"clearValue()\"\n aria-label=\"Clear input\">\n <fa-icon [icon]=\"faClose\" />\n </button>\n }\n\n @if (showTogglePassword()) {\n <button\n type=\"button\"\n class=\"icon-btn toggle\"\n (click)=\"togglePasswordVisibility()\"\n [attr.aria-label]=\"passwordVisible() ? 'Hide password' : 'Show password'\">\n <fa-icon [icon]=\"passwordVisible() ? faEyeSlash : faEye\" />\n </button>\n }\n </div>\n\n @if (error()) {\n <p class=\"error\" [id]=\"errorId()\" role=\"alert\">\n {{ error() }}\n </p>\n }\n\n @if (!error() && helper()) {\n <p class=\"helper\" [id]=\"helperId()\">\n {{ helper() }}\n </p>\n }\n\n @if (maxlength()) {\n <p class=\"counter\" [id]=\"counterId()\">\n {{ characterCount() }}/{{ maxlength() }}\n </p>\n }\n</div>\n", styles: ["@charset \"UTF-8\";:host{display:block;width:100%}.ds-input-field{display:flex;flex-direction:column;gap:var(--space-1);width:100%}.ds-input-field.error label{color:var(--input-error-border, var(--error))}.ds-input-field.success label{color:var(--input-success-border, var(--success))}.ds-input-field.warning label{color:var(--input-warning-border, var(--warning))}.ds-input-field.is-disabled label,.ds-input-field.is-readonly label{color:var(--text-muted)}label{display:block;font-weight:var(--font-weight-medium);font-size:var(--input-label-font-size, var(--font-size-2));color:var(--input-label-color, var(--text-default));margin-bottom:var(--space-1)}label .required{color:var(--input-error-border, var(--error));margin-left:var(--space-1)}.input-container{position:relative;display:flex;align-items:center;width:100%}.input-container primitive-input{flex:1}.icon-btn{position:absolute;right:var(--space-2);display:flex;align-items:center;justify-content:center;width:32px;height:32px;border:none;background:transparent;color:var(--input-icon, var(--text-muted));cursor:pointer;border-radius:var(--radius-1);transition:all var(--duration-fast) var(--easing-default)}.icon-btn:hover{background:var(--surface-hover);color:var(--text-default)}.icon-btn:active{transform:scale(.95)}.icon-btn fa-icon{font-size:var(--icon-size-md)}.ds-input-field.is-disabled .icon-btn,.ds-input-field.is-readonly .icon-btn{cursor:not-allowed;opacity:.4;pointer-events:none}.icon-btn.clear{right:calc(var(--space-2) + 40px)}.icon-btn.toggle{right:var(--space-2)}.helper{font-size:var(--font-size-1);color:var(--text-muted);margin:0}.ds-input-field.success .helper{color:var(--input-success-border, var(--success))}.ds-input-field.warning .helper{color:var(--input-warning-border, var(--warning))}.error{font-size:var(--font-size-1);color:var(--input-error-border, var(--error));margin:0}.counter{font-size:var(--font-size-1);color:var(--text-muted);text-align:right;margin:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"], outputs: ["iconChange", "titleChange", "animationChange", "maskChange", "flipChange", "sizeChange", "pullChange", "borderChange", "inverseChange", "symbolChange", "rotateChange", "fixedWidthChange", "transformChange", "a11yRoleChange"] }, { kind: "component", type: PrimitiveInput, selector: "primitive-input", inputs: ["id", "name", "autocomplete", "placeholder", "type", "disabled", "readonly", "required", "maxlength", "state", "size", "appearance", "iconStart", "iconEnd", "ariaLabel", "ariaDescribedBy", "value"], outputs: ["valueChange", "inputChanged", "inputBlurred", "inputFocused"] }] });
|
|
3431
3431
|
}
|
|
3432
3432
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DsInputField, decorators: [{
|
|
3433
3433
|
type: Component,
|
|
@@ -3612,7 +3612,7 @@ class DsInputTextarea {
|
|
|
3612
3612
|
useExisting: forwardRef(() => DsInputTextarea),
|
|
3613
3613
|
multi: true,
|
|
3614
3614
|
},
|
|
3615
|
-
], viewQueries: [{ propertyName: "textareaHost", first: true, predicate: ["textareaHost"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div\n class=\"ds-input-textarea\"\n [ngClass]=\"[\n variant(),\n inputState(),\n isDisabled() ? 'is-disabled' : '',\n readonly() ? 'is-readonly' : ''\n ]\">\n @if (label()) {\n <label [for]=\"id()\" [attr.data-state]=\"inputState()\">\n {{ label() }}\n @if (required()) {\n <span class=\"required\">*</span>\n }\n </label>\n }\n\n <div class=\"textarea-container\">\n <primitive-textarea\n #textareaHost\n [id]=\"id()\"\n [name]=\"name()\"\n [placeholder]=\"placeholder()\"\n [rows]=\"rows()\"\n [cols]=\"cols()\"\n [maxlength]=\"maxlength()\"\n [resize]=\"textareaResize()\"\n [state]=\"inputState()\"\n [size]=\"size()\"\n [appearance]=\"variant()\"\n [iconStart]=\"iconStart()\"\n [iconEnd]=\"iconEnd()\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [ariaLabel]=\"ariaLabel()\"\n [value]=\"internalValue()\"\n [ariaDescribedBy]=\"ariaDescribedBy()\"\n (valueChange)=\"onPrimitiveValueChange($event)\"\n (inputBlurred)=\"onInputBlur()\"\n >\n </primitive-textarea>\n\n @if (showClearButton()) {\n <button\n type=\"button\"\n class=\"icon-btn clear\"\n (click)=\"clearValue()\"\n aria-label=\"Clear textarea\">\n <fa-icon [icon]=\"faClose\" />\n </button>\n }\n </div>\n\n @if (error()) {\n <p class=\"error\" [id]=\"arErrorId()\" role=\"alert\">{{ error() }}</p>\n }\n\n @if (!error() && helper()) {\n <p class=\"helper\" [id]=\"arHelperId()\">{{ helper() }}</p>\n }\n\n @if (maxlength()) {\n <p class=\"counter\" [id]=\"arCounterId()\">\n {{ characterCount() }}/{{ maxlength() }}\n </p>\n }\n</div>\n", styles: ["@charset \"UTF-8\";:host{display:block;width:100%}.ds-input-textarea{display:flex;flex-direction:column;gap:var(--space-1);width:100%}.ds-input-textarea.error label{color:var(--input-error-border, var(--error))}.ds-input-textarea.success label{color:var(--input-success-border, var(--success))}.ds-input-textarea.warning label{color:var(--input-warning-border, var(--warning))}.ds-input-textarea.is-disabled label,.ds-input-textarea.is-readonly label{color:var(--text-muted)}label{display:block;font-weight:var(--font-weight-medium);font-size:var(--input-label-font-size, var(--font-size-2));color:var(--input-label-color, var(--text-default));margin-bottom:var(--space-1)}label .required{color:var(--input-error-border, var(--error));margin-left:var(--space-1)}.textarea-container{position:relative;display:flex;width:100%}.textarea-container primitive-textarea{flex:1}.icon-btn{position:absolute;top:var(--space-2);right:var(--space-2);display:flex;align-items:center;justify-content:center;width:32px;height:32px;border:none;background:transparent;color:var(--input-icon, var(--text-muted));cursor:pointer;border-radius:var(--radius-1);transition:all var(--duration-fast) var(--easing-default)}.icon-btn:hover{background:var(--surface-hover);color:var(--text-default)}.icon-btn:active{transform:scale(.95)}.icon-btn fa-icon{font-size:var(--icon-size-md)}.ds-input-textarea.is-disabled .icon-btn,.ds-input-textarea.is-readonly .icon-btn{cursor:not-allowed;opacity:.4;pointer-events:none}.helper{font-size:var(--font-size-1);color:var(--text-muted);margin:0}.ds-input-textarea.success .helper{color:var(--input-success-border, var(--success))}.ds-input-textarea.warning .helper{color:var(--input-warning-border, var(--warning))}.error{font-size:var(--font-size-1);color:var(--input-error-border, var(--error));margin:0}.counter{font-size:var(--font-size-1);color:var(--text-muted);text-align:right;margin:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: PrimitiveTextarea, selector: "primitive-textarea", inputs: ["id", "name", "placeholder", "disabled", "readonly", "required", "state", "size", "appearance", "resize", "rows", "cols", "maxlength", "iconStart", "iconEnd", "ariaLabel", "ariaDescribedBy", "value"], outputs: ["valueChange", "inputChanged", "inputBlurred", "inputFocused"] }, { kind: "component", type: FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }] });
|
|
3615
|
+
], viewQueries: [{ propertyName: "textareaHost", first: true, predicate: ["textareaHost"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div\n class=\"ds-input-textarea\"\n [ngClass]=\"[\n variant(),\n inputState(),\n isDisabled() ? 'is-disabled' : '',\n readonly() ? 'is-readonly' : ''\n ]\">\n @if (label()) {\n <label [for]=\"id()\" [attr.data-state]=\"inputState()\">\n {{ label() }}\n @if (required()) {\n <span class=\"required\">*</span>\n }\n </label>\n }\n\n <div class=\"textarea-container\">\n <primitive-textarea\n #textareaHost\n [id]=\"id()\"\n [name]=\"name()\"\n [placeholder]=\"placeholder()\"\n [rows]=\"rows()\"\n [cols]=\"cols()\"\n [maxlength]=\"maxlength()\"\n [resize]=\"textareaResize()\"\n [state]=\"inputState()\"\n [size]=\"size()\"\n [appearance]=\"variant()\"\n [iconStart]=\"iconStart()\"\n [iconEnd]=\"iconEnd()\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [ariaLabel]=\"ariaLabel()\"\n [value]=\"internalValue()\"\n [ariaDescribedBy]=\"ariaDescribedBy()\"\n (valueChange)=\"onPrimitiveValueChange($event)\"\n (inputBlurred)=\"onInputBlur()\"\n >\n </primitive-textarea>\n\n @if (showClearButton()) {\n <button\n type=\"button\"\n class=\"icon-btn clear\"\n (click)=\"clearValue()\"\n aria-label=\"Clear textarea\">\n <fa-icon [icon]=\"faClose\" />\n </button>\n }\n </div>\n\n @if (error()) {\n <p class=\"error\" [id]=\"arErrorId()\" role=\"alert\">{{ error() }}</p>\n }\n\n @if (!error() && helper()) {\n <p class=\"helper\" [id]=\"arHelperId()\">{{ helper() }}</p>\n }\n\n @if (maxlength()) {\n <p class=\"counter\" [id]=\"arCounterId()\">\n {{ characterCount() }}/{{ maxlength() }}\n </p>\n }\n</div>\n", styles: ["@charset \"UTF-8\";:host{display:block;width:100%}.ds-input-textarea{display:flex;flex-direction:column;gap:var(--space-1);width:100%}.ds-input-textarea.error label{color:var(--input-error-border, var(--error))}.ds-input-textarea.success label{color:var(--input-success-border, var(--success))}.ds-input-textarea.warning label{color:var(--input-warning-border, var(--warning))}.ds-input-textarea.is-disabled label,.ds-input-textarea.is-readonly label{color:var(--text-muted)}label{display:block;font-weight:var(--font-weight-medium);font-size:var(--input-label-font-size, var(--font-size-2));color:var(--input-label-color, var(--text-default));margin-bottom:var(--space-1)}label .required{color:var(--input-error-border, var(--error));margin-left:var(--space-1)}.textarea-container{position:relative;display:flex;width:100%}.textarea-container primitive-textarea{flex:1}.icon-btn{position:absolute;top:var(--space-2);right:var(--space-2);display:flex;align-items:center;justify-content:center;width:32px;height:32px;border:none;background:transparent;color:var(--input-icon, var(--text-muted));cursor:pointer;border-radius:var(--radius-1);transition:all var(--duration-fast) var(--easing-default)}.icon-btn:hover{background:var(--surface-hover);color:var(--text-default)}.icon-btn:active{transform:scale(.95)}.icon-btn fa-icon{font-size:var(--icon-size-md)}.ds-input-textarea.is-disabled .icon-btn,.ds-input-textarea.is-readonly .icon-btn{cursor:not-allowed;opacity:.4;pointer-events:none}.helper{font-size:var(--font-size-1);color:var(--text-muted);margin:0}.ds-input-textarea.success .helper{color:var(--input-success-border, var(--success))}.ds-input-textarea.warning .helper{color:var(--input-warning-border, var(--warning))}.error{font-size:var(--font-size-1);color:var(--input-error-border, var(--error));margin:0}.counter{font-size:var(--font-size-1);color:var(--text-muted);text-align:right;margin:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: PrimitiveTextarea, selector: "primitive-textarea", inputs: ["id", "name", "placeholder", "disabled", "readonly", "required", "state", "size", "appearance", "resize", "rows", "cols", "maxlength", "iconStart", "iconEnd", "ariaLabel", "ariaDescribedBy", "value"], outputs: ["valueChange", "inputChanged", "inputBlurred", "inputFocused"] }, { kind: "component", type: FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"], outputs: ["iconChange", "titleChange", "animationChange", "maskChange", "flipChange", "sizeChange", "pullChange", "borderChange", "inverseChange", "symbolChange", "rotateChange", "fixedWidthChange", "transformChange", "a11yRoleChange"] }] });
|
|
3616
3616
|
}
|
|
3617
3617
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DsInputTextarea, decorators: [{
|
|
3618
3618
|
type: Component,
|
|
@@ -3767,7 +3767,7 @@ class DsModalComponent {
|
|
|
3767
3767
|
body.classList.remove('modal-open');
|
|
3768
3768
|
}
|
|
3769
3769
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DsModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
3770
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: DsModalComponent, isStandalone: true, selector: "ds-modal", inputs: { open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, closable: { classPropertyName: "closable", publicName: "closable", isSignal: true, isRequired: false, transformFunction: null }, closeOnBackdrop: { classPropertyName: "closeOnBackdrop", publicName: "closeOnBackdrop", isSignal: true, isRequired: false, transformFunction: null }, showIcon: { classPropertyName: "showIcon", publicName: "showIcon", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { opened: "opened", closed: "closed" }, host: { listeners: { "document:keydown.escape": "handleEscape($event)" } }, queries: [{ propertyName: "projectedIcon", first: true, predicate: ["icon"], descendants: true }], viewQueries: [{ propertyName: "modalContainer", first: true, predicate: ["modalContainer"], descendants: true }, { propertyName: "closeButton", first: true, predicate: ["closeButton"], descendants: true, read: ElementRef }], ngImport: i0, template: "@if (shouldRenderOverlay()) {\n <div class=\"overlay\" role=\"presentation\" (click)=\"onBackdropClick()\"></div>\n}\n@if (open()) {\n <div #modalContainer\n class=\"modal\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-labelledby]=\"modalTitleId\"\n [attr.aria-describedby]=\"modalDescId\"\n [ngClass]=\"modalClasses()\"\n >\n <header class=\"modal-header\">\n @if (showIcon()) {\n <div class=\"modal-icon\">\n <ng-content select=\"[icon]\"></ng-content>\n @if (shouldRenderDefaultIcon() && resolvedIcon()) {\n <fa-icon [icon]=\"resolvedIcon()!\"></fa-icon>\n }\n </div>\n }\n <h3 [id]=\"modalTitleId\">{{ title() }}</h3>\n @if (closable()) {\n <primitive-button\n #closeButton\n class=\"close-btn\"\n variant=\"ghost\"\n appearance=\"outline\"\n size=\"sm\"\n (clicked)=\"close()\"\n aria-label=\"Fermer la fen\u00EAtre\"\n >\u2715</primitive-button>\n }\n </header>\n <div class=\"modal-content\" (scroll)=\"onScroll($event)\">\n <section [id]=\"modalDescId\"><ng-content></ng-content></section>\n </div>\n <footer class=\"modal-footer\" [class.with-shadow]=\"isScrolled()\">\n <ng-content select=\"[footer]\"></ng-content>\n </footer>\n </div>\n}\n", styles: [".overlay{position:fixed;inset:0;background:var(--modal-backdrop);-webkit-backdrop-filter:blur(var(--modal-overlay-blur));backdrop-filter:blur(var(--modal-overlay-blur));z-index:var(--modal-overlay-z-index)}.modal{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);background:var(--modal-bg);color:var(--modal-text);padding:var(--modal-padding);border-radius:var(--modal-radius);box-shadow:var(--modal-shadow-depth);max-height:var(--modal-max-height);border:1px solid var(--modal-border-color);z-index:var(--modal-overlay-z-index);width:min(95vw,var(--modal-size-md));display:flex;flex-direction:column;overflow:hidden;animation:scaleIn .25s var(--easing-default)}.modal-sm{width:min(95vw,var(--modal-size-sm))}.modal-md{width:min(95vw,var(--modal-size-md))}.modal-lg{width:min(95vw,var(--modal-size-lg))}.modal-header{display:flex;align-items:center;gap:var(--modal-section-gap);position:relative;padding-bottom:var(--modal-section-gap);margin-bottom:var(--modal-section-gap);border-bottom:1px solid var(--modal-divider)}.modal-header h3{margin:0;font-size:var(--font-size-5);font-weight:var(--font-weight-semibold)}.modal-header .modal-icon{width:2.5rem;height:2.5rem;display:flex;align-items:center;justify-content:center;border-radius:50%;flex-shrink:0;background:var(--color-primary);color:var(--gray-50);animation:popIn .3s var(--easing-default)}.modal-header .close-btn{position:absolute;top:0;right:0}.modal-header .close-btn button{background:transparent;border:none;font-size:var(--font-size-4);cursor:pointer;color:var(--text-muted);padding:0;line-height:var(--line-height-tight);transition:color var(--duration-fast) var(--easing-default)}.modal-header .close-btn button:hover{color:var(--text-default)}.modal-success .modal-header h3{color:var(--modal-type-success-color)}.modal-warning .modal-header h3{color:var(--modal-type-warning-color)}.modal-error .modal-header h3{color:var(--modal-type-error-color)}.modal-info .modal-header h3{color:var(--modal-type-info-color)}.modal-success .modal-icon{background:var(--modal-type-success-color);color:var(--modal-type-success-contrast)}.modal-warning .modal-icon{background:var(--modal-type-warning-color);color:var(--modal-type-warning-contrast)}.modal-error .modal-icon{background:var(--modal-type-error-color);color:var(--modal-type-error-contrast)}.modal-info .modal-icon{background:var(--modal-type-info-color);color:var(--modal-type-info-contrast)}.modal-content{flex:1;overflow-y:auto;font-size:var(--font-size-2);display:flex;flex-direction:column;gap:var(--space-2);margin-bottom:var(--modal-section-gap)}.modal-footer{display:flex;align-items:center;justify-content:flex-end;gap:var(--space-3);padding-top:var(--space-2);padding-bottom:var(--modal-footer-padding);padding-inline:0;border-top:1px solid var(--modal-divider);flex-wrap:wrap}@media (max-width: 480px){.modal-footer{flex-direction:column;align-items:stretch;justify-content:center}.modal-footer ds-button{width:100%}}.modal-footer.with-shadow{box-shadow:var(--modal-footer-shadow, inset 0 1px 0 var(--modal-divider))}@keyframes scaleIn{0%{opacity:0;transform:translate(-50%,-50%) scale(.95)}to{opacity:1;transform:translate(-50%,-50%) scale(1)}}@keyframes popIn{0%{transform:scale(.8);opacity:0}to{transform:scale(1);opacity:1}}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }, { kind: "component", type: PrimitiveButton, selector: "primitive-button", inputs: ["type", "variant", "size", "disabled", "iconStart", "iconEnd", "appearance", "block"], outputs: ["clicked"] }] });
|
|
3770
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: DsModalComponent, isStandalone: true, selector: "ds-modal", inputs: { open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, closable: { classPropertyName: "closable", publicName: "closable", isSignal: true, isRequired: false, transformFunction: null }, closeOnBackdrop: { classPropertyName: "closeOnBackdrop", publicName: "closeOnBackdrop", isSignal: true, isRequired: false, transformFunction: null }, showIcon: { classPropertyName: "showIcon", publicName: "showIcon", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { opened: "opened", closed: "closed" }, host: { listeners: { "document:keydown.escape": "handleEscape($event)" } }, queries: [{ propertyName: "projectedIcon", first: true, predicate: ["icon"], descendants: true }], viewQueries: [{ propertyName: "modalContainer", first: true, predicate: ["modalContainer"], descendants: true }, { propertyName: "closeButton", first: true, predicate: ["closeButton"], descendants: true, read: ElementRef }], ngImport: i0, template: "@if (shouldRenderOverlay()) {\n <div class=\"overlay\" role=\"presentation\" (click)=\"onBackdropClick()\"></div>\n}\n@if (open()) {\n <div #modalContainer\n class=\"modal\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-labelledby]=\"modalTitleId\"\n [attr.aria-describedby]=\"modalDescId\"\n [ngClass]=\"modalClasses()\"\n >\n <header class=\"modal-header\">\n @if (showIcon()) {\n <div class=\"modal-icon\">\n <ng-content select=\"[icon]\"></ng-content>\n @if (shouldRenderDefaultIcon() && resolvedIcon()) {\n <fa-icon [icon]=\"resolvedIcon()!\"></fa-icon>\n }\n </div>\n }\n <h3 [id]=\"modalTitleId\">{{ title() }}</h3>\n @if (closable()) {\n <primitive-button\n #closeButton\n class=\"close-btn\"\n variant=\"ghost\"\n appearance=\"outline\"\n size=\"sm\"\n (clicked)=\"close()\"\n aria-label=\"Fermer la fen\u00EAtre\"\n >\u2715</primitive-button>\n }\n </header>\n <div class=\"modal-content\" (scroll)=\"onScroll($event)\">\n <section [id]=\"modalDescId\"><ng-content></ng-content></section>\n </div>\n <footer class=\"modal-footer\" [class.with-shadow]=\"isScrolled()\">\n <ng-content select=\"[footer]\"></ng-content>\n </footer>\n </div>\n}\n", styles: [".overlay{position:fixed;inset:0;background:var(--modal-backdrop);-webkit-backdrop-filter:blur(var(--modal-overlay-blur));backdrop-filter:blur(var(--modal-overlay-blur));z-index:var(--modal-overlay-z-index)}.modal{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);background:var(--modal-bg);color:var(--modal-text);padding:var(--modal-padding);border-radius:var(--modal-radius);box-shadow:var(--modal-shadow-depth);max-height:var(--modal-max-height);border:1px solid var(--modal-border-color);z-index:var(--modal-overlay-z-index);width:min(95vw,var(--modal-size-md));display:flex;flex-direction:column;overflow:hidden;animation:scaleIn .25s var(--easing-default)}.modal-sm{width:min(95vw,var(--modal-size-sm))}.modal-md{width:min(95vw,var(--modal-size-md))}.modal-lg{width:min(95vw,var(--modal-size-lg))}.modal-header{display:flex;align-items:center;gap:var(--modal-section-gap);position:relative;padding-bottom:var(--modal-section-gap);margin-bottom:var(--modal-section-gap);border-bottom:1px solid var(--modal-divider)}.modal-header h3{margin:0;font-size:var(--font-size-5);font-weight:var(--font-weight-semibold)}.modal-header .modal-icon{width:2.5rem;height:2.5rem;display:flex;align-items:center;justify-content:center;border-radius:50%;flex-shrink:0;background:var(--color-primary);color:var(--gray-50);animation:popIn .3s var(--easing-default)}.modal-header .close-btn{position:absolute;top:0;right:0}.modal-header .close-btn button{background:transparent;border:none;font-size:var(--font-size-4);cursor:pointer;color:var(--text-muted);padding:0;line-height:var(--line-height-tight);transition:color var(--duration-fast) var(--easing-default)}.modal-header .close-btn button:hover{color:var(--text-default)}.modal-success .modal-header h3{color:var(--modal-type-success-color)}.modal-warning .modal-header h3{color:var(--modal-type-warning-color)}.modal-error .modal-header h3{color:var(--modal-type-error-color)}.modal-info .modal-header h3{color:var(--modal-type-info-color)}.modal-success .modal-icon{background:var(--modal-type-success-color);color:var(--modal-type-success-contrast)}.modal-warning .modal-icon{background:var(--modal-type-warning-color);color:var(--modal-type-warning-contrast)}.modal-error .modal-icon{background:var(--modal-type-error-color);color:var(--modal-type-error-contrast)}.modal-info .modal-icon{background:var(--modal-type-info-color);color:var(--modal-type-info-contrast)}.modal-content{flex:1;overflow-y:auto;font-size:var(--font-size-2);display:flex;flex-direction:column;gap:var(--space-2);margin-bottom:var(--modal-section-gap)}.modal-footer{display:flex;align-items:center;justify-content:flex-end;gap:var(--space-3);padding-top:var(--space-2);padding-bottom:var(--modal-footer-padding);padding-inline:0;border-top:1px solid var(--modal-divider);flex-wrap:wrap}@media (max-width: 480px){.modal-footer{flex-direction:column;align-items:stretch;justify-content:center}.modal-footer ds-button{width:100%}}.modal-footer.with-shadow{box-shadow:var(--modal-footer-shadow, inset 0 1px 0 var(--modal-divider))}@keyframes scaleIn{0%{opacity:0;transform:translate(-50%,-50%) scale(.95)}to{opacity:1;transform:translate(-50%,-50%) scale(1)}}@keyframes popIn{0%{transform:scale(.8);opacity:0}to{transform:scale(1);opacity:1}}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"], outputs: ["iconChange", "titleChange", "animationChange", "maskChange", "flipChange", "sizeChange", "pullChange", "borderChange", "inverseChange", "symbolChange", "rotateChange", "fixedWidthChange", "transformChange", "a11yRoleChange"] }, { kind: "component", type: PrimitiveButton, selector: "primitive-button", inputs: ["type", "variant", "size", "disabled", "iconStart", "iconEnd", "appearance", "block"], outputs: ["clicked"] }] });
|
|
3771
3771
|
}
|
|
3772
3772
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DsModalComponent, decorators: [{
|
|
3773
3773
|
type: Component,
|
|
@@ -3942,7 +3942,7 @@ class DsPopover {
|
|
|
3942
3942
|
ngOnDestroy() {
|
|
3943
3943
|
this.close();
|
|
3944
3944
|
}
|
|
3945
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DsPopover, deps: [{ token: i0.ElementRef }, { token: i1$
|
|
3945
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DsPopover, deps: [{ token: i0.ElementRef }, { token: i1$3.Overlay }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
3946
3946
|
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.15", type: DsPopover, isStandalone: true, selector: "[dsPopover]", inputs: { dsPopover: { classPropertyName: "dsPopover", publicName: "dsPopover", isSignal: true, isRequired: true, transformFunction: null }, dsPopoverTrigger: { classPropertyName: "dsPopoverTrigger", publicName: "dsPopoverTrigger", isSignal: true, isRequired: false, transformFunction: null }, dsPopoverCloseOnBackdrop: { classPropertyName: "dsPopoverCloseOnBackdrop", publicName: "dsPopoverCloseOnBackdrop", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "onClick($event)", "mouseenter": "onMouseEnter()", "mouseleave": "onMouseLeave()", "document:keydown.escape": "onEscape()" } }, ngImport: i0 });
|
|
3947
3947
|
}
|
|
3948
3948
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DsPopover, decorators: [{
|
|
@@ -3951,7 +3951,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
3951
3951
|
selector: '[dsPopover]',
|
|
3952
3952
|
standalone: true,
|
|
3953
3953
|
}]
|
|
3954
|
-
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1$
|
|
3954
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1$3.Overlay }, { type: i0.ViewContainerRef }], propDecorators: { dsPopover: [{ type: i0.Input, args: [{ isSignal: true, alias: "dsPopover", required: true }] }], dsPopoverTrigger: [{ type: i0.Input, args: [{ isSignal: true, alias: "dsPopoverTrigger", required: false }] }], dsPopoverCloseOnBackdrop: [{ type: i0.Input, args: [{ isSignal: true, alias: "dsPopoverCloseOnBackdrop", required: false }] }], onClick: [{
|
|
3955
3955
|
type: HostListener,
|
|
3956
3956
|
args: ['click', ['$event']]
|
|
3957
3957
|
}], onMouseEnter: [{
|
|
@@ -4478,7 +4478,7 @@ class DsToastComponent {
|
|
|
4478
4478
|
}
|
|
4479
4479
|
}
|
|
4480
4480
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DsToastComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
4481
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: DsToastComponent, isStandalone: true, selector: "ds-toast", inputs: { message: { classPropertyName: "message", publicName: "message", isSignal: true, isRequired: true, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, duration: { classPropertyName: "duration", publicName: "duration", isSignal: true, isRequired: false, transformFunction: null }, closable: { classPropertyName: "closable", publicName: "closable", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, actionLabel: { classPropertyName: "actionLabel", publicName: "actionLabel", isSignal: true, isRequired: false, transformFunction: null }, pauseOnHover: { classPropertyName: "pauseOnHover", publicName: "pauseOnHover", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed", action: "action" }, ngImport: i0, template: "<div class=\"toast\" [ngClass]=\"[type(), position()]\" (mouseenter)=\"onMouseEnter()\" (mouseleave)=\"onMouseLeave()\">\n <fa-icon class=\"icon\" [icon]=\"currentIcon()\"></fa-icon>\n <span class=\"message\">{{ message() }}</span>\n\n @if (actionLabel()) {\n <button class=\"action-btn\" type=\"button\" (click)=\"handleAction()\">\n {{ actionLabel() }}\n </button>\n }\n\n @if (closable()) {\n <button class=\"close-btn\" (click)=\"close()\" aria-label=\"Close toast\">\n <fa-icon [icon]=\"faClose\" />\n </button>\n }\n</div>\n", styles: [".toast{display:flex;align-items:flex-start;gap:var(--toast-gap);padding:var(--toast-padding);border-radius:var(--toast-radius-base);color:var(--toast-text);border:var(--toast-border-width) solid var(--toast-border);box-shadow:var(--toast-shadow-depth);background:var(--toast-bg, var(--background-secondary));animation:fadeInUp .3s var(--easing-default);min-width:260px}.toast.success{background:var(--toast-success-bg);color:var(--toast-success-text);border-left:4px solid var(--toast-success-border)}.toast.warning{background:var(--toast-warning-bg);color:var(--toast-warning-text);border-left:4px solid var(--toast-warning-border)}.toast.error{background:var(--toast-error-bg);color:var(--toast-error-text);border-left:4px solid var(--toast-error-border)}.toast.info{background:var(--toast-info-bg);color:var(--toast-info-text);border-left:4px solid var(--toast-info-border)}.toast .icon{font-size:var(--toast-icon-size)}.toast .message{flex:1;font-size:var(--font-size-2);line-height:var(--line-height-normal);margin:0}.toast .action-btn{background:transparent;border:none;color:var(--color-primary);font-weight:var(--font-weight-semibold);cursor:pointer;padding:0;margin-left:var(--space-2);text-decoration:underline}.toast .action-btn:hover{opacity:.85}.toast .close-btn{background:none;border:none;cursor:pointer;font-size:var(--icon-size-sm);margin-left:auto;color:var(--text-muted);transition:color var(--duration-fast) var(--easing-default)}.toast .close-btn:hover{color:var(--text-default)}@keyframes fadeInUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }] });
|
|
4481
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: DsToastComponent, isStandalone: true, selector: "ds-toast", inputs: { message: { classPropertyName: "message", publicName: "message", isSignal: true, isRequired: true, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, duration: { classPropertyName: "duration", publicName: "duration", isSignal: true, isRequired: false, transformFunction: null }, closable: { classPropertyName: "closable", publicName: "closable", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, actionLabel: { classPropertyName: "actionLabel", publicName: "actionLabel", isSignal: true, isRequired: false, transformFunction: null }, pauseOnHover: { classPropertyName: "pauseOnHover", publicName: "pauseOnHover", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed", action: "action" }, ngImport: i0, template: "<div class=\"toast\" [ngClass]=\"[type(), position()]\" (mouseenter)=\"onMouseEnter()\" (mouseleave)=\"onMouseLeave()\">\n <fa-icon class=\"icon\" [icon]=\"currentIcon()\"></fa-icon>\n <span class=\"message\">{{ message() }}</span>\n\n @if (actionLabel()) {\n <button class=\"action-btn\" type=\"button\" (click)=\"handleAction()\">\n {{ actionLabel() }}\n </button>\n }\n\n @if (closable()) {\n <button class=\"close-btn\" (click)=\"close()\" aria-label=\"Close toast\">\n <fa-icon [icon]=\"faClose\" />\n </button>\n }\n</div>\n", styles: [".toast{display:flex;align-items:flex-start;gap:var(--toast-gap);padding:var(--toast-padding);border-radius:var(--toast-radius-base);color:var(--toast-text);border:var(--toast-border-width) solid var(--toast-border);box-shadow:var(--toast-shadow-depth);background:var(--toast-bg, var(--background-secondary));animation:fadeInUp .3s var(--easing-default);min-width:260px}.toast.success{background:var(--toast-success-bg);color:var(--toast-success-text);border-left:4px solid var(--toast-success-border)}.toast.warning{background:var(--toast-warning-bg);color:var(--toast-warning-text);border-left:4px solid var(--toast-warning-border)}.toast.error{background:var(--toast-error-bg);color:var(--toast-error-text);border-left:4px solid var(--toast-error-border)}.toast.info{background:var(--toast-info-bg);color:var(--toast-info-text);border-left:4px solid var(--toast-info-border)}.toast .icon{font-size:var(--toast-icon-size)}.toast .message{flex:1;font-size:var(--font-size-2);line-height:var(--line-height-normal);margin:0}.toast .action-btn{background:transparent;border:none;color:var(--color-primary);font-weight:var(--font-weight-semibold);cursor:pointer;padding:0;margin-left:var(--space-2);text-decoration:underline}.toast .action-btn:hover{opacity:.85}.toast .close-btn{background:none;border:none;cursor:pointer;font-size:var(--icon-size-sm);margin-left:auto;color:var(--text-muted);transition:color var(--duration-fast) var(--easing-default)}.toast .close-btn:hover{color:var(--text-default)}@keyframes fadeInUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"], outputs: ["iconChange", "titleChange", "animationChange", "maskChange", "flipChange", "sizeChange", "pullChange", "borderChange", "inverseChange", "symbolChange", "rotateChange", "fixedWidthChange", "transformChange", "a11yRoleChange"] }] });
|
|
4482
4482
|
}
|
|
4483
4483
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DsToastComponent, decorators: [{
|
|
4484
4484
|
type: Component,
|
|
@@ -4812,7 +4812,7 @@ class DsTooltip {
|
|
|
4812
4812
|
this.clearHideTimeout();
|
|
4813
4813
|
this.hide();
|
|
4814
4814
|
}
|
|
4815
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DsTooltip, deps: [{ token: i0.ElementRef }, { token: i1$
|
|
4815
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DsTooltip, deps: [{ token: i0.ElementRef }, { token: i1$3.Overlay }, { token: i0.ViewContainerRef }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Directive });
|
|
4816
4816
|
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.15", type: DsTooltip, isStandalone: true, selector: "[dsTooltip]", inputs: { dsTooltip: { classPropertyName: "dsTooltip", publicName: "dsTooltip", isSignal: true, isRequired: true, transformFunction: null } }, host: { listeners: { "mouseenter": "onMouseEnter()", "mouseleave": "onMouseLeave()", "focus": "onFocus()", "blur": "onBlur()" } }, ngImport: i0 });
|
|
4817
4817
|
}
|
|
4818
4818
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DsTooltip, decorators: [{
|
|
@@ -4821,7 +4821,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
4821
4821
|
selector: '[dsTooltip]',
|
|
4822
4822
|
standalone: true,
|
|
4823
4823
|
}]
|
|
4824
|
-
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1$
|
|
4824
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1$3.Overlay }, { type: i0.ViewContainerRef }, { type: i0.Injector }], propDecorators: { dsTooltip: [{ type: i0.Input, args: [{ isSignal: true, alias: "dsTooltip", required: true }] }], onMouseEnter: [{
|
|
4825
4825
|
type: HostListener,
|
|
4826
4826
|
args: ['mouseenter']
|
|
4827
4827
|
}], onMouseLeave: [{
|
|
@@ -5034,7 +5034,7 @@ class DsAccordion {
|
|
|
5034
5034
|
return `accordion-content-${item.id}`;
|
|
5035
5035
|
}
|
|
5036
5036
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DsAccordion, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
5037
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: DsAccordion, isStandalone: true, selector: "ds-accordion", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: true, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, expandedIds: { classPropertyName: "expandedIds", publicName: "expandedIds", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemChange: "itemChange" }, ngImport: i0, template: "<div [ngClass]=\"containerClasses()\">\n @for (item of items(); track item.id; let i = $index) {\n <div [ngClass]=\"getItemClasses(item)\">\n <!-- Header -->\n <button\n type=\"button\"\n class=\"ds-accordion__header\"\n [id]=\"getHeaderId(item)\"\n [attr.aria-expanded]=\"isExpanded(item.id)\"\n [attr.aria-controls]=\"getContentId(item)\"\n [disabled]=\"disabled() || item.disabled\"\n (click)=\"toggleItem(item)\"\n (keydown)=\"onKeydown($event, item, i)\">\n <span class=\"ds-accordion__title\">{{ item.header }}</span>\n <fa-icon\n class=\"ds-accordion__icon\"\n [icon]=\"faChevronDown\"\n [class.ds-accordion__icon--rotated]=\"isExpanded(item.id)\"\n aria-hidden=\"true\">\n </fa-icon>\n </button>\n\n <!-- Contenu -->\n <div\n class=\"ds-accordion__content\"\n [id]=\"getContentId(item)\"\n role=\"region\"\n [attr.aria-labelledby]=\"getHeaderId(item)\"\n [attr.aria-hidden]=\"!isExpanded(item.id)\"\n [class.ds-accordion__content--expanded]=\"isExpanded(item.id)\">\n <div class=\"ds-accordion__body\">\n {{ item.content }}\n </div>\n </div>\n </div>\n }\n</div>\n", styles: ["@charset \"UTF-8\";.ds-accordion{font-family:var(--font-family-base)}.ds-accordion__item--disabled{opacity:.5;pointer-events:none}.ds-accordion__header{display:flex;align-items:center;justify-content:space-between;width:100%;padding:var(--accordion-header-padding-md, var(--space-4));background-color:var(--accordion-header-bg, var(--background-main));border:none;cursor:pointer;text-align:left;font-family:inherit;font-size:var(--accordion-header-font-size-md, var(--font-size-3));font-weight:var(--font-weight-medium);color:var(--accordion-header-text, var(--text-default));transition:background-color var(--duration-fast) ease}.ds-accordion__header:hover:not(:disabled){background-color:var(--accordion-header-hover-bg, var(--surface-hover))}.ds-accordion__header:focus{outline:none;box-shadow:inset 0 0 0 2px var(--accordion-focus-color, var(--color-primary))}.ds-accordion__header:disabled{cursor:not-allowed}.ds-accordion__title{flex:1}.ds-accordion__icon{flex-shrink:0;transition:transform var(--duration-normal) ease;color:var(--accordion-icon-color, var(--text-muted))}.ds-accordion__icon--rotated{transform:rotate(180deg)}.ds-accordion__content{max-height:0;overflow:hidden;transition:max-height var(--duration-normal) ease-out}.ds-accordion__content--expanded{max-height:var(--accordion-content-max-height)}.ds-accordion__body{padding:var(--accordion-body-padding-md, var(--space-4));color:var(--accordion-body-text, var(--text-muted));font-size:var(--accordion-body-font-size-md, var(--font-size-2));line-height:var(--line-height-relaxed)}.ds-accordion--default .ds-accordion__item{border-bottom:var(--accordion-border-width) solid var(--accordion-border-color, var(--border-color))}.ds-accordion--default .ds-accordion__item:last-child{border-bottom:none}.ds-accordion--bordered{border:var(--accordion-border-width) solid var(--accordion-border-color, var(--border-color));border-radius:var(--accordion-radius, var(--radius-2));overflow:hidden}.ds-accordion--bordered .ds-accordion__item{border-bottom:var(--accordion-border-width) solid var(--accordion-border-color, var(--border-color))}.ds-accordion--bordered .ds-accordion__item:last-child{border-bottom:none}.ds-accordion--separated .ds-accordion__item{margin-bottom:var(--accordion-item-gap, var(--space-2));border:var(--accordion-border-width) solid var(--accordion-border-color, var(--border-color));border-radius:var(--accordion-radius, var(--radius-2));overflow:hidden}.ds-accordion--separated .ds-accordion__item:last-child{margin-bottom:0}.ds-accordion--separated .ds-accordion__item--expanded{border-color:var(--accordion-expanded-border-color, var(--color-primary))}.ds-accordion--sm .ds-accordion__header{padding:var(--accordion-header-padding-sm, var(--space-2) var(--space-3));font-size:var(--accordion-header-font-size-sm, var(--font-size-2))}.ds-accordion--sm .ds-accordion__body{padding:var(--accordion-body-padding-sm, var(--space-2) var(--space-3));font-size:var(--accordion-body-font-size-sm, var(--font-size-1))}.ds-accordion--lg .ds-accordion__header{padding:var(--accordion-header-padding-lg, var(--space-5) var(--space-6));font-size:var(--accordion-header-font-size-lg, var(--font-size-4))}.ds-accordion--lg .ds-accordion__body{padding:var(--accordion-body-padding-lg, var(--space-5) var(--space-6));font-size:var(--accordion-body-font-size-lg, var(--font-size-3))}.ds-accordion--disabled{opacity:.5;pointer-events:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FontAwesomeModule }, { kind: "component", type:
|
|
5037
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: DsAccordion, isStandalone: true, selector: "ds-accordion", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: true, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, expandedIds: { classPropertyName: "expandedIds", publicName: "expandedIds", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemChange: "itemChange" }, ngImport: i0, template: "<div [ngClass]=\"containerClasses()\">\n @for (item of items(); track item.id; let i = $index) {\n <div [ngClass]=\"getItemClasses(item)\">\n <!-- Header -->\n <button\n type=\"button\"\n class=\"ds-accordion__header\"\n [id]=\"getHeaderId(item)\"\n [attr.aria-expanded]=\"isExpanded(item.id)\"\n [attr.aria-controls]=\"getContentId(item)\"\n [disabled]=\"disabled() || item.disabled\"\n (click)=\"toggleItem(item)\"\n (keydown)=\"onKeydown($event, item, i)\">\n <span class=\"ds-accordion__title\">{{ item.header }}</span>\n <fa-icon\n class=\"ds-accordion__icon\"\n [icon]=\"faChevronDown\"\n [class.ds-accordion__icon--rotated]=\"isExpanded(item.id)\"\n aria-hidden=\"true\">\n </fa-icon>\n </button>\n\n <!-- Contenu -->\n <div\n class=\"ds-accordion__content\"\n [id]=\"getContentId(item)\"\n role=\"region\"\n [attr.aria-labelledby]=\"getHeaderId(item)\"\n [attr.aria-hidden]=\"!isExpanded(item.id)\"\n [class.ds-accordion__content--expanded]=\"isExpanded(item.id)\">\n <div class=\"ds-accordion__body\">\n {{ item.content }}\n </div>\n </div>\n </div>\n }\n</div>\n", styles: ["@charset \"UTF-8\";.ds-accordion{font-family:var(--font-family-base)}.ds-accordion__item--disabled{opacity:.5;pointer-events:none}.ds-accordion__header{display:flex;align-items:center;justify-content:space-between;width:100%;padding:var(--accordion-header-padding-md, var(--space-4));background-color:var(--accordion-header-bg, var(--background-main));border:none;cursor:pointer;text-align:left;font-family:inherit;font-size:var(--accordion-header-font-size-md, var(--font-size-3));font-weight:var(--font-weight-medium);color:var(--accordion-header-text, var(--text-default));transition:background-color var(--duration-fast) ease}.ds-accordion__header:hover:not(:disabled){background-color:var(--accordion-header-hover-bg, var(--surface-hover))}.ds-accordion__header:focus{outline:none;box-shadow:inset 0 0 0 2px var(--accordion-focus-color, var(--color-primary))}.ds-accordion__header:disabled{cursor:not-allowed}.ds-accordion__title{flex:1}.ds-accordion__icon{flex-shrink:0;transition:transform var(--duration-normal) ease;color:var(--accordion-icon-color, var(--text-muted))}.ds-accordion__icon--rotated{transform:rotate(180deg)}.ds-accordion__content{max-height:0;overflow:hidden;transition:max-height var(--duration-normal) ease-out}.ds-accordion__content--expanded{max-height:var(--accordion-content-max-height)}.ds-accordion__body{padding:var(--accordion-body-padding-md, var(--space-4));color:var(--accordion-body-text, var(--text-muted));font-size:var(--accordion-body-font-size-md, var(--font-size-2));line-height:var(--line-height-relaxed)}.ds-accordion--default .ds-accordion__item{border-bottom:var(--accordion-border-width) solid var(--accordion-border-color, var(--border-color))}.ds-accordion--default .ds-accordion__item:last-child{border-bottom:none}.ds-accordion--bordered{border:var(--accordion-border-width) solid var(--accordion-border-color, var(--border-color));border-radius:var(--accordion-radius, var(--radius-2));overflow:hidden}.ds-accordion--bordered .ds-accordion__item{border-bottom:var(--accordion-border-width) solid var(--accordion-border-color, var(--border-color))}.ds-accordion--bordered .ds-accordion__item:last-child{border-bottom:none}.ds-accordion--separated .ds-accordion__item{margin-bottom:var(--accordion-item-gap, var(--space-2));border:var(--accordion-border-width) solid var(--accordion-border-color, var(--border-color));border-radius:var(--accordion-radius, var(--radius-2));overflow:hidden}.ds-accordion--separated .ds-accordion__item:last-child{margin-bottom:0}.ds-accordion--separated .ds-accordion__item--expanded{border-color:var(--accordion-expanded-border-color, var(--color-primary))}.ds-accordion--sm .ds-accordion__header{padding:var(--accordion-header-padding-sm, var(--space-2) var(--space-3));font-size:var(--accordion-header-font-size-sm, var(--font-size-2))}.ds-accordion--sm .ds-accordion__body{padding:var(--accordion-body-padding-sm, var(--space-2) var(--space-3));font-size:var(--accordion-body-font-size-sm, var(--font-size-1))}.ds-accordion--lg .ds-accordion__header{padding:var(--accordion-header-padding-lg, var(--space-5) var(--space-6));font-size:var(--accordion-header-font-size-lg, var(--font-size-4))}.ds-accordion--lg .ds-accordion__body{padding:var(--accordion-body-padding-lg, var(--space-5) var(--space-6));font-size:var(--accordion-body-font-size-lg, var(--font-size-3))}.ds-accordion--disabled{opacity:.5;pointer-events:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FontAwesomeModule }, { kind: "component", type: i1$1.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"], outputs: ["iconChange", "titleChange", "animationChange", "maskChange", "flipChange", "sizeChange", "pullChange", "borderChange", "inverseChange", "symbolChange", "rotateChange", "fixedWidthChange", "transformChange", "a11yRoleChange"] }] });
|
|
5038
5038
|
}
|
|
5039
5039
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DsAccordion, decorators: [{
|
|
5040
5040
|
type: Component,
|
|
@@ -5300,7 +5300,7 @@ class DsPagination {
|
|
|
5300
5300
|
}
|
|
5301
5301
|
}
|
|
5302
5302
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DsPagination, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
5303
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: DsPagination, isStandalone: true, selector: "ds-pagination", inputs: { totalItems: { classPropertyName: "totalItems", publicName: "totalItems", isSignal: true, isRequired: true, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: true, isRequired: false, transformFunction: null }, currentPage: { classPropertyName: "currentPage", publicName: "currentPage", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, showFirstLast: { classPropertyName: "showFirstLast", publicName: "showFirstLast", isSignal: true, isRequired: false, transformFunction: null }, showPageSizeSelector: { classPropertyName: "showPageSizeSelector", publicName: "showPageSizeSelector", isSignal: true, isRequired: false, transformFunction: null }, pageSizeOptions: { classPropertyName: "pageSizeOptions", publicName: "pageSizeOptions", isSignal: true, isRequired: false, transformFunction: null }, maxVisiblePages: { classPropertyName: "maxVisiblePages", publicName: "maxVisiblePages", isSignal: true, isRequired: false, transformFunction: null }, showInfo: { classPropertyName: "showInfo", publicName: "showInfo", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { pageChange: "pageChange", pageSizeChange: "pageSizeChange" }, ngImport: i0, template: "<nav\n [ngClass]=\"containerClasses()\"\n [attr.aria-label]=\"ariaLabel()\"\n role=\"navigation\">\n\n <!-- Info: X - Y sur Z -->\n @if (showInfo()) {\n <span class=\"ds-pagination__info\">\n {{ startItem() }} - {{ endItem() }} sur {{ totalItems() }}\n </span>\n }\n\n <!-- S\u00E9lecteur de taille de page -->\n @if (showPageSizeSelector()) {\n <div class=\"ds-pagination__size-selector\">\n <label class=\"ds-pagination__size-label\" for=\"page-size\">\n Par page:\n </label>\n <select\n id=\"page-size\"\n class=\"ds-pagination__size-select\"\n [value]=\"pageSize()\"\n [disabled]=\"disabled()\"\n (change)=\"onPageSizeChange($event)\">\n @for (option of pageSizeOptions(); track option) {\n <option [value]=\"option\">{{ option }}</option>\n }\n </select>\n </div>\n }\n\n <!-- Navigation -->\n <div class=\"ds-pagination__nav\">\n <!-- Premi\u00E8re page -->\n @if (showFirstLast()) {\n <button\n type=\"button\"\n class=\"ds-pagination__btn ds-pagination__btn--first\"\n [disabled]=\"!canGoPrevious()\"\n [attr.aria-label]=\"'Aller \u00E0 la premi\u00E8re page'\"\n (click)=\"goToFirst()\">\n <fa-icon [icon]=\"faAnglesLeft\" aria-hidden=\"true\"></fa-icon>\n </button>\n }\n\n <!-- Page pr\u00E9c\u00E9dente -->\n <button\n type=\"button\"\n class=\"ds-pagination__btn ds-pagination__btn--prev\"\n [disabled]=\"!canGoPrevious()\"\n [attr.aria-label]=\"'Aller \u00E0 la page pr\u00E9c\u00E9dente'\"\n (click)=\"goToPrevious()\">\n <fa-icon [icon]=\"faChevronLeft\" aria-hidden=\"true\"></fa-icon>\n </button>\n\n <!-- Ellipsis d\u00E9but -->\n @if (showStartEllipsis()) {\n <span class=\"ds-pagination__ellipsis\" aria-hidden=\"true\">...</span>\n }\n\n <!-- Pages -->\n @for (page of visiblePages(); track page) {\n <button\n type=\"button\"\n class=\"ds-pagination__btn ds-pagination__btn--page\"\n [class.ds-pagination__btn--active]=\"page === normalizedCurrentPage()\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"'Page ' + page\"\n [attr.aria-current]=\"page === normalizedCurrentPage() ? 'page' : null\"\n (click)=\"goToPage(page)\"\n (keydown)=\"onPageKeydown($event, page)\">\n {{ page }}\n </button>\n }\n\n <!-- Ellipsis fin -->\n @if (showEndEllipsis()) {\n <span class=\"ds-pagination__ellipsis\" aria-hidden=\"true\">...</span>\n }\n\n <!-- Page suivante -->\n <button\n type=\"button\"\n class=\"ds-pagination__btn ds-pagination__btn--next\"\n [disabled]=\"!canGoNext()\"\n [attr.aria-label]=\"'Aller \u00E0 la page suivante'\"\n (click)=\"goToNext()\">\n <fa-icon [icon]=\"faChevronRight\" aria-hidden=\"true\"></fa-icon>\n </button>\n\n <!-- Derni\u00E8re page -->\n @if (showFirstLast()) {\n <button\n type=\"button\"\n class=\"ds-pagination__btn ds-pagination__btn--last\"\n [disabled]=\"!canGoNext()\"\n [attr.aria-label]=\"'Aller \u00E0 la derni\u00E8re page'\"\n (click)=\"goToLast()\">\n <fa-icon [icon]=\"faAnglesRight\" aria-hidden=\"true\"></fa-icon>\n </button>\n }\n </div>\n</nav>\n", styles: ["@charset \"UTF-8\";.ds-pagination{display:flex;align-items:center;gap:var(--pagination-gap-md, var(--space-4));font-family:var(--font-family-base)}.ds-pagination__info{color:var(--pagination-info-color, var(--text-muted));font-size:var(--pagination-font-size-md, var(--font-size-2));white-space:nowrap}.ds-pagination__size-selector{display:flex;align-items:center;gap:var(--space-2)}.ds-pagination__size-label{color:var(--pagination-info-color, var(--text-muted));font-size:var(--pagination-font-size-md, var(--font-size-2));white-space:nowrap}.ds-pagination__size-select{padding:var(--pagination-btn-padding-md, var(--space-1)) var(--space-2);border:1px solid var(--pagination-btn-border, var(--border-color));border-radius:var(--pagination-btn-radius, var(--radius-2));background-color:var(--pagination-btn-bg, var(--background-main));color:var(--pagination-btn-text, var(--text-default));font-size:var(--pagination-font-size-md, var(--font-size-2));cursor:pointer;transition:border-color var(--duration-fast) ease,box-shadow var(--duration-fast) ease}.ds-pagination__size-select:hover:not(:disabled){border-color:var(--pagination-btn-hover-border, var(--color-primary))}.ds-pagination__size-select:focus{outline:none;border-color:var(--pagination-btn-focus-border, var(--color-primary));box-shadow:var(--input-focus-shadow)}.ds-pagination__size-select:disabled{opacity:.5;cursor:not-allowed}.ds-pagination__nav{display:flex;align-items:center;gap:var(--pagination-gap-sm, var(--space-1))}.ds-pagination__btn{display:inline-flex;align-items:center;justify-content:center;min-width:var(--pagination-btn-size-md);height:var(--pagination-btn-size-md);padding:var(--pagination-btn-padding-md, var(--space-1)) var(--space-2);border:1px solid var(--pagination-btn-border, var(--border-color));border-radius:var(--pagination-btn-radius, var(--radius-2));background-color:var(--pagination-btn-bg, var(--background-main));color:var(--pagination-btn-text, var(--text-default));font-size:var(--pagination-font-size-md, var(--font-size-2));font-weight:var(--font-weight-medium);cursor:pointer;transition:all var(--duration-fast) ease}.ds-pagination__btn:hover:not(:disabled):not(.ds-pagination__btn--active){background-color:var(--pagination-btn-hover-bg, var(--surface-hover));border-color:var(--pagination-btn-hover-border, var(--color-primary))}.ds-pagination__btn:focus{outline:none;border-color:var(--pagination-btn-focus-border, var(--color-primary));box-shadow:var(--input-focus-shadow)}.ds-pagination__btn:disabled{opacity:.5;cursor:not-allowed}.ds-pagination__btn--active{background-color:var(--pagination-active-bg, var(--color-primary));border-color:var(--pagination-active-bg, var(--color-primary));color:var(--pagination-active-text, var(--gray-50))}.ds-pagination__btn--active:hover{background-color:var(--pagination-active-hover-bg, var(--btn-primary-hover-bg))}.ds-pagination__btn--first,.ds-pagination__btn--last,.ds-pagination__btn--prev,.ds-pagination__btn--next{min-width:var(--pagination-btn-size-md);padding:var(--pagination-btn-padding-md, var(--space-1))}.ds-pagination__ellipsis{display:inline-flex;align-items:center;justify-content:center;min-width:var(--pagination-btn-size-md);height:var(--pagination-btn-size-md);color:var(--pagination-info-color, var(--text-muted));font-size:var(--pagination-font-size-md, var(--font-size-2))}.ds-pagination--sm{gap:var(--pagination-gap-sm, var(--space-2))}.ds-pagination--sm .ds-pagination__info,.ds-pagination--sm .ds-pagination__size-label{font-size:var(--pagination-font-size-sm, var(--font-size-1))}.ds-pagination--sm .ds-pagination__btn{min-width:var(--pagination-btn-size-sm);height:var(--pagination-btn-size-sm);font-size:var(--pagination-font-size-sm, var(--font-size-1));padding:var(--pagination-btn-padding-sm, var(--space-1))}.ds-pagination--sm .ds-pagination__ellipsis{min-width:var(--pagination-btn-size-sm);height:var(--pagination-btn-size-sm);font-size:var(--pagination-font-size-sm, var(--font-size-1))}.ds-pagination--sm .ds-pagination__size-select{font-size:var(--pagination-font-size-sm, var(--font-size-1));padding:var(--pagination-btn-padding-sm, var(--space-1))}.ds-pagination--lg{gap:var(--pagination-gap-lg, var(--space-6))}.ds-pagination--lg .ds-pagination__info,.ds-pagination--lg .ds-pagination__size-label{font-size:var(--pagination-font-size-lg, var(--font-size-3))}.ds-pagination--lg .ds-pagination__btn{min-width:var(--pagination-btn-size-lg);height:var(--pagination-btn-size-lg);font-size:var(--pagination-font-size-lg, var(--font-size-3));padding:var(--pagination-btn-padding-lg, var(--space-2)) var(--space-3)}.ds-pagination--lg .ds-pagination__ellipsis{min-width:var(--pagination-btn-size-lg);height:var(--pagination-btn-size-lg);font-size:var(--pagination-font-size-lg, var(--font-size-3))}.ds-pagination--lg .ds-pagination__size-select{font-size:var(--pagination-font-size-lg, var(--font-size-3));padding:var(--pagination-btn-padding-lg, var(--space-2)) var(--space-3)}.ds-pagination--disabled{opacity:.5;pointer-events:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FontAwesomeModule }, { kind: "component", type: i2.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }] });
|
|
5303
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: DsPagination, isStandalone: true, selector: "ds-pagination", inputs: { totalItems: { classPropertyName: "totalItems", publicName: "totalItems", isSignal: true, isRequired: true, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: true, isRequired: false, transformFunction: null }, currentPage: { classPropertyName: "currentPage", publicName: "currentPage", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, showFirstLast: { classPropertyName: "showFirstLast", publicName: "showFirstLast", isSignal: true, isRequired: false, transformFunction: null }, showPageSizeSelector: { classPropertyName: "showPageSizeSelector", publicName: "showPageSizeSelector", isSignal: true, isRequired: false, transformFunction: null }, pageSizeOptions: { classPropertyName: "pageSizeOptions", publicName: "pageSizeOptions", isSignal: true, isRequired: false, transformFunction: null }, maxVisiblePages: { classPropertyName: "maxVisiblePages", publicName: "maxVisiblePages", isSignal: true, isRequired: false, transformFunction: null }, showInfo: { classPropertyName: "showInfo", publicName: "showInfo", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { pageChange: "pageChange", pageSizeChange: "pageSizeChange" }, ngImport: i0, template: "<nav\n [ngClass]=\"containerClasses()\"\n [attr.aria-label]=\"ariaLabel()\"\n role=\"navigation\">\n\n <!-- Info: X - Y sur Z -->\n @if (showInfo()) {\n <span class=\"ds-pagination__info\">\n {{ startItem() }} - {{ endItem() }} sur {{ totalItems() }}\n </span>\n }\n\n <!-- S\u00E9lecteur de taille de page -->\n @if (showPageSizeSelector()) {\n <div class=\"ds-pagination__size-selector\">\n <label class=\"ds-pagination__size-label\" for=\"page-size\">\n Par page:\n </label>\n <select\n id=\"page-size\"\n class=\"ds-pagination__size-select\"\n [value]=\"pageSize()\"\n [disabled]=\"disabled()\"\n (change)=\"onPageSizeChange($event)\">\n @for (option of pageSizeOptions(); track option) {\n <option [value]=\"option\">{{ option }}</option>\n }\n </select>\n </div>\n }\n\n <!-- Navigation -->\n <div class=\"ds-pagination__nav\">\n <!-- Premi\u00E8re page -->\n @if (showFirstLast()) {\n <button\n type=\"button\"\n class=\"ds-pagination__btn ds-pagination__btn--first\"\n [disabled]=\"!canGoPrevious()\"\n [attr.aria-label]=\"'Aller \u00E0 la premi\u00E8re page'\"\n (click)=\"goToFirst()\">\n <fa-icon [icon]=\"faAnglesLeft\" aria-hidden=\"true\"></fa-icon>\n </button>\n }\n\n <!-- Page pr\u00E9c\u00E9dente -->\n <button\n type=\"button\"\n class=\"ds-pagination__btn ds-pagination__btn--prev\"\n [disabled]=\"!canGoPrevious()\"\n [attr.aria-label]=\"'Aller \u00E0 la page pr\u00E9c\u00E9dente'\"\n (click)=\"goToPrevious()\">\n <fa-icon [icon]=\"faChevronLeft\" aria-hidden=\"true\"></fa-icon>\n </button>\n\n <!-- Ellipsis d\u00E9but -->\n @if (showStartEllipsis()) {\n <span class=\"ds-pagination__ellipsis\" aria-hidden=\"true\">...</span>\n }\n\n <!-- Pages -->\n @for (page of visiblePages(); track page) {\n <button\n type=\"button\"\n class=\"ds-pagination__btn ds-pagination__btn--page\"\n [class.ds-pagination__btn--active]=\"page === normalizedCurrentPage()\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"'Page ' + page\"\n [attr.aria-current]=\"page === normalizedCurrentPage() ? 'page' : null\"\n (click)=\"goToPage(page)\"\n (keydown)=\"onPageKeydown($event, page)\">\n {{ page }}\n </button>\n }\n\n <!-- Ellipsis fin -->\n @if (showEndEllipsis()) {\n <span class=\"ds-pagination__ellipsis\" aria-hidden=\"true\">...</span>\n }\n\n <!-- Page suivante -->\n <button\n type=\"button\"\n class=\"ds-pagination__btn ds-pagination__btn--next\"\n [disabled]=\"!canGoNext()\"\n [attr.aria-label]=\"'Aller \u00E0 la page suivante'\"\n (click)=\"goToNext()\">\n <fa-icon [icon]=\"faChevronRight\" aria-hidden=\"true\"></fa-icon>\n </button>\n\n <!-- Derni\u00E8re page -->\n @if (showFirstLast()) {\n <button\n type=\"button\"\n class=\"ds-pagination__btn ds-pagination__btn--last\"\n [disabled]=\"!canGoNext()\"\n [attr.aria-label]=\"'Aller \u00E0 la derni\u00E8re page'\"\n (click)=\"goToLast()\">\n <fa-icon [icon]=\"faAnglesRight\" aria-hidden=\"true\"></fa-icon>\n </button>\n }\n </div>\n</nav>\n", styles: ["@charset \"UTF-8\";.ds-pagination{display:flex;align-items:center;gap:var(--pagination-gap-md, var(--space-4));font-family:var(--font-family-base)}.ds-pagination__info{color:var(--pagination-info-color, var(--text-muted));font-size:var(--pagination-font-size-md, var(--font-size-2));white-space:nowrap}.ds-pagination__size-selector{display:flex;align-items:center;gap:var(--space-2)}.ds-pagination__size-label{color:var(--pagination-info-color, var(--text-muted));font-size:var(--pagination-font-size-md, var(--font-size-2));white-space:nowrap}.ds-pagination__size-select{padding:var(--pagination-btn-padding-md, var(--space-1)) var(--space-2);border:1px solid var(--pagination-btn-border, var(--border-color));border-radius:var(--pagination-btn-radius, var(--radius-2));background-color:var(--pagination-btn-bg, var(--background-main));color:var(--pagination-btn-text, var(--text-default));font-size:var(--pagination-font-size-md, var(--font-size-2));cursor:pointer;transition:border-color var(--duration-fast) ease,box-shadow var(--duration-fast) ease}.ds-pagination__size-select:hover:not(:disabled){border-color:var(--pagination-btn-hover-border, var(--color-primary))}.ds-pagination__size-select:focus{outline:none;border-color:var(--pagination-btn-focus-border, var(--color-primary));box-shadow:var(--input-focus-shadow)}.ds-pagination__size-select:disabled{opacity:.5;cursor:not-allowed}.ds-pagination__nav{display:flex;align-items:center;gap:var(--pagination-gap-sm, var(--space-1))}.ds-pagination__btn{display:inline-flex;align-items:center;justify-content:center;min-width:var(--pagination-btn-size-md);height:var(--pagination-btn-size-md);padding:var(--pagination-btn-padding-md, var(--space-1)) var(--space-2);border:1px solid var(--pagination-btn-border, var(--border-color));border-radius:var(--pagination-btn-radius, var(--radius-2));background-color:var(--pagination-btn-bg, var(--background-main));color:var(--pagination-btn-text, var(--text-default));font-size:var(--pagination-font-size-md, var(--font-size-2));font-weight:var(--font-weight-medium);cursor:pointer;transition:all var(--duration-fast) ease}.ds-pagination__btn:hover:not(:disabled):not(.ds-pagination__btn--active){background-color:var(--pagination-btn-hover-bg, var(--surface-hover));border-color:var(--pagination-btn-hover-border, var(--color-primary))}.ds-pagination__btn:focus{outline:none;border-color:var(--pagination-btn-focus-border, var(--color-primary));box-shadow:var(--input-focus-shadow)}.ds-pagination__btn:disabled{opacity:.5;cursor:not-allowed}.ds-pagination__btn--active{background-color:var(--pagination-active-bg, var(--color-primary));border-color:var(--pagination-active-bg, var(--color-primary));color:var(--pagination-active-text, var(--gray-50))}.ds-pagination__btn--active:hover{background-color:var(--pagination-active-hover-bg, var(--btn-primary-hover-bg))}.ds-pagination__btn--first,.ds-pagination__btn--last,.ds-pagination__btn--prev,.ds-pagination__btn--next{min-width:var(--pagination-btn-size-md);padding:var(--pagination-btn-padding-md, var(--space-1))}.ds-pagination__ellipsis{display:inline-flex;align-items:center;justify-content:center;min-width:var(--pagination-btn-size-md);height:var(--pagination-btn-size-md);color:var(--pagination-info-color, var(--text-muted));font-size:var(--pagination-font-size-md, var(--font-size-2))}.ds-pagination--sm{gap:var(--pagination-gap-sm, var(--space-2))}.ds-pagination--sm .ds-pagination__info,.ds-pagination--sm .ds-pagination__size-label{font-size:var(--pagination-font-size-sm, var(--font-size-1))}.ds-pagination--sm .ds-pagination__btn{min-width:var(--pagination-btn-size-sm);height:var(--pagination-btn-size-sm);font-size:var(--pagination-font-size-sm, var(--font-size-1));padding:var(--pagination-btn-padding-sm, var(--space-1))}.ds-pagination--sm .ds-pagination__ellipsis{min-width:var(--pagination-btn-size-sm);height:var(--pagination-btn-size-sm);font-size:var(--pagination-font-size-sm, var(--font-size-1))}.ds-pagination--sm .ds-pagination__size-select{font-size:var(--pagination-font-size-sm, var(--font-size-1));padding:var(--pagination-btn-padding-sm, var(--space-1))}.ds-pagination--lg{gap:var(--pagination-gap-lg, var(--space-6))}.ds-pagination--lg .ds-pagination__info,.ds-pagination--lg .ds-pagination__size-label{font-size:var(--pagination-font-size-lg, var(--font-size-3))}.ds-pagination--lg .ds-pagination__btn{min-width:var(--pagination-btn-size-lg);height:var(--pagination-btn-size-lg);font-size:var(--pagination-font-size-lg, var(--font-size-3));padding:var(--pagination-btn-padding-lg, var(--space-2)) var(--space-3)}.ds-pagination--lg .ds-pagination__ellipsis{min-width:var(--pagination-btn-size-lg);height:var(--pagination-btn-size-lg);font-size:var(--pagination-font-size-lg, var(--font-size-3))}.ds-pagination--lg .ds-pagination__size-select{font-size:var(--pagination-font-size-lg, var(--font-size-3));padding:var(--pagination-btn-padding-lg, var(--space-2)) var(--space-3)}.ds-pagination--disabled{opacity:.5;pointer-events:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FontAwesomeModule }, { kind: "component", type: i1$1.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"], outputs: ["iconChange", "titleChange", "animationChange", "maskChange", "flipChange", "sizeChange", "pullChange", "borderChange", "inverseChange", "symbolChange", "rotateChange", "fixedWidthChange", "transformChange", "a11yRoleChange"] }] });
|
|
5304
5304
|
}
|
|
5305
5305
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DsPagination, decorators: [{
|
|
5306
5306
|
type: Component,
|
|
@@ -5537,7 +5537,7 @@ class DsStepper {
|
|
|
5537
5537
|
return `Étape ${index + 1}: ${step.label} - ${stateLabels[state]}`;
|
|
5538
5538
|
}
|
|
5539
5539
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DsStepper, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
5540
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: DsStepper, isStandalone: true, selector: "ds-stepper", inputs: { steps: { classPropertyName: "steps", publicName: "steps", isSignal: true, isRequired: true, transformFunction: null }, activeStep: { classPropertyName: "activeStep", publicName: "activeStep", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, clickable: { classPropertyName: "clickable", publicName: "clickable", isSignal: true, isRequired: false, transformFunction: null }, linear: { classPropertyName: "linear", publicName: "linear", isSignal: true, isRequired: false, transformFunction: null }, showDescriptions: { classPropertyName: "showDescriptions", publicName: "showDescriptions", isSignal: true, isRequired: false, transformFunction: null }, showConnector: { classPropertyName: "showConnector", publicName: "showConnector", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { stepChange: "stepChange" }, ngImport: i0, template: "<div\n [ngClass]=\"containerClasses()\"\n role=\"tablist\"\n [attr.aria-orientation]=\"orientation()\">\n\n @for (step of steps(); track step.label; let i = $index; let last = $last) {\n <!-- \u00C9tape -->\n <div\n [ngClass]=\"getStepClasses(step, i)\"\n role=\"tab\"\n [attr.aria-selected]=\"i === normalizedActiveStep()\"\n [attr.aria-label]=\"getStepAriaLabel(step, i)\"\n [attr.tabindex]=\"i === normalizedActiveStep() ? 0 : -1\"\n (click)=\"goToStep(i)\"\n (keydown)=\"onKeydown($event, i)\">\n\n <!-- Indicateur -->\n <div class=\"ds-stepper__indicator\">\n @switch (getStepState(step, i)) {\n @case ('completed') {\n <fa-icon [icon]=\"faCheck\" aria-hidden=\"true\"></fa-icon>\n }\n @case ('error') {\n <fa-icon [icon]=\"faExclamationTriangle\" aria-hidden=\"true\"></fa-icon>\n }\n @default {\n <span class=\"ds-stepper__number\">{{ i + 1 }}</span>\n }\n }\n </div>\n\n <!-- Contenu -->\n <div class=\"ds-stepper__content\">\n <span class=\"ds-stepper__label\">\n {{ step.label }}\n @if (step.optional) {\n <span class=\"ds-stepper__optional\">(Optionnel)</span>\n }\n </span>\n @if (showDescriptions() && step.description) {\n <span class=\"ds-stepper__description\">{{ step.description }}</span>\n }\n </div>\n </div>\n\n <!-- Connecteur -->\n @if (showConnector() && !last) {\n <div\n class=\"ds-stepper__connector\"\n [class.ds-stepper__connector--completed]=\"i < normalizedActiveStep()\"\n aria-hidden=\"true\">\n </div>\n }\n }\n</div>\n", styles: ["@charset \"UTF-8\";.ds-stepper{display:flex;font-family:var(--font-family-base)}.ds-stepper--horizontal{flex-direction:row;align-items:flex-start}.ds-stepper--horizontal .ds-stepper__step{flex-direction:column;align-items:center;text-align:center}.ds-stepper--horizontal .ds-stepper__connector{flex:1;height:var(--stepper-connector-width);min-width:var(--stepper-connector-min-length);margin-top:calc(var(--stepper-indicator-size-md) / 2);background-color:var(--stepper-connector-color, var(--border-color))}.ds-stepper--horizontal .ds-stepper__connector--completed{background-color:var(--stepper-completed-bg, var(--success))}.ds-stepper--horizontal .ds-stepper__content{margin-top:var(--stepper-gap-horizontal, var(--space-2))}.ds-stepper--vertical{flex-direction:column}.ds-stepper--vertical .ds-stepper__step{flex-direction:row;align-items:flex-start}.ds-stepper--vertical .ds-stepper__connector{width:var(--stepper-connector-width);min-height:var(--stepper-connector-min-length);margin-left:calc(var(--stepper-indicator-size-md) / 2);margin-top:var(--space-1);margin-bottom:var(--space-1);background-color:var(--stepper-connector-color, var(--border-color))}.ds-stepper--vertical .ds-stepper__connector--completed{background-color:var(--stepper-completed-bg, var(--success))}.ds-stepper--vertical .ds-stepper__content{margin-left:var(--stepper-gap-vertical, var(--space-3))}.ds-stepper--clickable .ds-stepper__step:not(.ds-stepper__step--disabled){cursor:pointer}.ds-stepper--clickable .ds-stepper__step:not(.ds-stepper__step--disabled):hover .ds-stepper__indicator{transform:scale(1.1)}.ds-stepper__step{display:flex;outline:none;transition:opacity var(--duration-fast) ease}.ds-stepper__step:focus-visible .ds-stepper__indicator{box-shadow:var(--input-focus-shadow)}.ds-stepper__step--pending .ds-stepper__indicator{background-color:var(--stepper-pending-bg, var(--background-secondary));color:var(--stepper-pending-text, var(--text-muted));border-color:var(--stepper-pending-border, var(--border-color))}.ds-stepper__step--pending .ds-stepper__label{color:var(--stepper-pending-text, var(--text-muted))}.ds-stepper__step--active .ds-stepper__indicator{background-color:var(--stepper-active-bg, var(--color-primary));color:var(--stepper-active-text, var(--gray-50));border-color:var(--stepper-active-bg, var(--color-primary))}.ds-stepper__step--active .ds-stepper__label{color:var(--text-default);font-weight:var(--font-weight-semibold)}.ds-stepper__step--completed .ds-stepper__indicator{background-color:var(--stepper-completed-bg, var(--success));color:var(--stepper-completed-text, var(--gray-50));border-color:var(--stepper-completed-bg, var(--success))}.ds-stepper__step--completed .ds-stepper__label{color:var(--text-default)}.ds-stepper__step--error .ds-stepper__indicator{background-color:var(--stepper-error-bg, var(--error));color:var(--stepper-error-text, var(--gray-50));border-color:var(--stepper-error-bg, var(--error))}.ds-stepper__step--error .ds-stepper__label{color:var(--stepper-error-bg, var(--error))}.ds-stepper__step--disabled{opacity:.5;cursor:not-allowed}.ds-stepper__indicator{display:flex;align-items:center;justify-content:center;width:var(--stepper-indicator-size-md);height:var(--stepper-indicator-size-md);border-radius:50%;border:var(--stepper-indicator-border-width) solid;font-weight:var(--font-weight-semibold);font-size:var(--stepper-indicator-font-size-md, var(--font-size-2));flex-shrink:0;transition:transform var(--duration-fast) ease,background-color var(--duration-fast) ease,border-color var(--duration-fast) ease}.ds-stepper__number{line-height:1}.ds-stepper__content{display:flex;flex-direction:column}.ds-stepper__label{font-size:var(--stepper-label-font-size-md, var(--font-size-2));font-weight:var(--font-weight-medium);color:var(--text-default);transition:color var(--duration-fast) ease}.ds-stepper__optional{font-size:var(--stepper-description-font-size-md, var(--font-size-1));font-weight:var(--font-weight-normal);color:var(--text-subtle);margin-left:var(--space-1)}.ds-stepper__description{font-size:var(--stepper-description-font-size-md, var(--font-size-1));color:var(--text-muted);margin-top:var(--space-1)}.ds-stepper__connector{transition:background-color var(--duration-normal) ease}.ds-stepper--sm .ds-stepper__indicator{width:var(--stepper-indicator-size-sm);height:var(--stepper-indicator-size-sm);font-size:var(--stepper-indicator-font-size-sm, var(--font-size-1))}.ds-stepper--sm .ds-stepper__label{font-size:var(--stepper-label-font-size-sm, var(--font-size-1))}.ds-stepper--sm .ds-stepper__description{font-size:var(--stepper-description-font-size-sm, var(--font-size-small))}.ds-stepper--sm.ds-stepper--horizontal .ds-stepper__connector{margin-top:calc(var(--stepper-indicator-size-sm) / 2)}.ds-stepper--sm.ds-stepper--vertical .ds-stepper__connector{margin-left:calc(var(--stepper-indicator-size-sm) / 2)}.ds-stepper--lg .ds-stepper__indicator{width:var(--stepper-indicator-size-lg);height:var(--stepper-indicator-size-lg);font-size:var(--stepper-indicator-font-size-lg, var(--font-size-3))}.ds-stepper--lg .ds-stepper__label{font-size:var(--stepper-label-font-size-lg, var(--font-size-3))}.ds-stepper--lg .ds-stepper__description{font-size:var(--stepper-description-font-size-lg, var(--font-size-2))}.ds-stepper--lg.ds-stepper--horizontal .ds-stepper__connector{margin-top:calc(var(--stepper-indicator-size-lg) / 2)}.ds-stepper--lg.ds-stepper--vertical .ds-stepper__connector{margin-left:calc(var(--stepper-indicator-size-lg) / 2)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FontAwesomeModule }, { kind: "component", type:
|
|
5540
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: DsStepper, isStandalone: true, selector: "ds-stepper", inputs: { steps: { classPropertyName: "steps", publicName: "steps", isSignal: true, isRequired: true, transformFunction: null }, activeStep: { classPropertyName: "activeStep", publicName: "activeStep", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, clickable: { classPropertyName: "clickable", publicName: "clickable", isSignal: true, isRequired: false, transformFunction: null }, linear: { classPropertyName: "linear", publicName: "linear", isSignal: true, isRequired: false, transformFunction: null }, showDescriptions: { classPropertyName: "showDescriptions", publicName: "showDescriptions", isSignal: true, isRequired: false, transformFunction: null }, showConnector: { classPropertyName: "showConnector", publicName: "showConnector", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { stepChange: "stepChange" }, ngImport: i0, template: "<div\n [ngClass]=\"containerClasses()\"\n role=\"tablist\"\n [attr.aria-orientation]=\"orientation()\">\n\n @for (step of steps(); track step.label; let i = $index; let last = $last) {\n <!-- \u00C9tape -->\n <div\n [ngClass]=\"getStepClasses(step, i)\"\n role=\"tab\"\n [attr.aria-selected]=\"i === normalizedActiveStep()\"\n [attr.aria-label]=\"getStepAriaLabel(step, i)\"\n [attr.tabindex]=\"i === normalizedActiveStep() ? 0 : -1\"\n (click)=\"goToStep(i)\"\n (keydown)=\"onKeydown($event, i)\">\n\n <!-- Indicateur -->\n <div class=\"ds-stepper__indicator\">\n @switch (getStepState(step, i)) {\n @case ('completed') {\n <fa-icon [icon]=\"faCheck\" aria-hidden=\"true\"></fa-icon>\n }\n @case ('error') {\n <fa-icon [icon]=\"faExclamationTriangle\" aria-hidden=\"true\"></fa-icon>\n }\n @default {\n <span class=\"ds-stepper__number\">{{ i + 1 }}</span>\n }\n }\n </div>\n\n <!-- Contenu -->\n <div class=\"ds-stepper__content\">\n <span class=\"ds-stepper__label\">\n {{ step.label }}\n @if (step.optional) {\n <span class=\"ds-stepper__optional\">(Optionnel)</span>\n }\n </span>\n @if (showDescriptions() && step.description) {\n <span class=\"ds-stepper__description\">{{ step.description }}</span>\n }\n </div>\n </div>\n\n <!-- Connecteur -->\n @if (showConnector() && !last) {\n <div\n class=\"ds-stepper__connector\"\n [class.ds-stepper__connector--completed]=\"i < normalizedActiveStep()\"\n aria-hidden=\"true\">\n </div>\n }\n }\n</div>\n", styles: ["@charset \"UTF-8\";.ds-stepper{display:flex;font-family:var(--font-family-base)}.ds-stepper--horizontal{flex-direction:row;align-items:flex-start}.ds-stepper--horizontal .ds-stepper__step{flex-direction:column;align-items:center;text-align:center}.ds-stepper--horizontal .ds-stepper__connector{flex:1;height:var(--stepper-connector-width);min-width:var(--stepper-connector-min-length);margin-top:calc(var(--stepper-indicator-size-md) / 2);background-color:var(--stepper-connector-color, var(--border-color))}.ds-stepper--horizontal .ds-stepper__connector--completed{background-color:var(--stepper-completed-bg, var(--success))}.ds-stepper--horizontal .ds-stepper__content{margin-top:var(--stepper-gap-horizontal, var(--space-2))}.ds-stepper--vertical{flex-direction:column}.ds-stepper--vertical .ds-stepper__step{flex-direction:row;align-items:flex-start}.ds-stepper--vertical .ds-stepper__connector{width:var(--stepper-connector-width);min-height:var(--stepper-connector-min-length);margin-left:calc(var(--stepper-indicator-size-md) / 2);margin-top:var(--space-1);margin-bottom:var(--space-1);background-color:var(--stepper-connector-color, var(--border-color))}.ds-stepper--vertical .ds-stepper__connector--completed{background-color:var(--stepper-completed-bg, var(--success))}.ds-stepper--vertical .ds-stepper__content{margin-left:var(--stepper-gap-vertical, var(--space-3))}.ds-stepper--clickable .ds-stepper__step:not(.ds-stepper__step--disabled){cursor:pointer}.ds-stepper--clickable .ds-stepper__step:not(.ds-stepper__step--disabled):hover .ds-stepper__indicator{transform:scale(1.1)}.ds-stepper__step{display:flex;outline:none;transition:opacity var(--duration-fast) ease}.ds-stepper__step:focus-visible .ds-stepper__indicator{box-shadow:var(--input-focus-shadow)}.ds-stepper__step--pending .ds-stepper__indicator{background-color:var(--stepper-pending-bg, var(--background-secondary));color:var(--stepper-pending-text, var(--text-muted));border-color:var(--stepper-pending-border, var(--border-color))}.ds-stepper__step--pending .ds-stepper__label{color:var(--stepper-pending-text, var(--text-muted))}.ds-stepper__step--active .ds-stepper__indicator{background-color:var(--stepper-active-bg, var(--color-primary));color:var(--stepper-active-text, var(--gray-50));border-color:var(--stepper-active-bg, var(--color-primary))}.ds-stepper__step--active .ds-stepper__label{color:var(--text-default);font-weight:var(--font-weight-semibold)}.ds-stepper__step--completed .ds-stepper__indicator{background-color:var(--stepper-completed-bg, var(--success));color:var(--stepper-completed-text, var(--gray-50));border-color:var(--stepper-completed-bg, var(--success))}.ds-stepper__step--completed .ds-stepper__label{color:var(--text-default)}.ds-stepper__step--error .ds-stepper__indicator{background-color:var(--stepper-error-bg, var(--error));color:var(--stepper-error-text, var(--gray-50));border-color:var(--stepper-error-bg, var(--error))}.ds-stepper__step--error .ds-stepper__label{color:var(--stepper-error-bg, var(--error))}.ds-stepper__step--disabled{opacity:.5;cursor:not-allowed}.ds-stepper__indicator{display:flex;align-items:center;justify-content:center;width:var(--stepper-indicator-size-md);height:var(--stepper-indicator-size-md);border-radius:50%;border:var(--stepper-indicator-border-width) solid;font-weight:var(--font-weight-semibold);font-size:var(--stepper-indicator-font-size-md, var(--font-size-2));flex-shrink:0;transition:transform var(--duration-fast) ease,background-color var(--duration-fast) ease,border-color var(--duration-fast) ease}.ds-stepper__number{line-height:1}.ds-stepper__content{display:flex;flex-direction:column}.ds-stepper__label{font-size:var(--stepper-label-font-size-md, var(--font-size-2));font-weight:var(--font-weight-medium);color:var(--text-default);transition:color var(--duration-fast) ease}.ds-stepper__optional{font-size:var(--stepper-description-font-size-md, var(--font-size-1));font-weight:var(--font-weight-normal);color:var(--text-subtle);margin-left:var(--space-1)}.ds-stepper__description{font-size:var(--stepper-description-font-size-md, var(--font-size-1));color:var(--text-muted);margin-top:var(--space-1)}.ds-stepper__connector{transition:background-color var(--duration-normal) ease}.ds-stepper--sm .ds-stepper__indicator{width:var(--stepper-indicator-size-sm);height:var(--stepper-indicator-size-sm);font-size:var(--stepper-indicator-font-size-sm, var(--font-size-1))}.ds-stepper--sm .ds-stepper__label{font-size:var(--stepper-label-font-size-sm, var(--font-size-1))}.ds-stepper--sm .ds-stepper__description{font-size:var(--stepper-description-font-size-sm, var(--font-size-small))}.ds-stepper--sm.ds-stepper--horizontal .ds-stepper__connector{margin-top:calc(var(--stepper-indicator-size-sm) / 2)}.ds-stepper--sm.ds-stepper--vertical .ds-stepper__connector{margin-left:calc(var(--stepper-indicator-size-sm) / 2)}.ds-stepper--lg .ds-stepper__indicator{width:var(--stepper-indicator-size-lg);height:var(--stepper-indicator-size-lg);font-size:var(--stepper-indicator-font-size-lg, var(--font-size-3))}.ds-stepper--lg .ds-stepper__label{font-size:var(--stepper-label-font-size-lg, var(--font-size-3))}.ds-stepper--lg .ds-stepper__description{font-size:var(--stepper-description-font-size-lg, var(--font-size-2))}.ds-stepper--lg.ds-stepper--horizontal .ds-stepper__connector{margin-top:calc(var(--stepper-indicator-size-lg) / 2)}.ds-stepper--lg.ds-stepper--vertical .ds-stepper__connector{margin-left:calc(var(--stepper-indicator-size-lg) / 2)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FontAwesomeModule }, { kind: "component", type: i1$1.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"], outputs: ["iconChange", "titleChange", "animationChange", "maskChange", "flipChange", "sizeChange", "pullChange", "borderChange", "inverseChange", "symbolChange", "rotateChange", "fixedWidthChange", "transformChange", "a11yRoleChange"] }] });
|
|
5541
5541
|
}
|
|
5542
5542
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DsStepper, decorators: [{
|
|
5543
5543
|
type: Component,
|
|
@@ -6531,7 +6531,7 @@ class DsSearchInput {
|
|
|
6531
6531
|
</button>
|
|
6532
6532
|
}
|
|
6533
6533
|
</div>
|
|
6534
|
-
`, isInline: true, styles: [".ds-search-input{display:flex;align-items:center;position:relative;width:100%;background:var(--search-input-bg, var(--input-bg, var(--background-main)));border:1px solid var(--search-input-border, var(--input-border-color, var(--border-default)));border-radius:var(--search-input-radius, var(--radius-2));transition:border-color var(--duration-fast, .2s) ease,box-shadow var(--duration-fast, .2s) ease}.ds-search-input:focus-within{border-color:var(--search-input-focus-border, var(--input-focus-border, var(--color-primary)));box-shadow:var(--search-input-focus-shadow, var(--input-focus-shadow))}.ds-search-input--sm{height:var(--search-input-height-sm, 32px)}.ds-search-input--sm .ds-search-input__input{font-size:var(--search-input-font-size-sm, var(--font-size-2));padding:0 var(--search-input-padding-sm, var(--space-2))}.ds-search-input--sm .ds-search-input__icon{font-size:var(--search-input-icon-size-sm, 12px)}.ds-search-input--sm .ds-search-input__icon--search{margin-left:var(--search-input-padding-sm, var(--space-2))}.ds-search-input--sm .ds-search-input__clear{margin-right:var(--space-1);width:var(--search-input-clear-size-sm, 20px);height:var(--search-input-clear-size-sm, 20px)}.ds-search-input--md{height:var(--search-input-height-md, 40px)}.ds-search-input--md .ds-search-input__input{font-size:var(--search-input-font-size-md, var(--font-size-3));padding:0 var(--search-input-padding-md, var(--space-3))}.ds-search-input--md .ds-search-input__icon{font-size:var(--search-input-icon-size-md, 14px)}.ds-search-input--md .ds-search-input__icon--search{margin-left:var(--search-input-padding-md, var(--space-3))}.ds-search-input--md .ds-search-input__clear{margin-right:var(--space-2);width:var(--search-input-clear-size-md, 24px);height:var(--search-input-clear-size-md, 24px)}.ds-search-input--lg{height:var(--search-input-height-lg, 48px)}.ds-search-input--lg .ds-search-input__input{font-size:var(--search-input-font-size-lg, var(--font-size-4));padding:0 var(--search-input-padding-lg, var(--space-4))}.ds-search-input--lg .ds-search-input__icon{font-size:var(--search-input-icon-size-lg, 16px)}.ds-search-input--lg .ds-search-input__icon--search{margin-left:var(--search-input-padding-lg, var(--space-4))}.ds-search-input--lg .ds-search-input__clear{margin-right:var(--space-3);width:var(--search-input-clear-size-lg, 28px);height:var(--search-input-clear-size-lg, 28px)}.ds-search-input--disabled{opacity:.6;cursor:not-allowed;background:var(--search-input-disabled-bg, var(--input-disabled-bg, var(--bg-disabled)))}.ds-search-input--disabled .ds-search-input__input{cursor:not-allowed}.ds-search-input--loading .ds-search-input__icon--loading{color:var(--search-input-loading-color, var(--color-primary))}.ds-search-input__icon{flex-shrink:0;color:var(--search-input-icon-color, var(--text-muted))}.ds-search-input__icon--search{pointer-events:none}.ds-search-input__icon--loading{margin-right:var(--space-2)}.ds-search-input__icon--spin{animation:ds-search-spin 1s linear infinite}@keyframes ds-search-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.ds-search-input__input{flex:1;border:none;background:transparent;color:var(--search-input-text, var(--text-default));outline:none;min-width:0}.ds-search-input__input::placeholder{color:var(--search-input-placeholder, var(--text-muted))}.ds-search-input__input:disabled{color:var(--search-input-disabled-text, var(--text-disabled))}.ds-search-input__clear{display:flex;align-items:center;justify-content:center;flex-shrink:0;border:none;background:transparent;color:var(--search-input-clear-color, var(--text-muted));cursor:pointer;border-radius:var(--radius-1);transition:background-color var(--duration-fast, .15s) ease,color var(--duration-fast, .15s) ease}.ds-search-input__clear:hover{background:var(--search-input-clear-hover-bg, var(--surface-hover));color:var(--search-input-clear-hover-color, var(--text-default))}.ds-search-input__clear:focus-visible{outline:2px solid var(--color-primary);outline-offset:1px}.ds-search-input__clear:active{background:var(--search-input-clear-active-bg, var(--surface-raised))}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$
|
|
6534
|
+
`, isInline: true, styles: [".ds-search-input{display:flex;align-items:center;position:relative;width:100%;background:var(--search-input-bg, var(--input-bg, var(--background-main)));border:1px solid var(--search-input-border, var(--input-border-color, var(--border-default)));border-radius:var(--search-input-radius, var(--radius-2));transition:border-color var(--duration-fast, .2s) ease,box-shadow var(--duration-fast, .2s) ease}.ds-search-input:focus-within{border-color:var(--search-input-focus-border, var(--input-focus-border, var(--color-primary)));box-shadow:var(--search-input-focus-shadow, var(--input-focus-shadow))}.ds-search-input--sm{height:var(--search-input-height-sm, 32px)}.ds-search-input--sm .ds-search-input__input{font-size:var(--search-input-font-size-sm, var(--font-size-2));padding:0 var(--search-input-padding-sm, var(--space-2))}.ds-search-input--sm .ds-search-input__icon{font-size:var(--search-input-icon-size-sm, 12px)}.ds-search-input--sm .ds-search-input__icon--search{margin-left:var(--search-input-padding-sm, var(--space-2))}.ds-search-input--sm .ds-search-input__clear{margin-right:var(--space-1);width:var(--search-input-clear-size-sm, 20px);height:var(--search-input-clear-size-sm, 20px)}.ds-search-input--md{height:var(--search-input-height-md, 40px)}.ds-search-input--md .ds-search-input__input{font-size:var(--search-input-font-size-md, var(--font-size-3));padding:0 var(--search-input-padding-md, var(--space-3))}.ds-search-input--md .ds-search-input__icon{font-size:var(--search-input-icon-size-md, 14px)}.ds-search-input--md .ds-search-input__icon--search{margin-left:var(--search-input-padding-md, var(--space-3))}.ds-search-input--md .ds-search-input__clear{margin-right:var(--space-2);width:var(--search-input-clear-size-md, 24px);height:var(--search-input-clear-size-md, 24px)}.ds-search-input--lg{height:var(--search-input-height-lg, 48px)}.ds-search-input--lg .ds-search-input__input{font-size:var(--search-input-font-size-lg, var(--font-size-4));padding:0 var(--search-input-padding-lg, var(--space-4))}.ds-search-input--lg .ds-search-input__icon{font-size:var(--search-input-icon-size-lg, 16px)}.ds-search-input--lg .ds-search-input__icon--search{margin-left:var(--search-input-padding-lg, var(--space-4))}.ds-search-input--lg .ds-search-input__clear{margin-right:var(--space-3);width:var(--search-input-clear-size-lg, 28px);height:var(--search-input-clear-size-lg, 28px)}.ds-search-input--disabled{opacity:.6;cursor:not-allowed;background:var(--search-input-disabled-bg, var(--input-disabled-bg, var(--bg-disabled)))}.ds-search-input--disabled .ds-search-input__input{cursor:not-allowed}.ds-search-input--loading .ds-search-input__icon--loading{color:var(--search-input-loading-color, var(--color-primary))}.ds-search-input__icon{flex-shrink:0;color:var(--search-input-icon-color, var(--text-muted))}.ds-search-input__icon--search{pointer-events:none}.ds-search-input__icon--loading{margin-right:var(--space-2)}.ds-search-input__icon--spin{animation:ds-search-spin 1s linear infinite}@keyframes ds-search-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.ds-search-input__input{flex:1;border:none;background:transparent;color:var(--search-input-text, var(--text-default));outline:none;min-width:0}.ds-search-input__input::placeholder{color:var(--search-input-placeholder, var(--text-muted))}.ds-search-input__input:disabled{color:var(--search-input-disabled-text, var(--text-disabled))}.ds-search-input__clear{display:flex;align-items:center;justify-content:center;flex-shrink:0;border:none;background:transparent;color:var(--search-input-clear-color, var(--text-muted));cursor:pointer;border-radius:var(--radius-1);transition:background-color var(--duration-fast, .15s) ease,color var(--duration-fast, .15s) ease}.ds-search-input__clear:hover{background:var(--search-input-clear-hover-bg, var(--surface-hover));color:var(--search-input-clear-hover-color, var(--text-default))}.ds-search-input__clear:focus-visible{outline:2px solid var(--color-primary);outline-offset:1px}.ds-search-input__clear:active{background:var(--search-input-clear-active-bg, var(--surface-raised))}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: FontAwesomeModule }, { kind: "component", type: i1$1.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"], outputs: ["iconChange", "titleChange", "animationChange", "maskChange", "flipChange", "sizeChange", "pullChange", "borderChange", "inverseChange", "symbolChange", "rotateChange", "fixedWidthChange", "transformChange", "a11yRoleChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
6535
6535
|
}
|
|
6536
6536
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DsSearchInput, decorators: [{
|
|
6537
6537
|
type: Component,
|
|
@@ -6582,6 +6582,55 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
6582
6582
|
], styles: [".ds-search-input{display:flex;align-items:center;position:relative;width:100%;background:var(--search-input-bg, var(--input-bg, var(--background-main)));border:1px solid var(--search-input-border, var(--input-border-color, var(--border-default)));border-radius:var(--search-input-radius, var(--radius-2));transition:border-color var(--duration-fast, .2s) ease,box-shadow var(--duration-fast, .2s) ease}.ds-search-input:focus-within{border-color:var(--search-input-focus-border, var(--input-focus-border, var(--color-primary)));box-shadow:var(--search-input-focus-shadow, var(--input-focus-shadow))}.ds-search-input--sm{height:var(--search-input-height-sm, 32px)}.ds-search-input--sm .ds-search-input__input{font-size:var(--search-input-font-size-sm, var(--font-size-2));padding:0 var(--search-input-padding-sm, var(--space-2))}.ds-search-input--sm .ds-search-input__icon{font-size:var(--search-input-icon-size-sm, 12px)}.ds-search-input--sm .ds-search-input__icon--search{margin-left:var(--search-input-padding-sm, var(--space-2))}.ds-search-input--sm .ds-search-input__clear{margin-right:var(--space-1);width:var(--search-input-clear-size-sm, 20px);height:var(--search-input-clear-size-sm, 20px)}.ds-search-input--md{height:var(--search-input-height-md, 40px)}.ds-search-input--md .ds-search-input__input{font-size:var(--search-input-font-size-md, var(--font-size-3));padding:0 var(--search-input-padding-md, var(--space-3))}.ds-search-input--md .ds-search-input__icon{font-size:var(--search-input-icon-size-md, 14px)}.ds-search-input--md .ds-search-input__icon--search{margin-left:var(--search-input-padding-md, var(--space-3))}.ds-search-input--md .ds-search-input__clear{margin-right:var(--space-2);width:var(--search-input-clear-size-md, 24px);height:var(--search-input-clear-size-md, 24px)}.ds-search-input--lg{height:var(--search-input-height-lg, 48px)}.ds-search-input--lg .ds-search-input__input{font-size:var(--search-input-font-size-lg, var(--font-size-4));padding:0 var(--search-input-padding-lg, var(--space-4))}.ds-search-input--lg .ds-search-input__icon{font-size:var(--search-input-icon-size-lg, 16px)}.ds-search-input--lg .ds-search-input__icon--search{margin-left:var(--search-input-padding-lg, var(--space-4))}.ds-search-input--lg .ds-search-input__clear{margin-right:var(--space-3);width:var(--search-input-clear-size-lg, 28px);height:var(--search-input-clear-size-lg, 28px)}.ds-search-input--disabled{opacity:.6;cursor:not-allowed;background:var(--search-input-disabled-bg, var(--input-disabled-bg, var(--bg-disabled)))}.ds-search-input--disabled .ds-search-input__input{cursor:not-allowed}.ds-search-input--loading .ds-search-input__icon--loading{color:var(--search-input-loading-color, var(--color-primary))}.ds-search-input__icon{flex-shrink:0;color:var(--search-input-icon-color, var(--text-muted))}.ds-search-input__icon--search{pointer-events:none}.ds-search-input__icon--loading{margin-right:var(--space-2)}.ds-search-input__icon--spin{animation:ds-search-spin 1s linear infinite}@keyframes ds-search-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.ds-search-input__input{flex:1;border:none;background:transparent;color:var(--search-input-text, var(--text-default));outline:none;min-width:0}.ds-search-input__input::placeholder{color:var(--search-input-placeholder, var(--text-muted))}.ds-search-input__input:disabled{color:var(--search-input-disabled-text, var(--text-disabled))}.ds-search-input__clear{display:flex;align-items:center;justify-content:center;flex-shrink:0;border:none;background:transparent;color:var(--search-input-clear-color, var(--text-muted));cursor:pointer;border-radius:var(--radius-1);transition:background-color var(--duration-fast, .15s) ease,color var(--duration-fast, .15s) ease}.ds-search-input__clear:hover{background:var(--search-input-clear-hover-bg, var(--surface-hover));color:var(--search-input-clear-hover-color, var(--text-default))}.ds-search-input__clear:focus-visible{outline:2px solid var(--color-primary);outline-offset:1px}.ds-search-input__clear:active{background:var(--search-input-clear-active-bg, var(--surface-raised))}\n"] }]
|
|
6583
6583
|
}], ctorParameters: () => [], propDecorators: { size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], debounceMs: [{ type: i0.Input, args: [{ isSignal: true, alias: "debounceMs", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], clearable: [{ type: i0.Input, args: [{ isSignal: true, alias: "clearable", required: false }] }], minChars: [{ type: i0.Input, args: [{ isSignal: true, alias: "minChars", required: false }] }], clearLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "clearLabel", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], ariaDescribedBy: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaDescribedBy", required: false }] }], search: [{ type: i0.Output, args: ["search"] }], searchImmediate: [{ type: i0.Output, args: ["searchImmediate"] }], cleared: [{ type: i0.Output, args: ["cleared"] }], inputRef: [{ type: i0.ViewChild, args: ['inputRef', { isSignal: true }] }] } });
|
|
6584
6584
|
|
|
6585
|
+
/** Presets prédéfinis pour le mode range */
|
|
6586
|
+
const DEFAULT_DATE_PRESETS = [
|
|
6587
|
+
{
|
|
6588
|
+
label: "Aujourd'hui",
|
|
6589
|
+
getValue: () => {
|
|
6590
|
+
const today = new Date();
|
|
6591
|
+
today.setHours(0, 0, 0, 0);
|
|
6592
|
+
return { start: today, end: today };
|
|
6593
|
+
},
|
|
6594
|
+
},
|
|
6595
|
+
{
|
|
6596
|
+
label: '7 derniers jours',
|
|
6597
|
+
getValue: () => {
|
|
6598
|
+
const end = new Date();
|
|
6599
|
+
end.setHours(0, 0, 0, 0);
|
|
6600
|
+
const start = new Date(end);
|
|
6601
|
+
start.setDate(start.getDate() - 6);
|
|
6602
|
+
return { start, end };
|
|
6603
|
+
},
|
|
6604
|
+
},
|
|
6605
|
+
{
|
|
6606
|
+
label: '30 derniers jours',
|
|
6607
|
+
getValue: () => {
|
|
6608
|
+
const end = new Date();
|
|
6609
|
+
end.setHours(0, 0, 0, 0);
|
|
6610
|
+
const start = new Date(end);
|
|
6611
|
+
start.setDate(start.getDate() - 29);
|
|
6612
|
+
return { start, end };
|
|
6613
|
+
},
|
|
6614
|
+
},
|
|
6615
|
+
{
|
|
6616
|
+
label: 'Ce mois',
|
|
6617
|
+
getValue: () => {
|
|
6618
|
+
const now = new Date();
|
|
6619
|
+
const start = new Date(now.getFullYear(), now.getMonth(), 1);
|
|
6620
|
+
const end = new Date(now.getFullYear(), now.getMonth() + 1, 0);
|
|
6621
|
+
return { start, end };
|
|
6622
|
+
},
|
|
6623
|
+
},
|
|
6624
|
+
{
|
|
6625
|
+
label: 'Mois dernier',
|
|
6626
|
+
getValue: () => {
|
|
6627
|
+
const now = new Date();
|
|
6628
|
+
const start = new Date(now.getFullYear(), now.getMonth() - 1, 1);
|
|
6629
|
+
const end = new Date(now.getFullYear(), now.getMonth(), 0);
|
|
6630
|
+
return { start, end };
|
|
6631
|
+
},
|
|
6632
|
+
},
|
|
6633
|
+
];
|
|
6585
6634
|
/**
|
|
6586
6635
|
* DsDatePicker - Composant de sélection de date
|
|
6587
6636
|
*
|
|
@@ -6620,6 +6669,12 @@ class DsDatePicker {
|
|
|
6620
6669
|
prevMonthLabel = input('Mois précédent', ...(ngDevMode ? [{ debugName: "prevMonthLabel" }] : []));
|
|
6621
6670
|
/** Label bouton mois suivant */
|
|
6622
6671
|
nextMonthLabel = input('Mois suivant', ...(ngDevMode ? [{ debugName: "nextMonthLabel" }] : []));
|
|
6672
|
+
/** Presets pour le mode range */
|
|
6673
|
+
presets = input([], ...(ngDevMode ? [{ debugName: "presets" }] : []));
|
|
6674
|
+
/** Afficher les presets */
|
|
6675
|
+
showPresets = input(false, ...(ngDevMode ? [{ debugName: "showPresets" }] : []));
|
|
6676
|
+
/** Activer le preview au survol en mode range */
|
|
6677
|
+
showRangePreview = input(true, ...(ngDevMode ? [{ debugName: "showRangePreview" }] : []));
|
|
6623
6678
|
/** Événement de changement de date (mode single) */
|
|
6624
6679
|
dateChange = output();
|
|
6625
6680
|
/** Événement de changement de range */
|
|
@@ -6643,6 +6698,7 @@ class DsDatePicker {
|
|
|
6643
6698
|
rangeEnd = signal(null, ...(ngDevMode ? [{ debugName: "rangeEnd" }] : []));
|
|
6644
6699
|
showMonthPicker = signal(false, ...(ngDevMode ? [{ debugName: "showMonthPicker" }] : []));
|
|
6645
6700
|
showYearPicker = signal(false, ...(ngDevMode ? [{ debugName: "showYearPicker" }] : []));
|
|
6701
|
+
hoveredDate = signal(null, ...(ngDevMode ? [{ debugName: "hoveredDate" }] : []));
|
|
6646
6702
|
/** Callbacks CVA */
|
|
6647
6703
|
onChange = () => { };
|
|
6648
6704
|
onTouched = () => { };
|
|
@@ -6693,6 +6749,7 @@ class DsDatePicker {
|
|
|
6693
6749
|
const isRangeStart = this.isRangeStartDate(date);
|
|
6694
6750
|
const isRangeEnd = this.isRangeEndDate(date);
|
|
6695
6751
|
const isInRange = this.isDateInRange(date);
|
|
6752
|
+
const isInPreviewRange = this.isDateInPreviewRange(date);
|
|
6696
6753
|
const isDisabled = this.isDateDisabled(date);
|
|
6697
6754
|
week.push({
|
|
6698
6755
|
date,
|
|
@@ -6703,6 +6760,7 @@ class DsDatePicker {
|
|
|
6703
6760
|
isRangeStart,
|
|
6704
6761
|
isRangeEnd,
|
|
6705
6762
|
isInRange,
|
|
6763
|
+
isInPreviewRange,
|
|
6706
6764
|
isDisabled,
|
|
6707
6765
|
ariaLabel: this.formatDateForAria(date),
|
|
6708
6766
|
});
|
|
@@ -6872,6 +6930,44 @@ class DsDatePicker {
|
|
|
6872
6930
|
return false;
|
|
6873
6931
|
return date > start && date < end;
|
|
6874
6932
|
}
|
|
6933
|
+
isDateInPreviewRange(date) {
|
|
6934
|
+
if (this.mode() !== 'range' || !this.showRangePreview())
|
|
6935
|
+
return false;
|
|
6936
|
+
const start = this.rangeStart();
|
|
6937
|
+
const end = this.rangeEnd();
|
|
6938
|
+
const hovered = this.hoveredDate();
|
|
6939
|
+
// Seulement si on a un start mais pas de end, et on survole
|
|
6940
|
+
if (!start || end || !hovered)
|
|
6941
|
+
return false;
|
|
6942
|
+
const minDate = start < hovered ? start : hovered;
|
|
6943
|
+
const maxDate = start < hovered ? hovered : start;
|
|
6944
|
+
return date > minDate && date < maxDate;
|
|
6945
|
+
}
|
|
6946
|
+
onDayMouseEnter(date) {
|
|
6947
|
+
if (date && this.mode() === 'range' && this.showRangePreview() && this.rangeStart() && !this.rangeEnd()) {
|
|
6948
|
+
this.hoveredDate.set(date);
|
|
6949
|
+
}
|
|
6950
|
+
}
|
|
6951
|
+
onDayMouseLeave() {
|
|
6952
|
+
this.hoveredDate.set(null);
|
|
6953
|
+
}
|
|
6954
|
+
selectPreset(preset) {
|
|
6955
|
+
const range = preset.getValue();
|
|
6956
|
+
this.rangeStart.set(range.start);
|
|
6957
|
+
this.rangeEnd.set(range.end);
|
|
6958
|
+
this.rangeChange.emit(range);
|
|
6959
|
+
this.onChange(range);
|
|
6960
|
+
// Naviguer vers le mois du début
|
|
6961
|
+
if (range.start) {
|
|
6962
|
+
this.currentMonth.set(range.start.getMonth());
|
|
6963
|
+
this.currentYear.set(range.start.getFullYear());
|
|
6964
|
+
}
|
|
6965
|
+
}
|
|
6966
|
+
/** Presets effectifs (utilise les presets fournis ou les défauts) */
|
|
6967
|
+
effectivePresets = computed(() => {
|
|
6968
|
+
const custom = this.presets();
|
|
6969
|
+
return custom.length > 0 ? custom : DEFAULT_DATE_PRESETS;
|
|
6970
|
+
}, ...(ngDevMode ? [{ debugName: "effectivePresets" }] : []));
|
|
6875
6971
|
isDateDisabled(date) {
|
|
6876
6972
|
const min = this.minDate();
|
|
6877
6973
|
const max = this.maxDate();
|
|
@@ -6926,7 +7022,7 @@ class DsDatePicker {
|
|
|
6926
7022
|
// Géré via l'input signal
|
|
6927
7023
|
}
|
|
6928
7024
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DsDatePicker, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
6929
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: DsDatePicker, isStandalone: true, selector: "ds-date-picker", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, minDate: { classPropertyName: "minDate", publicName: "minDate", isSignal: true, isRequired: false, transformFunction: null }, maxDate: { classPropertyName: "maxDate", publicName: "maxDate", isSignal: true, isRequired: false, transformFunction: null }, showTodayButton: { classPropertyName: "showTodayButton", publicName: "showTodayButton", isSignal: true, isRequired: false, transformFunction: null }, showClearButton: { classPropertyName: "showClearButton", publicName: "showClearButton", isSignal: true, isRequired: false, transformFunction: null }, todayLabel: { classPropertyName: "todayLabel", publicName: "todayLabel", isSignal: true, isRequired: false, transformFunction: null }, clearLabel: { classPropertyName: "clearLabel", publicName: "clearLabel", isSignal: true, isRequired: false, transformFunction: null }, prevMonthLabel: { classPropertyName: "prevMonthLabel", publicName: "prevMonthLabel", isSignal: true, isRequired: false, transformFunction: null }, nextMonthLabel: { classPropertyName: "nextMonthLabel", publicName: "nextMonthLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { dateChange: "dateChange", rangeChange: "rangeChange" }, providers: [
|
|
7025
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: DsDatePicker, isStandalone: true, selector: "ds-date-picker", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, minDate: { classPropertyName: "minDate", publicName: "minDate", isSignal: true, isRequired: false, transformFunction: null }, maxDate: { classPropertyName: "maxDate", publicName: "maxDate", isSignal: true, isRequired: false, transformFunction: null }, showTodayButton: { classPropertyName: "showTodayButton", publicName: "showTodayButton", isSignal: true, isRequired: false, transformFunction: null }, showClearButton: { classPropertyName: "showClearButton", publicName: "showClearButton", isSignal: true, isRequired: false, transformFunction: null }, todayLabel: { classPropertyName: "todayLabel", publicName: "todayLabel", isSignal: true, isRequired: false, transformFunction: null }, clearLabel: { classPropertyName: "clearLabel", publicName: "clearLabel", isSignal: true, isRequired: false, transformFunction: null }, prevMonthLabel: { classPropertyName: "prevMonthLabel", publicName: "prevMonthLabel", isSignal: true, isRequired: false, transformFunction: null }, nextMonthLabel: { classPropertyName: "nextMonthLabel", publicName: "nextMonthLabel", isSignal: true, isRequired: false, transformFunction: null }, presets: { classPropertyName: "presets", publicName: "presets", isSignal: true, isRequired: false, transformFunction: null }, showPresets: { classPropertyName: "showPresets", publicName: "showPresets", isSignal: true, isRequired: false, transformFunction: null }, showRangePreview: { classPropertyName: "showRangePreview", publicName: "showRangePreview", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { dateChange: "dateChange", rangeChange: "rangeChange" }, providers: [
|
|
6930
7026
|
{
|
|
6931
7027
|
provide: NG_VALUE_ACCESSOR,
|
|
6932
7028
|
useExisting: forwardRef(() => DsDatePicker),
|
|
@@ -7032,13 +7128,16 @@ class DsDatePicker {
|
|
|
7032
7128
|
[class.ds-date-picker__day--range-start]="day.isRangeStart"
|
|
7033
7129
|
[class.ds-date-picker__day--range-end]="day.isRangeEnd"
|
|
7034
7130
|
[class.ds-date-picker__day--in-range]="day.isInRange"
|
|
7131
|
+
[class.ds-date-picker__day--in-preview]="day.isInPreviewRange"
|
|
7035
7132
|
[class.ds-date-picker__day--disabled]="day.isDisabled"
|
|
7036
7133
|
[disabled]="disabled() || day.isDisabled"
|
|
7037
7134
|
role="gridcell"
|
|
7038
7135
|
[attr.aria-selected]="day.isSelected"
|
|
7039
7136
|
[attr.aria-label]="day.ariaLabel"
|
|
7040
7137
|
(click)="selectDate(day.date)"
|
|
7041
|
-
(keydown)="onDayKeydown($event, day.date)"
|
|
7138
|
+
(keydown)="onDayKeydown($event, day.date)"
|
|
7139
|
+
(mouseenter)="onDayMouseEnter(day.date)"
|
|
7140
|
+
(mouseleave)="onDayMouseLeave()">
|
|
7042
7141
|
{{ day.dayNumber }}
|
|
7043
7142
|
</button>
|
|
7044
7143
|
}
|
|
@@ -7047,6 +7146,21 @@ class DsDatePicker {
|
|
|
7047
7146
|
</div>
|
|
7048
7147
|
</div>
|
|
7049
7148
|
|
|
7149
|
+
<!-- Presets (mode range uniquement) -->
|
|
7150
|
+
@if (showPresets() && mode() === 'range') {
|
|
7151
|
+
<div class="ds-date-picker__presets">
|
|
7152
|
+
@for (preset of effectivePresets(); track preset.label) {
|
|
7153
|
+
<button
|
|
7154
|
+
type="button"
|
|
7155
|
+
class="ds-date-picker__preset"
|
|
7156
|
+
[disabled]="disabled()"
|
|
7157
|
+
(click)="selectPreset(preset)">
|
|
7158
|
+
{{ preset.label }}
|
|
7159
|
+
</button>
|
|
7160
|
+
}
|
|
7161
|
+
</div>
|
|
7162
|
+
}
|
|
7163
|
+
|
|
7050
7164
|
<!-- Actions -->
|
|
7051
7165
|
@if (showTodayButton() || showClearButton()) {
|
|
7052
7166
|
<div class="ds-date-picker__actions">
|
|
@@ -7072,7 +7186,7 @@ class DsDatePicker {
|
|
|
7072
7186
|
}
|
|
7073
7187
|
}
|
|
7074
7188
|
</div>
|
|
7075
|
-
`, isInline: true, styles: [".ds-date-picker{display:inline-flex;flex-direction:column;background:var(--datepicker-bg, var(--background-main));border:1px solid var(--datepicker-border, var(--border-default));border-radius:var(--datepicker-radius, var(--radius-2));box-shadow:var(--datepicker-shadow, var(--shadow-2));overflow:hidden;-webkit-user-select:none;user-select:none}.ds-date-picker--sm{width:var(--datepicker-width-sm, 260px);font-size:var(--datepicker-font-size-sm, var(--font-size-2))}.ds-date-picker--sm .ds-date-picker__header{padding:var(--datepicker-header-padding-sm, var(--space-2))}.ds-date-picker--sm .ds-date-picker__nav{width:var(--datepicker-nav-size-sm, 24px);height:var(--datepicker-nav-size-sm, 24px)}.ds-date-picker--sm .ds-date-picker__day{width:var(--datepicker-day-size-sm, 28px);height:var(--datepicker-day-size-sm, 28px)}.ds-date-picker--sm .ds-date-picker__weekday{width:var(--datepicker-day-size-sm, 28px);height:var(--datepicker-weekday-height-sm, 24px)}.ds-date-picker--md{width:var(--datepicker-width-md, 300px);font-size:var(--datepicker-font-size-md, var(--font-size-3))}.ds-date-picker--md .ds-date-picker__header{padding:var(--datepicker-header-padding-md, var(--space-3))}.ds-date-picker--md .ds-date-picker__nav{width:var(--datepicker-nav-size-md, 32px);height:var(--datepicker-nav-size-md, 32px)}.ds-date-picker--md .ds-date-picker__day{width:var(--datepicker-day-size-md, 36px);height:var(--datepicker-day-size-md, 36px)}.ds-date-picker--md .ds-date-picker__weekday{width:var(--datepicker-day-size-md, 36px);height:var(--datepicker-weekday-height-md, 28px)}.ds-date-picker--lg{width:var(--datepicker-width-lg, 360px);font-size:var(--datepicker-font-size-lg, var(--font-size-4))}.ds-date-picker--lg .ds-date-picker__header{padding:var(--datepicker-header-padding-lg, var(--space-4))}.ds-date-picker--lg .ds-date-picker__nav{width:var(--datepicker-nav-size-lg, 40px);height:var(--datepicker-nav-size-lg, 40px)}.ds-date-picker--lg .ds-date-picker__day{width:var(--datepicker-day-size-lg, 44px);height:var(--datepicker-day-size-lg, 44px)}.ds-date-picker--lg .ds-date-picker__weekday{width:var(--datepicker-day-size-lg, 44px);height:var(--datepicker-weekday-height-lg, 32px)}.ds-date-picker--disabled{opacity:.6;pointer-events:none}.ds-date-picker__header{display:flex;align-items:center;justify-content:space-between;background:var(--datepicker-header-bg, var(--surface-raised));border-bottom:1px solid var(--datepicker-border, var(--border-default))}.ds-date-picker__title{display:flex;align-items:center;gap:var(--space-1)}.ds-date-picker__month-btn,.ds-date-picker__year-btn{padding:var(--space-1) var(--space-2);background:transparent;border:none;border-radius:var(--radius-1);color:var(--datepicker-title-color, var(--text-default));font-weight:600;cursor:pointer;transition:background-color var(--duration-fast, .15s) ease}.ds-date-picker__month-btn:hover:not(:disabled),.ds-date-picker__year-btn:hover:not(:disabled){background:var(--datepicker-btn-hover-bg, var(--surface-hover))}.ds-date-picker__month-btn:focus-visible,.ds-date-picker__year-btn:focus-visible{outline:2px solid var(--color-primary);outline-offset:1px}.ds-date-picker__month-btn:disabled,.ds-date-picker__year-btn:disabled{cursor:not-allowed;opacity:.5}.ds-date-picker__nav{display:flex;align-items:center;justify-content:center;background:transparent;border:none;border-radius:var(--radius-1);color:var(--datepicker-nav-color, var(--text-muted));cursor:pointer;transition:background-color var(--duration-fast, .15s) ease,color var(--duration-fast, .15s) ease}.ds-date-picker__nav:hover:not(:disabled){background:var(--datepicker-btn-hover-bg, var(--surface-hover));color:var(--text-default)}.ds-date-picker__nav:focus-visible{outline:2px solid var(--color-primary);outline-offset:1px}.ds-date-picker__nav:disabled{cursor:not-allowed;opacity:.5}.ds-date-picker__calendar{padding:var(--datepicker-calendar-padding, var(--space-2))}.ds-date-picker__weekdays{display:flex;margin-bottom:var(--datepicker-calendar-gap, var(--space-1))}.ds-date-picker__weekday{display:flex;align-items:center;justify-content:center;color:var(--datepicker-weekday-color, var(--text-muted));font-size:.75em;font-weight:500;text-transform:uppercase}.ds-date-picker__days{display:flex;flex-direction:column;gap:var(--datepicker-calendar-gap, var(--space-1))}.ds-date-picker__week{display:flex}.ds-date-picker__day{display:flex;align-items:center;justify-content:center;background:transparent;border:none;border-radius:var(--radius-1);color:var(--datepicker-day-color, var(--text-default));font-weight:400;cursor:pointer;transition:background-color var(--duration-fast, .15s) ease,color var(--duration-fast, .15s) ease}.ds-date-picker__day:hover:not(:disabled):not(.ds-date-picker__day--selected){background:var(--datepicker-day-hover-bg, var(--surface-hover))}.ds-date-picker__day:focus-visible{outline:2px solid var(--color-primary);outline-offset:-2px;z-index:1}.ds-date-picker__day--other-month{color:var(--datepicker-day-other-color, var(--text-muted))}.ds-date-picker__day--today{font-weight:600;border:1px solid var(--datepicker-today-border, var(--color-primary))}.ds-date-picker__day--selected{background:var(--datepicker-selected-bg, var(--color-primary));color:var(--datepicker-selected-text, var(--gray-50));font-weight:600}.ds-date-picker__day--selected:hover:not(:disabled){background:var(--datepicker-selected-hover-bg, color-mix(in oklab, var(--color-primary) 85%, var(--background-main)))}.ds-date-picker__day--range-start{background:var(--datepicker-selected-bg, var(--color-primary));color:var(--datepicker-selected-text, var(--gray-50));border-radius:var(--radius-1) 0 0 var(--radius-1)}.ds-date-picker__day--range-end{background:var(--datepicker-selected-bg, var(--color-primary));color:var(--datepicker-selected-text, var(--gray-50));border-radius:0 var(--radius-1) var(--radius-1) 0}.ds-date-picker__day--in-range{background:var(--datepicker-range-bg, color-mix(in oklab, var(--color-primary) 15%, transparent));border-radius:0}.ds-date-picker__day--disabled{opacity:.4;cursor:not-allowed}.ds-date-picker__month-picker,.ds-date-picker__year-picker{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--space-2);padding:var(--space-3);max-height:240px;overflow-y:auto}.ds-date-picker__month-option,.ds-date-picker__year-option{padding:var(--space-2);background:transparent;border:1px solid transparent;border-radius:var(--radius-1);color:var(--datepicker-option-color, var(--text-default));cursor:pointer;transition:background-color var(--duration-fast, .15s) ease,border-color var(--duration-fast, .15s) ease}.ds-date-picker__month-option:hover:not(:disabled),.ds-date-picker__year-option:hover:not(:disabled){background:var(--datepicker-option-hover-bg, var(--surface-hover));border-color:var(--border-default)}.ds-date-picker__month-option:focus-visible,.ds-date-picker__year-option:focus-visible{outline:2px solid var(--color-primary);outline-offset:1px}.ds-date-picker__month-option--selected,.ds-date-picker__year-option--selected{background:var(--datepicker-selected-bg, var(--color-primary));color:var(--datepicker-selected-text, var(--gray-50));border-color:var(--datepicker-selected-bg, var(--color-primary))}.ds-date-picker__month-option--selected:hover:not(:disabled),.ds-date-picker__year-option--selected:hover:not(:disabled){background:var(--datepicker-selected-hover-bg, color-mix(in oklab, var(--color-primary) 85%, var(--background-main)));border-color:var(--datepicker-selected-hover-bg, color-mix(in oklab, var(--color-primary) 85%, var(--background-main)))}.ds-date-picker__month-option:disabled,.ds-date-picker__year-option:disabled{cursor:not-allowed;opacity:.5}.ds-date-picker__actions{display:flex;justify-content:center;gap:var(--space-2);padding:var(--space-2);border-top:1px solid var(--datepicker-border, var(--border-default));background:var(--datepicker-footer-bg, var(--surface-raised))}.ds-date-picker__action{padding:var(--space-1) var(--space-3);background:transparent;border:1px solid var(--border-default);border-radius:var(--radius-1);color:var(--datepicker-action-color, var(--text-default));font-size:.875em;cursor:pointer;transition:background-color var(--duration-fast, .15s) ease,border-color var(--duration-fast, .15s) ease}.ds-date-picker__action:hover:not(:disabled){background:var(--datepicker-action-hover-bg, var(--surface-hover));border-color:var(--border-strong)}.ds-date-picker__action:focus-visible{outline:2px solid var(--color-primary);outline-offset:1px}.ds-date-picker__action:disabled{cursor:not-allowed;opacity:.5}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FontAwesomeModule }, { kind: "component", type: i2.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
7189
|
+
`, isInline: true, styles: [".ds-date-picker{display:inline-flex;flex-direction:column;background:var(--datepicker-bg, var(--background-main));border:1px solid var(--datepicker-border, var(--border-default));border-radius:var(--datepicker-radius, var(--radius-2));box-shadow:var(--datepicker-shadow, var(--shadow-2));overflow:hidden;-webkit-user-select:none;user-select:none}.ds-date-picker--sm{width:var(--datepicker-width-sm, 260px);font-size:var(--datepicker-font-size-sm, var(--font-size-2))}.ds-date-picker--sm .ds-date-picker__header{padding:var(--datepicker-header-padding-sm, var(--space-2))}.ds-date-picker--sm .ds-date-picker__nav{width:var(--datepicker-nav-size-sm, 24px);height:var(--datepicker-nav-size-sm, 24px)}.ds-date-picker--sm .ds-date-picker__day{width:var(--datepicker-day-size-sm, 28px);height:var(--datepicker-day-size-sm, 28px)}.ds-date-picker--sm .ds-date-picker__weekday{width:var(--datepicker-day-size-sm, 28px);height:var(--datepicker-weekday-height-sm, 24px)}.ds-date-picker--md{width:var(--datepicker-width-md, 300px);font-size:var(--datepicker-font-size-md, var(--font-size-3))}.ds-date-picker--md .ds-date-picker__header{padding:var(--datepicker-header-padding-md, var(--space-3))}.ds-date-picker--md .ds-date-picker__nav{width:var(--datepicker-nav-size-md, 32px);height:var(--datepicker-nav-size-md, 32px)}.ds-date-picker--md .ds-date-picker__day{width:var(--datepicker-day-size-md, 36px);height:var(--datepicker-day-size-md, 36px)}.ds-date-picker--md .ds-date-picker__weekday{width:var(--datepicker-day-size-md, 36px);height:var(--datepicker-weekday-height-md, 28px)}.ds-date-picker--lg{width:var(--datepicker-width-lg, 360px);font-size:var(--datepicker-font-size-lg, var(--font-size-4))}.ds-date-picker--lg .ds-date-picker__header{padding:var(--datepicker-header-padding-lg, var(--space-4))}.ds-date-picker--lg .ds-date-picker__nav{width:var(--datepicker-nav-size-lg, 40px);height:var(--datepicker-nav-size-lg, 40px)}.ds-date-picker--lg .ds-date-picker__day{width:var(--datepicker-day-size-lg, 44px);height:var(--datepicker-day-size-lg, 44px)}.ds-date-picker--lg .ds-date-picker__weekday{width:var(--datepicker-day-size-lg, 44px);height:var(--datepicker-weekday-height-lg, 32px)}.ds-date-picker--disabled{opacity:.6;pointer-events:none}.ds-date-picker__header{display:flex;align-items:center;justify-content:space-between;background:var(--datepicker-header-bg, var(--surface-raised));border-bottom:1px solid var(--datepicker-border, var(--border-default))}.ds-date-picker__title{display:flex;align-items:center;gap:var(--space-1)}.ds-date-picker__month-btn,.ds-date-picker__year-btn{padding:var(--space-1) var(--space-2);background:transparent;border:none;border-radius:var(--radius-1);color:var(--datepicker-title-color, var(--text-default));font-weight:600;cursor:pointer;transition:background-color var(--duration-fast, .15s) ease}.ds-date-picker__month-btn:hover:not(:disabled),.ds-date-picker__year-btn:hover:not(:disabled){background:var(--datepicker-btn-hover-bg, var(--surface-hover))}.ds-date-picker__month-btn:focus-visible,.ds-date-picker__year-btn:focus-visible{outline:2px solid var(--color-primary);outline-offset:1px}.ds-date-picker__month-btn:disabled,.ds-date-picker__year-btn:disabled{cursor:not-allowed;opacity:.5}.ds-date-picker__nav{display:flex;align-items:center;justify-content:center;background:transparent;border:none;border-radius:var(--radius-1);color:var(--datepicker-nav-color, var(--text-muted));cursor:pointer;transition:background-color var(--duration-fast, .15s) ease,color var(--duration-fast, .15s) ease}.ds-date-picker__nav:hover:not(:disabled){background:var(--datepicker-btn-hover-bg, var(--surface-hover));color:var(--text-default)}.ds-date-picker__nav:focus-visible{outline:2px solid var(--color-primary);outline-offset:1px}.ds-date-picker__nav:disabled{cursor:not-allowed;opacity:.5}.ds-date-picker__calendar{padding:var(--datepicker-calendar-padding, var(--space-2))}.ds-date-picker__weekdays{display:flex;margin-bottom:var(--datepicker-calendar-gap, var(--space-1))}.ds-date-picker__weekday{display:flex;align-items:center;justify-content:center;color:var(--datepicker-weekday-color, var(--text-muted));font-size:.75em;font-weight:500;text-transform:uppercase}.ds-date-picker__days{display:flex;flex-direction:column;gap:var(--datepicker-calendar-gap, var(--space-1))}.ds-date-picker__week{display:flex}.ds-date-picker__day{display:flex;align-items:center;justify-content:center;background:transparent;border:none;border-radius:var(--radius-1);color:var(--datepicker-day-color, var(--text-default));font-weight:400;cursor:pointer;transition:background-color var(--duration-fast, .15s) ease,color var(--duration-fast, .15s) ease}.ds-date-picker__day:hover:not(:disabled):not(.ds-date-picker__day--selected){background:var(--datepicker-day-hover-bg, var(--surface-hover))}.ds-date-picker__day:focus-visible{outline:2px solid var(--color-primary);outline-offset:-2px;z-index:1}.ds-date-picker__day--other-month{color:var(--datepicker-day-other-color, var(--text-muted))}.ds-date-picker__day--today{font-weight:600;border:1px solid var(--datepicker-today-border, var(--color-primary))}.ds-date-picker__day--selected{background:var(--datepicker-selected-bg, var(--color-primary));color:var(--datepicker-selected-text, var(--gray-50));font-weight:600}.ds-date-picker__day--selected:hover:not(:disabled){background:var(--datepicker-selected-hover-bg, color-mix(in oklab, var(--color-primary) 85%, var(--background-main)))}.ds-date-picker__day--range-start{background:var(--datepicker-selected-bg, var(--color-primary));color:var(--datepicker-selected-text, var(--gray-50));border-radius:var(--radius-1) 0 0 var(--radius-1)}.ds-date-picker__day--range-end{background:var(--datepicker-selected-bg, var(--color-primary));color:var(--datepicker-selected-text, var(--gray-50));border-radius:0 var(--radius-1) var(--radius-1) 0}.ds-date-picker__day--in-range{background:var(--datepicker-range-bg, color-mix(in oklab, var(--color-primary) 15%, transparent));border-radius:0}.ds-date-picker__day--in-preview{background:var(--datepicker-preview-bg, color-mix(in oklab, var(--color-primary) 10%, transparent));border-radius:0}.ds-date-picker__day--disabled{opacity:.4;cursor:not-allowed}.ds-date-picker__month-picker,.ds-date-picker__year-picker{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--space-2);padding:var(--space-3);max-height:240px;overflow-y:auto}.ds-date-picker__month-option,.ds-date-picker__year-option{padding:var(--space-2);background:transparent;border:1px solid transparent;border-radius:var(--radius-1);color:var(--datepicker-option-color, var(--text-default));cursor:pointer;transition:background-color var(--duration-fast, .15s) ease,border-color var(--duration-fast, .15s) ease}.ds-date-picker__month-option:hover:not(:disabled),.ds-date-picker__year-option:hover:not(:disabled){background:var(--datepicker-option-hover-bg, var(--surface-hover));border-color:var(--border-default)}.ds-date-picker__month-option:focus-visible,.ds-date-picker__year-option:focus-visible{outline:2px solid var(--color-primary);outline-offset:1px}.ds-date-picker__month-option--selected,.ds-date-picker__year-option--selected{background:var(--datepicker-selected-bg, var(--color-primary));color:var(--datepicker-selected-text, var(--gray-50));border-color:var(--datepicker-selected-bg, var(--color-primary))}.ds-date-picker__month-option--selected:hover:not(:disabled),.ds-date-picker__year-option--selected:hover:not(:disabled){background:var(--datepicker-selected-hover-bg, color-mix(in oklab, var(--color-primary) 85%, var(--background-main)));border-color:var(--datepicker-selected-hover-bg, color-mix(in oklab, var(--color-primary) 85%, var(--background-main)))}.ds-date-picker__month-option:disabled,.ds-date-picker__year-option:disabled{cursor:not-allowed;opacity:.5}.ds-date-picker__actions{display:flex;justify-content:center;gap:var(--space-2);padding:var(--space-2);border-top:1px solid var(--datepicker-border, var(--border-default));background:var(--datepicker-footer-bg, var(--surface-raised))}.ds-date-picker__action{padding:var(--space-1) var(--space-3);background:transparent;border:1px solid var(--border-default);border-radius:var(--radius-1);color:var(--datepicker-action-color, var(--text-default));font-size:.875em;cursor:pointer;transition:background-color var(--duration-fast, .15s) ease,border-color var(--duration-fast, .15s) ease}.ds-date-picker__action:hover:not(:disabled){background:var(--datepicker-action-hover-bg, var(--surface-hover));border-color:var(--border-strong)}.ds-date-picker__action:focus-visible{outline:2px solid var(--color-primary);outline-offset:1px}.ds-date-picker__action:disabled{cursor:not-allowed;opacity:.5}.ds-date-picker__presets{display:flex;flex-wrap:wrap;gap:var(--space-1);padding:var(--space-2);border-top:1px solid var(--datepicker-border, var(--border-default));background:var(--datepicker-presets-bg, var(--surface-raised))}.ds-date-picker__preset{padding:var(--space-1) var(--space-2);background:var(--datepicker-preset-bg, transparent);border:1px solid var(--datepicker-preset-border, var(--border-default));border-radius:var(--radius-1);color:var(--datepicker-preset-color, var(--text-muted));font-size:.75em;font-weight:500;cursor:pointer;transition:background-color var(--duration-fast, .15s) ease,border-color var(--duration-fast, .15s) ease,color var(--duration-fast, .15s) ease}.ds-date-picker__preset:hover:not(:disabled){background:var(--datepicker-preset-hover-bg, var(--surface-hover));border-color:var(--color-primary);color:var(--text-default)}.ds-date-picker__preset:focus-visible{outline:2px solid var(--color-primary);outline-offset:1px}.ds-date-picker__preset:disabled{cursor:not-allowed;opacity:.5}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FontAwesomeModule }, { kind: "component", type: i1$1.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"], outputs: ["iconChange", "titleChange", "animationChange", "maskChange", "flipChange", "sizeChange", "pullChange", "borderChange", "inverseChange", "symbolChange", "rotateChange", "fixedWidthChange", "transformChange", "a11yRoleChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
7076
7190
|
}
|
|
7077
7191
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DsDatePicker, decorators: [{
|
|
7078
7192
|
type: Component,
|
|
@@ -7176,13 +7290,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
7176
7290
|
[class.ds-date-picker__day--range-start]="day.isRangeStart"
|
|
7177
7291
|
[class.ds-date-picker__day--range-end]="day.isRangeEnd"
|
|
7178
7292
|
[class.ds-date-picker__day--in-range]="day.isInRange"
|
|
7293
|
+
[class.ds-date-picker__day--in-preview]="day.isInPreviewRange"
|
|
7179
7294
|
[class.ds-date-picker__day--disabled]="day.isDisabled"
|
|
7180
7295
|
[disabled]="disabled() || day.isDisabled"
|
|
7181
7296
|
role="gridcell"
|
|
7182
7297
|
[attr.aria-selected]="day.isSelected"
|
|
7183
7298
|
[attr.aria-label]="day.ariaLabel"
|
|
7184
7299
|
(click)="selectDate(day.date)"
|
|
7185
|
-
(keydown)="onDayKeydown($event, day.date)"
|
|
7300
|
+
(keydown)="onDayKeydown($event, day.date)"
|
|
7301
|
+
(mouseenter)="onDayMouseEnter(day.date)"
|
|
7302
|
+
(mouseleave)="onDayMouseLeave()">
|
|
7186
7303
|
{{ day.dayNumber }}
|
|
7187
7304
|
</button>
|
|
7188
7305
|
}
|
|
@@ -7191,6 +7308,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
7191
7308
|
</div>
|
|
7192
7309
|
</div>
|
|
7193
7310
|
|
|
7311
|
+
<!-- Presets (mode range uniquement) -->
|
|
7312
|
+
@if (showPresets() && mode() === 'range') {
|
|
7313
|
+
<div class="ds-date-picker__presets">
|
|
7314
|
+
@for (preset of effectivePresets(); track preset.label) {
|
|
7315
|
+
<button
|
|
7316
|
+
type="button"
|
|
7317
|
+
class="ds-date-picker__preset"
|
|
7318
|
+
[disabled]="disabled()"
|
|
7319
|
+
(click)="selectPreset(preset)">
|
|
7320
|
+
{{ preset.label }}
|
|
7321
|
+
</button>
|
|
7322
|
+
}
|
|
7323
|
+
</div>
|
|
7324
|
+
}
|
|
7325
|
+
|
|
7194
7326
|
<!-- Actions -->
|
|
7195
7327
|
@if (showTodayButton() || showClearButton()) {
|
|
7196
7328
|
<div class="ds-date-picker__actions">
|
|
@@ -7222,8 +7354,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
7222
7354
|
useExisting: forwardRef(() => DsDatePicker),
|
|
7223
7355
|
multi: true,
|
|
7224
7356
|
},
|
|
7225
|
-
], styles: [".ds-date-picker{display:inline-flex;flex-direction:column;background:var(--datepicker-bg, var(--background-main));border:1px solid var(--datepicker-border, var(--border-default));border-radius:var(--datepicker-radius, var(--radius-2));box-shadow:var(--datepicker-shadow, var(--shadow-2));overflow:hidden;-webkit-user-select:none;user-select:none}.ds-date-picker--sm{width:var(--datepicker-width-sm, 260px);font-size:var(--datepicker-font-size-sm, var(--font-size-2))}.ds-date-picker--sm .ds-date-picker__header{padding:var(--datepicker-header-padding-sm, var(--space-2))}.ds-date-picker--sm .ds-date-picker__nav{width:var(--datepicker-nav-size-sm, 24px);height:var(--datepicker-nav-size-sm, 24px)}.ds-date-picker--sm .ds-date-picker__day{width:var(--datepicker-day-size-sm, 28px);height:var(--datepicker-day-size-sm, 28px)}.ds-date-picker--sm .ds-date-picker__weekday{width:var(--datepicker-day-size-sm, 28px);height:var(--datepicker-weekday-height-sm, 24px)}.ds-date-picker--md{width:var(--datepicker-width-md, 300px);font-size:var(--datepicker-font-size-md, var(--font-size-3))}.ds-date-picker--md .ds-date-picker__header{padding:var(--datepicker-header-padding-md, var(--space-3))}.ds-date-picker--md .ds-date-picker__nav{width:var(--datepicker-nav-size-md, 32px);height:var(--datepicker-nav-size-md, 32px)}.ds-date-picker--md .ds-date-picker__day{width:var(--datepicker-day-size-md, 36px);height:var(--datepicker-day-size-md, 36px)}.ds-date-picker--md .ds-date-picker__weekday{width:var(--datepicker-day-size-md, 36px);height:var(--datepicker-weekday-height-md, 28px)}.ds-date-picker--lg{width:var(--datepicker-width-lg, 360px);font-size:var(--datepicker-font-size-lg, var(--font-size-4))}.ds-date-picker--lg .ds-date-picker__header{padding:var(--datepicker-header-padding-lg, var(--space-4))}.ds-date-picker--lg .ds-date-picker__nav{width:var(--datepicker-nav-size-lg, 40px);height:var(--datepicker-nav-size-lg, 40px)}.ds-date-picker--lg .ds-date-picker__day{width:var(--datepicker-day-size-lg, 44px);height:var(--datepicker-day-size-lg, 44px)}.ds-date-picker--lg .ds-date-picker__weekday{width:var(--datepicker-day-size-lg, 44px);height:var(--datepicker-weekday-height-lg, 32px)}.ds-date-picker--disabled{opacity:.6;pointer-events:none}.ds-date-picker__header{display:flex;align-items:center;justify-content:space-between;background:var(--datepicker-header-bg, var(--surface-raised));border-bottom:1px solid var(--datepicker-border, var(--border-default))}.ds-date-picker__title{display:flex;align-items:center;gap:var(--space-1)}.ds-date-picker__month-btn,.ds-date-picker__year-btn{padding:var(--space-1) var(--space-2);background:transparent;border:none;border-radius:var(--radius-1);color:var(--datepicker-title-color, var(--text-default));font-weight:600;cursor:pointer;transition:background-color var(--duration-fast, .15s) ease}.ds-date-picker__month-btn:hover:not(:disabled),.ds-date-picker__year-btn:hover:not(:disabled){background:var(--datepicker-btn-hover-bg, var(--surface-hover))}.ds-date-picker__month-btn:focus-visible,.ds-date-picker__year-btn:focus-visible{outline:2px solid var(--color-primary);outline-offset:1px}.ds-date-picker__month-btn:disabled,.ds-date-picker__year-btn:disabled{cursor:not-allowed;opacity:.5}.ds-date-picker__nav{display:flex;align-items:center;justify-content:center;background:transparent;border:none;border-radius:var(--radius-1);color:var(--datepicker-nav-color, var(--text-muted));cursor:pointer;transition:background-color var(--duration-fast, .15s) ease,color var(--duration-fast, .15s) ease}.ds-date-picker__nav:hover:not(:disabled){background:var(--datepicker-btn-hover-bg, var(--surface-hover));color:var(--text-default)}.ds-date-picker__nav:focus-visible{outline:2px solid var(--color-primary);outline-offset:1px}.ds-date-picker__nav:disabled{cursor:not-allowed;opacity:.5}.ds-date-picker__calendar{padding:var(--datepicker-calendar-padding, var(--space-2))}.ds-date-picker__weekdays{display:flex;margin-bottom:var(--datepicker-calendar-gap, var(--space-1))}.ds-date-picker__weekday{display:flex;align-items:center;justify-content:center;color:var(--datepicker-weekday-color, var(--text-muted));font-size:.75em;font-weight:500;text-transform:uppercase}.ds-date-picker__days{display:flex;flex-direction:column;gap:var(--datepicker-calendar-gap, var(--space-1))}.ds-date-picker__week{display:flex}.ds-date-picker__day{display:flex;align-items:center;justify-content:center;background:transparent;border:none;border-radius:var(--radius-1);color:var(--datepicker-day-color, var(--text-default));font-weight:400;cursor:pointer;transition:background-color var(--duration-fast, .15s) ease,color var(--duration-fast, .15s) ease}.ds-date-picker__day:hover:not(:disabled):not(.ds-date-picker__day--selected){background:var(--datepicker-day-hover-bg, var(--surface-hover))}.ds-date-picker__day:focus-visible{outline:2px solid var(--color-primary);outline-offset:-2px;z-index:1}.ds-date-picker__day--other-month{color:var(--datepicker-day-other-color, var(--text-muted))}.ds-date-picker__day--today{font-weight:600;border:1px solid var(--datepicker-today-border, var(--color-primary))}.ds-date-picker__day--selected{background:var(--datepicker-selected-bg, var(--color-primary));color:var(--datepicker-selected-text, var(--gray-50));font-weight:600}.ds-date-picker__day--selected:hover:not(:disabled){background:var(--datepicker-selected-hover-bg, color-mix(in oklab, var(--color-primary) 85%, var(--background-main)))}.ds-date-picker__day--range-start{background:var(--datepicker-selected-bg, var(--color-primary));color:var(--datepicker-selected-text, var(--gray-50));border-radius:var(--radius-1) 0 0 var(--radius-1)}.ds-date-picker__day--range-end{background:var(--datepicker-selected-bg, var(--color-primary));color:var(--datepicker-selected-text, var(--gray-50));border-radius:0 var(--radius-1) var(--radius-1) 0}.ds-date-picker__day--in-range{background:var(--datepicker-range-bg, color-mix(in oklab, var(--color-primary) 15%, transparent));border-radius:0}.ds-date-picker__day--disabled{opacity:.4;cursor:not-allowed}.ds-date-picker__month-picker,.ds-date-picker__year-picker{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--space-2);padding:var(--space-3);max-height:240px;overflow-y:auto}.ds-date-picker__month-option,.ds-date-picker__year-option{padding:var(--space-2);background:transparent;border:1px solid transparent;border-radius:var(--radius-1);color:var(--datepicker-option-color, var(--text-default));cursor:pointer;transition:background-color var(--duration-fast, .15s) ease,border-color var(--duration-fast, .15s) ease}.ds-date-picker__month-option:hover:not(:disabled),.ds-date-picker__year-option:hover:not(:disabled){background:var(--datepicker-option-hover-bg, var(--surface-hover));border-color:var(--border-default)}.ds-date-picker__month-option:focus-visible,.ds-date-picker__year-option:focus-visible{outline:2px solid var(--color-primary);outline-offset:1px}.ds-date-picker__month-option--selected,.ds-date-picker__year-option--selected{background:var(--datepicker-selected-bg, var(--color-primary));color:var(--datepicker-selected-text, var(--gray-50));border-color:var(--datepicker-selected-bg, var(--color-primary))}.ds-date-picker__month-option--selected:hover:not(:disabled),.ds-date-picker__year-option--selected:hover:not(:disabled){background:var(--datepicker-selected-hover-bg, color-mix(in oklab, var(--color-primary) 85%, var(--background-main)));border-color:var(--datepicker-selected-hover-bg, color-mix(in oklab, var(--color-primary) 85%, var(--background-main)))}.ds-date-picker__month-option:disabled,.ds-date-picker__year-option:disabled{cursor:not-allowed;opacity:.5}.ds-date-picker__actions{display:flex;justify-content:center;gap:var(--space-2);padding:var(--space-2);border-top:1px solid var(--datepicker-border, var(--border-default));background:var(--datepicker-footer-bg, var(--surface-raised))}.ds-date-picker__action{padding:var(--space-1) var(--space-3);background:transparent;border:1px solid var(--border-default);border-radius:var(--radius-1);color:var(--datepicker-action-color, var(--text-default));font-size:.875em;cursor:pointer;transition:background-color var(--duration-fast, .15s) ease,border-color var(--duration-fast, .15s) ease}.ds-date-picker__action:hover:not(:disabled){background:var(--datepicker-action-hover-bg, var(--surface-hover));border-color:var(--border-strong)}.ds-date-picker__action:focus-visible{outline:2px solid var(--color-primary);outline-offset:1px}.ds-date-picker__action:disabled{cursor:not-allowed;opacity:.5}\n"] }]
|
|
7226
|
-
}], propDecorators: { size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], minDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "minDate", required: false }] }], maxDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxDate", required: false }] }], showTodayButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "showTodayButton", required: false }] }], showClearButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "showClearButton", required: false }] }], todayLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "todayLabel", required: false }] }], clearLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "clearLabel", required: false }] }], prevMonthLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "prevMonthLabel", required: false }] }], nextMonthLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "nextMonthLabel", required: false }] }], dateChange: [{ type: i0.Output, args: ["dateChange"] }], rangeChange: [{ type: i0.Output, args: ["rangeChange"] }] } });
|
|
7357
|
+
], styles: [".ds-date-picker{display:inline-flex;flex-direction:column;background:var(--datepicker-bg, var(--background-main));border:1px solid var(--datepicker-border, var(--border-default));border-radius:var(--datepicker-radius, var(--radius-2));box-shadow:var(--datepicker-shadow, var(--shadow-2));overflow:hidden;-webkit-user-select:none;user-select:none}.ds-date-picker--sm{width:var(--datepicker-width-sm, 260px);font-size:var(--datepicker-font-size-sm, var(--font-size-2))}.ds-date-picker--sm .ds-date-picker__header{padding:var(--datepicker-header-padding-sm, var(--space-2))}.ds-date-picker--sm .ds-date-picker__nav{width:var(--datepicker-nav-size-sm, 24px);height:var(--datepicker-nav-size-sm, 24px)}.ds-date-picker--sm .ds-date-picker__day{width:var(--datepicker-day-size-sm, 28px);height:var(--datepicker-day-size-sm, 28px)}.ds-date-picker--sm .ds-date-picker__weekday{width:var(--datepicker-day-size-sm, 28px);height:var(--datepicker-weekday-height-sm, 24px)}.ds-date-picker--md{width:var(--datepicker-width-md, 300px);font-size:var(--datepicker-font-size-md, var(--font-size-3))}.ds-date-picker--md .ds-date-picker__header{padding:var(--datepicker-header-padding-md, var(--space-3))}.ds-date-picker--md .ds-date-picker__nav{width:var(--datepicker-nav-size-md, 32px);height:var(--datepicker-nav-size-md, 32px)}.ds-date-picker--md .ds-date-picker__day{width:var(--datepicker-day-size-md, 36px);height:var(--datepicker-day-size-md, 36px)}.ds-date-picker--md .ds-date-picker__weekday{width:var(--datepicker-day-size-md, 36px);height:var(--datepicker-weekday-height-md, 28px)}.ds-date-picker--lg{width:var(--datepicker-width-lg, 360px);font-size:var(--datepicker-font-size-lg, var(--font-size-4))}.ds-date-picker--lg .ds-date-picker__header{padding:var(--datepicker-header-padding-lg, var(--space-4))}.ds-date-picker--lg .ds-date-picker__nav{width:var(--datepicker-nav-size-lg, 40px);height:var(--datepicker-nav-size-lg, 40px)}.ds-date-picker--lg .ds-date-picker__day{width:var(--datepicker-day-size-lg, 44px);height:var(--datepicker-day-size-lg, 44px)}.ds-date-picker--lg .ds-date-picker__weekday{width:var(--datepicker-day-size-lg, 44px);height:var(--datepicker-weekday-height-lg, 32px)}.ds-date-picker--disabled{opacity:.6;pointer-events:none}.ds-date-picker__header{display:flex;align-items:center;justify-content:space-between;background:var(--datepicker-header-bg, var(--surface-raised));border-bottom:1px solid var(--datepicker-border, var(--border-default))}.ds-date-picker__title{display:flex;align-items:center;gap:var(--space-1)}.ds-date-picker__month-btn,.ds-date-picker__year-btn{padding:var(--space-1) var(--space-2);background:transparent;border:none;border-radius:var(--radius-1);color:var(--datepicker-title-color, var(--text-default));font-weight:600;cursor:pointer;transition:background-color var(--duration-fast, .15s) ease}.ds-date-picker__month-btn:hover:not(:disabled),.ds-date-picker__year-btn:hover:not(:disabled){background:var(--datepicker-btn-hover-bg, var(--surface-hover))}.ds-date-picker__month-btn:focus-visible,.ds-date-picker__year-btn:focus-visible{outline:2px solid var(--color-primary);outline-offset:1px}.ds-date-picker__month-btn:disabled,.ds-date-picker__year-btn:disabled{cursor:not-allowed;opacity:.5}.ds-date-picker__nav{display:flex;align-items:center;justify-content:center;background:transparent;border:none;border-radius:var(--radius-1);color:var(--datepicker-nav-color, var(--text-muted));cursor:pointer;transition:background-color var(--duration-fast, .15s) ease,color var(--duration-fast, .15s) ease}.ds-date-picker__nav:hover:not(:disabled){background:var(--datepicker-btn-hover-bg, var(--surface-hover));color:var(--text-default)}.ds-date-picker__nav:focus-visible{outline:2px solid var(--color-primary);outline-offset:1px}.ds-date-picker__nav:disabled{cursor:not-allowed;opacity:.5}.ds-date-picker__calendar{padding:var(--datepicker-calendar-padding, var(--space-2))}.ds-date-picker__weekdays{display:flex;margin-bottom:var(--datepicker-calendar-gap, var(--space-1))}.ds-date-picker__weekday{display:flex;align-items:center;justify-content:center;color:var(--datepicker-weekday-color, var(--text-muted));font-size:.75em;font-weight:500;text-transform:uppercase}.ds-date-picker__days{display:flex;flex-direction:column;gap:var(--datepicker-calendar-gap, var(--space-1))}.ds-date-picker__week{display:flex}.ds-date-picker__day{display:flex;align-items:center;justify-content:center;background:transparent;border:none;border-radius:var(--radius-1);color:var(--datepicker-day-color, var(--text-default));font-weight:400;cursor:pointer;transition:background-color var(--duration-fast, .15s) ease,color var(--duration-fast, .15s) ease}.ds-date-picker__day:hover:not(:disabled):not(.ds-date-picker__day--selected){background:var(--datepicker-day-hover-bg, var(--surface-hover))}.ds-date-picker__day:focus-visible{outline:2px solid var(--color-primary);outline-offset:-2px;z-index:1}.ds-date-picker__day--other-month{color:var(--datepicker-day-other-color, var(--text-muted))}.ds-date-picker__day--today{font-weight:600;border:1px solid var(--datepicker-today-border, var(--color-primary))}.ds-date-picker__day--selected{background:var(--datepicker-selected-bg, var(--color-primary));color:var(--datepicker-selected-text, var(--gray-50));font-weight:600}.ds-date-picker__day--selected:hover:not(:disabled){background:var(--datepicker-selected-hover-bg, color-mix(in oklab, var(--color-primary) 85%, var(--background-main)))}.ds-date-picker__day--range-start{background:var(--datepicker-selected-bg, var(--color-primary));color:var(--datepicker-selected-text, var(--gray-50));border-radius:var(--radius-1) 0 0 var(--radius-1)}.ds-date-picker__day--range-end{background:var(--datepicker-selected-bg, var(--color-primary));color:var(--datepicker-selected-text, var(--gray-50));border-radius:0 var(--radius-1) var(--radius-1) 0}.ds-date-picker__day--in-range{background:var(--datepicker-range-bg, color-mix(in oklab, var(--color-primary) 15%, transparent));border-radius:0}.ds-date-picker__day--in-preview{background:var(--datepicker-preview-bg, color-mix(in oklab, var(--color-primary) 10%, transparent));border-radius:0}.ds-date-picker__day--disabled{opacity:.4;cursor:not-allowed}.ds-date-picker__month-picker,.ds-date-picker__year-picker{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--space-2);padding:var(--space-3);max-height:240px;overflow-y:auto}.ds-date-picker__month-option,.ds-date-picker__year-option{padding:var(--space-2);background:transparent;border:1px solid transparent;border-radius:var(--radius-1);color:var(--datepicker-option-color, var(--text-default));cursor:pointer;transition:background-color var(--duration-fast, .15s) ease,border-color var(--duration-fast, .15s) ease}.ds-date-picker__month-option:hover:not(:disabled),.ds-date-picker__year-option:hover:not(:disabled){background:var(--datepicker-option-hover-bg, var(--surface-hover));border-color:var(--border-default)}.ds-date-picker__month-option:focus-visible,.ds-date-picker__year-option:focus-visible{outline:2px solid var(--color-primary);outline-offset:1px}.ds-date-picker__month-option--selected,.ds-date-picker__year-option--selected{background:var(--datepicker-selected-bg, var(--color-primary));color:var(--datepicker-selected-text, var(--gray-50));border-color:var(--datepicker-selected-bg, var(--color-primary))}.ds-date-picker__month-option--selected:hover:not(:disabled),.ds-date-picker__year-option--selected:hover:not(:disabled){background:var(--datepicker-selected-hover-bg, color-mix(in oklab, var(--color-primary) 85%, var(--background-main)));border-color:var(--datepicker-selected-hover-bg, color-mix(in oklab, var(--color-primary) 85%, var(--background-main)))}.ds-date-picker__month-option:disabled,.ds-date-picker__year-option:disabled{cursor:not-allowed;opacity:.5}.ds-date-picker__actions{display:flex;justify-content:center;gap:var(--space-2);padding:var(--space-2);border-top:1px solid var(--datepicker-border, var(--border-default));background:var(--datepicker-footer-bg, var(--surface-raised))}.ds-date-picker__action{padding:var(--space-1) var(--space-3);background:transparent;border:1px solid var(--border-default);border-radius:var(--radius-1);color:var(--datepicker-action-color, var(--text-default));font-size:.875em;cursor:pointer;transition:background-color var(--duration-fast, .15s) ease,border-color var(--duration-fast, .15s) ease}.ds-date-picker__action:hover:not(:disabled){background:var(--datepicker-action-hover-bg, var(--surface-hover));border-color:var(--border-strong)}.ds-date-picker__action:focus-visible{outline:2px solid var(--color-primary);outline-offset:1px}.ds-date-picker__action:disabled{cursor:not-allowed;opacity:.5}.ds-date-picker__presets{display:flex;flex-wrap:wrap;gap:var(--space-1);padding:var(--space-2);border-top:1px solid var(--datepicker-border, var(--border-default));background:var(--datepicker-presets-bg, var(--surface-raised))}.ds-date-picker__preset{padding:var(--space-1) var(--space-2);background:var(--datepicker-preset-bg, transparent);border:1px solid var(--datepicker-preset-border, var(--border-default));border-radius:var(--radius-1);color:var(--datepicker-preset-color, var(--text-muted));font-size:.75em;font-weight:500;cursor:pointer;transition:background-color var(--duration-fast, .15s) ease,border-color var(--duration-fast, .15s) ease,color var(--duration-fast, .15s) ease}.ds-date-picker__preset:hover:not(:disabled){background:var(--datepicker-preset-hover-bg, var(--surface-hover));border-color:var(--color-primary);color:var(--text-default)}.ds-date-picker__preset:focus-visible{outline:2px solid var(--color-primary);outline-offset:1px}.ds-date-picker__preset:disabled{cursor:not-allowed;opacity:.5}\n"] }]
|
|
7358
|
+
}], propDecorators: { size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], minDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "minDate", required: false }] }], maxDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxDate", required: false }] }], showTodayButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "showTodayButton", required: false }] }], showClearButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "showClearButton", required: false }] }], todayLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "todayLabel", required: false }] }], clearLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "clearLabel", required: false }] }], prevMonthLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "prevMonthLabel", required: false }] }], nextMonthLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "nextMonthLabel", required: false }] }], presets: [{ type: i0.Input, args: [{ isSignal: true, alias: "presets", required: false }] }], showPresets: [{ type: i0.Input, args: [{ isSignal: true, alias: "showPresets", required: false }] }], showRangePreview: [{ type: i0.Input, args: [{ isSignal: true, alias: "showRangePreview", required: false }] }], dateChange: [{ type: i0.Output, args: ["dateChange"] }], rangeChange: [{ type: i0.Output, args: ["rangeChange"] }] } });
|
|
7227
7359
|
|
|
7228
7360
|
class DsAvatar {
|
|
7229
7361
|
/** URL de l'image avatar */
|
|
@@ -7522,7 +7654,7 @@ class DsMenu {
|
|
|
7522
7654
|
}
|
|
7523
7655
|
}
|
|
7524
7656
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DsMenu, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
7525
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: DsMenu, isStandalone: true, selector: "ds-menu", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: true, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, trigger: { classPropertyName: "trigger", publicName: "trigger", isSignal: true, isRequired: false, transformFunction: null }, closeOnSelect: { classPropertyName: "closeOnSelect", publicName: "closeOnSelect", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemSelected: "itemSelected", opened: "opened", closed: "closed" }, viewQueries: [{ propertyName: "triggerElement", first: true, predicate: ["menuTrigger"], descendants: true, read: ElementRef }, { propertyName: "menuItemsRef", predicate: ["menuItemRef"], descendants: true }], ngImport: i0, template: "<div\n #menuTrigger\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n (click)=\"onTriggerClick($event)\"\n (contextmenu)=\"onTriggerContextMenu($event)\"\n (keydown)=\"onTriggerKeydown($event)\"\n [attr.aria-haspopup]=\"'menu'\"\n [attr.aria-expanded]=\"isOpen()\"\n class=\"ds-menu__trigger\"\n>\n <ng-content select=\"[dsMenuTrigger]\"></ng-content>\n</div>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayBackdropClass]=\"'ds-menu-backdrop'\"\n (backdropClick)=\"onBackdropClick()\"\n (detach)=\"close(false)\"\n>\n <div\n [ngClass]=\"menuClasses()\"\n role=\"menu\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-activedescendant]=\"activeDescendantId()\"\n (keydown)=\"onMenuKeydown($event)\"\n >\n @for (item of items(); track item.id; let index = $index) {\n @if (item.dividerBefore) {\n <div class=\"ds-menu__divider\" role=\"separator\"></div>\n }\n <button\n #menuItemRef\n type=\"button\"\n class=\"ds-menu__item\"\n [class.ds-menu__item--disabled]=\"item.disabled\"\n [class.ds-menu__item--active]=\"activeIndex() === index\"\n [attr.id]=\"'menu-item-' + item.id\"\n [attr.aria-disabled]=\"item.disabled || null\"\n [disabled]=\"item.disabled\"\n role=\"menuitem\"\n (click)=\"selectItem(item)\"\n (mouseenter)=\"onItemMouseEnter(index)\"\n >\n @if (item.icon) {\n <fa-icon [icon]=\"item.icon\" class=\"ds-menu__item-icon\"></fa-icon>\n }\n <span class=\"ds-menu__item-label\">{{ item.label }}</span>\n </button>\n }\n </div>\n</ng-template>\n", styles: ["@charset \"UTF-8\";:host{display:inline-block}.ds-menu__trigger{display:inline-block;cursor:pointer}.ds-menu__panel{background:var(--menu-bg);border:1px solid var(--menu-border);border-radius:var(--menu-radius);box-shadow:var(--menu-shadow);padding:var(--menu-padding);min-width:var(--menu-min-width);max-width:var(--menu-max-width)}.ds-menu__panel--sm{--menu-item-height: var(--menu-item-height-sm);--menu-font-size: var(--menu-font-size-sm)}.ds-menu__panel--md{--menu-item-height: var(--menu-item-height-md);--menu-font-size: var(--menu-font-size-md)}.ds-menu__panel--lg{--menu-item-height: var(--menu-item-height-lg);--menu-font-size: var(--menu-font-size-lg)}.ds-menu__item{display:flex;align-items:center;width:100%;min-height:var(--menu-item-height);padding:var(--menu-item-padding-y) var(--menu-item-padding-x);gap:var(--menu-item-gap);border:none;border-radius:var(--menu-item-radius);background:transparent;color:var(--menu-item-text);font-size:var(--menu-font-size);font-family:var(--font-family-base);cursor:pointer;text-align:left;transition:background-color var(--duration-fast) var(--easing-default),color var(--duration-fast) var(--easing-default)}.ds-menu__item:hover:not(.ds-menu__item--disabled),.ds-menu__item--active:not(.ds-menu__item--disabled){background:var(--menu-item-hover-bg);color:var(--menu-item-hover-text)}.ds-menu__item:focus-visible{outline:2px solid var(--focus-color);outline-offset:-2px}.ds-menu__item--disabled{color:var(--menu-item-disabled-text);cursor:not-allowed}.ds-menu__item--disabled .ds-menu__item-icon{color:var(--menu-item-disabled-icon)}.ds-menu__item-icon{flex-shrink:0;color:var(--menu-item-icon);font-size:1em}.ds-menu__item-label{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ds-menu__divider{height:1px;margin:var(--menu-divider-margin) 0;background:var(--menu-divider)}::ng-deep .ds-menu-backdrop{background:var(--menu-backdrop)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }, { 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"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }] });
|
|
7657
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: DsMenu, isStandalone: true, selector: "ds-menu", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: true, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, trigger: { classPropertyName: "trigger", publicName: "trigger", isSignal: true, isRequired: false, transformFunction: null }, closeOnSelect: { classPropertyName: "closeOnSelect", publicName: "closeOnSelect", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemSelected: "itemSelected", opened: "opened", closed: "closed" }, viewQueries: [{ propertyName: "triggerElement", first: true, predicate: ["menuTrigger"], descendants: true, read: ElementRef }, { propertyName: "menuItemsRef", predicate: ["menuItemRef"], descendants: true }], ngImport: i0, template: "<div\n #menuTrigger\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n (click)=\"onTriggerClick($event)\"\n (contextmenu)=\"onTriggerContextMenu($event)\"\n (keydown)=\"onTriggerKeydown($event)\"\n [attr.aria-haspopup]=\"'menu'\"\n [attr.aria-expanded]=\"isOpen()\"\n class=\"ds-menu__trigger\"\n>\n <ng-content select=\"[dsMenuTrigger]\"></ng-content>\n</div>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayBackdropClass]=\"'ds-menu-backdrop'\"\n (backdropClick)=\"onBackdropClick()\"\n (detach)=\"close(false)\"\n>\n <div\n [ngClass]=\"menuClasses()\"\n role=\"menu\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-activedescendant]=\"activeDescendantId()\"\n (keydown)=\"onMenuKeydown($event)\"\n >\n @for (item of items(); track item.id; let index = $index) {\n @if (item.dividerBefore) {\n <div class=\"ds-menu__divider\" role=\"separator\"></div>\n }\n <button\n #menuItemRef\n type=\"button\"\n class=\"ds-menu__item\"\n [class.ds-menu__item--disabled]=\"item.disabled\"\n [class.ds-menu__item--active]=\"activeIndex() === index\"\n [attr.id]=\"'menu-item-' + item.id\"\n [attr.aria-disabled]=\"item.disabled || null\"\n [disabled]=\"item.disabled\"\n role=\"menuitem\"\n (click)=\"selectItem(item)\"\n (mouseenter)=\"onItemMouseEnter(index)\"\n >\n @if (item.icon) {\n <fa-icon [icon]=\"item.icon\" class=\"ds-menu__item-icon\"></fa-icon>\n }\n <span class=\"ds-menu__item-label\">{{ item.label }}</span>\n </button>\n }\n </div>\n</ng-template>\n", styles: ["@charset \"UTF-8\";:host{display:inline-block}.ds-menu__trigger{display:inline-block;cursor:pointer}.ds-menu__panel{background:var(--menu-bg);border:1px solid var(--menu-border);border-radius:var(--menu-radius);box-shadow:var(--menu-shadow);padding:var(--menu-padding);min-width:var(--menu-min-width);max-width:var(--menu-max-width)}.ds-menu__panel--sm{--menu-item-height: var(--menu-item-height-sm);--menu-font-size: var(--menu-font-size-sm)}.ds-menu__panel--md{--menu-item-height: var(--menu-item-height-md);--menu-font-size: var(--menu-font-size-md)}.ds-menu__panel--lg{--menu-item-height: var(--menu-item-height-lg);--menu-font-size: var(--menu-font-size-lg)}.ds-menu__item{display:flex;align-items:center;width:100%;min-height:var(--menu-item-height);padding:var(--menu-item-padding-y) var(--menu-item-padding-x);gap:var(--menu-item-gap);border:none;border-radius:var(--menu-item-radius);background:transparent;color:var(--menu-item-text);font-size:var(--menu-font-size);font-family:var(--font-family-base);cursor:pointer;text-align:left;transition:background-color var(--duration-fast) var(--easing-default),color var(--duration-fast) var(--easing-default)}.ds-menu__item:hover:not(.ds-menu__item--disabled),.ds-menu__item--active:not(.ds-menu__item--disabled){background:var(--menu-item-hover-bg);color:var(--menu-item-hover-text)}.ds-menu__item:focus-visible{outline:2px solid var(--focus-color);outline-offset:-2px}.ds-menu__item--disabled{color:var(--menu-item-disabled-text);cursor:not-allowed}.ds-menu__item--disabled .ds-menu__item-icon{color:var(--menu-item-disabled-icon)}.ds-menu__item-icon{flex-shrink:0;color:var(--menu-item-icon);font-size:1em}.ds-menu__item-label{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ds-menu__divider{height:1px;margin:var(--menu-divider-margin) 0;background:var(--menu-divider)}::ng-deep .ds-menu-backdrop{background:var(--menu-backdrop)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"], outputs: ["iconChange", "titleChange", "animationChange", "maskChange", "flipChange", "sizeChange", "pullChange", "borderChange", "inverseChange", "symbolChange", "rotateChange", "fixedWidthChange", "transformChange", "a11yRoleChange"] }, { 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"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }] });
|
|
7526
7658
|
}
|
|
7527
7659
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DsMenu, decorators: [{
|
|
7528
7660
|
type: Component,
|
|
@@ -7535,6 +7667,895 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
7535
7667
|
args: ['menuItemRef']
|
|
7536
7668
|
}] } });
|
|
7537
7669
|
|
|
7670
|
+
/**
|
|
7671
|
+
* Design System Chip component
|
|
7672
|
+
*
|
|
7673
|
+
* @example
|
|
7674
|
+
* ```html
|
|
7675
|
+
* <ds-chip label="Tag" />
|
|
7676
|
+
* <ds-chip label="Removable" [removable]="true" (removed)="onRemove()" />
|
|
7677
|
+
* <ds-chip label="Clickable" [clickable]="true" (clicked)="onClick()" />
|
|
7678
|
+
* <ds-chip label="With icon" icon="fas-star" />
|
|
7679
|
+
* ```
|
|
7680
|
+
*/
|
|
7681
|
+
class DsChip {
|
|
7682
|
+
// Inputs
|
|
7683
|
+
label = input.required(...(ngDevMode ? [{ debugName: "label" }] : []));
|
|
7684
|
+
variant = input('filled', ...(ngDevMode ? [{ debugName: "variant" }] : []));
|
|
7685
|
+
size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : []));
|
|
7686
|
+
color = input('default', ...(ngDevMode ? [{ debugName: "color" }] : []));
|
|
7687
|
+
removable = input(false, ...(ngDevMode ? [{ debugName: "removable" }] : []));
|
|
7688
|
+
clickable = input(false, ...(ngDevMode ? [{ debugName: "clickable" }] : []));
|
|
7689
|
+
selected = input(false, ...(ngDevMode ? [{ debugName: "selected" }] : []));
|
|
7690
|
+
disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
|
|
7691
|
+
icon = input('', ...(ngDevMode ? [{ debugName: "icon" }] : []));
|
|
7692
|
+
avatar = input('', ...(ngDevMode ? [{ debugName: "avatar" }] : []));
|
|
7693
|
+
// Outputs
|
|
7694
|
+
removed = output();
|
|
7695
|
+
clicked = output();
|
|
7696
|
+
selectedChange = output();
|
|
7697
|
+
// Internal state
|
|
7698
|
+
isSelected = signal(false, ...(ngDevMode ? [{ debugName: "isSelected" }] : []));
|
|
7699
|
+
// Icons
|
|
7700
|
+
closeIcon = faXmark;
|
|
7701
|
+
// Computed classes
|
|
7702
|
+
chipClasses = computed(() => {
|
|
7703
|
+
const classes = ['ds-chip'];
|
|
7704
|
+
classes.push(`ds-chip--${this.variant()}`);
|
|
7705
|
+
classes.push(`ds-chip--${this.size()}`);
|
|
7706
|
+
classes.push(`ds-chip--${this.color()}`);
|
|
7707
|
+
if (this.clickable() && !this.disabled()) {
|
|
7708
|
+
classes.push('ds-chip--clickable');
|
|
7709
|
+
}
|
|
7710
|
+
if (this.selected()) {
|
|
7711
|
+
classes.push('ds-chip--selected');
|
|
7712
|
+
}
|
|
7713
|
+
if (this.disabled()) {
|
|
7714
|
+
classes.push('ds-chip--disabled');
|
|
7715
|
+
}
|
|
7716
|
+
return classes.join(' ');
|
|
7717
|
+
}, ...(ngDevMode ? [{ debugName: "chipClasses" }] : []));
|
|
7718
|
+
// Computed role
|
|
7719
|
+
role = computed(() => {
|
|
7720
|
+
return this.clickable() ? 'button' : null;
|
|
7721
|
+
}, ...(ngDevMode ? [{ debugName: "role" }] : []));
|
|
7722
|
+
// Computed tabindex
|
|
7723
|
+
tabindex = computed(() => {
|
|
7724
|
+
if (this.disabled())
|
|
7725
|
+
return -1;
|
|
7726
|
+
if (this.clickable() || this.removable())
|
|
7727
|
+
return 0;
|
|
7728
|
+
return null;
|
|
7729
|
+
}, ...(ngDevMode ? [{ debugName: "tabindex" }] : []));
|
|
7730
|
+
// Computed aria-selected
|
|
7731
|
+
ariaSelected = computed(() => {
|
|
7732
|
+
return this.clickable() ? this.selected() : null;
|
|
7733
|
+
}, ...(ngDevMode ? [{ debugName: "ariaSelected" }] : []));
|
|
7734
|
+
// Computed aria-disabled
|
|
7735
|
+
ariaDisabled = computed(() => {
|
|
7736
|
+
return this.disabled() ? true : null;
|
|
7737
|
+
}, ...(ngDevMode ? [{ debugName: "ariaDisabled" }] : []));
|
|
7738
|
+
/**
|
|
7739
|
+
* Handle chip click
|
|
7740
|
+
*/
|
|
7741
|
+
handleClick(event) {
|
|
7742
|
+
if (this.disabled()) {
|
|
7743
|
+
event.stopPropagation();
|
|
7744
|
+
event.preventDefault();
|
|
7745
|
+
return;
|
|
7746
|
+
}
|
|
7747
|
+
if (this.clickable()) {
|
|
7748
|
+
this.isSelected.set(!this.selected());
|
|
7749
|
+
this.clicked.emit();
|
|
7750
|
+
this.selectedChange.emit(!this.selected());
|
|
7751
|
+
}
|
|
7752
|
+
}
|
|
7753
|
+
/**
|
|
7754
|
+
* Handle remove button click
|
|
7755
|
+
*/
|
|
7756
|
+
handleRemove(event) {
|
|
7757
|
+
event.stopPropagation();
|
|
7758
|
+
event.preventDefault();
|
|
7759
|
+
if (this.disabled()) {
|
|
7760
|
+
return;
|
|
7761
|
+
}
|
|
7762
|
+
this.removed.emit();
|
|
7763
|
+
}
|
|
7764
|
+
/**
|
|
7765
|
+
* Handle keyboard events
|
|
7766
|
+
*/
|
|
7767
|
+
handleKeyDown(event) {
|
|
7768
|
+
if (this.disabled()) {
|
|
7769
|
+
return;
|
|
7770
|
+
}
|
|
7771
|
+
// Handle Enter or Space for clickable chips
|
|
7772
|
+
if (this.clickable() && (event.key === 'Enter' || event.key === ' ')) {
|
|
7773
|
+
event.preventDefault();
|
|
7774
|
+
this.handleClick(event);
|
|
7775
|
+
}
|
|
7776
|
+
// Handle Delete or Backspace for removable chips
|
|
7777
|
+
if (this.removable() &&
|
|
7778
|
+
(event.key === 'Delete' || event.key === 'Backspace')) {
|
|
7779
|
+
event.preventDefault();
|
|
7780
|
+
this.handleRemove(event);
|
|
7781
|
+
}
|
|
7782
|
+
}
|
|
7783
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DsChip, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
7784
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: DsChip, isStandalone: true, selector: "ds-chip", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: true, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, removable: { classPropertyName: "removable", publicName: "removable", isSignal: true, isRequired: false, transformFunction: null }, clickable: { classPropertyName: "clickable", publicName: "clickable", isSignal: true, isRequired: false, transformFunction: null }, selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, avatar: { classPropertyName: "avatar", publicName: "avatar", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { removed: "removed", clicked: "clicked", selectedChange: "selectedChange" }, ngImport: i0, template: "<div\n [class]=\"chipClasses()\"\n [attr.role]=\"role()\"\n [attr.tabindex]=\"tabindex()\"\n [attr.aria-selected]=\"ariaSelected()\"\n [attr.aria-disabled]=\"ariaDisabled()\"\n (click)=\"handleClick($event)\"\n (keydown)=\"handleKeyDown($event)\"\n>\n <!-- Avatar -->\n @if (avatar()) {\n <img\n class=\"ds-chip__avatar\"\n [src]=\"avatar()\"\n [alt]=\"label()\"\n />\n }\n\n <!-- Icon -->\n @if (icon() && !avatar()) {\n <fa-icon\n class=\"ds-chip__icon\"\n [icon]=\"['fas', icon()]\"\n [fixedWidth]=\"true\"\n />\n }\n\n <!-- Label -->\n <span class=\"ds-chip__label\">{{ label() }}</span>\n\n <!-- Remove button -->\n @if (removable() && !disabled()) {\n <button\n type=\"button\"\n class=\"ds-chip__remove\"\n [attr.aria-label]=\"'Remove ' + label()\"\n (click)=\"handleRemove($event)\"\n >\n <fa-icon\n [icon]=\"closeIcon\"\n [fixedWidth]=\"true\"\n />\n </button>\n }\n</div>\n", styles: ["@charset \"UTF-8\";.ds-chip{display:inline-flex;align-items:center;gap:var(--chip-gap, var(--space-2));padding:var(--chip-padding-y, var(--space-1)) var(--chip-padding-x, var(--space-3));border-radius:var(--chip-border-radius, var(--radius-pill));font-family:var(--font-family-base);font-size:var(--chip-font-size, var(--font-size-sm));font-weight:var(--chip-font-weight, 500);line-height:var(--chip-line-height, 1.5);transition:all var(--transition-fast);-webkit-user-select:none;user-select:none;outline:none;background-color:var(--chip-bg, var(--gray-200));color:var(--chip-text, var(--gray-800));border:1px solid var(--chip-border, transparent)}.ds-chip__avatar{width:var(--chip-avatar-size, 1.25rem);height:var(--chip-avatar-size, 1.25rem);border-radius:50%;object-fit:cover;flex-shrink:0}.ds-chip__icon{flex-shrink:0;font-size:var(--chip-icon-size, .875rem)}.ds-chip__label{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ds-chip__remove{display:flex;align-items:center;justify-content:center;padding:0;margin:0;background:none;border:none;cursor:pointer;color:inherit;opacity:.6;transition:opacity var(--transition-fast);flex-shrink:0}.ds-chip__remove:hover{opacity:1}.ds-chip__remove:focus{outline:none;opacity:1}.ds-chip__remove fa-icon{font-size:var(--chip-remove-icon-size, .75rem)}.ds-chip--outlined{background-color:transparent;border-color:var(--chip-border, var(--gray-300))}.ds-chip--sm{padding:var(--chip-padding-y-sm, var(--space-0-5)) var(--chip-padding-x-sm, var(--space-2));font-size:var(--chip-font-size-sm, var(--font-size-xs));gap:var(--chip-gap-sm, var(--space-1))}.ds-chip--sm .ds-chip__avatar{width:var(--chip-avatar-size-sm, 1rem);height:var(--chip-avatar-size-sm, 1rem)}.ds-chip--sm .ds-chip__icon{font-size:var(--chip-icon-size-sm, .75rem)}.ds-chip--sm .ds-chip__remove fa-icon{font-size:var(--chip-remove-icon-size-sm, .625rem)}.ds-chip--lg{padding:var(--chip-padding-y-lg, var(--space-2)) var(--chip-padding-x-lg, var(--space-4));font-size:var(--chip-font-size-lg, var(--font-size-base));gap:var(--chip-gap-lg, var(--space-2))}.ds-chip--lg .ds-chip__avatar{width:var(--chip-avatar-size-lg, 1.5rem);height:var(--chip-avatar-size-lg, 1.5rem)}.ds-chip--lg .ds-chip__icon{font-size:var(--chip-icon-size-lg, 1rem)}.ds-chip--lg .ds-chip__remove fa-icon{font-size:var(--chip-remove-icon-size-lg, .875rem)}.ds-chip--primary{background-color:var(--chip-primary-bg, var(--color-primary));color:var(--chip-primary-text, var(--white));border-color:var(--chip-primary-border, transparent)}.ds-chip--primary.ds-chip--outlined{background-color:transparent;color:var(--chip-primary-bg, var(--color-primary));border-color:var(--chip-primary-bg, var(--color-primary))}.ds-chip--success{background-color:var(--chip-success-bg, var(--success-bg));color:var(--chip-success-text, var(--success));border-color:var(--chip-success-border, var(--success-border))}.ds-chip--success.ds-chip--outlined{background-color:transparent;color:var(--chip-success-text, var(--success));border-color:var(--chip-success-text, var(--success))}.ds-chip--warning{background-color:var(--chip-warning-bg, var(--warning-bg));color:var(--chip-warning-text, var(--warning));border-color:var(--chip-warning-border, var(--warning-border))}.ds-chip--warning.ds-chip--outlined{background-color:transparent;color:var(--chip-warning-text, var(--warning));border-color:var(--chip-warning-text, var(--warning))}.ds-chip--error{background-color:var(--chip-error-bg, var(--error-bg));color:var(--chip-error-text, var(--error));border-color:var(--chip-error-border, var(--error-border))}.ds-chip--error.ds-chip--outlined{background-color:transparent;color:var(--chip-error-text, var(--error));border-color:var(--chip-error-text, var(--error))}.ds-chip--clickable{cursor:pointer}.ds-chip--clickable:hover:not(.ds-chip--disabled){background-color:var(--chip-hover-bg, var(--gray-300))}.ds-chip--clickable:focus-visible{box-shadow:0 0 0 3px var(--chip-focus-ring, var(--focus-ring))}.ds-chip--clickable.ds-chip--outlined:hover:not(.ds-chip--disabled){background-color:var(--chip-hover-bg, var(--gray-50))}.ds-chip--clickable.ds-chip--primary:hover:not(.ds-chip--disabled){background-color:var(--chip-primary-hover-bg, var(--primary-600))}.ds-chip--clickable.ds-chip--primary.ds-chip--outlined:hover:not(.ds-chip--disabled){background-color:var(--chip-primary-hover-bg-outlined, var(--primary-50))}.ds-chip--clickable.ds-chip--success:hover:not(.ds-chip--disabled){background-color:var(--chip-success-hover-bg, var(--success-100))}.ds-chip--clickable.ds-chip--success.ds-chip--outlined:hover:not(.ds-chip--disabled){background-color:var(--chip-success-hover-bg-outlined, var(--success-50))}.ds-chip--clickable.ds-chip--warning:hover:not(.ds-chip--disabled){background-color:var(--chip-warning-hover-bg, var(--warning-100))}.ds-chip--clickable.ds-chip--warning.ds-chip--outlined:hover:not(.ds-chip--disabled){background-color:var(--chip-warning-hover-bg-outlined, var(--warning-50))}.ds-chip--clickable.ds-chip--error:hover:not(.ds-chip--disabled){background-color:var(--chip-error-hover-bg, var(--error-100))}.ds-chip--clickable.ds-chip--error.ds-chip--outlined:hover:not(.ds-chip--disabled){background-color:var(--chip-error-hover-bg-outlined, var(--error-50))}.ds-chip--selected{box-shadow:0 0 0 2px var(--chip-selected-ring, var(--color-primary))}.ds-chip--disabled{opacity:var(--chip-disabled-opacity, .5);cursor:not-allowed;pointer-events:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FontAwesomeModule }, { kind: "component", type: i1$1.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"], outputs: ["iconChange", "titleChange", "animationChange", "maskChange", "flipChange", "sizeChange", "pullChange", "borderChange", "inverseChange", "symbolChange", "rotateChange", "fixedWidthChange", "transformChange", "a11yRoleChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
7785
|
+
}
|
|
7786
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DsChip, decorators: [{
|
|
7787
|
+
type: Component,
|
|
7788
|
+
args: [{ selector: 'ds-chip', standalone: true, imports: [CommonModule, FontAwesomeModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n [class]=\"chipClasses()\"\n [attr.role]=\"role()\"\n [attr.tabindex]=\"tabindex()\"\n [attr.aria-selected]=\"ariaSelected()\"\n [attr.aria-disabled]=\"ariaDisabled()\"\n (click)=\"handleClick($event)\"\n (keydown)=\"handleKeyDown($event)\"\n>\n <!-- Avatar -->\n @if (avatar()) {\n <img\n class=\"ds-chip__avatar\"\n [src]=\"avatar()\"\n [alt]=\"label()\"\n />\n }\n\n <!-- Icon -->\n @if (icon() && !avatar()) {\n <fa-icon\n class=\"ds-chip__icon\"\n [icon]=\"['fas', icon()]\"\n [fixedWidth]=\"true\"\n />\n }\n\n <!-- Label -->\n <span class=\"ds-chip__label\">{{ label() }}</span>\n\n <!-- Remove button -->\n @if (removable() && !disabled()) {\n <button\n type=\"button\"\n class=\"ds-chip__remove\"\n [attr.aria-label]=\"'Remove ' + label()\"\n (click)=\"handleRemove($event)\"\n >\n <fa-icon\n [icon]=\"closeIcon\"\n [fixedWidth]=\"true\"\n />\n </button>\n }\n</div>\n", styles: ["@charset \"UTF-8\";.ds-chip{display:inline-flex;align-items:center;gap:var(--chip-gap, var(--space-2));padding:var(--chip-padding-y, var(--space-1)) var(--chip-padding-x, var(--space-3));border-radius:var(--chip-border-radius, var(--radius-pill));font-family:var(--font-family-base);font-size:var(--chip-font-size, var(--font-size-sm));font-weight:var(--chip-font-weight, 500);line-height:var(--chip-line-height, 1.5);transition:all var(--transition-fast);-webkit-user-select:none;user-select:none;outline:none;background-color:var(--chip-bg, var(--gray-200));color:var(--chip-text, var(--gray-800));border:1px solid var(--chip-border, transparent)}.ds-chip__avatar{width:var(--chip-avatar-size, 1.25rem);height:var(--chip-avatar-size, 1.25rem);border-radius:50%;object-fit:cover;flex-shrink:0}.ds-chip__icon{flex-shrink:0;font-size:var(--chip-icon-size, .875rem)}.ds-chip__label{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ds-chip__remove{display:flex;align-items:center;justify-content:center;padding:0;margin:0;background:none;border:none;cursor:pointer;color:inherit;opacity:.6;transition:opacity var(--transition-fast);flex-shrink:0}.ds-chip__remove:hover{opacity:1}.ds-chip__remove:focus{outline:none;opacity:1}.ds-chip__remove fa-icon{font-size:var(--chip-remove-icon-size, .75rem)}.ds-chip--outlined{background-color:transparent;border-color:var(--chip-border, var(--gray-300))}.ds-chip--sm{padding:var(--chip-padding-y-sm, var(--space-0-5)) var(--chip-padding-x-sm, var(--space-2));font-size:var(--chip-font-size-sm, var(--font-size-xs));gap:var(--chip-gap-sm, var(--space-1))}.ds-chip--sm .ds-chip__avatar{width:var(--chip-avatar-size-sm, 1rem);height:var(--chip-avatar-size-sm, 1rem)}.ds-chip--sm .ds-chip__icon{font-size:var(--chip-icon-size-sm, .75rem)}.ds-chip--sm .ds-chip__remove fa-icon{font-size:var(--chip-remove-icon-size-sm, .625rem)}.ds-chip--lg{padding:var(--chip-padding-y-lg, var(--space-2)) var(--chip-padding-x-lg, var(--space-4));font-size:var(--chip-font-size-lg, var(--font-size-base));gap:var(--chip-gap-lg, var(--space-2))}.ds-chip--lg .ds-chip__avatar{width:var(--chip-avatar-size-lg, 1.5rem);height:var(--chip-avatar-size-lg, 1.5rem)}.ds-chip--lg .ds-chip__icon{font-size:var(--chip-icon-size-lg, 1rem)}.ds-chip--lg .ds-chip__remove fa-icon{font-size:var(--chip-remove-icon-size-lg, .875rem)}.ds-chip--primary{background-color:var(--chip-primary-bg, var(--color-primary));color:var(--chip-primary-text, var(--white));border-color:var(--chip-primary-border, transparent)}.ds-chip--primary.ds-chip--outlined{background-color:transparent;color:var(--chip-primary-bg, var(--color-primary));border-color:var(--chip-primary-bg, var(--color-primary))}.ds-chip--success{background-color:var(--chip-success-bg, var(--success-bg));color:var(--chip-success-text, var(--success));border-color:var(--chip-success-border, var(--success-border))}.ds-chip--success.ds-chip--outlined{background-color:transparent;color:var(--chip-success-text, var(--success));border-color:var(--chip-success-text, var(--success))}.ds-chip--warning{background-color:var(--chip-warning-bg, var(--warning-bg));color:var(--chip-warning-text, var(--warning));border-color:var(--chip-warning-border, var(--warning-border))}.ds-chip--warning.ds-chip--outlined{background-color:transparent;color:var(--chip-warning-text, var(--warning));border-color:var(--chip-warning-text, var(--warning))}.ds-chip--error{background-color:var(--chip-error-bg, var(--error-bg));color:var(--chip-error-text, var(--error));border-color:var(--chip-error-border, var(--error-border))}.ds-chip--error.ds-chip--outlined{background-color:transparent;color:var(--chip-error-text, var(--error));border-color:var(--chip-error-text, var(--error))}.ds-chip--clickable{cursor:pointer}.ds-chip--clickable:hover:not(.ds-chip--disabled){background-color:var(--chip-hover-bg, var(--gray-300))}.ds-chip--clickable:focus-visible{box-shadow:0 0 0 3px var(--chip-focus-ring, var(--focus-ring))}.ds-chip--clickable.ds-chip--outlined:hover:not(.ds-chip--disabled){background-color:var(--chip-hover-bg, var(--gray-50))}.ds-chip--clickable.ds-chip--primary:hover:not(.ds-chip--disabled){background-color:var(--chip-primary-hover-bg, var(--primary-600))}.ds-chip--clickable.ds-chip--primary.ds-chip--outlined:hover:not(.ds-chip--disabled){background-color:var(--chip-primary-hover-bg-outlined, var(--primary-50))}.ds-chip--clickable.ds-chip--success:hover:not(.ds-chip--disabled){background-color:var(--chip-success-hover-bg, var(--success-100))}.ds-chip--clickable.ds-chip--success.ds-chip--outlined:hover:not(.ds-chip--disabled){background-color:var(--chip-success-hover-bg-outlined, var(--success-50))}.ds-chip--clickable.ds-chip--warning:hover:not(.ds-chip--disabled){background-color:var(--chip-warning-hover-bg, var(--warning-100))}.ds-chip--clickable.ds-chip--warning.ds-chip--outlined:hover:not(.ds-chip--disabled){background-color:var(--chip-warning-hover-bg-outlined, var(--warning-50))}.ds-chip--clickable.ds-chip--error:hover:not(.ds-chip--disabled){background-color:var(--chip-error-hover-bg, var(--error-100))}.ds-chip--clickable.ds-chip--error.ds-chip--outlined:hover:not(.ds-chip--disabled){background-color:var(--chip-error-hover-bg-outlined, var(--error-50))}.ds-chip--selected{box-shadow:0 0 0 2px var(--chip-selected-ring, var(--color-primary))}.ds-chip--disabled{opacity:var(--chip-disabled-opacity, .5);cursor:not-allowed;pointer-events:none}\n"] }]
|
|
7789
|
+
}], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: true }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], removable: [{ type: i0.Input, args: [{ isSignal: true, alias: "removable", required: false }] }], clickable: [{ type: i0.Input, args: [{ isSignal: true, alias: "clickable", required: false }] }], selected: [{ type: i0.Input, args: [{ isSignal: true, alias: "selected", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], avatar: [{ type: i0.Input, args: [{ isSignal: true, alias: "avatar", required: false }] }], removed: [{ type: i0.Output, args: ["removed"] }], clicked: [{ type: i0.Output, args: ["clicked"] }], selectedChange: [{ type: i0.Output, args: ["selectedChange"] }] } });
|
|
7790
|
+
|
|
7791
|
+
class DsSlider {
|
|
7792
|
+
// Config
|
|
7793
|
+
min = input(0, ...(ngDevMode ? [{ debugName: "min" }] : []));
|
|
7794
|
+
max = input(100, ...(ngDevMode ? [{ debugName: "max" }] : []));
|
|
7795
|
+
step = input(1, ...(ngDevMode ? [{ debugName: "step" }] : []));
|
|
7796
|
+
disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
|
|
7797
|
+
size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : []));
|
|
7798
|
+
range = input(false, ...(ngDevMode ? [{ debugName: "range" }] : []));
|
|
7799
|
+
orientation = input('horizontal', ...(ngDevMode ? [{ debugName: "orientation" }] : []));
|
|
7800
|
+
// Display
|
|
7801
|
+
showLabels = input(false, ...(ngDevMode ? [{ debugName: "showLabels" }] : []));
|
|
7802
|
+
showTicks = input(false, ...(ngDevMode ? [{ debugName: "showTicks" }] : []));
|
|
7803
|
+
tickInterval = input(undefined, ...(ngDevMode ? [{ debugName: "tickInterval" }] : []));
|
|
7804
|
+
formatLabel = input(undefined, ...(ngDevMode ? [{ debugName: "formatLabel" }] : []));
|
|
7805
|
+
// Events
|
|
7806
|
+
valueChange = output();
|
|
7807
|
+
// ViewChild
|
|
7808
|
+
trackElement;
|
|
7809
|
+
thumb1Element;
|
|
7810
|
+
thumb2Element;
|
|
7811
|
+
// Internal state
|
|
7812
|
+
disabledState = signal(false, ...(ngDevMode ? [{ debugName: "disabledState" }] : []));
|
|
7813
|
+
internalValue = signal(0, ...(ngDevMode ? [{ debugName: "internalValue" }] : []));
|
|
7814
|
+
dragging = signal(null, ...(ngDevMode ? [{ debugName: "dragging" }] : [])); // null, 0 (first thumb), 1 (second thumb)
|
|
7815
|
+
focusedThumb = signal(0, ...(ngDevMode ? [{ debugName: "focusedThumb" }] : [])); // 0 or 1
|
|
7816
|
+
constructor() {
|
|
7817
|
+
// Effect pour synchroniser la valeur initiale
|
|
7818
|
+
effect(() => {
|
|
7819
|
+
const currentValue = this.internalValue();
|
|
7820
|
+
const isRange = this.range();
|
|
7821
|
+
const minVal = this.min();
|
|
7822
|
+
// Initialisation par défaut
|
|
7823
|
+
if (typeof currentValue === 'number' && isRange) {
|
|
7824
|
+
this.internalValue.set([minVal, currentValue]);
|
|
7825
|
+
}
|
|
7826
|
+
else if (Array.isArray(currentValue) && !isRange) {
|
|
7827
|
+
this.internalValue.set(currentValue[0]);
|
|
7828
|
+
}
|
|
7829
|
+
});
|
|
7830
|
+
}
|
|
7831
|
+
isDisabled = computed(() => this.disabled() || this.disabledState(), ...(ngDevMode ? [{ debugName: "isDisabled" }] : []));
|
|
7832
|
+
isRange = computed(() => this.range(), ...(ngDevMode ? [{ debugName: "isRange" }] : []));
|
|
7833
|
+
isVertical = computed(() => this.orientation() === 'vertical', ...(ngDevMode ? [{ debugName: "isVertical" }] : []));
|
|
7834
|
+
containerClasses = computed(() => {
|
|
7835
|
+
const classes = ['ds-slider'];
|
|
7836
|
+
classes.push(`ds-slider--${this.size()}`);
|
|
7837
|
+
if (this.isDisabled())
|
|
7838
|
+
classes.push('ds-slider--disabled');
|
|
7839
|
+
if (this.isVertical())
|
|
7840
|
+
classes.push('ds-slider--vertical');
|
|
7841
|
+
return classes.join(' ');
|
|
7842
|
+
}, ...(ngDevMode ? [{ debugName: "containerClasses" }] : []));
|
|
7843
|
+
value1 = computed(() => {
|
|
7844
|
+
const val = this.internalValue();
|
|
7845
|
+
return Array.isArray(val) ? val[0] : val;
|
|
7846
|
+
}, ...(ngDevMode ? [{ debugName: "value1" }] : []));
|
|
7847
|
+
value2 = computed(() => {
|
|
7848
|
+
const val = this.internalValue();
|
|
7849
|
+
return Array.isArray(val) ? val[1] : this.max();
|
|
7850
|
+
}, ...(ngDevMode ? [{ debugName: "value2" }] : []));
|
|
7851
|
+
percentage1 = computed(() => {
|
|
7852
|
+
return this.valueToPercentage(this.value1());
|
|
7853
|
+
}, ...(ngDevMode ? [{ debugName: "percentage1" }] : []));
|
|
7854
|
+
percentage2 = computed(() => {
|
|
7855
|
+
return this.valueToPercentage(this.value2());
|
|
7856
|
+
}, ...(ngDevMode ? [{ debugName: "percentage2" }] : []));
|
|
7857
|
+
thumb1Style = computed(() => {
|
|
7858
|
+
if (this.isVertical()) {
|
|
7859
|
+
return { bottom: `${this.percentage1()}%` };
|
|
7860
|
+
}
|
|
7861
|
+
return { left: `${this.percentage1()}%` };
|
|
7862
|
+
}, ...(ngDevMode ? [{ debugName: "thumb1Style" }] : []));
|
|
7863
|
+
thumb2Style = computed(() => {
|
|
7864
|
+
if (!this.isRange())
|
|
7865
|
+
return {};
|
|
7866
|
+
if (this.isVertical()) {
|
|
7867
|
+
return { bottom: `${this.percentage2()}%` };
|
|
7868
|
+
}
|
|
7869
|
+
return { left: `${this.percentage2()}%` };
|
|
7870
|
+
}, ...(ngDevMode ? [{ debugName: "thumb2Style" }] : []));
|
|
7871
|
+
fillStyle = computed(() => {
|
|
7872
|
+
const p1 = this.percentage1();
|
|
7873
|
+
const p2 = this.percentage2();
|
|
7874
|
+
if (this.isVertical()) {
|
|
7875
|
+
if (this.isRange()) {
|
|
7876
|
+
return {
|
|
7877
|
+
bottom: `${p1}%`,
|
|
7878
|
+
height: `${p2 - p1}%`,
|
|
7879
|
+
};
|
|
7880
|
+
}
|
|
7881
|
+
return {
|
|
7882
|
+
bottom: '0%',
|
|
7883
|
+
height: `${p1}%`,
|
|
7884
|
+
};
|
|
7885
|
+
}
|
|
7886
|
+
if (this.isRange()) {
|
|
7887
|
+
return {
|
|
7888
|
+
left: `${p1}%`,
|
|
7889
|
+
width: `${p2 - p1}%`,
|
|
7890
|
+
};
|
|
7891
|
+
}
|
|
7892
|
+
return {
|
|
7893
|
+
left: '0%',
|
|
7894
|
+
width: `${p1}%`,
|
|
7895
|
+
};
|
|
7896
|
+
}, ...(ngDevMode ? [{ debugName: "fillStyle" }] : []));
|
|
7897
|
+
ticks = computed(() => {
|
|
7898
|
+
if (!this.showTicks())
|
|
7899
|
+
return [];
|
|
7900
|
+
const interval = this.tickInterval() ?? this.step();
|
|
7901
|
+
const minVal = this.min();
|
|
7902
|
+
const maxVal = this.max();
|
|
7903
|
+
const ticks = [];
|
|
7904
|
+
for (let val = minVal; val <= maxVal; val += interval) {
|
|
7905
|
+
ticks.push(val);
|
|
7906
|
+
}
|
|
7907
|
+
return ticks;
|
|
7908
|
+
}, ...(ngDevMode ? [{ debugName: "ticks" }] : []));
|
|
7909
|
+
label1 = computed(() => {
|
|
7910
|
+
const formatter = this.formatLabel();
|
|
7911
|
+
const val = this.value1();
|
|
7912
|
+
return formatter ? formatter(val) : val.toString();
|
|
7913
|
+
}, ...(ngDevMode ? [{ debugName: "label1" }] : []));
|
|
7914
|
+
label2 = computed(() => {
|
|
7915
|
+
if (!this.isRange())
|
|
7916
|
+
return '';
|
|
7917
|
+
const formatter = this.formatLabel();
|
|
7918
|
+
const val = this.value2();
|
|
7919
|
+
return formatter ? formatter(val) : val.toString();
|
|
7920
|
+
}, ...(ngDevMode ? [{ debugName: "label2" }] : []));
|
|
7921
|
+
// ControlValueAccessor
|
|
7922
|
+
onChange = () => { };
|
|
7923
|
+
onTouched = () => { };
|
|
7924
|
+
writeValue(value) {
|
|
7925
|
+
if (value === null) {
|
|
7926
|
+
this.internalValue.set(this.range() ? [this.min(), this.max()] : this.min());
|
|
7927
|
+
return;
|
|
7928
|
+
}
|
|
7929
|
+
this.internalValue.set(value);
|
|
7930
|
+
}
|
|
7931
|
+
registerOnChange(fn) {
|
|
7932
|
+
this.onChange = fn;
|
|
7933
|
+
}
|
|
7934
|
+
registerOnTouched(fn) {
|
|
7935
|
+
this.onTouched = fn;
|
|
7936
|
+
}
|
|
7937
|
+
setDisabledState(isDisabled) {
|
|
7938
|
+
this.disabledState.set(isDisabled);
|
|
7939
|
+
}
|
|
7940
|
+
// Helpers
|
|
7941
|
+
valueToPercentage(value) {
|
|
7942
|
+
const minVal = this.min();
|
|
7943
|
+
const maxVal = this.max();
|
|
7944
|
+
return ((value - minVal) / (maxVal - minVal)) * 100;
|
|
7945
|
+
}
|
|
7946
|
+
percentageToValue(percentage) {
|
|
7947
|
+
const minVal = this.min();
|
|
7948
|
+
const maxVal = this.max();
|
|
7949
|
+
const stepVal = this.step();
|
|
7950
|
+
const rawValue = minVal + (percentage / 100) * (maxVal - minVal);
|
|
7951
|
+
const steppedValue = Math.round(rawValue / stepVal) * stepVal;
|
|
7952
|
+
return Math.max(minVal, Math.min(maxVal, steppedValue));
|
|
7953
|
+
}
|
|
7954
|
+
clampValue(value) {
|
|
7955
|
+
return Math.max(this.min(), Math.min(this.max(), value));
|
|
7956
|
+
}
|
|
7957
|
+
emitValue() {
|
|
7958
|
+
const val = this.internalValue();
|
|
7959
|
+
this.onChange(val);
|
|
7960
|
+
this.valueChange.emit(val);
|
|
7961
|
+
}
|
|
7962
|
+
// Event handlers - Keyboard
|
|
7963
|
+
onKeyDown(event, thumbIndex) {
|
|
7964
|
+
if (this.isDisabled())
|
|
7965
|
+
return;
|
|
7966
|
+
const stepVal = this.step();
|
|
7967
|
+
const minVal = this.min();
|
|
7968
|
+
const maxVal = this.max();
|
|
7969
|
+
let handled = true;
|
|
7970
|
+
let newValue;
|
|
7971
|
+
const currentValue = thumbIndex === 0 ? this.value1() : this.value2();
|
|
7972
|
+
switch (event.key) {
|
|
7973
|
+
case 'ArrowRight':
|
|
7974
|
+
case 'ArrowUp':
|
|
7975
|
+
newValue = currentValue + stepVal;
|
|
7976
|
+
break;
|
|
7977
|
+
case 'ArrowLeft':
|
|
7978
|
+
case 'ArrowDown':
|
|
7979
|
+
newValue = currentValue - stepVal;
|
|
7980
|
+
break;
|
|
7981
|
+
case 'Home':
|
|
7982
|
+
newValue = minVal;
|
|
7983
|
+
break;
|
|
7984
|
+
case 'End':
|
|
7985
|
+
newValue = maxVal;
|
|
7986
|
+
break;
|
|
7987
|
+
case 'PageUp':
|
|
7988
|
+
newValue = currentValue + stepVal * 10;
|
|
7989
|
+
break;
|
|
7990
|
+
case 'PageDown':
|
|
7991
|
+
newValue = currentValue - stepVal * 10;
|
|
7992
|
+
break;
|
|
7993
|
+
default:
|
|
7994
|
+
handled = false;
|
|
7995
|
+
}
|
|
7996
|
+
if (!handled || newValue === undefined)
|
|
7997
|
+
return;
|
|
7998
|
+
event.preventDefault();
|
|
7999
|
+
newValue = this.clampValue(newValue);
|
|
8000
|
+
if (this.isRange()) {
|
|
8001
|
+
const val = this.internalValue();
|
|
8002
|
+
if (thumbIndex === 0) {
|
|
8003
|
+
// Thumb 1: ne peut pas dépasser thumb 2
|
|
8004
|
+
newValue = Math.min(newValue, val[1]);
|
|
8005
|
+
this.internalValue.set([newValue, val[1]]);
|
|
8006
|
+
}
|
|
8007
|
+
else {
|
|
8008
|
+
// Thumb 2: ne peut pas être inférieur à thumb 1
|
|
8009
|
+
newValue = Math.max(newValue, val[0]);
|
|
8010
|
+
this.internalValue.set([val[0], newValue]);
|
|
8011
|
+
}
|
|
8012
|
+
}
|
|
8013
|
+
else {
|
|
8014
|
+
this.internalValue.set(newValue);
|
|
8015
|
+
}
|
|
8016
|
+
this.emitValue();
|
|
8017
|
+
}
|
|
8018
|
+
// Event handlers - Mouse/Touch
|
|
8019
|
+
onTrackClick(event) {
|
|
8020
|
+
if (this.isDisabled() || !this.trackElement)
|
|
8021
|
+
return;
|
|
8022
|
+
const rect = this.trackElement.nativeElement.getBoundingClientRect();
|
|
8023
|
+
let percentage;
|
|
8024
|
+
if (this.isVertical()) {
|
|
8025
|
+
percentage = ((rect.bottom - event.clientY) / rect.height) * 100;
|
|
8026
|
+
}
|
|
8027
|
+
else {
|
|
8028
|
+
percentage = ((event.clientX - rect.left) / rect.width) * 100;
|
|
8029
|
+
}
|
|
8030
|
+
const newValue = this.percentageToValue(percentage);
|
|
8031
|
+
if (this.isRange()) {
|
|
8032
|
+
const val = this.internalValue();
|
|
8033
|
+
// Détermine quel thumb est le plus proche
|
|
8034
|
+
const dist1 = Math.abs(newValue - val[0]);
|
|
8035
|
+
const dist2 = Math.abs(newValue - val[1]);
|
|
8036
|
+
if (dist1 < dist2) {
|
|
8037
|
+
this.internalValue.set([newValue, val[1]]);
|
|
8038
|
+
this.focusedThumb.set(0);
|
|
8039
|
+
}
|
|
8040
|
+
else {
|
|
8041
|
+
this.internalValue.set([val[0], newValue]);
|
|
8042
|
+
this.focusedThumb.set(1);
|
|
8043
|
+
}
|
|
8044
|
+
}
|
|
8045
|
+
else {
|
|
8046
|
+
this.internalValue.set(newValue);
|
|
8047
|
+
}
|
|
8048
|
+
this.emitValue();
|
|
8049
|
+
this.onTouched();
|
|
8050
|
+
}
|
|
8051
|
+
onThumbMouseDown(event, thumbIndex) {
|
|
8052
|
+
if (this.isDisabled())
|
|
8053
|
+
return;
|
|
8054
|
+
event.preventDefault();
|
|
8055
|
+
this.dragging.set(thumbIndex);
|
|
8056
|
+
this.focusedThumb.set(thumbIndex);
|
|
8057
|
+
const moveHandler = (e) => this.onMouseMove(e);
|
|
8058
|
+
const upHandler = () => {
|
|
8059
|
+
this.dragging.set(null);
|
|
8060
|
+
this.onTouched();
|
|
8061
|
+
document.removeEventListener('mousemove', moveHandler);
|
|
8062
|
+
document.removeEventListener('mouseup', upHandler);
|
|
8063
|
+
};
|
|
8064
|
+
document.addEventListener('mousemove', moveHandler);
|
|
8065
|
+
document.addEventListener('mouseup', upHandler);
|
|
8066
|
+
}
|
|
8067
|
+
onMouseMove(event) {
|
|
8068
|
+
const thumbIndex = this.dragging();
|
|
8069
|
+
if (thumbIndex === null || !this.trackElement)
|
|
8070
|
+
return;
|
|
8071
|
+
const rect = this.trackElement.nativeElement.getBoundingClientRect();
|
|
8072
|
+
let percentage;
|
|
8073
|
+
if (this.isVertical()) {
|
|
8074
|
+
percentage = ((rect.bottom - event.clientY) / rect.height) * 100;
|
|
8075
|
+
}
|
|
8076
|
+
else {
|
|
8077
|
+
percentage = ((event.clientX - rect.left) / rect.width) * 100;
|
|
8078
|
+
}
|
|
8079
|
+
const newValue = this.percentageToValue(percentage);
|
|
8080
|
+
if (this.isRange()) {
|
|
8081
|
+
const val = this.internalValue();
|
|
8082
|
+
if (thumbIndex === 0) {
|
|
8083
|
+
const clamped = Math.min(newValue, val[1]);
|
|
8084
|
+
this.internalValue.set([clamped, val[1]]);
|
|
8085
|
+
}
|
|
8086
|
+
else {
|
|
8087
|
+
const clamped = Math.max(newValue, val[0]);
|
|
8088
|
+
this.internalValue.set([val[0], clamped]);
|
|
8089
|
+
}
|
|
8090
|
+
}
|
|
8091
|
+
else {
|
|
8092
|
+
this.internalValue.set(newValue);
|
|
8093
|
+
}
|
|
8094
|
+
this.emitValue();
|
|
8095
|
+
}
|
|
8096
|
+
onThumbFocus(thumbIndex) {
|
|
8097
|
+
this.focusedThumb.set(thumbIndex);
|
|
8098
|
+
}
|
|
8099
|
+
onThumbBlur() {
|
|
8100
|
+
this.onTouched();
|
|
8101
|
+
}
|
|
8102
|
+
getTickPosition(value) {
|
|
8103
|
+
return this.valueToPercentage(value);
|
|
8104
|
+
}
|
|
8105
|
+
getTickLabel(value) {
|
|
8106
|
+
const formatter = this.formatLabel();
|
|
8107
|
+
return formatter ? formatter(value) : value.toString();
|
|
8108
|
+
}
|
|
8109
|
+
// ARIA helpers
|
|
8110
|
+
getAriaValueText(thumbIndex) {
|
|
8111
|
+
const val = thumbIndex === 0 ? this.value1() : this.value2();
|
|
8112
|
+
const formatter = this.formatLabel();
|
|
8113
|
+
return formatter ? formatter(val) : val.toString();
|
|
8114
|
+
}
|
|
8115
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DsSlider, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
8116
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: DsSlider, isStandalone: true, selector: "ds-slider", inputs: { min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, step: { classPropertyName: "step", publicName: "step", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, range: { classPropertyName: "range", publicName: "range", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, showLabels: { classPropertyName: "showLabels", publicName: "showLabels", isSignal: true, isRequired: false, transformFunction: null }, showTicks: { classPropertyName: "showTicks", publicName: "showTicks", isSignal: true, isRequired: false, transformFunction: null }, tickInterval: { classPropertyName: "tickInterval", publicName: "tickInterval", isSignal: true, isRequired: false, transformFunction: null }, formatLabel: { classPropertyName: "formatLabel", publicName: "formatLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange" }, providers: [
|
|
8117
|
+
{
|
|
8118
|
+
provide: NG_VALUE_ACCESSOR,
|
|
8119
|
+
useExisting: forwardRef(() => DsSlider),
|
|
8120
|
+
multi: true,
|
|
8121
|
+
},
|
|
8122
|
+
], viewQueries: [{ propertyName: "trackElement", first: true, predicate: ["track"], descendants: true }, { propertyName: "thumb1Element", first: true, predicate: ["thumb1"], descendants: true }, { propertyName: "thumb2Element", first: true, predicate: ["thumb2"], descendants: true }], ngImport: i0, template: "<div [class]=\"containerClasses()\">\n <!-- Min label -->\n @if (showLabels()) {\n <span class=\"ds-slider__label ds-slider__label--min\">\n {{ getTickLabel(min()) }}\n </span>\n }\n\n <!-- Track container -->\n <div class=\"ds-slider__track-container\">\n <!-- Track background -->\n <div\n #track\n class=\"ds-slider__track\"\n (click)=\"onTrackClick($event)\"\n role=\"presentation\">\n <!-- Fill -->\n <div\n class=\"ds-slider__fill\"\n [ngStyle]=\"fillStyle()\">\n </div>\n\n <!-- Ticks -->\n @if (showTicks()) {\n <div class=\"ds-slider__ticks\">\n @for (tick of ticks(); track tick) {\n <div\n class=\"ds-slider__tick\"\n [ngStyle]=\"isVertical() ? { bottom: getTickPosition(tick) + '%' } : { left: getTickPosition(tick) + '%' }\">\n </div>\n }\n </div>\n }\n\n <!-- Thumb 1 (always present) -->\n <div\n #thumb1\n class=\"ds-slider__thumb\"\n [class.ds-slider__thumb--active]=\"focusedThumb() === 0 || dragging() === 0\"\n [ngStyle]=\"thumb1Style()\"\n [attr.role]=\"'slider'\"\n [attr.aria-valuemin]=\"min()\"\n [attr.aria-valuemax]=\"isRange() ? value2() : max()\"\n [attr.aria-valuenow]=\"value1()\"\n [attr.aria-valuetext]=\"getAriaValueText(0)\"\n [attr.aria-orientation]=\"orientation()\"\n [attr.aria-disabled]=\"isDisabled()\"\n [attr.tabindex]=\"isDisabled() ? -1 : 0\"\n (keydown)=\"onKeyDown($event, 0)\"\n (mousedown)=\"onThumbMouseDown($event, 0)\"\n (focus)=\"onThumbFocus(0)\"\n (blur)=\"onThumbBlur()\">\n @if (showLabels()) {\n <span class=\"ds-slider__thumb-label\">{{ label1() }}</span>\n }\n </div>\n\n <!-- Thumb 2 (only for range mode) -->\n @if (isRange()) {\n <div\n #thumb2\n class=\"ds-slider__thumb\"\n [class.ds-slider__thumb--active]=\"focusedThumb() === 1 || dragging() === 1\"\n [ngStyle]=\"thumb2Style()\"\n [attr.role]=\"'slider'\"\n [attr.aria-valuemin]=\"value1()\"\n [attr.aria-valuemax]=\"max()\"\n [attr.aria-valuenow]=\"value2()\"\n [attr.aria-valuetext]=\"getAriaValueText(1)\"\n [attr.aria-orientation]=\"orientation()\"\n [attr.aria-disabled]=\"isDisabled()\"\n [attr.tabindex]=\"isDisabled() ? -1 : 0\"\n (keydown)=\"onKeyDown($event, 1)\"\n (mousedown)=\"onThumbMouseDown($event, 1)\"\n (focus)=\"onThumbFocus(1)\"\n (blur)=\"onThumbBlur()\">\n @if (showLabels()) {\n <span class=\"ds-slider__thumb-label\">{{ label2() }}</span>\n }\n </div>\n }\n </div>\n </div>\n\n <!-- Max label -->\n @if (showLabels()) {\n <span class=\"ds-slider__label ds-slider__label--max\">\n {{ getTickLabel(max()) }}\n </span>\n }\n</div>\n", styles: [".ds-slider{display:flex;align-items:center;gap:var(--slider-label-gap, var(--space-3, .75rem));-webkit-user-select:none;user-select:none}.ds-slider__label{flex-shrink:0;font-size:var(--slider-label-font-size, var(--font-size-2, .875rem));color:var(--slider-label-color, var(--gray-700, #374151));font-weight:500}.ds-slider__label--min{order:1}.ds-slider__label--max{order:3}.ds-slider__track-container{flex:1;order:2;position:relative;display:flex;align-items:center}.ds-slider__track{position:relative;width:100%;height:var(--slider-track-height-md, 6px);background-color:var(--slider-track-bg, var(--gray-200, #e5e7eb));border-radius:var(--slider-track-radius, var(--radius-full, 9999px));cursor:pointer}.ds-slider__fill{position:absolute;background-color:var(--slider-fill-bg, var(--color-primary, #3b82f6));border-radius:var(--slider-track-radius, var(--radius-full, 9999px));height:100%;transition:all .15s ease;pointer-events:none}.ds-slider__ticks{position:absolute;width:100%;height:100%;pointer-events:none}.ds-slider__tick{position:absolute;width:var(--slider-tick-size, 2px);height:var(--slider-tick-size, 2px);background-color:var(--slider-tick-color, var(--gray-400, #9ca3af));border-radius:50%;transform:translate(-50%,-50%);top:50%}.ds-slider__thumb{position:absolute;width:var(--slider-thumb-size-md, 20px);height:var(--slider-thumb-size-md, 20px);background-color:var(--slider-thumb-bg, var(--white, #ffffff));border:var(--slider-thumb-border-width, 2px) solid var(--slider-thumb-border-color, var(--color-primary, #3b82f6));border-radius:50%;box-shadow:var(--slider-thumb-shadow, 0 1px 3px rgba(0, 0, 0, .1));cursor:grab;transform:translate(-50%,-50%);top:50%;transition:transform .15s ease,box-shadow .15s ease;outline:none}.ds-slider__thumb:hover:not([aria-disabled=true]){transform:translate(-50%,-50%) scale(1.1);box-shadow:var(--slider-thumb-shadow-hover, 0 2px 8px rgba(0, 0, 0, .15))}.ds-slider__thumb:focus-visible{box-shadow:var(--slider-thumb-shadow-focus, 0 0 0 3px rgba(59, 130, 246, .3))}.ds-slider__thumb--active{cursor:grabbing;transform:translate(-50%,-50%) scale(1.15);box-shadow:var(--slider-thumb-shadow-active, 0 0 0 4px rgba(59, 130, 246, .2))}.ds-slider__thumb[aria-disabled=true]{cursor:not-allowed;opacity:.5}.ds-slider__thumb-label{position:absolute;top:-32px;left:50%;transform:translate(-50%);background-color:var(--slider-thumb-label-bg, var(--gray-900, #111827));color:var(--slider-thumb-label-color, var(--white, #ffffff));font-size:var(--font-size-1, .75rem);padding:var(--space-1, .25rem) var(--space-2, .5rem);border-radius:var(--radius-1, .25rem);white-space:nowrap;pointer-events:none;opacity:0;transition:opacity .15s ease}.ds-slider__thumb:hover .ds-slider__thumb-label,.ds-slider__thumb:focus .ds-slider__thumb-label,.ds-slider__thumb--active .ds-slider__thumb-label{opacity:1}.ds-slider--sm .ds-slider__track{height:var(--slider-track-height-sm, 4px)}.ds-slider--sm .ds-slider__thumb{width:var(--slider-thumb-size-sm, 16px);height:var(--slider-thumb-size-sm, 16px)}.ds-slider--sm .ds-slider__label{font-size:var(--font-size-1, .75rem)}.ds-slider--lg .ds-slider__track{height:var(--slider-track-height-lg, 8px)}.ds-slider--lg .ds-slider__thumb{width:var(--slider-thumb-size-lg, 24px);height:var(--slider-thumb-size-lg, 24px)}.ds-slider--lg .ds-slider__label{font-size:var(--font-size-3, 1rem)}.ds-slider--disabled{opacity:.6;pointer-events:none}.ds-slider--disabled .ds-slider__track{cursor:not-allowed}.ds-slider--vertical{flex-direction:column;height:200px;width:auto}.ds-slider--vertical .ds-slider__label--min{order:3}.ds-slider--vertical .ds-slider__label--max{order:1}.ds-slider--vertical .ds-slider__track-container{flex:1;width:auto;height:100%;display:flex;justify-content:center}.ds-slider--vertical .ds-slider__track{width:var(--slider-track-height-md, 6px);height:100%}.ds-slider--vertical .ds-slider__fill{width:100%;height:auto}.ds-slider--vertical .ds-slider__thumb{left:50%;top:auto;transform:translate(-50%,50%)}.ds-slider--vertical .ds-slider__thumb:hover:not([aria-disabled=true]){transform:translate(-50%,50%) scale(1.1)}.ds-slider--vertical .ds-slider__thumb--active{transform:translate(-50%,50%) scale(1.15)}.ds-slider--vertical .ds-slider__thumb-label{top:50%;left:32px;transform:translateY(-50%)}.ds-slider--vertical .ds-slider__tick{left:50%;top:auto;transform:translate(-50%,50%)}.ds-slider--vertical.ds-slider--sm .ds-slider__track{width:var(--slider-track-height-sm, 4px)}.ds-slider--vertical.ds-slider--lg .ds-slider__track{width:var(--slider-track-height-lg, 8px)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
|
|
8123
|
+
}
|
|
8124
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DsSlider, decorators: [{
|
|
8125
|
+
type: Component,
|
|
8126
|
+
args: [{ selector: 'ds-slider', imports: [CommonModule], providers: [
|
|
8127
|
+
{
|
|
8128
|
+
provide: NG_VALUE_ACCESSOR,
|
|
8129
|
+
useExisting: forwardRef(() => DsSlider),
|
|
8130
|
+
multi: true,
|
|
8131
|
+
},
|
|
8132
|
+
], template: "<div [class]=\"containerClasses()\">\n <!-- Min label -->\n @if (showLabels()) {\n <span class=\"ds-slider__label ds-slider__label--min\">\n {{ getTickLabel(min()) }}\n </span>\n }\n\n <!-- Track container -->\n <div class=\"ds-slider__track-container\">\n <!-- Track background -->\n <div\n #track\n class=\"ds-slider__track\"\n (click)=\"onTrackClick($event)\"\n role=\"presentation\">\n <!-- Fill -->\n <div\n class=\"ds-slider__fill\"\n [ngStyle]=\"fillStyle()\">\n </div>\n\n <!-- Ticks -->\n @if (showTicks()) {\n <div class=\"ds-slider__ticks\">\n @for (tick of ticks(); track tick) {\n <div\n class=\"ds-slider__tick\"\n [ngStyle]=\"isVertical() ? { bottom: getTickPosition(tick) + '%' } : { left: getTickPosition(tick) + '%' }\">\n </div>\n }\n </div>\n }\n\n <!-- Thumb 1 (always present) -->\n <div\n #thumb1\n class=\"ds-slider__thumb\"\n [class.ds-slider__thumb--active]=\"focusedThumb() === 0 || dragging() === 0\"\n [ngStyle]=\"thumb1Style()\"\n [attr.role]=\"'slider'\"\n [attr.aria-valuemin]=\"min()\"\n [attr.aria-valuemax]=\"isRange() ? value2() : max()\"\n [attr.aria-valuenow]=\"value1()\"\n [attr.aria-valuetext]=\"getAriaValueText(0)\"\n [attr.aria-orientation]=\"orientation()\"\n [attr.aria-disabled]=\"isDisabled()\"\n [attr.tabindex]=\"isDisabled() ? -1 : 0\"\n (keydown)=\"onKeyDown($event, 0)\"\n (mousedown)=\"onThumbMouseDown($event, 0)\"\n (focus)=\"onThumbFocus(0)\"\n (blur)=\"onThumbBlur()\">\n @if (showLabels()) {\n <span class=\"ds-slider__thumb-label\">{{ label1() }}</span>\n }\n </div>\n\n <!-- Thumb 2 (only for range mode) -->\n @if (isRange()) {\n <div\n #thumb2\n class=\"ds-slider__thumb\"\n [class.ds-slider__thumb--active]=\"focusedThumb() === 1 || dragging() === 1\"\n [ngStyle]=\"thumb2Style()\"\n [attr.role]=\"'slider'\"\n [attr.aria-valuemin]=\"value1()\"\n [attr.aria-valuemax]=\"max()\"\n [attr.aria-valuenow]=\"value2()\"\n [attr.aria-valuetext]=\"getAriaValueText(1)\"\n [attr.aria-orientation]=\"orientation()\"\n [attr.aria-disabled]=\"isDisabled()\"\n [attr.tabindex]=\"isDisabled() ? -1 : 0\"\n (keydown)=\"onKeyDown($event, 1)\"\n (mousedown)=\"onThumbMouseDown($event, 1)\"\n (focus)=\"onThumbFocus(1)\"\n (blur)=\"onThumbBlur()\">\n @if (showLabels()) {\n <span class=\"ds-slider__thumb-label\">{{ label2() }}</span>\n }\n </div>\n }\n </div>\n </div>\n\n <!-- Max label -->\n @if (showLabels()) {\n <span class=\"ds-slider__label ds-slider__label--max\">\n {{ getTickLabel(max()) }}\n </span>\n }\n</div>\n", styles: [".ds-slider{display:flex;align-items:center;gap:var(--slider-label-gap, var(--space-3, .75rem));-webkit-user-select:none;user-select:none}.ds-slider__label{flex-shrink:0;font-size:var(--slider-label-font-size, var(--font-size-2, .875rem));color:var(--slider-label-color, var(--gray-700, #374151));font-weight:500}.ds-slider__label--min{order:1}.ds-slider__label--max{order:3}.ds-slider__track-container{flex:1;order:2;position:relative;display:flex;align-items:center}.ds-slider__track{position:relative;width:100%;height:var(--slider-track-height-md, 6px);background-color:var(--slider-track-bg, var(--gray-200, #e5e7eb));border-radius:var(--slider-track-radius, var(--radius-full, 9999px));cursor:pointer}.ds-slider__fill{position:absolute;background-color:var(--slider-fill-bg, var(--color-primary, #3b82f6));border-radius:var(--slider-track-radius, var(--radius-full, 9999px));height:100%;transition:all .15s ease;pointer-events:none}.ds-slider__ticks{position:absolute;width:100%;height:100%;pointer-events:none}.ds-slider__tick{position:absolute;width:var(--slider-tick-size, 2px);height:var(--slider-tick-size, 2px);background-color:var(--slider-tick-color, var(--gray-400, #9ca3af));border-radius:50%;transform:translate(-50%,-50%);top:50%}.ds-slider__thumb{position:absolute;width:var(--slider-thumb-size-md, 20px);height:var(--slider-thumb-size-md, 20px);background-color:var(--slider-thumb-bg, var(--white, #ffffff));border:var(--slider-thumb-border-width, 2px) solid var(--slider-thumb-border-color, var(--color-primary, #3b82f6));border-radius:50%;box-shadow:var(--slider-thumb-shadow, 0 1px 3px rgba(0, 0, 0, .1));cursor:grab;transform:translate(-50%,-50%);top:50%;transition:transform .15s ease,box-shadow .15s ease;outline:none}.ds-slider__thumb:hover:not([aria-disabled=true]){transform:translate(-50%,-50%) scale(1.1);box-shadow:var(--slider-thumb-shadow-hover, 0 2px 8px rgba(0, 0, 0, .15))}.ds-slider__thumb:focus-visible{box-shadow:var(--slider-thumb-shadow-focus, 0 0 0 3px rgba(59, 130, 246, .3))}.ds-slider__thumb--active{cursor:grabbing;transform:translate(-50%,-50%) scale(1.15);box-shadow:var(--slider-thumb-shadow-active, 0 0 0 4px rgba(59, 130, 246, .2))}.ds-slider__thumb[aria-disabled=true]{cursor:not-allowed;opacity:.5}.ds-slider__thumb-label{position:absolute;top:-32px;left:50%;transform:translate(-50%);background-color:var(--slider-thumb-label-bg, var(--gray-900, #111827));color:var(--slider-thumb-label-color, var(--white, #ffffff));font-size:var(--font-size-1, .75rem);padding:var(--space-1, .25rem) var(--space-2, .5rem);border-radius:var(--radius-1, .25rem);white-space:nowrap;pointer-events:none;opacity:0;transition:opacity .15s ease}.ds-slider__thumb:hover .ds-slider__thumb-label,.ds-slider__thumb:focus .ds-slider__thumb-label,.ds-slider__thumb--active .ds-slider__thumb-label{opacity:1}.ds-slider--sm .ds-slider__track{height:var(--slider-track-height-sm, 4px)}.ds-slider--sm .ds-slider__thumb{width:var(--slider-thumb-size-sm, 16px);height:var(--slider-thumb-size-sm, 16px)}.ds-slider--sm .ds-slider__label{font-size:var(--font-size-1, .75rem)}.ds-slider--lg .ds-slider__track{height:var(--slider-track-height-lg, 8px)}.ds-slider--lg .ds-slider__thumb{width:var(--slider-thumb-size-lg, 24px);height:var(--slider-thumb-size-lg, 24px)}.ds-slider--lg .ds-slider__label{font-size:var(--font-size-3, 1rem)}.ds-slider--disabled{opacity:.6;pointer-events:none}.ds-slider--disabled .ds-slider__track{cursor:not-allowed}.ds-slider--vertical{flex-direction:column;height:200px;width:auto}.ds-slider--vertical .ds-slider__label--min{order:3}.ds-slider--vertical .ds-slider__label--max{order:1}.ds-slider--vertical .ds-slider__track-container{flex:1;width:auto;height:100%;display:flex;justify-content:center}.ds-slider--vertical .ds-slider__track{width:var(--slider-track-height-md, 6px);height:100%}.ds-slider--vertical .ds-slider__fill{width:100%;height:auto}.ds-slider--vertical .ds-slider__thumb{left:50%;top:auto;transform:translate(-50%,50%)}.ds-slider--vertical .ds-slider__thumb:hover:not([aria-disabled=true]){transform:translate(-50%,50%) scale(1.1)}.ds-slider--vertical .ds-slider__thumb--active{transform:translate(-50%,50%) scale(1.15)}.ds-slider--vertical .ds-slider__thumb-label{top:50%;left:32px;transform:translateY(-50%)}.ds-slider--vertical .ds-slider__tick{left:50%;top:auto;transform:translate(-50%,50%)}.ds-slider--vertical.ds-slider--sm .ds-slider__track{width:var(--slider-track-height-sm, 4px)}.ds-slider--vertical.ds-slider--lg .ds-slider__track{width:var(--slider-track-height-lg, 8px)}\n"] }]
|
|
8133
|
+
}], ctorParameters: () => [], propDecorators: { min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], step: [{ type: i0.Input, args: [{ isSignal: true, alias: "step", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], range: [{ type: i0.Input, args: [{ isSignal: true, alias: "range", required: false }] }], orientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "orientation", required: false }] }], showLabels: [{ type: i0.Input, args: [{ isSignal: true, alias: "showLabels", required: false }] }], showTicks: [{ type: i0.Input, args: [{ isSignal: true, alias: "showTicks", required: false }] }], tickInterval: [{ type: i0.Input, args: [{ isSignal: true, alias: "tickInterval", required: false }] }], formatLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "formatLabel", required: false }] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }], trackElement: [{
|
|
8134
|
+
type: ViewChild,
|
|
8135
|
+
args: ['track', { static: false }]
|
|
8136
|
+
}], thumb1Element: [{
|
|
8137
|
+
type: ViewChild,
|
|
8138
|
+
args: ['thumb1', { static: false }]
|
|
8139
|
+
}], thumb2Element: [{
|
|
8140
|
+
type: ViewChild,
|
|
8141
|
+
args: ['thumb2', { static: false }]
|
|
8142
|
+
}] } });
|
|
8143
|
+
|
|
8144
|
+
/**
|
|
8145
|
+
* # DsFileUpload
|
|
8146
|
+
*
|
|
8147
|
+
* Composant de téléchargement de fichiers avec support drag & drop,
|
|
8148
|
+
* validation, preview et barre de progression.
|
|
8149
|
+
*
|
|
8150
|
+
* ## Usage
|
|
8151
|
+
*
|
|
8152
|
+
* ```html
|
|
8153
|
+
* <!-- Upload simple -->
|
|
8154
|
+
* <ds-file-upload
|
|
8155
|
+
* [accept]="'image/*'"
|
|
8156
|
+
* [maxFileSize]="5242880"
|
|
8157
|
+
* (filesChange)="onFilesChange($event)">
|
|
8158
|
+
* </ds-file-upload>
|
|
8159
|
+
*
|
|
8160
|
+
* <!-- Upload multiple avec preview -->
|
|
8161
|
+
* <ds-file-upload
|
|
8162
|
+
* [multiple]="true"
|
|
8163
|
+
* [showPreview]="true"
|
|
8164
|
+
* [maxFiles]="5"
|
|
8165
|
+
* size="lg">
|
|
8166
|
+
* </ds-file-upload>
|
|
8167
|
+
* ```
|
|
8168
|
+
*
|
|
8169
|
+
* ## Accessibilité
|
|
8170
|
+
*
|
|
8171
|
+
* - Input natif avec label accessible
|
|
8172
|
+
* - Drag & drop avec feedback ARIA
|
|
8173
|
+
* - Messages d'erreur associés via aria-describedby
|
|
8174
|
+
*
|
|
8175
|
+
* @component
|
|
8176
|
+
*/
|
|
8177
|
+
class DsFileUpload {
|
|
8178
|
+
/**
|
|
8179
|
+
* Types de fichiers acceptés (ex: 'image/*,.pdf').
|
|
8180
|
+
* @default '*'
|
|
8181
|
+
*/
|
|
8182
|
+
accept = input('*', ...(ngDevMode ? [{ debugName: "accept" }] : []));
|
|
8183
|
+
/**
|
|
8184
|
+
* Taille maximale d'un fichier en bytes.
|
|
8185
|
+
* @default 10485760 (10 MB)
|
|
8186
|
+
*/
|
|
8187
|
+
maxFileSize = input(10485760, ...(ngDevMode ? [{ debugName: "maxFileSize" }] : []));
|
|
8188
|
+
/**
|
|
8189
|
+
* Nombre maximum de fichiers.
|
|
8190
|
+
* @default 1
|
|
8191
|
+
*/
|
|
8192
|
+
maxFiles = input(1, ...(ngDevMode ? [{ debugName: "maxFiles" }] : []));
|
|
8193
|
+
/**
|
|
8194
|
+
* Permet la sélection multiple de fichiers.
|
|
8195
|
+
* @default false
|
|
8196
|
+
*/
|
|
8197
|
+
multiple = input(false, ...(ngDevMode ? [{ debugName: "multiple" }] : []));
|
|
8198
|
+
/**
|
|
8199
|
+
* Désactive le composant.
|
|
8200
|
+
* @default false
|
|
8201
|
+
*/
|
|
8202
|
+
disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
|
|
8203
|
+
/**
|
|
8204
|
+
* Taille du composant.
|
|
8205
|
+
* @default 'md'
|
|
8206
|
+
*/
|
|
8207
|
+
size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : []));
|
|
8208
|
+
/**
|
|
8209
|
+
* Affiche une preview pour les images.
|
|
8210
|
+
* @default true
|
|
8211
|
+
*/
|
|
8212
|
+
showPreview = input(true, ...(ngDevMode ? [{ debugName: "showPreview" }] : []));
|
|
8213
|
+
/**
|
|
8214
|
+
* Label personnalisé pour le bouton.
|
|
8215
|
+
*/
|
|
8216
|
+
label = input('Choisir un fichier', ...(ngDevMode ? [{ debugName: "label" }] : []));
|
|
8217
|
+
/**
|
|
8218
|
+
* Texte d'aide pour le drag & drop.
|
|
8219
|
+
*/
|
|
8220
|
+
dragHelpText = input('ou glisser-déposer ici', ...(ngDevMode ? [{ debugName: "dragHelpText" }] : []));
|
|
8221
|
+
/**
|
|
8222
|
+
* Événement émis lors du changement de fichiers.
|
|
8223
|
+
*/
|
|
8224
|
+
filesChange = output();
|
|
8225
|
+
/**
|
|
8226
|
+
* Événement émis lors de la suppression d'un fichier.
|
|
8227
|
+
*/
|
|
8228
|
+
fileRemoved = output();
|
|
8229
|
+
/**
|
|
8230
|
+
* Événement émis lors de la progression de l'upload.
|
|
8231
|
+
*/
|
|
8232
|
+
uploadProgress = output();
|
|
8233
|
+
// Icons (readonly for template access)
|
|
8234
|
+
faCloudArrowUp = faCloudArrowUp;
|
|
8235
|
+
faXmark = faXmark;
|
|
8236
|
+
faFile = faFile;
|
|
8237
|
+
faFileImage = faFileImage;
|
|
8238
|
+
faFilePdf = faFilePdf;
|
|
8239
|
+
faFileWord = faFileWord;
|
|
8240
|
+
faFileExcel = faFileExcel;
|
|
8241
|
+
// ViewChild pour l'input file
|
|
8242
|
+
fileInput = viewChild('fileInput', ...(ngDevMode ? [{ debugName: "fileInput" }] : []));
|
|
8243
|
+
// État interne
|
|
8244
|
+
files = signal([], ...(ngDevMode ? [{ debugName: "files" }] : []));
|
|
8245
|
+
isDragging = signal(false, ...(ngDevMode ? [{ debugName: "isDragging" }] : []));
|
|
8246
|
+
errorMessage = signal('', ...(ngDevMode ? [{ debugName: "errorMessage" }] : []));
|
|
8247
|
+
// ControlValueAccessor
|
|
8248
|
+
onChange = () => { };
|
|
8249
|
+
onTouched = () => { };
|
|
8250
|
+
/**
|
|
8251
|
+
* Classes CSS calculées pour le conteneur (public pour tests).
|
|
8252
|
+
*/
|
|
8253
|
+
containerClasses = computed(() => {
|
|
8254
|
+
return [
|
|
8255
|
+
'ds-file-upload',
|
|
8256
|
+
`ds-file-upload--${this.size()}`,
|
|
8257
|
+
this.isDragging() ? 'ds-file-upload--dragging' : '',
|
|
8258
|
+
this.disabled() ? 'ds-file-upload--disabled' : '',
|
|
8259
|
+
this.errorMessage() ? 'ds-file-upload--error' : '',
|
|
8260
|
+
].filter(Boolean);
|
|
8261
|
+
}, ...(ngDevMode ? [{ debugName: "containerClasses" }] : []));
|
|
8262
|
+
/**
|
|
8263
|
+
* Nombre de fichiers actuellement sélectionnés (public pour tests).
|
|
8264
|
+
*/
|
|
8265
|
+
fileCount = computed(() => this.files().length, ...(ngDevMode ? [{ debugName: "fileCount" }] : []));
|
|
8266
|
+
/**
|
|
8267
|
+
* Vérifie si la limite de fichiers est atteinte (public pour tests).
|
|
8268
|
+
*/
|
|
8269
|
+
isMaxFilesReached = computed(() => this.fileCount() >= this.maxFiles(), ...(ngDevMode ? [{ debugName: "isMaxFilesReached" }] : []));
|
|
8270
|
+
/**
|
|
8271
|
+
* Ouvre le sélecteur de fichiers.
|
|
8272
|
+
*/
|
|
8273
|
+
openFileSelector() {
|
|
8274
|
+
if (this.disabled() || this.isMaxFilesReached()) {
|
|
8275
|
+
return;
|
|
8276
|
+
}
|
|
8277
|
+
this.fileInput()?.nativeElement.click();
|
|
8278
|
+
}
|
|
8279
|
+
/**
|
|
8280
|
+
* Gère la sélection de fichiers via l'input.
|
|
8281
|
+
*/
|
|
8282
|
+
onFileSelect(event) {
|
|
8283
|
+
const input = event.target;
|
|
8284
|
+
if (!input.files?.length) {
|
|
8285
|
+
return;
|
|
8286
|
+
}
|
|
8287
|
+
this.handleFiles(Array.from(input.files));
|
|
8288
|
+
input.value = ''; // Reset pour permettre la réutilisation
|
|
8289
|
+
}
|
|
8290
|
+
/**
|
|
8291
|
+
* Gère le début du drag.
|
|
8292
|
+
*/
|
|
8293
|
+
onDragEnter(event) {
|
|
8294
|
+
event.preventDefault();
|
|
8295
|
+
event.stopPropagation();
|
|
8296
|
+
if (!this.disabled() && !this.isMaxFilesReached()) {
|
|
8297
|
+
this.isDragging.set(true);
|
|
8298
|
+
}
|
|
8299
|
+
}
|
|
8300
|
+
/**
|
|
8301
|
+
* Gère le survol pendant le drag.
|
|
8302
|
+
*/
|
|
8303
|
+
onDragOver(event) {
|
|
8304
|
+
event.preventDefault();
|
|
8305
|
+
event.stopPropagation();
|
|
8306
|
+
}
|
|
8307
|
+
/**
|
|
8308
|
+
* Gère la sortie du drag.
|
|
8309
|
+
*/
|
|
8310
|
+
onDragLeave(event) {
|
|
8311
|
+
event.preventDefault();
|
|
8312
|
+
event.stopPropagation();
|
|
8313
|
+
const target = event.currentTarget;
|
|
8314
|
+
const related = event.relatedTarget;
|
|
8315
|
+
if (!target.contains(related)) {
|
|
8316
|
+
this.isDragging.set(false);
|
|
8317
|
+
}
|
|
8318
|
+
}
|
|
8319
|
+
/**
|
|
8320
|
+
* Gère le drop des fichiers.
|
|
8321
|
+
*/
|
|
8322
|
+
onDrop(event) {
|
|
8323
|
+
event.preventDefault();
|
|
8324
|
+
event.stopPropagation();
|
|
8325
|
+
this.isDragging.set(false);
|
|
8326
|
+
if (this.disabled() || this.isMaxFilesReached()) {
|
|
8327
|
+
return;
|
|
8328
|
+
}
|
|
8329
|
+
const files = event.dataTransfer?.files;
|
|
8330
|
+
if (files?.length) {
|
|
8331
|
+
this.handleFiles(Array.from(files));
|
|
8332
|
+
}
|
|
8333
|
+
}
|
|
8334
|
+
/**
|
|
8335
|
+
* Traite les fichiers sélectionnés ou déposés.
|
|
8336
|
+
*/
|
|
8337
|
+
handleFiles(newFiles) {
|
|
8338
|
+
this.errorMessage.set('');
|
|
8339
|
+
// En mode single, on remplace toujours le fichier existant
|
|
8340
|
+
if (!this.multiple()) {
|
|
8341
|
+
// Mode single : remplacer le fichier existant
|
|
8342
|
+
const filesToAdd = [newFiles[0]];
|
|
8343
|
+
// Valider et ajouter le fichier
|
|
8344
|
+
const validFiles = [];
|
|
8345
|
+
for (const file of filesToAdd) {
|
|
8346
|
+
const validation = this.validateFile(file);
|
|
8347
|
+
if (validation.valid) {
|
|
8348
|
+
const uploadFile = {
|
|
8349
|
+
file,
|
|
8350
|
+
progress: 0,
|
|
8351
|
+
};
|
|
8352
|
+
// Générer preview pour les images
|
|
8353
|
+
if (this.showPreview() && file.type.startsWith('image/')) {
|
|
8354
|
+
this.generatePreview(file, uploadFile);
|
|
8355
|
+
}
|
|
8356
|
+
validFiles.push(uploadFile);
|
|
8357
|
+
}
|
|
8358
|
+
else {
|
|
8359
|
+
this.errorMessage.set(validation.error || 'Fichier invalide');
|
|
8360
|
+
}
|
|
8361
|
+
}
|
|
8362
|
+
if (validFiles.length > 0) {
|
|
8363
|
+
this.files.set(validFiles);
|
|
8364
|
+
this.notifyChange();
|
|
8365
|
+
this.simulateUpload(validFiles);
|
|
8366
|
+
}
|
|
8367
|
+
return;
|
|
8368
|
+
}
|
|
8369
|
+
// Mode multiple : vérifier la limite de fichiers
|
|
8370
|
+
const currentCount = this.fileCount();
|
|
8371
|
+
const maxFiles = this.maxFiles();
|
|
8372
|
+
const availableSlots = maxFiles - currentCount;
|
|
8373
|
+
if (availableSlots <= 0) {
|
|
8374
|
+
this.errorMessage.set(`Limite de ${maxFiles} fichier(s) atteinte`);
|
|
8375
|
+
return;
|
|
8376
|
+
}
|
|
8377
|
+
// Limiter le nombre de nouveaux fichiers
|
|
8378
|
+
const filesToAdd = newFiles.slice(0, availableSlots);
|
|
8379
|
+
// Valider et ajouter les fichiers
|
|
8380
|
+
const validFiles = [];
|
|
8381
|
+
for (const file of filesToAdd) {
|
|
8382
|
+
const validation = this.validateFile(file);
|
|
8383
|
+
if (validation.valid) {
|
|
8384
|
+
const uploadFile = {
|
|
8385
|
+
file,
|
|
8386
|
+
progress: 0,
|
|
8387
|
+
};
|
|
8388
|
+
// Générer preview pour les images
|
|
8389
|
+
if (this.showPreview() && file.type.startsWith('image/')) {
|
|
8390
|
+
this.generatePreview(file, uploadFile);
|
|
8391
|
+
}
|
|
8392
|
+
validFiles.push(uploadFile);
|
|
8393
|
+
}
|
|
8394
|
+
else {
|
|
8395
|
+
this.errorMessage.set(validation.error || 'Fichier invalide');
|
|
8396
|
+
}
|
|
8397
|
+
}
|
|
8398
|
+
if (validFiles.length > 0) {
|
|
8399
|
+
// Mode multiple : ajouter aux fichiers existants
|
|
8400
|
+
this.files.update((current) => [...current, ...validFiles]);
|
|
8401
|
+
this.notifyChange();
|
|
8402
|
+
this.simulateUpload(validFiles);
|
|
8403
|
+
}
|
|
8404
|
+
}
|
|
8405
|
+
/**
|
|
8406
|
+
* Valide un fichier (taille, type).
|
|
8407
|
+
*/
|
|
8408
|
+
validateFile(file) {
|
|
8409
|
+
// Vérifier la taille
|
|
8410
|
+
if (file.size > this.maxFileSize()) {
|
|
8411
|
+
const maxMB = (this.maxFileSize() / 1048576).toFixed(1);
|
|
8412
|
+
return {
|
|
8413
|
+
valid: false,
|
|
8414
|
+
error: `Fichier trop volumineux (max ${maxMB} MB)`,
|
|
8415
|
+
};
|
|
8416
|
+
}
|
|
8417
|
+
// Vérifier le type (si spécifié)
|
|
8418
|
+
const accept = this.accept();
|
|
8419
|
+
if (accept !== '*') {
|
|
8420
|
+
const acceptedTypes = accept.split(',').map((t) => t.trim());
|
|
8421
|
+
const isAccepted = acceptedTypes.some((type) => {
|
|
8422
|
+
if (type.startsWith('.')) {
|
|
8423
|
+
return file.name.toLowerCase().endsWith(type.toLowerCase());
|
|
8424
|
+
}
|
|
8425
|
+
if (type.endsWith('/*')) {
|
|
8426
|
+
const category = type.split('/')[0];
|
|
8427
|
+
return file.type.startsWith(category + '/');
|
|
8428
|
+
}
|
|
8429
|
+
return file.type === type;
|
|
8430
|
+
});
|
|
8431
|
+
if (!isAccepted) {
|
|
8432
|
+
return {
|
|
8433
|
+
valid: false,
|
|
8434
|
+
error: `Type de fichier non accepté`,
|
|
8435
|
+
};
|
|
8436
|
+
}
|
|
8437
|
+
}
|
|
8438
|
+
return { valid: true };
|
|
8439
|
+
}
|
|
8440
|
+
/**
|
|
8441
|
+
* Génère une preview pour les images.
|
|
8442
|
+
*/
|
|
8443
|
+
generatePreview(file, uploadFile) {
|
|
8444
|
+
const reader = new FileReader();
|
|
8445
|
+
reader.onload = (e) => {
|
|
8446
|
+
uploadFile.preview = e.target?.result;
|
|
8447
|
+
this.files.update((files) => [...files]); // Trigger change detection
|
|
8448
|
+
};
|
|
8449
|
+
reader.readAsDataURL(file);
|
|
8450
|
+
}
|
|
8451
|
+
/**
|
|
8452
|
+
* Simule l'upload avec progression (pour démonstration).
|
|
8453
|
+
* Dans une vraie application, remplacer par un vrai upload HTTP.
|
|
8454
|
+
*/
|
|
8455
|
+
simulateUpload(uploadFiles) {
|
|
8456
|
+
uploadFiles.forEach((uploadFile) => {
|
|
8457
|
+
const interval = setInterval(() => {
|
|
8458
|
+
uploadFile.progress += 10;
|
|
8459
|
+
if (uploadFile.progress >= 100) {
|
|
8460
|
+
clearInterval(interval);
|
|
8461
|
+
}
|
|
8462
|
+
this.uploadProgress.emit({
|
|
8463
|
+
file: uploadFile.file,
|
|
8464
|
+
progress: uploadFile.progress,
|
|
8465
|
+
});
|
|
8466
|
+
this.files.update((files) => [...files]); // Trigger change detection
|
|
8467
|
+
}, 100);
|
|
8468
|
+
});
|
|
8469
|
+
}
|
|
8470
|
+
/**
|
|
8471
|
+
* Retire un fichier de la liste.
|
|
8472
|
+
*/
|
|
8473
|
+
removeFile(uploadFile) {
|
|
8474
|
+
this.files.update((files) => files.filter((f) => f.file !== uploadFile.file));
|
|
8475
|
+
this.fileRemoved.emit(uploadFile.file);
|
|
8476
|
+
this.notifyChange();
|
|
8477
|
+
this.errorMessage.set('');
|
|
8478
|
+
}
|
|
8479
|
+
/**
|
|
8480
|
+
* Notifie le changement de valeur.
|
|
8481
|
+
*/
|
|
8482
|
+
notifyChange() {
|
|
8483
|
+
const fileList = this.files().map((uf) => uf.file);
|
|
8484
|
+
this.filesChange.emit(fileList);
|
|
8485
|
+
this.onChange(fileList.length > 0 ? fileList : null);
|
|
8486
|
+
}
|
|
8487
|
+
/**
|
|
8488
|
+
* Retourne l'icône appropriée pour le type de fichier (public pour tests).
|
|
8489
|
+
*/
|
|
8490
|
+
getFileIcon(file) {
|
|
8491
|
+
if (file.type.startsWith('image/')) {
|
|
8492
|
+
return this.faFileImage;
|
|
8493
|
+
}
|
|
8494
|
+
if (file.type === 'application/pdf') {
|
|
8495
|
+
return this.faFilePdf;
|
|
8496
|
+
}
|
|
8497
|
+
if (file.type ===
|
|
8498
|
+
'application/vnd.openxmlformats-officedocument.wordprocessingml.document' ||
|
|
8499
|
+
file.type === 'application/msword') {
|
|
8500
|
+
return this.faFileWord;
|
|
8501
|
+
}
|
|
8502
|
+
if (file.type ===
|
|
8503
|
+
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' ||
|
|
8504
|
+
file.type === 'application/vnd.ms-excel') {
|
|
8505
|
+
return this.faFileExcel;
|
|
8506
|
+
}
|
|
8507
|
+
return this.faFile;
|
|
8508
|
+
}
|
|
8509
|
+
/**
|
|
8510
|
+
* Formate la taille du fichier en MB ou KB (public pour tests).
|
|
8511
|
+
*/
|
|
8512
|
+
formatFileSize(bytes) {
|
|
8513
|
+
if (bytes >= 1048576) {
|
|
8514
|
+
return `${(bytes / 1048576).toFixed(1)} MB`;
|
|
8515
|
+
}
|
|
8516
|
+
return `${(bytes / 1024).toFixed(0)} KB`;
|
|
8517
|
+
}
|
|
8518
|
+
// ControlValueAccessor implementation
|
|
8519
|
+
writeValue(value) {
|
|
8520
|
+
if (!value) {
|
|
8521
|
+
this.files.set([]);
|
|
8522
|
+
return;
|
|
8523
|
+
}
|
|
8524
|
+
const uploadFiles = value.map((file) => ({
|
|
8525
|
+
file,
|
|
8526
|
+
progress: 100,
|
|
8527
|
+
}));
|
|
8528
|
+
this.files.set(uploadFiles);
|
|
8529
|
+
}
|
|
8530
|
+
registerOnChange(fn) {
|
|
8531
|
+
this.onChange = fn;
|
|
8532
|
+
}
|
|
8533
|
+
registerOnTouched(fn) {
|
|
8534
|
+
this.onTouched = fn;
|
|
8535
|
+
}
|
|
8536
|
+
setDisabledState(isDisabled) {
|
|
8537
|
+
// Le disabled est géré via input signal
|
|
8538
|
+
}
|
|
8539
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DsFileUpload, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
8540
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: DsFileUpload, isStandalone: true, selector: "ds-file-upload", inputs: { accept: { classPropertyName: "accept", publicName: "accept", isSignal: true, isRequired: false, transformFunction: null }, maxFileSize: { classPropertyName: "maxFileSize", publicName: "maxFileSize", isSignal: true, isRequired: false, transformFunction: null }, maxFiles: { classPropertyName: "maxFiles", publicName: "maxFiles", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, showPreview: { classPropertyName: "showPreview", publicName: "showPreview", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, dragHelpText: { classPropertyName: "dragHelpText", publicName: "dragHelpText", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { filesChange: "filesChange", fileRemoved: "fileRemoved", uploadProgress: "uploadProgress" }, providers: [
|
|
8541
|
+
{
|
|
8542
|
+
provide: NG_VALUE_ACCESSOR,
|
|
8543
|
+
useExisting: forwardRef(() => DsFileUpload),
|
|
8544
|
+
multi: true,
|
|
8545
|
+
},
|
|
8546
|
+
], viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true, isSignal: true }], ngImport: i0, template: "<div\n [ngClass]=\"containerClasses()\"\n (dragenter)=\"onDragEnter($event)\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n>\n <!-- Zone de drop -->\n <div\n class=\"ds-file-upload__dropzone\"\n [class.ds-file-upload__dropzone--active]=\"isDragging()\"\n (click)=\"openFileSelector()\"\n [attr.tabindex]=\"disabled() ? null : 0\"\n [attr.aria-label]=\"label()\"\n role=\"button\"\n >\n <input\n #fileInput\n type=\"file\"\n class=\"ds-file-upload__input\"\n [accept]=\"accept()\"\n [multiple]=\"multiple()\"\n [disabled]=\"disabled() || isMaxFilesReached()\"\n (change)=\"onFileSelect($event)\"\n aria-hidden=\"true\"\n tabindex=\"-1\"\n />\n\n <!-- Ic\u00F4ne et texte -->\n <div class=\"ds-file-upload__icon\">\n <fa-icon [icon]=\"faCloudArrowUp\" size=\"2x\"></fa-icon>\n </div>\n <div class=\"ds-file-upload__text\">\n <span class=\"ds-file-upload__label\">{{ label() }}</span>\n @if (!disabled() && !isMaxFilesReached()) {\n <span class=\"ds-file-upload__help\">{{ dragHelpText() }}</span>\n }\n @if (isMaxFilesReached()) {\n <span class=\"ds-file-upload__limit\">Limite atteinte ({{ maxFiles() }} fichier{{ maxFiles() > 1 ? 's' : '' }})</span>\n }\n </div>\n\n <!-- Message d'erreur global -->\n @if (errorMessage()) {\n <div class=\"ds-file-upload__error\" role=\"alert\">\n {{ errorMessage() }}\n </div>\n }\n\n <!-- Indications -->\n @if (!errorMessage() && accept() !== '*') {\n <div class=\"ds-file-upload__hint\">\n Types accept\u00E9s : {{ accept() }}\n </div>\n }\n @if (!errorMessage() && maxFileSize()) {\n <div class=\"ds-file-upload__hint\">\n Taille max : {{ formatFileSize(maxFileSize()) }}\n </div>\n }\n </div>\n\n <!-- Liste des fichiers -->\n @if (fileCount() > 0) {\n <div class=\"ds-file-upload__files\">\n @for (uploadFile of files(); track uploadFile.file.name) {\n <div class=\"ds-file-upload__file\">\n <!-- Preview image -->\n @if (showPreview() && uploadFile.preview) {\n <div class=\"ds-file-upload__preview\">\n <img [src]=\"uploadFile.preview\" [alt]=\"uploadFile.file.name\" />\n </div>\n } @else {\n <div class=\"ds-file-upload__file-icon\">\n <fa-icon [icon]=\"getFileIcon(uploadFile.file)\"></fa-icon>\n </div>\n }\n\n <!-- Infos fichier -->\n <div class=\"ds-file-upload__file-info\">\n <div class=\"ds-file-upload__file-name\" [title]=\"uploadFile.file.name\">\n {{ uploadFile.file.name }}\n </div>\n <div class=\"ds-file-upload__file-size\">\n {{ formatFileSize(uploadFile.file.size) }}\n </div>\n\n <!-- Barre de progression -->\n @if (uploadFile.progress < 100) {\n <ds-progress-bar\n [value]=\"uploadFile.progress\"\n size=\"sm\"\n variant=\"default\"\n [showLabel]=\"true\"\n ></ds-progress-bar>\n }\n\n <!-- Message d'erreur fichier -->\n @if (uploadFile.error) {\n <div class=\"ds-file-upload__file-error\" role=\"alert\">\n {{ uploadFile.error }}\n </div>\n }\n </div>\n\n <!-- Bouton supprimer -->\n <button\n type=\"button\"\n class=\"ds-file-upload__remove\"\n (click)=\"removeFile(uploadFile)\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"'Supprimer ' + uploadFile.file.name\"\n >\n <fa-icon [icon]=\"faXmark\"></fa-icon>\n </button>\n </div>\n }\n </div>\n }\n</div>\n", styles: [".ds-file-upload{display:block;font-family:var(--font-family-base)}.ds-file-upload__dropzone{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:var(--space-8);border:2px dashed var(--file-upload-border, var(--gray-300));border-radius:var(--file-upload-radius, var(--radius-2));background:var(--file-upload-bg, var(--white));cursor:pointer;transition:all .2s ease;position:relative;min-height:200px}.ds-file-upload__dropzone:hover:not(.ds-file-upload--disabled .ds-file-upload__dropzone){border-color:var(--file-upload-border-hover, var(--color-primary));background:var(--file-upload-bg-hover, var(--gray-50))}.ds-file-upload__dropzone:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.ds-file-upload__dropzone--active{border-color:var(--file-upload-border-active, var(--color-primary));background:var(--file-upload-bg-active, var(--blue-50))}.ds-file-upload__input{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.ds-file-upload__icon{color:var(--file-upload-icon-color, var(--gray-400));margin-bottom:var(--space-3);transition:color .2s ease}.ds-file-upload__dropzone:hover .ds-file-upload__icon{color:var(--file-upload-icon-color-hover, var(--color-primary))}.ds-file-upload__dropzone--active .ds-file-upload__icon{color:var(--file-upload-icon-color-active, var(--color-primary));transform:scale(1.1)}.ds-file-upload__text{text-align:center;color:var(--file-upload-text-color, var(--gray-700))}.ds-file-upload__label{display:block;font-size:var(--font-size-base, var(--font-size-3));font-weight:500;margin-bottom:var(--space-1);color:var(--file-upload-label-color, var(--gray-900))}.ds-file-upload__help{display:block;font-size:var(--font-size-sm, var(--font-size-2));color:var(--file-upload-help-color, var(--gray-500))}.ds-file-upload__limit{display:block;font-size:var(--font-size-sm, var(--font-size-2));color:var(--warning);font-weight:500}.ds-file-upload__error{margin-top:var(--space-2);padding:var(--space-2) var(--space-3);background:var(--error-bg, var(--red-50));color:var(--error);border-radius:var(--radius-1);font-size:var(--font-size-sm, var(--font-size-2));text-align:center}.ds-file-upload__hint{margin-top:var(--space-1);font-size:var(--font-size-xs, var(--font-size-1));color:var(--file-upload-hint-color, var(--gray-500));text-align:center}.ds-file-upload__files{margin-top:var(--space-4);display:flex;flex-direction:column;gap:var(--space-3)}.ds-file-upload__file{display:flex;align-items:flex-start;gap:var(--space-3);padding:var(--space-3);border:1px solid var(--file-upload-file-border, var(--gray-200));border-radius:var(--radius-2);background:var(--file-upload-file-bg, var(--white));transition:all .2s ease}.ds-file-upload__file:hover{background:var(--file-upload-file-bg-hover, var(--gray-50))}.ds-file-upload__preview{flex-shrink:0;width:60px;height:60px;border-radius:var(--radius-1);overflow:hidden;border:1px solid var(--gray-200)}.ds-file-upload__preview img{width:100%;height:100%;object-fit:cover}.ds-file-upload__file-icon{flex-shrink:0;width:60px;height:60px;display:flex;align-items:center;justify-content:center;background:var(--gray-50);border-radius:var(--radius-1);color:var(--gray-400);font-size:var(--font-size-5)}.ds-file-upload__file-info{flex:1;min-width:0}.ds-file-upload__file-name{font-size:var(--font-size-sm, var(--font-size-2));font-weight:500;color:var(--gray-900);margin-bottom:var(--space-1);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ds-file-upload__file-size{font-size:var(--font-size-xs, var(--font-size-1));color:var(--gray-500);margin-bottom:var(--space-2)}.ds-file-upload__file-error{margin-top:var(--space-2);padding:var(--space-1) var(--space-2);background:var(--error-bg, var(--red-50));color:var(--error);border-radius:var(--radius-1);font-size:var(--font-size-xs, var(--font-size-1))}.ds-file-upload__remove{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:32px;height:32px;border:none;background:transparent;color:var(--gray-400);border-radius:var(--radius-1);cursor:pointer;transition:all .2s ease}.ds-file-upload__remove:hover:not(:disabled){background:var(--gray-100);color:var(--error)}.ds-file-upload__remove:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.ds-file-upload__remove:disabled{opacity:.5;cursor:not-allowed}.ds-file-upload--sm .ds-file-upload__dropzone{min-height:150px;padding:var(--space-6)}.ds-file-upload--sm .ds-file-upload__label{font-size:var(--font-size-sm, var(--font-size-2))}.ds-file-upload--sm .ds-file-upload__preview,.ds-file-upload--sm .ds-file-upload__file-icon{width:48px;height:48px}.ds-file-upload--lg .ds-file-upload__dropzone{min-height:250px;padding:var(--space-10)}.ds-file-upload--lg .ds-file-upload__label{font-size:var(--font-size-lg, var(--font-size-4))}.ds-file-upload--lg .ds-file-upload__preview,.ds-file-upload--lg .ds-file-upload__file-icon{width:80px;height:80px}.ds-file-upload--disabled{opacity:.6;cursor:not-allowed}.ds-file-upload--disabled .ds-file-upload__dropzone{cursor:not-allowed;pointer-events:none}.ds-file-upload--error .ds-file-upload__dropzone{border-color:var(--error)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"], outputs: ["iconChange", "titleChange", "animationChange", "maskChange", "flipChange", "sizeChange", "pullChange", "borderChange", "inverseChange", "symbolChange", "rotateChange", "fixedWidthChange", "transformChange", "a11yRoleChange"] }, { kind: "component", type: DsProgressBar, selector: "ds-progress-bar", inputs: ["value", "variant", "size", "mode", "showLabel", "ariaLabel"] }] });
|
|
8547
|
+
}
|
|
8548
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DsFileUpload, decorators: [{
|
|
8549
|
+
type: Component,
|
|
8550
|
+
args: [{ selector: 'ds-file-upload', imports: [CommonModule, FaIconComponent, DsProgressBar], providers: [
|
|
8551
|
+
{
|
|
8552
|
+
provide: NG_VALUE_ACCESSOR,
|
|
8553
|
+
useExisting: forwardRef(() => DsFileUpload),
|
|
8554
|
+
multi: true,
|
|
8555
|
+
},
|
|
8556
|
+
], template: "<div\n [ngClass]=\"containerClasses()\"\n (dragenter)=\"onDragEnter($event)\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n>\n <!-- Zone de drop -->\n <div\n class=\"ds-file-upload__dropzone\"\n [class.ds-file-upload__dropzone--active]=\"isDragging()\"\n (click)=\"openFileSelector()\"\n [attr.tabindex]=\"disabled() ? null : 0\"\n [attr.aria-label]=\"label()\"\n role=\"button\"\n >\n <input\n #fileInput\n type=\"file\"\n class=\"ds-file-upload__input\"\n [accept]=\"accept()\"\n [multiple]=\"multiple()\"\n [disabled]=\"disabled() || isMaxFilesReached()\"\n (change)=\"onFileSelect($event)\"\n aria-hidden=\"true\"\n tabindex=\"-1\"\n />\n\n <!-- Ic\u00F4ne et texte -->\n <div class=\"ds-file-upload__icon\">\n <fa-icon [icon]=\"faCloudArrowUp\" size=\"2x\"></fa-icon>\n </div>\n <div class=\"ds-file-upload__text\">\n <span class=\"ds-file-upload__label\">{{ label() }}</span>\n @if (!disabled() && !isMaxFilesReached()) {\n <span class=\"ds-file-upload__help\">{{ dragHelpText() }}</span>\n }\n @if (isMaxFilesReached()) {\n <span class=\"ds-file-upload__limit\">Limite atteinte ({{ maxFiles() }} fichier{{ maxFiles() > 1 ? 's' : '' }})</span>\n }\n </div>\n\n <!-- Message d'erreur global -->\n @if (errorMessage()) {\n <div class=\"ds-file-upload__error\" role=\"alert\">\n {{ errorMessage() }}\n </div>\n }\n\n <!-- Indications -->\n @if (!errorMessage() && accept() !== '*') {\n <div class=\"ds-file-upload__hint\">\n Types accept\u00E9s : {{ accept() }}\n </div>\n }\n @if (!errorMessage() && maxFileSize()) {\n <div class=\"ds-file-upload__hint\">\n Taille max : {{ formatFileSize(maxFileSize()) }}\n </div>\n }\n </div>\n\n <!-- Liste des fichiers -->\n @if (fileCount() > 0) {\n <div class=\"ds-file-upload__files\">\n @for (uploadFile of files(); track uploadFile.file.name) {\n <div class=\"ds-file-upload__file\">\n <!-- Preview image -->\n @if (showPreview() && uploadFile.preview) {\n <div class=\"ds-file-upload__preview\">\n <img [src]=\"uploadFile.preview\" [alt]=\"uploadFile.file.name\" />\n </div>\n } @else {\n <div class=\"ds-file-upload__file-icon\">\n <fa-icon [icon]=\"getFileIcon(uploadFile.file)\"></fa-icon>\n </div>\n }\n\n <!-- Infos fichier -->\n <div class=\"ds-file-upload__file-info\">\n <div class=\"ds-file-upload__file-name\" [title]=\"uploadFile.file.name\">\n {{ uploadFile.file.name }}\n </div>\n <div class=\"ds-file-upload__file-size\">\n {{ formatFileSize(uploadFile.file.size) }}\n </div>\n\n <!-- Barre de progression -->\n @if (uploadFile.progress < 100) {\n <ds-progress-bar\n [value]=\"uploadFile.progress\"\n size=\"sm\"\n variant=\"default\"\n [showLabel]=\"true\"\n ></ds-progress-bar>\n }\n\n <!-- Message d'erreur fichier -->\n @if (uploadFile.error) {\n <div class=\"ds-file-upload__file-error\" role=\"alert\">\n {{ uploadFile.error }}\n </div>\n }\n </div>\n\n <!-- Bouton supprimer -->\n <button\n type=\"button\"\n class=\"ds-file-upload__remove\"\n (click)=\"removeFile(uploadFile)\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"'Supprimer ' + uploadFile.file.name\"\n >\n <fa-icon [icon]=\"faXmark\"></fa-icon>\n </button>\n </div>\n }\n </div>\n }\n</div>\n", styles: [".ds-file-upload{display:block;font-family:var(--font-family-base)}.ds-file-upload__dropzone{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:var(--space-8);border:2px dashed var(--file-upload-border, var(--gray-300));border-radius:var(--file-upload-radius, var(--radius-2));background:var(--file-upload-bg, var(--white));cursor:pointer;transition:all .2s ease;position:relative;min-height:200px}.ds-file-upload__dropzone:hover:not(.ds-file-upload--disabled .ds-file-upload__dropzone){border-color:var(--file-upload-border-hover, var(--color-primary));background:var(--file-upload-bg-hover, var(--gray-50))}.ds-file-upload__dropzone:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.ds-file-upload__dropzone--active{border-color:var(--file-upload-border-active, var(--color-primary));background:var(--file-upload-bg-active, var(--blue-50))}.ds-file-upload__input{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.ds-file-upload__icon{color:var(--file-upload-icon-color, var(--gray-400));margin-bottom:var(--space-3);transition:color .2s ease}.ds-file-upload__dropzone:hover .ds-file-upload__icon{color:var(--file-upload-icon-color-hover, var(--color-primary))}.ds-file-upload__dropzone--active .ds-file-upload__icon{color:var(--file-upload-icon-color-active, var(--color-primary));transform:scale(1.1)}.ds-file-upload__text{text-align:center;color:var(--file-upload-text-color, var(--gray-700))}.ds-file-upload__label{display:block;font-size:var(--font-size-base, var(--font-size-3));font-weight:500;margin-bottom:var(--space-1);color:var(--file-upload-label-color, var(--gray-900))}.ds-file-upload__help{display:block;font-size:var(--font-size-sm, var(--font-size-2));color:var(--file-upload-help-color, var(--gray-500))}.ds-file-upload__limit{display:block;font-size:var(--font-size-sm, var(--font-size-2));color:var(--warning);font-weight:500}.ds-file-upload__error{margin-top:var(--space-2);padding:var(--space-2) var(--space-3);background:var(--error-bg, var(--red-50));color:var(--error);border-radius:var(--radius-1);font-size:var(--font-size-sm, var(--font-size-2));text-align:center}.ds-file-upload__hint{margin-top:var(--space-1);font-size:var(--font-size-xs, var(--font-size-1));color:var(--file-upload-hint-color, var(--gray-500));text-align:center}.ds-file-upload__files{margin-top:var(--space-4);display:flex;flex-direction:column;gap:var(--space-3)}.ds-file-upload__file{display:flex;align-items:flex-start;gap:var(--space-3);padding:var(--space-3);border:1px solid var(--file-upload-file-border, var(--gray-200));border-radius:var(--radius-2);background:var(--file-upload-file-bg, var(--white));transition:all .2s ease}.ds-file-upload__file:hover{background:var(--file-upload-file-bg-hover, var(--gray-50))}.ds-file-upload__preview{flex-shrink:0;width:60px;height:60px;border-radius:var(--radius-1);overflow:hidden;border:1px solid var(--gray-200)}.ds-file-upload__preview img{width:100%;height:100%;object-fit:cover}.ds-file-upload__file-icon{flex-shrink:0;width:60px;height:60px;display:flex;align-items:center;justify-content:center;background:var(--gray-50);border-radius:var(--radius-1);color:var(--gray-400);font-size:var(--font-size-5)}.ds-file-upload__file-info{flex:1;min-width:0}.ds-file-upload__file-name{font-size:var(--font-size-sm, var(--font-size-2));font-weight:500;color:var(--gray-900);margin-bottom:var(--space-1);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ds-file-upload__file-size{font-size:var(--font-size-xs, var(--font-size-1));color:var(--gray-500);margin-bottom:var(--space-2)}.ds-file-upload__file-error{margin-top:var(--space-2);padding:var(--space-1) var(--space-2);background:var(--error-bg, var(--red-50));color:var(--error);border-radius:var(--radius-1);font-size:var(--font-size-xs, var(--font-size-1))}.ds-file-upload__remove{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:32px;height:32px;border:none;background:transparent;color:var(--gray-400);border-radius:var(--radius-1);cursor:pointer;transition:all .2s ease}.ds-file-upload__remove:hover:not(:disabled){background:var(--gray-100);color:var(--error)}.ds-file-upload__remove:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.ds-file-upload__remove:disabled{opacity:.5;cursor:not-allowed}.ds-file-upload--sm .ds-file-upload__dropzone{min-height:150px;padding:var(--space-6)}.ds-file-upload--sm .ds-file-upload__label{font-size:var(--font-size-sm, var(--font-size-2))}.ds-file-upload--sm .ds-file-upload__preview,.ds-file-upload--sm .ds-file-upload__file-icon{width:48px;height:48px}.ds-file-upload--lg .ds-file-upload__dropzone{min-height:250px;padding:var(--space-10)}.ds-file-upload--lg .ds-file-upload__label{font-size:var(--font-size-lg, var(--font-size-4))}.ds-file-upload--lg .ds-file-upload__preview,.ds-file-upload--lg .ds-file-upload__file-icon{width:80px;height:80px}.ds-file-upload--disabled{opacity:.6;cursor:not-allowed}.ds-file-upload--disabled .ds-file-upload__dropzone{cursor:not-allowed;pointer-events:none}.ds-file-upload--error .ds-file-upload__dropzone{border-color:var(--error)}\n"] }]
|
|
8557
|
+
}], propDecorators: { accept: [{ type: i0.Input, args: [{ isSignal: true, alias: "accept", required: false }] }], maxFileSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxFileSize", required: false }] }], maxFiles: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxFiles", required: false }] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], showPreview: [{ type: i0.Input, args: [{ isSignal: true, alias: "showPreview", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], dragHelpText: [{ type: i0.Input, args: [{ isSignal: true, alias: "dragHelpText", required: false }] }], filesChange: [{ type: i0.Output, args: ["filesChange"] }], fileRemoved: [{ type: i0.Output, args: ["fileRemoved"] }], uploadProgress: [{ type: i0.Output, args: ["uploadProgress"] }], fileInput: [{ type: i0.ViewChild, args: ['fileInput', { isSignal: true }] }] } });
|
|
8558
|
+
|
|
7538
8559
|
/*
|
|
7539
8560
|
* Components barrel export
|
|
7540
8561
|
*/
|
|
@@ -7738,7 +8759,7 @@ class IconRegistryService {
|
|
|
7738
8759
|
getIconGroups() {
|
|
7739
8760
|
return Array.from(this.iconGroups.keys());
|
|
7740
8761
|
}
|
|
7741
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: IconRegistryService, deps: [{ token:
|
|
8762
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: IconRegistryService, deps: [{ token: i1$1.FaIconLibrary }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
7742
8763
|
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: IconRegistryService, providedIn: 'root' });
|
|
7743
8764
|
}
|
|
7744
8765
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: IconRegistryService, decorators: [{
|
|
@@ -7746,7 +8767,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
7746
8767
|
args: [{
|
|
7747
8768
|
providedIn: 'root',
|
|
7748
8769
|
}]
|
|
7749
|
-
}], ctorParameters: () => [{ type:
|
|
8770
|
+
}], ctorParameters: () => [{ type: i1$1.FaIconLibrary }] });
|
|
7750
8771
|
|
|
7751
8772
|
/**
|
|
7752
8773
|
* Labels par défaut en français.
|
|
@@ -8106,5 +9127,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
8106
9127
|
* Generated bundle index. Do not edit.
|
|
8107
9128
|
*/
|
|
8108
9129
|
|
|
8109
|
-
export { AUTOCOMPLETE_POSITIONS, BUTTON_APPEARANCE_OPTIONS, BUTTON_SIZE_OPTIONS, BUTTON_VARIANT_OPTIONS, DROPDOWN_POSITIONS, DsAccordion, DsAlert, DsAvatar, DsBadge, DsBreadcrumb, DsButton, DsCard, DsCheckbox, DsCombobox, DsContainer, DsDatePicker, DsDivider, DsDropdown, DsI18nService, DsInputField, DsInputTextarea, DsMenu, DsModalComponent, DsPagination, DsPopover, DsPopoverComponent, DsProgressBar, DsRadioGroup, DsSearchInput, DsSelect, DsSkeleton, DsStepper, DsTable, DsTabs, DsToastComponent, DsToastContainerComponent, DsToastService, DsToggle, DsTooltip, DsTooltipComponent, IconRegistryService, POPOVER_POSITIONS, PrimitiveBadge, PrimitiveButton, PrimitiveCheckbox, PrimitiveInput, PrimitiveRadio, PrimitiveTextarea, PrimitiveToggle, TOOLTIP_POSITIONS, buildButtonArgTypes, buildButtonArgs, createSizeRender, createVariantRender };
|
|
9130
|
+
export { AUTOCOMPLETE_POSITIONS, BUTTON_APPEARANCE_OPTIONS, BUTTON_SIZE_OPTIONS, BUTTON_VARIANT_OPTIONS, DROPDOWN_POSITIONS, DsAccordion, DsAlert, DsAvatar, DsBadge, DsBreadcrumb, DsButton, DsCard, DsCheckbox, DsChip, DsCombobox, DsContainer, DsDatePicker, DsDivider, DsDropdown, DsFileUpload, DsI18nService, DsInputField, DsInputTextarea, DsMenu, DsModalComponent, DsPagination, DsPopover, DsPopoverComponent, DsProgressBar, DsRadioGroup, DsSearchInput, DsSelect, DsSkeleton, DsSlider, DsStepper, DsTable, DsTabs, DsToastComponent, DsToastContainerComponent, DsToastService, DsToggle, DsTooltip, DsTooltipComponent, IconRegistryService, POPOVER_POSITIONS, PrimitiveBadge, PrimitiveButton, PrimitiveCheckbox, PrimitiveInput, PrimitiveRadio, PrimitiveTextarea, PrimitiveToggle, TOOLTIP_POSITIONS, buildButtonArgTypes, buildButtonArgs, createSizeRender, createVariantRender };
|
|
8110
9131
|
//# sourceMappingURL=kksdev-ds-angular.mjs.map
|