@forgeroute/ui 0.4.8 → 0.4.10
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/forgeroute-ui-messaging.mjs +23 -0
- package/fesm2022/forgeroute-ui-messaging.mjs.map +1 -1
- package/fesm2022/forgeroute-ui-stripe.mjs +8 -0
- package/fesm2022/forgeroute-ui-stripe.mjs.map +1 -1
- package/fesm2022/forgeroute-ui.mjs +2934 -61
- package/fesm2022/forgeroute-ui.mjs.map +1 -1
- package/package.json +1 -1
- package/types/forgeroute-ui.d.ts +1010 -7
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from "@angular/core";
|
|
2
|
-
import { ApplicationRef, ChangeDetectionStrategy, ChangeDetectorRef, Component, DestroyRef, Directive, ElementRef, EnvironmentInjector, HostBinding, HostListener, Injectable, InjectionToken, Injector, Input, PLATFORM_ID, Renderer2, TemplateRef, afterNextRender, computed, contentChild, contentChildren, createComponent, effect, forwardRef, inject, input, isDevMode, linkedSignal, makeEnvironmentProviders, model, output, provideEnvironmentInitializer, signal, untracked, viewChild } from "@angular/core";
|
|
2
|
+
import { ApplicationRef, ChangeDetectionStrategy, ChangeDetectorRef, Component, DestroyRef, Directive, ElementRef, EnvironmentInjector, HostBinding, HostListener, Injectable, InjectionToken, Injector, Input, NgZone, PLATFORM_ID, Renderer2, TemplateRef, afterNextRender, computed, contentChild, contentChildren, createComponent, effect, forwardRef, inject, input, isDevMode, linkedSignal, makeEnvironmentProviders, model, output, provideEnvironmentInitializer, signal, untracked, viewChild } from "@angular/core";
|
|
3
3
|
import { HttpClient, HttpErrorResponse, HttpParams } from "@angular/common/http";
|
|
4
4
|
import { takeUntilDestroyed, toObservable } from "@angular/core/rxjs-interop";
|
|
5
5
|
import { catchError, debounceTime, distinctUntilChanged, skip, switchMap } from "rxjs/operators";
|
|
@@ -997,7 +997,12 @@ var ColumnFilterComponent = class ColumnFilterComponent {
|
|
|
997
997
|
const reposition = () => this._reposition();
|
|
998
998
|
window.addEventListener("resize", reposition);
|
|
999
999
|
document.addEventListener("scroll", reposition, true);
|
|
1000
|
+
const onKeydown = (event) => {
|
|
1001
|
+
if (event.key === "Escape") this.onEscape(event);
|
|
1002
|
+
};
|
|
1003
|
+
document.addEventListener("keydown", onKeydown, true);
|
|
1000
1004
|
onCleanup(() => {
|
|
1005
|
+
document.removeEventListener("keydown", onKeydown, true);
|
|
1001
1006
|
window.removeEventListener("resize", reposition);
|
|
1002
1007
|
document.removeEventListener("scroll", reposition, true);
|
|
1003
1008
|
});
|
|
@@ -1036,11 +1041,12 @@ var ColumnFilterComponent = class ColumnFilterComponent {
|
|
|
1036
1041
|
onDocumentClick(_event) {
|
|
1037
1042
|
if (this.open()) this.open.set(false);
|
|
1038
1043
|
}
|
|
1039
|
-
onEscape() {
|
|
1040
|
-
if (this.open())
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
+
onEscape(event) {
|
|
1045
|
+
if (!this.open()) return;
|
|
1046
|
+
event?.stopPropagation();
|
|
1047
|
+
event?.preventDefault();
|
|
1048
|
+
this.open.set(false);
|
|
1049
|
+
this._trigger()?.focus();
|
|
1044
1050
|
}
|
|
1045
1051
|
onArrow(event, dir) {
|
|
1046
1052
|
if (!this.open()) return;
|
|
@@ -1126,7 +1132,6 @@ var ColumnFilterComponent = class ColumnFilterComponent {
|
|
|
1126
1132
|
outputs: { filterChange: "filterChange" },
|
|
1127
1133
|
host: { listeners: {
|
|
1128
1134
|
"document:click": "onDocumentClick($event)",
|
|
1129
|
-
"document:keydown.escape": "onEscape()",
|
|
1130
1135
|
"keydown.arrowdown": "onArrow($event, 1)",
|
|
1131
1136
|
"keydown.arrowup": "onArrow($event, -1)"
|
|
1132
1137
|
} },
|
|
@@ -1218,7 +1223,6 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
1218
1223
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
1219
1224
|
host: {
|
|
1220
1225
|
"(document:click)": "onDocumentClick($event)",
|
|
1221
|
-
"(document:keydown.escape)": "onEscape()",
|
|
1222
1226
|
"(keydown.arrowdown)": "onArrow($event, 1)",
|
|
1223
1227
|
"(keydown.arrowup)": "onArrow($event, -1)"
|
|
1224
1228
|
},
|
|
@@ -1643,6 +1647,10 @@ var MoreMenuComponent = class MoreMenuComponent {
|
|
|
1643
1647
|
if (!this.open()) return;
|
|
1644
1648
|
const onPointerDown = (event) => this.onDocumentPointerDown(event);
|
|
1645
1649
|
document.addEventListener("pointerdown", onPointerDown, true);
|
|
1650
|
+
const onKeydown = (event) => {
|
|
1651
|
+
if (event.key === "Escape") this.onEscape(event);
|
|
1652
|
+
};
|
|
1653
|
+
document.addEventListener("keydown", onKeydown, true);
|
|
1646
1654
|
const fixed = this.placement() !== null;
|
|
1647
1655
|
const onScroll = (event) => {
|
|
1648
1656
|
if (!(event.target instanceof Node && this._dropdownEl()?.contains(event.target))) this.open.set(false);
|
|
@@ -1656,6 +1664,7 @@ var MoreMenuComponent = class MoreMenuComponent {
|
|
|
1656
1664
|
}
|
|
1657
1665
|
onCleanup(() => {
|
|
1658
1666
|
document.removeEventListener("pointerdown", onPointerDown, true);
|
|
1667
|
+
document.removeEventListener("keydown", onKeydown, true);
|
|
1659
1668
|
if (fixed) {
|
|
1660
1669
|
document.removeEventListener("scroll", onScroll, true);
|
|
1661
1670
|
window.removeEventListener("resize", onResize);
|
|
@@ -1774,11 +1783,12 @@ var MoreMenuComponent = class MoreMenuComponent {
|
|
|
1774
1783
|
if (target instanceof Node && this._el.nativeElement.contains(target)) return;
|
|
1775
1784
|
this.open.set(false);
|
|
1776
1785
|
}
|
|
1777
|
-
onEscape() {
|
|
1778
|
-
if (this.open())
|
|
1779
|
-
|
|
1780
|
-
|
|
1781
|
-
|
|
1786
|
+
onEscape(event) {
|
|
1787
|
+
if (!this.open()) return;
|
|
1788
|
+
event?.stopPropagation();
|
|
1789
|
+
event?.preventDefault();
|
|
1790
|
+
this.open.set(false);
|
|
1791
|
+
this._trigger()?.focus();
|
|
1782
1792
|
}
|
|
1783
1793
|
onArrow(event, dir) {
|
|
1784
1794
|
if (!this.open()) return;
|
|
@@ -1862,7 +1872,6 @@ var MoreMenuComponent = class MoreMenuComponent {
|
|
|
1862
1872
|
outputs: { actionClick: "actionClick" },
|
|
1863
1873
|
host: { listeners: {
|
|
1864
1874
|
"document:click": "onDocumentClick()",
|
|
1865
|
-
"document:keydown.escape": "onEscape()",
|
|
1866
1875
|
"keydown.arrowdown": "onArrow($event, 1)",
|
|
1867
1876
|
"keydown.arrowup": "onArrow($event, -1)"
|
|
1868
1877
|
} },
|
|
@@ -1902,7 +1911,7 @@ var MoreMenuComponent = class MoreMenuComponent {
|
|
|
1902
1911
|
</div>
|
|
1903
1912
|
`,
|
|
1904
1913
|
isInline: true,
|
|
1905
|
-
styles: [":host{display:inline-block;position:relative}.mm-wrapper{position:relative}.mm-trigger{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:8px;border:none;background:transparent;color:#
|
|
1914
|
+
styles: [":host{display:inline-block;position:relative}.mm-wrapper{position:relative}.mm-trigger{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:8px;border:none;background:transparent;color:#64748b;cursor:pointer;transition:background .1s,color .1s}.mm-trigger:hover{background:#f1f5f9;color:#334155}.mm-trigger:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.mm-dropdown{position:absolute;right:0;top:calc(100% + 4px);z-index:200;border:1px solid #e2e8f0;border-radius:8px;box-shadow:0 4px 16px #0000001a;min-width:160px;overflow-x:hidden;overflow-y:auto;padding:4px;max-width:calc(100vw - 16px);overscroll-behavior:contain;background:linear-gradient(#fff 30%,#fff0) center top / 100% 16px no-repeat local,linear-gradient(#fff0,#fff 70%) center bottom / 100% 16px no-repeat local,radial-gradient(farthest-side at 50% 0,#0f172a38,#0f172a00) center top / 100% 8px no-repeat scroll,radial-gradient(farthest-side at 50% 100%,#0f172a38,#0f172a00) center bottom / 100% 8px no-repeat scroll,#fff}.mm-dropdown.mm-up{top:auto;bottom:calc(100% + 4px)}.mm-dropdown.mm-fixed{position:fixed;left:auto}.mm-item{display:flex;align-items:center;gap:10px;width:100%;padding:10px 12px;background:none;border:none;cursor:pointer;font-size:.875rem;color:#334155;font-family:inherit;text-align:left;border-radius:5px;transition:background .1s;min-height:40px}.mm-item:hover:not(:disabled){background:#f8fafc}.mm-item:disabled{opacity:.4;cursor:default}.mm-item.mm-danger{color:#dc2626}.mm-item.mm-danger:hover:not(:disabled){background:#fef2f2}.mm-item:focus-visible{outline:2px solid #60a5fa;outline-offset:-2px}.mm-icon{flex-shrink:0}@media(max-width:1024px){.mm-trigger{width:36px;height:36px}.mm-item{padding:11px 14px;min-height:40px}}@media(pointer:coarse){.mm-trigger{width:44px;height:44px}}@media(max-width:640px){.mm-trigger{width:44px;height:44px}.mm-item{padding:12px 14px;font-size:.9375rem;min-height:44px}.mm-dropdown{max-height:60vh;overflow-y:auto}}\n"],
|
|
1906
1915
|
changeDetection: i0.ChangeDetectionStrategy.OnPush
|
|
1907
1916
|
});
|
|
1908
1917
|
}
|
|
@@ -1920,7 +1929,6 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
1920
1929
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
1921
1930
|
host: {
|
|
1922
1931
|
"(document:click)": "onDocumentClick()",
|
|
1923
|
-
"(document:keydown.escape)": "onEscape()",
|
|
1924
1932
|
"(keydown.arrowdown)": "onArrow($event, 1)",
|
|
1925
1933
|
"(keydown.arrowup)": "onArrow($event, -1)"
|
|
1926
1934
|
},
|
|
@@ -1958,7 +1966,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
1958
1966
|
}
|
|
1959
1967
|
</div>
|
|
1960
1968
|
`,
|
|
1961
|
-
styles: [":host{display:inline-block;position:relative}.mm-wrapper{position:relative}.mm-trigger{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:8px;border:none;background:transparent;color:#
|
|
1969
|
+
styles: [":host{display:inline-block;position:relative}.mm-wrapper{position:relative}.mm-trigger{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:8px;border:none;background:transparent;color:#64748b;cursor:pointer;transition:background .1s,color .1s}.mm-trigger:hover{background:#f1f5f9;color:#334155}.mm-trigger:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.mm-dropdown{position:absolute;right:0;top:calc(100% + 4px);z-index:200;border:1px solid #e2e8f0;border-radius:8px;box-shadow:0 4px 16px #0000001a;min-width:160px;overflow-x:hidden;overflow-y:auto;padding:4px;max-width:calc(100vw - 16px);overscroll-behavior:contain;background:linear-gradient(#fff 30%,#fff0) center top / 100% 16px no-repeat local,linear-gradient(#fff0,#fff 70%) center bottom / 100% 16px no-repeat local,radial-gradient(farthest-side at 50% 0,#0f172a38,#0f172a00) center top / 100% 8px no-repeat scroll,radial-gradient(farthest-side at 50% 100%,#0f172a38,#0f172a00) center bottom / 100% 8px no-repeat scroll,#fff}.mm-dropdown.mm-up{top:auto;bottom:calc(100% + 4px)}.mm-dropdown.mm-fixed{position:fixed;left:auto}.mm-item{display:flex;align-items:center;gap:10px;width:100%;padding:10px 12px;background:none;border:none;cursor:pointer;font-size:.875rem;color:#334155;font-family:inherit;text-align:left;border-radius:5px;transition:background .1s;min-height:40px}.mm-item:hover:not(:disabled){background:#f8fafc}.mm-item:disabled{opacity:.4;cursor:default}.mm-item.mm-danger{color:#dc2626}.mm-item.mm-danger:hover:not(:disabled){background:#fef2f2}.mm-item:focus-visible{outline:2px solid #60a5fa;outline-offset:-2px}.mm-icon{flex-shrink:0}@media(max-width:1024px){.mm-trigger{width:36px;height:36px}.mm-item{padding:11px 14px;min-height:40px}}@media(pointer:coarse){.mm-trigger{width:44px;height:44px}}@media(max-width:640px){.mm-trigger{width:44px;height:44px}.mm-item{padding:12px 14px;font-size:.9375rem;min-height:44px}.mm-dropdown{max-height:60vh;overflow-y:auto}}\n"]
|
|
1962
1970
|
}]
|
|
1963
1971
|
}],
|
|
1964
1972
|
ctorParameters: () => [],
|
|
@@ -2553,6 +2561,7 @@ var CheckboxComponent = class CheckboxComponent {
|
|
|
2553
2561
|
this.label = input("", ...ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []);
|
|
2554
2562
|
this.ariaLabel = input("", ...ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []);
|
|
2555
2563
|
this.testId = input("", ...ngDevMode ? [{ debugName: "testId" }] : /* istanbul ignore next */ []);
|
|
2564
|
+
this.labelTestId = input("", ...ngDevMode ? [{ debugName: "labelTestId" }] : /* istanbul ignore next */ []);
|
|
2556
2565
|
this.headingLevel = input(null, ...ngDevMode ? [{ debugName: "headingLevel" }] : /* istanbul ignore next */ []);
|
|
2557
2566
|
this.indeterminate = input(false, ...ngDevMode ? [{ debugName: "indeterminate" }] : /* istanbul ignore next */ []);
|
|
2558
2567
|
this.checked = model(false, ...ngDevMode ? [{ debugName: "checked" }] : /* istanbul ignore next */ []);
|
|
@@ -2716,6 +2725,13 @@ var CheckboxComponent = class CheckboxComponent {
|
|
|
2716
2725
|
isRequired: false,
|
|
2717
2726
|
transformFunction: null
|
|
2718
2727
|
},
|
|
2728
|
+
labelTestId: {
|
|
2729
|
+
classPropertyName: "labelTestId",
|
|
2730
|
+
publicName: "labelTestId",
|
|
2731
|
+
isSignal: true,
|
|
2732
|
+
isRequired: false,
|
|
2733
|
+
transformFunction: null
|
|
2734
|
+
},
|
|
2719
2735
|
headingLevel: {
|
|
2720
2736
|
classPropertyName: "headingLevel",
|
|
2721
2737
|
publicName: "headingLevel",
|
|
@@ -2881,7 +2897,7 @@ var CheckboxComponent = class CheckboxComponent {
|
|
|
2881
2897
|
[attr.aria-describedby]="opt.description ? _descId + '-' + i : null"
|
|
2882
2898
|
(change)="onToggleOption(opt.value, $event)"
|
|
2883
2899
|
/>
|
|
2884
|
-
<span class="cb-label">{{ opt.label }}</span>
|
|
2900
|
+
<span class="cb-label" [attr.data-testid]="opt.labelTestId || null">{{ opt.label }}</span>
|
|
2885
2901
|
</label>
|
|
2886
2902
|
@if (opt.description) {
|
|
2887
2903
|
<p class="cb-desc" [id]="_descId + '-' + i">{{ opt.description }}</p>
|
|
@@ -2924,7 +2940,7 @@ var CheckboxComponent = class CheckboxComponent {
|
|
|
2924
2940
|
(change)="onToggle($event)"
|
|
2925
2941
|
/>
|
|
2926
2942
|
@if (label()) {
|
|
2927
|
-
<span class="cb-label" [attr.role]="headingLevel() ? 'heading' : null" [attr.aria-level]="headingLevel() || null">{{ label() }}</span>
|
|
2943
|
+
<span class="cb-label" [attr.data-testid]="labelTestId() || null" [attr.role]="headingLevel() ? 'heading' : null" [attr.aria-level]="headingLevel() || null">{{ label() }}</span>
|
|
2928
2944
|
}
|
|
2929
2945
|
<ng-content />
|
|
2930
2946
|
</label>
|
|
@@ -3021,7 +3037,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
3021
3037
|
[attr.aria-describedby]="opt.description ? _descId + '-' + i : null"
|
|
3022
3038
|
(change)="onToggleOption(opt.value, $event)"
|
|
3023
3039
|
/>
|
|
3024
|
-
<span class="cb-label">{{ opt.label }}</span>
|
|
3040
|
+
<span class="cb-label" [attr.data-testid]="opt.labelTestId || null">{{ opt.label }}</span>
|
|
3025
3041
|
</label>
|
|
3026
3042
|
@if (opt.description) {
|
|
3027
3043
|
<p class="cb-desc" [id]="_descId + '-' + i">{{ opt.description }}</p>
|
|
@@ -3064,7 +3080,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
3064
3080
|
(change)="onToggle($event)"
|
|
3065
3081
|
/>
|
|
3066
3082
|
@if (label()) {
|
|
3067
|
-
<span class="cb-label" [attr.role]="headingLevel() ? 'heading' : null" [attr.aria-level]="headingLevel() || null">{{ label() }}</span>
|
|
3083
|
+
<span class="cb-label" [attr.data-testid]="labelTestId() || null" [attr.role]="headingLevel() ? 'heading' : null" [attr.aria-level]="headingLevel() || null">{{ label() }}</span>
|
|
3068
3084
|
}
|
|
3069
3085
|
<ng-content />
|
|
3070
3086
|
</label>
|
|
@@ -3117,6 +3133,14 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
3117
3133
|
required: false
|
|
3118
3134
|
}]
|
|
3119
3135
|
}],
|
|
3136
|
+
labelTestId: [{
|
|
3137
|
+
type: i0.Input,
|
|
3138
|
+
args: [{
|
|
3139
|
+
isSignal: true,
|
|
3140
|
+
alias: "labelTestId",
|
|
3141
|
+
required: false
|
|
3142
|
+
}]
|
|
3143
|
+
}],
|
|
3120
3144
|
headingLevel: [{
|
|
3121
3145
|
type: i0.Input,
|
|
3122
3146
|
args: [{
|
|
@@ -3259,6 +3283,7 @@ var ButtonComponent = class ButtonComponent {
|
|
|
3259
3283
|
this.routerLink = input(null, ...ngDevMode ? [{ debugName: "routerLink" }] : /* istanbul ignore next */ []);
|
|
3260
3284
|
this.queryParams = input(null, ...ngDevMode ? [{ debugName: "queryParams" }] : /* istanbul ignore next */ []);
|
|
3261
3285
|
this.fragment = input(null, ...ngDevMode ? [{ debugName: "fragment" }] : /* istanbul ignore next */ []);
|
|
3286
|
+
this.state = input(null, ...ngDevMode ? [{ debugName: "state" }] : /* istanbul ignore next */ []);
|
|
3262
3287
|
this.href = input(null, ...ngDevMode ? [{ debugName: "href" }] : /* istanbul ignore next */ []);
|
|
3263
3288
|
this.target = input(null, ...ngDevMode ? [{ debugName: "target" }] : /* istanbul ignore next */ []);
|
|
3264
3289
|
this.rel = input(null, ...ngDevMode ? [{ debugName: "rel" }] : /* istanbul ignore next */ []);
|
|
@@ -3285,6 +3310,14 @@ var ButtonComponent = class ButtonComponent {
|
|
|
3285
3310
|
parts.add("noreferrer");
|
|
3286
3311
|
return [...parts].join(" ");
|
|
3287
3312
|
}, ...ngDevMode ? [{ debugName: "_rel" }] : /* istanbul ignore next */ []);
|
|
3313
|
+
this.shortLabel = input("", ...ngDevMode ? [{ debugName: "shortLabel" }] : /* istanbul ignore next */ []);
|
|
3314
|
+
this.shortBelow = input("md", ...ngDevMode ? [{ debugName: "shortBelow" }] : /* istanbul ignore next */ []);
|
|
3315
|
+
this._slClass = computed(() => {
|
|
3316
|
+
const below = this.shortBelow();
|
|
3317
|
+
if (typeof below === "number") return this._narrow() ? "btn-sl-num btn-sl-narrow" : "btn-sl-num";
|
|
3318
|
+
return "btn-sl-" + (below === "sm" || below === "lg" ? below : "md");
|
|
3319
|
+
}, ...ngDevMode ? [{ debugName: "_slClass" }] : /* istanbul ignore next */ []);
|
|
3320
|
+
this._narrow = signal(false, ...ngDevMode ? [{ debugName: "_narrow" }] : /* istanbul ignore next */ []);
|
|
3288
3321
|
this.color = input(void 0, ...ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []);
|
|
3289
3322
|
this.active = input(false, ...ngDevMode ? [{ debugName: "active" }] : /* istanbul ignore next */ []);
|
|
3290
3323
|
this.size = input("md", ...ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []);
|
|
@@ -3296,6 +3329,18 @@ var ButtonComponent = class ButtonComponent {
|
|
|
3296
3329
|
this.ariaExpanded = input(void 0, ...ngDevMode ? [{ debugName: "ariaExpanded" }] : /* istanbul ignore next */ []);
|
|
3297
3330
|
this.ariaPressed = input(void 0, ...ngDevMode ? [{ debugName: "ariaPressed" }] : /* istanbul ignore next */ []);
|
|
3298
3331
|
this.ariaDescribedBy = input(void 0, ...ngDevMode ? [{ debugName: "ariaDescribedBy" }] : /* istanbul ignore next */ []);
|
|
3332
|
+
effect((onCleanup) => {
|
|
3333
|
+
const below = this.shortBelow();
|
|
3334
|
+
if (!this.shortLabel() || typeof below !== "number" || !Number.isFinite(below) || typeof window === "undefined" || typeof window.matchMedia !== "function") {
|
|
3335
|
+
this._narrow.set(false);
|
|
3336
|
+
return;
|
|
3337
|
+
}
|
|
3338
|
+
const mq = window.matchMedia(`(max-width: ${below - .02}px)`);
|
|
3339
|
+
const update = () => this._narrow.set(mq.matches);
|
|
3340
|
+
update();
|
|
3341
|
+
mq.addEventListener("change", update);
|
|
3342
|
+
onCleanup(() => mq.removeEventListener("change", update));
|
|
3343
|
+
});
|
|
3299
3344
|
}
|
|
3300
3345
|
static {
|
|
3301
3346
|
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
@@ -3343,6 +3388,13 @@ var ButtonComponent = class ButtonComponent {
|
|
|
3343
3388
|
isRequired: false,
|
|
3344
3389
|
transformFunction: null
|
|
3345
3390
|
},
|
|
3391
|
+
state: {
|
|
3392
|
+
classPropertyName: "state",
|
|
3393
|
+
publicName: "state",
|
|
3394
|
+
isSignal: true,
|
|
3395
|
+
isRequired: false,
|
|
3396
|
+
transformFunction: null
|
|
3397
|
+
},
|
|
3346
3398
|
href: {
|
|
3347
3399
|
classPropertyName: "href",
|
|
3348
3400
|
publicName: "href",
|
|
@@ -3364,6 +3416,20 @@ var ButtonComponent = class ButtonComponent {
|
|
|
3364
3416
|
isRequired: false,
|
|
3365
3417
|
transformFunction: null
|
|
3366
3418
|
},
|
|
3419
|
+
shortLabel: {
|
|
3420
|
+
classPropertyName: "shortLabel",
|
|
3421
|
+
publicName: "shortLabel",
|
|
3422
|
+
isSignal: true,
|
|
3423
|
+
isRequired: false,
|
|
3424
|
+
transformFunction: null
|
|
3425
|
+
},
|
|
3426
|
+
shortBelow: {
|
|
3427
|
+
classPropertyName: "shortBelow",
|
|
3428
|
+
publicName: "shortBelow",
|
|
3429
|
+
isSignal: true,
|
|
3430
|
+
isRequired: false,
|
|
3431
|
+
transformFunction: null
|
|
3432
|
+
},
|
|
3367
3433
|
color: {
|
|
3368
3434
|
classPropertyName: "color",
|
|
3369
3435
|
publicName: "color",
|
|
@@ -3463,8 +3529,15 @@ var ButtonComponent = class ButtonComponent {
|
|
|
3463
3529
|
@if (loading()) {
|
|
3464
3530
|
<span class="spinner"></span>
|
|
3465
3531
|
}
|
|
3466
|
-
|
|
3532
|
+
@if (shortLabel()) {
|
|
3533
|
+
<!-- shortLabel: the projected (long) text stays in the DOM, visually hidden while the short one shows, so the accessible name is always the long text; the short text is aria-hidden (never read twice). -->
|
|
3534
|
+
<span [class]="'btn-sl-long ' + _slClass()"><ng-container [ngTemplateOutlet]="projected" /></span>
|
|
3535
|
+
<span [class]="'btn-sl-short ' + _slClass()" aria-hidden="true">{{ shortLabel() }}</span>
|
|
3536
|
+
} @else {
|
|
3537
|
+
<ng-container [ngTemplateOutlet]="projected" />
|
|
3538
|
+
}
|
|
3467
3539
|
</ng-template>
|
|
3540
|
+
<ng-template #projected><ng-content /></ng-template>
|
|
3468
3541
|
@if (routerLink() !== null) {
|
|
3469
3542
|
<!-- A real link (middle-click, open in new tab, screen readers say "link"): same look as the button of this variant, underlined. -->
|
|
3470
3543
|
@if (disabled() || loading()) {
|
|
@@ -3482,6 +3555,7 @@ var ButtonComponent = class ButtonComponent {
|
|
|
3482
3555
|
[routerLink]="routerLink()"
|
|
3483
3556
|
[queryParams]="queryParams()"
|
|
3484
3557
|
[fragment]="fragment() ?? undefined"
|
|
3558
|
+
[state]="state() ?? undefined"
|
|
3485
3559
|
[class]="'btn btn-anchor btn-' + variant() + ' btn-' + size()"
|
|
3486
3560
|
[class.btn-full]="fullWidth()"
|
|
3487
3561
|
[attr.aria-label]="ariaLabel()"
|
|
@@ -3530,7 +3604,7 @@ var ButtonComponent = class ButtonComponent {
|
|
|
3530
3604
|
}
|
|
3531
3605
|
`,
|
|
3532
3606
|
isInline: true,
|
|
3533
|
-
styles: [":host{display:inline-flex}:host(.ui-btn-block){display:flex;width:100%}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;border:none;border-radius:8px;font-weight:600;cursor:pointer;font-family:inherit;transition:all .15s ease;white-space:nowrap}.btn:disabled{opacity:.5;cursor:not-allowed}.btn:focus-visible{outline:2px solid var(--ui-focus, #3b82f6);outline-offset:2px}.btn-full{width:100%}.btn-primary{background:var(--ui-accent, #
|
|
3607
|
+
styles: [":host{display:inline-flex}:host(.ui-btn-block){display:flex;width:100%}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;border:none;border-radius:8px;font-weight:600;cursor:pointer;font-family:inherit;transition:all .15s ease;white-space:nowrap}.btn:disabled{opacity:.5;cursor:not-allowed}.btn:focus-visible{outline:2px solid var(--ui-focus, #3b82f6);outline-offset:2px}.btn-full{width:100%}.btn-primary{background:var(--ui-accent, #2563EB);color:var(--ui-on-accent, #fff);border:1px solid var(--ui-accent, #2563EB)}.btn-primary:hover:not(:disabled){background:var(--ui-accent-hover, #1D4ED8);border-color:var(--ui-accent-hover, #1D4ED8)}.btn-secondary{background:#fff;color:#334155;border:1px solid #e2e8f0}.btn-secondary:hover:not(:disabled){background:#f8fafc;border-color:#cbd5e1}.btn-ghost{background:transparent;color:#64748b;border:1px solid transparent}.btn-ghost:hover:not(:disabled){background:#f8fafc;color:#334155}.btn-ghost-start{display:flex;width:100%;justify-content:flex-start;text-align:start;white-space:normal;background:transparent;color:#334155;border:1px solid transparent}.btn-ghost-start:hover:not(:disabled){background:#f1f5f9;color:#1e293b}.btn-danger{background:#dc2626;color:#fff;border:1px solid #dc2626}.btn-danger:hover:not(:disabled){background:#b91c1c;border-color:#b91c1c}.btn-link{background:none;color:var(--ui-link, var(--ui-accent, #2563eb));border:none;padding:0;font-weight:500}.btn-link:hover:not(:disabled){color:var(--ui-link-hover, var(--ui-accent-hover, #1d4ed8))}.btn-link.btn-xs,.btn-link.btn-sm,.btn-link.btn-md,.btn-link.btn-lg{padding:0}.btn-anchor{text-decoration:none}.btn[aria-disabled=true]{opacity:.5;cursor:not-allowed;pointer-events:none}.btn-anchor.btn-link{text-decoration:underline;text-underline-offset:2px}.btn-warning{background:#f97316;color:#fff;border:1px solid #f97316}.btn-warning:hover:not(:disabled){background:#ea6c0a;border-color:#ea6c0a}.btn-tab{background:none;color:#64748b;border:none;border-bottom:2px solid transparent;border-radius:0;font-weight:600;font-size:.875rem;transition:all .15s}.btn-tab:hover:not(:disabled){background:none;color:#1e293b}.btn-tab.active{color:var(--ui-accent, #2563eb);border-bottom-color:var(--ui-accent, #2563eb)}.btn-tab.btn-xs,.btn-tab.btn-sm,.btn-tab.btn-md,.btn-tab.btn-lg{padding:10px 20px;border-radius:0}.btn-icon{width:28px;height:28px;padding:0;border-radius:6px;background:transparent;border:none;color:#64748b}.btn-icon:hover:not(:disabled){background:#f1f5f9;color:#334155}.btn-icon-danger{width:28px;height:28px;padding:0;border-radius:6px;background:transparent;border:none;color:#64748b}.btn-icon-danger:hover:not(:disabled){background:#fee2e2;color:#dc2626}.btn-xs{padding:3px 8px;font-size:.75rem;border-radius:5px;gap:4px}.btn-sm{padding:6px 12px;font-size:.8125rem;border-radius:6px}.btn-md{padding:10px 16px;font-size:.875rem}.btn-lg{padding:14px 20px;font-size:1rem}@media(pointer:coarse),(max-width:480px){.btn-xs,.btn-sm,.btn-md,.btn-lg,.btn-tab{min-height:44px}.btn-link.btn-xs,.btn-link.btn-sm,.btn-link.btn-md,.btn-link.btn-lg{min-height:0}.btn-icon,.btn-icon-danger{position:relative}.btn-icon:after,.btn-icon-danger:after{content:\"\";position:absolute;inset:-8px}}.btn-sl-short{display:none}@media(max-width:479.98px){.btn-sl-sm.btn-sl-long{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);clip-path:inset(50%);white-space:nowrap;border:0}.btn-sl-sm.btn-sl-short{display:inline}}@media(max-width:767.98px){.btn-sl-md.btn-sl-long{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);clip-path:inset(50%);white-space:nowrap;border:0}.btn-sl-md.btn-sl-short{display:inline}}@media(max-width:1023.98px){.btn-sl-lg.btn-sl-long{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);clip-path:inset(50%);white-space:nowrap;border:0}.btn-sl-lg.btn-sl-short{display:inline}}.btn-sl-long.btn-sl-narrow{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);clip-path:inset(50%);white-space:nowrap;border:0}.btn-sl-short.btn-sl-narrow{display:inline}.spinner{width:16px;height:16px;border:2px solid rgba(255,255,255,.3);border-top-color:currentColor;border-radius:50%;animation:spin .6s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}\n"],
|
|
3534
3608
|
dependencies: [{
|
|
3535
3609
|
kind: "directive",
|
|
3536
3610
|
type: NgTemplateOutlet,
|
|
@@ -3581,8 +3655,15 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
3581
3655
|
@if (loading()) {
|
|
3582
3656
|
<span class="spinner"></span>
|
|
3583
3657
|
}
|
|
3584
|
-
|
|
3658
|
+
@if (shortLabel()) {
|
|
3659
|
+
<!-- shortLabel: the projected (long) text stays in the DOM, visually hidden while the short one shows, so the accessible name is always the long text; the short text is aria-hidden (never read twice). -->
|
|
3660
|
+
<span [class]="'btn-sl-long ' + _slClass()"><ng-container [ngTemplateOutlet]="projected" /></span>
|
|
3661
|
+
<span [class]="'btn-sl-short ' + _slClass()" aria-hidden="true">{{ shortLabel() }}</span>
|
|
3662
|
+
} @else {
|
|
3663
|
+
<ng-container [ngTemplateOutlet]="projected" />
|
|
3664
|
+
}
|
|
3585
3665
|
</ng-template>
|
|
3666
|
+
<ng-template #projected><ng-content /></ng-template>
|
|
3586
3667
|
@if (routerLink() !== null) {
|
|
3587
3668
|
<!-- A real link (middle-click, open in new tab, screen readers say "link"): same look as the button of this variant, underlined. -->
|
|
3588
3669
|
@if (disabled() || loading()) {
|
|
@@ -3600,6 +3681,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
3600
3681
|
[routerLink]="routerLink()"
|
|
3601
3682
|
[queryParams]="queryParams()"
|
|
3602
3683
|
[fragment]="fragment() ?? undefined"
|
|
3684
|
+
[state]="state() ?? undefined"
|
|
3603
3685
|
[class]="'btn btn-anchor btn-' + variant() + ' btn-' + size()"
|
|
3604
3686
|
[class.btn-full]="fullWidth()"
|
|
3605
3687
|
[attr.aria-label]="ariaLabel()"
|
|
@@ -3647,9 +3729,10 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
3647
3729
|
><ng-container [ngTemplateOutlet]="content" /></button>
|
|
3648
3730
|
}
|
|
3649
3731
|
`,
|
|
3650
|
-
styles: [":host{display:inline-flex}:host(.ui-btn-block){display:flex;width:100%}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;border:none;border-radius:8px;font-weight:600;cursor:pointer;font-family:inherit;transition:all .15s ease;white-space:nowrap}.btn:disabled{opacity:.5;cursor:not-allowed}.btn:focus-visible{outline:2px solid var(--ui-focus, #3b82f6);outline-offset:2px}.btn-full{width:100%}.btn-primary{background:var(--ui-accent, #
|
|
3732
|
+
styles: [":host{display:inline-flex}:host(.ui-btn-block){display:flex;width:100%}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;border:none;border-radius:8px;font-weight:600;cursor:pointer;font-family:inherit;transition:all .15s ease;white-space:nowrap}.btn:disabled{opacity:.5;cursor:not-allowed}.btn:focus-visible{outline:2px solid var(--ui-focus, #3b82f6);outline-offset:2px}.btn-full{width:100%}.btn-primary{background:var(--ui-accent, #2563EB);color:var(--ui-on-accent, #fff);border:1px solid var(--ui-accent, #2563EB)}.btn-primary:hover:not(:disabled){background:var(--ui-accent-hover, #1D4ED8);border-color:var(--ui-accent-hover, #1D4ED8)}.btn-secondary{background:#fff;color:#334155;border:1px solid #e2e8f0}.btn-secondary:hover:not(:disabled){background:#f8fafc;border-color:#cbd5e1}.btn-ghost{background:transparent;color:#64748b;border:1px solid transparent}.btn-ghost:hover:not(:disabled){background:#f8fafc;color:#334155}.btn-ghost-start{display:flex;width:100%;justify-content:flex-start;text-align:start;white-space:normal;background:transparent;color:#334155;border:1px solid transparent}.btn-ghost-start:hover:not(:disabled){background:#f1f5f9;color:#1e293b}.btn-danger{background:#dc2626;color:#fff;border:1px solid #dc2626}.btn-danger:hover:not(:disabled){background:#b91c1c;border-color:#b91c1c}.btn-link{background:none;color:var(--ui-link, var(--ui-accent, #2563eb));border:none;padding:0;font-weight:500}.btn-link:hover:not(:disabled){color:var(--ui-link-hover, var(--ui-accent-hover, #1d4ed8))}.btn-link.btn-xs,.btn-link.btn-sm,.btn-link.btn-md,.btn-link.btn-lg{padding:0}.btn-anchor{text-decoration:none}.btn[aria-disabled=true]{opacity:.5;cursor:not-allowed;pointer-events:none}.btn-anchor.btn-link{text-decoration:underline;text-underline-offset:2px}.btn-warning{background:#f97316;color:#fff;border:1px solid #f97316}.btn-warning:hover:not(:disabled){background:#ea6c0a;border-color:#ea6c0a}.btn-tab{background:none;color:#64748b;border:none;border-bottom:2px solid transparent;border-radius:0;font-weight:600;font-size:.875rem;transition:all .15s}.btn-tab:hover:not(:disabled){background:none;color:#1e293b}.btn-tab.active{color:var(--ui-accent, #2563eb);border-bottom-color:var(--ui-accent, #2563eb)}.btn-tab.btn-xs,.btn-tab.btn-sm,.btn-tab.btn-md,.btn-tab.btn-lg{padding:10px 20px;border-radius:0}.btn-icon{width:28px;height:28px;padding:0;border-radius:6px;background:transparent;border:none;color:#64748b}.btn-icon:hover:not(:disabled){background:#f1f5f9;color:#334155}.btn-icon-danger{width:28px;height:28px;padding:0;border-radius:6px;background:transparent;border:none;color:#64748b}.btn-icon-danger:hover:not(:disabled){background:#fee2e2;color:#dc2626}.btn-xs{padding:3px 8px;font-size:.75rem;border-radius:5px;gap:4px}.btn-sm{padding:6px 12px;font-size:.8125rem;border-radius:6px}.btn-md{padding:10px 16px;font-size:.875rem}.btn-lg{padding:14px 20px;font-size:1rem}@media(pointer:coarse),(max-width:480px){.btn-xs,.btn-sm,.btn-md,.btn-lg,.btn-tab{min-height:44px}.btn-link.btn-xs,.btn-link.btn-sm,.btn-link.btn-md,.btn-link.btn-lg{min-height:0}.btn-icon,.btn-icon-danger{position:relative}.btn-icon:after,.btn-icon-danger:after{content:\"\";position:absolute;inset:-8px}}.btn-sl-short{display:none}@media(max-width:479.98px){.btn-sl-sm.btn-sl-long{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);clip-path:inset(50%);white-space:nowrap;border:0}.btn-sl-sm.btn-sl-short{display:inline}}@media(max-width:767.98px){.btn-sl-md.btn-sl-long{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);clip-path:inset(50%);white-space:nowrap;border:0}.btn-sl-md.btn-sl-short{display:inline}}@media(max-width:1023.98px){.btn-sl-lg.btn-sl-long{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);clip-path:inset(50%);white-space:nowrap;border:0}.btn-sl-lg.btn-sl-short{display:inline}}.btn-sl-long.btn-sl-narrow{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);clip-path:inset(50%);white-space:nowrap;border:0}.btn-sl-short.btn-sl-narrow{display:inline}.spinner{width:16px;height:16px;border:2px solid rgba(255,255,255,.3);border-top-color:currentColor;border-radius:50%;animation:spin .6s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}\n"]
|
|
3651
3733
|
}]
|
|
3652
3734
|
}],
|
|
3735
|
+
ctorParameters: () => [],
|
|
3653
3736
|
propDecorators: {
|
|
3654
3737
|
variant: [{
|
|
3655
3738
|
type: i0.Input,
|
|
@@ -3683,6 +3766,14 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
3683
3766
|
required: false
|
|
3684
3767
|
}]
|
|
3685
3768
|
}],
|
|
3769
|
+
state: [{
|
|
3770
|
+
type: i0.Input,
|
|
3771
|
+
args: [{
|
|
3772
|
+
isSignal: true,
|
|
3773
|
+
alias: "state",
|
|
3774
|
+
required: false
|
|
3775
|
+
}]
|
|
3776
|
+
}],
|
|
3686
3777
|
href: [{
|
|
3687
3778
|
type: i0.Input,
|
|
3688
3779
|
args: [{
|
|
@@ -3707,6 +3798,22 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
3707
3798
|
required: false
|
|
3708
3799
|
}]
|
|
3709
3800
|
}],
|
|
3801
|
+
shortLabel: [{
|
|
3802
|
+
type: i0.Input,
|
|
3803
|
+
args: [{
|
|
3804
|
+
isSignal: true,
|
|
3805
|
+
alias: "shortLabel",
|
|
3806
|
+
required: false
|
|
3807
|
+
}]
|
|
3808
|
+
}],
|
|
3809
|
+
shortBelow: [{
|
|
3810
|
+
type: i0.Input,
|
|
3811
|
+
args: [{
|
|
3812
|
+
isSignal: true,
|
|
3813
|
+
alias: "shortBelow",
|
|
3814
|
+
required: false
|
|
3815
|
+
}]
|
|
3816
|
+
}],
|
|
3710
3817
|
color: [{
|
|
3711
3818
|
type: i0.Input,
|
|
3712
3819
|
args: [{
|
|
@@ -3829,6 +3936,7 @@ var TextInputComponent = class TextInputComponent {
|
|
|
3829
3936
|
this.step = input(void 0, ...ngDevMode ? [{ debugName: "step" }] : /* istanbul ignore next */ []);
|
|
3830
3937
|
this.valueType = input("string", ...ngDevMode ? [{ debugName: "valueType" }] : /* istanbul ignore next */ []);
|
|
3831
3938
|
this.formatter = input(void 0, ...ngDevMode ? [{ debugName: "formatter" }] : /* istanbul ignore next */ []);
|
|
3939
|
+
this.integer = input(false, ...ngDevMode ? [{ debugName: "integer" }] : /* istanbul ignore next */ []);
|
|
3832
3940
|
this.showErrors = input(false, ...ngDevMode ? [{ debugName: "showErrors" }] : /* istanbul ignore next */ []);
|
|
3833
3941
|
this.valueChange = output();
|
|
3834
3942
|
this.focused = output();
|
|
@@ -3846,7 +3954,8 @@ var TextInputComponent = class TextInputComponent {
|
|
|
3846
3954
|
this._numeric = computed(() => this.valueType() === "number" && this.type() === "number", ...ngDevMode ? [{ debugName: "_numeric" }] : /* istanbul ignore next */ []);
|
|
3847
3955
|
this._stepAttr = computed(() => {
|
|
3848
3956
|
const step = this.step();
|
|
3849
|
-
|
|
3957
|
+
if (this.type() === "number" && typeof step === "number" && Number.isFinite(step) && step > 0) return String(step);
|
|
3958
|
+
return this.type() === "number" && this.integer() ? "1" : null;
|
|
3850
3959
|
}, ...ngDevMode ? [{ debugName: "_stepAttr" }] : /* istanbul ignore next */ []);
|
|
3851
3960
|
this._warned = false;
|
|
3852
3961
|
this._formatting = computed(() => this.phoneFormat() || this.type() === "tel", ...ngDevMode ? [{ debugName: "_formatting" }] : /* istanbul ignore next */ []);
|
|
@@ -3900,6 +4009,7 @@ var TextInputComponent = class TextInputComponent {
|
|
|
3900
4009
|
const input = event.target;
|
|
3901
4010
|
const raw = input.value;
|
|
3902
4011
|
let val = this._formatting() ? TextInputComponent._formatPhone(raw) : raw;
|
|
4012
|
+
if (this.integer()) val = val.replace(/[.eE].*$/, "");
|
|
3903
4013
|
const format = this.formatter();
|
|
3904
4014
|
if (format) val = format(val);
|
|
3905
4015
|
this._value.set(val);
|
|
@@ -3953,7 +4063,7 @@ var TextInputComponent = class TextInputComponent {
|
|
|
3953
4063
|
key: "number",
|
|
3954
4064
|
message: "Please enter a valid number."
|
|
3955
4065
|
};
|
|
3956
|
-
const min = this.min(), max = this.max(), decimals = this.maxDecimals();
|
|
4066
|
+
const min = this.min(), max = this.max(), decimals = this.maxDecimals() ?? (this.integer() ? 0 : void 0);
|
|
3957
4067
|
if (min != null && n < min) return {
|
|
3958
4068
|
key: "min",
|
|
3959
4069
|
message: `Must be at least ${min}`,
|
|
@@ -4142,6 +4252,13 @@ var TextInputComponent = class TextInputComponent {
|
|
|
4142
4252
|
isRequired: false,
|
|
4143
4253
|
transformFunction: null
|
|
4144
4254
|
},
|
|
4255
|
+
integer: {
|
|
4256
|
+
classPropertyName: "integer",
|
|
4257
|
+
publicName: "integer",
|
|
4258
|
+
isSignal: true,
|
|
4259
|
+
isRequired: false,
|
|
4260
|
+
transformFunction: null
|
|
4261
|
+
},
|
|
4145
4262
|
showErrors: {
|
|
4146
4263
|
classPropertyName: "showErrors",
|
|
4147
4264
|
publicName: "showErrors",
|
|
@@ -4195,7 +4312,7 @@ var TextInputComponent = class TextInputComponent {
|
|
|
4195
4312
|
[style.padding-left]="_prefixPadding()"
|
|
4196
4313
|
[id]="_inputId"
|
|
4197
4314
|
[type]="type()"
|
|
4198
|
-
[attr.inputmode]="inputmode() || (type() === 'tel' ? 'tel' : null)"
|
|
4315
|
+
[attr.inputmode]="inputmode() || (type() === 'tel' ? 'tel' : integer() ? 'numeric' : null)"
|
|
4199
4316
|
[placeholder]="placeholder()"
|
|
4200
4317
|
[value]="_value()"
|
|
4201
4318
|
[disabled]="disabled()"
|
|
@@ -4269,7 +4386,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
4269
4386
|
[style.padding-left]="_prefixPadding()"
|
|
4270
4387
|
[id]="_inputId"
|
|
4271
4388
|
[type]="type()"
|
|
4272
|
-
[attr.inputmode]="inputmode() || (type() === 'tel' ? 'tel' : null)"
|
|
4389
|
+
[attr.inputmode]="inputmode() || (type() === 'tel' ? 'tel' : integer() ? 'numeric' : null)"
|
|
4273
4390
|
[placeholder]="placeholder()"
|
|
4274
4391
|
[value]="_value()"
|
|
4275
4392
|
[disabled]="disabled()"
|
|
@@ -4453,6 +4570,14 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
4453
4570
|
required: false
|
|
4454
4571
|
}]
|
|
4455
4572
|
}],
|
|
4573
|
+
integer: [{
|
|
4574
|
+
type: i0.Input,
|
|
4575
|
+
args: [{
|
|
4576
|
+
isSignal: true,
|
|
4577
|
+
alias: "integer",
|
|
4578
|
+
required: false
|
|
4579
|
+
}]
|
|
4580
|
+
}],
|
|
4456
4581
|
showErrors: [{
|
|
4457
4582
|
type: i0.Input,
|
|
4458
4583
|
args: [{
|
|
@@ -4879,6 +5004,7 @@ var TableToolbarComponent = class TableToolbarComponent {
|
|
|
4879
5004
|
"label",
|
|
4880
5005
|
"ariaLabel",
|
|
4881
5006
|
"testId",
|
|
5007
|
+
"labelTestId",
|
|
4882
5008
|
"headingLevel",
|
|
4883
5009
|
"indeterminate",
|
|
4884
5010
|
"checked",
|
|
@@ -4910,9 +5036,12 @@ var TableToolbarComponent = class TableToolbarComponent {
|
|
|
4910
5036
|
"routerLink",
|
|
4911
5037
|
"queryParams",
|
|
4912
5038
|
"fragment",
|
|
5039
|
+
"state",
|
|
4913
5040
|
"href",
|
|
4914
5041
|
"target",
|
|
4915
5042
|
"rel",
|
|
5043
|
+
"shortLabel",
|
|
5044
|
+
"shortBelow",
|
|
4916
5045
|
"color",
|
|
4917
5046
|
"active",
|
|
4918
5047
|
"size",
|
|
@@ -4952,6 +5081,7 @@ var TableToolbarComponent = class TableToolbarComponent {
|
|
|
4952
5081
|
"step",
|
|
4953
5082
|
"valueType",
|
|
4954
5083
|
"formatter",
|
|
5084
|
+
"integer",
|
|
4955
5085
|
"showErrors",
|
|
4956
5086
|
"disabled"
|
|
4957
5087
|
],
|
|
@@ -7559,9 +7689,12 @@ var ImportExportComponent = class ImportExportComponent {
|
|
|
7559
7689
|
"routerLink",
|
|
7560
7690
|
"queryParams",
|
|
7561
7691
|
"fragment",
|
|
7692
|
+
"state",
|
|
7562
7693
|
"href",
|
|
7563
7694
|
"target",
|
|
7564
7695
|
"rel",
|
|
7696
|
+
"shortLabel",
|
|
7697
|
+
"shortBelow",
|
|
7565
7698
|
"color",
|
|
7566
7699
|
"active",
|
|
7567
7700
|
"size",
|
|
@@ -8056,9 +8189,12 @@ var ConfirmOutletComponent = class ConfirmOutletComponent {
|
|
|
8056
8189
|
"routerLink",
|
|
8057
8190
|
"queryParams",
|
|
8058
8191
|
"fragment",
|
|
8192
|
+
"state",
|
|
8059
8193
|
"href",
|
|
8060
8194
|
"target",
|
|
8061
8195
|
"rel",
|
|
8196
|
+
"shortLabel",
|
|
8197
|
+
"shortBelow",
|
|
8062
8198
|
"color",
|
|
8063
8199
|
"active",
|
|
8064
8200
|
"size",
|
|
@@ -8407,9 +8543,12 @@ var ErrorStateComponent = class ErrorStateComponent {
|
|
|
8407
8543
|
"routerLink",
|
|
8408
8544
|
"queryParams",
|
|
8409
8545
|
"fragment",
|
|
8546
|
+
"state",
|
|
8410
8547
|
"href",
|
|
8411
8548
|
"target",
|
|
8412
8549
|
"rel",
|
|
8550
|
+
"shortLabel",
|
|
8551
|
+
"shortBelow",
|
|
8413
8552
|
"color",
|
|
8414
8553
|
"active",
|
|
8415
8554
|
"size",
|
|
@@ -10747,9 +10886,12 @@ var DataTableComponent = class DataTableComponent {
|
|
|
10747
10886
|
"routerLink",
|
|
10748
10887
|
"queryParams",
|
|
10749
10888
|
"fragment",
|
|
10889
|
+
"state",
|
|
10750
10890
|
"href",
|
|
10751
10891
|
"target",
|
|
10752
10892
|
"rel",
|
|
10893
|
+
"shortLabel",
|
|
10894
|
+
"shortBelow",
|
|
10753
10895
|
"color",
|
|
10754
10896
|
"active",
|
|
10755
10897
|
"size",
|
|
@@ -10773,6 +10915,7 @@ var DataTableComponent = class DataTableComponent {
|
|
|
10773
10915
|
"label",
|
|
10774
10916
|
"ariaLabel",
|
|
10775
10917
|
"testId",
|
|
10918
|
+
"labelTestId",
|
|
10776
10919
|
"headingLevel",
|
|
10777
10920
|
"indeterminate",
|
|
10778
10921
|
"checked",
|
|
@@ -11845,6 +11988,7 @@ var SidePanelComponent = class SidePanelComponent {
|
|
|
11845
11988
|
onKeydown(event) {
|
|
11846
11989
|
if (!this.open() || !this._overlays.isTop(this)) return;
|
|
11847
11990
|
if (event.key === "Escape") {
|
|
11991
|
+
if (event.defaultPrevented) return;
|
|
11848
11992
|
event.preventDefault();
|
|
11849
11993
|
this.closed.emit();
|
|
11850
11994
|
return;
|
|
@@ -13140,10 +13284,34 @@ var StepperComponent = class StepperComponent {
|
|
|
13140
13284
|
this.size = input("md", ...ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []);
|
|
13141
13285
|
this.accentColor = input("", ...ngDevMode ? [{ debugName: "accentColor" }] : /* istanbul ignore next */ []);
|
|
13142
13286
|
this.completeColor = input("", ...ngDevMode ? [{ debugName: "completeColor" }] : /* istanbul ignore next */ []);
|
|
13287
|
+
this.accentLabels = input(false, ...ngDevMode ? [{ debugName: "accentLabels" }] : /* istanbul ignore next */ []);
|
|
13143
13288
|
this.ariaLabel = input("Progress", ...ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []);
|
|
13144
13289
|
this.labelsOnSmallScreens = input("current", ...ngDevMode ? [{ debugName: "labelsOnSmallScreens" }] : /* istanbul ignore next */ []);
|
|
13290
|
+
this.minStepWidth = input("", ...ngDevMode ? [{ debugName: "minStepWidth" }] : /* istanbul ignore next */ []);
|
|
13291
|
+
this.scrollable = input(false, ...ngDevMode ? [{ debugName: "scrollable" }] : /* istanbul ignore next */ []);
|
|
13292
|
+
this.leadingWidth = input("", ...ngDevMode ? [{ debugName: "leadingWidth" }] : /* istanbul ignore next */ []);
|
|
13293
|
+
this.compact = input(null, ...ngDevMode ? [{ debugName: "compact" }] : /* istanbul ignore next */ []);
|
|
13145
13294
|
this.stepClick = output();
|
|
13295
|
+
this._win = inject(DOCUMENT).defaultView;
|
|
13296
|
+
this._narrow = signal(false, ...ngDevMode ? [{ debugName: "_narrow" }] : /* istanbul ignore next */ []);
|
|
13297
|
+
this.compactPx = computed(() => typeof this.compact() === "number" && this._narrow(), ...ngDevMode ? [{ debugName: "compactPx" }] : /* istanbul ignore next */ []);
|
|
13146
13298
|
this._id = `ui-st-${++nextStepperId}`;
|
|
13299
|
+
this.olMinWidth = computed(() => {
|
|
13300
|
+
const w = this.minStepWidth().trim();
|
|
13301
|
+
return w && this.orientation() === "horizontal" ? `calc(${this.steps().length} * ${w})` : null;
|
|
13302
|
+
}, ...ngDevMode ? [{ debugName: "olMinWidth" }] : /* istanbul ignore next */ []);
|
|
13303
|
+
this.summary = computed(() => {
|
|
13304
|
+
const steps = this.steps();
|
|
13305
|
+
const i = steps.findIndex((s) => s.key === this.current());
|
|
13306
|
+
const n = i + 1;
|
|
13307
|
+
const label = i >= 0 ? steps[i].label : "";
|
|
13308
|
+
return {
|
|
13309
|
+
n,
|
|
13310
|
+
m: steps.length,
|
|
13311
|
+
label,
|
|
13312
|
+
aria: `Step ${n} of ${steps.length}: ${label}`
|
|
13313
|
+
};
|
|
13314
|
+
}, ...ngDevMode ? [{ debugName: "summary" }] : /* istanbul ignore next */ []);
|
|
13147
13315
|
this.rows = computed(() => {
|
|
13148
13316
|
const steps = this.steps();
|
|
13149
13317
|
const cur = steps.findIndex((s) => s.key === this.current());
|
|
@@ -13154,7 +13322,7 @@ var StepperComponent = class StepperComponent {
|
|
|
13154
13322
|
const state = i === cur ? "current" : step.complete === void 0 ? derived : step.complete ? "complete" : "upcoming";
|
|
13155
13323
|
const errorMessage = typeof step.error === "string" ? step.error : "";
|
|
13156
13324
|
const error = step.error === true || errorMessage !== "";
|
|
13157
|
-
const selectable = clickable && !step.disabled && state !== "current" && (linear ? state === "complete" : true);
|
|
13325
|
+
const selectable = clickable && !step.disabled && step.selectable !== false && state !== "current" && (linear ? state === "complete" : true);
|
|
13158
13326
|
const status = state === "complete" ? "completed" : state === "current" ? "current step" : "not started";
|
|
13159
13327
|
return {
|
|
13160
13328
|
step,
|
|
@@ -13169,6 +13337,16 @@ var StepperComponent = class StepperComponent {
|
|
|
13169
13337
|
};
|
|
13170
13338
|
});
|
|
13171
13339
|
}, ...ngDevMode ? [{ debugName: "rows" }] : /* istanbul ignore next */ []);
|
|
13340
|
+
effect((onCleanup) => {
|
|
13341
|
+
const c = this.compact();
|
|
13342
|
+
this._narrow.set(false);
|
|
13343
|
+
if (typeof c !== "number" || !Number.isFinite(c) || typeof this._win?.matchMedia !== "function") return;
|
|
13344
|
+
const mq = this._win.matchMedia(`(max-width: ${c - .02}px)`);
|
|
13345
|
+
this._narrow.set(mq.matches);
|
|
13346
|
+
const on = (e) => this._narrow.set(e.matches);
|
|
13347
|
+
mq.addEventListener("change", on);
|
|
13348
|
+
onCleanup(() => mq.removeEventListener("change", on));
|
|
13349
|
+
});
|
|
13172
13350
|
}
|
|
13173
13351
|
activate(r) {
|
|
13174
13352
|
if (!r.selectable || r.state === "current") return;
|
|
@@ -13249,6 +13427,13 @@ var StepperComponent = class StepperComponent {
|
|
|
13249
13427
|
isRequired: false,
|
|
13250
13428
|
transformFunction: null
|
|
13251
13429
|
},
|
|
13430
|
+
accentLabels: {
|
|
13431
|
+
classPropertyName: "accentLabels",
|
|
13432
|
+
publicName: "accentLabels",
|
|
13433
|
+
isSignal: true,
|
|
13434
|
+
isRequired: false,
|
|
13435
|
+
transformFunction: null
|
|
13436
|
+
},
|
|
13252
13437
|
ariaLabel: {
|
|
13253
13438
|
classPropertyName: "ariaLabel",
|
|
13254
13439
|
publicName: "ariaLabel",
|
|
@@ -13262,6 +13447,34 @@ var StepperComponent = class StepperComponent {
|
|
|
13262
13447
|
isSignal: true,
|
|
13263
13448
|
isRequired: false,
|
|
13264
13449
|
transformFunction: null
|
|
13450
|
+
},
|
|
13451
|
+
minStepWidth: {
|
|
13452
|
+
classPropertyName: "minStepWidth",
|
|
13453
|
+
publicName: "minStepWidth",
|
|
13454
|
+
isSignal: true,
|
|
13455
|
+
isRequired: false,
|
|
13456
|
+
transformFunction: null
|
|
13457
|
+
},
|
|
13458
|
+
scrollable: {
|
|
13459
|
+
classPropertyName: "scrollable",
|
|
13460
|
+
publicName: "scrollable",
|
|
13461
|
+
isSignal: true,
|
|
13462
|
+
isRequired: false,
|
|
13463
|
+
transformFunction: null
|
|
13464
|
+
},
|
|
13465
|
+
leadingWidth: {
|
|
13466
|
+
classPropertyName: "leadingWidth",
|
|
13467
|
+
publicName: "leadingWidth",
|
|
13468
|
+
isSignal: true,
|
|
13469
|
+
isRequired: false,
|
|
13470
|
+
transformFunction: null
|
|
13471
|
+
},
|
|
13472
|
+
compact: {
|
|
13473
|
+
classPropertyName: "compact",
|
|
13474
|
+
publicName: "compact",
|
|
13475
|
+
isSignal: true,
|
|
13476
|
+
isRequired: false,
|
|
13477
|
+
transformFunction: null
|
|
13265
13478
|
}
|
|
13266
13479
|
},
|
|
13267
13480
|
outputs: {
|
|
@@ -13274,12 +13487,18 @@ var StepperComponent = class StepperComponent {
|
|
|
13274
13487
|
} },
|
|
13275
13488
|
ngImport: i0,
|
|
13276
13489
|
template: `
|
|
13490
|
+
<div class="st-root" [class.st-c-sm]="compact() === 'sm'" [class.st-c-md]="compact() === 'md'" [class.st-c-lg]="compact() === 'lg'" [class.st-c-on]="compactPx()"
|
|
13491
|
+
[class.st-has-leading]="!!leadingWidth() && orientation() === 'horizontal'" [style.--st-leading-w]="leadingWidth() || null">
|
|
13492
|
+
<div class="st-leading"><ng-content select="[stepper-leading]" /></div>
|
|
13493
|
+
<div class="st-scroll" [class.st-scrollable]="scrollable()">
|
|
13277
13494
|
<ol class="st"
|
|
13495
|
+
[style.min-width]="olMinWidth()"
|
|
13278
13496
|
[class.st-horizontal]="orientation() === 'horizontal'"
|
|
13279
13497
|
[class.st-vertical]="orientation() === 'vertical'"
|
|
13280
13498
|
[class.st-sm]="size() === 'sm'"
|
|
13281
13499
|
[class.st-labels-current]="labelsOnSmallScreens() === 'current'"
|
|
13282
13500
|
[class.st-themed]="!!accentColor()"
|
|
13501
|
+
[class.st-accent-labels]="accentLabels()"
|
|
13283
13502
|
[attr.aria-label]="ariaLabel() || null">
|
|
13284
13503
|
@for (r of rows(); track r.step.key) {
|
|
13285
13504
|
<li class="st-step"
|
|
@@ -13306,6 +13525,17 @@ var StepperComponent = class StepperComponent {
|
|
|
13306
13525
|
</li>
|
|
13307
13526
|
}
|
|
13308
13527
|
</ol>
|
|
13528
|
+
</div>
|
|
13529
|
+
@if (compact() !== null) {
|
|
13530
|
+
<div class="st-compact" data-testid="stepper-compact">
|
|
13531
|
+
<div class="st-compact-row">
|
|
13532
|
+
<span class="st-compact-label" data-testid="stepper-compact-label">{{ summary().label }}</span>
|
|
13533
|
+
<span class="st-compact-count" data-testid="stepper-compact-count">{{ summary().n }} / {{ summary().m }}</span>
|
|
13534
|
+
</div>
|
|
13535
|
+
<ui-progress-bar data-testid="stepper-compact-progress" [value]="summary().n" [max]="summary().m" [color]="accentColor()" [ariaLabel]="summary().aria" />
|
|
13536
|
+
</div>
|
|
13537
|
+
}
|
|
13538
|
+
</div>
|
|
13309
13539
|
|
|
13310
13540
|
<ng-template #body let-r>
|
|
13311
13541
|
<span class="st-ind" aria-hidden="true">
|
|
@@ -13320,7 +13550,7 @@ var StepperComponent = class StepperComponent {
|
|
|
13320
13550
|
</ng-template>
|
|
13321
13551
|
`,
|
|
13322
13552
|
isInline: true,
|
|
13323
|
-
styles: [":host{display:block}.st{list-style:none;margin:0;padding:0;display:flex;--st-ind: 28px}.st-sm{--st-ind: 22px}.st-horizontal{flex-direction:row;align-items:flex-start}.st-vertical{flex-direction:column}.st-step{position:relative;display:flex;min-width:0}.st-horizontal .st-step{flex:1 1 0;align-items:flex-start}.st-horizontal .st-step:last-child{flex:0 1 auto}.st-vertical .st-step{flex-direction:column;padding-bottom:20px}.st-vertical .st-step:last-child{padding-bottom:0}.st-item{display:flex;flex-direction:column;min-width:0;gap:2px}.st-horizontal .st-item{flex:0 1 auto}.st-btn{display:inline-flex;align-items:flex-start;gap:8px;min-width:0;margin:0;padding:2px 4px;border:0;border-radius:8px;background:none;font:inherit;color:inherit;text-align:left;-webkit-appearance:none;appearance:none}button.st-btn{cursor:pointer}.st-btn:focus{outline:2px solid #3b82f6;outline-offset:2px}.st-btn:focus:not(:focus-visible){outline:none}@media(hover:hover){button.st-btn:hover .st-label{text-decoration:underline}}.st-ind{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;width:var(--st-ind);height:var(--st-ind);border-radius:50%;font-size:.8125rem;font-weight:600;line-height:1;background:#fff;border:2px solid #cbd5e1;color:#64748b}.st-sm .st-ind{font-size:.6875rem}.st-sm .st-check{width:11px;height:11px}.st-step[data-state=complete] .st-ind{background:var(--st-complete, var(--st-accent, var(--ui-accent, #1d4ed8)));border-color:var(--st-complete, var(--st-accent, var(--ui-accent, #1d4ed8)));color:#fff}.st-step[data-state=current] .st-ind{background:var(--st-accent, var(--ui-accent, #1d4ed8));border-color:var(--st-accent, var(--ui-accent, #1d4ed8));color:#fff;box-shadow:0 0 0 3px var(--ui-accent-soft, #bfdbfe)}@supports (color: color-mix(in srgb,red 30%,white)){.st-themed .st-step[data-state=current] .st-ind{box-shadow:0 0 0 3px color-mix(in srgb,var(--st-accent) 30%,white)}}.st-step[data-error=true] .st-ind{background:#dc2626;border-color:#dc2626;color:#fff;box-shadow:none}.st-label{font-size:.875rem;font-weight:500;line-height:var(--st-ind);color:#64748b;min-width:0;overflow-wrap:anywhere}.st-sm .st-label{font-size:.8125rem}.st-step[data-state=complete] .st-label{color:#1e293b}.st-step[data-state=current] .st-label{color:#0f172a;font-weight:600}.st-step[data-error=true] .st-label{color:#b91c1c}.st-opt{font-size:.75rem;line-height:var(--st-ind);color:#64748b;white-space:nowrap}.st-desc{font-size:.8125rem;line-height:1.4;color:#64748b;padding-left:calc(var(--st-ind) + 12px);overflow-wrap:anywhere}.st-errmsg{font-size:.8125rem;line-height:1.4;color:#b91c1c;padding-left:calc(var(--st-ind) + 12px);overflow-wrap:anywhere}.st-step[data-disabled=true] .st-item{opacity:.5}.st-sr,.st-hidden{position:absolute;width:1px;height:1px;margin:-1px;padding:0;border:0;overflow:hidden;clip:rect(0 0 0 0);-webkit-clip-path:inset(50%);clip-path:inset(50%);white-space:nowrap}.st-conn{position:relative;display:block;background:#e2e8f0;border-radius:1px}.st-conn:after{content:\"\";position:absolute;inset:0;background:var(--st-complete, var(--st-accent, var(--ui-accent, #1d4ed8)));border-radius:1px;transform-origin:top left;transform:scale(0);transition:transform .3s ease}.st-step[data-state=complete] .st-conn:after{transform:scale(1)}.st-horizontal .st-conn{flex:1 1 12px;min-width:12px;height:2px;margin:calc(var(--st-ind) / 2 + 1px) 8px 0}.st-vertical .st-conn{position:absolute;left:calc(var(--st-ind) / 2 + 3px);top:calc(var(--st-ind) + 8px);bottom:4px;width:2px}@media(pointer:coarse),(max-width:480px){.st-btn{min-height:44px;align-items:center}button.st-btn{min-width:44px}.st-horizontal .st-conn{margin-top:21px}.st-vertical .st-conn{top:calc(26px + var(--st-ind) / 2)}}@media(max-width:480px){.st-horizontal.st-labels-current .st-step:not([data-state=current]) .st-label,.st-horizontal.st-labels-current .st-step:not([data-state=current]) .st-opt,.st-horizontal.st-labels-current .st-step:not([data-state=current]) .st-desc,.st-horizontal.st-labels-current .st-step:not([data-state=current]) .st-errmsg{position:absolute;width:1px;height:1px;margin:-1px;padding:0;border:0;overflow:hidden;clip:rect(0 0 0 0);-webkit-clip-path:inset(50%);clip-path:inset(50%);white-space:nowrap}.st-horizontal .st-conn{margin-left:4px;margin-right:4px;min-width:8px;flex-basis:8px}}@media(prefers-reduced-motion:reduce){.st-conn:after{transition:none}}\n"],
|
|
13553
|
+
styles: [":host{display:block}.st-root{position:relative}.st-leading{display:none}.st-has-leading .st-leading{display:block;position:absolute;top:50%;left:0;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.st-has-leading .st-scroll{margin-inline-start:calc(var(--st-leading-w) + 1rem)}.st-scrollable{overflow-x:auto;padding-top:4px;padding-bottom:4px}.st-compact{display:none}.st-compact-row{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}.st-compact-label{min-width:0;font-size:1.125rem;font-weight:600;line-height:1.3;color:var(--st-accent, #0f172a);overflow-wrap:anywhere}.st-compact-count{flex-shrink:0;font-size:.8125rem;color:#64748b}.st-c-on .st-scroll,.st-c-on .st-leading{display:none}.st-c-on .st-compact{display:block}@media(max-width:479.98px){.st-c-sm .st-scroll,.st-c-sm .st-leading{display:none}.st-c-sm .st-compact{display:block}}@media(max-width:767.98px){.st-c-md .st-scroll,.st-c-md .st-leading{display:none}.st-c-md .st-compact{display:block}}@media(max-width:1023.98px){.st-c-lg .st-scroll,.st-c-lg .st-leading{display:none}.st-c-lg .st-compact{display:block}}.st{list-style:none;margin:0;padding:0;display:flex;--st-ind: 28px}.st-sm{--st-ind: 22px}.st-horizontal{flex-direction:row;align-items:flex-start}.st-vertical{flex-direction:column}.st-step{position:relative;display:flex;min-width:0}.st-horizontal .st-step{flex:1 1 0;align-items:flex-start}.st-horizontal .st-step:last-child{flex:0 1 auto}.st-vertical .st-step{flex-direction:column;padding-bottom:20px}.st-vertical .st-step:last-child{padding-bottom:0}.st-item{display:flex;flex-direction:column;min-width:0;gap:2px}.st-horizontal .st-item{flex:0 1 auto}.st-btn{display:inline-flex;align-items:flex-start;gap:8px;min-width:0;margin:0;padding:2px 4px;border:0;border-radius:8px;background:none;font:inherit;color:inherit;text-align:left;-webkit-appearance:none;appearance:none}button.st-btn{cursor:pointer}.st-btn:focus{outline:2px solid #3b82f6;outline-offset:2px}.st-btn:focus:not(:focus-visible){outline:none}@media(hover:hover){button.st-btn:hover .st-label{text-decoration:underline}}.st-ind{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;width:var(--st-ind);height:var(--st-ind);border-radius:50%;font-size:.8125rem;font-weight:600;line-height:1;background:#fff;border:2px solid #cbd5e1;color:#64748b}.st-sm .st-ind{font-size:.6875rem}.st-sm .st-check{width:11px;height:11px}.st-step[data-state=complete] .st-ind{background:var(--st-complete, var(--st-accent, var(--ui-accent, #1d4ed8)));border-color:var(--st-complete, var(--st-accent, var(--ui-accent, #1d4ed8)));color:#fff}.st-step[data-state=current] .st-ind{background:var(--st-accent, var(--ui-accent, #1d4ed8));border-color:var(--st-accent, var(--ui-accent, #1d4ed8));color:#fff;box-shadow:0 0 0 3px var(--ui-accent-soft, #bfdbfe)}@supports (color: color-mix(in srgb,red 30%,white)){.st-themed .st-step[data-state=current]:not([data-error=true]) .st-ind{box-shadow:0 0 0 3px color-mix(in srgb,var(--st-accent) 30%,white)}}.st-step[data-error=true] .st-ind{background:#dc2626;border-color:#dc2626;color:#fff;box-shadow:none}.st-label{font-size:.875rem;font-weight:500;line-height:var(--st-ind);color:#64748b;min-width:0;overflow-wrap:anywhere}.st-sm .st-label{font-size:.8125rem}.st-step[data-state=complete] .st-label{color:#1e293b}.st-step[data-state=current] .st-label{color:#0f172a;font-weight:600}.st-step[data-error=true] .st-label{color:#b91c1c}.st-accent-labels .st-step[data-state=current]:not([data-error=true]) .st-label{color:var(--st-accent, var(--ui-accent, #1d4ed8))}.st-opt{font-size:.75rem;line-height:var(--st-ind);color:#64748b;white-space:nowrap}.st-desc{font-size:.8125rem;line-height:1.4;color:#64748b;padding-left:calc(var(--st-ind) + 12px);overflow-wrap:anywhere}.st-errmsg{font-size:.8125rem;line-height:1.4;color:#b91c1c;padding-left:calc(var(--st-ind) + 12px);overflow-wrap:anywhere}.st-step[data-disabled=true] .st-item{opacity:.5}.st-sr,.st-hidden{position:absolute;width:1px;height:1px;margin:-1px;padding:0;border:0;overflow:hidden;clip:rect(0 0 0 0);-webkit-clip-path:inset(50%);clip-path:inset(50%);white-space:nowrap}.st-conn{position:relative;display:block;background:#e2e8f0;border-radius:1px}.st-conn:after{content:\"\";position:absolute;inset:0;background:var(--st-complete, var(--st-accent, var(--ui-accent, #1d4ed8)));border-radius:1px;transform-origin:top left;transform:scale(0);transition:transform .3s ease}.st-step[data-state=complete] .st-conn:after{transform:scale(1)}.st-horizontal .st-conn{flex:1 1 12px;min-width:12px;height:2px;margin:calc(var(--st-ind) / 2 + 1px) 8px 0}.st-vertical .st-conn{position:absolute;left:calc(var(--st-ind) / 2 + 3px);top:calc(var(--st-ind) + 8px);bottom:4px;width:2px}@media(pointer:coarse),(max-width:480px){.st-btn{min-height:44px;align-items:center}button.st-btn{min-width:44px}.st-horizontal .st-conn{margin-top:21px}.st-vertical .st-conn{top:calc(26px + var(--st-ind) / 2)}}@media(max-width:480px){.st-horizontal.st-labels-current .st-step:not([data-state=current]) .st-label,.st-horizontal.st-labels-current .st-step:not([data-state=current]) .st-opt,.st-horizontal.st-labels-current .st-step:not([data-state=current]) .st-desc,.st-horizontal.st-labels-current .st-step:not([data-state=current]) .st-errmsg{position:absolute;width:1px;height:1px;margin:-1px;padding:0;border:0;overflow:hidden;clip:rect(0 0 0 0);-webkit-clip-path:inset(50%);clip-path:inset(50%);white-space:nowrap}.st-horizontal .st-conn{margin-left:4px;margin-right:4px;min-width:8px;flex-basis:8px}}@media(prefers-reduced-motion:reduce){.st-conn:after{transition:none}}\n"],
|
|
13324
13554
|
dependencies: [{
|
|
13325
13555
|
kind: "directive",
|
|
13326
13556
|
type: NgTemplateOutlet,
|
|
@@ -13330,6 +13560,21 @@ var StepperComponent = class StepperComponent {
|
|
|
13330
13560
|
"ngTemplateOutlet",
|
|
13331
13561
|
"ngTemplateOutletInjector"
|
|
13332
13562
|
]
|
|
13563
|
+
}, {
|
|
13564
|
+
kind: "component",
|
|
13565
|
+
type: ProgressBarComponent,
|
|
13566
|
+
selector: "ui-progress-bar",
|
|
13567
|
+
inputs: [
|
|
13568
|
+
"value",
|
|
13569
|
+
"max",
|
|
13570
|
+
"label",
|
|
13571
|
+
"variant",
|
|
13572
|
+
"color",
|
|
13573
|
+
"tooltip",
|
|
13574
|
+
"ariaLabel",
|
|
13575
|
+
"ariaLabelledby",
|
|
13576
|
+
"valueText"
|
|
13577
|
+
]
|
|
13333
13578
|
}],
|
|
13334
13579
|
changeDetection: i0.ChangeDetectionStrategy.OnPush
|
|
13335
13580
|
});
|
|
@@ -13345,19 +13590,25 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
13345
13590
|
args: [{
|
|
13346
13591
|
selector: "ui-stepper",
|
|
13347
13592
|
standalone: true,
|
|
13348
|
-
imports: [NgTemplateOutlet],
|
|
13593
|
+
imports: [NgTemplateOutlet, ProgressBarComponent],
|
|
13349
13594
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
13350
13595
|
host: {
|
|
13351
13596
|
"[style.--st-accent]": "accentColor() || null",
|
|
13352
13597
|
"[style.--st-complete]": "completeColor() || null"
|
|
13353
13598
|
},
|
|
13354
13599
|
template: `
|
|
13600
|
+
<div class="st-root" [class.st-c-sm]="compact() === 'sm'" [class.st-c-md]="compact() === 'md'" [class.st-c-lg]="compact() === 'lg'" [class.st-c-on]="compactPx()"
|
|
13601
|
+
[class.st-has-leading]="!!leadingWidth() && orientation() === 'horizontal'" [style.--st-leading-w]="leadingWidth() || null">
|
|
13602
|
+
<div class="st-leading"><ng-content select="[stepper-leading]" /></div>
|
|
13603
|
+
<div class="st-scroll" [class.st-scrollable]="scrollable()">
|
|
13355
13604
|
<ol class="st"
|
|
13605
|
+
[style.min-width]="olMinWidth()"
|
|
13356
13606
|
[class.st-horizontal]="orientation() === 'horizontal'"
|
|
13357
13607
|
[class.st-vertical]="orientation() === 'vertical'"
|
|
13358
13608
|
[class.st-sm]="size() === 'sm'"
|
|
13359
13609
|
[class.st-labels-current]="labelsOnSmallScreens() === 'current'"
|
|
13360
13610
|
[class.st-themed]="!!accentColor()"
|
|
13611
|
+
[class.st-accent-labels]="accentLabels()"
|
|
13361
13612
|
[attr.aria-label]="ariaLabel() || null">
|
|
13362
13613
|
@for (r of rows(); track r.step.key) {
|
|
13363
13614
|
<li class="st-step"
|
|
@@ -13384,6 +13635,17 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
13384
13635
|
</li>
|
|
13385
13636
|
}
|
|
13386
13637
|
</ol>
|
|
13638
|
+
</div>
|
|
13639
|
+
@if (compact() !== null) {
|
|
13640
|
+
<div class="st-compact" data-testid="stepper-compact">
|
|
13641
|
+
<div class="st-compact-row">
|
|
13642
|
+
<span class="st-compact-label" data-testid="stepper-compact-label">{{ summary().label }}</span>
|
|
13643
|
+
<span class="st-compact-count" data-testid="stepper-compact-count">{{ summary().n }} / {{ summary().m }}</span>
|
|
13644
|
+
</div>
|
|
13645
|
+
<ui-progress-bar data-testid="stepper-compact-progress" [value]="summary().n" [max]="summary().m" [color]="accentColor()" [ariaLabel]="summary().aria" />
|
|
13646
|
+
</div>
|
|
13647
|
+
}
|
|
13648
|
+
</div>
|
|
13387
13649
|
|
|
13388
13650
|
<ng-template #body let-r>
|
|
13389
13651
|
<span class="st-ind" aria-hidden="true">
|
|
@@ -13397,9 +13659,10 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
13397
13659
|
<span class="st-sr">{{ r.srText }}</span>
|
|
13398
13660
|
</ng-template>
|
|
13399
13661
|
`,
|
|
13400
|
-
styles: [":host{display:block}.st{list-style:none;margin:0;padding:0;display:flex;--st-ind: 28px}.st-sm{--st-ind: 22px}.st-horizontal{flex-direction:row;align-items:flex-start}.st-vertical{flex-direction:column}.st-step{position:relative;display:flex;min-width:0}.st-horizontal .st-step{flex:1 1 0;align-items:flex-start}.st-horizontal .st-step:last-child{flex:0 1 auto}.st-vertical .st-step{flex-direction:column;padding-bottom:20px}.st-vertical .st-step:last-child{padding-bottom:0}.st-item{display:flex;flex-direction:column;min-width:0;gap:2px}.st-horizontal .st-item{flex:0 1 auto}.st-btn{display:inline-flex;align-items:flex-start;gap:8px;min-width:0;margin:0;padding:2px 4px;border:0;border-radius:8px;background:none;font:inherit;color:inherit;text-align:left;-webkit-appearance:none;appearance:none}button.st-btn{cursor:pointer}.st-btn:focus{outline:2px solid #3b82f6;outline-offset:2px}.st-btn:focus:not(:focus-visible){outline:none}@media(hover:hover){button.st-btn:hover .st-label{text-decoration:underline}}.st-ind{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;width:var(--st-ind);height:var(--st-ind);border-radius:50%;font-size:.8125rem;font-weight:600;line-height:1;background:#fff;border:2px solid #cbd5e1;color:#64748b}.st-sm .st-ind{font-size:.6875rem}.st-sm .st-check{width:11px;height:11px}.st-step[data-state=complete] .st-ind{background:var(--st-complete, var(--st-accent, var(--ui-accent, #1d4ed8)));border-color:var(--st-complete, var(--st-accent, var(--ui-accent, #1d4ed8)));color:#fff}.st-step[data-state=current] .st-ind{background:var(--st-accent, var(--ui-accent, #1d4ed8));border-color:var(--st-accent, var(--ui-accent, #1d4ed8));color:#fff;box-shadow:0 0 0 3px var(--ui-accent-soft, #bfdbfe)}@supports (color: color-mix(in srgb,red 30%,white)){.st-themed .st-step[data-state=current] .st-ind{box-shadow:0 0 0 3px color-mix(in srgb,var(--st-accent) 30%,white)}}.st-step[data-error=true] .st-ind{background:#dc2626;border-color:#dc2626;color:#fff;box-shadow:none}.st-label{font-size:.875rem;font-weight:500;line-height:var(--st-ind);color:#64748b;min-width:0;overflow-wrap:anywhere}.st-sm .st-label{font-size:.8125rem}.st-step[data-state=complete] .st-label{color:#1e293b}.st-step[data-state=current] .st-label{color:#0f172a;font-weight:600}.st-step[data-error=true] .st-label{color:#b91c1c}.st-opt{font-size:.75rem;line-height:var(--st-ind);color:#64748b;white-space:nowrap}.st-desc{font-size:.8125rem;line-height:1.4;color:#64748b;padding-left:calc(var(--st-ind) + 12px);overflow-wrap:anywhere}.st-errmsg{font-size:.8125rem;line-height:1.4;color:#b91c1c;padding-left:calc(var(--st-ind) + 12px);overflow-wrap:anywhere}.st-step[data-disabled=true] .st-item{opacity:.5}.st-sr,.st-hidden{position:absolute;width:1px;height:1px;margin:-1px;padding:0;border:0;overflow:hidden;clip:rect(0 0 0 0);-webkit-clip-path:inset(50%);clip-path:inset(50%);white-space:nowrap}.st-conn{position:relative;display:block;background:#e2e8f0;border-radius:1px}.st-conn:after{content:\"\";position:absolute;inset:0;background:var(--st-complete, var(--st-accent, var(--ui-accent, #1d4ed8)));border-radius:1px;transform-origin:top left;transform:scale(0);transition:transform .3s ease}.st-step[data-state=complete] .st-conn:after{transform:scale(1)}.st-horizontal .st-conn{flex:1 1 12px;min-width:12px;height:2px;margin:calc(var(--st-ind) / 2 + 1px) 8px 0}.st-vertical .st-conn{position:absolute;left:calc(var(--st-ind) / 2 + 3px);top:calc(var(--st-ind) + 8px);bottom:4px;width:2px}@media(pointer:coarse),(max-width:480px){.st-btn{min-height:44px;align-items:center}button.st-btn{min-width:44px}.st-horizontal .st-conn{margin-top:21px}.st-vertical .st-conn{top:calc(26px + var(--st-ind) / 2)}}@media(max-width:480px){.st-horizontal.st-labels-current .st-step:not([data-state=current]) .st-label,.st-horizontal.st-labels-current .st-step:not([data-state=current]) .st-opt,.st-horizontal.st-labels-current .st-step:not([data-state=current]) .st-desc,.st-horizontal.st-labels-current .st-step:not([data-state=current]) .st-errmsg{position:absolute;width:1px;height:1px;margin:-1px;padding:0;border:0;overflow:hidden;clip:rect(0 0 0 0);-webkit-clip-path:inset(50%);clip-path:inset(50%);white-space:nowrap}.st-horizontal .st-conn{margin-left:4px;margin-right:4px;min-width:8px;flex-basis:8px}}@media(prefers-reduced-motion:reduce){.st-conn:after{transition:none}}\n"]
|
|
13662
|
+
styles: [":host{display:block}.st-root{position:relative}.st-leading{display:none}.st-has-leading .st-leading{display:block;position:absolute;top:50%;left:0;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.st-has-leading .st-scroll{margin-inline-start:calc(var(--st-leading-w) + 1rem)}.st-scrollable{overflow-x:auto;padding-top:4px;padding-bottom:4px}.st-compact{display:none}.st-compact-row{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}.st-compact-label{min-width:0;font-size:1.125rem;font-weight:600;line-height:1.3;color:var(--st-accent, #0f172a);overflow-wrap:anywhere}.st-compact-count{flex-shrink:0;font-size:.8125rem;color:#64748b}.st-c-on .st-scroll,.st-c-on .st-leading{display:none}.st-c-on .st-compact{display:block}@media(max-width:479.98px){.st-c-sm .st-scroll,.st-c-sm .st-leading{display:none}.st-c-sm .st-compact{display:block}}@media(max-width:767.98px){.st-c-md .st-scroll,.st-c-md .st-leading{display:none}.st-c-md .st-compact{display:block}}@media(max-width:1023.98px){.st-c-lg .st-scroll,.st-c-lg .st-leading{display:none}.st-c-lg .st-compact{display:block}}.st{list-style:none;margin:0;padding:0;display:flex;--st-ind: 28px}.st-sm{--st-ind: 22px}.st-horizontal{flex-direction:row;align-items:flex-start}.st-vertical{flex-direction:column}.st-step{position:relative;display:flex;min-width:0}.st-horizontal .st-step{flex:1 1 0;align-items:flex-start}.st-horizontal .st-step:last-child{flex:0 1 auto}.st-vertical .st-step{flex-direction:column;padding-bottom:20px}.st-vertical .st-step:last-child{padding-bottom:0}.st-item{display:flex;flex-direction:column;min-width:0;gap:2px}.st-horizontal .st-item{flex:0 1 auto}.st-btn{display:inline-flex;align-items:flex-start;gap:8px;min-width:0;margin:0;padding:2px 4px;border:0;border-radius:8px;background:none;font:inherit;color:inherit;text-align:left;-webkit-appearance:none;appearance:none}button.st-btn{cursor:pointer}.st-btn:focus{outline:2px solid #3b82f6;outline-offset:2px}.st-btn:focus:not(:focus-visible){outline:none}@media(hover:hover){button.st-btn:hover .st-label{text-decoration:underline}}.st-ind{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;width:var(--st-ind);height:var(--st-ind);border-radius:50%;font-size:.8125rem;font-weight:600;line-height:1;background:#fff;border:2px solid #cbd5e1;color:#64748b}.st-sm .st-ind{font-size:.6875rem}.st-sm .st-check{width:11px;height:11px}.st-step[data-state=complete] .st-ind{background:var(--st-complete, var(--st-accent, var(--ui-accent, #1d4ed8)));border-color:var(--st-complete, var(--st-accent, var(--ui-accent, #1d4ed8)));color:#fff}.st-step[data-state=current] .st-ind{background:var(--st-accent, var(--ui-accent, #1d4ed8));border-color:var(--st-accent, var(--ui-accent, #1d4ed8));color:#fff;box-shadow:0 0 0 3px var(--ui-accent-soft, #bfdbfe)}@supports (color: color-mix(in srgb,red 30%,white)){.st-themed .st-step[data-state=current]:not([data-error=true]) .st-ind{box-shadow:0 0 0 3px color-mix(in srgb,var(--st-accent) 30%,white)}}.st-step[data-error=true] .st-ind{background:#dc2626;border-color:#dc2626;color:#fff;box-shadow:none}.st-label{font-size:.875rem;font-weight:500;line-height:var(--st-ind);color:#64748b;min-width:0;overflow-wrap:anywhere}.st-sm .st-label{font-size:.8125rem}.st-step[data-state=complete] .st-label{color:#1e293b}.st-step[data-state=current] .st-label{color:#0f172a;font-weight:600}.st-step[data-error=true] .st-label{color:#b91c1c}.st-accent-labels .st-step[data-state=current]:not([data-error=true]) .st-label{color:var(--st-accent, var(--ui-accent, #1d4ed8))}.st-opt{font-size:.75rem;line-height:var(--st-ind);color:#64748b;white-space:nowrap}.st-desc{font-size:.8125rem;line-height:1.4;color:#64748b;padding-left:calc(var(--st-ind) + 12px);overflow-wrap:anywhere}.st-errmsg{font-size:.8125rem;line-height:1.4;color:#b91c1c;padding-left:calc(var(--st-ind) + 12px);overflow-wrap:anywhere}.st-step[data-disabled=true] .st-item{opacity:.5}.st-sr,.st-hidden{position:absolute;width:1px;height:1px;margin:-1px;padding:0;border:0;overflow:hidden;clip:rect(0 0 0 0);-webkit-clip-path:inset(50%);clip-path:inset(50%);white-space:nowrap}.st-conn{position:relative;display:block;background:#e2e8f0;border-radius:1px}.st-conn:after{content:\"\";position:absolute;inset:0;background:var(--st-complete, var(--st-accent, var(--ui-accent, #1d4ed8)));border-radius:1px;transform-origin:top left;transform:scale(0);transition:transform .3s ease}.st-step[data-state=complete] .st-conn:after{transform:scale(1)}.st-horizontal .st-conn{flex:1 1 12px;min-width:12px;height:2px;margin:calc(var(--st-ind) / 2 + 1px) 8px 0}.st-vertical .st-conn{position:absolute;left:calc(var(--st-ind) / 2 + 3px);top:calc(var(--st-ind) + 8px);bottom:4px;width:2px}@media(pointer:coarse),(max-width:480px){.st-btn{min-height:44px;align-items:center}button.st-btn{min-width:44px}.st-horizontal .st-conn{margin-top:21px}.st-vertical .st-conn{top:calc(26px + var(--st-ind) / 2)}}@media(max-width:480px){.st-horizontal.st-labels-current .st-step:not([data-state=current]) .st-label,.st-horizontal.st-labels-current .st-step:not([data-state=current]) .st-opt,.st-horizontal.st-labels-current .st-step:not([data-state=current]) .st-desc,.st-horizontal.st-labels-current .st-step:not([data-state=current]) .st-errmsg{position:absolute;width:1px;height:1px;margin:-1px;padding:0;border:0;overflow:hidden;clip:rect(0 0 0 0);-webkit-clip-path:inset(50%);clip-path:inset(50%);white-space:nowrap}.st-horizontal .st-conn{margin-left:4px;margin-right:4px;min-width:8px;flex-basis:8px}}@media(prefers-reduced-motion:reduce){.st-conn:after{transition:none}}\n"]
|
|
13401
13663
|
}]
|
|
13402
13664
|
}],
|
|
13665
|
+
ctorParameters: () => [],
|
|
13403
13666
|
propDecorators: {
|
|
13404
13667
|
steps: [{
|
|
13405
13668
|
type: i0.Input,
|
|
@@ -13468,6 +13731,14 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
13468
13731
|
required: false
|
|
13469
13732
|
}]
|
|
13470
13733
|
}],
|
|
13734
|
+
accentLabels: [{
|
|
13735
|
+
type: i0.Input,
|
|
13736
|
+
args: [{
|
|
13737
|
+
isSignal: true,
|
|
13738
|
+
alias: "accentLabels",
|
|
13739
|
+
required: false
|
|
13740
|
+
}]
|
|
13741
|
+
}],
|
|
13471
13742
|
ariaLabel: [{
|
|
13472
13743
|
type: i0.Input,
|
|
13473
13744
|
args: [{
|
|
@@ -13484,6 +13755,38 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
13484
13755
|
required: false
|
|
13485
13756
|
}]
|
|
13486
13757
|
}],
|
|
13758
|
+
minStepWidth: [{
|
|
13759
|
+
type: i0.Input,
|
|
13760
|
+
args: [{
|
|
13761
|
+
isSignal: true,
|
|
13762
|
+
alias: "minStepWidth",
|
|
13763
|
+
required: false
|
|
13764
|
+
}]
|
|
13765
|
+
}],
|
|
13766
|
+
scrollable: [{
|
|
13767
|
+
type: i0.Input,
|
|
13768
|
+
args: [{
|
|
13769
|
+
isSignal: true,
|
|
13770
|
+
alias: "scrollable",
|
|
13771
|
+
required: false
|
|
13772
|
+
}]
|
|
13773
|
+
}],
|
|
13774
|
+
leadingWidth: [{
|
|
13775
|
+
type: i0.Input,
|
|
13776
|
+
args: [{
|
|
13777
|
+
isSignal: true,
|
|
13778
|
+
alias: "leadingWidth",
|
|
13779
|
+
required: false
|
|
13780
|
+
}]
|
|
13781
|
+
}],
|
|
13782
|
+
compact: [{
|
|
13783
|
+
type: i0.Input,
|
|
13784
|
+
args: [{
|
|
13785
|
+
isSignal: true,
|
|
13786
|
+
alias: "compact",
|
|
13787
|
+
required: false
|
|
13788
|
+
}]
|
|
13789
|
+
}],
|
|
13487
13790
|
stepClick: [{
|
|
13488
13791
|
type: i0.Output,
|
|
13489
13792
|
args: ["stepClick"]
|
|
@@ -13949,9 +14252,12 @@ var BusinessHoursComponent = class BusinessHoursComponent {
|
|
|
13949
14252
|
"routerLink",
|
|
13950
14253
|
"queryParams",
|
|
13951
14254
|
"fragment",
|
|
14255
|
+
"state",
|
|
13952
14256
|
"href",
|
|
13953
14257
|
"target",
|
|
13954
14258
|
"rel",
|
|
14259
|
+
"shortLabel",
|
|
14260
|
+
"shortBelow",
|
|
13955
14261
|
"color",
|
|
13956
14262
|
"active",
|
|
13957
14263
|
"size",
|
|
@@ -13975,6 +14281,7 @@ var BusinessHoursComponent = class BusinessHoursComponent {
|
|
|
13975
14281
|
"label",
|
|
13976
14282
|
"ariaLabel",
|
|
13977
14283
|
"testId",
|
|
14284
|
+
"labelTestId",
|
|
13978
14285
|
"headingLevel",
|
|
13979
14286
|
"indeterminate",
|
|
13980
14287
|
"checked",
|
|
@@ -15671,6 +15978,7 @@ var PhoneNumberPickerComponent = class PhoneNumberPickerComponent {
|
|
|
15671
15978
|
"step",
|
|
15672
15979
|
"valueType",
|
|
15673
15980
|
"formatter",
|
|
15981
|
+
"integer",
|
|
15674
15982
|
"showErrors",
|
|
15675
15983
|
"disabled"
|
|
15676
15984
|
],
|
|
@@ -15707,9 +16015,12 @@ var PhoneNumberPickerComponent = class PhoneNumberPickerComponent {
|
|
|
15707
16015
|
"routerLink",
|
|
15708
16016
|
"queryParams",
|
|
15709
16017
|
"fragment",
|
|
16018
|
+
"state",
|
|
15710
16019
|
"href",
|
|
15711
16020
|
"target",
|
|
15712
16021
|
"rel",
|
|
16022
|
+
"shortLabel",
|
|
16023
|
+
"shortBelow",
|
|
15713
16024
|
"color",
|
|
15714
16025
|
"active",
|
|
15715
16026
|
"size",
|
|
@@ -16827,6 +17138,7 @@ var ContactPickerComponent = class ContactPickerComponent {
|
|
|
16827
17138
|
"label",
|
|
16828
17139
|
"ariaLabel",
|
|
16829
17140
|
"testId",
|
|
17141
|
+
"labelTestId",
|
|
16830
17142
|
"headingLevel",
|
|
16831
17143
|
"indeterminate",
|
|
16832
17144
|
"checked",
|
|
@@ -17806,6 +18118,7 @@ var BulkMessagePanelComponent = class BulkMessagePanelComponent {
|
|
|
17806
18118
|
"step",
|
|
17807
18119
|
"valueType",
|
|
17808
18120
|
"formatter",
|
|
18121
|
+
"integer",
|
|
17809
18122
|
"showErrors",
|
|
17810
18123
|
"disabled"
|
|
17811
18124
|
],
|
|
@@ -17964,6 +18277,7 @@ var TextComponent = class TextComponent {
|
|
|
17964
18277
|
this.text = input("", ...ngDevMode ? [{ debugName: "text" }] : /* istanbul ignore next */ []);
|
|
17965
18278
|
this.size = input("md", ...ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []);
|
|
17966
18279
|
this.tone = input("default", ...ngDevMode ? [{ debugName: "tone" }] : /* istanbul ignore next */ []);
|
|
18280
|
+
this.color = input("", ...ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []);
|
|
17967
18281
|
this.strong = input(null, ...ngDevMode ? [{ debugName: "strong" }] : /* istanbul ignore next */ []);
|
|
17968
18282
|
this.segments = computed(() => {
|
|
17969
18283
|
const text = this.text() ?? "";
|
|
@@ -18041,6 +18355,13 @@ var TextComponent = class TextComponent {
|
|
|
18041
18355
|
isRequired: false,
|
|
18042
18356
|
transformFunction: null
|
|
18043
18357
|
},
|
|
18358
|
+
color: {
|
|
18359
|
+
classPropertyName: "color",
|
|
18360
|
+
publicName: "color",
|
|
18361
|
+
isSignal: true,
|
|
18362
|
+
isRequired: false,
|
|
18363
|
+
transformFunction: null
|
|
18364
|
+
},
|
|
18044
18365
|
strong: {
|
|
18045
18366
|
classPropertyName: "strong",
|
|
18046
18367
|
publicName: "strong",
|
|
@@ -18057,9 +18378,9 @@ var TextComponent = class TextComponent {
|
|
|
18057
18378
|
}
|
|
18058
18379
|
},
|
|
18059
18380
|
ngImport: i0,
|
|
18060
|
-
template: `<div class="tx" [class.tx-muted]="tone() === 'muted'" [style.font-size]="fontSize()" [style.font-weight]="fontWeight()">{{ segments().length ? '' : text() }}@for (s of segments(); track $index) {@if (s.strong) {<strong>{{ s.text }}</strong>} @else {<ng-container>{{ s.text }}</ng-container>}}</div>`,
|
|
18381
|
+
template: `<div class="tx" [class.tx-muted]="tone() === 'muted'" [class.tx-accent]="tone() === 'accent'" [style.color]="color() || null" [style.font-size]="fontSize()" [style.font-weight]="fontWeight()">{{ segments().length ? '' : text() }}@for (s of segments(); track $index) {@if (s.strong) {<strong>{{ s.text }}</strong>} @else {<ng-container>{{ s.text }}</ng-container>}}</div>`,
|
|
18061
18382
|
isInline: true,
|
|
18062
|
-
styles: [":host{display:block;min-width:0}.tx{margin:0;line-height:1.5;color:#1f2937;white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-word;-webkit-user-select:text;user-select:text}.tx-muted{color:#64748b}.tx strong{font-weight:700}\n"],
|
|
18383
|
+
styles: [":host{display:block;min-width:0}.tx{margin:0;line-height:1.5;color:#1f2937;white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-word;-webkit-user-select:text;user-select:text}.tx-muted{color:#64748b}.tx-accent{color:var(--ui-accent, #2563eb)}.tx strong{font-weight:700}\n"],
|
|
18063
18384
|
changeDetection: i0.ChangeDetectionStrategy.OnPush
|
|
18064
18385
|
});
|
|
18065
18386
|
}
|
|
@@ -18075,8 +18396,8 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
18075
18396
|
selector: "ui-text",
|
|
18076
18397
|
standalone: true,
|
|
18077
18398
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
18078
|
-
template: `<div class="tx" [class.tx-muted]="tone() === 'muted'" [style.font-size]="fontSize()" [style.font-weight]="fontWeight()">{{ segments().length ? '' : text() }}@for (s of segments(); track $index) {@if (s.strong) {<strong>{{ s.text }}</strong>} @else {<ng-container>{{ s.text }}</ng-container>}}</div>`,
|
|
18079
|
-
styles: [":host{display:block;min-width:0}.tx{margin:0;line-height:1.5;color:#1f2937;white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-word;-webkit-user-select:text;user-select:text}.tx-muted{color:#64748b}.tx strong{font-weight:700}\n"]
|
|
18399
|
+
template: `<div class="tx" [class.tx-muted]="tone() === 'muted'" [class.tx-accent]="tone() === 'accent'" [style.color]="color() || null" [style.font-size]="fontSize()" [style.font-weight]="fontWeight()">{{ segments().length ? '' : text() }}@for (s of segments(); track $index) {@if (s.strong) {<strong>{{ s.text }}</strong>} @else {<ng-container>{{ s.text }}</ng-container>}}</div>`,
|
|
18400
|
+
styles: [":host{display:block;min-width:0}.tx{margin:0;line-height:1.5;color:#1f2937;white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-word;-webkit-user-select:text;user-select:text}.tx-muted{color:#64748b}.tx-accent{color:var(--ui-accent, #2563eb)}.tx strong{font-weight:700}\n"]
|
|
18080
18401
|
}]
|
|
18081
18402
|
}],
|
|
18082
18403
|
propDecorators: {
|
|
@@ -18104,6 +18425,14 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
18104
18425
|
required: false
|
|
18105
18426
|
}]
|
|
18106
18427
|
}],
|
|
18428
|
+
color: [{
|
|
18429
|
+
type: i0.Input,
|
|
18430
|
+
args: [{
|
|
18431
|
+
isSignal: true,
|
|
18432
|
+
alias: "color",
|
|
18433
|
+
required: false
|
|
18434
|
+
}]
|
|
18435
|
+
}],
|
|
18107
18436
|
strong: [{
|
|
18108
18437
|
type: i0.Input,
|
|
18109
18438
|
args: [{
|
|
@@ -21555,6 +21884,7 @@ var MultiSelectComponent = class MultiSelectComponent {
|
|
|
21555
21884
|
"label",
|
|
21556
21885
|
"ariaLabel",
|
|
21557
21886
|
"testId",
|
|
21887
|
+
"labelTestId",
|
|
21558
21888
|
"headingLevel",
|
|
21559
21889
|
"indeterminate",
|
|
21560
21890
|
"checked",
|
|
@@ -21883,6 +22213,7 @@ var DiscountSelectorComponent = class DiscountSelectorComponent {
|
|
|
21883
22213
|
"label",
|
|
21884
22214
|
"ariaLabel",
|
|
21885
22215
|
"testId",
|
|
22216
|
+
"labelTestId",
|
|
21886
22217
|
"headingLevel",
|
|
21887
22218
|
"indeterminate",
|
|
21888
22219
|
"checked",
|
|
@@ -22412,12 +22743,37 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
22412
22743
|
}]
|
|
22413
22744
|
}
|
|
22414
22745
|
});
|
|
22746
|
+
const FOCUSABLE = "input:not([type=\"hidden\"]), select, textarea, button, [tabindex]:not([tabindex=\"-1\"]), [contenteditable=\"true\"]";
|
|
22415
22747
|
var FormComponent = class FormComponent {
|
|
22416
22748
|
constructor() {
|
|
22417
22749
|
this.ariaLabel = input("", ...ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []);
|
|
22418
22750
|
this.ariaLabelledby = input("", ...ngDevMode ? [{ debugName: "ariaLabelledby" }] : /* istanbul ignore next */ []);
|
|
22419
22751
|
this.autocomplete = input("", ...ngDevMode ? [{ debugName: "autocomplete" }] : /* istanbul ignore next */ []);
|
|
22420
22752
|
this.submitted = output();
|
|
22753
|
+
this._host = inject(ElementRef);
|
|
22754
|
+
}
|
|
22755
|
+
static _usable(el) {
|
|
22756
|
+
if (el.matches(":disabled")) return false;
|
|
22757
|
+
if (el.getClientRects().length === 0) return false;
|
|
22758
|
+
const style = typeof getComputedStyle === "function" ? getComputedStyle(el) : null;
|
|
22759
|
+
return !style || style.visibility !== "hidden" && style.display !== "none";
|
|
22760
|
+
}
|
|
22761
|
+
invalidFields() {
|
|
22762
|
+
const found = [];
|
|
22763
|
+
for (const marked of Array.from(this._host.nativeElement.querySelectorAll("[aria-invalid=\"true\"]"))) {
|
|
22764
|
+
let target;
|
|
22765
|
+
if (marked.matches(FOCUSABLE)) target = FormComponent._usable(marked) ? marked : void 0;
|
|
22766
|
+
else target = Array.from(marked.querySelectorAll(FOCUSABLE)).find((c) => FormComponent._usable(c));
|
|
22767
|
+
if (target && !found.includes(target)) found.push(target);
|
|
22768
|
+
}
|
|
22769
|
+
return found;
|
|
22770
|
+
}
|
|
22771
|
+
focusFirstInvalid(options = {}) {
|
|
22772
|
+
const first = this.invalidFields()[0];
|
|
22773
|
+
if (!first) return false;
|
|
22774
|
+
if (options.scroll !== false && typeof first.scrollIntoView === "function") first.scrollIntoView({ block: "center" });
|
|
22775
|
+
first.focus({ preventScroll: true });
|
|
22776
|
+
return first.ownerDocument.activeElement === first;
|
|
22421
22777
|
}
|
|
22422
22778
|
onSubmit(event) {
|
|
22423
22779
|
event.preventDefault();
|
|
@@ -23666,9 +24022,12 @@ var ListComponent = class ListComponent {
|
|
|
23666
24022
|
"routerLink",
|
|
23667
24023
|
"queryParams",
|
|
23668
24024
|
"fragment",
|
|
24025
|
+
"state",
|
|
23669
24026
|
"href",
|
|
23670
24027
|
"target",
|
|
23671
24028
|
"rel",
|
|
24029
|
+
"shortLabel",
|
|
24030
|
+
"shortBelow",
|
|
23672
24031
|
"color",
|
|
23673
24032
|
"active",
|
|
23674
24033
|
"size",
|
|
@@ -24971,9 +25330,12 @@ var QrCodeComponent = class QrCodeComponent {
|
|
|
24971
25330
|
"routerLink",
|
|
24972
25331
|
"queryParams",
|
|
24973
25332
|
"fragment",
|
|
25333
|
+
"state",
|
|
24974
25334
|
"href",
|
|
24975
25335
|
"target",
|
|
24976
25336
|
"rel",
|
|
25337
|
+
"shortLabel",
|
|
25338
|
+
"shortBelow",
|
|
24977
25339
|
"color",
|
|
24978
25340
|
"active",
|
|
24979
25341
|
"size",
|
|
@@ -25279,9 +25641,12 @@ var PanelInfoListComponent = class PanelInfoListComponent {
|
|
|
25279
25641
|
"routerLink",
|
|
25280
25642
|
"queryParams",
|
|
25281
25643
|
"fragment",
|
|
25644
|
+
"state",
|
|
25282
25645
|
"href",
|
|
25283
25646
|
"target",
|
|
25284
25647
|
"rel",
|
|
25648
|
+
"shortLabel",
|
|
25649
|
+
"shortBelow",
|
|
25285
25650
|
"color",
|
|
25286
25651
|
"active",
|
|
25287
25652
|
"size",
|
|
@@ -27166,6 +27531,7 @@ var ImageComponent = class ImageComponent {
|
|
|
27166
27531
|
this.height = input("", ...ngDevMode ? [{ debugName: "height" }] : /* istanbul ignore next */ []);
|
|
27167
27532
|
this.maxWidth = input("100%", ...ngDevMode ? [{ debugName: "maxWidth" }] : /* istanbul ignore next */ []);
|
|
27168
27533
|
this.maxHeight = input("", ...ngDevMode ? [{ debugName: "maxHeight" }] : /* istanbul ignore next */ []);
|
|
27534
|
+
this.minHeight = input("", ...ngDevMode ? [{ debugName: "minHeight" }] : /* istanbul ignore next */ []);
|
|
27169
27535
|
this.aspectRatio = input("", ...ngDevMode ? [{ debugName: "aspectRatio" }] : /* istanbul ignore next */ []);
|
|
27170
27536
|
this.radius = input("none", ...ngDevMode ? [{ debugName: "radius" }] : /* istanbul ignore next */ []);
|
|
27171
27537
|
this.bordered = input(false, ...ngDevMode ? [{ debugName: "bordered" }] : /* istanbul ignore next */ []);
|
|
@@ -27260,6 +27626,13 @@ var ImageComponent = class ImageComponent {
|
|
|
27260
27626
|
isRequired: false,
|
|
27261
27627
|
transformFunction: null
|
|
27262
27628
|
},
|
|
27629
|
+
minHeight: {
|
|
27630
|
+
classPropertyName: "minHeight",
|
|
27631
|
+
publicName: "minHeight",
|
|
27632
|
+
isSignal: true,
|
|
27633
|
+
isRequired: false,
|
|
27634
|
+
transformFunction: null
|
|
27635
|
+
},
|
|
27263
27636
|
aspectRatio: {
|
|
27264
27637
|
classPropertyName: "aspectRatio",
|
|
27265
27638
|
publicName: "aspectRatio",
|
|
@@ -27323,12 +27696,12 @@ var ImageComponent = class ImageComponent {
|
|
|
27323
27696
|
@if (_url() && !_failed()) {
|
|
27324
27697
|
<img class="im-img" [src]="_url()" [attr.alt]="alt()" [attr.loading]="priority() ? 'eager' : 'lazy'"
|
|
27325
27698
|
[attr.fetchpriority]="priority() ? 'high' : null" decoding="async"
|
|
27326
|
-
[style.width]="imgWidth()" [style.height]="imgHeight()" [style.max-width]="maxWidth()" [style.max-height]="maxHeight() || null"
|
|
27699
|
+
[style.width]="imgWidth()" [style.height]="imgHeight()" [style.max-width]="maxWidth()" [style.max-height]="maxHeight() || null" [style.min-height]="minHeight() || null"
|
|
27327
27700
|
[style.aspect-ratio]="aspectRatio() || null" [style.object-fit]="fit()" [style.border-radius]="radiusCss()"
|
|
27328
27701
|
[class.im-bordered]="bordered()" (load)="loaded.emit()" (error)="_onError()" />
|
|
27329
27702
|
} @else if (placeholder()) {
|
|
27330
27703
|
<span class="im-ph" [class.im-bordered]="bordered()" [attr.role]="alt() ? 'img' : null" [attr.aria-label]="alt() || null" [attr.aria-hidden]="alt() ? null : 'true'"
|
|
27331
|
-
[style.width]="boxWidth()" [style.height]="boxHeight()" [style.max-width]="maxWidth()" [style.max-height]="maxHeight() || null"
|
|
27704
|
+
[style.width]="boxWidth()" [style.height]="boxHeight()" [style.max-width]="maxWidth()" [style.max-height]="maxHeight() || null" [style.min-height]="minHeight() || null"
|
|
27332
27705
|
[style.aspect-ratio]="aspectRatio() || null" [style.border-radius]="radiusCss()">
|
|
27333
27706
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="4" width="18" height="16" rx="2"/><circle cx="9" cy="10" r="1.8"/><path d="M21 16l-5-5-8 9"/></svg>
|
|
27334
27707
|
</span>
|
|
@@ -27359,12 +27732,12 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
27359
27732
|
@if (_url() && !_failed()) {
|
|
27360
27733
|
<img class="im-img" [src]="_url()" [attr.alt]="alt()" [attr.loading]="priority() ? 'eager' : 'lazy'"
|
|
27361
27734
|
[attr.fetchpriority]="priority() ? 'high' : null" decoding="async"
|
|
27362
|
-
[style.width]="imgWidth()" [style.height]="imgHeight()" [style.max-width]="maxWidth()" [style.max-height]="maxHeight() || null"
|
|
27735
|
+
[style.width]="imgWidth()" [style.height]="imgHeight()" [style.max-width]="maxWidth()" [style.max-height]="maxHeight() || null" [style.min-height]="minHeight() || null"
|
|
27363
27736
|
[style.aspect-ratio]="aspectRatio() || null" [style.object-fit]="fit()" [style.border-radius]="radiusCss()"
|
|
27364
27737
|
[class.im-bordered]="bordered()" (load)="loaded.emit()" (error)="_onError()" />
|
|
27365
27738
|
} @else if (placeholder()) {
|
|
27366
27739
|
<span class="im-ph" [class.im-bordered]="bordered()" [attr.role]="alt() ? 'img' : null" [attr.aria-label]="alt() || null" [attr.aria-hidden]="alt() ? null : 'true'"
|
|
27367
|
-
[style.width]="boxWidth()" [style.height]="boxHeight()" [style.max-width]="maxWidth()" [style.max-height]="maxHeight() || null"
|
|
27740
|
+
[style.width]="boxWidth()" [style.height]="boxHeight()" [style.max-width]="maxWidth()" [style.max-height]="maxHeight() || null" [style.min-height]="minHeight() || null"
|
|
27368
27741
|
[style.aspect-ratio]="aspectRatio() || null" [style.border-radius]="radiusCss()">
|
|
27369
27742
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="4" width="18" height="16" rx="2"/><circle cx="9" cy="10" r="1.8"/><path d="M21 16l-5-5-8 9"/></svg>
|
|
27370
27743
|
</span>
|
|
@@ -27431,6 +27804,14 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
27431
27804
|
required: false
|
|
27432
27805
|
}]
|
|
27433
27806
|
}],
|
|
27807
|
+
minHeight: [{
|
|
27808
|
+
type: i0.Input,
|
|
27809
|
+
args: [{
|
|
27810
|
+
isSignal: true,
|
|
27811
|
+
alias: "minHeight",
|
|
27812
|
+
required: false
|
|
27813
|
+
}]
|
|
27814
|
+
}],
|
|
27434
27815
|
aspectRatio: [{
|
|
27435
27816
|
type: i0.Input,
|
|
27436
27817
|
args: [{
|
|
@@ -27621,6 +28002,7 @@ var ImageGalleryComponent = class ImageGalleryComponent {
|
|
|
27621
28002
|
this.maxHeight = input("70vh", ...ngDevMode ? [{ debugName: "maxHeight" }] : /* istanbul ignore next */ []);
|
|
27622
28003
|
this.fit = input("contain", ...ngDevMode ? [{ debugName: "fit" }] : /* istanbul ignore next */ []);
|
|
27623
28004
|
this.ariaLabel = input("Image gallery", ...ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []);
|
|
28005
|
+
this.autofocus = input(false, ...ngDevMode ? [{ debugName: "autofocus" }] : /* istanbul ignore next */ []);
|
|
27624
28006
|
this.count = computed(() => this.images().length, ...ngDevMode ? [{ debugName: "count" }] : /* istanbul ignore next */ []);
|
|
27625
28007
|
this.position = computed(() => {
|
|
27626
28008
|
const n = this.count();
|
|
@@ -27629,6 +28011,8 @@ var ImageGalleryComponent = class ImageGalleryComponent {
|
|
|
27629
28011
|
}, ...ngDevMode ? [{ debugName: "position" }] : /* istanbul ignore next */ []);
|
|
27630
28012
|
this.current = computed(() => this.images()[this.position()] ?? { src: "" }, ...ngDevMode ? [{ debugName: "current" }] : /* istanbul ignore next */ []);
|
|
27631
28013
|
this.currentAlt = computed(() => this.current().alt ?? `Image ${this.position() + 1} of ${this.count()}`, ...ngDevMode ? [{ debugName: "currentAlt" }] : /* istanbul ignore next */ []);
|
|
28014
|
+
this.autofocusNext = computed(() => this.autofocus() && this.canNext(), ...ngDevMode ? [{ debugName: "autofocusNext" }] : /* istanbul ignore next */ []);
|
|
28015
|
+
this.autofocusPrev = computed(() => this.autofocus() && !this.canNext() && this.canPrev(), ...ngDevMode ? [{ debugName: "autofocusPrev" }] : /* istanbul ignore next */ []);
|
|
27632
28016
|
this.canPrev = computed(() => this.count() > 1 && (this.loop() || this.position() > 0), ...ngDevMode ? [{ debugName: "canPrev" }] : /* istanbul ignore next */ []);
|
|
27633
28017
|
this.canNext = computed(() => this.count() > 1 && (this.loop() || this.position() < this.count() - 1), ...ngDevMode ? [{ debugName: "canNext" }] : /* istanbul ignore next */ []);
|
|
27634
28018
|
this.announcement = computed(() => this.count() > 1 ? `Image ${this.position() + 1} of ${this.count()}${this.current().alt ? ": " + this.current().alt : ""}` : "", ...ngDevMode ? [{ debugName: "announcement" }] : /* istanbul ignore next */ []);
|
|
@@ -27739,6 +28123,13 @@ var ImageGalleryComponent = class ImageGalleryComponent {
|
|
|
27739
28123
|
isSignal: true,
|
|
27740
28124
|
isRequired: false,
|
|
27741
28125
|
transformFunction: null
|
|
28126
|
+
},
|
|
28127
|
+
autofocus: {
|
|
28128
|
+
classPropertyName: "autofocus",
|
|
28129
|
+
publicName: "autofocus",
|
|
28130
|
+
isSignal: true,
|
|
28131
|
+
isRequired: false,
|
|
28132
|
+
transformFunction: null
|
|
27742
28133
|
}
|
|
27743
28134
|
},
|
|
27744
28135
|
outputs: { index: "indexChange" },
|
|
@@ -27748,13 +28139,13 @@ var ImageGalleryComponent = class ImageGalleryComponent {
|
|
|
27748
28139
|
<div class="ig" role="group" aria-roledescription="carousel" [attr.aria-label]="ariaLabel()" (keydown)="onKey($event)">
|
|
27749
28140
|
<div class="ig-stage">
|
|
27750
28141
|
@if (count() > 1) {
|
|
27751
|
-
<ui-button class="ig-nav ig-prev" variant="secondary" size="sm" ariaLabel="Previous image" [disabled]="!canPrev()" (click)="prev()" data-testid="gallery-prev">
|
|
28142
|
+
<ui-button class="ig-nav ig-prev" variant="secondary" size="sm" ariaLabel="Previous image" [disabled]="!canPrev()" [attr.data-autofocus]="autofocusPrev() ? '' : null" (click)="prev()" data-testid="gallery-prev">
|
|
27752
28143
|
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M15 18l-6-6 6-6"/></svg>
|
|
27753
28144
|
</ui-button>
|
|
27754
28145
|
}
|
|
27755
28146
|
<ui-image class="ig-img" [src]="current().src" [alt]="currentAlt()" [fit]="fit()" width="100%" [maxHeight]="maxHeight()" [aspectRatio]="aspectRatio()" data-testid="gallery-image" />
|
|
27756
28147
|
@if (count() > 1) {
|
|
27757
|
-
<ui-button class="ig-nav ig-next" variant="secondary" size="sm" ariaLabel="Next image" [disabled]="!canNext()" (click)="next()" data-testid="gallery-next">
|
|
28148
|
+
<ui-button class="ig-nav ig-next" variant="secondary" size="sm" ariaLabel="Next image" [disabled]="!canNext()" [attr.data-autofocus]="autofocusNext() ? '' : null" (click)="next()" data-testid="gallery-next">
|
|
27758
28149
|
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9 18l6-6-6-6"/></svg>
|
|
27759
28150
|
</ui-button>
|
|
27760
28151
|
}
|
|
@@ -27788,9 +28179,12 @@ var ImageGalleryComponent = class ImageGalleryComponent {
|
|
|
27788
28179
|
"routerLink",
|
|
27789
28180
|
"queryParams",
|
|
27790
28181
|
"fragment",
|
|
28182
|
+
"state",
|
|
27791
28183
|
"href",
|
|
27792
28184
|
"target",
|
|
27793
28185
|
"rel",
|
|
28186
|
+
"shortLabel",
|
|
28187
|
+
"shortBelow",
|
|
27794
28188
|
"color",
|
|
27795
28189
|
"active",
|
|
27796
28190
|
"size",
|
|
@@ -27818,6 +28212,7 @@ var ImageGalleryComponent = class ImageGalleryComponent {
|
|
|
27818
28212
|
"height",
|
|
27819
28213
|
"maxWidth",
|
|
27820
28214
|
"maxHeight",
|
|
28215
|
+
"minHeight",
|
|
27821
28216
|
"aspectRatio",
|
|
27822
28217
|
"radius",
|
|
27823
28218
|
"bordered",
|
|
@@ -27865,13 +28260,13 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
27865
28260
|
<div class="ig" role="group" aria-roledescription="carousel" [attr.aria-label]="ariaLabel()" (keydown)="onKey($event)">
|
|
27866
28261
|
<div class="ig-stage">
|
|
27867
28262
|
@if (count() > 1) {
|
|
27868
|
-
<ui-button class="ig-nav ig-prev" variant="secondary" size="sm" ariaLabel="Previous image" [disabled]="!canPrev()" (click)="prev()" data-testid="gallery-prev">
|
|
28263
|
+
<ui-button class="ig-nav ig-prev" variant="secondary" size="sm" ariaLabel="Previous image" [disabled]="!canPrev()" [attr.data-autofocus]="autofocusPrev() ? '' : null" (click)="prev()" data-testid="gallery-prev">
|
|
27869
28264
|
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M15 18l-6-6 6-6"/></svg>
|
|
27870
28265
|
</ui-button>
|
|
27871
28266
|
}
|
|
27872
28267
|
<ui-image class="ig-img" [src]="current().src" [alt]="currentAlt()" [fit]="fit()" width="100%" [maxHeight]="maxHeight()" [aspectRatio]="aspectRatio()" data-testid="gallery-image" />
|
|
27873
28268
|
@if (count() > 1) {
|
|
27874
|
-
<ui-button class="ig-nav ig-next" variant="secondary" size="sm" ariaLabel="Next image" [disabled]="!canNext()" (click)="next()" data-testid="gallery-next">
|
|
28269
|
+
<ui-button class="ig-nav ig-next" variant="secondary" size="sm" ariaLabel="Next image" [disabled]="!canNext()" [attr.data-autofocus]="autofocusNext() ? '' : null" (click)="next()" data-testid="gallery-next">
|
|
27875
28270
|
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9 18l6-6-6-6"/></svg>
|
|
27876
28271
|
</ui-button>
|
|
27877
28272
|
}
|
|
@@ -27971,6 +28366,14 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
27971
28366
|
alias: "ariaLabel",
|
|
27972
28367
|
required: false
|
|
27973
28368
|
}]
|
|
28369
|
+
}],
|
|
28370
|
+
autofocus: [{
|
|
28371
|
+
type: i0.Input,
|
|
28372
|
+
args: [{
|
|
28373
|
+
isSignal: true,
|
|
28374
|
+
alias: "autofocus",
|
|
28375
|
+
required: false
|
|
28376
|
+
}]
|
|
27974
28377
|
}]
|
|
27975
28378
|
}
|
|
27976
28379
|
});
|
|
@@ -28665,9 +29068,12 @@ var DateRangePickerComponent = class DateRangePickerComponent {
|
|
|
28665
29068
|
"routerLink",
|
|
28666
29069
|
"queryParams",
|
|
28667
29070
|
"fragment",
|
|
29071
|
+
"state",
|
|
28668
29072
|
"href",
|
|
28669
29073
|
"target",
|
|
28670
29074
|
"rel",
|
|
29075
|
+
"shortLabel",
|
|
29076
|
+
"shortBelow",
|
|
28671
29077
|
"color",
|
|
28672
29078
|
"active",
|
|
28673
29079
|
"size",
|
|
@@ -31147,9 +31553,12 @@ var SignaturePadComponent = class SignaturePadComponent {
|
|
|
31147
31553
|
"routerLink",
|
|
31148
31554
|
"queryParams",
|
|
31149
31555
|
"fragment",
|
|
31556
|
+
"state",
|
|
31150
31557
|
"href",
|
|
31151
31558
|
"target",
|
|
31152
31559
|
"rel",
|
|
31560
|
+
"shortLabel",
|
|
31561
|
+
"shortBelow",
|
|
31153
31562
|
"color",
|
|
31154
31563
|
"active",
|
|
31155
31564
|
"size",
|
|
@@ -31643,6 +32052,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
31643
32052
|
}]
|
|
31644
32053
|
}
|
|
31645
32054
|
});
|
|
32055
|
+
const SELECT_IGNORE = "button, a[href], input, select, textarea, label, [role=button], [role=link], [data-no-select]";
|
|
31646
32056
|
var DetailCardComponent = class DetailCardComponent {
|
|
31647
32057
|
constructor() {
|
|
31648
32058
|
this.title = input("", ...ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []);
|
|
@@ -31652,6 +32062,7 @@ var DetailCardComponent = class DetailCardComponent {
|
|
|
31652
32062
|
this.ariaLabel = input("", ...ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []);
|
|
31653
32063
|
this.subtitle = input("", ...ngDevMode ? [{ debugName: "subtitle" }] : /* istanbul ignore next */ []);
|
|
31654
32064
|
this.background = input("", ...ngDevMode ? [{ debugName: "background" }] : /* istanbul ignore next */ []);
|
|
32065
|
+
this.headerBackground = input("", ...ngDevMode ? [{ debugName: "headerBackground" }] : /* istanbul ignore next */ []);
|
|
31655
32066
|
this.textColor = input("", ...ngDevMode ? [{ debugName: "textColor" }] : /* istanbul ignore next */ []);
|
|
31656
32067
|
this.showHeader = input(true, ...ngDevMode ? [{ debugName: "showHeader" }] : /* istanbul ignore next */ []);
|
|
31657
32068
|
this.collapsible = input(true, ...ngDevMode ? [{ debugName: "collapsible" }] : /* istanbul ignore next */ []);
|
|
@@ -31659,8 +32070,14 @@ var DetailCardComponent = class DetailCardComponent {
|
|
|
31659
32070
|
this.showEdit = input(false, ...ngDevMode ? [{ debugName: "showEdit" }] : /* istanbul ignore next */ []);
|
|
31660
32071
|
this.editLabel = input("Edit", ...ngDevMode ? [{ debugName: "editLabel" }] : /* istanbul ignore next */ []);
|
|
31661
32072
|
this.editClick = output();
|
|
32073
|
+
this.editTestId = input("", ...ngDevMode ? [{ debugName: "editTestId" }] : /* istanbul ignore next */ []);
|
|
32074
|
+
this.editIcon = input(true, ...ngDevMode ? [{ debugName: "editIcon" }] : /* istanbul ignore next */ []);
|
|
31662
32075
|
this.editAriaLabel = input("", ...ngDevMode ? [{ debugName: "editAriaLabel" }] : /* istanbul ignore next */ []);
|
|
31663
32076
|
this.fill = input(false, ...ngDevMode ? [{ debugName: "fill" }] : /* istanbul ignore next */ []);
|
|
32077
|
+
this.selectable = input(false, ...ngDevMode ? [{ debugName: "selectable" }] : /* istanbul ignore next */ []);
|
|
32078
|
+
this.selected = model(false, ...ngDevMode ? [{ debugName: "selected" }] : /* istanbul ignore next */ []);
|
|
32079
|
+
this.selectedColor = input("#3b82f6", ...ngDevMode ? [{ debugName: "selectedColor" }] : /* istanbul ignore next */ []);
|
|
32080
|
+
this.selectedBackground = input("", ...ngDevMode ? [{ debugName: "selectedBackground" }] : /* istanbul ignore next */ []);
|
|
31664
32081
|
}
|
|
31665
32082
|
groupLabel() {
|
|
31666
32083
|
if (this.showHeader() && this.title()) return this.titleId() ? null : this.title();
|
|
@@ -31669,6 +32086,17 @@ var DetailCardComponent = class DetailCardComponent {
|
|
|
31669
32086
|
isOpen() {
|
|
31670
32087
|
return !(this.showHeader() && this.collapsible()) || this.expanded();
|
|
31671
32088
|
}
|
|
32089
|
+
onCardClick(event) {
|
|
32090
|
+
if (!this.selectable()) return;
|
|
32091
|
+
const card = event.currentTarget;
|
|
32092
|
+
const target = event.target;
|
|
32093
|
+
if (!card || !target || typeof target.closest !== "function") return;
|
|
32094
|
+
const control = target.closest(SELECT_IGNORE);
|
|
32095
|
+
if (control && card.contains(control)) return;
|
|
32096
|
+
const sel = card.ownerDocument.defaultView?.getSelection?.();
|
|
32097
|
+
if (sel && !sel.isCollapsed && sel.toString() !== "" && (card.contains(sel.anchorNode) || card.contains(sel.focusNode))) return;
|
|
32098
|
+
this.selected.set(!this.selected());
|
|
32099
|
+
}
|
|
31672
32100
|
toggle() {
|
|
31673
32101
|
this.expanded.set(!this.expanded());
|
|
31674
32102
|
}
|
|
@@ -31744,6 +32172,13 @@ var DetailCardComponent = class DetailCardComponent {
|
|
|
31744
32172
|
isRequired: false,
|
|
31745
32173
|
transformFunction: null
|
|
31746
32174
|
},
|
|
32175
|
+
headerBackground: {
|
|
32176
|
+
classPropertyName: "headerBackground",
|
|
32177
|
+
publicName: "headerBackground",
|
|
32178
|
+
isSignal: true,
|
|
32179
|
+
isRequired: false,
|
|
32180
|
+
transformFunction: null
|
|
32181
|
+
},
|
|
31747
32182
|
textColor: {
|
|
31748
32183
|
classPropertyName: "textColor",
|
|
31749
32184
|
publicName: "textColor",
|
|
@@ -31786,6 +32221,20 @@ var DetailCardComponent = class DetailCardComponent {
|
|
|
31786
32221
|
isRequired: false,
|
|
31787
32222
|
transformFunction: null
|
|
31788
32223
|
},
|
|
32224
|
+
editTestId: {
|
|
32225
|
+
classPropertyName: "editTestId",
|
|
32226
|
+
publicName: "editTestId",
|
|
32227
|
+
isSignal: true,
|
|
32228
|
+
isRequired: false,
|
|
32229
|
+
transformFunction: null
|
|
32230
|
+
},
|
|
32231
|
+
editIcon: {
|
|
32232
|
+
classPropertyName: "editIcon",
|
|
32233
|
+
publicName: "editIcon",
|
|
32234
|
+
isSignal: true,
|
|
32235
|
+
isRequired: false,
|
|
32236
|
+
transformFunction: null
|
|
32237
|
+
},
|
|
31789
32238
|
editAriaLabel: {
|
|
31790
32239
|
classPropertyName: "editAriaLabel",
|
|
31791
32240
|
publicName: "editAriaLabel",
|
|
@@ -31799,25 +32248,58 @@ var DetailCardComponent = class DetailCardComponent {
|
|
|
31799
32248
|
isSignal: true,
|
|
31800
32249
|
isRequired: false,
|
|
31801
32250
|
transformFunction: null
|
|
32251
|
+
},
|
|
32252
|
+
selectable: {
|
|
32253
|
+
classPropertyName: "selectable",
|
|
32254
|
+
publicName: "selectable",
|
|
32255
|
+
isSignal: true,
|
|
32256
|
+
isRequired: false,
|
|
32257
|
+
transformFunction: null
|
|
32258
|
+
},
|
|
32259
|
+
selected: {
|
|
32260
|
+
classPropertyName: "selected",
|
|
32261
|
+
publicName: "selected",
|
|
32262
|
+
isSignal: true,
|
|
32263
|
+
isRequired: false,
|
|
32264
|
+
transformFunction: null
|
|
32265
|
+
},
|
|
32266
|
+
selectedColor: {
|
|
32267
|
+
classPropertyName: "selectedColor",
|
|
32268
|
+
publicName: "selectedColor",
|
|
32269
|
+
isSignal: true,
|
|
32270
|
+
isRequired: false,
|
|
32271
|
+
transformFunction: null
|
|
32272
|
+
},
|
|
32273
|
+
selectedBackground: {
|
|
32274
|
+
classPropertyName: "selectedBackground",
|
|
32275
|
+
publicName: "selectedBackground",
|
|
32276
|
+
isSignal: true,
|
|
32277
|
+
isRequired: false,
|
|
32278
|
+
transformFunction: null
|
|
31802
32279
|
}
|
|
31803
32280
|
},
|
|
31804
32281
|
outputs: {
|
|
31805
32282
|
expanded: "expandedChange",
|
|
31806
|
-
editClick: "editClick"
|
|
32283
|
+
editClick: "editClick",
|
|
32284
|
+
selected: "selectedChange"
|
|
31807
32285
|
},
|
|
31808
32286
|
host: {
|
|
31809
32287
|
attributes: { "role": "group" },
|
|
31810
32288
|
properties: {
|
|
31811
32289
|
"class.dc-fill-host": "fill()",
|
|
32290
|
+
"attr.data-selected": "selectable() && selected() ? \"true\" : null",
|
|
31812
32291
|
"attr.aria-labelledby": "showHeader() && title() && titleId() ? titleId() : null",
|
|
31813
32292
|
"attr.aria-label": "groupLabel()"
|
|
31814
32293
|
}
|
|
31815
32294
|
},
|
|
31816
32295
|
ngImport: i0,
|
|
31817
32296
|
template: `
|
|
31818
|
-
<div class="dc" [class.dc-fill]="fill()" [class.dc-has-text-color]="!!textColor()" [
|
|
32297
|
+
<div class="dc" [class.dc-fill]="fill()" [class.dc-has-text-color]="!!textColor()" [class.dc-selectable]="selectable()" [class.dc-selected]="selectable() && selected()"
|
|
32298
|
+
[style.outline-color]="selectable() && selected() ? selectedColor() : null"
|
|
32299
|
+
[style.background]="(selectable() && selected() && selectedBackground()) || background() || null" (click)="onCardClick($event)"
|
|
32300
|
+
[style.color]="textColor() || null" [style.--dc-text]="textColor() || null">
|
|
31819
32301
|
@if (showHeader()) {
|
|
31820
|
-
<div class="dc-header" [class.collapsible]="collapsible()" [class.open]="isOpen()" (click)="onHeaderClick($event)">
|
|
32302
|
+
<div class="dc-header" [class.collapsible]="collapsible()" [class.open]="isOpen()" [style.background]="headerBackground() || null" (click)="onHeaderClick($event)">
|
|
31821
32303
|
@if (collapsible()) {
|
|
31822
32304
|
<ui-button class="dc-chevron" variant="icon" size="sm"
|
|
31823
32305
|
[ariaLabel]="title() || 'Toggle section'"
|
|
@@ -31836,11 +32318,13 @@ var DetailCardComponent = class DetailCardComponent {
|
|
|
31836
32318
|
<ng-content select="[card-header]" />
|
|
31837
32319
|
</div>
|
|
31838
32320
|
@if (showEdit()) {
|
|
31839
|
-
<ui-button class="dc-edit" variant="secondary" size="xs" [ariaLabel]="editAriaLabel() || undefined" (click)="$event.stopPropagation(); editClick.emit()">
|
|
32321
|
+
<ui-button class="dc-edit" variant="secondary" size="xs" [ariaLabel]="editAriaLabel() || undefined" [attr.data-testid]="editTestId() || null" (click)="$event.stopPropagation(); editClick.emit()">
|
|
32322
|
+
@if (editIcon()) {
|
|
31840
32323
|
<svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true">
|
|
31841
32324
|
<path d="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"/>
|
|
31842
32325
|
<path d="M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"/>
|
|
31843
32326
|
</svg>
|
|
32327
|
+
}
|
|
31844
32328
|
{{ editLabel() }}
|
|
31845
32329
|
</ui-button>
|
|
31846
32330
|
}
|
|
@@ -31855,7 +32339,7 @@ var DetailCardComponent = class DetailCardComponent {
|
|
|
31855
32339
|
</div>
|
|
31856
32340
|
`,
|
|
31857
32341
|
isInline: true,
|
|
31858
|
-
styles: [":host{display:block;margin-bottom:16px}:host(:last-child){margin-bottom:0}:host(.dc-fill-host){height:100
|
|
32342
|
+
styles: [":host{display:block;margin-bottom:16px}:host(:last-child){margin-bottom:0}:host(.dc-fill-host){height:100%;margin-bottom:0}.dc.dc-fill{height:100%;box-sizing:border-box;display:flex;flex-direction:column}.dc.dc-fill .dc-body-wrap{flex:1 1 auto;min-height:0}.dc-selectable{cursor:pointer}.dc-selected{outline:2px solid #3b82f6;outline-offset:-1px}.dc{background:#fff;border:1px solid #e2e8f0;border-radius:10px;overflow:hidden}.dc-header{display:flex;align-items:center;flex-wrap:wrap;gap:8px 10px;padding:14px 18px}.dc-header.open{border-bottom:1px solid #f1f5f9}.dc-header.collapsible{cursor:pointer;-webkit-user-select:none;user-select:none}@media(hover:hover){.dc-header.collapsible:hover{background:#f8fafc}}.dc-chevron{flex-shrink:0;color:var(--dc-text, #64748b)}.dc-chevron svg{transition:transform .2s}.dc-chevron svg.rotated{transform:rotate(-90deg)}.dc-header-text{display:flex;flex-direction:column;gap:2px;flex:1 1 160px;min-width:0;word-break:break-word;overflow-wrap:anywhere}.dc-title{font-size:.8125rem;font-weight:800;letter-spacing:.07em;color:var(--dc-text, #1e293b);line-height:1.3;text-transform:uppercase}.dc-title--as-written{text-transform:none}.dc-subtitle{font-size:.75rem;color:var(--dc-text, #475569)}.dc-has-text-color .dc-subtitle{opacity:.8}.dc-has-text-color .dc-header.open{border-bottom-color:#94a3b859}.dc-edit{flex-shrink:0;margin-left:auto}.dc-edit ::ng-deep button{font-size:.8rem;font-weight:500;color:#64748b;background:none;border:1px solid #e2e8f0;border-radius:6px;padding:4px 10px;gap:5px}.dc-edit ::ng-deep button:hover{background:#f1f5f9;color:#1e293b}.dc-body-wrap{display:grid;grid-template-rows:1fr;transition:grid-template-rows .25s ease}.dc-body-wrap.collapsed{grid-template-rows:0fr}.dc-body{padding:16px 18px;min-height:0;overflow:hidden}@media(max-width:480px){.dc-header{padding:12px 14px}.dc-body{padding:14px}.dc-edit{margin-left:0}}@media(prefers-reduced-motion:reduce){.dc-body-wrap,.dc-chevron svg{transition:none}}\n"],
|
|
31859
32343
|
dependencies: [{
|
|
31860
32344
|
kind: "component",
|
|
31861
32345
|
type: ButtonComponent,
|
|
@@ -31865,9 +32349,12 @@ var DetailCardComponent = class DetailCardComponent {
|
|
|
31865
32349
|
"routerLink",
|
|
31866
32350
|
"queryParams",
|
|
31867
32351
|
"fragment",
|
|
32352
|
+
"state",
|
|
31868
32353
|
"href",
|
|
31869
32354
|
"target",
|
|
31870
32355
|
"rel",
|
|
32356
|
+
"shortLabel",
|
|
32357
|
+
"shortBelow",
|
|
31871
32358
|
"color",
|
|
31872
32359
|
"active",
|
|
31873
32360
|
"size",
|
|
@@ -31902,13 +32389,17 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
31902
32389
|
host: {
|
|
31903
32390
|
"role": "group",
|
|
31904
32391
|
"[class.dc-fill-host]": "fill()",
|
|
32392
|
+
"[attr.data-selected]": "selectable() && selected() ? \"true\" : null",
|
|
31905
32393
|
"[attr.aria-labelledby]": "showHeader() && title() && titleId() ? titleId() : null",
|
|
31906
32394
|
"[attr.aria-label]": "groupLabel()"
|
|
31907
32395
|
},
|
|
31908
32396
|
template: `
|
|
31909
|
-
<div class="dc" [class.dc-fill]="fill()" [class.dc-has-text-color]="!!textColor()" [
|
|
32397
|
+
<div class="dc" [class.dc-fill]="fill()" [class.dc-has-text-color]="!!textColor()" [class.dc-selectable]="selectable()" [class.dc-selected]="selectable() && selected()"
|
|
32398
|
+
[style.outline-color]="selectable() && selected() ? selectedColor() : null"
|
|
32399
|
+
[style.background]="(selectable() && selected() && selectedBackground()) || background() || null" (click)="onCardClick($event)"
|
|
32400
|
+
[style.color]="textColor() || null" [style.--dc-text]="textColor() || null">
|
|
31910
32401
|
@if (showHeader()) {
|
|
31911
|
-
<div class="dc-header" [class.collapsible]="collapsible()" [class.open]="isOpen()" (click)="onHeaderClick($event)">
|
|
32402
|
+
<div class="dc-header" [class.collapsible]="collapsible()" [class.open]="isOpen()" [style.background]="headerBackground() || null" (click)="onHeaderClick($event)">
|
|
31912
32403
|
@if (collapsible()) {
|
|
31913
32404
|
<ui-button class="dc-chevron" variant="icon" size="sm"
|
|
31914
32405
|
[ariaLabel]="title() || 'Toggle section'"
|
|
@@ -31927,11 +32418,13 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
31927
32418
|
<ng-content select="[card-header]" />
|
|
31928
32419
|
</div>
|
|
31929
32420
|
@if (showEdit()) {
|
|
31930
|
-
<ui-button class="dc-edit" variant="secondary" size="xs" [ariaLabel]="editAriaLabel() || undefined" (click)="$event.stopPropagation(); editClick.emit()">
|
|
32421
|
+
<ui-button class="dc-edit" variant="secondary" size="xs" [ariaLabel]="editAriaLabel() || undefined" [attr.data-testid]="editTestId() || null" (click)="$event.stopPropagation(); editClick.emit()">
|
|
32422
|
+
@if (editIcon()) {
|
|
31931
32423
|
<svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true">
|
|
31932
32424
|
<path d="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"/>
|
|
31933
32425
|
<path d="M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"/>
|
|
31934
32426
|
</svg>
|
|
32427
|
+
}
|
|
31935
32428
|
{{ editLabel() }}
|
|
31936
32429
|
</ui-button>
|
|
31937
32430
|
}
|
|
@@ -31945,7 +32438,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
31945
32438
|
</div>
|
|
31946
32439
|
</div>
|
|
31947
32440
|
`,
|
|
31948
|
-
styles: [":host{display:block;margin-bottom:16px}:host(:last-child){margin-bottom:0}:host(.dc-fill-host){height:100
|
|
32441
|
+
styles: [":host{display:block;margin-bottom:16px}:host(:last-child){margin-bottom:0}:host(.dc-fill-host){height:100%;margin-bottom:0}.dc.dc-fill{height:100%;box-sizing:border-box;display:flex;flex-direction:column}.dc.dc-fill .dc-body-wrap{flex:1 1 auto;min-height:0}.dc-selectable{cursor:pointer}.dc-selected{outline:2px solid #3b82f6;outline-offset:-1px}.dc{background:#fff;border:1px solid #e2e8f0;border-radius:10px;overflow:hidden}.dc-header{display:flex;align-items:center;flex-wrap:wrap;gap:8px 10px;padding:14px 18px}.dc-header.open{border-bottom:1px solid #f1f5f9}.dc-header.collapsible{cursor:pointer;-webkit-user-select:none;user-select:none}@media(hover:hover){.dc-header.collapsible:hover{background:#f8fafc}}.dc-chevron{flex-shrink:0;color:var(--dc-text, #64748b)}.dc-chevron svg{transition:transform .2s}.dc-chevron svg.rotated{transform:rotate(-90deg)}.dc-header-text{display:flex;flex-direction:column;gap:2px;flex:1 1 160px;min-width:0;word-break:break-word;overflow-wrap:anywhere}.dc-title{font-size:.8125rem;font-weight:800;letter-spacing:.07em;color:var(--dc-text, #1e293b);line-height:1.3;text-transform:uppercase}.dc-title--as-written{text-transform:none}.dc-subtitle{font-size:.75rem;color:var(--dc-text, #475569)}.dc-has-text-color .dc-subtitle{opacity:.8}.dc-has-text-color .dc-header.open{border-bottom-color:#94a3b859}.dc-edit{flex-shrink:0;margin-left:auto}.dc-edit ::ng-deep button{font-size:.8rem;font-weight:500;color:#64748b;background:none;border:1px solid #e2e8f0;border-radius:6px;padding:4px 10px;gap:5px}.dc-edit ::ng-deep button:hover{background:#f1f5f9;color:#1e293b}.dc-body-wrap{display:grid;grid-template-rows:1fr;transition:grid-template-rows .25s ease}.dc-body-wrap.collapsed{grid-template-rows:0fr}.dc-body{padding:16px 18px;min-height:0;overflow:hidden}@media(max-width:480px){.dc-header{padding:12px 14px}.dc-body{padding:14px}.dc-edit{margin-left:0}}@media(prefers-reduced-motion:reduce){.dc-body-wrap,.dc-chevron svg{transition:none}}\n"]
|
|
31949
32442
|
}]
|
|
31950
32443
|
}],
|
|
31951
32444
|
propDecorators: {
|
|
@@ -32005,6 +32498,14 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
32005
32498
|
required: false
|
|
32006
32499
|
}]
|
|
32007
32500
|
}],
|
|
32501
|
+
headerBackground: [{
|
|
32502
|
+
type: i0.Input,
|
|
32503
|
+
args: [{
|
|
32504
|
+
isSignal: true,
|
|
32505
|
+
alias: "headerBackground",
|
|
32506
|
+
required: false
|
|
32507
|
+
}]
|
|
32508
|
+
}],
|
|
32008
32509
|
textColor: [{
|
|
32009
32510
|
type: i0.Input,
|
|
32010
32511
|
args: [{
|
|
@@ -32060,6 +32561,22 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
32060
32561
|
type: i0.Output,
|
|
32061
32562
|
args: ["editClick"]
|
|
32062
32563
|
}],
|
|
32564
|
+
editTestId: [{
|
|
32565
|
+
type: i0.Input,
|
|
32566
|
+
args: [{
|
|
32567
|
+
isSignal: true,
|
|
32568
|
+
alias: "editTestId",
|
|
32569
|
+
required: false
|
|
32570
|
+
}]
|
|
32571
|
+
}],
|
|
32572
|
+
editIcon: [{
|
|
32573
|
+
type: i0.Input,
|
|
32574
|
+
args: [{
|
|
32575
|
+
isSignal: true,
|
|
32576
|
+
alias: "editIcon",
|
|
32577
|
+
required: false
|
|
32578
|
+
}]
|
|
32579
|
+
}],
|
|
32063
32580
|
editAriaLabel: [{
|
|
32064
32581
|
type: i0.Input,
|
|
32065
32582
|
args: [{
|
|
@@ -32075,6 +32592,41 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
32075
32592
|
alias: "fill",
|
|
32076
32593
|
required: false
|
|
32077
32594
|
}]
|
|
32595
|
+
}],
|
|
32596
|
+
selectable: [{
|
|
32597
|
+
type: i0.Input,
|
|
32598
|
+
args: [{
|
|
32599
|
+
isSignal: true,
|
|
32600
|
+
alias: "selectable",
|
|
32601
|
+
required: false
|
|
32602
|
+
}]
|
|
32603
|
+
}],
|
|
32604
|
+
selected: [{
|
|
32605
|
+
type: i0.Input,
|
|
32606
|
+
args: [{
|
|
32607
|
+
isSignal: true,
|
|
32608
|
+
alias: "selected",
|
|
32609
|
+
required: false
|
|
32610
|
+
}]
|
|
32611
|
+
}, {
|
|
32612
|
+
type: i0.Output,
|
|
32613
|
+
args: ["selectedChange"]
|
|
32614
|
+
}],
|
|
32615
|
+
selectedColor: [{
|
|
32616
|
+
type: i0.Input,
|
|
32617
|
+
args: [{
|
|
32618
|
+
isSignal: true,
|
|
32619
|
+
alias: "selectedColor",
|
|
32620
|
+
required: false
|
|
32621
|
+
}]
|
|
32622
|
+
}],
|
|
32623
|
+
selectedBackground: [{
|
|
32624
|
+
type: i0.Input,
|
|
32625
|
+
args: [{
|
|
32626
|
+
isSignal: true,
|
|
32627
|
+
alias: "selectedBackground",
|
|
32628
|
+
required: false
|
|
32629
|
+
}]
|
|
32078
32630
|
}]
|
|
32079
32631
|
}
|
|
32080
32632
|
});
|
|
@@ -33056,6 +33608,10 @@ var ColumnsComponent = class ColumnsComponent {
|
|
|
33056
33608
|
this.countBelowLg = input(null, ...ngDevMode ? [{ debugName: "countBelowLg" }] : /* istanbul ignore next */ []);
|
|
33057
33609
|
this.countBelowMd = input(null, ...ngDevMode ? [{ debugName: "countBelowMd" }] : /* istanbul ignore next */ []);
|
|
33058
33610
|
this.countBelowSm = input(null, ...ngDevMode ? [{ debugName: "countBelowSm" }] : /* istanbul ignore next */ []);
|
|
33611
|
+
this.countBase = input(1, ...ngDevMode ? [{ debugName: "countBase" }] : /* istanbul ignore next */ []);
|
|
33612
|
+
this.countFromSm = input(null, ...ngDevMode ? [{ debugName: "countFromSm" }] : /* istanbul ignore next */ []);
|
|
33613
|
+
this.countFromMd = input(null, ...ngDevMode ? [{ debugName: "countFromMd" }] : /* istanbul ignore next */ []);
|
|
33614
|
+
this.countFromLg = input(null, ...ngDevMode ? [{ debugName: "countFromLg" }] : /* istanbul ignore next */ []);
|
|
33059
33615
|
this.cols = computed(() => {
|
|
33060
33616
|
const n = Math.trunc(Number(this.count()));
|
|
33061
33617
|
if (!Number.isFinite(n)) return 2;
|
|
@@ -33064,8 +33620,14 @@ var ColumnsComponent = class ColumnsComponent {
|
|
|
33064
33620
|
this.colsLg = computed(() => ColumnsComponent.clampTier(this.countBelowLg()), ...ngDevMode ? [{ debugName: "colsLg" }] : /* istanbul ignore next */ []);
|
|
33065
33621
|
this.colsMd = computed(() => ColumnsComponent.clampTier(this.countBelowMd()), ...ngDevMode ? [{ debugName: "colsMd" }] : /* istanbul ignore next */ []);
|
|
33066
33622
|
this.colsSm = computed(() => ColumnsComponent.clampTier(this.countBelowSm()), ...ngDevMode ? [{ debugName: "colsSm" }] : /* istanbul ignore next */ []);
|
|
33623
|
+
this.fromMode = computed(() => this.countFromSm() != null || this.countFromMd() != null || this.countFromLg() != null, ...ngDevMode ? [{ debugName: "fromMode" }] : /* istanbul ignore next */ []);
|
|
33624
|
+
this.base = computed(() => this.fromMode() ? ColumnsComponent.clampTier(this.countBase()) ?? 1 : null, ...ngDevMode ? [{ debugName: "base" }] : /* istanbul ignore next */ []);
|
|
33625
|
+
this.fromSm = computed(() => ColumnsComponent.clampTier(this.countFromSm()), ...ngDevMode ? [{ debugName: "fromSm" }] : /* istanbul ignore next */ []);
|
|
33626
|
+
this.fromMd = computed(() => ColumnsComponent.clampTier(this.countFromMd()), ...ngDevMode ? [{ debugName: "fromMd" }] : /* istanbul ignore next */ []);
|
|
33627
|
+
this.fromLg = computed(() => ColumnsComponent.clampTier(this.countFromLg()), ...ngDevMode ? [{ debugName: "fromLg" }] : /* istanbul ignore next */ []);
|
|
33067
33628
|
this.gapCss = computed(() => resolveLayoutGap(this.gap(), "lg"), ...ngDevMode ? [{ debugName: "gapCss" }] : /* istanbul ignore next */ []);
|
|
33068
33629
|
this.collapseClass = computed(() => {
|
|
33630
|
+
if (this.fromMode()) return "cl cl-from";
|
|
33069
33631
|
const c = this.collapseAt();
|
|
33070
33632
|
return c === "never" ? "cl" : `cl cl-${c}`;
|
|
33071
33633
|
}, ...ngDevMode ? [{ debugName: "collapseClass" }] : /* istanbul ignore next */ []);
|
|
@@ -33141,13 +33703,41 @@ var ColumnsComponent = class ColumnsComponent {
|
|
|
33141
33703
|
isSignal: true,
|
|
33142
33704
|
isRequired: false,
|
|
33143
33705
|
transformFunction: null
|
|
33706
|
+
},
|
|
33707
|
+
countBase: {
|
|
33708
|
+
classPropertyName: "countBase",
|
|
33709
|
+
publicName: "countBase",
|
|
33710
|
+
isSignal: true,
|
|
33711
|
+
isRequired: false,
|
|
33712
|
+
transformFunction: null
|
|
33713
|
+
},
|
|
33714
|
+
countFromSm: {
|
|
33715
|
+
classPropertyName: "countFromSm",
|
|
33716
|
+
publicName: "countFromSm",
|
|
33717
|
+
isSignal: true,
|
|
33718
|
+
isRequired: false,
|
|
33719
|
+
transformFunction: null
|
|
33720
|
+
},
|
|
33721
|
+
countFromMd: {
|
|
33722
|
+
classPropertyName: "countFromMd",
|
|
33723
|
+
publicName: "countFromMd",
|
|
33724
|
+
isSignal: true,
|
|
33725
|
+
isRequired: false,
|
|
33726
|
+
transformFunction: null
|
|
33727
|
+
},
|
|
33728
|
+
countFromLg: {
|
|
33729
|
+
classPropertyName: "countFromLg",
|
|
33730
|
+
publicName: "countFromLg",
|
|
33731
|
+
isSignal: true,
|
|
33732
|
+
isRequired: false,
|
|
33733
|
+
transformFunction: null
|
|
33144
33734
|
}
|
|
33145
33735
|
},
|
|
33146
33736
|
host: { properties: { "attr.data-columns": "cols()" } },
|
|
33147
33737
|
ngImport: i0,
|
|
33148
|
-
template: `<div class="cl" [class]="collapseClass()" [style.--cl-cols]="cols()" [style.--cl-cols-lg]="colsLg()" [style.--cl-cols-md]="colsMd()" [style.--cl-cols-sm]="colsSm()" [style.gap]="gapCss()" [style.align-items]="align()"><ng-content /></div>`,
|
|
33738
|
+
template: `<div class="cl" [class]="collapseClass()" [style.--cl-cols]="cols()" [style.--cl-cols-lg]="colsLg()" [style.--cl-cols-md]="colsMd()" [style.--cl-cols-sm]="colsSm()" [style.--cl-base]="base()" [style.--cl-from-sm]="fromSm()" [style.--cl-from-md]="fromMd()" [style.--cl-from-lg]="fromLg()" [style.gap]="gapCss()" [style.align-items]="align()"><ng-content /></div>`,
|
|
33149
33739
|
isInline: true,
|
|
33150
|
-
styles: [":host{display:block}.cl{display:grid;grid-template-columns:repeat(var(--cl-cols, 2),minmax(0,1fr))}@media(max-width:1024px){.cl{grid-template-columns:repeat(var(--cl-cols-lg, var(--cl-cols, 2)),minmax(0,1fr))}}@media(max-width:768px){.cl{grid-template-columns:repeat(var(--cl-cols-md, var(--cl-cols-lg, var(--cl-cols, 2))),minmax(0,1fr))}}@media(max-width:480px){.cl{grid-template-columns:repeat(var(--cl-cols-sm, var(--cl-cols-md, var(--cl-cols-lg, var(--cl-cols, 2)))),minmax(0,1fr))}}@media(max-width:480px){.cl.cl-sm{grid-template-columns:minmax(0,1fr)}}@media(max-width:768px){.cl.cl-md{grid-template-columns:minmax(0,1fr)}}@media(max-width:1024px){.cl.cl-lg{grid-template-columns:minmax(0,1fr)}}\n"],
|
|
33740
|
+
styles: [":host{display:block}.cl{display:grid;grid-template-columns:repeat(var(--cl-cols, 2),minmax(0,1fr))}@media(max-width:1024px){.cl{grid-template-columns:repeat(var(--cl-cols-lg, var(--cl-cols, 2)),minmax(0,1fr))}}@media(max-width:768px){.cl{grid-template-columns:repeat(var(--cl-cols-md, var(--cl-cols-lg, var(--cl-cols, 2))),minmax(0,1fr))}}@media(max-width:480px){.cl{grid-template-columns:repeat(var(--cl-cols-sm, var(--cl-cols-md, var(--cl-cols-lg, var(--cl-cols, 2)))),minmax(0,1fr))}}.cl.cl-from{grid-template-columns:repeat(var(--cl-base, 1),minmax(0,1fr))}@media(min-width:480px){.cl.cl-from{grid-template-columns:repeat(var(--cl-from-sm, var(--cl-base, 1)),minmax(0,1fr))}}@media(min-width:768px){.cl.cl-from{grid-template-columns:repeat(var(--cl-from-md, var(--cl-from-sm, var(--cl-base, 1))),minmax(0,1fr))}}@media(min-width:1024px){.cl.cl-from{grid-template-columns:repeat(var(--cl-from-lg, var(--cl-from-md, var(--cl-from-sm, var(--cl-base, 1)))),minmax(0,1fr))}}@media(max-width:480px){.cl.cl-sm{grid-template-columns:minmax(0,1fr)}}@media(max-width:768px){.cl.cl-md{grid-template-columns:minmax(0,1fr)}}@media(max-width:1024px){.cl.cl-lg{grid-template-columns:minmax(0,1fr)}}\n"],
|
|
33151
33741
|
changeDetection: i0.ChangeDetectionStrategy.OnPush
|
|
33152
33742
|
});
|
|
33153
33743
|
}
|
|
@@ -33164,8 +33754,8 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
33164
33754
|
standalone: true,
|
|
33165
33755
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
33166
33756
|
host: { "[attr.data-columns]": "cols()" },
|
|
33167
|
-
template: `<div class="cl" [class]="collapseClass()" [style.--cl-cols]="cols()" [style.--cl-cols-lg]="colsLg()" [style.--cl-cols-md]="colsMd()" [style.--cl-cols-sm]="colsSm()" [style.gap]="gapCss()" [style.align-items]="align()"><ng-content /></div>`,
|
|
33168
|
-
styles: [":host{display:block}.cl{display:grid;grid-template-columns:repeat(var(--cl-cols, 2),minmax(0,1fr))}@media(max-width:1024px){.cl{grid-template-columns:repeat(var(--cl-cols-lg, var(--cl-cols, 2)),minmax(0,1fr))}}@media(max-width:768px){.cl{grid-template-columns:repeat(var(--cl-cols-md, var(--cl-cols-lg, var(--cl-cols, 2))),minmax(0,1fr))}}@media(max-width:480px){.cl{grid-template-columns:repeat(var(--cl-cols-sm, var(--cl-cols-md, var(--cl-cols-lg, var(--cl-cols, 2)))),minmax(0,1fr))}}@media(max-width:480px){.cl.cl-sm{grid-template-columns:minmax(0,1fr)}}@media(max-width:768px){.cl.cl-md{grid-template-columns:minmax(0,1fr)}}@media(max-width:1024px){.cl.cl-lg{grid-template-columns:minmax(0,1fr)}}\n"]
|
|
33757
|
+
template: `<div class="cl" [class]="collapseClass()" [style.--cl-cols]="cols()" [style.--cl-cols-lg]="colsLg()" [style.--cl-cols-md]="colsMd()" [style.--cl-cols-sm]="colsSm()" [style.--cl-base]="base()" [style.--cl-from-sm]="fromSm()" [style.--cl-from-md]="fromMd()" [style.--cl-from-lg]="fromLg()" [style.gap]="gapCss()" [style.align-items]="align()"><ng-content /></div>`,
|
|
33758
|
+
styles: [":host{display:block}.cl{display:grid;grid-template-columns:repeat(var(--cl-cols, 2),minmax(0,1fr))}@media(max-width:1024px){.cl{grid-template-columns:repeat(var(--cl-cols-lg, var(--cl-cols, 2)),minmax(0,1fr))}}@media(max-width:768px){.cl{grid-template-columns:repeat(var(--cl-cols-md, var(--cl-cols-lg, var(--cl-cols, 2))),minmax(0,1fr))}}@media(max-width:480px){.cl{grid-template-columns:repeat(var(--cl-cols-sm, var(--cl-cols-md, var(--cl-cols-lg, var(--cl-cols, 2)))),minmax(0,1fr))}}.cl.cl-from{grid-template-columns:repeat(var(--cl-base, 1),minmax(0,1fr))}@media(min-width:480px){.cl.cl-from{grid-template-columns:repeat(var(--cl-from-sm, var(--cl-base, 1)),minmax(0,1fr))}}@media(min-width:768px){.cl.cl-from{grid-template-columns:repeat(var(--cl-from-md, var(--cl-from-sm, var(--cl-base, 1))),minmax(0,1fr))}}@media(min-width:1024px){.cl.cl-from{grid-template-columns:repeat(var(--cl-from-lg, var(--cl-from-md, var(--cl-from-sm, var(--cl-base, 1)))),minmax(0,1fr))}}@media(max-width:480px){.cl.cl-sm{grid-template-columns:minmax(0,1fr)}}@media(max-width:768px){.cl.cl-md{grid-template-columns:minmax(0,1fr)}}@media(max-width:1024px){.cl.cl-lg{grid-template-columns:minmax(0,1fr)}}\n"]
|
|
33169
33759
|
}]
|
|
33170
33760
|
}],
|
|
33171
33761
|
propDecorators: {
|
|
@@ -33224,6 +33814,38 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
33224
33814
|
alias: "countBelowSm",
|
|
33225
33815
|
required: false
|
|
33226
33816
|
}]
|
|
33817
|
+
}],
|
|
33818
|
+
countBase: [{
|
|
33819
|
+
type: i0.Input,
|
|
33820
|
+
args: [{
|
|
33821
|
+
isSignal: true,
|
|
33822
|
+
alias: "countBase",
|
|
33823
|
+
required: false
|
|
33824
|
+
}]
|
|
33825
|
+
}],
|
|
33826
|
+
countFromSm: [{
|
|
33827
|
+
type: i0.Input,
|
|
33828
|
+
args: [{
|
|
33829
|
+
isSignal: true,
|
|
33830
|
+
alias: "countFromSm",
|
|
33831
|
+
required: false
|
|
33832
|
+
}]
|
|
33833
|
+
}],
|
|
33834
|
+
countFromMd: [{
|
|
33835
|
+
type: i0.Input,
|
|
33836
|
+
args: [{
|
|
33837
|
+
isSignal: true,
|
|
33838
|
+
alias: "countFromMd",
|
|
33839
|
+
required: false
|
|
33840
|
+
}]
|
|
33841
|
+
}],
|
|
33842
|
+
countFromLg: [{
|
|
33843
|
+
type: i0.Input,
|
|
33844
|
+
args: [{
|
|
33845
|
+
isSignal: true,
|
|
33846
|
+
alias: "countFromLg",
|
|
33847
|
+
required: false
|
|
33848
|
+
}]
|
|
33227
33849
|
}]
|
|
33228
33850
|
}
|
|
33229
33851
|
});
|
|
@@ -33246,6 +33868,11 @@ var StackComponent = class StackComponent {
|
|
|
33246
33868
|
this.align = input("stretch", ...ngDevMode ? [{ debugName: "align" }] : /* istanbul ignore next */ []);
|
|
33247
33869
|
this.justify = input("start", ...ngDevMode ? [{ debugName: "justify" }] : /* istanbul ignore next */ []);
|
|
33248
33870
|
this.wrap = input(false, ...ngDevMode ? [{ debugName: "wrap" }] : /* istanbul ignore next */ []);
|
|
33871
|
+
this.minHeight = input("", ...ngDevMode ? [{ debugName: "minHeight" }] : /* istanbul ignore next */ []);
|
|
33872
|
+
this.width = input("", ...ngDevMode ? [{ debugName: "width" }] : /* istanbul ignore next */ []);
|
|
33873
|
+
this.maxWidth = input("", ...ngDevMode ? [{ debugName: "maxWidth" }] : /* istanbul ignore next */ []);
|
|
33874
|
+
this.padding = input("", ...ngDevMode ? [{ debugName: "padding" }] : /* istanbul ignore next */ []);
|
|
33875
|
+
this.centered = input(false, ...ngDevMode ? [{ debugName: "centered" }] : /* istanbul ignore next */ []);
|
|
33249
33876
|
this.gapCss = computed(() => resolveLayoutGap(this.gap(), "md"), ...ngDevMode ? [{ debugName: "gapCss" }] : /* istanbul ignore next */ []);
|
|
33250
33877
|
this.alignCss = computed(() => ALIGN[this.align()] ?? "stretch", ...ngDevMode ? [{ debugName: "alignCss" }] : /* istanbul ignore next */ []);
|
|
33251
33878
|
this.justifyCss = computed(() => JUSTIFY$1[this.justify()] ?? "flex-start", ...ngDevMode ? [{ debugName: "justifyCss" }] : /* istanbul ignore next */ []);
|
|
@@ -33302,11 +33929,46 @@ var StackComponent = class StackComponent {
|
|
|
33302
33929
|
isSignal: true,
|
|
33303
33930
|
isRequired: false,
|
|
33304
33931
|
transformFunction: null
|
|
33932
|
+
},
|
|
33933
|
+
minHeight: {
|
|
33934
|
+
classPropertyName: "minHeight",
|
|
33935
|
+
publicName: "minHeight",
|
|
33936
|
+
isSignal: true,
|
|
33937
|
+
isRequired: false,
|
|
33938
|
+
transformFunction: null
|
|
33939
|
+
},
|
|
33940
|
+
width: {
|
|
33941
|
+
classPropertyName: "width",
|
|
33942
|
+
publicName: "width",
|
|
33943
|
+
isSignal: true,
|
|
33944
|
+
isRequired: false,
|
|
33945
|
+
transformFunction: null
|
|
33946
|
+
},
|
|
33947
|
+
maxWidth: {
|
|
33948
|
+
classPropertyName: "maxWidth",
|
|
33949
|
+
publicName: "maxWidth",
|
|
33950
|
+
isSignal: true,
|
|
33951
|
+
isRequired: false,
|
|
33952
|
+
transformFunction: null
|
|
33953
|
+
},
|
|
33954
|
+
padding: {
|
|
33955
|
+
classPropertyName: "padding",
|
|
33956
|
+
publicName: "padding",
|
|
33957
|
+
isSignal: true,
|
|
33958
|
+
isRequired: false,
|
|
33959
|
+
transformFunction: null
|
|
33960
|
+
},
|
|
33961
|
+
centered: {
|
|
33962
|
+
classPropertyName: "centered",
|
|
33963
|
+
publicName: "centered",
|
|
33964
|
+
isSignal: true,
|
|
33965
|
+
isRequired: false,
|
|
33966
|
+
transformFunction: null
|
|
33305
33967
|
}
|
|
33306
33968
|
},
|
|
33307
33969
|
ngImport: i0,
|
|
33308
33970
|
template: `<div class="st" [class.st-h]="direction() === 'horizontal'" [style.flex-direction]="direction() === 'horizontal' ? 'row' : 'column'"
|
|
33309
|
-
[style.gap]="gapCss()" [style.align-items]="alignCss()" [style.justify-content]="justifyCss()" [style.flex-wrap]="wrap() ? 'wrap' : 'nowrap'"><ng-content /></div>`,
|
|
33971
|
+
[style.gap]="gapCss()" [style.align-items]="alignCss()" [style.justify-content]="justifyCss()" [style.flex-wrap]="wrap() ? 'wrap' : 'nowrap'" [style.min-height]="minHeight() || null" [style.width]="width() || null" [style.max-width]="maxWidth() || null" [style.padding]="padding() || null" [style.box-sizing]="padding() ? 'border-box' : null" [style.margin-inline]="centered() ? 'auto' : null"><ng-content /></div>`,
|
|
33310
33972
|
isInline: true,
|
|
33311
33973
|
styles: [":host{display:block}.st{display:flex}.st>::ng-deep *{margin:0!important}.st.st-h>::ng-deep *{min-width:0}\n"],
|
|
33312
33974
|
changeDetection: i0.ChangeDetectionStrategy.OnPush
|
|
@@ -33325,7 +33987,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
33325
33987
|
standalone: true,
|
|
33326
33988
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
33327
33989
|
template: `<div class="st" [class.st-h]="direction() === 'horizontal'" [style.flex-direction]="direction() === 'horizontal' ? 'row' : 'column'"
|
|
33328
|
-
[style.gap]="gapCss()" [style.align-items]="alignCss()" [style.justify-content]="justifyCss()" [style.flex-wrap]="wrap() ? 'wrap' : 'nowrap'"><ng-content /></div>`,
|
|
33990
|
+
[style.gap]="gapCss()" [style.align-items]="alignCss()" [style.justify-content]="justifyCss()" [style.flex-wrap]="wrap() ? 'wrap' : 'nowrap'" [style.min-height]="minHeight() || null" [style.width]="width() || null" [style.max-width]="maxWidth() || null" [style.padding]="padding() || null" [style.box-sizing]="padding() ? 'border-box' : null" [style.margin-inline]="centered() ? 'auto' : null"><ng-content /></div>`,
|
|
33329
33991
|
styles: [":host{display:block}.st{display:flex}.st>::ng-deep *{margin:0!important}.st.st-h>::ng-deep *{min-width:0}\n"]
|
|
33330
33992
|
}]
|
|
33331
33993
|
}],
|
|
@@ -33369,6 +34031,46 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
33369
34031
|
alias: "wrap",
|
|
33370
34032
|
required: false
|
|
33371
34033
|
}]
|
|
34034
|
+
}],
|
|
34035
|
+
minHeight: [{
|
|
34036
|
+
type: i0.Input,
|
|
34037
|
+
args: [{
|
|
34038
|
+
isSignal: true,
|
|
34039
|
+
alias: "minHeight",
|
|
34040
|
+
required: false
|
|
34041
|
+
}]
|
|
34042
|
+
}],
|
|
34043
|
+
width: [{
|
|
34044
|
+
type: i0.Input,
|
|
34045
|
+
args: [{
|
|
34046
|
+
isSignal: true,
|
|
34047
|
+
alias: "width",
|
|
34048
|
+
required: false
|
|
34049
|
+
}]
|
|
34050
|
+
}],
|
|
34051
|
+
maxWidth: [{
|
|
34052
|
+
type: i0.Input,
|
|
34053
|
+
args: [{
|
|
34054
|
+
isSignal: true,
|
|
34055
|
+
alias: "maxWidth",
|
|
34056
|
+
required: false
|
|
34057
|
+
}]
|
|
34058
|
+
}],
|
|
34059
|
+
padding: [{
|
|
34060
|
+
type: i0.Input,
|
|
34061
|
+
args: [{
|
|
34062
|
+
isSignal: true,
|
|
34063
|
+
alias: "padding",
|
|
34064
|
+
required: false
|
|
34065
|
+
}]
|
|
34066
|
+
}],
|
|
34067
|
+
centered: [{
|
|
34068
|
+
type: i0.Input,
|
|
34069
|
+
args: [{
|
|
34070
|
+
isSignal: true,
|
|
34071
|
+
alias: "centered",
|
|
34072
|
+
required: false
|
|
34073
|
+
}]
|
|
33372
34074
|
}]
|
|
33373
34075
|
}
|
|
33374
34076
|
});
|
|
@@ -33556,6 +34258,2177 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
33556
34258
|
}]
|
|
33557
34259
|
}
|
|
33558
34260
|
});
|
|
33559
|
-
|
|
34261
|
+
const WEEK_DAY_LABELS = [
|
|
34262
|
+
"Sun",
|
|
34263
|
+
"Mon",
|
|
34264
|
+
"Tue",
|
|
34265
|
+
"Wed",
|
|
34266
|
+
"Thu",
|
|
34267
|
+
"Fri",
|
|
34268
|
+
"Sat"
|
|
34269
|
+
];
|
|
34270
|
+
function toDateStr(d) {
|
|
34271
|
+
return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, "0")}-${String(d.getDate()).padStart(2, "0")}`;
|
|
34272
|
+
}
|
|
34273
|
+
function fromDateStr(dateStr) {
|
|
34274
|
+
return /* @__PURE__ */ new Date(dateStr + "T00:00");
|
|
34275
|
+
}
|
|
34276
|
+
function buildMonthCells(anchor, todayStr) {
|
|
34277
|
+
const y = anchor.getFullYear();
|
|
34278
|
+
const m = anchor.getMonth();
|
|
34279
|
+
const start = new Date(y, m, 1 - new Date(y, m, 1).getDay());
|
|
34280
|
+
const cells = [];
|
|
34281
|
+
for (let i = 0; i < 42; i++) {
|
|
34282
|
+
const d = new Date(start.getFullYear(), start.getMonth(), start.getDate() + i);
|
|
34283
|
+
const ds = toDateStr(d);
|
|
34284
|
+
cells.push({
|
|
34285
|
+
dateStr: ds,
|
|
34286
|
+
dayNum: d.getDate(),
|
|
34287
|
+
isToday: ds === todayStr,
|
|
34288
|
+
isCurrentMonth: d.getMonth() === m,
|
|
34289
|
+
isWeekend: d.getDay() === 0 || d.getDay() === 6
|
|
34290
|
+
});
|
|
34291
|
+
}
|
|
34292
|
+
return cells;
|
|
34293
|
+
}
|
|
34294
|
+
function buildWeekDays(anchor, todayStr) {
|
|
34295
|
+
const start = new Date(anchor.getFullYear(), anchor.getMonth(), anchor.getDate() - anchor.getDay());
|
|
34296
|
+
return Array.from({ length: 7 }, (_, i) => {
|
|
34297
|
+
const d = new Date(start.getFullYear(), start.getMonth(), start.getDate() + i);
|
|
34298
|
+
const ds = toDateStr(d);
|
|
34299
|
+
return {
|
|
34300
|
+
dateStr: ds,
|
|
34301
|
+
dayNum: d.getDate(),
|
|
34302
|
+
isToday: ds === todayStr,
|
|
34303
|
+
isCurrentMonth: true,
|
|
34304
|
+
isWeekend: i === 0 || i === 6
|
|
34305
|
+
};
|
|
34306
|
+
});
|
|
34307
|
+
}
|
|
34308
|
+
function rangeFor(view, anchor, todayStr) {
|
|
34309
|
+
if (view === "week") {
|
|
34310
|
+
const days = buildWeekDays(anchor, todayStr);
|
|
34311
|
+
return {
|
|
34312
|
+
view,
|
|
34313
|
+
start: days[0].dateStr,
|
|
34314
|
+
end: days[6].dateStr,
|
|
34315
|
+
anchor
|
|
34316
|
+
};
|
|
34317
|
+
}
|
|
34318
|
+
if (view === "month") {
|
|
34319
|
+
const cells = buildMonthCells(anchor, todayStr);
|
|
34320
|
+
return {
|
|
34321
|
+
view,
|
|
34322
|
+
start: cells[0].dateStr,
|
|
34323
|
+
end: cells[41].dateStr,
|
|
34324
|
+
anchor
|
|
34325
|
+
};
|
|
34326
|
+
}
|
|
34327
|
+
const y = anchor.getFullYear();
|
|
34328
|
+
const m = anchor.getMonth();
|
|
34329
|
+
return {
|
|
34330
|
+
view,
|
|
34331
|
+
start: toDateStr(new Date(y, m, 1)),
|
|
34332
|
+
end: toDateStr(new Date(y, m + 2, 0)),
|
|
34333
|
+
anchor
|
|
34334
|
+
};
|
|
34335
|
+
}
|
|
34336
|
+
function shiftAnchor(view, anchor, direction) {
|
|
34337
|
+
if (view === "week") return new Date(anchor.getFullYear(), anchor.getMonth(), anchor.getDate() + 7 * direction);
|
|
34338
|
+
if (view === "agenda") return new Date(anchor.getFullYear(), anchor.getMonth() + 2 * direction, 1);
|
|
34339
|
+
const y = anchor.getFullYear();
|
|
34340
|
+
const m = anchor.getMonth() + direction;
|
|
34341
|
+
const lastDay = new Date(y, m + 1, 0).getDate();
|
|
34342
|
+
return new Date(y, m, Math.min(anchor.getDate(), lastDay));
|
|
34343
|
+
}
|
|
34344
|
+
const DAY_LABEL = new Intl.DateTimeFormat("en-US", {
|
|
34345
|
+
weekday: "long",
|
|
34346
|
+
month: "long",
|
|
34347
|
+
day: "numeric",
|
|
34348
|
+
year: "numeric"
|
|
34349
|
+
});
|
|
34350
|
+
function formatDayLabel(dateStr) {
|
|
34351
|
+
return DAY_LABEL.format(fromDateStr(dateStr));
|
|
34352
|
+
}
|
|
34353
|
+
function periodLabelFor(view, anchor, todayStr) {
|
|
34354
|
+
if (view === "week") {
|
|
34355
|
+
const days = buildWeekDays(anchor, todayStr);
|
|
34356
|
+
const fs = fromDateStr(days[0].dateStr);
|
|
34357
|
+
const ls = fromDateStr(days[6].dateStr);
|
|
34358
|
+
if (fs.getMonth() === ls.getMonth()) return fs.toLocaleDateString("en-US", {
|
|
34359
|
+
month: "long",
|
|
34360
|
+
year: "numeric"
|
|
34361
|
+
});
|
|
34362
|
+
return `${fs.toLocaleDateString("en-US", { month: "short" })} – ${ls.toLocaleDateString("en-US", {
|
|
34363
|
+
month: "short",
|
|
34364
|
+
year: "numeric"
|
|
34365
|
+
})}`;
|
|
34366
|
+
}
|
|
34367
|
+
if (view === "agenda") {
|
|
34368
|
+
const start = new Date(anchor.getFullYear(), anchor.getMonth(), 1);
|
|
34369
|
+
const end = new Date(anchor.getFullYear(), anchor.getMonth() + 1, 1);
|
|
34370
|
+
return `${start.toLocaleDateString("en-US", { month: "long" })} – ${end.toLocaleDateString("en-US", {
|
|
34371
|
+
month: "long",
|
|
34372
|
+
year: "numeric"
|
|
34373
|
+
})}`;
|
|
34374
|
+
}
|
|
34375
|
+
return anchor.toLocaleDateString("en-US", {
|
|
34376
|
+
month: "long",
|
|
34377
|
+
year: "numeric"
|
|
34378
|
+
});
|
|
34379
|
+
}
|
|
34380
|
+
function formatTime$1(time) {
|
|
34381
|
+
const [h, m] = time.split(":").map(Number);
|
|
34382
|
+
return `${h % 12 || 12}:${String(m).padStart(2, "0")} ${h >= 12 ? "PM" : "AM"}`;
|
|
34383
|
+
}
|
|
34384
|
+
function formatHour(h) {
|
|
34385
|
+
return `${h % 12 || 12} ${h >= 12 ? "PM" : "AM"}`;
|
|
34386
|
+
}
|
|
34387
|
+
const MIN_EVENT_HEIGHT = 20;
|
|
34388
|
+
function timedBox(startTime, endTime, startHour, endHour = 21) {
|
|
34389
|
+
const gridMax = (Math.max(endHour, startHour) + 1 - startHour) * 60;
|
|
34390
|
+
const [h, min] = (startTime ?? `${String(startHour).padStart(2, "0")}:00`).split(":").map(Number);
|
|
34391
|
+
const s = (h - startHour) * 60 + min;
|
|
34392
|
+
let e = s + 60;
|
|
34393
|
+
if (endTime) {
|
|
34394
|
+
const [eh, em] = endTime.split(":").map(Number);
|
|
34395
|
+
e = (eh - startHour) * 60 + em;
|
|
34396
|
+
}
|
|
34397
|
+
const top = Math.min(Math.max(0, s), gridMax - MIN_EVENT_HEIGHT);
|
|
34398
|
+
return {
|
|
34399
|
+
top,
|
|
34400
|
+
height: Math.max(MIN_EVENT_HEIGHT, Math.min(Math.max(e, 0), gridMax) - top)
|
|
34401
|
+
};
|
|
34402
|
+
}
|
|
34403
|
+
function layoutLanes(boxes) {
|
|
34404
|
+
const sorted = boxes.slice().sort((a, b) => a.top - b.top || b.height - a.height);
|
|
34405
|
+
const result = {};
|
|
34406
|
+
let cluster = [];
|
|
34407
|
+
let laneEnds = [];
|
|
34408
|
+
let clusterEnd = -1;
|
|
34409
|
+
const flush = () => {
|
|
34410
|
+
for (const id of cluster) result[id].lanes = laneEnds.length;
|
|
34411
|
+
cluster = [];
|
|
34412
|
+
laneEnds = [];
|
|
34413
|
+
};
|
|
34414
|
+
for (const b of sorted) {
|
|
34415
|
+
if (cluster.length && b.top >= clusterEnd) flush();
|
|
34416
|
+
let lane = laneEnds.findIndex((end) => end <= b.top);
|
|
34417
|
+
if (lane === -1) {
|
|
34418
|
+
lane = laneEnds.length;
|
|
34419
|
+
laneEnds.push(0);
|
|
34420
|
+
}
|
|
34421
|
+
laneEnds[lane] = b.top + b.height;
|
|
34422
|
+
clusterEnd = cluster.length ? Math.max(clusterEnd, b.top + b.height) : b.top + b.height;
|
|
34423
|
+
cluster.push(b.id);
|
|
34424
|
+
result[b.id] = {
|
|
34425
|
+
lane,
|
|
34426
|
+
lanes: 1
|
|
34427
|
+
};
|
|
34428
|
+
}
|
|
34429
|
+
flush();
|
|
34430
|
+
return result;
|
|
34431
|
+
}
|
|
34432
|
+
var CalendarComponent = class CalendarComponent {
|
|
34433
|
+
clickable(dateStr) {
|
|
34434
|
+
return this.canCreate() && !(this.disablePast() && dateStr < this.todayStr());
|
|
34435
|
+
}
|
|
34436
|
+
constructor() {
|
|
34437
|
+
this.items = input([], ...ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []);
|
|
34438
|
+
this.loading = input(false, ...ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []);
|
|
34439
|
+
this.view = model("month", ...ngDevMode ? [{ debugName: "view" }] : /* istanbul ignore next */ []);
|
|
34440
|
+
this.views = input([
|
|
34441
|
+
"week",
|
|
34442
|
+
"month",
|
|
34443
|
+
"agenda"
|
|
34444
|
+
], ...ngDevMode ? [{ debugName: "views" }] : /* istanbul ignore next */ []);
|
|
34445
|
+
this.anchorDate = model(/* @__PURE__ */ new Date(), ...ngDevMode ? [{ debugName: "anchorDate" }] : /* istanbul ignore next */ []);
|
|
34446
|
+
this.filters = input([], ...ngDevMode ? [{ debugName: "filters" }] : /* istanbul ignore next */ []);
|
|
34447
|
+
this.filterLabel = input("", ...ngDevMode ? [{ debugName: "filterLabel" }] : /* istanbul ignore next */ []);
|
|
34448
|
+
this.filterMode = input("multi", ...ngDevMode ? [{ debugName: "filterMode" }] : /* istanbul ignore next */ []);
|
|
34449
|
+
this.activeFilters = model([], ...ngDevMode ? [{ debugName: "activeFilters" }] : /* istanbul ignore next */ []);
|
|
34450
|
+
this.showFilterCounts = input(false, ...ngDevMode ? [{ debugName: "showFilterCounts" }] : /* istanbul ignore next */ []);
|
|
34451
|
+
this.canCreate = input(false, ...ngDevMode ? [{ debugName: "canCreate" }] : /* istanbul ignore next */ []);
|
|
34452
|
+
this.disablePast = input(false, ...ngDevMode ? [{ debugName: "disablePast" }] : /* istanbul ignore next */ []);
|
|
34453
|
+
this.maxVisible = input(3, ...ngDevMode ? [{ debugName: "maxVisible" }] : /* istanbul ignore next */ []);
|
|
34454
|
+
this.chipLayout = input("inline", ...ngDevMode ? [{ debugName: "chipLayout" }] : /* istanbul ignore next */ []);
|
|
34455
|
+
this.sortByTime = input(true, ...ngDevMode ? [{ debugName: "sortByTime" }] : /* istanbul ignore next */ []);
|
|
34456
|
+
this.startHour = input(7, ...ngDevMode ? [{ debugName: "startHour" }] : /* istanbul ignore next */ []);
|
|
34457
|
+
this.endHour = input(21, ...ngDevMode ? [{ debugName: "endHour" }] : /* istanbul ignore next */ []);
|
|
34458
|
+
this.emptyMessage = input("No events in this period.", ...ngDevMode ? [{ debugName: "emptyMessage" }] : /* istanbul ignore next */ []);
|
|
34459
|
+
this.dayLabelFn = input(null, ...ngDevMode ? [{ debugName: "dayLabelFn" }] : /* istanbul ignore next */ []);
|
|
34460
|
+
this.rangeChange = output();
|
|
34461
|
+
this.itemClick = output();
|
|
34462
|
+
this.dateClick = output();
|
|
34463
|
+
this.slotClick = output();
|
|
34464
|
+
this.moreClick = output();
|
|
34465
|
+
this.host = inject(ElementRef);
|
|
34466
|
+
this.weekDayLabels = WEEK_DAY_LABELS;
|
|
34467
|
+
this.weekDayNames = [
|
|
34468
|
+
"Sunday",
|
|
34469
|
+
"Monday",
|
|
34470
|
+
"Tuesday",
|
|
34471
|
+
"Wednesday",
|
|
34472
|
+
"Thursday",
|
|
34473
|
+
"Friday",
|
|
34474
|
+
"Saturday"
|
|
34475
|
+
];
|
|
34476
|
+
this.skeletonCells = Array.from({ length: 42 }, (_, i) => i);
|
|
34477
|
+
this.formatHour = formatHour;
|
|
34478
|
+
this.todayStr = signal(toDateStr(/* @__PURE__ */ new Date()), ...ngDevMode ? [{ debugName: "todayStr" }] : /* istanbul ignore next */ []);
|
|
34479
|
+
this.focusedDate = signal(null, ...ngDevMode ? [{ debugName: "focusedDate" }] : /* istanbul ignore next */ []);
|
|
34480
|
+
this.lastRangeKey = "";
|
|
34481
|
+
this.hours = computed(() => Array.from({ length: Math.max(1, this.endHour() - this.startHour() + 1) }, (_, i) => i + this.startHour()), ...ngDevMode ? [{ debugName: "hours" }] : /* istanbul ignore next */ []);
|
|
34482
|
+
this.monthCells = computed(() => buildMonthCells(this.anchorDate(), this.todayStr()), ...ngDevMode ? [{ debugName: "monthCells" }] : /* istanbul ignore next */ []);
|
|
34483
|
+
this.weekDays = computed(() => buildWeekDays(this.anchorDate(), this.todayStr()), ...ngDevMode ? [{ debugName: "weekDays" }] : /* istanbul ignore next */ []);
|
|
34484
|
+
this.periodLabel = computed(() => periodLabelFor(this.view(), this.anchorDate(), this.todayStr()), ...ngDevMode ? [{ debugName: "periodLabel" }] : /* istanbul ignore next */ []);
|
|
34485
|
+
this.viewTabs = computed(() => this.views().map((v) => ({
|
|
34486
|
+
key: v,
|
|
34487
|
+
label: v === "week" ? "Week" : v === "month" ? "Month" : "Agenda"
|
|
34488
|
+
})), ...ngDevMode ? [{ debugName: "viewTabs" }] : /* istanbul ignore next */ []);
|
|
34489
|
+
this.typeCounts = computed(() => {
|
|
34490
|
+
const counts = {};
|
|
34491
|
+
for (const e of this.items()) if (e.type) counts[e.type] = (counts[e.type] ?? 0) + 1;
|
|
34492
|
+
return counts;
|
|
34493
|
+
}, ...ngDevMode ? [{ debugName: "typeCounts" }] : /* istanbul ignore next */ []);
|
|
34494
|
+
this.byDate = computed(() => {
|
|
34495
|
+
const active = this.activeFilters();
|
|
34496
|
+
const map = {};
|
|
34497
|
+
if (isDevMode()) {
|
|
34498
|
+
const seen = /* @__PURE__ */ new Set();
|
|
34499
|
+
for (const e of this.items()) {
|
|
34500
|
+
if (seen.has(e.id)) {
|
|
34501
|
+
console.warn(`ui-calendar: duplicate item id "${e.id}" — ids must be unique across all items (prefix them by source).`);
|
|
34502
|
+
break;
|
|
34503
|
+
}
|
|
34504
|
+
seen.add(e.id);
|
|
34505
|
+
}
|
|
34506
|
+
}
|
|
34507
|
+
for (const e of this.items()) {
|
|
34508
|
+
if (active.length && !(e.type && active.includes(e.type))) continue;
|
|
34509
|
+
(map[e.date] ??= []).push(e);
|
|
34510
|
+
}
|
|
34511
|
+
if (this.sortByTime()) for (const k of Object.keys(map)) map[k] = map[k].slice().sort((a, b) => (a.startTime ?? "").localeCompare(b.startTime ?? ""));
|
|
34512
|
+
return map;
|
|
34513
|
+
}, ...ngDevMode ? [{ debugName: "byDate" }] : /* istanbul ignore next */ []);
|
|
34514
|
+
this.agendaGroups = computed(() => Object.entries(this.byDate()).sort(([a], [b]) => a.localeCompare(b)).map(([dateStr, items]) => ({
|
|
34515
|
+
dateStr,
|
|
34516
|
+
items
|
|
34517
|
+
})), ...ngDevMode ? [{ debugName: "agendaGroups" }] : /* istanbul ignore next */ []);
|
|
34518
|
+
this.monthRows = computed(() => {
|
|
34519
|
+
const max = this.maxVisible();
|
|
34520
|
+
const cells = this.monthCells().map((day) => {
|
|
34521
|
+
const items = this.byDate()[day.dateStr] ?? [];
|
|
34522
|
+
return {
|
|
34523
|
+
day,
|
|
34524
|
+
items,
|
|
34525
|
+
visible: items.slice(0, max),
|
|
34526
|
+
overflow: Math.max(0, items.length - max),
|
|
34527
|
+
clickable: this.clickable(day.dateStr),
|
|
34528
|
+
label: this.dayAriaLabel(day.dateStr, items)
|
|
34529
|
+
};
|
|
34530
|
+
});
|
|
34531
|
+
return Array.from({ length: 6 }, (_, r) => ({
|
|
34532
|
+
key: cells[r * 7].day.dateStr,
|
|
34533
|
+
cells: cells.slice(r * 7, r * 7 + 7)
|
|
34534
|
+
}));
|
|
34535
|
+
}, ...ngDevMode ? [{ debugName: "monthRows" }] : /* istanbul ignore next */ []);
|
|
34536
|
+
this.weekColumns = computed(() => {
|
|
34537
|
+
const startHour = this.startHour(), endHour = this.endHour();
|
|
34538
|
+
return this.weekDays().map((day) => {
|
|
34539
|
+
const items = this.byDate()[day.dateStr] ?? [];
|
|
34540
|
+
const boxes = items.filter((e) => !e.allDay && !!e.startTime).map((item) => ({
|
|
34541
|
+
item,
|
|
34542
|
+
...timedBox(item.startTime, item.endTime, startHour, endHour)
|
|
34543
|
+
}));
|
|
34544
|
+
const lanes = layoutLanes(boxes.map((b) => ({
|
|
34545
|
+
id: b.item.id,
|
|
34546
|
+
top: b.top,
|
|
34547
|
+
height: b.height
|
|
34548
|
+
})));
|
|
34549
|
+
return {
|
|
34550
|
+
day,
|
|
34551
|
+
label: formatDayLabel(day.dateStr),
|
|
34552
|
+
clickable: this.clickable(day.dateStr),
|
|
34553
|
+
allDay: items.filter((e) => e.allDay || !e.startTime),
|
|
34554
|
+
timed: boxes.map((b) => ({
|
|
34555
|
+
...b,
|
|
34556
|
+
lane: lanes[b.item.id]
|
|
34557
|
+
}))
|
|
34558
|
+
};
|
|
34559
|
+
});
|
|
34560
|
+
}, ...ngDevMode ? [{ debugName: "weekColumns" }] : /* istanbul ignore next */ []);
|
|
34561
|
+
this.focusDate = computed(() => {
|
|
34562
|
+
const cells = this.monthCells();
|
|
34563
|
+
const f = this.focusedDate();
|
|
34564
|
+
if (f && cells.some((c) => c.dateStr === f)) return f;
|
|
34565
|
+
return (cells.find((c) => c.isToday) ?? cells.find((c) => c.isCurrentMonth) ?? cells[0]).dateStr;
|
|
34566
|
+
}, ...ngDevMode ? [{ debugName: "focusDate" }] : /* istanbul ignore next */ []);
|
|
34567
|
+
effect(() => {
|
|
34568
|
+
const view = this.view();
|
|
34569
|
+
const views = this.views();
|
|
34570
|
+
if (views.length && !views.includes(view)) {
|
|
34571
|
+
untracked(() => this.view.set(views[0]));
|
|
34572
|
+
return;
|
|
34573
|
+
}
|
|
34574
|
+
const range = rangeFor(view, this.anchorDate(), this.todayStr());
|
|
34575
|
+
const key = `${range.view}|${range.start}|${range.end}`;
|
|
34576
|
+
if (key === this.lastRangeKey) return;
|
|
34577
|
+
this.lastRangeKey = key;
|
|
34578
|
+
untracked(() => this.rangeChange.emit(range));
|
|
34579
|
+
});
|
|
34580
|
+
const destroyRef = inject(DestroyRef);
|
|
34581
|
+
const zone = inject(NgZone);
|
|
34582
|
+
const doc = inject(DOCUMENT);
|
|
34583
|
+
let timer;
|
|
34584
|
+
const refreshToday = () => zone.run(() => this.todayStr.set(toDateStr(/* @__PURE__ */ new Date())));
|
|
34585
|
+
const schedule = () => {
|
|
34586
|
+
const now = /* @__PURE__ */ new Date();
|
|
34587
|
+
const next = new Date(now.getFullYear(), now.getMonth(), now.getDate() + 1, 0, 0, 1);
|
|
34588
|
+
timer = setTimeout(() => {
|
|
34589
|
+
refreshToday();
|
|
34590
|
+
schedule();
|
|
34591
|
+
}, next.getTime() - now.getTime());
|
|
34592
|
+
};
|
|
34593
|
+
const onVisible = () => {
|
|
34594
|
+
if (doc.visibilityState === "visible") refreshToday();
|
|
34595
|
+
};
|
|
34596
|
+
if (!isPlatformBrowser(inject(PLATFORM_ID))) return;
|
|
34597
|
+
zone.runOutsideAngular(() => {
|
|
34598
|
+
schedule();
|
|
34599
|
+
doc.addEventListener("visibilitychange", onVisible);
|
|
34600
|
+
});
|
|
34601
|
+
destroyRef.onDestroy(() => {
|
|
34602
|
+
clearTimeout(timer);
|
|
34603
|
+
doc.removeEventListener("visibilitychange", onVisible);
|
|
34604
|
+
});
|
|
34605
|
+
}
|
|
34606
|
+
isFilterActive(value) {
|
|
34607
|
+
return this.activeFilters().includes(value);
|
|
34608
|
+
}
|
|
34609
|
+
toggleFilter(value) {
|
|
34610
|
+
const active = this.activeFilters();
|
|
34611
|
+
if (this.filterMode() === "single") {
|
|
34612
|
+
this.activeFilters.set(active.includes(value) ? [] : [value]);
|
|
34613
|
+
return;
|
|
34614
|
+
}
|
|
34615
|
+
this.activeFilters.set(active.includes(value) ? active.filter((v) => v !== value) : [...active, value]);
|
|
34616
|
+
}
|
|
34617
|
+
clearFilters() {
|
|
34618
|
+
this.activeFilters.set([]);
|
|
34619
|
+
}
|
|
34620
|
+
setView(v) {
|
|
34621
|
+
this.view.set(v);
|
|
34622
|
+
}
|
|
34623
|
+
navigate(direction) {
|
|
34624
|
+
this.focusedDate.set(null);
|
|
34625
|
+
this.anchorDate.set(shiftAnchor(this.view(), this.anchorDate(), direction));
|
|
34626
|
+
}
|
|
34627
|
+
goToday() {
|
|
34628
|
+
this.focusedDate.set(null);
|
|
34629
|
+
this.todayStr.set(toDateStr(/* @__PURE__ */ new Date()));
|
|
34630
|
+
this.anchorDate.set(/* @__PURE__ */ new Date());
|
|
34631
|
+
}
|
|
34632
|
+
dowLabel(dateStr) {
|
|
34633
|
+
return WEEK_DAY_LABELS[fromDateStr(dateStr).getDay()];
|
|
34634
|
+
}
|
|
34635
|
+
agendaDow(dateStr) {
|
|
34636
|
+
return fromDateStr(dateStr).toLocaleDateString("en-US", { weekday: "short" }).toUpperCase();
|
|
34637
|
+
}
|
|
34638
|
+
agendaDate(dateStr) {
|
|
34639
|
+
return fromDateStr(dateStr).toLocaleDateString("en-US", {
|
|
34640
|
+
month: "short",
|
|
34641
|
+
day: "numeric"
|
|
34642
|
+
});
|
|
34643
|
+
}
|
|
34644
|
+
chipTime(e) {
|
|
34645
|
+
if (e.timeLabel) return e.timeLabel;
|
|
34646
|
+
return e.startTime && !e.allDay ? formatTime$1(e.startTime) : "";
|
|
34647
|
+
}
|
|
34648
|
+
timeRange(e) {
|
|
34649
|
+
return e.startTime ? formatTime$1(e.startTime) + (e.endTime ? ` – ${formatTime$1(e.endTime)}` : "") : "";
|
|
34650
|
+
}
|
|
34651
|
+
itemLabel(e) {
|
|
34652
|
+
return e.ariaLabel || [this.chipTime(e), e.title].filter(Boolean).join(" ");
|
|
34653
|
+
}
|
|
34654
|
+
agendaMeta(e) {
|
|
34655
|
+
return [e.timeLabel ?? (!e.allDay && e.startTime ? this.timeRange(e) : ""), ...e.meta ?? []].filter(Boolean);
|
|
34656
|
+
}
|
|
34657
|
+
dayAriaLabel(dateStr, items) {
|
|
34658
|
+
const fn = this.dayLabelFn();
|
|
34659
|
+
if (fn) return fn(dateStr, items);
|
|
34660
|
+
const label = formatDayLabel(dateStr);
|
|
34661
|
+
return items.length ? `${label}, ${items.length} ${items.length === 1 ? "event" : "events"}` : label;
|
|
34662
|
+
}
|
|
34663
|
+
onDateClick(dateStr) {
|
|
34664
|
+
if (this.clickable(dateStr)) this.dateClick.emit(dateStr);
|
|
34665
|
+
}
|
|
34666
|
+
onCellKey(event, dateStr) {
|
|
34667
|
+
if (event.target !== event.currentTarget || event.altKey || event.ctrlKey || event.metaKey) return;
|
|
34668
|
+
if (event.key === "Enter" || event.key === " ") {
|
|
34669
|
+
event.preventDefault();
|
|
34670
|
+
this.onDateClick(dateStr);
|
|
34671
|
+
return;
|
|
34672
|
+
}
|
|
34673
|
+
const d = fromDateStr(dateStr);
|
|
34674
|
+
const step = {
|
|
34675
|
+
ArrowLeft: -1,
|
|
34676
|
+
ArrowRight: 1,
|
|
34677
|
+
ArrowUp: -7,
|
|
34678
|
+
ArrowDown: 7,
|
|
34679
|
+
Home: -d.getDay(),
|
|
34680
|
+
End: 6 - d.getDay()
|
|
34681
|
+
};
|
|
34682
|
+
if (!(event.key in step)) return;
|
|
34683
|
+
event.preventDefault();
|
|
34684
|
+
const target = toDateStr(new Date(d.getFullYear(), d.getMonth(), d.getDate() + step[event.key]));
|
|
34685
|
+
if (!this.monthCells().some((c) => c.dateStr === target)) return;
|
|
34686
|
+
this.focusedDate.set(target);
|
|
34687
|
+
this.host.nativeElement.querySelector(`.month-cell[data-date="${target}"]`)?.focus();
|
|
34688
|
+
}
|
|
34689
|
+
onAddAllDay(dateStr, event) {
|
|
34690
|
+
event.stopPropagation();
|
|
34691
|
+
this.onDateClick(dateStr);
|
|
34692
|
+
}
|
|
34693
|
+
onAddTimed(dateStr, event) {
|
|
34694
|
+
event.stopPropagation();
|
|
34695
|
+
if (this.clickable(dateStr)) this.slotClick.emit({
|
|
34696
|
+
date: dateStr,
|
|
34697
|
+
time: `${String(this.startHour()).padStart(2, "0")}:00`
|
|
34698
|
+
});
|
|
34699
|
+
}
|
|
34700
|
+
onSlotClick(dateStr, event) {
|
|
34701
|
+
if (!this.clickable(dateStr)) return;
|
|
34702
|
+
const rect = event.currentTarget.getBoundingClientRect();
|
|
34703
|
+
const hour = Math.min(this.endHour(), Math.max(this.startHour(), this.startHour() + Math.floor((event.clientY - rect.top) / 60)));
|
|
34704
|
+
this.slotClick.emit({
|
|
34705
|
+
date: dateStr,
|
|
34706
|
+
time: `${String(hour).padStart(2, "0")}:00`
|
|
34707
|
+
});
|
|
34708
|
+
}
|
|
34709
|
+
onItemClick(item, event) {
|
|
34710
|
+
event.stopPropagation();
|
|
34711
|
+
this.itemClick.emit(item);
|
|
34712
|
+
}
|
|
34713
|
+
onMoreClick(dateStr, items, event) {
|
|
34714
|
+
event.stopPropagation();
|
|
34715
|
+
this.moreClick.emit({
|
|
34716
|
+
date: dateStr,
|
|
34717
|
+
items
|
|
34718
|
+
});
|
|
34719
|
+
}
|
|
34720
|
+
static {
|
|
34721
|
+
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
34722
|
+
minVersion: "12.0.0",
|
|
34723
|
+
version: "22.2.2",
|
|
34724
|
+
ngImport: i0,
|
|
34725
|
+
type: CalendarComponent,
|
|
34726
|
+
deps: [],
|
|
34727
|
+
target: i0.ɵɵFactoryTarget.Component
|
|
34728
|
+
});
|
|
34729
|
+
}
|
|
34730
|
+
static {
|
|
34731
|
+
this.ɵcmp = i0.ɵɵngDeclareComponent({
|
|
34732
|
+
minVersion: "17.0.0",
|
|
34733
|
+
version: "22.2.2",
|
|
34734
|
+
type: CalendarComponent,
|
|
34735
|
+
isStandalone: true,
|
|
34736
|
+
selector: "ui-calendar",
|
|
34737
|
+
inputs: {
|
|
34738
|
+
items: {
|
|
34739
|
+
classPropertyName: "items",
|
|
34740
|
+
publicName: "items",
|
|
34741
|
+
isSignal: true,
|
|
34742
|
+
isRequired: false,
|
|
34743
|
+
transformFunction: null
|
|
34744
|
+
},
|
|
34745
|
+
loading: {
|
|
34746
|
+
classPropertyName: "loading",
|
|
34747
|
+
publicName: "loading",
|
|
34748
|
+
isSignal: true,
|
|
34749
|
+
isRequired: false,
|
|
34750
|
+
transformFunction: null
|
|
34751
|
+
},
|
|
34752
|
+
view: {
|
|
34753
|
+
classPropertyName: "view",
|
|
34754
|
+
publicName: "view",
|
|
34755
|
+
isSignal: true,
|
|
34756
|
+
isRequired: false,
|
|
34757
|
+
transformFunction: null
|
|
34758
|
+
},
|
|
34759
|
+
views: {
|
|
34760
|
+
classPropertyName: "views",
|
|
34761
|
+
publicName: "views",
|
|
34762
|
+
isSignal: true,
|
|
34763
|
+
isRequired: false,
|
|
34764
|
+
transformFunction: null
|
|
34765
|
+
},
|
|
34766
|
+
anchorDate: {
|
|
34767
|
+
classPropertyName: "anchorDate",
|
|
34768
|
+
publicName: "anchorDate",
|
|
34769
|
+
isSignal: true,
|
|
34770
|
+
isRequired: false,
|
|
34771
|
+
transformFunction: null
|
|
34772
|
+
},
|
|
34773
|
+
filters: {
|
|
34774
|
+
classPropertyName: "filters",
|
|
34775
|
+
publicName: "filters",
|
|
34776
|
+
isSignal: true,
|
|
34777
|
+
isRequired: false,
|
|
34778
|
+
transformFunction: null
|
|
34779
|
+
},
|
|
34780
|
+
filterLabel: {
|
|
34781
|
+
classPropertyName: "filterLabel",
|
|
34782
|
+
publicName: "filterLabel",
|
|
34783
|
+
isSignal: true,
|
|
34784
|
+
isRequired: false,
|
|
34785
|
+
transformFunction: null
|
|
34786
|
+
},
|
|
34787
|
+
filterMode: {
|
|
34788
|
+
classPropertyName: "filterMode",
|
|
34789
|
+
publicName: "filterMode",
|
|
34790
|
+
isSignal: true,
|
|
34791
|
+
isRequired: false,
|
|
34792
|
+
transformFunction: null
|
|
34793
|
+
},
|
|
34794
|
+
activeFilters: {
|
|
34795
|
+
classPropertyName: "activeFilters",
|
|
34796
|
+
publicName: "activeFilters",
|
|
34797
|
+
isSignal: true,
|
|
34798
|
+
isRequired: false,
|
|
34799
|
+
transformFunction: null
|
|
34800
|
+
},
|
|
34801
|
+
showFilterCounts: {
|
|
34802
|
+
classPropertyName: "showFilterCounts",
|
|
34803
|
+
publicName: "showFilterCounts",
|
|
34804
|
+
isSignal: true,
|
|
34805
|
+
isRequired: false,
|
|
34806
|
+
transformFunction: null
|
|
34807
|
+
},
|
|
34808
|
+
canCreate: {
|
|
34809
|
+
classPropertyName: "canCreate",
|
|
34810
|
+
publicName: "canCreate",
|
|
34811
|
+
isSignal: true,
|
|
34812
|
+
isRequired: false,
|
|
34813
|
+
transformFunction: null
|
|
34814
|
+
},
|
|
34815
|
+
disablePast: {
|
|
34816
|
+
classPropertyName: "disablePast",
|
|
34817
|
+
publicName: "disablePast",
|
|
34818
|
+
isSignal: true,
|
|
34819
|
+
isRequired: false,
|
|
34820
|
+
transformFunction: null
|
|
34821
|
+
},
|
|
34822
|
+
maxVisible: {
|
|
34823
|
+
classPropertyName: "maxVisible",
|
|
34824
|
+
publicName: "maxVisible",
|
|
34825
|
+
isSignal: true,
|
|
34826
|
+
isRequired: false,
|
|
34827
|
+
transformFunction: null
|
|
34828
|
+
},
|
|
34829
|
+
chipLayout: {
|
|
34830
|
+
classPropertyName: "chipLayout",
|
|
34831
|
+
publicName: "chipLayout",
|
|
34832
|
+
isSignal: true,
|
|
34833
|
+
isRequired: false,
|
|
34834
|
+
transformFunction: null
|
|
34835
|
+
},
|
|
34836
|
+
sortByTime: {
|
|
34837
|
+
classPropertyName: "sortByTime",
|
|
34838
|
+
publicName: "sortByTime",
|
|
34839
|
+
isSignal: true,
|
|
34840
|
+
isRequired: false,
|
|
34841
|
+
transformFunction: null
|
|
34842
|
+
},
|
|
34843
|
+
startHour: {
|
|
34844
|
+
classPropertyName: "startHour",
|
|
34845
|
+
publicName: "startHour",
|
|
34846
|
+
isSignal: true,
|
|
34847
|
+
isRequired: false,
|
|
34848
|
+
transformFunction: null
|
|
34849
|
+
},
|
|
34850
|
+
endHour: {
|
|
34851
|
+
classPropertyName: "endHour",
|
|
34852
|
+
publicName: "endHour",
|
|
34853
|
+
isSignal: true,
|
|
34854
|
+
isRequired: false,
|
|
34855
|
+
transformFunction: null
|
|
34856
|
+
},
|
|
34857
|
+
emptyMessage: {
|
|
34858
|
+
classPropertyName: "emptyMessage",
|
|
34859
|
+
publicName: "emptyMessage",
|
|
34860
|
+
isSignal: true,
|
|
34861
|
+
isRequired: false,
|
|
34862
|
+
transformFunction: null
|
|
34863
|
+
},
|
|
34864
|
+
dayLabelFn: {
|
|
34865
|
+
classPropertyName: "dayLabelFn",
|
|
34866
|
+
publicName: "dayLabelFn",
|
|
34867
|
+
isSignal: true,
|
|
34868
|
+
isRequired: false,
|
|
34869
|
+
transformFunction: null
|
|
34870
|
+
}
|
|
34871
|
+
},
|
|
34872
|
+
outputs: {
|
|
34873
|
+
view: "viewChange",
|
|
34874
|
+
anchorDate: "anchorDateChange",
|
|
34875
|
+
activeFilters: "activeFiltersChange",
|
|
34876
|
+
rangeChange: "rangeChange",
|
|
34877
|
+
itemClick: "itemClick",
|
|
34878
|
+
dateClick: "dateClick",
|
|
34879
|
+
slotClick: "slotClick",
|
|
34880
|
+
moreClick: "moreClick"
|
|
34881
|
+
},
|
|
34882
|
+
ngImport: i0,
|
|
34883
|
+
template: `
|
|
34884
|
+
<div class="cal-toolbar">
|
|
34885
|
+
<div class="toolbar-left">
|
|
34886
|
+
<h2 class="period-label" aria-live="polite" aria-atomic="true">{{ periodLabel() }}</h2>
|
|
34887
|
+
<div class="nav-controls">
|
|
34888
|
+
<button type="button" class="btn-nav" (click)="navigate(-1)" aria-label="Previous">
|
|
34889
|
+
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" aria-hidden="true"><polyline points="15 18 9 12 15 6"/></svg>
|
|
34890
|
+
</button>
|
|
34891
|
+
<button type="button" class="btn-today" (click)="goToday()">Today</button>
|
|
34892
|
+
<button type="button" class="btn-nav" (click)="navigate(1)" aria-label="Next">
|
|
34893
|
+
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" aria-hidden="true"><polyline points="9 18 15 12 9 6"/></svg>
|
|
34894
|
+
</button>
|
|
34895
|
+
</div>
|
|
34896
|
+
</div>
|
|
34897
|
+
<div class="toolbar-center"><ng-content select="[calendar-summary]" /></div>
|
|
34898
|
+
<div class="toolbar-right">
|
|
34899
|
+
@if (viewTabs().length > 1) {
|
|
34900
|
+
<ui-pill-tabs ariaLabel="Calendar view" name="ui-calendar-view" [tabs]="viewTabs()" [activeKey]="view()" (tabChange)="setView($any($event))" />
|
|
34901
|
+
}
|
|
34902
|
+
<ng-content select="[calendar-actions]" />
|
|
34903
|
+
</div>
|
|
34904
|
+
</div>
|
|
34905
|
+
|
|
34906
|
+
@if (!loading()) {
|
|
34907
|
+
<div class="mobile-summary"><ng-content select="[calendar-summary-mobile]" /></div>
|
|
34908
|
+
}
|
|
34909
|
+
|
|
34910
|
+
@if (filters().length && !loading()) {
|
|
34911
|
+
<div class="filter-bar">
|
|
34912
|
+
@if (filterLabel()) { <div class="filter-bar-label">{{ filterLabel() }}</div> }
|
|
34913
|
+
<div class="filter-chips" role="group" [attr.aria-label]="filterLabel() || 'Filter'">
|
|
34914
|
+
<button type="button" class="filter-chip" [class.active-all]="!activeFilters().length" [attr.aria-pressed]="!activeFilters().length" (click)="clearFilters()">
|
|
34915
|
+
All
|
|
34916
|
+
@if (showFilterCounts()) { <span class="chip-count">{{ items().length }}</span> }
|
|
34917
|
+
</button>
|
|
34918
|
+
@for (f of filters(); track f.value) {
|
|
34919
|
+
<button type="button" class="filter-chip"
|
|
34920
|
+
[class.active-type]="isFilterActive(f.value)"
|
|
34921
|
+
[attr.aria-pressed]="isFilterActive(f.value)"
|
|
34922
|
+
[style.--chip-color]="f.color"
|
|
34923
|
+
[style.--chip-bg]="f.bgColor ?? null"
|
|
34924
|
+
(click)="toggleFilter(f.value)">
|
|
34925
|
+
<span class="chip-dot" [style.background]="f.color" aria-hidden="true"></span>
|
|
34926
|
+
{{ f.label }}
|
|
34927
|
+
@if (showFilterCounts()) { <span class="chip-count">{{ typeCounts()[f.value] ?? 0 }}</span> }
|
|
34928
|
+
</button>
|
|
34929
|
+
}
|
|
34930
|
+
</div>
|
|
34931
|
+
</div>
|
|
34932
|
+
}
|
|
34933
|
+
|
|
34934
|
+
@if (loading()) {
|
|
34935
|
+
<div class="cal-skeleton" aria-busy="true" aria-label="Loading calendar" role="status">
|
|
34936
|
+
<div class="skel-dow-row">
|
|
34937
|
+
@for (d of weekDayLabels; track d) { <div class="skel-dow"><ui-skeleton [height]="16" width="36px" [radius]="4" /></div> }
|
|
34938
|
+
</div>
|
|
34939
|
+
<div class="skel-month-grid">
|
|
34940
|
+
@for (i of skeletonCells; track i) {
|
|
34941
|
+
<div class="skel-cell">
|
|
34942
|
+
<ui-skeleton [height]="22" width="22px" [radius]="11" />
|
|
34943
|
+
@if (i % 3 === 0) { <ui-skeleton [height]="14" [radius]="3" /> }
|
|
34944
|
+
@if (i % 5 === 0) { <ui-skeleton [height]="14" width="72%" [radius]="3" /> }
|
|
34945
|
+
</div>
|
|
34946
|
+
}
|
|
34947
|
+
</div>
|
|
34948
|
+
</div>
|
|
34949
|
+
} @else {
|
|
34950
|
+
@switch (view()) {
|
|
34951
|
+
@case ('month') {
|
|
34952
|
+
<div class="month-view">
|
|
34953
|
+
<div class="month-grid" role="grid" [attr.aria-label]="periodLabel()">
|
|
34954
|
+
<div class="month-header" role="row">
|
|
34955
|
+
@for (d of weekDayLabels; track d; let i = $index) {
|
|
34956
|
+
<div class="month-dow" role="columnheader" [attr.aria-label]="weekDayNames[i]">
|
|
34957
|
+
<span class="dow-full" aria-hidden="true">{{ d }}</span><span class="dow-short" aria-hidden="true">{{ d.slice(0, 2) }}</span>
|
|
34958
|
+
</div>
|
|
34959
|
+
}
|
|
34960
|
+
</div>
|
|
34961
|
+
@for (row of monthRows(); track row.key) {
|
|
34962
|
+
<div class="month-row" role="row">
|
|
34963
|
+
@for (c of row.cells; track c.day.dateStr) {
|
|
34964
|
+
<div class="month-cell" role="gridcell"
|
|
34965
|
+
[attr.data-date]="c.day.dateStr"
|
|
34966
|
+
[class.other-month]="!c.day.isCurrentMonth" [class.today]="c.day.isToday" [class.weekend]="c.day.isWeekend"
|
|
34967
|
+
[class.clickable]="c.clickable"
|
|
34968
|
+
[attr.tabindex]="c.day.dateStr === focusDate() ? 0 : -1"
|
|
34969
|
+
[attr.aria-label]="c.label"
|
|
34970
|
+
[attr.aria-current]="c.day.isToday ? 'date' : null"
|
|
34971
|
+
(click)="onDateClick(c.day.dateStr)"
|
|
34972
|
+
(focus)="focusedDate.set(c.day.dateStr)"
|
|
34973
|
+
(keydown)="onCellKey($event, c.day.dateStr)">
|
|
34974
|
+
<span class="day-num" [class.today-badge]="c.day.isToday">{{ c.day.dayNum }}</span>
|
|
34975
|
+
<div class="cell-events">
|
|
34976
|
+
@for (e of c.visible; track e.id) {
|
|
34977
|
+
<button type="button" class="event-chip" [class.stacked]="chipLayout() === 'stacked'" [class.has-head]="!!(e.iconPath || chipTime(e))" [style.background]="e.bgColor" [style.borderLeftColor]="e.color"
|
|
34978
|
+
[attr.aria-label]="itemLabel(e)" [title]="e.title"
|
|
34979
|
+
(click)="onItemClick(e, $event)">
|
|
34980
|
+
<span class="chip-head">
|
|
34981
|
+
@if (e.iconPath) {
|
|
34982
|
+
<svg class="chip-icon" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path [attr.d]="e.iconPath"/></svg>
|
|
34983
|
+
}
|
|
34984
|
+
@if (chipTime(e); as t) { <span class="chip-time">{{ t }}</span> }
|
|
34985
|
+
</span>
|
|
34986
|
+
<span class="chip-title" [class.strike]="e.strike">{{ e.title }}</span>
|
|
34987
|
+
@if (e.tag) { <span class="chip-src">{{ e.tag }}</span> }
|
|
34988
|
+
</button>
|
|
34989
|
+
}
|
|
34990
|
+
@if (c.overflow > 0) {
|
|
34991
|
+
<button type="button" class="more-events" (click)="onMoreClick(c.day.dateStr, c.items, $event)">+{{ c.overflow }} more</button>
|
|
34992
|
+
}
|
|
34993
|
+
</div>
|
|
34994
|
+
</div>
|
|
34995
|
+
}
|
|
34996
|
+
</div>
|
|
34997
|
+
}
|
|
34998
|
+
</div>
|
|
34999
|
+
</div>
|
|
35000
|
+
}
|
|
35001
|
+
@case ('week') {
|
|
35002
|
+
<div class="week-view">
|
|
35003
|
+
<div class="week-header">
|
|
35004
|
+
<div class="time-gutter"></div>
|
|
35005
|
+
@for (col of weekColumns(); track col.day.dateStr) {
|
|
35006
|
+
<div class="week-day-hdr" [class.today]="col.day.isToday">
|
|
35007
|
+
<span class="wdh-dow">{{ dowLabel(col.day.dateStr) }}</span>
|
|
35008
|
+
<span class="wdh-num" [class.today-badge]="col.day.isToday">{{ col.day.dayNum }}</span>
|
|
35009
|
+
</div>
|
|
35010
|
+
}
|
|
35011
|
+
</div>
|
|
35012
|
+
<div class="allday-row">
|
|
35013
|
+
<div class="time-gutter allday-label">All day</div>
|
|
35014
|
+
@for (col of weekColumns(); track col.day.dateStr) {
|
|
35015
|
+
<div class="allday-cell" [class.clickable]="col.clickable" (click)="onDateClick(col.day.dateStr)">
|
|
35016
|
+
@if (col.clickable) {
|
|
35017
|
+
<button type="button" class="slot-add" [attr.aria-label]="'Add all-day event on ' + col.label" (click)="onAddAllDay(col.day.dateStr, $event)">+ Add</button>
|
|
35018
|
+
}
|
|
35019
|
+
@for (e of col.allDay; track e.id) {
|
|
35020
|
+
<button type="button" class="allday-chip" [style.background]="e.bgColor" [style.borderLeftColor]="e.color"
|
|
35021
|
+
[attr.aria-label]="itemLabel(e)" (click)="onItemClick(e, $event)">{{ e.title }}</button>
|
|
35022
|
+
}
|
|
35023
|
+
</div>
|
|
35024
|
+
}
|
|
35025
|
+
</div>
|
|
35026
|
+
<div class="week-body">
|
|
35027
|
+
<div class="time-col">
|
|
35028
|
+
@for (h of hours(); track h) { <div class="time-slot-label">{{ formatHour(h) }}</div> }
|
|
35029
|
+
</div>
|
|
35030
|
+
@for (col of weekColumns(); track col.day.dateStr) {
|
|
35031
|
+
<div class="day-col" [class.today]="col.day.isToday" [class.clickable]="col.clickable" (click)="onSlotClick(col.day.dateStr, $event)">
|
|
35032
|
+
@if (col.clickable) {
|
|
35033
|
+
<button type="button" class="slot-add" [attr.aria-label]="'Add event on ' + col.label" (click)="onAddTimed(col.day.dateStr, $event)">+ Add</button>
|
|
35034
|
+
}
|
|
35035
|
+
@for (h of hours(); track h) { <div class="time-slot"></div> }
|
|
35036
|
+
@for (t of col.timed; track t.item.id) {
|
|
35037
|
+
<button type="button" class="timed-event"
|
|
35038
|
+
[style.top.px]="t.top" [style.height.px]="t.height"
|
|
35039
|
+
[style.left]="'calc(' + (t.lane.lane / t.lane.lanes * 100) + '% + 2px)'"
|
|
35040
|
+
[style.width]="'calc(' + (100 / t.lane.lanes) + '% - 4px)'"
|
|
35041
|
+
[style.background]="t.item.bgColor" [style.borderLeftColor]="t.item.color"
|
|
35042
|
+
[attr.aria-label]="itemLabel(t.item)" (click)="onItemClick(t.item, $event)">
|
|
35043
|
+
<span class="te-title" [class.strike]="t.item.strike">{{ t.item.title }}</span>
|
|
35044
|
+
@if (t.item.startTime) { <span class="te-time">{{ t.item.timeLabel || timeRange(t.item) }}</span> }
|
|
35045
|
+
</button>
|
|
35046
|
+
}
|
|
35047
|
+
</div>
|
|
35048
|
+
}
|
|
35049
|
+
</div>
|
|
35050
|
+
</div>
|
|
35051
|
+
}
|
|
35052
|
+
@case ('agenda') {
|
|
35053
|
+
<div class="agenda-view">
|
|
35054
|
+
@if (agendaGroups().length === 0) {
|
|
35055
|
+
<ui-empty-state iconType="task" [message]="emptyMessage()" />
|
|
35056
|
+
}
|
|
35057
|
+
@for (group of agendaGroups(); track group.dateStr) {
|
|
35058
|
+
<div class="agenda-group">
|
|
35059
|
+
<div class="agenda-date-hdr">
|
|
35060
|
+
<span class="ag-dow">{{ agendaDow(group.dateStr) }}</span>
|
|
35061
|
+
<span class="ag-date">{{ agendaDate(group.dateStr) }}</span>
|
|
35062
|
+
@if (group.dateStr === todayStr()) { <ui-badge label="Today" variant="blue" /> }
|
|
35063
|
+
</div>
|
|
35064
|
+
<div class="agenda-events">
|
|
35065
|
+
@for (e of group.items; track e.id) {
|
|
35066
|
+
<button type="button" class="agenda-event" [attr.aria-label]="e.ariaLabel || null" (click)="onItemClick(e, $event)">
|
|
35067
|
+
<span class="ae-color-bar" [style.background]="e.color"></span>
|
|
35068
|
+
<span class="ae-body">
|
|
35069
|
+
<span class="ae-top">
|
|
35070
|
+
<span class="ae-title" [class.strike]="e.strike">{{ e.title }}</span>
|
|
35071
|
+
@for (b of e.badges ?? []; track b.label) { <ui-badge [label]="b.label" [variant]="b.variant" /> }
|
|
35072
|
+
</span>
|
|
35073
|
+
@if (agendaMeta(e).length) {
|
|
35074
|
+
<span class="ae-meta">
|
|
35075
|
+
@for (m of agendaMeta(e); track $index) { <span class="ae-meta-item">{{ m }}</span> }
|
|
35076
|
+
</span>
|
|
35077
|
+
}
|
|
35078
|
+
</span>
|
|
35079
|
+
</button>
|
|
35080
|
+
}
|
|
35081
|
+
</div>
|
|
35082
|
+
</div>
|
|
35083
|
+
}
|
|
35084
|
+
</div>
|
|
35085
|
+
}
|
|
35086
|
+
}
|
|
35087
|
+
}
|
|
35088
|
+
<ui-toast />
|
|
35089
|
+
`,
|
|
35090
|
+
isInline: true,
|
|
35091
|
+
styles: [":host{display:flex;flex-direction:column;gap:0;height:100%;min-height:0}.cal-toolbar{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;padding-bottom:16px;gap:16px;flex-shrink:0}.toolbar-left{display:flex;flex-direction:column;align-items:flex-start;gap:6px}.toolbar-center{display:flex;align-items:center;justify-content:center;gap:10px}.toolbar-right{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:wrap}.period-label{font-size:1.125rem;font-weight:700;color:#111827;margin:0}.nav-controls{display:flex;align-items:center;gap:8px}.btn-nav{width:32px;height:32px;border:1px solid #e2e8f0;background:#fff;border-radius:6px;font-family:inherit;cursor:pointer;display:flex;align-items:center;justify-content:center;color:#475569}.btn-nav:hover{background:#f8fafc}.btn-today{padding:6px 14px;border:1px solid #e2e8f0;background:#fff;border-radius:6px;font-family:inherit;font-size:.875rem;font-weight:500;color:#374151;cursor:pointer}.btn-today:hover{background:#f8fafc}.btn-nav:focus-visible,.btn-today:focus-visible,.filter-chip:focus-visible,.event-chip:focus-visible,.more-events:focus-visible,.allday-chip:focus-visible,.timed-event:focus-visible,.agenda-event:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.month-cell:focus-visible{outline:2px solid #3b82f6;outline-offset:-2px}.slot-add:focus,.slot-add:focus-visible{outline:2px solid #3b82f6;outline-offset:1px}.mobile-summary{display:none}.filter-bar{display:flex;flex-direction:column;gap:8px;padding:12px 0;border-top:1px solid #e2e8f0;flex-shrink:0}.filter-bar-label{font-size:.6875rem;font-weight:700;color:#94a3b8;text-transform:uppercase;letter-spacing:.06em}.filter-chips{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.filter-chip{display:inline-flex;align-items:center;gap:5px;padding:4px 12px;border-radius:20px;border:1px solid #e2e8f0;background:#fff;font-size:.8125rem;font-weight:500;color:#475569;cursor:pointer;transition:all .12s;white-space:nowrap;font-family:inherit}.filter-chip:hover{border-color:#cbd5e1;background:#f8fafc}.filter-chip.active-all{background:#1e293b;color:#fff;border-color:#1e293b}.filter-chip.active-all .chip-count{background:#fff3;color:#fff}.filter-chip.active-type{background:var(--chip-bg, #f1f5f9);color:#1e293b;border-color:var(--chip-color);font-weight:600}.filter-chip.active-type .chip-count{background:var(--chip-color);color:#fff}.chip-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0}.chip-count{font-size:.6875rem;font-weight:700;background:#f1f5f9;color:#64748b;padding:1px 7px;border-radius:999px}.cal-skeleton,.month-view,.week-view,.agenda-view{flex:1;display:flex;flex-direction:column;min-height:0;background:#fff;border:1px solid #e2e8f0;border-radius:12px;overflow:hidden}.skel-dow-row{display:grid;grid-template-columns:repeat(7,1fr);gap:8px;padding:12px 10px;background:#f8fafc;border-bottom:1px solid #e2e8f0}.skel-dow{display:flex;justify-content:center}.skel-month-grid{display:grid;grid-template-columns:repeat(7,1fr);grid-template-rows:repeat(6,minmax(80px,1fr));flex:1}.skel-cell{border-right:1px solid #f1f5f9;border-bottom:1px solid #f1f5f9;padding:8px 6px;display:flex;flex-direction:column;gap:6px}.skel-cell:nth-child(7n){border-right:none}.month-grid{display:flex;flex-direction:column;flex:1;min-height:0;overflow:auto}.month-header{display:grid;grid-template-columns:repeat(7,1fr);border-bottom:1px solid #e2e8f0;background:#f8fafc;flex-shrink:0;position:sticky;top:0;z-index:1}.month-dow{padding:10px 8px;font-size:.75rem;font-weight:600;color:#6b7280;text-align:center;text-transform:uppercase;letter-spacing:.04em}.dow-short{display:none}.month-row{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));flex:1 0 120px}.month-cell{border-right:1px solid #f1f5f9;border-bottom:1px solid #f1f5f9;padding:6px 6px 4px;min-height:120px;transition:background .1s;min-width:0;box-sizing:border-box}.month-cell.clickable{cursor:pointer}.month-cell.clickable:hover{background:#f8fafc}.month-cell:nth-child(7n){border-right:none}.month-cell.other-month{background:#fafafa}.month-cell.other-month .day-num{color:#64748b}.month-cell.today{background:#eff6ff}.day-num{display:inline-block;width:26px;height:26px;line-height:26px;text-align:center;border-radius:50%;font-size:.8125rem;font-weight:500;color:#374151;margin-bottom:4px}.today-badge{background:#2563eb;color:#fff;font-weight:700}.cell-events{display:flex;flex-direction:column;gap:2px}.event-chip{display:flex;align-items:center;gap:3px;padding:2px 6px;width:100%;box-sizing:border-box;text-align:left;font-family:inherit;border:0;border-radius:4px;border-left:3px solid transparent;font-size:.6875rem;font-weight:500;cursor:pointer;overflow:hidden}.event-chip:hover{opacity:.85}.event-chip.stacked{flex-direction:column;align-items:flex-start;gap:0}.chip-head{display:inline-flex;align-items:center;gap:3px;flex-shrink:0}.chip-icon{flex-shrink:0}.chip-time{font-weight:700;flex-shrink:0;color:#1e293b}.chip-title{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#1e293b;min-width:0;max-width:100%}.strike{text-decoration:line-through}.chip-src{font-size:.625rem;font-weight:700;margin-left:auto;flex-shrink:0;color:#1e293b}.more-events{font-size:.6875rem;color:#2563eb;font-weight:600;cursor:pointer;padding:1px 6px;border:0;background:none;text-align:left;font-family:inherit}.more-events:hover{text-decoration:underline}.week-view{overflow:auto}.week-header{display:grid;grid-template-columns:60px repeat(7,1fr);border-bottom:1px solid #e2e8f0;background:#f8fafc;flex-shrink:0;overflow-y:scroll}.time-gutter{border-right:1px solid #e2e8f0}.week-day-hdr{display:flex;flex-direction:column;align-items:center;padding:10px 4px;border-right:1px solid #f1f5f9}.week-day-hdr.today{background:#eff6ff}.week-day-hdr:last-child{border-right:none}.wdh-dow{font-size:.6875rem;font-weight:600;color:#6b7280;text-transform:uppercase}.wdh-num{width:28px;height:28px;line-height:28px;text-align:center;border-radius:50%;font-size:.9375rem;font-weight:600;color:#374151;margin-top:2px}.wdh-num.today-badge{background:#2563eb;color:#fff;font-weight:700}.allday-row{display:grid;grid-template-columns:60px repeat(7,1fr);border-bottom:1px solid #e2e8f0;min-height:32px;flex-shrink:0;overflow-y:scroll}.allday-label{font-size:.625rem;color:#64748b;font-weight:600;text-transform:uppercase;display:flex;align-items:center;justify-content:center}.slot-add{position:absolute;top:2px;left:2px;z-index:3;width:1px;height:1px;padding:0;margin:0;overflow:hidden;clip-path:inset(50%);border:0;white-space:nowrap;font-family:inherit}.slot-add:focus,.slot-add:focus-visible{width:auto;height:auto;padding:2px 8px;clip-path:none;background:#1e293b;color:#fff;border-radius:4px;font-size:.75rem;font-weight:600}.allday-cell{position:relative;border-right:1px solid #f1f5f9;padding:3px 4px;display:flex;flex-direction:column;gap:2px;min-width:0}.allday-cell.clickable{cursor:pointer}.allday-cell:last-child{border-right:none}.allday-chip{padding:2px 6px;border:0;border-radius:4px;border-left:3px solid transparent;font-size:.6875rem;font-weight:500;color:#1e293b;cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-align:left;font-family:inherit}.allday-chip:hover{opacity:.85}.week-body{display:grid;grid-template-columns:60px repeat(7,1fr);flex:1;overflow-y:scroll}.time-col{display:flex;flex-direction:column;border-right:1px solid #e2e8f0;flex-shrink:0}.time-slot-label{height:60px;display:flex;align-items:flex-start;justify-content:flex-end;padding:4px 8px 0 0;font-size:.6875rem;color:#64748b;font-weight:500;border-bottom:1px solid #f1f5f9;flex-shrink:0;box-sizing:border-box}.day-col{position:relative;border-right:1px solid #f1f5f9;min-width:0}.day-col.clickable{cursor:pointer}.day-col:last-child{border-right:none}.day-col.today{background:#fafbff}.time-slot{height:60px;border-bottom:1px solid #f1f5f9;box-sizing:border-box}.day-col.clickable .time-slot:hover{background:#f8fafc}.timed-event{position:absolute;min-height:20px;border:0;border-radius:6px;padding:3px 6px;overflow:hidden;cursor:pointer;box-sizing:border-box;border-left:3px solid transparent;display:flex;flex-direction:column;align-items:flex-start;gap:1px;box-shadow:0 1px 3px #00000014;text-align:left;font-family:inherit}.timed-event:hover{opacity:.85}.te-title{font-size:.6875rem;font-weight:600;color:#1e293b;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}.te-time{font-size:.625rem;color:#475569}.agenda-view{overflow-y:auto}.agenda-group{display:flex;border-bottom:1px solid #f1f5f9}.agenda-date-hdr{width:100px;flex-shrink:0;padding:16px 12px;display:flex;flex-direction:column;gap:4px;background:#f8fafc;border-right:2px solid #e2e8f0}.ag-dow{font-size:.6875rem;font-weight:700;color:#6b7280;text-transform:uppercase;letter-spacing:.04em}.ag-date{font-size:.8125rem;font-weight:600;color:#374151}.agenda-events{flex:1;display:flex;flex-direction:column;min-width:0}.agenda-event{display:flex;align-items:stretch;padding:10px 12px;cursor:pointer;border:0;border-bottom:1px solid #f8fafc;background:none;text-align:left;width:100%;font-family:inherit;transition:background .1s}.agenda-event:hover{background:#f8fafc}.agenda-event:last-child{border-bottom:none}.ae-color-bar{display:block;width:4px;border-radius:4px;flex-shrink:0;margin-right:12px}.ae-body{flex:1;display:flex;flex-direction:column;gap:4px;min-width:0}.ae-top{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.ae-title{font-size:.9375rem;font-weight:600;color:#111827}.ae-meta{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.ae-meta-item{font-size:.8125rem;color:#6b7280}@media(pointer:coarse),(max-width:480px){.btn-nav,.btn-today,.filter-chip,.event-chip,.more-events,.allday-chip,.agenda-event{min-height:44px}.btn-nav{min-width:44px}}@media(max-width:768px){.cal-toolbar{grid-template-columns:1fr}.toolbar-center{display:none}.toolbar-left{flex-wrap:wrap}.toolbar-right{justify-content:flex-start}.mobile-summary{display:block;margin-bottom:4px;flex-shrink:0}.mobile-summary:empty{display:none}.filter-chips{flex-wrap:nowrap;overflow-x:auto;padding-bottom:4px;-webkit-overflow-scrolling:touch}.month-view,.cal-skeleton,.week-view{overflow-x:auto;-webkit-overflow-scrolling:touch}.month-grid,.skel-month-grid,.skel-dow-row{min-width:560px}.month-row{flex-basis:80px}.month-cell{min-height:80px}.week-header,.allday-row,.week-body{min-width:640px}.agenda-date-hdr{width:76px;padding:12px 8px}.ae-title{font-size:.875rem}}@media(max-width:640px){.event-chip.stacked.has-head .chip-title{display:none}}@media(max-width:480px){.dow-full{display:none}.dow-short{display:inline}}\n"],
|
|
35092
|
+
dependencies: [
|
|
35093
|
+
{
|
|
35094
|
+
kind: "component",
|
|
35095
|
+
type: BadgeComponent,
|
|
35096
|
+
selector: "ui-badge",
|
|
35097
|
+
inputs: ["label", "variant"]
|
|
35098
|
+
},
|
|
35099
|
+
{
|
|
35100
|
+
kind: "component",
|
|
35101
|
+
type: EmptyStateComponent,
|
|
35102
|
+
selector: "ui-empty-state",
|
|
35103
|
+
inputs: [
|
|
35104
|
+
"message",
|
|
35105
|
+
"title",
|
|
35106
|
+
"iconType"
|
|
35107
|
+
]
|
|
35108
|
+
},
|
|
35109
|
+
{
|
|
35110
|
+
kind: "component",
|
|
35111
|
+
type: PillTabsComponent,
|
|
35112
|
+
selector: "ui-pill-tabs",
|
|
35113
|
+
inputs: [
|
|
35114
|
+
"tabs",
|
|
35115
|
+
"activeKey",
|
|
35116
|
+
"ariaLabel",
|
|
35117
|
+
"name"
|
|
35118
|
+
],
|
|
35119
|
+
outputs: ["tabChange"]
|
|
35120
|
+
},
|
|
35121
|
+
{
|
|
35122
|
+
kind: "component",
|
|
35123
|
+
type: SkeletonComponent,
|
|
35124
|
+
selector: "ui-skeleton",
|
|
35125
|
+
inputs: [
|
|
35126
|
+
"height",
|
|
35127
|
+
"width",
|
|
35128
|
+
"radius",
|
|
35129
|
+
"mb",
|
|
35130
|
+
"ariaLabel"
|
|
35131
|
+
]
|
|
35132
|
+
},
|
|
35133
|
+
{
|
|
35134
|
+
kind: "component",
|
|
35135
|
+
type: ToastComponent,
|
|
35136
|
+
selector: "ui-toast",
|
|
35137
|
+
inputs: ["dismissible", "persistentLiveRegion"]
|
|
35138
|
+
}
|
|
35139
|
+
],
|
|
35140
|
+
changeDetection: i0.ChangeDetectionStrategy.OnPush
|
|
35141
|
+
});
|
|
35142
|
+
}
|
|
35143
|
+
};
|
|
35144
|
+
i0.ɵɵngDeclareClassMetadata({
|
|
35145
|
+
minVersion: "12.0.0",
|
|
35146
|
+
version: "22.2.2",
|
|
35147
|
+
ngImport: i0,
|
|
35148
|
+
type: CalendarComponent,
|
|
35149
|
+
decorators: [{
|
|
35150
|
+
type: Component,
|
|
35151
|
+
args: [{
|
|
35152
|
+
selector: "ui-calendar",
|
|
35153
|
+
standalone: true,
|
|
35154
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
35155
|
+
imports: [
|
|
35156
|
+
BadgeComponent,
|
|
35157
|
+
EmptyStateComponent,
|
|
35158
|
+
PillTabsComponent,
|
|
35159
|
+
SkeletonComponent,
|
|
35160
|
+
ToastComponent
|
|
35161
|
+
],
|
|
35162
|
+
template: `
|
|
35163
|
+
<div class="cal-toolbar">
|
|
35164
|
+
<div class="toolbar-left">
|
|
35165
|
+
<h2 class="period-label" aria-live="polite" aria-atomic="true">{{ periodLabel() }}</h2>
|
|
35166
|
+
<div class="nav-controls">
|
|
35167
|
+
<button type="button" class="btn-nav" (click)="navigate(-1)" aria-label="Previous">
|
|
35168
|
+
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" aria-hidden="true"><polyline points="15 18 9 12 15 6"/></svg>
|
|
35169
|
+
</button>
|
|
35170
|
+
<button type="button" class="btn-today" (click)="goToday()">Today</button>
|
|
35171
|
+
<button type="button" class="btn-nav" (click)="navigate(1)" aria-label="Next">
|
|
35172
|
+
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" aria-hidden="true"><polyline points="9 18 15 12 9 6"/></svg>
|
|
35173
|
+
</button>
|
|
35174
|
+
</div>
|
|
35175
|
+
</div>
|
|
35176
|
+
<div class="toolbar-center"><ng-content select="[calendar-summary]" /></div>
|
|
35177
|
+
<div class="toolbar-right">
|
|
35178
|
+
@if (viewTabs().length > 1) {
|
|
35179
|
+
<ui-pill-tabs ariaLabel="Calendar view" name="ui-calendar-view" [tabs]="viewTabs()" [activeKey]="view()" (tabChange)="setView($any($event))" />
|
|
35180
|
+
}
|
|
35181
|
+
<ng-content select="[calendar-actions]" />
|
|
35182
|
+
</div>
|
|
35183
|
+
</div>
|
|
35184
|
+
|
|
35185
|
+
@if (!loading()) {
|
|
35186
|
+
<div class="mobile-summary"><ng-content select="[calendar-summary-mobile]" /></div>
|
|
35187
|
+
}
|
|
35188
|
+
|
|
35189
|
+
@if (filters().length && !loading()) {
|
|
35190
|
+
<div class="filter-bar">
|
|
35191
|
+
@if (filterLabel()) { <div class="filter-bar-label">{{ filterLabel() }}</div> }
|
|
35192
|
+
<div class="filter-chips" role="group" [attr.aria-label]="filterLabel() || 'Filter'">
|
|
35193
|
+
<button type="button" class="filter-chip" [class.active-all]="!activeFilters().length" [attr.aria-pressed]="!activeFilters().length" (click)="clearFilters()">
|
|
35194
|
+
All
|
|
35195
|
+
@if (showFilterCounts()) { <span class="chip-count">{{ items().length }}</span> }
|
|
35196
|
+
</button>
|
|
35197
|
+
@for (f of filters(); track f.value) {
|
|
35198
|
+
<button type="button" class="filter-chip"
|
|
35199
|
+
[class.active-type]="isFilterActive(f.value)"
|
|
35200
|
+
[attr.aria-pressed]="isFilterActive(f.value)"
|
|
35201
|
+
[style.--chip-color]="f.color"
|
|
35202
|
+
[style.--chip-bg]="f.bgColor ?? null"
|
|
35203
|
+
(click)="toggleFilter(f.value)">
|
|
35204
|
+
<span class="chip-dot" [style.background]="f.color" aria-hidden="true"></span>
|
|
35205
|
+
{{ f.label }}
|
|
35206
|
+
@if (showFilterCounts()) { <span class="chip-count">{{ typeCounts()[f.value] ?? 0 }}</span> }
|
|
35207
|
+
</button>
|
|
35208
|
+
}
|
|
35209
|
+
</div>
|
|
35210
|
+
</div>
|
|
35211
|
+
}
|
|
35212
|
+
|
|
35213
|
+
@if (loading()) {
|
|
35214
|
+
<div class="cal-skeleton" aria-busy="true" aria-label="Loading calendar" role="status">
|
|
35215
|
+
<div class="skel-dow-row">
|
|
35216
|
+
@for (d of weekDayLabels; track d) { <div class="skel-dow"><ui-skeleton [height]="16" width="36px" [radius]="4" /></div> }
|
|
35217
|
+
</div>
|
|
35218
|
+
<div class="skel-month-grid">
|
|
35219
|
+
@for (i of skeletonCells; track i) {
|
|
35220
|
+
<div class="skel-cell">
|
|
35221
|
+
<ui-skeleton [height]="22" width="22px" [radius]="11" />
|
|
35222
|
+
@if (i % 3 === 0) { <ui-skeleton [height]="14" [radius]="3" /> }
|
|
35223
|
+
@if (i % 5 === 0) { <ui-skeleton [height]="14" width="72%" [radius]="3" /> }
|
|
35224
|
+
</div>
|
|
35225
|
+
}
|
|
35226
|
+
</div>
|
|
35227
|
+
</div>
|
|
35228
|
+
} @else {
|
|
35229
|
+
@switch (view()) {
|
|
35230
|
+
@case ('month') {
|
|
35231
|
+
<div class="month-view">
|
|
35232
|
+
<div class="month-grid" role="grid" [attr.aria-label]="periodLabel()">
|
|
35233
|
+
<div class="month-header" role="row">
|
|
35234
|
+
@for (d of weekDayLabels; track d; let i = $index) {
|
|
35235
|
+
<div class="month-dow" role="columnheader" [attr.aria-label]="weekDayNames[i]">
|
|
35236
|
+
<span class="dow-full" aria-hidden="true">{{ d }}</span><span class="dow-short" aria-hidden="true">{{ d.slice(0, 2) }}</span>
|
|
35237
|
+
</div>
|
|
35238
|
+
}
|
|
35239
|
+
</div>
|
|
35240
|
+
@for (row of monthRows(); track row.key) {
|
|
35241
|
+
<div class="month-row" role="row">
|
|
35242
|
+
@for (c of row.cells; track c.day.dateStr) {
|
|
35243
|
+
<div class="month-cell" role="gridcell"
|
|
35244
|
+
[attr.data-date]="c.day.dateStr"
|
|
35245
|
+
[class.other-month]="!c.day.isCurrentMonth" [class.today]="c.day.isToday" [class.weekend]="c.day.isWeekend"
|
|
35246
|
+
[class.clickable]="c.clickable"
|
|
35247
|
+
[attr.tabindex]="c.day.dateStr === focusDate() ? 0 : -1"
|
|
35248
|
+
[attr.aria-label]="c.label"
|
|
35249
|
+
[attr.aria-current]="c.day.isToday ? 'date' : null"
|
|
35250
|
+
(click)="onDateClick(c.day.dateStr)"
|
|
35251
|
+
(focus)="focusedDate.set(c.day.dateStr)"
|
|
35252
|
+
(keydown)="onCellKey($event, c.day.dateStr)">
|
|
35253
|
+
<span class="day-num" [class.today-badge]="c.day.isToday">{{ c.day.dayNum }}</span>
|
|
35254
|
+
<div class="cell-events">
|
|
35255
|
+
@for (e of c.visible; track e.id) {
|
|
35256
|
+
<button type="button" class="event-chip" [class.stacked]="chipLayout() === 'stacked'" [class.has-head]="!!(e.iconPath || chipTime(e))" [style.background]="e.bgColor" [style.borderLeftColor]="e.color"
|
|
35257
|
+
[attr.aria-label]="itemLabel(e)" [title]="e.title"
|
|
35258
|
+
(click)="onItemClick(e, $event)">
|
|
35259
|
+
<span class="chip-head">
|
|
35260
|
+
@if (e.iconPath) {
|
|
35261
|
+
<svg class="chip-icon" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path [attr.d]="e.iconPath"/></svg>
|
|
35262
|
+
}
|
|
35263
|
+
@if (chipTime(e); as t) { <span class="chip-time">{{ t }}</span> }
|
|
35264
|
+
</span>
|
|
35265
|
+
<span class="chip-title" [class.strike]="e.strike">{{ e.title }}</span>
|
|
35266
|
+
@if (e.tag) { <span class="chip-src">{{ e.tag }}</span> }
|
|
35267
|
+
</button>
|
|
35268
|
+
}
|
|
35269
|
+
@if (c.overflow > 0) {
|
|
35270
|
+
<button type="button" class="more-events" (click)="onMoreClick(c.day.dateStr, c.items, $event)">+{{ c.overflow }} more</button>
|
|
35271
|
+
}
|
|
35272
|
+
</div>
|
|
35273
|
+
</div>
|
|
35274
|
+
}
|
|
35275
|
+
</div>
|
|
35276
|
+
}
|
|
35277
|
+
</div>
|
|
35278
|
+
</div>
|
|
35279
|
+
}
|
|
35280
|
+
@case ('week') {
|
|
35281
|
+
<div class="week-view">
|
|
35282
|
+
<div class="week-header">
|
|
35283
|
+
<div class="time-gutter"></div>
|
|
35284
|
+
@for (col of weekColumns(); track col.day.dateStr) {
|
|
35285
|
+
<div class="week-day-hdr" [class.today]="col.day.isToday">
|
|
35286
|
+
<span class="wdh-dow">{{ dowLabel(col.day.dateStr) }}</span>
|
|
35287
|
+
<span class="wdh-num" [class.today-badge]="col.day.isToday">{{ col.day.dayNum }}</span>
|
|
35288
|
+
</div>
|
|
35289
|
+
}
|
|
35290
|
+
</div>
|
|
35291
|
+
<div class="allday-row">
|
|
35292
|
+
<div class="time-gutter allday-label">All day</div>
|
|
35293
|
+
@for (col of weekColumns(); track col.day.dateStr) {
|
|
35294
|
+
<div class="allday-cell" [class.clickable]="col.clickable" (click)="onDateClick(col.day.dateStr)">
|
|
35295
|
+
@if (col.clickable) {
|
|
35296
|
+
<button type="button" class="slot-add" [attr.aria-label]="'Add all-day event on ' + col.label" (click)="onAddAllDay(col.day.dateStr, $event)">+ Add</button>
|
|
35297
|
+
}
|
|
35298
|
+
@for (e of col.allDay; track e.id) {
|
|
35299
|
+
<button type="button" class="allday-chip" [style.background]="e.bgColor" [style.borderLeftColor]="e.color"
|
|
35300
|
+
[attr.aria-label]="itemLabel(e)" (click)="onItemClick(e, $event)">{{ e.title }}</button>
|
|
35301
|
+
}
|
|
35302
|
+
</div>
|
|
35303
|
+
}
|
|
35304
|
+
</div>
|
|
35305
|
+
<div class="week-body">
|
|
35306
|
+
<div class="time-col">
|
|
35307
|
+
@for (h of hours(); track h) { <div class="time-slot-label">{{ formatHour(h) }}</div> }
|
|
35308
|
+
</div>
|
|
35309
|
+
@for (col of weekColumns(); track col.day.dateStr) {
|
|
35310
|
+
<div class="day-col" [class.today]="col.day.isToday" [class.clickable]="col.clickable" (click)="onSlotClick(col.day.dateStr, $event)">
|
|
35311
|
+
@if (col.clickable) {
|
|
35312
|
+
<button type="button" class="slot-add" [attr.aria-label]="'Add event on ' + col.label" (click)="onAddTimed(col.day.dateStr, $event)">+ Add</button>
|
|
35313
|
+
}
|
|
35314
|
+
@for (h of hours(); track h) { <div class="time-slot"></div> }
|
|
35315
|
+
@for (t of col.timed; track t.item.id) {
|
|
35316
|
+
<button type="button" class="timed-event"
|
|
35317
|
+
[style.top.px]="t.top" [style.height.px]="t.height"
|
|
35318
|
+
[style.left]="'calc(' + (t.lane.lane / t.lane.lanes * 100) + '% + 2px)'"
|
|
35319
|
+
[style.width]="'calc(' + (100 / t.lane.lanes) + '% - 4px)'"
|
|
35320
|
+
[style.background]="t.item.bgColor" [style.borderLeftColor]="t.item.color"
|
|
35321
|
+
[attr.aria-label]="itemLabel(t.item)" (click)="onItemClick(t.item, $event)">
|
|
35322
|
+
<span class="te-title" [class.strike]="t.item.strike">{{ t.item.title }}</span>
|
|
35323
|
+
@if (t.item.startTime) { <span class="te-time">{{ t.item.timeLabel || timeRange(t.item) }}</span> }
|
|
35324
|
+
</button>
|
|
35325
|
+
}
|
|
35326
|
+
</div>
|
|
35327
|
+
}
|
|
35328
|
+
</div>
|
|
35329
|
+
</div>
|
|
35330
|
+
}
|
|
35331
|
+
@case ('agenda') {
|
|
35332
|
+
<div class="agenda-view">
|
|
35333
|
+
@if (agendaGroups().length === 0) {
|
|
35334
|
+
<ui-empty-state iconType="task" [message]="emptyMessage()" />
|
|
35335
|
+
}
|
|
35336
|
+
@for (group of agendaGroups(); track group.dateStr) {
|
|
35337
|
+
<div class="agenda-group">
|
|
35338
|
+
<div class="agenda-date-hdr">
|
|
35339
|
+
<span class="ag-dow">{{ agendaDow(group.dateStr) }}</span>
|
|
35340
|
+
<span class="ag-date">{{ agendaDate(group.dateStr) }}</span>
|
|
35341
|
+
@if (group.dateStr === todayStr()) { <ui-badge label="Today" variant="blue" /> }
|
|
35342
|
+
</div>
|
|
35343
|
+
<div class="agenda-events">
|
|
35344
|
+
@for (e of group.items; track e.id) {
|
|
35345
|
+
<button type="button" class="agenda-event" [attr.aria-label]="e.ariaLabel || null" (click)="onItemClick(e, $event)">
|
|
35346
|
+
<span class="ae-color-bar" [style.background]="e.color"></span>
|
|
35347
|
+
<span class="ae-body">
|
|
35348
|
+
<span class="ae-top">
|
|
35349
|
+
<span class="ae-title" [class.strike]="e.strike">{{ e.title }}</span>
|
|
35350
|
+
@for (b of e.badges ?? []; track b.label) { <ui-badge [label]="b.label" [variant]="b.variant" /> }
|
|
35351
|
+
</span>
|
|
35352
|
+
@if (agendaMeta(e).length) {
|
|
35353
|
+
<span class="ae-meta">
|
|
35354
|
+
@for (m of agendaMeta(e); track $index) { <span class="ae-meta-item">{{ m }}</span> }
|
|
35355
|
+
</span>
|
|
35356
|
+
}
|
|
35357
|
+
</span>
|
|
35358
|
+
</button>
|
|
35359
|
+
}
|
|
35360
|
+
</div>
|
|
35361
|
+
</div>
|
|
35362
|
+
}
|
|
35363
|
+
</div>
|
|
35364
|
+
}
|
|
35365
|
+
}
|
|
35366
|
+
}
|
|
35367
|
+
<ui-toast />
|
|
35368
|
+
`,
|
|
35369
|
+
styles: [":host{display:flex;flex-direction:column;gap:0;height:100%;min-height:0}.cal-toolbar{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;padding-bottom:16px;gap:16px;flex-shrink:0}.toolbar-left{display:flex;flex-direction:column;align-items:flex-start;gap:6px}.toolbar-center{display:flex;align-items:center;justify-content:center;gap:10px}.toolbar-right{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:wrap}.period-label{font-size:1.125rem;font-weight:700;color:#111827;margin:0}.nav-controls{display:flex;align-items:center;gap:8px}.btn-nav{width:32px;height:32px;border:1px solid #e2e8f0;background:#fff;border-radius:6px;font-family:inherit;cursor:pointer;display:flex;align-items:center;justify-content:center;color:#475569}.btn-nav:hover{background:#f8fafc}.btn-today{padding:6px 14px;border:1px solid #e2e8f0;background:#fff;border-radius:6px;font-family:inherit;font-size:.875rem;font-weight:500;color:#374151;cursor:pointer}.btn-today:hover{background:#f8fafc}.btn-nav:focus-visible,.btn-today:focus-visible,.filter-chip:focus-visible,.event-chip:focus-visible,.more-events:focus-visible,.allday-chip:focus-visible,.timed-event:focus-visible,.agenda-event:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.month-cell:focus-visible{outline:2px solid #3b82f6;outline-offset:-2px}.slot-add:focus,.slot-add:focus-visible{outline:2px solid #3b82f6;outline-offset:1px}.mobile-summary{display:none}.filter-bar{display:flex;flex-direction:column;gap:8px;padding:12px 0;border-top:1px solid #e2e8f0;flex-shrink:0}.filter-bar-label{font-size:.6875rem;font-weight:700;color:#94a3b8;text-transform:uppercase;letter-spacing:.06em}.filter-chips{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.filter-chip{display:inline-flex;align-items:center;gap:5px;padding:4px 12px;border-radius:20px;border:1px solid #e2e8f0;background:#fff;font-size:.8125rem;font-weight:500;color:#475569;cursor:pointer;transition:all .12s;white-space:nowrap;font-family:inherit}.filter-chip:hover{border-color:#cbd5e1;background:#f8fafc}.filter-chip.active-all{background:#1e293b;color:#fff;border-color:#1e293b}.filter-chip.active-all .chip-count{background:#fff3;color:#fff}.filter-chip.active-type{background:var(--chip-bg, #f1f5f9);color:#1e293b;border-color:var(--chip-color);font-weight:600}.filter-chip.active-type .chip-count{background:var(--chip-color);color:#fff}.chip-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0}.chip-count{font-size:.6875rem;font-weight:700;background:#f1f5f9;color:#64748b;padding:1px 7px;border-radius:999px}.cal-skeleton,.month-view,.week-view,.agenda-view{flex:1;display:flex;flex-direction:column;min-height:0;background:#fff;border:1px solid #e2e8f0;border-radius:12px;overflow:hidden}.skel-dow-row{display:grid;grid-template-columns:repeat(7,1fr);gap:8px;padding:12px 10px;background:#f8fafc;border-bottom:1px solid #e2e8f0}.skel-dow{display:flex;justify-content:center}.skel-month-grid{display:grid;grid-template-columns:repeat(7,1fr);grid-template-rows:repeat(6,minmax(80px,1fr));flex:1}.skel-cell{border-right:1px solid #f1f5f9;border-bottom:1px solid #f1f5f9;padding:8px 6px;display:flex;flex-direction:column;gap:6px}.skel-cell:nth-child(7n){border-right:none}.month-grid{display:flex;flex-direction:column;flex:1;min-height:0;overflow:auto}.month-header{display:grid;grid-template-columns:repeat(7,1fr);border-bottom:1px solid #e2e8f0;background:#f8fafc;flex-shrink:0;position:sticky;top:0;z-index:1}.month-dow{padding:10px 8px;font-size:.75rem;font-weight:600;color:#6b7280;text-align:center;text-transform:uppercase;letter-spacing:.04em}.dow-short{display:none}.month-row{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));flex:1 0 120px}.month-cell{border-right:1px solid #f1f5f9;border-bottom:1px solid #f1f5f9;padding:6px 6px 4px;min-height:120px;transition:background .1s;min-width:0;box-sizing:border-box}.month-cell.clickable{cursor:pointer}.month-cell.clickable:hover{background:#f8fafc}.month-cell:nth-child(7n){border-right:none}.month-cell.other-month{background:#fafafa}.month-cell.other-month .day-num{color:#64748b}.month-cell.today{background:#eff6ff}.day-num{display:inline-block;width:26px;height:26px;line-height:26px;text-align:center;border-radius:50%;font-size:.8125rem;font-weight:500;color:#374151;margin-bottom:4px}.today-badge{background:#2563eb;color:#fff;font-weight:700}.cell-events{display:flex;flex-direction:column;gap:2px}.event-chip{display:flex;align-items:center;gap:3px;padding:2px 6px;width:100%;box-sizing:border-box;text-align:left;font-family:inherit;border:0;border-radius:4px;border-left:3px solid transparent;font-size:.6875rem;font-weight:500;cursor:pointer;overflow:hidden}.event-chip:hover{opacity:.85}.event-chip.stacked{flex-direction:column;align-items:flex-start;gap:0}.chip-head{display:inline-flex;align-items:center;gap:3px;flex-shrink:0}.chip-icon{flex-shrink:0}.chip-time{font-weight:700;flex-shrink:0;color:#1e293b}.chip-title{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#1e293b;min-width:0;max-width:100%}.strike{text-decoration:line-through}.chip-src{font-size:.625rem;font-weight:700;margin-left:auto;flex-shrink:0;color:#1e293b}.more-events{font-size:.6875rem;color:#2563eb;font-weight:600;cursor:pointer;padding:1px 6px;border:0;background:none;text-align:left;font-family:inherit}.more-events:hover{text-decoration:underline}.week-view{overflow:auto}.week-header{display:grid;grid-template-columns:60px repeat(7,1fr);border-bottom:1px solid #e2e8f0;background:#f8fafc;flex-shrink:0;overflow-y:scroll}.time-gutter{border-right:1px solid #e2e8f0}.week-day-hdr{display:flex;flex-direction:column;align-items:center;padding:10px 4px;border-right:1px solid #f1f5f9}.week-day-hdr.today{background:#eff6ff}.week-day-hdr:last-child{border-right:none}.wdh-dow{font-size:.6875rem;font-weight:600;color:#6b7280;text-transform:uppercase}.wdh-num{width:28px;height:28px;line-height:28px;text-align:center;border-radius:50%;font-size:.9375rem;font-weight:600;color:#374151;margin-top:2px}.wdh-num.today-badge{background:#2563eb;color:#fff;font-weight:700}.allday-row{display:grid;grid-template-columns:60px repeat(7,1fr);border-bottom:1px solid #e2e8f0;min-height:32px;flex-shrink:0;overflow-y:scroll}.allday-label{font-size:.625rem;color:#64748b;font-weight:600;text-transform:uppercase;display:flex;align-items:center;justify-content:center}.slot-add{position:absolute;top:2px;left:2px;z-index:3;width:1px;height:1px;padding:0;margin:0;overflow:hidden;clip-path:inset(50%);border:0;white-space:nowrap;font-family:inherit}.slot-add:focus,.slot-add:focus-visible{width:auto;height:auto;padding:2px 8px;clip-path:none;background:#1e293b;color:#fff;border-radius:4px;font-size:.75rem;font-weight:600}.allday-cell{position:relative;border-right:1px solid #f1f5f9;padding:3px 4px;display:flex;flex-direction:column;gap:2px;min-width:0}.allday-cell.clickable{cursor:pointer}.allday-cell:last-child{border-right:none}.allday-chip{padding:2px 6px;border:0;border-radius:4px;border-left:3px solid transparent;font-size:.6875rem;font-weight:500;color:#1e293b;cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-align:left;font-family:inherit}.allday-chip:hover{opacity:.85}.week-body{display:grid;grid-template-columns:60px repeat(7,1fr);flex:1;overflow-y:scroll}.time-col{display:flex;flex-direction:column;border-right:1px solid #e2e8f0;flex-shrink:0}.time-slot-label{height:60px;display:flex;align-items:flex-start;justify-content:flex-end;padding:4px 8px 0 0;font-size:.6875rem;color:#64748b;font-weight:500;border-bottom:1px solid #f1f5f9;flex-shrink:0;box-sizing:border-box}.day-col{position:relative;border-right:1px solid #f1f5f9;min-width:0}.day-col.clickable{cursor:pointer}.day-col:last-child{border-right:none}.day-col.today{background:#fafbff}.time-slot{height:60px;border-bottom:1px solid #f1f5f9;box-sizing:border-box}.day-col.clickable .time-slot:hover{background:#f8fafc}.timed-event{position:absolute;min-height:20px;border:0;border-radius:6px;padding:3px 6px;overflow:hidden;cursor:pointer;box-sizing:border-box;border-left:3px solid transparent;display:flex;flex-direction:column;align-items:flex-start;gap:1px;box-shadow:0 1px 3px #00000014;text-align:left;font-family:inherit}.timed-event:hover{opacity:.85}.te-title{font-size:.6875rem;font-weight:600;color:#1e293b;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}.te-time{font-size:.625rem;color:#475569}.agenda-view{overflow-y:auto}.agenda-group{display:flex;border-bottom:1px solid #f1f5f9}.agenda-date-hdr{width:100px;flex-shrink:0;padding:16px 12px;display:flex;flex-direction:column;gap:4px;background:#f8fafc;border-right:2px solid #e2e8f0}.ag-dow{font-size:.6875rem;font-weight:700;color:#6b7280;text-transform:uppercase;letter-spacing:.04em}.ag-date{font-size:.8125rem;font-weight:600;color:#374151}.agenda-events{flex:1;display:flex;flex-direction:column;min-width:0}.agenda-event{display:flex;align-items:stretch;padding:10px 12px;cursor:pointer;border:0;border-bottom:1px solid #f8fafc;background:none;text-align:left;width:100%;font-family:inherit;transition:background .1s}.agenda-event:hover{background:#f8fafc}.agenda-event:last-child{border-bottom:none}.ae-color-bar{display:block;width:4px;border-radius:4px;flex-shrink:0;margin-right:12px}.ae-body{flex:1;display:flex;flex-direction:column;gap:4px;min-width:0}.ae-top{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.ae-title{font-size:.9375rem;font-weight:600;color:#111827}.ae-meta{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.ae-meta-item{font-size:.8125rem;color:#6b7280}@media(pointer:coarse),(max-width:480px){.btn-nav,.btn-today,.filter-chip,.event-chip,.more-events,.allday-chip,.agenda-event{min-height:44px}.btn-nav{min-width:44px}}@media(max-width:768px){.cal-toolbar{grid-template-columns:1fr}.toolbar-center{display:none}.toolbar-left{flex-wrap:wrap}.toolbar-right{justify-content:flex-start}.mobile-summary{display:block;margin-bottom:4px;flex-shrink:0}.mobile-summary:empty{display:none}.filter-chips{flex-wrap:nowrap;overflow-x:auto;padding-bottom:4px;-webkit-overflow-scrolling:touch}.month-view,.cal-skeleton,.week-view{overflow-x:auto;-webkit-overflow-scrolling:touch}.month-grid,.skel-month-grid,.skel-dow-row{min-width:560px}.month-row{flex-basis:80px}.month-cell{min-height:80px}.week-header,.allday-row,.week-body{min-width:640px}.agenda-date-hdr{width:76px;padding:12px 8px}.ae-title{font-size:.875rem}}@media(max-width:640px){.event-chip.stacked.has-head .chip-title{display:none}}@media(max-width:480px){.dow-full{display:none}.dow-short{display:inline}}\n"]
|
|
35370
|
+
}]
|
|
35371
|
+
}],
|
|
35372
|
+
ctorParameters: () => [],
|
|
35373
|
+
propDecorators: {
|
|
35374
|
+
items: [{
|
|
35375
|
+
type: i0.Input,
|
|
35376
|
+
args: [{
|
|
35377
|
+
isSignal: true,
|
|
35378
|
+
alias: "items",
|
|
35379
|
+
required: false
|
|
35380
|
+
}]
|
|
35381
|
+
}],
|
|
35382
|
+
loading: [{
|
|
35383
|
+
type: i0.Input,
|
|
35384
|
+
args: [{
|
|
35385
|
+
isSignal: true,
|
|
35386
|
+
alias: "loading",
|
|
35387
|
+
required: false
|
|
35388
|
+
}]
|
|
35389
|
+
}],
|
|
35390
|
+
view: [{
|
|
35391
|
+
type: i0.Input,
|
|
35392
|
+
args: [{
|
|
35393
|
+
isSignal: true,
|
|
35394
|
+
alias: "view",
|
|
35395
|
+
required: false
|
|
35396
|
+
}]
|
|
35397
|
+
}, {
|
|
35398
|
+
type: i0.Output,
|
|
35399
|
+
args: ["viewChange"]
|
|
35400
|
+
}],
|
|
35401
|
+
views: [{
|
|
35402
|
+
type: i0.Input,
|
|
35403
|
+
args: [{
|
|
35404
|
+
isSignal: true,
|
|
35405
|
+
alias: "views",
|
|
35406
|
+
required: false
|
|
35407
|
+
}]
|
|
35408
|
+
}],
|
|
35409
|
+
anchorDate: [{
|
|
35410
|
+
type: i0.Input,
|
|
35411
|
+
args: [{
|
|
35412
|
+
isSignal: true,
|
|
35413
|
+
alias: "anchorDate",
|
|
35414
|
+
required: false
|
|
35415
|
+
}]
|
|
35416
|
+
}, {
|
|
35417
|
+
type: i0.Output,
|
|
35418
|
+
args: ["anchorDateChange"]
|
|
35419
|
+
}],
|
|
35420
|
+
filters: [{
|
|
35421
|
+
type: i0.Input,
|
|
35422
|
+
args: [{
|
|
35423
|
+
isSignal: true,
|
|
35424
|
+
alias: "filters",
|
|
35425
|
+
required: false
|
|
35426
|
+
}]
|
|
35427
|
+
}],
|
|
35428
|
+
filterLabel: [{
|
|
35429
|
+
type: i0.Input,
|
|
35430
|
+
args: [{
|
|
35431
|
+
isSignal: true,
|
|
35432
|
+
alias: "filterLabel",
|
|
35433
|
+
required: false
|
|
35434
|
+
}]
|
|
35435
|
+
}],
|
|
35436
|
+
filterMode: [{
|
|
35437
|
+
type: i0.Input,
|
|
35438
|
+
args: [{
|
|
35439
|
+
isSignal: true,
|
|
35440
|
+
alias: "filterMode",
|
|
35441
|
+
required: false
|
|
35442
|
+
}]
|
|
35443
|
+
}],
|
|
35444
|
+
activeFilters: [{
|
|
35445
|
+
type: i0.Input,
|
|
35446
|
+
args: [{
|
|
35447
|
+
isSignal: true,
|
|
35448
|
+
alias: "activeFilters",
|
|
35449
|
+
required: false
|
|
35450
|
+
}]
|
|
35451
|
+
}, {
|
|
35452
|
+
type: i0.Output,
|
|
35453
|
+
args: ["activeFiltersChange"]
|
|
35454
|
+
}],
|
|
35455
|
+
showFilterCounts: [{
|
|
35456
|
+
type: i0.Input,
|
|
35457
|
+
args: [{
|
|
35458
|
+
isSignal: true,
|
|
35459
|
+
alias: "showFilterCounts",
|
|
35460
|
+
required: false
|
|
35461
|
+
}]
|
|
35462
|
+
}],
|
|
35463
|
+
canCreate: [{
|
|
35464
|
+
type: i0.Input,
|
|
35465
|
+
args: [{
|
|
35466
|
+
isSignal: true,
|
|
35467
|
+
alias: "canCreate",
|
|
35468
|
+
required: false
|
|
35469
|
+
}]
|
|
35470
|
+
}],
|
|
35471
|
+
disablePast: [{
|
|
35472
|
+
type: i0.Input,
|
|
35473
|
+
args: [{
|
|
35474
|
+
isSignal: true,
|
|
35475
|
+
alias: "disablePast",
|
|
35476
|
+
required: false
|
|
35477
|
+
}]
|
|
35478
|
+
}],
|
|
35479
|
+
maxVisible: [{
|
|
35480
|
+
type: i0.Input,
|
|
35481
|
+
args: [{
|
|
35482
|
+
isSignal: true,
|
|
35483
|
+
alias: "maxVisible",
|
|
35484
|
+
required: false
|
|
35485
|
+
}]
|
|
35486
|
+
}],
|
|
35487
|
+
chipLayout: [{
|
|
35488
|
+
type: i0.Input,
|
|
35489
|
+
args: [{
|
|
35490
|
+
isSignal: true,
|
|
35491
|
+
alias: "chipLayout",
|
|
35492
|
+
required: false
|
|
35493
|
+
}]
|
|
35494
|
+
}],
|
|
35495
|
+
sortByTime: [{
|
|
35496
|
+
type: i0.Input,
|
|
35497
|
+
args: [{
|
|
35498
|
+
isSignal: true,
|
|
35499
|
+
alias: "sortByTime",
|
|
35500
|
+
required: false
|
|
35501
|
+
}]
|
|
35502
|
+
}],
|
|
35503
|
+
startHour: [{
|
|
35504
|
+
type: i0.Input,
|
|
35505
|
+
args: [{
|
|
35506
|
+
isSignal: true,
|
|
35507
|
+
alias: "startHour",
|
|
35508
|
+
required: false
|
|
35509
|
+
}]
|
|
35510
|
+
}],
|
|
35511
|
+
endHour: [{
|
|
35512
|
+
type: i0.Input,
|
|
35513
|
+
args: [{
|
|
35514
|
+
isSignal: true,
|
|
35515
|
+
alias: "endHour",
|
|
35516
|
+
required: false
|
|
35517
|
+
}]
|
|
35518
|
+
}],
|
|
35519
|
+
emptyMessage: [{
|
|
35520
|
+
type: i0.Input,
|
|
35521
|
+
args: [{
|
|
35522
|
+
isSignal: true,
|
|
35523
|
+
alias: "emptyMessage",
|
|
35524
|
+
required: false
|
|
35525
|
+
}]
|
|
35526
|
+
}],
|
|
35527
|
+
dayLabelFn: [{
|
|
35528
|
+
type: i0.Input,
|
|
35529
|
+
args: [{
|
|
35530
|
+
isSignal: true,
|
|
35531
|
+
alias: "dayLabelFn",
|
|
35532
|
+
required: false
|
|
35533
|
+
}]
|
|
35534
|
+
}],
|
|
35535
|
+
rangeChange: [{
|
|
35536
|
+
type: i0.Output,
|
|
35537
|
+
args: ["rangeChange"]
|
|
35538
|
+
}],
|
|
35539
|
+
itemClick: [{
|
|
35540
|
+
type: i0.Output,
|
|
35541
|
+
args: ["itemClick"]
|
|
35542
|
+
}],
|
|
35543
|
+
dateClick: [{
|
|
35544
|
+
type: i0.Output,
|
|
35545
|
+
args: ["dateClick"]
|
|
35546
|
+
}],
|
|
35547
|
+
slotClick: [{
|
|
35548
|
+
type: i0.Output,
|
|
35549
|
+
args: ["slotClick"]
|
|
35550
|
+
}],
|
|
35551
|
+
moreClick: [{
|
|
35552
|
+
type: i0.Output,
|
|
35553
|
+
args: ["moreClick"]
|
|
35554
|
+
}]
|
|
35555
|
+
}
|
|
35556
|
+
});
|
|
35557
|
+
var PageComponent = class PageComponent {
|
|
35558
|
+
constructor() {
|
|
35559
|
+
this.maxWidth = input("", ...ngDevMode ? [{ debugName: "maxWidth" }] : /* istanbul ignore next */ []);
|
|
35560
|
+
this.padding = input("", ...ngDevMode ? [{ debugName: "padding" }] : /* istanbul ignore next */ []);
|
|
35561
|
+
this.centered = input(true, ...ngDevMode ? [{ debugName: "centered" }] : /* istanbul ignore next */ []);
|
|
35562
|
+
this.background = input("", ...ngDevMode ? [{ debugName: "background" }] : /* istanbul ignore next */ []);
|
|
35563
|
+
this.fillViewport = input(false, ...ngDevMode ? [{ debugName: "fillViewport" }] : /* istanbul ignore next */ []);
|
|
35564
|
+
this.stickyHeader = input(false, ...ngDevMode ? [{ debugName: "stickyHeader" }] : /* istanbul ignore next */ []);
|
|
35565
|
+
this.stickyFooter = input(false, ...ngDevMode ? [{ debugName: "stickyFooter" }] : /* istanbul ignore next */ []);
|
|
35566
|
+
this.transparent = input(false, ...ngDevMode ? [{ debugName: "transparent" }] : /* istanbul ignore next */ []);
|
|
35567
|
+
this.ownScroll = input(false, ...ngDevMode ? [{ debugName: "ownScroll" }] : /* istanbul ignore next */ []);
|
|
35568
|
+
this.focusKey = input(void 0, ...ngDevMode ? [{ debugName: "focusKey" }] : /* istanbul ignore next */ []);
|
|
35569
|
+
this.anchor = viewChild("anchor", ...ngDevMode ? [{ debugName: "anchor" }] : /* istanbul ignore next */ []);
|
|
35570
|
+
this.doc = inject(DOCUMENT);
|
|
35571
|
+
this.injector = inject(Injector);
|
|
35572
|
+
this.browser = isPlatformBrowser(inject(PLATFORM_ID));
|
|
35573
|
+
this.backgroundCss = computed(() => this.transparent() ? "transparent" : this.background() || null, ...ngDevMode ? [{ debugName: "backgroundCss" }] : /* istanbul ignore next */ []);
|
|
35574
|
+
this.maxWidthCss = computed(() => this.transparent() ? null : this.maxWidth() || null, ...ngDevMode ? [{ debugName: "maxWidthCss" }] : /* istanbul ignore next */ []);
|
|
35575
|
+
this.paddingCss = computed(() => {
|
|
35576
|
+
const p = this.padding();
|
|
35577
|
+
if (!p || p === "responsive") return null;
|
|
35578
|
+
return this.transparent() ? "8px 0 16px" : p;
|
|
35579
|
+
}, ...ngDevMode ? [{ debugName: "paddingCss" }] : /* istanbul ignore next */ []);
|
|
35580
|
+
this.scrollSaved = [];
|
|
35581
|
+
this.bgSaved = [];
|
|
35582
|
+
this.focusInitialised = false;
|
|
35583
|
+
effect(() => {
|
|
35584
|
+
const own = this.ownScroll();
|
|
35585
|
+
const transparent = this.transparent();
|
|
35586
|
+
if (!this.browser) return;
|
|
35587
|
+
untracked(() => {
|
|
35588
|
+
if (own) this.applyScroll();
|
|
35589
|
+
else this.releaseScroll();
|
|
35590
|
+
if (own && transparent) this.applyBackground();
|
|
35591
|
+
else this.releaseBackground();
|
|
35592
|
+
});
|
|
35593
|
+
});
|
|
35594
|
+
effect(() => {
|
|
35595
|
+
const key = this.focusKey();
|
|
35596
|
+
untracked(() => {
|
|
35597
|
+
if (!this.focusInitialised) {
|
|
35598
|
+
this.focusInitialised = true;
|
|
35599
|
+
this.lastFocusKey = key;
|
|
35600
|
+
return;
|
|
35601
|
+
}
|
|
35602
|
+
if (Object.is(key, this.lastFocusKey)) return;
|
|
35603
|
+
this.lastFocusKey = key;
|
|
35604
|
+
afterNextRender(() => this.focusTop(), { injector: this.injector });
|
|
35605
|
+
});
|
|
35606
|
+
});
|
|
35607
|
+
inject(DestroyRef).onDestroy(() => {
|
|
35608
|
+
this.releaseScroll();
|
|
35609
|
+
this.releaseBackground();
|
|
35610
|
+
});
|
|
35611
|
+
}
|
|
35612
|
+
focusTop() {
|
|
35613
|
+
const el = this.anchor()?.nativeElement;
|
|
35614
|
+
if (!el) return;
|
|
35615
|
+
const reduce = !!this.doc.defaultView?.matchMedia?.("(prefers-reduced-motion: reduce)").matches;
|
|
35616
|
+
el.scrollIntoView(reduce ? {
|
|
35617
|
+
block: "start",
|
|
35618
|
+
behavior: "instant"
|
|
35619
|
+
} : { block: "start" });
|
|
35620
|
+
el.focus({ preventScroll: true });
|
|
35621
|
+
}
|
|
35622
|
+
save(list, el, prop, value) {
|
|
35623
|
+
if (!el) return;
|
|
35624
|
+
if (!list.some((e) => e.el === el)) list.push({
|
|
35625
|
+
el,
|
|
35626
|
+
prop,
|
|
35627
|
+
prev: el.style[prop]
|
|
35628
|
+
});
|
|
35629
|
+
el.style[prop] = value;
|
|
35630
|
+
}
|
|
35631
|
+
applyScroll() {
|
|
35632
|
+
const root = this.doc.querySelector("app-root");
|
|
35633
|
+
this.save(this.scrollSaved, this.doc.documentElement, "overflow", "auto");
|
|
35634
|
+
this.save(this.scrollSaved, this.doc.body, "overflow", "visible");
|
|
35635
|
+
this.save(this.scrollSaved, root, "overflow", "visible");
|
|
35636
|
+
}
|
|
35637
|
+
releaseScroll() {
|
|
35638
|
+
for (const e of this.scrollSaved) e.el.style[e.prop] = e.prev;
|
|
35639
|
+
this.scrollSaved = [];
|
|
35640
|
+
}
|
|
35641
|
+
applyBackground() {
|
|
35642
|
+
this.save(this.bgSaved, this.doc.documentElement, "background", "transparent");
|
|
35643
|
+
this.save(this.bgSaved, this.doc.body, "background", "transparent");
|
|
35644
|
+
}
|
|
35645
|
+
releaseBackground() {
|
|
35646
|
+
for (const e of this.bgSaved) e.el.style[e.prop] = e.prev;
|
|
35647
|
+
this.bgSaved = [];
|
|
35648
|
+
}
|
|
35649
|
+
static {
|
|
35650
|
+
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
35651
|
+
minVersion: "12.0.0",
|
|
35652
|
+
version: "22.2.2",
|
|
35653
|
+
ngImport: i0,
|
|
35654
|
+
type: PageComponent,
|
|
35655
|
+
deps: [],
|
|
35656
|
+
target: i0.ɵɵFactoryTarget.Component
|
|
35657
|
+
});
|
|
35658
|
+
}
|
|
35659
|
+
static {
|
|
35660
|
+
this.ɵcmp = i0.ɵɵngDeclareComponent({
|
|
35661
|
+
minVersion: "17.2.0",
|
|
35662
|
+
version: "22.2.2",
|
|
35663
|
+
type: PageComponent,
|
|
35664
|
+
isStandalone: true,
|
|
35665
|
+
selector: "ui-page",
|
|
35666
|
+
inputs: {
|
|
35667
|
+
maxWidth: {
|
|
35668
|
+
classPropertyName: "maxWidth",
|
|
35669
|
+
publicName: "maxWidth",
|
|
35670
|
+
isSignal: true,
|
|
35671
|
+
isRequired: false,
|
|
35672
|
+
transformFunction: null
|
|
35673
|
+
},
|
|
35674
|
+
padding: {
|
|
35675
|
+
classPropertyName: "padding",
|
|
35676
|
+
publicName: "padding",
|
|
35677
|
+
isSignal: true,
|
|
35678
|
+
isRequired: false,
|
|
35679
|
+
transformFunction: null
|
|
35680
|
+
},
|
|
35681
|
+
centered: {
|
|
35682
|
+
classPropertyName: "centered",
|
|
35683
|
+
publicName: "centered",
|
|
35684
|
+
isSignal: true,
|
|
35685
|
+
isRequired: false,
|
|
35686
|
+
transformFunction: null
|
|
35687
|
+
},
|
|
35688
|
+
background: {
|
|
35689
|
+
classPropertyName: "background",
|
|
35690
|
+
publicName: "background",
|
|
35691
|
+
isSignal: true,
|
|
35692
|
+
isRequired: false,
|
|
35693
|
+
transformFunction: null
|
|
35694
|
+
},
|
|
35695
|
+
fillViewport: {
|
|
35696
|
+
classPropertyName: "fillViewport",
|
|
35697
|
+
publicName: "fillViewport",
|
|
35698
|
+
isSignal: true,
|
|
35699
|
+
isRequired: false,
|
|
35700
|
+
transformFunction: null
|
|
35701
|
+
},
|
|
35702
|
+
stickyHeader: {
|
|
35703
|
+
classPropertyName: "stickyHeader",
|
|
35704
|
+
publicName: "stickyHeader",
|
|
35705
|
+
isSignal: true,
|
|
35706
|
+
isRequired: false,
|
|
35707
|
+
transformFunction: null
|
|
35708
|
+
},
|
|
35709
|
+
stickyFooter: {
|
|
35710
|
+
classPropertyName: "stickyFooter",
|
|
35711
|
+
publicName: "stickyFooter",
|
|
35712
|
+
isSignal: true,
|
|
35713
|
+
isRequired: false,
|
|
35714
|
+
transformFunction: null
|
|
35715
|
+
},
|
|
35716
|
+
transparent: {
|
|
35717
|
+
classPropertyName: "transparent",
|
|
35718
|
+
publicName: "transparent",
|
|
35719
|
+
isSignal: true,
|
|
35720
|
+
isRequired: false,
|
|
35721
|
+
transformFunction: null
|
|
35722
|
+
},
|
|
35723
|
+
ownScroll: {
|
|
35724
|
+
classPropertyName: "ownScroll",
|
|
35725
|
+
publicName: "ownScroll",
|
|
35726
|
+
isSignal: true,
|
|
35727
|
+
isRequired: false,
|
|
35728
|
+
transformFunction: null
|
|
35729
|
+
},
|
|
35730
|
+
focusKey: {
|
|
35731
|
+
classPropertyName: "focusKey",
|
|
35732
|
+
publicName: "focusKey",
|
|
35733
|
+
isSignal: true,
|
|
35734
|
+
isRequired: false,
|
|
35735
|
+
transformFunction: null
|
|
35736
|
+
}
|
|
35737
|
+
},
|
|
35738
|
+
viewQueries: [{
|
|
35739
|
+
propertyName: "anchor",
|
|
35740
|
+
first: true,
|
|
35741
|
+
predicate: ["anchor"],
|
|
35742
|
+
descendants: true,
|
|
35743
|
+
isSignal: true
|
|
35744
|
+
}],
|
|
35745
|
+
ngImport: i0,
|
|
35746
|
+
template: `<div class="pg" [class.pg-fill]="fillViewport()" [class.pg-transparent]="transparent()" [style.background]="backgroundCss()">
|
|
35747
|
+
<div class="pg-anchor" tabindex="-1" #anchor></div>
|
|
35748
|
+
<div class="pg-header" [class.pg-sticky-h]="stickyHeader() && !transparent()"><ng-content select="[page-header]" /></div>
|
|
35749
|
+
<main class="pg-main" [class.pg-pad-resp]="padding() === 'responsive'" [class.pg-centered]="centered()"
|
|
35750
|
+
[style.max-width]="maxWidthCss()" [style.padding]="paddingCss()"><ng-content /></main>
|
|
35751
|
+
<div class="pg-footer" [class.pg-sticky-f]="stickyFooter() && !transparent()"><ng-content select="[page-footer]" /></div>
|
|
35752
|
+
</div>`,
|
|
35753
|
+
isInline: true,
|
|
35754
|
+
styles: [":host{display:block}.pg{box-sizing:border-box;display:flex;flex-direction:column}.pg.pg-fill{min-height:100vh;min-height:100dvh}.pg.pg-fill.pg-transparent{min-height:0}.pg.pg-transparent{background:transparent}.pg-anchor{height:0;outline:none}.pg-header:empty,.pg-footer:empty{display:none}.pg-header.pg-sticky-h{position:-webkit-sticky;position:sticky;top:0;z-index:20}.pg-footer.pg-sticky-f{position:-webkit-sticky;position:sticky;bottom:0;z-index:20}.pg-main{box-sizing:border-box;flex:1 0 auto;width:100%}.pg-main.pg-centered{margin-left:auto;margin-right:auto}.pg-main.pg-pad-resp{padding:32px 16px 16px}.pg-transparent .pg-main{max-width:none}.pg-transparent .pg-main.pg-pad-resp{padding:8px 0 16px}@media(min-width:640px){.pg-main.pg-pad-resp{padding:32px 24px 16px}.pg-transparent .pg-main.pg-pad-resp{padding:8px 0 16px}}@media(min-width:1024px){.pg-main.pg-pad-resp{padding:32px 0 16px}.pg-transparent .pg-main.pg-pad-resp{padding:8px 0 16px}}\n"],
|
|
35755
|
+
changeDetection: i0.ChangeDetectionStrategy.OnPush
|
|
35756
|
+
});
|
|
35757
|
+
}
|
|
35758
|
+
};
|
|
35759
|
+
i0.ɵɵngDeclareClassMetadata({
|
|
35760
|
+
minVersion: "12.0.0",
|
|
35761
|
+
version: "22.2.2",
|
|
35762
|
+
ngImport: i0,
|
|
35763
|
+
type: PageComponent,
|
|
35764
|
+
decorators: [{
|
|
35765
|
+
type: Component,
|
|
35766
|
+
args: [{
|
|
35767
|
+
selector: "ui-page",
|
|
35768
|
+
standalone: true,
|
|
35769
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
35770
|
+
template: `<div class="pg" [class.pg-fill]="fillViewport()" [class.pg-transparent]="transparent()" [style.background]="backgroundCss()">
|
|
35771
|
+
<div class="pg-anchor" tabindex="-1" #anchor></div>
|
|
35772
|
+
<div class="pg-header" [class.pg-sticky-h]="stickyHeader() && !transparent()"><ng-content select="[page-header]" /></div>
|
|
35773
|
+
<main class="pg-main" [class.pg-pad-resp]="padding() === 'responsive'" [class.pg-centered]="centered()"
|
|
35774
|
+
[style.max-width]="maxWidthCss()" [style.padding]="paddingCss()"><ng-content /></main>
|
|
35775
|
+
<div class="pg-footer" [class.pg-sticky-f]="stickyFooter() && !transparent()"><ng-content select="[page-footer]" /></div>
|
|
35776
|
+
</div>`,
|
|
35777
|
+
styles: [":host{display:block}.pg{box-sizing:border-box;display:flex;flex-direction:column}.pg.pg-fill{min-height:100vh;min-height:100dvh}.pg.pg-fill.pg-transparent{min-height:0}.pg.pg-transparent{background:transparent}.pg-anchor{height:0;outline:none}.pg-header:empty,.pg-footer:empty{display:none}.pg-header.pg-sticky-h{position:-webkit-sticky;position:sticky;top:0;z-index:20}.pg-footer.pg-sticky-f{position:-webkit-sticky;position:sticky;bottom:0;z-index:20}.pg-main{box-sizing:border-box;flex:1 0 auto;width:100%}.pg-main.pg-centered{margin-left:auto;margin-right:auto}.pg-main.pg-pad-resp{padding:32px 16px 16px}.pg-transparent .pg-main{max-width:none}.pg-transparent .pg-main.pg-pad-resp{padding:8px 0 16px}@media(min-width:640px){.pg-main.pg-pad-resp{padding:32px 24px 16px}.pg-transparent .pg-main.pg-pad-resp{padding:8px 0 16px}}@media(min-width:1024px){.pg-main.pg-pad-resp{padding:32px 0 16px}.pg-transparent .pg-main.pg-pad-resp{padding:8px 0 16px}}\n"]
|
|
35778
|
+
}]
|
|
35779
|
+
}],
|
|
35780
|
+
ctorParameters: () => [],
|
|
35781
|
+
propDecorators: {
|
|
35782
|
+
maxWidth: [{
|
|
35783
|
+
type: i0.Input,
|
|
35784
|
+
args: [{
|
|
35785
|
+
isSignal: true,
|
|
35786
|
+
alias: "maxWidth",
|
|
35787
|
+
required: false
|
|
35788
|
+
}]
|
|
35789
|
+
}],
|
|
35790
|
+
padding: [{
|
|
35791
|
+
type: i0.Input,
|
|
35792
|
+
args: [{
|
|
35793
|
+
isSignal: true,
|
|
35794
|
+
alias: "padding",
|
|
35795
|
+
required: false
|
|
35796
|
+
}]
|
|
35797
|
+
}],
|
|
35798
|
+
centered: [{
|
|
35799
|
+
type: i0.Input,
|
|
35800
|
+
args: [{
|
|
35801
|
+
isSignal: true,
|
|
35802
|
+
alias: "centered",
|
|
35803
|
+
required: false
|
|
35804
|
+
}]
|
|
35805
|
+
}],
|
|
35806
|
+
background: [{
|
|
35807
|
+
type: i0.Input,
|
|
35808
|
+
args: [{
|
|
35809
|
+
isSignal: true,
|
|
35810
|
+
alias: "background",
|
|
35811
|
+
required: false
|
|
35812
|
+
}]
|
|
35813
|
+
}],
|
|
35814
|
+
fillViewport: [{
|
|
35815
|
+
type: i0.Input,
|
|
35816
|
+
args: [{
|
|
35817
|
+
isSignal: true,
|
|
35818
|
+
alias: "fillViewport",
|
|
35819
|
+
required: false
|
|
35820
|
+
}]
|
|
35821
|
+
}],
|
|
35822
|
+
stickyHeader: [{
|
|
35823
|
+
type: i0.Input,
|
|
35824
|
+
args: [{
|
|
35825
|
+
isSignal: true,
|
|
35826
|
+
alias: "stickyHeader",
|
|
35827
|
+
required: false
|
|
35828
|
+
}]
|
|
35829
|
+
}],
|
|
35830
|
+
stickyFooter: [{
|
|
35831
|
+
type: i0.Input,
|
|
35832
|
+
args: [{
|
|
35833
|
+
isSignal: true,
|
|
35834
|
+
alias: "stickyFooter",
|
|
35835
|
+
required: false
|
|
35836
|
+
}]
|
|
35837
|
+
}],
|
|
35838
|
+
transparent: [{
|
|
35839
|
+
type: i0.Input,
|
|
35840
|
+
args: [{
|
|
35841
|
+
isSignal: true,
|
|
35842
|
+
alias: "transparent",
|
|
35843
|
+
required: false
|
|
35844
|
+
}]
|
|
35845
|
+
}],
|
|
35846
|
+
ownScroll: [{
|
|
35847
|
+
type: i0.Input,
|
|
35848
|
+
args: [{
|
|
35849
|
+
isSignal: true,
|
|
35850
|
+
alias: "ownScroll",
|
|
35851
|
+
required: false
|
|
35852
|
+
}]
|
|
35853
|
+
}],
|
|
35854
|
+
focusKey: [{
|
|
35855
|
+
type: i0.Input,
|
|
35856
|
+
args: [{
|
|
35857
|
+
isSignal: true,
|
|
35858
|
+
alias: "focusKey",
|
|
35859
|
+
required: false
|
|
35860
|
+
}]
|
|
35861
|
+
}],
|
|
35862
|
+
anchor: [{
|
|
35863
|
+
type: i0.ViewChild,
|
|
35864
|
+
args: ["anchor", { isSignal: true }]
|
|
35865
|
+
}]
|
|
35866
|
+
}
|
|
35867
|
+
});
|
|
35868
|
+
var FadeComponent = class FadeComponent {
|
|
35869
|
+
constructor() {
|
|
35870
|
+
this.key = input(void 0, ...ngDevMode ? [{ debugName: "key" }] : /* istanbul ignore next */ []);
|
|
35871
|
+
this.duration = input(300, ...ngDevMode ? [{ debugName: "duration" }] : /* istanbul ignore next */ []);
|
|
35872
|
+
this.disabled = input(false, ...ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []);
|
|
35873
|
+
this.odd = signal(false, ...ngDevMode ? [{ debugName: "odd" }] : /* istanbul ignore next */ []);
|
|
35874
|
+
this.first = true;
|
|
35875
|
+
effect(() => {
|
|
35876
|
+
const k = this.key();
|
|
35877
|
+
untracked(() => {
|
|
35878
|
+
if (this.first) {
|
|
35879
|
+
this.first = false;
|
|
35880
|
+
this.last = k;
|
|
35881
|
+
return;
|
|
35882
|
+
}
|
|
35883
|
+
if (Object.is(k, this.last)) return;
|
|
35884
|
+
this.last = k;
|
|
35885
|
+
this.odd.update((v) => !v);
|
|
35886
|
+
});
|
|
35887
|
+
});
|
|
35888
|
+
}
|
|
35889
|
+
static {
|
|
35890
|
+
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
35891
|
+
minVersion: "12.0.0",
|
|
35892
|
+
version: "22.2.2",
|
|
35893
|
+
ngImport: i0,
|
|
35894
|
+
type: FadeComponent,
|
|
35895
|
+
deps: [],
|
|
35896
|
+
target: i0.ɵɵFactoryTarget.Component
|
|
35897
|
+
});
|
|
35898
|
+
}
|
|
35899
|
+
static {
|
|
35900
|
+
this.ɵcmp = i0.ɵɵngDeclareComponent({
|
|
35901
|
+
minVersion: "17.1.0",
|
|
35902
|
+
version: "22.2.2",
|
|
35903
|
+
type: FadeComponent,
|
|
35904
|
+
isStandalone: true,
|
|
35905
|
+
selector: "ui-fade",
|
|
35906
|
+
inputs: {
|
|
35907
|
+
key: {
|
|
35908
|
+
classPropertyName: "key",
|
|
35909
|
+
publicName: "key",
|
|
35910
|
+
isSignal: true,
|
|
35911
|
+
isRequired: false,
|
|
35912
|
+
transformFunction: null
|
|
35913
|
+
},
|
|
35914
|
+
duration: {
|
|
35915
|
+
classPropertyName: "duration",
|
|
35916
|
+
publicName: "duration",
|
|
35917
|
+
isSignal: true,
|
|
35918
|
+
isRequired: false,
|
|
35919
|
+
transformFunction: null
|
|
35920
|
+
},
|
|
35921
|
+
disabled: {
|
|
35922
|
+
classPropertyName: "disabled",
|
|
35923
|
+
publicName: "disabled",
|
|
35924
|
+
isSignal: true,
|
|
35925
|
+
isRequired: false,
|
|
35926
|
+
transformFunction: null
|
|
35927
|
+
}
|
|
35928
|
+
},
|
|
35929
|
+
ngImport: i0,
|
|
35930
|
+
template: `<div class="fd" [class.fd-a]="!disabled() && !odd()" [class.fd-b]="!disabled() && odd()" [style.animation-duration.ms]="duration()"><ng-content /></div>`,
|
|
35931
|
+
isInline: true,
|
|
35932
|
+
styles: [":host{display:block}.fd.fd-a{animation:ui-fade-a .3s ease both}.fd.fd-b{animation:ui-fade-b .3s ease both}@keyframes ui-fade-a{0%{opacity:0}to{opacity:1}}@keyframes ui-fade-b{0%{opacity:0}to{opacity:1}}@media(prefers-reduced-motion:reduce){.fd.fd-a,.fd.fd-b{animation:none}}\n"],
|
|
35933
|
+
changeDetection: i0.ChangeDetectionStrategy.OnPush
|
|
35934
|
+
});
|
|
35935
|
+
}
|
|
35936
|
+
};
|
|
35937
|
+
i0.ɵɵngDeclareClassMetadata({
|
|
35938
|
+
minVersion: "12.0.0",
|
|
35939
|
+
version: "22.2.2",
|
|
35940
|
+
ngImport: i0,
|
|
35941
|
+
type: FadeComponent,
|
|
35942
|
+
decorators: [{
|
|
35943
|
+
type: Component,
|
|
35944
|
+
args: [{
|
|
35945
|
+
selector: "ui-fade",
|
|
35946
|
+
standalone: true,
|
|
35947
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
35948
|
+
template: `<div class="fd" [class.fd-a]="!disabled() && !odd()" [class.fd-b]="!disabled() && odd()" [style.animation-duration.ms]="duration()"><ng-content /></div>`,
|
|
35949
|
+
styles: [":host{display:block}.fd.fd-a{animation:ui-fade-a .3s ease both}.fd.fd-b{animation:ui-fade-b .3s ease both}@keyframes ui-fade-a{0%{opacity:0}to{opacity:1}}@keyframes ui-fade-b{0%{opacity:0}to{opacity:1}}@media(prefers-reduced-motion:reduce){.fd.fd-a,.fd.fd-b{animation:none}}\n"]
|
|
35950
|
+
}]
|
|
35951
|
+
}],
|
|
35952
|
+
ctorParameters: () => [],
|
|
35953
|
+
propDecorators: {
|
|
35954
|
+
key: [{
|
|
35955
|
+
type: i0.Input,
|
|
35956
|
+
args: [{
|
|
35957
|
+
isSignal: true,
|
|
35958
|
+
alias: "key",
|
|
35959
|
+
required: false
|
|
35960
|
+
}]
|
|
35961
|
+
}],
|
|
35962
|
+
duration: [{
|
|
35963
|
+
type: i0.Input,
|
|
35964
|
+
args: [{
|
|
35965
|
+
isSignal: true,
|
|
35966
|
+
alias: "duration",
|
|
35967
|
+
required: false
|
|
35968
|
+
}]
|
|
35969
|
+
}],
|
|
35970
|
+
disabled: [{
|
|
35971
|
+
type: i0.Input,
|
|
35972
|
+
args: [{
|
|
35973
|
+
isSignal: true,
|
|
35974
|
+
alias: "disabled",
|
|
35975
|
+
required: false
|
|
35976
|
+
}]
|
|
35977
|
+
}]
|
|
35978
|
+
}
|
|
35979
|
+
});
|
|
35980
|
+
const TOKEN_PX = {
|
|
35981
|
+
sm: 480,
|
|
35982
|
+
md: 768,
|
|
35983
|
+
lg: 1024
|
|
35984
|
+
};
|
|
35985
|
+
var ShowComponent = class ShowComponent {
|
|
35986
|
+
constructor() {
|
|
35987
|
+
this.from = input(null, ...ngDevMode ? [{ debugName: "from" }] : /* istanbul ignore next */ []);
|
|
35988
|
+
this.below = input(null, ...ngDevMode ? [{ debugName: "below" }] : /* istanbul ignore next */ []);
|
|
35989
|
+
this.win = inject(DOCUMENT).defaultView;
|
|
35990
|
+
this.fromToken = computed(() => {
|
|
35991
|
+
const f = this.from();
|
|
35992
|
+
return typeof f === "string" && f in TOKEN_PX ? f : null;
|
|
35993
|
+
}, ...ngDevMode ? [{ debugName: "fromToken" }] : /* istanbul ignore next */ []);
|
|
35994
|
+
this.belowToken = computed(() => {
|
|
35995
|
+
const b = this.below();
|
|
35996
|
+
return typeof b === "string" && b in TOKEN_PX ? b : null;
|
|
35997
|
+
}, ...ngDevMode ? [{ debugName: "belowToken" }] : /* istanbul ignore next */ []);
|
|
35998
|
+
this.fromMatch = signal(true, ...ngDevMode ? [{ debugName: "fromMatch" }] : /* istanbul ignore next */ []);
|
|
35999
|
+
this.belowMatch = signal(true, ...ngDevMode ? [{ debugName: "belowMatch" }] : /* istanbul ignore next */ []);
|
|
36000
|
+
this.watch(() => {
|
|
36001
|
+
const f = this.from();
|
|
36002
|
+
return typeof f === "number" ? `(min-width: ${f}px)` : null;
|
|
36003
|
+
}, this.fromMatch);
|
|
36004
|
+
this.watch(() => {
|
|
36005
|
+
const b = this.below();
|
|
36006
|
+
return typeof b === "number" ? `(max-width: ${b - .02}px)` : null;
|
|
36007
|
+
}, this.belowMatch);
|
|
36008
|
+
}
|
|
36009
|
+
watch(query, target) {
|
|
36010
|
+
effect((onCleanup) => {
|
|
36011
|
+
const q = query();
|
|
36012
|
+
if (q === null || !this.win?.matchMedia) {
|
|
36013
|
+
target.set(true);
|
|
36014
|
+
return;
|
|
36015
|
+
}
|
|
36016
|
+
const mql = this.win.matchMedia(q);
|
|
36017
|
+
target.set(mql.matches);
|
|
36018
|
+
const handler = (e) => target.set(e.matches);
|
|
36019
|
+
mql.addEventListener("change", handler);
|
|
36020
|
+
onCleanup(() => mql.removeEventListener("change", handler));
|
|
36021
|
+
});
|
|
36022
|
+
}
|
|
36023
|
+
static {
|
|
36024
|
+
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
36025
|
+
minVersion: "12.0.0",
|
|
36026
|
+
version: "22.2.2",
|
|
36027
|
+
ngImport: i0,
|
|
36028
|
+
type: ShowComponent,
|
|
36029
|
+
deps: [],
|
|
36030
|
+
target: i0.ɵɵFactoryTarget.Component
|
|
36031
|
+
});
|
|
36032
|
+
}
|
|
36033
|
+
static {
|
|
36034
|
+
this.ɵcmp = i0.ɵɵngDeclareComponent({
|
|
36035
|
+
minVersion: "17.1.0",
|
|
36036
|
+
version: "22.2.2",
|
|
36037
|
+
type: ShowComponent,
|
|
36038
|
+
isStandalone: true,
|
|
36039
|
+
selector: "ui-show",
|
|
36040
|
+
inputs: {
|
|
36041
|
+
from: {
|
|
36042
|
+
classPropertyName: "from",
|
|
36043
|
+
publicName: "from",
|
|
36044
|
+
isSignal: true,
|
|
36045
|
+
isRequired: false,
|
|
36046
|
+
transformFunction: null
|
|
36047
|
+
},
|
|
36048
|
+
below: {
|
|
36049
|
+
classPropertyName: "below",
|
|
36050
|
+
publicName: "below",
|
|
36051
|
+
isSignal: true,
|
|
36052
|
+
isRequired: false,
|
|
36053
|
+
transformFunction: null
|
|
36054
|
+
}
|
|
36055
|
+
},
|
|
36056
|
+
ngImport: i0,
|
|
36057
|
+
template: `<div class="sh" [class.sh-from-sm]="fromToken() === 'sm'" [class.sh-from-md]="fromToken() === 'md'" [class.sh-from-lg]="fromToken() === 'lg'"
|
|
36058
|
+
[class.sh-below-sm]="belowToken() === 'sm'" [class.sh-below-md]="belowToken() === 'md'" [class.sh-below-lg]="belowToken() === 'lg'"
|
|
36059
|
+
[class.sh-off]="!fromMatch() || !belowMatch()"><ng-content /></div>`,
|
|
36060
|
+
isInline: true,
|
|
36061
|
+
styles: [":host{display:block}.sh{display:block}.sh.sh-off{display:none}@media(max-width:479.98px){.sh.sh-from-sm{display:none}}@media(max-width:767.98px){.sh.sh-from-md{display:none}}@media(max-width:1023.98px){.sh.sh-from-lg{display:none}}@media(min-width:480px){.sh.sh-below-sm{display:none}}@media(min-width:768px){.sh.sh-below-md{display:none}}@media(min-width:1024px){.sh.sh-below-lg{display:none}}\n"],
|
|
36062
|
+
changeDetection: i0.ChangeDetectionStrategy.OnPush
|
|
36063
|
+
});
|
|
36064
|
+
}
|
|
36065
|
+
};
|
|
36066
|
+
i0.ɵɵngDeclareClassMetadata({
|
|
36067
|
+
minVersion: "12.0.0",
|
|
36068
|
+
version: "22.2.2",
|
|
36069
|
+
ngImport: i0,
|
|
36070
|
+
type: ShowComponent,
|
|
36071
|
+
decorators: [{
|
|
36072
|
+
type: Component,
|
|
36073
|
+
args: [{
|
|
36074
|
+
selector: "ui-show",
|
|
36075
|
+
standalone: true,
|
|
36076
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
36077
|
+
template: `<div class="sh" [class.sh-from-sm]="fromToken() === 'sm'" [class.sh-from-md]="fromToken() === 'md'" [class.sh-from-lg]="fromToken() === 'lg'"
|
|
36078
|
+
[class.sh-below-sm]="belowToken() === 'sm'" [class.sh-below-md]="belowToken() === 'md'" [class.sh-below-lg]="belowToken() === 'lg'"
|
|
36079
|
+
[class.sh-off]="!fromMatch() || !belowMatch()"><ng-content /></div>`,
|
|
36080
|
+
styles: [":host{display:block}.sh{display:block}.sh.sh-off{display:none}@media(max-width:479.98px){.sh.sh-from-sm{display:none}}@media(max-width:767.98px){.sh.sh-from-md{display:none}}@media(max-width:1023.98px){.sh.sh-from-lg{display:none}}@media(min-width:480px){.sh.sh-below-sm{display:none}}@media(min-width:768px){.sh.sh-below-md{display:none}}@media(min-width:1024px){.sh.sh-below-lg{display:none}}\n"]
|
|
36081
|
+
}]
|
|
36082
|
+
}],
|
|
36083
|
+
ctorParameters: () => [],
|
|
36084
|
+
propDecorators: {
|
|
36085
|
+
from: [{
|
|
36086
|
+
type: i0.Input,
|
|
36087
|
+
args: [{
|
|
36088
|
+
isSignal: true,
|
|
36089
|
+
alias: "from",
|
|
36090
|
+
required: false
|
|
36091
|
+
}]
|
|
36092
|
+
}],
|
|
36093
|
+
below: [{
|
|
36094
|
+
type: i0.Input,
|
|
36095
|
+
args: [{
|
|
36096
|
+
isSignal: true,
|
|
36097
|
+
alias: "below",
|
|
36098
|
+
required: false
|
|
36099
|
+
}]
|
|
36100
|
+
}]
|
|
36101
|
+
}
|
|
36102
|
+
});
|
|
36103
|
+
function formatCurrency(value, options = {}) {
|
|
36104
|
+
const { currency = "USD", locale = "en-US", grouping = true, decimals = 2 } = options;
|
|
36105
|
+
let n = typeof value === "string" ? parseFloat(value) : value ?? 0;
|
|
36106
|
+
if (typeof n !== "number" || !Number.isFinite(n)) n = 0;
|
|
36107
|
+
const formatter = new Intl.NumberFormat(locale, {
|
|
36108
|
+
style: "currency",
|
|
36109
|
+
currency,
|
|
36110
|
+
useGrouping: grouping,
|
|
36111
|
+
minimumFractionDigits: decimals,
|
|
36112
|
+
maximumFractionDigits: decimals
|
|
36113
|
+
});
|
|
36114
|
+
n = Number(n.toFixed(Math.max(0, Math.min(100, decimals)))) + 0;
|
|
36115
|
+
if (n === 0) n = 0;
|
|
36116
|
+
return formatter.format(n);
|
|
36117
|
+
}
|
|
36118
|
+
const clean = (v) => (v ?? "").trim();
|
|
36119
|
+
function formatAddress(parts, options = {}) {
|
|
36120
|
+
const separator = options.separator ?? ", ";
|
|
36121
|
+
const street = clean(parts.street), apt = clean(parts.apt), city = clean(parts.city), state = clean(parts.state), zip = clean(parts.zip);
|
|
36122
|
+
if (options.style === "usa") return [street ? street + (apt ? separator + "Apt " + apt : "") : "", ([city, state].filter(Boolean).join(separator) + (zip ? " " + zip : "")).trim()].filter(Boolean).join(separator);
|
|
36123
|
+
return [
|
|
36124
|
+
street,
|
|
36125
|
+
apt,
|
|
36126
|
+
city,
|
|
36127
|
+
state,
|
|
36128
|
+
zip
|
|
36129
|
+
].filter(Boolean).join(separator);
|
|
36130
|
+
}
|
|
36131
|
+
function downloadBlob(blob, fileName) {
|
|
36132
|
+
if (typeof document === "undefined" || typeof URL === "undefined" || typeof URL.createObjectURL !== "function") return;
|
|
36133
|
+
const url = URL.createObjectURL(blob);
|
|
36134
|
+
const link = document.createElement("a");
|
|
36135
|
+
link.href = url;
|
|
36136
|
+
link.download = fileName;
|
|
36137
|
+
link.style.display = "none";
|
|
36138
|
+
document.body.appendChild(link);
|
|
36139
|
+
link.click();
|
|
36140
|
+
link.remove();
|
|
36141
|
+
setTimeout(() => URL.revokeObjectURL(url), 1e3);
|
|
36142
|
+
}
|
|
36143
|
+
var ImageGalleryDialogComponent = class ImageGalleryDialogComponent {
|
|
36144
|
+
constructor() {
|
|
36145
|
+
this.open = model(false, ...ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []);
|
|
36146
|
+
this.images = input([], ...ngDevMode ? [{ debugName: "images" }] : /* istanbul ignore next */ []);
|
|
36147
|
+
this.index = model(0, ...ngDevMode ? [{ debugName: "index" }] : /* istanbul ignore next */ []);
|
|
36148
|
+
this.title = input("", ...ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []);
|
|
36149
|
+
this.dialogTestId = input("", ...ngDevMode ? [{ debugName: "dialogTestId" }] : /* istanbul ignore next */ []);
|
|
36150
|
+
this.closeLabel = input("Close", ...ngDevMode ? [{ debugName: "closeLabel" }] : /* istanbul ignore next */ []);
|
|
36151
|
+
this.closeTestId = input("", ...ngDevMode ? [{ debugName: "closeTestId" }] : /* istanbul ignore next */ []);
|
|
36152
|
+
this.maxWidth = input("56rem", ...ngDevMode ? [{ debugName: "maxWidth" }] : /* istanbul ignore next */ []);
|
|
36153
|
+
this.galleryLabel = input("Image gallery", ...ngDevMode ? [{ debugName: "galleryLabel" }] : /* istanbul ignore next */ []);
|
|
36154
|
+
effect(() => {
|
|
36155
|
+
if (this.open()) this.index.set(0);
|
|
36156
|
+
});
|
|
36157
|
+
}
|
|
36158
|
+
static {
|
|
36159
|
+
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
36160
|
+
minVersion: "12.0.0",
|
|
36161
|
+
version: "22.2.2",
|
|
36162
|
+
ngImport: i0,
|
|
36163
|
+
type: ImageGalleryDialogComponent,
|
|
36164
|
+
deps: [],
|
|
36165
|
+
target: i0.ɵɵFactoryTarget.Component
|
|
36166
|
+
});
|
|
36167
|
+
}
|
|
36168
|
+
static {
|
|
36169
|
+
this.ɵcmp = i0.ɵɵngDeclareComponent({
|
|
36170
|
+
minVersion: "17.0.0",
|
|
36171
|
+
version: "22.2.2",
|
|
36172
|
+
type: ImageGalleryDialogComponent,
|
|
36173
|
+
isStandalone: true,
|
|
36174
|
+
selector: "ui-image-gallery-dialog",
|
|
36175
|
+
inputs: {
|
|
36176
|
+
open: {
|
|
36177
|
+
classPropertyName: "open",
|
|
36178
|
+
publicName: "open",
|
|
36179
|
+
isSignal: true,
|
|
36180
|
+
isRequired: false,
|
|
36181
|
+
transformFunction: null
|
|
36182
|
+
},
|
|
36183
|
+
images: {
|
|
36184
|
+
classPropertyName: "images",
|
|
36185
|
+
publicName: "images",
|
|
36186
|
+
isSignal: true,
|
|
36187
|
+
isRequired: false,
|
|
36188
|
+
transformFunction: null
|
|
36189
|
+
},
|
|
36190
|
+
index: {
|
|
36191
|
+
classPropertyName: "index",
|
|
36192
|
+
publicName: "index",
|
|
36193
|
+
isSignal: true,
|
|
36194
|
+
isRequired: false,
|
|
36195
|
+
transformFunction: null
|
|
36196
|
+
},
|
|
36197
|
+
title: {
|
|
36198
|
+
classPropertyName: "title",
|
|
36199
|
+
publicName: "title",
|
|
36200
|
+
isSignal: true,
|
|
36201
|
+
isRequired: false,
|
|
36202
|
+
transformFunction: null
|
|
36203
|
+
},
|
|
36204
|
+
dialogTestId: {
|
|
36205
|
+
classPropertyName: "dialogTestId",
|
|
36206
|
+
publicName: "dialogTestId",
|
|
36207
|
+
isSignal: true,
|
|
36208
|
+
isRequired: false,
|
|
36209
|
+
transformFunction: null
|
|
36210
|
+
},
|
|
36211
|
+
closeLabel: {
|
|
36212
|
+
classPropertyName: "closeLabel",
|
|
36213
|
+
publicName: "closeLabel",
|
|
36214
|
+
isSignal: true,
|
|
36215
|
+
isRequired: false,
|
|
36216
|
+
transformFunction: null
|
|
36217
|
+
},
|
|
36218
|
+
closeTestId: {
|
|
36219
|
+
classPropertyName: "closeTestId",
|
|
36220
|
+
publicName: "closeTestId",
|
|
36221
|
+
isSignal: true,
|
|
36222
|
+
isRequired: false,
|
|
36223
|
+
transformFunction: null
|
|
36224
|
+
},
|
|
36225
|
+
maxWidth: {
|
|
36226
|
+
classPropertyName: "maxWidth",
|
|
36227
|
+
publicName: "maxWidth",
|
|
36228
|
+
isSignal: true,
|
|
36229
|
+
isRequired: false,
|
|
36230
|
+
transformFunction: null
|
|
36231
|
+
},
|
|
36232
|
+
galleryLabel: {
|
|
36233
|
+
classPropertyName: "galleryLabel",
|
|
36234
|
+
publicName: "galleryLabel",
|
|
36235
|
+
isSignal: true,
|
|
36236
|
+
isRequired: false,
|
|
36237
|
+
transformFunction: null
|
|
36238
|
+
}
|
|
36239
|
+
},
|
|
36240
|
+
outputs: {
|
|
36241
|
+
open: "openChange",
|
|
36242
|
+
index: "indexChange"
|
|
36243
|
+
},
|
|
36244
|
+
ngImport: i0,
|
|
36245
|
+
template: `
|
|
36246
|
+
<ui-modal [open]="open()" [title]="title()" [maxWidth]="maxWidth()" [dialogTestId]="dialogTestId()" [hideClose]="true" (close)="open.set(false)">
|
|
36247
|
+
@if (open()) {
|
|
36248
|
+
<ui-image-gallery [images]="images()" [(index)]="index" [ariaLabel]="galleryLabel()" [autofocus]="true" />
|
|
36249
|
+
}
|
|
36250
|
+
<ui-button modal-footer-right variant="secondary" size="sm" [attr.data-testid]="closeTestId() || null" (click)="open.set(false)">{{ closeLabel() }}</ui-button>
|
|
36251
|
+
</ui-modal>
|
|
36252
|
+
`,
|
|
36253
|
+
isInline: true,
|
|
36254
|
+
dependencies: [
|
|
36255
|
+
{
|
|
36256
|
+
kind: "component",
|
|
36257
|
+
type: ModalComponent,
|
|
36258
|
+
selector: "ui-modal",
|
|
36259
|
+
inputs: [
|
|
36260
|
+
"open",
|
|
36261
|
+
"title",
|
|
36262
|
+
"description",
|
|
36263
|
+
"maxWidth",
|
|
36264
|
+
"bodyOverflow",
|
|
36265
|
+
"dialogTestId",
|
|
36266
|
+
"hideClose",
|
|
36267
|
+
"closable"
|
|
36268
|
+
],
|
|
36269
|
+
outputs: ["close"]
|
|
36270
|
+
},
|
|
36271
|
+
{
|
|
36272
|
+
kind: "component",
|
|
36273
|
+
type: ImageGalleryComponent,
|
|
36274
|
+
selector: "ui-image-gallery",
|
|
36275
|
+
inputs: [
|
|
36276
|
+
"images",
|
|
36277
|
+
"index",
|
|
36278
|
+
"loop",
|
|
36279
|
+
"showDots",
|
|
36280
|
+
"showCounter",
|
|
36281
|
+
"aspectRatio",
|
|
36282
|
+
"maxHeight",
|
|
36283
|
+
"fit",
|
|
36284
|
+
"ariaLabel",
|
|
36285
|
+
"autofocus"
|
|
36286
|
+
],
|
|
36287
|
+
outputs: ["indexChange"]
|
|
36288
|
+
},
|
|
36289
|
+
{
|
|
36290
|
+
kind: "component",
|
|
36291
|
+
type: ButtonComponent,
|
|
36292
|
+
selector: "ui-button",
|
|
36293
|
+
inputs: [
|
|
36294
|
+
"variant",
|
|
36295
|
+
"routerLink",
|
|
36296
|
+
"queryParams",
|
|
36297
|
+
"fragment",
|
|
36298
|
+
"state",
|
|
36299
|
+
"href",
|
|
36300
|
+
"target",
|
|
36301
|
+
"rel",
|
|
36302
|
+
"shortLabel",
|
|
36303
|
+
"shortBelow",
|
|
36304
|
+
"color",
|
|
36305
|
+
"active",
|
|
36306
|
+
"size",
|
|
36307
|
+
"type",
|
|
36308
|
+
"disabled",
|
|
36309
|
+
"loading",
|
|
36310
|
+
"fullWidth",
|
|
36311
|
+
"ariaLabel",
|
|
36312
|
+
"ariaExpanded",
|
|
36313
|
+
"ariaPressed",
|
|
36314
|
+
"ariaDescribedBy",
|
|
36315
|
+
"modal-footer-left",
|
|
36316
|
+
"modal-footer-right"
|
|
36317
|
+
]
|
|
36318
|
+
}
|
|
36319
|
+
],
|
|
36320
|
+
changeDetection: i0.ChangeDetectionStrategy.OnPush
|
|
36321
|
+
});
|
|
36322
|
+
}
|
|
36323
|
+
};
|
|
36324
|
+
i0.ɵɵngDeclareClassMetadata({
|
|
36325
|
+
minVersion: "12.0.0",
|
|
36326
|
+
version: "22.2.2",
|
|
36327
|
+
ngImport: i0,
|
|
36328
|
+
type: ImageGalleryDialogComponent,
|
|
36329
|
+
decorators: [{
|
|
36330
|
+
type: Component,
|
|
36331
|
+
args: [{
|
|
36332
|
+
selector: "ui-image-gallery-dialog",
|
|
36333
|
+
standalone: true,
|
|
36334
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
36335
|
+
imports: [
|
|
36336
|
+
ModalComponent,
|
|
36337
|
+
ImageGalleryComponent,
|
|
36338
|
+
ButtonComponent
|
|
36339
|
+
],
|
|
36340
|
+
template: `
|
|
36341
|
+
<ui-modal [open]="open()" [title]="title()" [maxWidth]="maxWidth()" [dialogTestId]="dialogTestId()" [hideClose]="true" (close)="open.set(false)">
|
|
36342
|
+
@if (open()) {
|
|
36343
|
+
<ui-image-gallery [images]="images()" [(index)]="index" [ariaLabel]="galleryLabel()" [autofocus]="true" />
|
|
36344
|
+
}
|
|
36345
|
+
<ui-button modal-footer-right variant="secondary" size="sm" [attr.data-testid]="closeTestId() || null" (click)="open.set(false)">{{ closeLabel() }}</ui-button>
|
|
36346
|
+
</ui-modal>
|
|
36347
|
+
`
|
|
36348
|
+
}]
|
|
36349
|
+
}],
|
|
36350
|
+
ctorParameters: () => [],
|
|
36351
|
+
propDecorators: {
|
|
36352
|
+
open: [{
|
|
36353
|
+
type: i0.Input,
|
|
36354
|
+
args: [{
|
|
36355
|
+
isSignal: true,
|
|
36356
|
+
alias: "open",
|
|
36357
|
+
required: false
|
|
36358
|
+
}]
|
|
36359
|
+
}, {
|
|
36360
|
+
type: i0.Output,
|
|
36361
|
+
args: ["openChange"]
|
|
36362
|
+
}],
|
|
36363
|
+
images: [{
|
|
36364
|
+
type: i0.Input,
|
|
36365
|
+
args: [{
|
|
36366
|
+
isSignal: true,
|
|
36367
|
+
alias: "images",
|
|
36368
|
+
required: false
|
|
36369
|
+
}]
|
|
36370
|
+
}],
|
|
36371
|
+
index: [{
|
|
36372
|
+
type: i0.Input,
|
|
36373
|
+
args: [{
|
|
36374
|
+
isSignal: true,
|
|
36375
|
+
alias: "index",
|
|
36376
|
+
required: false
|
|
36377
|
+
}]
|
|
36378
|
+
}, {
|
|
36379
|
+
type: i0.Output,
|
|
36380
|
+
args: ["indexChange"]
|
|
36381
|
+
}],
|
|
36382
|
+
title: [{
|
|
36383
|
+
type: i0.Input,
|
|
36384
|
+
args: [{
|
|
36385
|
+
isSignal: true,
|
|
36386
|
+
alias: "title",
|
|
36387
|
+
required: false
|
|
36388
|
+
}]
|
|
36389
|
+
}],
|
|
36390
|
+
dialogTestId: [{
|
|
36391
|
+
type: i0.Input,
|
|
36392
|
+
args: [{
|
|
36393
|
+
isSignal: true,
|
|
36394
|
+
alias: "dialogTestId",
|
|
36395
|
+
required: false
|
|
36396
|
+
}]
|
|
36397
|
+
}],
|
|
36398
|
+
closeLabel: [{
|
|
36399
|
+
type: i0.Input,
|
|
36400
|
+
args: [{
|
|
36401
|
+
isSignal: true,
|
|
36402
|
+
alias: "closeLabel",
|
|
36403
|
+
required: false
|
|
36404
|
+
}]
|
|
36405
|
+
}],
|
|
36406
|
+
closeTestId: [{
|
|
36407
|
+
type: i0.Input,
|
|
36408
|
+
args: [{
|
|
36409
|
+
isSignal: true,
|
|
36410
|
+
alias: "closeTestId",
|
|
36411
|
+
required: false
|
|
36412
|
+
}]
|
|
36413
|
+
}],
|
|
36414
|
+
maxWidth: [{
|
|
36415
|
+
type: i0.Input,
|
|
36416
|
+
args: [{
|
|
36417
|
+
isSignal: true,
|
|
36418
|
+
alias: "maxWidth",
|
|
36419
|
+
required: false
|
|
36420
|
+
}]
|
|
36421
|
+
}],
|
|
36422
|
+
galleryLabel: [{
|
|
36423
|
+
type: i0.Input,
|
|
36424
|
+
args: [{
|
|
36425
|
+
isSignal: true,
|
|
36426
|
+
alias: "galleryLabel",
|
|
36427
|
+
required: false
|
|
36428
|
+
}]
|
|
36429
|
+
}]
|
|
36430
|
+
}
|
|
36431
|
+
});
|
|
36432
|
+
export { ActionBarComponent, AlertComponent, AppShellComponent, AudioPlayerComponent, AvatarComponent, BADGE_VARIANT_STYLES, BadgeComponent, BarRowComponent, BulkMessagePanelComponent, BusinessHoursComponent, ButtonComponent, CalendarComponent, CheckboxComponent, CheckboxTrailingDirective, ChipComponent, ChipGroupComponent, ColorInputComponent, ColumnFilterComponent, ColumnsComponent, ComboboxComponent, ConfirmOutletComponent, ConfirmService, ContactPickerComponent, DROPDOWN_GROUP, DataTableComponent, DateInputComponent, DateRangePickerComponent, DatetimeInputComponent, DetailCardComponent, DiscountSelectorComponent, DividerComponent, DropdownComponent, EmptyStateComponent, ErrorComponent, ErrorStateComponent, FORGEROUTE_CONFIG, FadeComponent, FileInputComponent, FormColSpanDirective, FormComponent, FormRowComponent, FormSectionComponent, HintComponent, IconComponent, ImageComponent, ImageGalleryComponent, ImageGalleryDialogComponent, ImagePreviewComponent, ImageRepositionComponent, ImportExportComponent, KpiCardComponent, LAYOUT_GAP_PX, ListComponent, ListItemComponent, LiveRegionComponent, ModalComponent, MoreMenuComponent, MultiSelectComponent, PHONE_NUMBER_AREA_CODE_LENGTH, PHONE_NUMBER_ZIP_LENGTH, PageComponent, PaginationComponent, PanelInfoListComponent, PdfHotspotComponent, PhoneNumberPickerComponent, PillTabsComponent, ProgressBarComponent, ProgressRingComponent, QrCodeComponent, QuickFilterTabsComponent, RICH_TEXT_OPTIONS, RadioComponent, RadioGroupComponent, RadioMatrixComponent, RadioOptionContentDirective, ReadonlyFieldsetComponent, RichTextEditorComponent, SEMANTIC_BADGE_MAP, SearchInputComponent, SectionHeaderComponent, SelectComponent, ShowComponent, SidePanelComponent, SignaturePadComponent, SkeletonComponent, StackComponent, StarComponent, StepperComponent, TableToolbarComponent, TextComponent, TextInputComponent, TextareaInputComponent, TimeInputComponent, TimelineComponent, ToastComponent, ToastService, ToggleBadgeComponent, ToggleComponent, TooltipDirective, US_STATES, UiFieldValidity, acceptLabel, appShellGroupsStorageKey, autoVariant, buildDefaultSchedule, builtInActionIcon, businessTimeOptions, createFieldReveal, decodeFilterValues, digitsOnly, downloadBlob, encodeFilterValue, encodeFilterValues, errorContextInterceptor, fileMatchesAccept, formatAddress, formatCurrency, formatFileSize, formatIsoDate, formatIsoDateTime, formatTime, getEligibleIds, getEligibleOptions, getErrorMessage, humanReadableMessage, iconPath, isoKey, issueToErrors, maxLengthIssue, normalizeHexColor, parseBizHours, parseIso, parseTime, pluralize, provideForgerouteToast, reorderItems, requiredIssue, resolveLayoutGap, resolvePreset, serializeBizHours };
|
|
33560
36433
|
|
|
33561
36434
|
//# sourceMappingURL=forgeroute-ui.mjs.map
|