@forgeroute/ui 0.4.8 → 0.4.9
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 +4 -0
- package/fesm2022/forgeroute-ui-messaging.mjs.map +1 -1
- package/fesm2022/forgeroute-ui-stripe.mjs +1 -0
- package/fesm2022/forgeroute-ui-stripe.mjs.map +1 -1
- package/fesm2022/forgeroute-ui.mjs +1560 -35
- package/fesm2022/forgeroute-ui.mjs.map +1 -1
- package/package.json +1 -1
- package/types/forgeroute-ui.d.ts +500 -18
|
@@ -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";
|
|
@@ -1902,7 +1902,7 @@ var MoreMenuComponent = class MoreMenuComponent {
|
|
|
1902
1902
|
</div>
|
|
1903
1903
|
`,
|
|
1904
1904
|
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:#
|
|
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:#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
1906
|
changeDetection: i0.ChangeDetectionStrategy.OnPush
|
|
1907
1907
|
});
|
|
1908
1908
|
}
|
|
@@ -1958,7 +1958,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
1958
1958
|
}
|
|
1959
1959
|
</div>
|
|
1960
1960
|
`,
|
|
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:#
|
|
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:#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
1962
|
}]
|
|
1963
1963
|
}],
|
|
1964
1964
|
ctorParameters: () => [],
|
|
@@ -2553,6 +2553,7 @@ var CheckboxComponent = class CheckboxComponent {
|
|
|
2553
2553
|
this.label = input("", ...ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []);
|
|
2554
2554
|
this.ariaLabel = input("", ...ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []);
|
|
2555
2555
|
this.testId = input("", ...ngDevMode ? [{ debugName: "testId" }] : /* istanbul ignore next */ []);
|
|
2556
|
+
this.labelTestId = input("", ...ngDevMode ? [{ debugName: "labelTestId" }] : /* istanbul ignore next */ []);
|
|
2556
2557
|
this.headingLevel = input(null, ...ngDevMode ? [{ debugName: "headingLevel" }] : /* istanbul ignore next */ []);
|
|
2557
2558
|
this.indeterminate = input(false, ...ngDevMode ? [{ debugName: "indeterminate" }] : /* istanbul ignore next */ []);
|
|
2558
2559
|
this.checked = model(false, ...ngDevMode ? [{ debugName: "checked" }] : /* istanbul ignore next */ []);
|
|
@@ -2716,6 +2717,13 @@ var CheckboxComponent = class CheckboxComponent {
|
|
|
2716
2717
|
isRequired: false,
|
|
2717
2718
|
transformFunction: null
|
|
2718
2719
|
},
|
|
2720
|
+
labelTestId: {
|
|
2721
|
+
classPropertyName: "labelTestId",
|
|
2722
|
+
publicName: "labelTestId",
|
|
2723
|
+
isSignal: true,
|
|
2724
|
+
isRequired: false,
|
|
2725
|
+
transformFunction: null
|
|
2726
|
+
},
|
|
2719
2727
|
headingLevel: {
|
|
2720
2728
|
classPropertyName: "headingLevel",
|
|
2721
2729
|
publicName: "headingLevel",
|
|
@@ -2881,7 +2889,7 @@ var CheckboxComponent = class CheckboxComponent {
|
|
|
2881
2889
|
[attr.aria-describedby]="opt.description ? _descId + '-' + i : null"
|
|
2882
2890
|
(change)="onToggleOption(opt.value, $event)"
|
|
2883
2891
|
/>
|
|
2884
|
-
<span class="cb-label">{{ opt.label }}</span>
|
|
2892
|
+
<span class="cb-label" [attr.data-testid]="opt.labelTestId || null">{{ opt.label }}</span>
|
|
2885
2893
|
</label>
|
|
2886
2894
|
@if (opt.description) {
|
|
2887
2895
|
<p class="cb-desc" [id]="_descId + '-' + i">{{ opt.description }}</p>
|
|
@@ -2924,7 +2932,7 @@ var CheckboxComponent = class CheckboxComponent {
|
|
|
2924
2932
|
(change)="onToggle($event)"
|
|
2925
2933
|
/>
|
|
2926
2934
|
@if (label()) {
|
|
2927
|
-
<span class="cb-label" [attr.role]="headingLevel() ? 'heading' : null" [attr.aria-level]="headingLevel() || null">{{ label() }}</span>
|
|
2935
|
+
<span class="cb-label" [attr.data-testid]="labelTestId() || null" [attr.role]="headingLevel() ? 'heading' : null" [attr.aria-level]="headingLevel() || null">{{ label() }}</span>
|
|
2928
2936
|
}
|
|
2929
2937
|
<ng-content />
|
|
2930
2938
|
</label>
|
|
@@ -3021,7 +3029,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
3021
3029
|
[attr.aria-describedby]="opt.description ? _descId + '-' + i : null"
|
|
3022
3030
|
(change)="onToggleOption(opt.value, $event)"
|
|
3023
3031
|
/>
|
|
3024
|
-
<span class="cb-label">{{ opt.label }}</span>
|
|
3032
|
+
<span class="cb-label" [attr.data-testid]="opt.labelTestId || null">{{ opt.label }}</span>
|
|
3025
3033
|
</label>
|
|
3026
3034
|
@if (opt.description) {
|
|
3027
3035
|
<p class="cb-desc" [id]="_descId + '-' + i">{{ opt.description }}</p>
|
|
@@ -3064,7 +3072,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
3064
3072
|
(change)="onToggle($event)"
|
|
3065
3073
|
/>
|
|
3066
3074
|
@if (label()) {
|
|
3067
|
-
<span class="cb-label" [attr.role]="headingLevel() ? 'heading' : null" [attr.aria-level]="headingLevel() || null">{{ label() }}</span>
|
|
3075
|
+
<span class="cb-label" [attr.data-testid]="labelTestId() || null" [attr.role]="headingLevel() ? 'heading' : null" [attr.aria-level]="headingLevel() || null">{{ label() }}</span>
|
|
3068
3076
|
}
|
|
3069
3077
|
<ng-content />
|
|
3070
3078
|
</label>
|
|
@@ -3117,6 +3125,14 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
3117
3125
|
required: false
|
|
3118
3126
|
}]
|
|
3119
3127
|
}],
|
|
3128
|
+
labelTestId: [{
|
|
3129
|
+
type: i0.Input,
|
|
3130
|
+
args: [{
|
|
3131
|
+
isSignal: true,
|
|
3132
|
+
alias: "labelTestId",
|
|
3133
|
+
required: false
|
|
3134
|
+
}]
|
|
3135
|
+
}],
|
|
3120
3136
|
headingLevel: [{
|
|
3121
3137
|
type: i0.Input,
|
|
3122
3138
|
args: [{
|
|
@@ -3530,7 +3546,7 @@ var ButtonComponent = class ButtonComponent {
|
|
|
3530
3546
|
}
|
|
3531
3547
|
`,
|
|
3532
3548
|
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, #
|
|
3549
|
+
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}}.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
3550
|
dependencies: [{
|
|
3535
3551
|
kind: "directive",
|
|
3536
3552
|
type: NgTemplateOutlet,
|
|
@@ -3647,7 +3663,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
3647
3663
|
><ng-container [ngTemplateOutlet]="content" /></button>
|
|
3648
3664
|
}
|
|
3649
3665
|
`,
|
|
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, #
|
|
3666
|
+
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}}.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
3667
|
}]
|
|
3652
3668
|
}],
|
|
3653
3669
|
propDecorators: {
|
|
@@ -4879,6 +4895,7 @@ var TableToolbarComponent = class TableToolbarComponent {
|
|
|
4879
4895
|
"label",
|
|
4880
4896
|
"ariaLabel",
|
|
4881
4897
|
"testId",
|
|
4898
|
+
"labelTestId",
|
|
4882
4899
|
"headingLevel",
|
|
4883
4900
|
"indeterminate",
|
|
4884
4901
|
"checked",
|
|
@@ -10773,6 +10790,7 @@ var DataTableComponent = class DataTableComponent {
|
|
|
10773
10790
|
"label",
|
|
10774
10791
|
"ariaLabel",
|
|
10775
10792
|
"testId",
|
|
10793
|
+
"labelTestId",
|
|
10776
10794
|
"headingLevel",
|
|
10777
10795
|
"indeterminate",
|
|
10778
10796
|
"checked",
|
|
@@ -13140,6 +13158,7 @@ var StepperComponent = class StepperComponent {
|
|
|
13140
13158
|
this.size = input("md", ...ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []);
|
|
13141
13159
|
this.accentColor = input("", ...ngDevMode ? [{ debugName: "accentColor" }] : /* istanbul ignore next */ []);
|
|
13142
13160
|
this.completeColor = input("", ...ngDevMode ? [{ debugName: "completeColor" }] : /* istanbul ignore next */ []);
|
|
13161
|
+
this.accentLabels = input(false, ...ngDevMode ? [{ debugName: "accentLabels" }] : /* istanbul ignore next */ []);
|
|
13143
13162
|
this.ariaLabel = input("Progress", ...ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []);
|
|
13144
13163
|
this.labelsOnSmallScreens = input("current", ...ngDevMode ? [{ debugName: "labelsOnSmallScreens" }] : /* istanbul ignore next */ []);
|
|
13145
13164
|
this.stepClick = output();
|
|
@@ -13154,7 +13173,7 @@ var StepperComponent = class StepperComponent {
|
|
|
13154
13173
|
const state = i === cur ? "current" : step.complete === void 0 ? derived : step.complete ? "complete" : "upcoming";
|
|
13155
13174
|
const errorMessage = typeof step.error === "string" ? step.error : "";
|
|
13156
13175
|
const error = step.error === true || errorMessage !== "";
|
|
13157
|
-
const selectable = clickable && !step.disabled && state !== "current" && (linear ? state === "complete" : true);
|
|
13176
|
+
const selectable = clickable && !step.disabled && step.selectable !== false && state !== "current" && (linear ? state === "complete" : true);
|
|
13158
13177
|
const status = state === "complete" ? "completed" : state === "current" ? "current step" : "not started";
|
|
13159
13178
|
return {
|
|
13160
13179
|
step,
|
|
@@ -13249,6 +13268,13 @@ var StepperComponent = class StepperComponent {
|
|
|
13249
13268
|
isRequired: false,
|
|
13250
13269
|
transformFunction: null
|
|
13251
13270
|
},
|
|
13271
|
+
accentLabels: {
|
|
13272
|
+
classPropertyName: "accentLabels",
|
|
13273
|
+
publicName: "accentLabels",
|
|
13274
|
+
isSignal: true,
|
|
13275
|
+
isRequired: false,
|
|
13276
|
+
transformFunction: null
|
|
13277
|
+
},
|
|
13252
13278
|
ariaLabel: {
|
|
13253
13279
|
classPropertyName: "ariaLabel",
|
|
13254
13280
|
publicName: "ariaLabel",
|
|
@@ -13280,6 +13306,7 @@ var StepperComponent = class StepperComponent {
|
|
|
13280
13306
|
[class.st-sm]="size() === 'sm'"
|
|
13281
13307
|
[class.st-labels-current]="labelsOnSmallScreens() === 'current'"
|
|
13282
13308
|
[class.st-themed]="!!accentColor()"
|
|
13309
|
+
[class.st-accent-labels]="accentLabels()"
|
|
13283
13310
|
[attr.aria-label]="ariaLabel() || null">
|
|
13284
13311
|
@for (r of rows(); track r.step.key) {
|
|
13285
13312
|
<li class="st-step"
|
|
@@ -13320,7 +13347,7 @@ var StepperComponent = class StepperComponent {
|
|
|
13320
13347
|
</ng-template>
|
|
13321
13348
|
`,
|
|
13322
13349
|
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"],
|
|
13350
|
+
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]: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
13351
|
dependencies: [{
|
|
13325
13352
|
kind: "directive",
|
|
13326
13353
|
type: NgTemplateOutlet,
|
|
@@ -13358,6 +13385,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
13358
13385
|
[class.st-sm]="size() === 'sm'"
|
|
13359
13386
|
[class.st-labels-current]="labelsOnSmallScreens() === 'current'"
|
|
13360
13387
|
[class.st-themed]="!!accentColor()"
|
|
13388
|
+
[class.st-accent-labels]="accentLabels()"
|
|
13361
13389
|
[attr.aria-label]="ariaLabel() || null">
|
|
13362
13390
|
@for (r of rows(); track r.step.key) {
|
|
13363
13391
|
<li class="st-step"
|
|
@@ -13397,7 +13425,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
13397
13425
|
<span class="st-sr">{{ r.srText }}</span>
|
|
13398
13426
|
</ng-template>
|
|
13399
13427
|
`,
|
|
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"]
|
|
13428
|
+
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]: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
13429
|
}]
|
|
13402
13430
|
}],
|
|
13403
13431
|
propDecorators: {
|
|
@@ -13468,6 +13496,14 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
13468
13496
|
required: false
|
|
13469
13497
|
}]
|
|
13470
13498
|
}],
|
|
13499
|
+
accentLabels: [{
|
|
13500
|
+
type: i0.Input,
|
|
13501
|
+
args: [{
|
|
13502
|
+
isSignal: true,
|
|
13503
|
+
alias: "accentLabels",
|
|
13504
|
+
required: false
|
|
13505
|
+
}]
|
|
13506
|
+
}],
|
|
13471
13507
|
ariaLabel: [{
|
|
13472
13508
|
type: i0.Input,
|
|
13473
13509
|
args: [{
|
|
@@ -13975,6 +14011,7 @@ var BusinessHoursComponent = class BusinessHoursComponent {
|
|
|
13975
14011
|
"label",
|
|
13976
14012
|
"ariaLabel",
|
|
13977
14013
|
"testId",
|
|
14014
|
+
"labelTestId",
|
|
13978
14015
|
"headingLevel",
|
|
13979
14016
|
"indeterminate",
|
|
13980
14017
|
"checked",
|
|
@@ -16827,6 +16864,7 @@ var ContactPickerComponent = class ContactPickerComponent {
|
|
|
16827
16864
|
"label",
|
|
16828
16865
|
"ariaLabel",
|
|
16829
16866
|
"testId",
|
|
16867
|
+
"labelTestId",
|
|
16830
16868
|
"headingLevel",
|
|
16831
16869
|
"indeterminate",
|
|
16832
16870
|
"checked",
|
|
@@ -17964,6 +18002,7 @@ var TextComponent = class TextComponent {
|
|
|
17964
18002
|
this.text = input("", ...ngDevMode ? [{ debugName: "text" }] : /* istanbul ignore next */ []);
|
|
17965
18003
|
this.size = input("md", ...ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []);
|
|
17966
18004
|
this.tone = input("default", ...ngDevMode ? [{ debugName: "tone" }] : /* istanbul ignore next */ []);
|
|
18005
|
+
this.color = input("", ...ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []);
|
|
17967
18006
|
this.strong = input(null, ...ngDevMode ? [{ debugName: "strong" }] : /* istanbul ignore next */ []);
|
|
17968
18007
|
this.segments = computed(() => {
|
|
17969
18008
|
const text = this.text() ?? "";
|
|
@@ -18041,6 +18080,13 @@ var TextComponent = class TextComponent {
|
|
|
18041
18080
|
isRequired: false,
|
|
18042
18081
|
transformFunction: null
|
|
18043
18082
|
},
|
|
18083
|
+
color: {
|
|
18084
|
+
classPropertyName: "color",
|
|
18085
|
+
publicName: "color",
|
|
18086
|
+
isSignal: true,
|
|
18087
|
+
isRequired: false,
|
|
18088
|
+
transformFunction: null
|
|
18089
|
+
},
|
|
18044
18090
|
strong: {
|
|
18045
18091
|
classPropertyName: "strong",
|
|
18046
18092
|
publicName: "strong",
|
|
@@ -18057,9 +18103,9 @@ var TextComponent = class TextComponent {
|
|
|
18057
18103
|
}
|
|
18058
18104
|
},
|
|
18059
18105
|
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>`,
|
|
18106
|
+
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
18107
|
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"],
|
|
18108
|
+
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
18109
|
changeDetection: i0.ChangeDetectionStrategy.OnPush
|
|
18064
18110
|
});
|
|
18065
18111
|
}
|
|
@@ -18075,8 +18121,8 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
18075
18121
|
selector: "ui-text",
|
|
18076
18122
|
standalone: true,
|
|
18077
18123
|
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"]
|
|
18124
|
+
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>`,
|
|
18125
|
+
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
18126
|
}]
|
|
18081
18127
|
}],
|
|
18082
18128
|
propDecorators: {
|
|
@@ -18104,6 +18150,14 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
18104
18150
|
required: false
|
|
18105
18151
|
}]
|
|
18106
18152
|
}],
|
|
18153
|
+
color: [{
|
|
18154
|
+
type: i0.Input,
|
|
18155
|
+
args: [{
|
|
18156
|
+
isSignal: true,
|
|
18157
|
+
alias: "color",
|
|
18158
|
+
required: false
|
|
18159
|
+
}]
|
|
18160
|
+
}],
|
|
18107
18161
|
strong: [{
|
|
18108
18162
|
type: i0.Input,
|
|
18109
18163
|
args: [{
|
|
@@ -21555,6 +21609,7 @@ var MultiSelectComponent = class MultiSelectComponent {
|
|
|
21555
21609
|
"label",
|
|
21556
21610
|
"ariaLabel",
|
|
21557
21611
|
"testId",
|
|
21612
|
+
"labelTestId",
|
|
21558
21613
|
"headingLevel",
|
|
21559
21614
|
"indeterminate",
|
|
21560
21615
|
"checked",
|
|
@@ -21883,6 +21938,7 @@ var DiscountSelectorComponent = class DiscountSelectorComponent {
|
|
|
21883
21938
|
"label",
|
|
21884
21939
|
"ariaLabel",
|
|
21885
21940
|
"testId",
|
|
21941
|
+
"labelTestId",
|
|
21886
21942
|
"headingLevel",
|
|
21887
21943
|
"indeterminate",
|
|
21888
21944
|
"checked",
|
|
@@ -27166,6 +27222,7 @@ var ImageComponent = class ImageComponent {
|
|
|
27166
27222
|
this.height = input("", ...ngDevMode ? [{ debugName: "height" }] : /* istanbul ignore next */ []);
|
|
27167
27223
|
this.maxWidth = input("100%", ...ngDevMode ? [{ debugName: "maxWidth" }] : /* istanbul ignore next */ []);
|
|
27168
27224
|
this.maxHeight = input("", ...ngDevMode ? [{ debugName: "maxHeight" }] : /* istanbul ignore next */ []);
|
|
27225
|
+
this.minHeight = input("", ...ngDevMode ? [{ debugName: "minHeight" }] : /* istanbul ignore next */ []);
|
|
27169
27226
|
this.aspectRatio = input("", ...ngDevMode ? [{ debugName: "aspectRatio" }] : /* istanbul ignore next */ []);
|
|
27170
27227
|
this.radius = input("none", ...ngDevMode ? [{ debugName: "radius" }] : /* istanbul ignore next */ []);
|
|
27171
27228
|
this.bordered = input(false, ...ngDevMode ? [{ debugName: "bordered" }] : /* istanbul ignore next */ []);
|
|
@@ -27260,6 +27317,13 @@ var ImageComponent = class ImageComponent {
|
|
|
27260
27317
|
isRequired: false,
|
|
27261
27318
|
transformFunction: null
|
|
27262
27319
|
},
|
|
27320
|
+
minHeight: {
|
|
27321
|
+
classPropertyName: "minHeight",
|
|
27322
|
+
publicName: "minHeight",
|
|
27323
|
+
isSignal: true,
|
|
27324
|
+
isRequired: false,
|
|
27325
|
+
transformFunction: null
|
|
27326
|
+
},
|
|
27263
27327
|
aspectRatio: {
|
|
27264
27328
|
classPropertyName: "aspectRatio",
|
|
27265
27329
|
publicName: "aspectRatio",
|
|
@@ -27323,12 +27387,12 @@ var ImageComponent = class ImageComponent {
|
|
|
27323
27387
|
@if (_url() && !_failed()) {
|
|
27324
27388
|
<img class="im-img" [src]="_url()" [attr.alt]="alt()" [attr.loading]="priority() ? 'eager' : 'lazy'"
|
|
27325
27389
|
[attr.fetchpriority]="priority() ? 'high' : null" decoding="async"
|
|
27326
|
-
[style.width]="imgWidth()" [style.height]="imgHeight()" [style.max-width]="maxWidth()" [style.max-height]="maxHeight() || null"
|
|
27390
|
+
[style.width]="imgWidth()" [style.height]="imgHeight()" [style.max-width]="maxWidth()" [style.max-height]="maxHeight() || null" [style.min-height]="minHeight() || null"
|
|
27327
27391
|
[style.aspect-ratio]="aspectRatio() || null" [style.object-fit]="fit()" [style.border-radius]="radiusCss()"
|
|
27328
27392
|
[class.im-bordered]="bordered()" (load)="loaded.emit()" (error)="_onError()" />
|
|
27329
27393
|
} @else if (placeholder()) {
|
|
27330
27394
|
<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"
|
|
27395
|
+
[style.width]="boxWidth()" [style.height]="boxHeight()" [style.max-width]="maxWidth()" [style.max-height]="maxHeight() || null" [style.min-height]="minHeight() || null"
|
|
27332
27396
|
[style.aspect-ratio]="aspectRatio() || null" [style.border-radius]="radiusCss()">
|
|
27333
27397
|
<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
27398
|
</span>
|
|
@@ -27359,12 +27423,12 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
27359
27423
|
@if (_url() && !_failed()) {
|
|
27360
27424
|
<img class="im-img" [src]="_url()" [attr.alt]="alt()" [attr.loading]="priority() ? 'eager' : 'lazy'"
|
|
27361
27425
|
[attr.fetchpriority]="priority() ? 'high' : null" decoding="async"
|
|
27362
|
-
[style.width]="imgWidth()" [style.height]="imgHeight()" [style.max-width]="maxWidth()" [style.max-height]="maxHeight() || null"
|
|
27426
|
+
[style.width]="imgWidth()" [style.height]="imgHeight()" [style.max-width]="maxWidth()" [style.max-height]="maxHeight() || null" [style.min-height]="minHeight() || null"
|
|
27363
27427
|
[style.aspect-ratio]="aspectRatio() || null" [style.object-fit]="fit()" [style.border-radius]="radiusCss()"
|
|
27364
27428
|
[class.im-bordered]="bordered()" (load)="loaded.emit()" (error)="_onError()" />
|
|
27365
27429
|
} @else if (placeholder()) {
|
|
27366
27430
|
<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"
|
|
27431
|
+
[style.width]="boxWidth()" [style.height]="boxHeight()" [style.max-width]="maxWidth()" [style.max-height]="maxHeight() || null" [style.min-height]="minHeight() || null"
|
|
27368
27432
|
[style.aspect-ratio]="aspectRatio() || null" [style.border-radius]="radiusCss()">
|
|
27369
27433
|
<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
27434
|
</span>
|
|
@@ -27431,6 +27495,14 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
27431
27495
|
required: false
|
|
27432
27496
|
}]
|
|
27433
27497
|
}],
|
|
27498
|
+
minHeight: [{
|
|
27499
|
+
type: i0.Input,
|
|
27500
|
+
args: [{
|
|
27501
|
+
isSignal: true,
|
|
27502
|
+
alias: "minHeight",
|
|
27503
|
+
required: false
|
|
27504
|
+
}]
|
|
27505
|
+
}],
|
|
27434
27506
|
aspectRatio: [{
|
|
27435
27507
|
type: i0.Input,
|
|
27436
27508
|
args: [{
|
|
@@ -27621,6 +27693,7 @@ var ImageGalleryComponent = class ImageGalleryComponent {
|
|
|
27621
27693
|
this.maxHeight = input("70vh", ...ngDevMode ? [{ debugName: "maxHeight" }] : /* istanbul ignore next */ []);
|
|
27622
27694
|
this.fit = input("contain", ...ngDevMode ? [{ debugName: "fit" }] : /* istanbul ignore next */ []);
|
|
27623
27695
|
this.ariaLabel = input("Image gallery", ...ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []);
|
|
27696
|
+
this.autofocus = input(false, ...ngDevMode ? [{ debugName: "autofocus" }] : /* istanbul ignore next */ []);
|
|
27624
27697
|
this.count = computed(() => this.images().length, ...ngDevMode ? [{ debugName: "count" }] : /* istanbul ignore next */ []);
|
|
27625
27698
|
this.position = computed(() => {
|
|
27626
27699
|
const n = this.count();
|
|
@@ -27629,6 +27702,8 @@ var ImageGalleryComponent = class ImageGalleryComponent {
|
|
|
27629
27702
|
}, ...ngDevMode ? [{ debugName: "position" }] : /* istanbul ignore next */ []);
|
|
27630
27703
|
this.current = computed(() => this.images()[this.position()] ?? { src: "" }, ...ngDevMode ? [{ debugName: "current" }] : /* istanbul ignore next */ []);
|
|
27631
27704
|
this.currentAlt = computed(() => this.current().alt ?? `Image ${this.position() + 1} of ${this.count()}`, ...ngDevMode ? [{ debugName: "currentAlt" }] : /* istanbul ignore next */ []);
|
|
27705
|
+
this.autofocusNext = computed(() => this.autofocus() && this.canNext(), ...ngDevMode ? [{ debugName: "autofocusNext" }] : /* istanbul ignore next */ []);
|
|
27706
|
+
this.autofocusPrev = computed(() => this.autofocus() && !this.canNext() && this.canPrev(), ...ngDevMode ? [{ debugName: "autofocusPrev" }] : /* istanbul ignore next */ []);
|
|
27632
27707
|
this.canPrev = computed(() => this.count() > 1 && (this.loop() || this.position() > 0), ...ngDevMode ? [{ debugName: "canPrev" }] : /* istanbul ignore next */ []);
|
|
27633
27708
|
this.canNext = computed(() => this.count() > 1 && (this.loop() || this.position() < this.count() - 1), ...ngDevMode ? [{ debugName: "canNext" }] : /* istanbul ignore next */ []);
|
|
27634
27709
|
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 +27814,13 @@ var ImageGalleryComponent = class ImageGalleryComponent {
|
|
|
27739
27814
|
isSignal: true,
|
|
27740
27815
|
isRequired: false,
|
|
27741
27816
|
transformFunction: null
|
|
27817
|
+
},
|
|
27818
|
+
autofocus: {
|
|
27819
|
+
classPropertyName: "autofocus",
|
|
27820
|
+
publicName: "autofocus",
|
|
27821
|
+
isSignal: true,
|
|
27822
|
+
isRequired: false,
|
|
27823
|
+
transformFunction: null
|
|
27742
27824
|
}
|
|
27743
27825
|
},
|
|
27744
27826
|
outputs: { index: "indexChange" },
|
|
@@ -27748,13 +27830,13 @@ var ImageGalleryComponent = class ImageGalleryComponent {
|
|
|
27748
27830
|
<div class="ig" role="group" aria-roledescription="carousel" [attr.aria-label]="ariaLabel()" (keydown)="onKey($event)">
|
|
27749
27831
|
<div class="ig-stage">
|
|
27750
27832
|
@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">
|
|
27833
|
+
<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
27834
|
<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
27835
|
</ui-button>
|
|
27754
27836
|
}
|
|
27755
27837
|
<ui-image class="ig-img" [src]="current().src" [alt]="currentAlt()" [fit]="fit()" width="100%" [maxHeight]="maxHeight()" [aspectRatio]="aspectRatio()" data-testid="gallery-image" />
|
|
27756
27838
|
@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">
|
|
27839
|
+
<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
27840
|
<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
27841
|
</ui-button>
|
|
27760
27842
|
}
|
|
@@ -27818,6 +27900,7 @@ var ImageGalleryComponent = class ImageGalleryComponent {
|
|
|
27818
27900
|
"height",
|
|
27819
27901
|
"maxWidth",
|
|
27820
27902
|
"maxHeight",
|
|
27903
|
+
"minHeight",
|
|
27821
27904
|
"aspectRatio",
|
|
27822
27905
|
"radius",
|
|
27823
27906
|
"bordered",
|
|
@@ -27865,13 +27948,13 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
27865
27948
|
<div class="ig" role="group" aria-roledescription="carousel" [attr.aria-label]="ariaLabel()" (keydown)="onKey($event)">
|
|
27866
27949
|
<div class="ig-stage">
|
|
27867
27950
|
@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">
|
|
27951
|
+
<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
27952
|
<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
27953
|
</ui-button>
|
|
27871
27954
|
}
|
|
27872
27955
|
<ui-image class="ig-img" [src]="current().src" [alt]="currentAlt()" [fit]="fit()" width="100%" [maxHeight]="maxHeight()" [aspectRatio]="aspectRatio()" data-testid="gallery-image" />
|
|
27873
27956
|
@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">
|
|
27957
|
+
<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
27958
|
<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
27959
|
</ui-button>
|
|
27877
27960
|
}
|
|
@@ -27971,6 +28054,14 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
27971
28054
|
alias: "ariaLabel",
|
|
27972
28055
|
required: false
|
|
27973
28056
|
}]
|
|
28057
|
+
}],
|
|
28058
|
+
autofocus: [{
|
|
28059
|
+
type: i0.Input,
|
|
28060
|
+
args: [{
|
|
28061
|
+
isSignal: true,
|
|
28062
|
+
alias: "autofocus",
|
|
28063
|
+
required: false
|
|
28064
|
+
}]
|
|
27974
28065
|
}]
|
|
27975
28066
|
}
|
|
27976
28067
|
});
|
|
@@ -31659,6 +31750,8 @@ var DetailCardComponent = class DetailCardComponent {
|
|
|
31659
31750
|
this.showEdit = input(false, ...ngDevMode ? [{ debugName: "showEdit" }] : /* istanbul ignore next */ []);
|
|
31660
31751
|
this.editLabel = input("Edit", ...ngDevMode ? [{ debugName: "editLabel" }] : /* istanbul ignore next */ []);
|
|
31661
31752
|
this.editClick = output();
|
|
31753
|
+
this.editTestId = input("", ...ngDevMode ? [{ debugName: "editTestId" }] : /* istanbul ignore next */ []);
|
|
31754
|
+
this.editIcon = input(true, ...ngDevMode ? [{ debugName: "editIcon" }] : /* istanbul ignore next */ []);
|
|
31662
31755
|
this.editAriaLabel = input("", ...ngDevMode ? [{ debugName: "editAriaLabel" }] : /* istanbul ignore next */ []);
|
|
31663
31756
|
this.fill = input(false, ...ngDevMode ? [{ debugName: "fill" }] : /* istanbul ignore next */ []);
|
|
31664
31757
|
}
|
|
@@ -31786,6 +31879,20 @@ var DetailCardComponent = class DetailCardComponent {
|
|
|
31786
31879
|
isRequired: false,
|
|
31787
31880
|
transformFunction: null
|
|
31788
31881
|
},
|
|
31882
|
+
editTestId: {
|
|
31883
|
+
classPropertyName: "editTestId",
|
|
31884
|
+
publicName: "editTestId",
|
|
31885
|
+
isSignal: true,
|
|
31886
|
+
isRequired: false,
|
|
31887
|
+
transformFunction: null
|
|
31888
|
+
},
|
|
31889
|
+
editIcon: {
|
|
31890
|
+
classPropertyName: "editIcon",
|
|
31891
|
+
publicName: "editIcon",
|
|
31892
|
+
isSignal: true,
|
|
31893
|
+
isRequired: false,
|
|
31894
|
+
transformFunction: null
|
|
31895
|
+
},
|
|
31789
31896
|
editAriaLabel: {
|
|
31790
31897
|
classPropertyName: "editAriaLabel",
|
|
31791
31898
|
publicName: "editAriaLabel",
|
|
@@ -31836,11 +31943,13 @@ var DetailCardComponent = class DetailCardComponent {
|
|
|
31836
31943
|
<ng-content select="[card-header]" />
|
|
31837
31944
|
</div>
|
|
31838
31945
|
@if (showEdit()) {
|
|
31839
|
-
<ui-button class="dc-edit" variant="secondary" size="xs" [ariaLabel]="editAriaLabel() || undefined" (click)="$event.stopPropagation(); editClick.emit()">
|
|
31946
|
+
<ui-button class="dc-edit" variant="secondary" size="xs" [ariaLabel]="editAriaLabel() || undefined" [attr.data-testid]="editTestId() || null" (click)="$event.stopPropagation(); editClick.emit()">
|
|
31947
|
+
@if (editIcon()) {
|
|
31840
31948
|
<svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true">
|
|
31841
31949
|
<path d="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"/>
|
|
31842
31950
|
<path d="M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"/>
|
|
31843
31951
|
</svg>
|
|
31952
|
+
}
|
|
31844
31953
|
{{ editLabel() }}
|
|
31845
31954
|
</ui-button>
|
|
31846
31955
|
}
|
|
@@ -31855,7 +31964,7 @@ var DetailCardComponent = class DetailCardComponent {
|
|
|
31855
31964
|
</div>
|
|
31856
31965
|
`,
|
|
31857
31966
|
isInline: true,
|
|
31858
|
-
styles: [":host{display:block;margin-bottom:16px}:host(:last-child){margin-bottom:0}:host(.dc-fill-host){height:100
|
|
31967
|
+
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{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
31968
|
dependencies: [{
|
|
31860
31969
|
kind: "component",
|
|
31861
31970
|
type: ButtonComponent,
|
|
@@ -31927,11 +32036,13 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
31927
32036
|
<ng-content select="[card-header]" />
|
|
31928
32037
|
</div>
|
|
31929
32038
|
@if (showEdit()) {
|
|
31930
|
-
<ui-button class="dc-edit" variant="secondary" size="xs" [ariaLabel]="editAriaLabel() || undefined" (click)="$event.stopPropagation(); editClick.emit()">
|
|
32039
|
+
<ui-button class="dc-edit" variant="secondary" size="xs" [ariaLabel]="editAriaLabel() || undefined" [attr.data-testid]="editTestId() || null" (click)="$event.stopPropagation(); editClick.emit()">
|
|
32040
|
+
@if (editIcon()) {
|
|
31931
32041
|
<svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true">
|
|
31932
32042
|
<path d="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"/>
|
|
31933
32043
|
<path d="M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"/>
|
|
31934
32044
|
</svg>
|
|
32045
|
+
}
|
|
31935
32046
|
{{ editLabel() }}
|
|
31936
32047
|
</ui-button>
|
|
31937
32048
|
}
|
|
@@ -31945,7 +32056,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
31945
32056
|
</div>
|
|
31946
32057
|
</div>
|
|
31947
32058
|
`,
|
|
31948
|
-
styles: [":host{display:block;margin-bottom:16px}:host(:last-child){margin-bottom:0}:host(.dc-fill-host){height:100
|
|
32059
|
+
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{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
32060
|
}]
|
|
31950
32061
|
}],
|
|
31951
32062
|
propDecorators: {
|
|
@@ -32060,6 +32171,22 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
32060
32171
|
type: i0.Output,
|
|
32061
32172
|
args: ["editClick"]
|
|
32062
32173
|
}],
|
|
32174
|
+
editTestId: [{
|
|
32175
|
+
type: i0.Input,
|
|
32176
|
+
args: [{
|
|
32177
|
+
isSignal: true,
|
|
32178
|
+
alias: "editTestId",
|
|
32179
|
+
required: false
|
|
32180
|
+
}]
|
|
32181
|
+
}],
|
|
32182
|
+
editIcon: [{
|
|
32183
|
+
type: i0.Input,
|
|
32184
|
+
args: [{
|
|
32185
|
+
isSignal: true,
|
|
32186
|
+
alias: "editIcon",
|
|
32187
|
+
required: false
|
|
32188
|
+
}]
|
|
32189
|
+
}],
|
|
32063
32190
|
editAriaLabel: [{
|
|
32064
32191
|
type: i0.Input,
|
|
32065
32192
|
args: [{
|
|
@@ -33056,6 +33183,10 @@ var ColumnsComponent = class ColumnsComponent {
|
|
|
33056
33183
|
this.countBelowLg = input(null, ...ngDevMode ? [{ debugName: "countBelowLg" }] : /* istanbul ignore next */ []);
|
|
33057
33184
|
this.countBelowMd = input(null, ...ngDevMode ? [{ debugName: "countBelowMd" }] : /* istanbul ignore next */ []);
|
|
33058
33185
|
this.countBelowSm = input(null, ...ngDevMode ? [{ debugName: "countBelowSm" }] : /* istanbul ignore next */ []);
|
|
33186
|
+
this.countBase = input(1, ...ngDevMode ? [{ debugName: "countBase" }] : /* istanbul ignore next */ []);
|
|
33187
|
+
this.countFromSm = input(null, ...ngDevMode ? [{ debugName: "countFromSm" }] : /* istanbul ignore next */ []);
|
|
33188
|
+
this.countFromMd = input(null, ...ngDevMode ? [{ debugName: "countFromMd" }] : /* istanbul ignore next */ []);
|
|
33189
|
+
this.countFromLg = input(null, ...ngDevMode ? [{ debugName: "countFromLg" }] : /* istanbul ignore next */ []);
|
|
33059
33190
|
this.cols = computed(() => {
|
|
33060
33191
|
const n = Math.trunc(Number(this.count()));
|
|
33061
33192
|
if (!Number.isFinite(n)) return 2;
|
|
@@ -33064,8 +33195,14 @@ var ColumnsComponent = class ColumnsComponent {
|
|
|
33064
33195
|
this.colsLg = computed(() => ColumnsComponent.clampTier(this.countBelowLg()), ...ngDevMode ? [{ debugName: "colsLg" }] : /* istanbul ignore next */ []);
|
|
33065
33196
|
this.colsMd = computed(() => ColumnsComponent.clampTier(this.countBelowMd()), ...ngDevMode ? [{ debugName: "colsMd" }] : /* istanbul ignore next */ []);
|
|
33066
33197
|
this.colsSm = computed(() => ColumnsComponent.clampTier(this.countBelowSm()), ...ngDevMode ? [{ debugName: "colsSm" }] : /* istanbul ignore next */ []);
|
|
33198
|
+
this.fromMode = computed(() => this.countFromSm() != null || this.countFromMd() != null || this.countFromLg() != null, ...ngDevMode ? [{ debugName: "fromMode" }] : /* istanbul ignore next */ []);
|
|
33199
|
+
this.base = computed(() => this.fromMode() ? ColumnsComponent.clampTier(this.countBase()) ?? 1 : null, ...ngDevMode ? [{ debugName: "base" }] : /* istanbul ignore next */ []);
|
|
33200
|
+
this.fromSm = computed(() => ColumnsComponent.clampTier(this.countFromSm()), ...ngDevMode ? [{ debugName: "fromSm" }] : /* istanbul ignore next */ []);
|
|
33201
|
+
this.fromMd = computed(() => ColumnsComponent.clampTier(this.countFromMd()), ...ngDevMode ? [{ debugName: "fromMd" }] : /* istanbul ignore next */ []);
|
|
33202
|
+
this.fromLg = computed(() => ColumnsComponent.clampTier(this.countFromLg()), ...ngDevMode ? [{ debugName: "fromLg" }] : /* istanbul ignore next */ []);
|
|
33067
33203
|
this.gapCss = computed(() => resolveLayoutGap(this.gap(), "lg"), ...ngDevMode ? [{ debugName: "gapCss" }] : /* istanbul ignore next */ []);
|
|
33068
33204
|
this.collapseClass = computed(() => {
|
|
33205
|
+
if (this.fromMode()) return "cl cl-from";
|
|
33069
33206
|
const c = this.collapseAt();
|
|
33070
33207
|
return c === "never" ? "cl" : `cl cl-${c}`;
|
|
33071
33208
|
}, ...ngDevMode ? [{ debugName: "collapseClass" }] : /* istanbul ignore next */ []);
|
|
@@ -33141,13 +33278,41 @@ var ColumnsComponent = class ColumnsComponent {
|
|
|
33141
33278
|
isSignal: true,
|
|
33142
33279
|
isRequired: false,
|
|
33143
33280
|
transformFunction: null
|
|
33281
|
+
},
|
|
33282
|
+
countBase: {
|
|
33283
|
+
classPropertyName: "countBase",
|
|
33284
|
+
publicName: "countBase",
|
|
33285
|
+
isSignal: true,
|
|
33286
|
+
isRequired: false,
|
|
33287
|
+
transformFunction: null
|
|
33288
|
+
},
|
|
33289
|
+
countFromSm: {
|
|
33290
|
+
classPropertyName: "countFromSm",
|
|
33291
|
+
publicName: "countFromSm",
|
|
33292
|
+
isSignal: true,
|
|
33293
|
+
isRequired: false,
|
|
33294
|
+
transformFunction: null
|
|
33295
|
+
},
|
|
33296
|
+
countFromMd: {
|
|
33297
|
+
classPropertyName: "countFromMd",
|
|
33298
|
+
publicName: "countFromMd",
|
|
33299
|
+
isSignal: true,
|
|
33300
|
+
isRequired: false,
|
|
33301
|
+
transformFunction: null
|
|
33302
|
+
},
|
|
33303
|
+
countFromLg: {
|
|
33304
|
+
classPropertyName: "countFromLg",
|
|
33305
|
+
publicName: "countFromLg",
|
|
33306
|
+
isSignal: true,
|
|
33307
|
+
isRequired: false,
|
|
33308
|
+
transformFunction: null
|
|
33144
33309
|
}
|
|
33145
33310
|
},
|
|
33146
33311
|
host: { properties: { "attr.data-columns": "cols()" } },
|
|
33147
33312
|
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>`,
|
|
33313
|
+
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
33314
|
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"],
|
|
33315
|
+
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
33316
|
changeDetection: i0.ChangeDetectionStrategy.OnPush
|
|
33152
33317
|
});
|
|
33153
33318
|
}
|
|
@@ -33164,8 +33329,8 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
33164
33329
|
standalone: true,
|
|
33165
33330
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
33166
33331
|
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"]
|
|
33332
|
+
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>`,
|
|
33333
|
+
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
33334
|
}]
|
|
33170
33335
|
}],
|
|
33171
33336
|
propDecorators: {
|
|
@@ -33224,6 +33389,38 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
33224
33389
|
alias: "countBelowSm",
|
|
33225
33390
|
required: false
|
|
33226
33391
|
}]
|
|
33392
|
+
}],
|
|
33393
|
+
countBase: [{
|
|
33394
|
+
type: i0.Input,
|
|
33395
|
+
args: [{
|
|
33396
|
+
isSignal: true,
|
|
33397
|
+
alias: "countBase",
|
|
33398
|
+
required: false
|
|
33399
|
+
}]
|
|
33400
|
+
}],
|
|
33401
|
+
countFromSm: [{
|
|
33402
|
+
type: i0.Input,
|
|
33403
|
+
args: [{
|
|
33404
|
+
isSignal: true,
|
|
33405
|
+
alias: "countFromSm",
|
|
33406
|
+
required: false
|
|
33407
|
+
}]
|
|
33408
|
+
}],
|
|
33409
|
+
countFromMd: [{
|
|
33410
|
+
type: i0.Input,
|
|
33411
|
+
args: [{
|
|
33412
|
+
isSignal: true,
|
|
33413
|
+
alias: "countFromMd",
|
|
33414
|
+
required: false
|
|
33415
|
+
}]
|
|
33416
|
+
}],
|
|
33417
|
+
countFromLg: [{
|
|
33418
|
+
type: i0.Input,
|
|
33419
|
+
args: [{
|
|
33420
|
+
isSignal: true,
|
|
33421
|
+
alias: "countFromLg",
|
|
33422
|
+
required: false
|
|
33423
|
+
}]
|
|
33227
33424
|
}]
|
|
33228
33425
|
}
|
|
33229
33426
|
});
|
|
@@ -33246,6 +33443,8 @@ var StackComponent = class StackComponent {
|
|
|
33246
33443
|
this.align = input("stretch", ...ngDevMode ? [{ debugName: "align" }] : /* istanbul ignore next */ []);
|
|
33247
33444
|
this.justify = input("start", ...ngDevMode ? [{ debugName: "justify" }] : /* istanbul ignore next */ []);
|
|
33248
33445
|
this.wrap = input(false, ...ngDevMode ? [{ debugName: "wrap" }] : /* istanbul ignore next */ []);
|
|
33446
|
+
this.minHeight = input("", ...ngDevMode ? [{ debugName: "minHeight" }] : /* istanbul ignore next */ []);
|
|
33447
|
+
this.width = input("", ...ngDevMode ? [{ debugName: "width" }] : /* istanbul ignore next */ []);
|
|
33249
33448
|
this.gapCss = computed(() => resolveLayoutGap(this.gap(), "md"), ...ngDevMode ? [{ debugName: "gapCss" }] : /* istanbul ignore next */ []);
|
|
33250
33449
|
this.alignCss = computed(() => ALIGN[this.align()] ?? "stretch", ...ngDevMode ? [{ debugName: "alignCss" }] : /* istanbul ignore next */ []);
|
|
33251
33450
|
this.justifyCss = computed(() => JUSTIFY$1[this.justify()] ?? "flex-start", ...ngDevMode ? [{ debugName: "justifyCss" }] : /* istanbul ignore next */ []);
|
|
@@ -33302,11 +33501,25 @@ var StackComponent = class StackComponent {
|
|
|
33302
33501
|
isSignal: true,
|
|
33303
33502
|
isRequired: false,
|
|
33304
33503
|
transformFunction: null
|
|
33504
|
+
},
|
|
33505
|
+
minHeight: {
|
|
33506
|
+
classPropertyName: "minHeight",
|
|
33507
|
+
publicName: "minHeight",
|
|
33508
|
+
isSignal: true,
|
|
33509
|
+
isRequired: false,
|
|
33510
|
+
transformFunction: null
|
|
33511
|
+
},
|
|
33512
|
+
width: {
|
|
33513
|
+
classPropertyName: "width",
|
|
33514
|
+
publicName: "width",
|
|
33515
|
+
isSignal: true,
|
|
33516
|
+
isRequired: false,
|
|
33517
|
+
transformFunction: null
|
|
33305
33518
|
}
|
|
33306
33519
|
},
|
|
33307
33520
|
ngImport: i0,
|
|
33308
33521
|
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>`,
|
|
33522
|
+
[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"><ng-content /></div>`,
|
|
33310
33523
|
isInline: true,
|
|
33311
33524
|
styles: [":host{display:block}.st{display:flex}.st>::ng-deep *{margin:0!important}.st.st-h>::ng-deep *{min-width:0}\n"],
|
|
33312
33525
|
changeDetection: i0.ChangeDetectionStrategy.OnPush
|
|
@@ -33325,7 +33538,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
33325
33538
|
standalone: true,
|
|
33326
33539
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
33327
33540
|
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>`,
|
|
33541
|
+
[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"><ng-content /></div>`,
|
|
33329
33542
|
styles: [":host{display:block}.st{display:flex}.st>::ng-deep *{margin:0!important}.st.st-h>::ng-deep *{min-width:0}\n"]
|
|
33330
33543
|
}]
|
|
33331
33544
|
}],
|
|
@@ -33369,6 +33582,22 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
33369
33582
|
alias: "wrap",
|
|
33370
33583
|
required: false
|
|
33371
33584
|
}]
|
|
33585
|
+
}],
|
|
33586
|
+
minHeight: [{
|
|
33587
|
+
type: i0.Input,
|
|
33588
|
+
args: [{
|
|
33589
|
+
isSignal: true,
|
|
33590
|
+
alias: "minHeight",
|
|
33591
|
+
required: false
|
|
33592
|
+
}]
|
|
33593
|
+
}],
|
|
33594
|
+
width: [{
|
|
33595
|
+
type: i0.Input,
|
|
33596
|
+
args: [{
|
|
33597
|
+
isSignal: true,
|
|
33598
|
+
alias: "width",
|
|
33599
|
+
required: false
|
|
33600
|
+
}]
|
|
33372
33601
|
}]
|
|
33373
33602
|
}
|
|
33374
33603
|
});
|
|
@@ -33556,6 +33785,1302 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
33556
33785
|
}]
|
|
33557
33786
|
}
|
|
33558
33787
|
});
|
|
33559
|
-
|
|
33788
|
+
const WEEK_DAY_LABELS = [
|
|
33789
|
+
"Sun",
|
|
33790
|
+
"Mon",
|
|
33791
|
+
"Tue",
|
|
33792
|
+
"Wed",
|
|
33793
|
+
"Thu",
|
|
33794
|
+
"Fri",
|
|
33795
|
+
"Sat"
|
|
33796
|
+
];
|
|
33797
|
+
function toDateStr(d) {
|
|
33798
|
+
return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, "0")}-${String(d.getDate()).padStart(2, "0")}`;
|
|
33799
|
+
}
|
|
33800
|
+
function fromDateStr(dateStr) {
|
|
33801
|
+
return /* @__PURE__ */ new Date(dateStr + "T00:00");
|
|
33802
|
+
}
|
|
33803
|
+
function buildMonthCells(anchor, todayStr) {
|
|
33804
|
+
const y = anchor.getFullYear();
|
|
33805
|
+
const m = anchor.getMonth();
|
|
33806
|
+
const start = new Date(y, m, 1 - new Date(y, m, 1).getDay());
|
|
33807
|
+
const cells = [];
|
|
33808
|
+
for (let i = 0; i < 42; i++) {
|
|
33809
|
+
const d = new Date(start.getFullYear(), start.getMonth(), start.getDate() + i);
|
|
33810
|
+
const ds = toDateStr(d);
|
|
33811
|
+
cells.push({
|
|
33812
|
+
dateStr: ds,
|
|
33813
|
+
dayNum: d.getDate(),
|
|
33814
|
+
isToday: ds === todayStr,
|
|
33815
|
+
isCurrentMonth: d.getMonth() === m,
|
|
33816
|
+
isWeekend: d.getDay() === 0 || d.getDay() === 6
|
|
33817
|
+
});
|
|
33818
|
+
}
|
|
33819
|
+
return cells;
|
|
33820
|
+
}
|
|
33821
|
+
function buildWeekDays(anchor, todayStr) {
|
|
33822
|
+
const start = new Date(anchor.getFullYear(), anchor.getMonth(), anchor.getDate() - anchor.getDay());
|
|
33823
|
+
return Array.from({ length: 7 }, (_, i) => {
|
|
33824
|
+
const d = new Date(start.getFullYear(), start.getMonth(), start.getDate() + i);
|
|
33825
|
+
const ds = toDateStr(d);
|
|
33826
|
+
return {
|
|
33827
|
+
dateStr: ds,
|
|
33828
|
+
dayNum: d.getDate(),
|
|
33829
|
+
isToday: ds === todayStr,
|
|
33830
|
+
isCurrentMonth: true,
|
|
33831
|
+
isWeekend: i === 0 || i === 6
|
|
33832
|
+
};
|
|
33833
|
+
});
|
|
33834
|
+
}
|
|
33835
|
+
function rangeFor(view, anchor, todayStr) {
|
|
33836
|
+
if (view === "week") {
|
|
33837
|
+
const days = buildWeekDays(anchor, todayStr);
|
|
33838
|
+
return {
|
|
33839
|
+
view,
|
|
33840
|
+
start: days[0].dateStr,
|
|
33841
|
+
end: days[6].dateStr,
|
|
33842
|
+
anchor
|
|
33843
|
+
};
|
|
33844
|
+
}
|
|
33845
|
+
if (view === "month") {
|
|
33846
|
+
const cells = buildMonthCells(anchor, todayStr);
|
|
33847
|
+
return {
|
|
33848
|
+
view,
|
|
33849
|
+
start: cells[0].dateStr,
|
|
33850
|
+
end: cells[41].dateStr,
|
|
33851
|
+
anchor
|
|
33852
|
+
};
|
|
33853
|
+
}
|
|
33854
|
+
const y = anchor.getFullYear();
|
|
33855
|
+
const m = anchor.getMonth();
|
|
33856
|
+
return {
|
|
33857
|
+
view,
|
|
33858
|
+
start: toDateStr(new Date(y, m, 1)),
|
|
33859
|
+
end: toDateStr(new Date(y, m + 2, 0)),
|
|
33860
|
+
anchor
|
|
33861
|
+
};
|
|
33862
|
+
}
|
|
33863
|
+
function shiftAnchor(view, anchor, direction) {
|
|
33864
|
+
if (view === "week") return new Date(anchor.getFullYear(), anchor.getMonth(), anchor.getDate() + 7 * direction);
|
|
33865
|
+
if (view === "agenda") return new Date(anchor.getFullYear(), anchor.getMonth() + 2 * direction, 1);
|
|
33866
|
+
const y = anchor.getFullYear();
|
|
33867
|
+
const m = anchor.getMonth() + direction;
|
|
33868
|
+
const lastDay = new Date(y, m + 1, 0).getDate();
|
|
33869
|
+
return new Date(y, m, Math.min(anchor.getDate(), lastDay));
|
|
33870
|
+
}
|
|
33871
|
+
const DAY_LABEL = new Intl.DateTimeFormat("en-US", {
|
|
33872
|
+
weekday: "long",
|
|
33873
|
+
month: "long",
|
|
33874
|
+
day: "numeric",
|
|
33875
|
+
year: "numeric"
|
|
33876
|
+
});
|
|
33877
|
+
function formatDayLabel(dateStr) {
|
|
33878
|
+
return DAY_LABEL.format(fromDateStr(dateStr));
|
|
33879
|
+
}
|
|
33880
|
+
function periodLabelFor(view, anchor, todayStr) {
|
|
33881
|
+
if (view === "week") {
|
|
33882
|
+
const days = buildWeekDays(anchor, todayStr);
|
|
33883
|
+
const fs = fromDateStr(days[0].dateStr);
|
|
33884
|
+
const ls = fromDateStr(days[6].dateStr);
|
|
33885
|
+
if (fs.getMonth() === ls.getMonth()) return fs.toLocaleDateString("en-US", {
|
|
33886
|
+
month: "long",
|
|
33887
|
+
year: "numeric"
|
|
33888
|
+
});
|
|
33889
|
+
return `${fs.toLocaleDateString("en-US", { month: "short" })} – ${ls.toLocaleDateString("en-US", {
|
|
33890
|
+
month: "short",
|
|
33891
|
+
year: "numeric"
|
|
33892
|
+
})}`;
|
|
33893
|
+
}
|
|
33894
|
+
if (view === "agenda") {
|
|
33895
|
+
const start = new Date(anchor.getFullYear(), anchor.getMonth(), 1);
|
|
33896
|
+
const end = new Date(anchor.getFullYear(), anchor.getMonth() + 1, 1);
|
|
33897
|
+
return `${start.toLocaleDateString("en-US", { month: "long" })} – ${end.toLocaleDateString("en-US", {
|
|
33898
|
+
month: "long",
|
|
33899
|
+
year: "numeric"
|
|
33900
|
+
})}`;
|
|
33901
|
+
}
|
|
33902
|
+
return anchor.toLocaleDateString("en-US", {
|
|
33903
|
+
month: "long",
|
|
33904
|
+
year: "numeric"
|
|
33905
|
+
});
|
|
33906
|
+
}
|
|
33907
|
+
function formatTime$1(time) {
|
|
33908
|
+
const [h, m] = time.split(":").map(Number);
|
|
33909
|
+
return `${h % 12 || 12}:${String(m).padStart(2, "0")} ${h >= 12 ? "PM" : "AM"}`;
|
|
33910
|
+
}
|
|
33911
|
+
function formatHour(h) {
|
|
33912
|
+
return `${h % 12 || 12} ${h >= 12 ? "PM" : "AM"}`;
|
|
33913
|
+
}
|
|
33914
|
+
const MIN_EVENT_HEIGHT = 20;
|
|
33915
|
+
function timedBox(startTime, endTime, startHour, endHour = 21) {
|
|
33916
|
+
const gridMax = (Math.max(endHour, startHour) + 1 - startHour) * 60;
|
|
33917
|
+
const [h, min] = (startTime ?? `${String(startHour).padStart(2, "0")}:00`).split(":").map(Number);
|
|
33918
|
+
const s = (h - startHour) * 60 + min;
|
|
33919
|
+
let e = s + 60;
|
|
33920
|
+
if (endTime) {
|
|
33921
|
+
const [eh, em] = endTime.split(":").map(Number);
|
|
33922
|
+
e = (eh - startHour) * 60 + em;
|
|
33923
|
+
}
|
|
33924
|
+
const top = Math.min(Math.max(0, s), gridMax - MIN_EVENT_HEIGHT);
|
|
33925
|
+
return {
|
|
33926
|
+
top,
|
|
33927
|
+
height: Math.max(MIN_EVENT_HEIGHT, Math.min(Math.max(e, 0), gridMax) - top)
|
|
33928
|
+
};
|
|
33929
|
+
}
|
|
33930
|
+
function layoutLanes(boxes) {
|
|
33931
|
+
const sorted = boxes.slice().sort((a, b) => a.top - b.top || b.height - a.height);
|
|
33932
|
+
const result = {};
|
|
33933
|
+
let cluster = [];
|
|
33934
|
+
let laneEnds = [];
|
|
33935
|
+
let clusterEnd = -1;
|
|
33936
|
+
const flush = () => {
|
|
33937
|
+
for (const id of cluster) result[id].lanes = laneEnds.length;
|
|
33938
|
+
cluster = [];
|
|
33939
|
+
laneEnds = [];
|
|
33940
|
+
};
|
|
33941
|
+
for (const b of sorted) {
|
|
33942
|
+
if (cluster.length && b.top >= clusterEnd) flush();
|
|
33943
|
+
let lane = laneEnds.findIndex((end) => end <= b.top);
|
|
33944
|
+
if (lane === -1) {
|
|
33945
|
+
lane = laneEnds.length;
|
|
33946
|
+
laneEnds.push(0);
|
|
33947
|
+
}
|
|
33948
|
+
laneEnds[lane] = b.top + b.height;
|
|
33949
|
+
clusterEnd = cluster.length ? Math.max(clusterEnd, b.top + b.height) : b.top + b.height;
|
|
33950
|
+
cluster.push(b.id);
|
|
33951
|
+
result[b.id] = {
|
|
33952
|
+
lane,
|
|
33953
|
+
lanes: 1
|
|
33954
|
+
};
|
|
33955
|
+
}
|
|
33956
|
+
flush();
|
|
33957
|
+
return result;
|
|
33958
|
+
}
|
|
33959
|
+
var CalendarComponent = class CalendarComponent {
|
|
33960
|
+
clickable(dateStr) {
|
|
33961
|
+
return this.canCreate() && !(this.disablePast() && dateStr < this.todayStr());
|
|
33962
|
+
}
|
|
33963
|
+
constructor() {
|
|
33964
|
+
this.items = input([], ...ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []);
|
|
33965
|
+
this.loading = input(false, ...ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []);
|
|
33966
|
+
this.view = model("month", ...ngDevMode ? [{ debugName: "view" }] : /* istanbul ignore next */ []);
|
|
33967
|
+
this.views = input([
|
|
33968
|
+
"week",
|
|
33969
|
+
"month",
|
|
33970
|
+
"agenda"
|
|
33971
|
+
], ...ngDevMode ? [{ debugName: "views" }] : /* istanbul ignore next */ []);
|
|
33972
|
+
this.anchorDate = model(/* @__PURE__ */ new Date(), ...ngDevMode ? [{ debugName: "anchorDate" }] : /* istanbul ignore next */ []);
|
|
33973
|
+
this.filters = input([], ...ngDevMode ? [{ debugName: "filters" }] : /* istanbul ignore next */ []);
|
|
33974
|
+
this.filterLabel = input("", ...ngDevMode ? [{ debugName: "filterLabel" }] : /* istanbul ignore next */ []);
|
|
33975
|
+
this.filterMode = input("multi", ...ngDevMode ? [{ debugName: "filterMode" }] : /* istanbul ignore next */ []);
|
|
33976
|
+
this.activeFilters = model([], ...ngDevMode ? [{ debugName: "activeFilters" }] : /* istanbul ignore next */ []);
|
|
33977
|
+
this.showFilterCounts = input(false, ...ngDevMode ? [{ debugName: "showFilterCounts" }] : /* istanbul ignore next */ []);
|
|
33978
|
+
this.canCreate = input(false, ...ngDevMode ? [{ debugName: "canCreate" }] : /* istanbul ignore next */ []);
|
|
33979
|
+
this.disablePast = input(false, ...ngDevMode ? [{ debugName: "disablePast" }] : /* istanbul ignore next */ []);
|
|
33980
|
+
this.maxVisible = input(3, ...ngDevMode ? [{ debugName: "maxVisible" }] : /* istanbul ignore next */ []);
|
|
33981
|
+
this.chipLayout = input("inline", ...ngDevMode ? [{ debugName: "chipLayout" }] : /* istanbul ignore next */ []);
|
|
33982
|
+
this.sortByTime = input(true, ...ngDevMode ? [{ debugName: "sortByTime" }] : /* istanbul ignore next */ []);
|
|
33983
|
+
this.startHour = input(7, ...ngDevMode ? [{ debugName: "startHour" }] : /* istanbul ignore next */ []);
|
|
33984
|
+
this.endHour = input(21, ...ngDevMode ? [{ debugName: "endHour" }] : /* istanbul ignore next */ []);
|
|
33985
|
+
this.emptyMessage = input("No events in this period.", ...ngDevMode ? [{ debugName: "emptyMessage" }] : /* istanbul ignore next */ []);
|
|
33986
|
+
this.dayLabelFn = input(null, ...ngDevMode ? [{ debugName: "dayLabelFn" }] : /* istanbul ignore next */ []);
|
|
33987
|
+
this.rangeChange = output();
|
|
33988
|
+
this.itemClick = output();
|
|
33989
|
+
this.dateClick = output();
|
|
33990
|
+
this.slotClick = output();
|
|
33991
|
+
this.moreClick = output();
|
|
33992
|
+
this.host = inject(ElementRef);
|
|
33993
|
+
this.weekDayLabels = WEEK_DAY_LABELS;
|
|
33994
|
+
this.weekDayNames = [
|
|
33995
|
+
"Sunday",
|
|
33996
|
+
"Monday",
|
|
33997
|
+
"Tuesday",
|
|
33998
|
+
"Wednesday",
|
|
33999
|
+
"Thursday",
|
|
34000
|
+
"Friday",
|
|
34001
|
+
"Saturday"
|
|
34002
|
+
];
|
|
34003
|
+
this.skeletonCells = Array.from({ length: 42 }, (_, i) => i);
|
|
34004
|
+
this.formatHour = formatHour;
|
|
34005
|
+
this.todayStr = signal(toDateStr(/* @__PURE__ */ new Date()), ...ngDevMode ? [{ debugName: "todayStr" }] : /* istanbul ignore next */ []);
|
|
34006
|
+
this.focusedDate = signal(null, ...ngDevMode ? [{ debugName: "focusedDate" }] : /* istanbul ignore next */ []);
|
|
34007
|
+
this.lastRangeKey = "";
|
|
34008
|
+
this.hours = computed(() => Array.from({ length: Math.max(1, this.endHour() - this.startHour() + 1) }, (_, i) => i + this.startHour()), ...ngDevMode ? [{ debugName: "hours" }] : /* istanbul ignore next */ []);
|
|
34009
|
+
this.monthCells = computed(() => buildMonthCells(this.anchorDate(), this.todayStr()), ...ngDevMode ? [{ debugName: "monthCells" }] : /* istanbul ignore next */ []);
|
|
34010
|
+
this.weekDays = computed(() => buildWeekDays(this.anchorDate(), this.todayStr()), ...ngDevMode ? [{ debugName: "weekDays" }] : /* istanbul ignore next */ []);
|
|
34011
|
+
this.periodLabel = computed(() => periodLabelFor(this.view(), this.anchorDate(), this.todayStr()), ...ngDevMode ? [{ debugName: "periodLabel" }] : /* istanbul ignore next */ []);
|
|
34012
|
+
this.viewTabs = computed(() => this.views().map((v) => ({
|
|
34013
|
+
key: v,
|
|
34014
|
+
label: v === "week" ? "Week" : v === "month" ? "Month" : "Agenda"
|
|
34015
|
+
})), ...ngDevMode ? [{ debugName: "viewTabs" }] : /* istanbul ignore next */ []);
|
|
34016
|
+
this.typeCounts = computed(() => {
|
|
34017
|
+
const counts = {};
|
|
34018
|
+
for (const e of this.items()) if (e.type) counts[e.type] = (counts[e.type] ?? 0) + 1;
|
|
34019
|
+
return counts;
|
|
34020
|
+
}, ...ngDevMode ? [{ debugName: "typeCounts" }] : /* istanbul ignore next */ []);
|
|
34021
|
+
this.byDate = computed(() => {
|
|
34022
|
+
const active = this.activeFilters();
|
|
34023
|
+
const map = {};
|
|
34024
|
+
if (isDevMode()) {
|
|
34025
|
+
const seen = /* @__PURE__ */ new Set();
|
|
34026
|
+
for (const e of this.items()) {
|
|
34027
|
+
if (seen.has(e.id)) {
|
|
34028
|
+
console.warn(`ui-calendar: duplicate item id "${e.id}" — ids must be unique across all items (prefix them by source).`);
|
|
34029
|
+
break;
|
|
34030
|
+
}
|
|
34031
|
+
seen.add(e.id);
|
|
34032
|
+
}
|
|
34033
|
+
}
|
|
34034
|
+
for (const e of this.items()) {
|
|
34035
|
+
if (active.length && !(e.type && active.includes(e.type))) continue;
|
|
34036
|
+
(map[e.date] ??= []).push(e);
|
|
34037
|
+
}
|
|
34038
|
+
if (this.sortByTime()) for (const k of Object.keys(map)) map[k] = map[k].slice().sort((a, b) => (a.startTime ?? "").localeCompare(b.startTime ?? ""));
|
|
34039
|
+
return map;
|
|
34040
|
+
}, ...ngDevMode ? [{ debugName: "byDate" }] : /* istanbul ignore next */ []);
|
|
34041
|
+
this.agendaGroups = computed(() => Object.entries(this.byDate()).sort(([a], [b]) => a.localeCompare(b)).map(([dateStr, items]) => ({
|
|
34042
|
+
dateStr,
|
|
34043
|
+
items
|
|
34044
|
+
})), ...ngDevMode ? [{ debugName: "agendaGroups" }] : /* istanbul ignore next */ []);
|
|
34045
|
+
this.monthRows = computed(() => {
|
|
34046
|
+
const max = this.maxVisible();
|
|
34047
|
+
const cells = this.monthCells().map((day) => {
|
|
34048
|
+
const items = this.byDate()[day.dateStr] ?? [];
|
|
34049
|
+
return {
|
|
34050
|
+
day,
|
|
34051
|
+
items,
|
|
34052
|
+
visible: items.slice(0, max),
|
|
34053
|
+
overflow: Math.max(0, items.length - max),
|
|
34054
|
+
clickable: this.clickable(day.dateStr),
|
|
34055
|
+
label: this.dayAriaLabel(day.dateStr, items)
|
|
34056
|
+
};
|
|
34057
|
+
});
|
|
34058
|
+
return Array.from({ length: 6 }, (_, r) => ({
|
|
34059
|
+
key: cells[r * 7].day.dateStr,
|
|
34060
|
+
cells: cells.slice(r * 7, r * 7 + 7)
|
|
34061
|
+
}));
|
|
34062
|
+
}, ...ngDevMode ? [{ debugName: "monthRows" }] : /* istanbul ignore next */ []);
|
|
34063
|
+
this.weekColumns = computed(() => {
|
|
34064
|
+
const startHour = this.startHour(), endHour = this.endHour();
|
|
34065
|
+
return this.weekDays().map((day) => {
|
|
34066
|
+
const items = this.byDate()[day.dateStr] ?? [];
|
|
34067
|
+
const boxes = items.filter((e) => !e.allDay && !!e.startTime).map((item) => ({
|
|
34068
|
+
item,
|
|
34069
|
+
...timedBox(item.startTime, item.endTime, startHour, endHour)
|
|
34070
|
+
}));
|
|
34071
|
+
const lanes = layoutLanes(boxes.map((b) => ({
|
|
34072
|
+
id: b.item.id,
|
|
34073
|
+
top: b.top,
|
|
34074
|
+
height: b.height
|
|
34075
|
+
})));
|
|
34076
|
+
return {
|
|
34077
|
+
day,
|
|
34078
|
+
label: formatDayLabel(day.dateStr),
|
|
34079
|
+
clickable: this.clickable(day.dateStr),
|
|
34080
|
+
allDay: items.filter((e) => e.allDay || !e.startTime),
|
|
34081
|
+
timed: boxes.map((b) => ({
|
|
34082
|
+
...b,
|
|
34083
|
+
lane: lanes[b.item.id]
|
|
34084
|
+
}))
|
|
34085
|
+
};
|
|
34086
|
+
});
|
|
34087
|
+
}, ...ngDevMode ? [{ debugName: "weekColumns" }] : /* istanbul ignore next */ []);
|
|
34088
|
+
this.focusDate = computed(() => {
|
|
34089
|
+
const cells = this.monthCells();
|
|
34090
|
+
const f = this.focusedDate();
|
|
34091
|
+
if (f && cells.some((c) => c.dateStr === f)) return f;
|
|
34092
|
+
return (cells.find((c) => c.isToday) ?? cells.find((c) => c.isCurrentMonth) ?? cells[0]).dateStr;
|
|
34093
|
+
}, ...ngDevMode ? [{ debugName: "focusDate" }] : /* istanbul ignore next */ []);
|
|
34094
|
+
effect(() => {
|
|
34095
|
+
const view = this.view();
|
|
34096
|
+
const views = this.views();
|
|
34097
|
+
if (views.length && !views.includes(view)) {
|
|
34098
|
+
untracked(() => this.view.set(views[0]));
|
|
34099
|
+
return;
|
|
34100
|
+
}
|
|
34101
|
+
const range = rangeFor(view, this.anchorDate(), this.todayStr());
|
|
34102
|
+
const key = `${range.view}|${range.start}|${range.end}`;
|
|
34103
|
+
if (key === this.lastRangeKey) return;
|
|
34104
|
+
this.lastRangeKey = key;
|
|
34105
|
+
untracked(() => this.rangeChange.emit(range));
|
|
34106
|
+
});
|
|
34107
|
+
const destroyRef = inject(DestroyRef);
|
|
34108
|
+
const zone = inject(NgZone);
|
|
34109
|
+
const doc = inject(DOCUMENT);
|
|
34110
|
+
let timer;
|
|
34111
|
+
const refreshToday = () => zone.run(() => this.todayStr.set(toDateStr(/* @__PURE__ */ new Date())));
|
|
34112
|
+
const schedule = () => {
|
|
34113
|
+
const now = /* @__PURE__ */ new Date();
|
|
34114
|
+
const next = new Date(now.getFullYear(), now.getMonth(), now.getDate() + 1, 0, 0, 1);
|
|
34115
|
+
timer = setTimeout(() => {
|
|
34116
|
+
refreshToday();
|
|
34117
|
+
schedule();
|
|
34118
|
+
}, next.getTime() - now.getTime());
|
|
34119
|
+
};
|
|
34120
|
+
const onVisible = () => {
|
|
34121
|
+
if (doc.visibilityState === "visible") refreshToday();
|
|
34122
|
+
};
|
|
34123
|
+
if (!isPlatformBrowser(inject(PLATFORM_ID))) return;
|
|
34124
|
+
zone.runOutsideAngular(() => {
|
|
34125
|
+
schedule();
|
|
34126
|
+
doc.addEventListener("visibilitychange", onVisible);
|
|
34127
|
+
});
|
|
34128
|
+
destroyRef.onDestroy(() => {
|
|
34129
|
+
clearTimeout(timer);
|
|
34130
|
+
doc.removeEventListener("visibilitychange", onVisible);
|
|
34131
|
+
});
|
|
34132
|
+
}
|
|
34133
|
+
isFilterActive(value) {
|
|
34134
|
+
return this.activeFilters().includes(value);
|
|
34135
|
+
}
|
|
34136
|
+
toggleFilter(value) {
|
|
34137
|
+
const active = this.activeFilters();
|
|
34138
|
+
if (this.filterMode() === "single") {
|
|
34139
|
+
this.activeFilters.set(active.includes(value) ? [] : [value]);
|
|
34140
|
+
return;
|
|
34141
|
+
}
|
|
34142
|
+
this.activeFilters.set(active.includes(value) ? active.filter((v) => v !== value) : [...active, value]);
|
|
34143
|
+
}
|
|
34144
|
+
clearFilters() {
|
|
34145
|
+
this.activeFilters.set([]);
|
|
34146
|
+
}
|
|
34147
|
+
setView(v) {
|
|
34148
|
+
this.view.set(v);
|
|
34149
|
+
}
|
|
34150
|
+
navigate(direction) {
|
|
34151
|
+
this.focusedDate.set(null);
|
|
34152
|
+
this.anchorDate.set(shiftAnchor(this.view(), this.anchorDate(), direction));
|
|
34153
|
+
}
|
|
34154
|
+
goToday() {
|
|
34155
|
+
this.focusedDate.set(null);
|
|
34156
|
+
this.todayStr.set(toDateStr(/* @__PURE__ */ new Date()));
|
|
34157
|
+
this.anchorDate.set(/* @__PURE__ */ new Date());
|
|
34158
|
+
}
|
|
34159
|
+
dowLabel(dateStr) {
|
|
34160
|
+
return WEEK_DAY_LABELS[fromDateStr(dateStr).getDay()];
|
|
34161
|
+
}
|
|
34162
|
+
agendaDow(dateStr) {
|
|
34163
|
+
return fromDateStr(dateStr).toLocaleDateString("en-US", { weekday: "short" }).toUpperCase();
|
|
34164
|
+
}
|
|
34165
|
+
agendaDate(dateStr) {
|
|
34166
|
+
return fromDateStr(dateStr).toLocaleDateString("en-US", {
|
|
34167
|
+
month: "short",
|
|
34168
|
+
day: "numeric"
|
|
34169
|
+
});
|
|
34170
|
+
}
|
|
34171
|
+
chipTime(e) {
|
|
34172
|
+
if (e.timeLabel) return e.timeLabel;
|
|
34173
|
+
return e.startTime && !e.allDay ? formatTime$1(e.startTime) : "";
|
|
34174
|
+
}
|
|
34175
|
+
timeRange(e) {
|
|
34176
|
+
return e.startTime ? formatTime$1(e.startTime) + (e.endTime ? ` – ${formatTime$1(e.endTime)}` : "") : "";
|
|
34177
|
+
}
|
|
34178
|
+
itemLabel(e) {
|
|
34179
|
+
return e.ariaLabel || [this.chipTime(e), e.title].filter(Boolean).join(" ");
|
|
34180
|
+
}
|
|
34181
|
+
agendaMeta(e) {
|
|
34182
|
+
return [e.timeLabel ?? (!e.allDay && e.startTime ? this.timeRange(e) : ""), ...e.meta ?? []].filter(Boolean);
|
|
34183
|
+
}
|
|
34184
|
+
dayAriaLabel(dateStr, items) {
|
|
34185
|
+
const fn = this.dayLabelFn();
|
|
34186
|
+
if (fn) return fn(dateStr, items);
|
|
34187
|
+
const label = formatDayLabel(dateStr);
|
|
34188
|
+
return items.length ? `${label}, ${items.length} ${items.length === 1 ? "event" : "events"}` : label;
|
|
34189
|
+
}
|
|
34190
|
+
onDateClick(dateStr) {
|
|
34191
|
+
if (this.clickable(dateStr)) this.dateClick.emit(dateStr);
|
|
34192
|
+
}
|
|
34193
|
+
onCellKey(event, dateStr) {
|
|
34194
|
+
if (event.target !== event.currentTarget || event.altKey || event.ctrlKey || event.metaKey) return;
|
|
34195
|
+
if (event.key === "Enter" || event.key === " ") {
|
|
34196
|
+
event.preventDefault();
|
|
34197
|
+
this.onDateClick(dateStr);
|
|
34198
|
+
return;
|
|
34199
|
+
}
|
|
34200
|
+
const d = fromDateStr(dateStr);
|
|
34201
|
+
const step = {
|
|
34202
|
+
ArrowLeft: -1,
|
|
34203
|
+
ArrowRight: 1,
|
|
34204
|
+
ArrowUp: -7,
|
|
34205
|
+
ArrowDown: 7,
|
|
34206
|
+
Home: -d.getDay(),
|
|
34207
|
+
End: 6 - d.getDay()
|
|
34208
|
+
};
|
|
34209
|
+
if (!(event.key in step)) return;
|
|
34210
|
+
event.preventDefault();
|
|
34211
|
+
const target = toDateStr(new Date(d.getFullYear(), d.getMonth(), d.getDate() + step[event.key]));
|
|
34212
|
+
if (!this.monthCells().some((c) => c.dateStr === target)) return;
|
|
34213
|
+
this.focusedDate.set(target);
|
|
34214
|
+
this.host.nativeElement.querySelector(`.month-cell[data-date="${target}"]`)?.focus();
|
|
34215
|
+
}
|
|
34216
|
+
onAddAllDay(dateStr, event) {
|
|
34217
|
+
event.stopPropagation();
|
|
34218
|
+
this.onDateClick(dateStr);
|
|
34219
|
+
}
|
|
34220
|
+
onAddTimed(dateStr, event) {
|
|
34221
|
+
event.stopPropagation();
|
|
34222
|
+
if (this.clickable(dateStr)) this.slotClick.emit({
|
|
34223
|
+
date: dateStr,
|
|
34224
|
+
time: `${String(this.startHour()).padStart(2, "0")}:00`
|
|
34225
|
+
});
|
|
34226
|
+
}
|
|
34227
|
+
onSlotClick(dateStr, event) {
|
|
34228
|
+
if (!this.clickable(dateStr)) return;
|
|
34229
|
+
const rect = event.currentTarget.getBoundingClientRect();
|
|
34230
|
+
const hour = Math.min(this.endHour(), Math.max(this.startHour(), this.startHour() + Math.floor((event.clientY - rect.top) / 60)));
|
|
34231
|
+
this.slotClick.emit({
|
|
34232
|
+
date: dateStr,
|
|
34233
|
+
time: `${String(hour).padStart(2, "0")}:00`
|
|
34234
|
+
});
|
|
34235
|
+
}
|
|
34236
|
+
onItemClick(item, event) {
|
|
34237
|
+
event.stopPropagation();
|
|
34238
|
+
this.itemClick.emit(item);
|
|
34239
|
+
}
|
|
34240
|
+
onMoreClick(dateStr, items, event) {
|
|
34241
|
+
event.stopPropagation();
|
|
34242
|
+
this.moreClick.emit({
|
|
34243
|
+
date: dateStr,
|
|
34244
|
+
items
|
|
34245
|
+
});
|
|
34246
|
+
}
|
|
34247
|
+
static {
|
|
34248
|
+
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
34249
|
+
minVersion: "12.0.0",
|
|
34250
|
+
version: "22.2.2",
|
|
34251
|
+
ngImport: i0,
|
|
34252
|
+
type: CalendarComponent,
|
|
34253
|
+
deps: [],
|
|
34254
|
+
target: i0.ɵɵFactoryTarget.Component
|
|
34255
|
+
});
|
|
34256
|
+
}
|
|
34257
|
+
static {
|
|
34258
|
+
this.ɵcmp = i0.ɵɵngDeclareComponent({
|
|
34259
|
+
minVersion: "17.0.0",
|
|
34260
|
+
version: "22.2.2",
|
|
34261
|
+
type: CalendarComponent,
|
|
34262
|
+
isStandalone: true,
|
|
34263
|
+
selector: "ui-calendar",
|
|
34264
|
+
inputs: {
|
|
34265
|
+
items: {
|
|
34266
|
+
classPropertyName: "items",
|
|
34267
|
+
publicName: "items",
|
|
34268
|
+
isSignal: true,
|
|
34269
|
+
isRequired: false,
|
|
34270
|
+
transformFunction: null
|
|
34271
|
+
},
|
|
34272
|
+
loading: {
|
|
34273
|
+
classPropertyName: "loading",
|
|
34274
|
+
publicName: "loading",
|
|
34275
|
+
isSignal: true,
|
|
34276
|
+
isRequired: false,
|
|
34277
|
+
transformFunction: null
|
|
34278
|
+
},
|
|
34279
|
+
view: {
|
|
34280
|
+
classPropertyName: "view",
|
|
34281
|
+
publicName: "view",
|
|
34282
|
+
isSignal: true,
|
|
34283
|
+
isRequired: false,
|
|
34284
|
+
transformFunction: null
|
|
34285
|
+
},
|
|
34286
|
+
views: {
|
|
34287
|
+
classPropertyName: "views",
|
|
34288
|
+
publicName: "views",
|
|
34289
|
+
isSignal: true,
|
|
34290
|
+
isRequired: false,
|
|
34291
|
+
transformFunction: null
|
|
34292
|
+
},
|
|
34293
|
+
anchorDate: {
|
|
34294
|
+
classPropertyName: "anchorDate",
|
|
34295
|
+
publicName: "anchorDate",
|
|
34296
|
+
isSignal: true,
|
|
34297
|
+
isRequired: false,
|
|
34298
|
+
transformFunction: null
|
|
34299
|
+
},
|
|
34300
|
+
filters: {
|
|
34301
|
+
classPropertyName: "filters",
|
|
34302
|
+
publicName: "filters",
|
|
34303
|
+
isSignal: true,
|
|
34304
|
+
isRequired: false,
|
|
34305
|
+
transformFunction: null
|
|
34306
|
+
},
|
|
34307
|
+
filterLabel: {
|
|
34308
|
+
classPropertyName: "filterLabel",
|
|
34309
|
+
publicName: "filterLabel",
|
|
34310
|
+
isSignal: true,
|
|
34311
|
+
isRequired: false,
|
|
34312
|
+
transformFunction: null
|
|
34313
|
+
},
|
|
34314
|
+
filterMode: {
|
|
34315
|
+
classPropertyName: "filterMode",
|
|
34316
|
+
publicName: "filterMode",
|
|
34317
|
+
isSignal: true,
|
|
34318
|
+
isRequired: false,
|
|
34319
|
+
transformFunction: null
|
|
34320
|
+
},
|
|
34321
|
+
activeFilters: {
|
|
34322
|
+
classPropertyName: "activeFilters",
|
|
34323
|
+
publicName: "activeFilters",
|
|
34324
|
+
isSignal: true,
|
|
34325
|
+
isRequired: false,
|
|
34326
|
+
transformFunction: null
|
|
34327
|
+
},
|
|
34328
|
+
showFilterCounts: {
|
|
34329
|
+
classPropertyName: "showFilterCounts",
|
|
34330
|
+
publicName: "showFilterCounts",
|
|
34331
|
+
isSignal: true,
|
|
34332
|
+
isRequired: false,
|
|
34333
|
+
transformFunction: null
|
|
34334
|
+
},
|
|
34335
|
+
canCreate: {
|
|
34336
|
+
classPropertyName: "canCreate",
|
|
34337
|
+
publicName: "canCreate",
|
|
34338
|
+
isSignal: true,
|
|
34339
|
+
isRequired: false,
|
|
34340
|
+
transformFunction: null
|
|
34341
|
+
},
|
|
34342
|
+
disablePast: {
|
|
34343
|
+
classPropertyName: "disablePast",
|
|
34344
|
+
publicName: "disablePast",
|
|
34345
|
+
isSignal: true,
|
|
34346
|
+
isRequired: false,
|
|
34347
|
+
transformFunction: null
|
|
34348
|
+
},
|
|
34349
|
+
maxVisible: {
|
|
34350
|
+
classPropertyName: "maxVisible",
|
|
34351
|
+
publicName: "maxVisible",
|
|
34352
|
+
isSignal: true,
|
|
34353
|
+
isRequired: false,
|
|
34354
|
+
transformFunction: null
|
|
34355
|
+
},
|
|
34356
|
+
chipLayout: {
|
|
34357
|
+
classPropertyName: "chipLayout",
|
|
34358
|
+
publicName: "chipLayout",
|
|
34359
|
+
isSignal: true,
|
|
34360
|
+
isRequired: false,
|
|
34361
|
+
transformFunction: null
|
|
34362
|
+
},
|
|
34363
|
+
sortByTime: {
|
|
34364
|
+
classPropertyName: "sortByTime",
|
|
34365
|
+
publicName: "sortByTime",
|
|
34366
|
+
isSignal: true,
|
|
34367
|
+
isRequired: false,
|
|
34368
|
+
transformFunction: null
|
|
34369
|
+
},
|
|
34370
|
+
startHour: {
|
|
34371
|
+
classPropertyName: "startHour",
|
|
34372
|
+
publicName: "startHour",
|
|
34373
|
+
isSignal: true,
|
|
34374
|
+
isRequired: false,
|
|
34375
|
+
transformFunction: null
|
|
34376
|
+
},
|
|
34377
|
+
endHour: {
|
|
34378
|
+
classPropertyName: "endHour",
|
|
34379
|
+
publicName: "endHour",
|
|
34380
|
+
isSignal: true,
|
|
34381
|
+
isRequired: false,
|
|
34382
|
+
transformFunction: null
|
|
34383
|
+
},
|
|
34384
|
+
emptyMessage: {
|
|
34385
|
+
classPropertyName: "emptyMessage",
|
|
34386
|
+
publicName: "emptyMessage",
|
|
34387
|
+
isSignal: true,
|
|
34388
|
+
isRequired: false,
|
|
34389
|
+
transformFunction: null
|
|
34390
|
+
},
|
|
34391
|
+
dayLabelFn: {
|
|
34392
|
+
classPropertyName: "dayLabelFn",
|
|
34393
|
+
publicName: "dayLabelFn",
|
|
34394
|
+
isSignal: true,
|
|
34395
|
+
isRequired: false,
|
|
34396
|
+
transformFunction: null
|
|
34397
|
+
}
|
|
34398
|
+
},
|
|
34399
|
+
outputs: {
|
|
34400
|
+
view: "viewChange",
|
|
34401
|
+
anchorDate: "anchorDateChange",
|
|
34402
|
+
activeFilters: "activeFiltersChange",
|
|
34403
|
+
rangeChange: "rangeChange",
|
|
34404
|
+
itemClick: "itemClick",
|
|
34405
|
+
dateClick: "dateClick",
|
|
34406
|
+
slotClick: "slotClick",
|
|
34407
|
+
moreClick: "moreClick"
|
|
34408
|
+
},
|
|
34409
|
+
ngImport: i0,
|
|
34410
|
+
template: `
|
|
34411
|
+
<div class="cal-toolbar">
|
|
34412
|
+
<div class="toolbar-left">
|
|
34413
|
+
<h2 class="period-label" aria-live="polite" aria-atomic="true">{{ periodLabel() }}</h2>
|
|
34414
|
+
<div class="nav-controls">
|
|
34415
|
+
<button type="button" class="btn-nav" (click)="navigate(-1)" aria-label="Previous">
|
|
34416
|
+
<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>
|
|
34417
|
+
</button>
|
|
34418
|
+
<button type="button" class="btn-today" (click)="goToday()">Today</button>
|
|
34419
|
+
<button type="button" class="btn-nav" (click)="navigate(1)" aria-label="Next">
|
|
34420
|
+
<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>
|
|
34421
|
+
</button>
|
|
34422
|
+
</div>
|
|
34423
|
+
</div>
|
|
34424
|
+
<div class="toolbar-center"><ng-content select="[calendar-summary]" /></div>
|
|
34425
|
+
<div class="toolbar-right">
|
|
34426
|
+
@if (viewTabs().length > 1) {
|
|
34427
|
+
<ui-pill-tabs ariaLabel="Calendar view" name="ui-calendar-view" [tabs]="viewTabs()" [activeKey]="view()" (tabChange)="setView($any($event))" />
|
|
34428
|
+
}
|
|
34429
|
+
<ng-content select="[calendar-actions]" />
|
|
34430
|
+
</div>
|
|
34431
|
+
</div>
|
|
34432
|
+
|
|
34433
|
+
@if (!loading()) {
|
|
34434
|
+
<div class="mobile-summary"><ng-content select="[calendar-summary-mobile]" /></div>
|
|
34435
|
+
}
|
|
34436
|
+
|
|
34437
|
+
@if (filters().length && !loading()) {
|
|
34438
|
+
<div class="filter-bar">
|
|
34439
|
+
@if (filterLabel()) { <div class="filter-bar-label">{{ filterLabel() }}</div> }
|
|
34440
|
+
<div class="filter-chips" role="group" [attr.aria-label]="filterLabel() || 'Filter'">
|
|
34441
|
+
<button type="button" class="filter-chip" [class.active-all]="!activeFilters().length" [attr.aria-pressed]="!activeFilters().length" (click)="clearFilters()">
|
|
34442
|
+
All
|
|
34443
|
+
@if (showFilterCounts()) { <span class="chip-count">{{ items().length }}</span> }
|
|
34444
|
+
</button>
|
|
34445
|
+
@for (f of filters(); track f.value) {
|
|
34446
|
+
<button type="button" class="filter-chip"
|
|
34447
|
+
[class.active-type]="isFilterActive(f.value)"
|
|
34448
|
+
[attr.aria-pressed]="isFilterActive(f.value)"
|
|
34449
|
+
[style.--chip-color]="f.color"
|
|
34450
|
+
[style.--chip-bg]="f.bgColor ?? null"
|
|
34451
|
+
(click)="toggleFilter(f.value)">
|
|
34452
|
+
<span class="chip-dot" [style.background]="f.color" aria-hidden="true"></span>
|
|
34453
|
+
{{ f.label }}
|
|
34454
|
+
@if (showFilterCounts()) { <span class="chip-count">{{ typeCounts()[f.value] ?? 0 }}</span> }
|
|
34455
|
+
</button>
|
|
34456
|
+
}
|
|
34457
|
+
</div>
|
|
34458
|
+
</div>
|
|
34459
|
+
}
|
|
34460
|
+
|
|
34461
|
+
@if (loading()) {
|
|
34462
|
+
<div class="cal-skeleton" aria-busy="true" aria-label="Loading calendar" role="status">
|
|
34463
|
+
<div class="skel-dow-row">
|
|
34464
|
+
@for (d of weekDayLabels; track d) { <div class="skel-dow"><ui-skeleton [height]="16" width="36px" [radius]="4" /></div> }
|
|
34465
|
+
</div>
|
|
34466
|
+
<div class="skel-month-grid">
|
|
34467
|
+
@for (i of skeletonCells; track i) {
|
|
34468
|
+
<div class="skel-cell">
|
|
34469
|
+
<ui-skeleton [height]="22" width="22px" [radius]="11" />
|
|
34470
|
+
@if (i % 3 === 0) { <ui-skeleton [height]="14" [radius]="3" /> }
|
|
34471
|
+
@if (i % 5 === 0) { <ui-skeleton [height]="14" width="72%" [radius]="3" /> }
|
|
34472
|
+
</div>
|
|
34473
|
+
}
|
|
34474
|
+
</div>
|
|
34475
|
+
</div>
|
|
34476
|
+
} @else {
|
|
34477
|
+
@switch (view()) {
|
|
34478
|
+
@case ('month') {
|
|
34479
|
+
<div class="month-view">
|
|
34480
|
+
<div class="month-grid" role="grid" [attr.aria-label]="periodLabel()">
|
|
34481
|
+
<div class="month-header" role="row">
|
|
34482
|
+
@for (d of weekDayLabels; track d; let i = $index) {
|
|
34483
|
+
<div class="month-dow" role="columnheader" [attr.aria-label]="weekDayNames[i]">
|
|
34484
|
+
<span class="dow-full" aria-hidden="true">{{ d }}</span><span class="dow-short" aria-hidden="true">{{ d.slice(0, 2) }}</span>
|
|
34485
|
+
</div>
|
|
34486
|
+
}
|
|
34487
|
+
</div>
|
|
34488
|
+
@for (row of monthRows(); track row.key) {
|
|
34489
|
+
<div class="month-row" role="row">
|
|
34490
|
+
@for (c of row.cells; track c.day.dateStr) {
|
|
34491
|
+
<div class="month-cell" role="gridcell"
|
|
34492
|
+
[attr.data-date]="c.day.dateStr"
|
|
34493
|
+
[class.other-month]="!c.day.isCurrentMonth" [class.today]="c.day.isToday" [class.weekend]="c.day.isWeekend"
|
|
34494
|
+
[class.clickable]="c.clickable"
|
|
34495
|
+
[attr.tabindex]="c.day.dateStr === focusDate() ? 0 : -1"
|
|
34496
|
+
[attr.aria-label]="c.label"
|
|
34497
|
+
[attr.aria-current]="c.day.isToday ? 'date' : null"
|
|
34498
|
+
(click)="onDateClick(c.day.dateStr)"
|
|
34499
|
+
(focus)="focusedDate.set(c.day.dateStr)"
|
|
34500
|
+
(keydown)="onCellKey($event, c.day.dateStr)">
|
|
34501
|
+
<span class="day-num" [class.today-badge]="c.day.isToday">{{ c.day.dayNum }}</span>
|
|
34502
|
+
<div class="cell-events">
|
|
34503
|
+
@for (e of c.visible; track e.id) {
|
|
34504
|
+
<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"
|
|
34505
|
+
[attr.aria-label]="itemLabel(e)" [title]="e.title"
|
|
34506
|
+
(click)="onItemClick(e, $event)">
|
|
34507
|
+
<span class="chip-head">
|
|
34508
|
+
@if (e.iconPath) {
|
|
34509
|
+
<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>
|
|
34510
|
+
}
|
|
34511
|
+
@if (chipTime(e); as t) { <span class="chip-time">{{ t }}</span> }
|
|
34512
|
+
</span>
|
|
34513
|
+
<span class="chip-title" [class.strike]="e.strike">{{ e.title }}</span>
|
|
34514
|
+
@if (e.tag) { <span class="chip-src">{{ e.tag }}</span> }
|
|
34515
|
+
</button>
|
|
34516
|
+
}
|
|
34517
|
+
@if (c.overflow > 0) {
|
|
34518
|
+
<button type="button" class="more-events" (click)="onMoreClick(c.day.dateStr, c.items, $event)">+{{ c.overflow }} more</button>
|
|
34519
|
+
}
|
|
34520
|
+
</div>
|
|
34521
|
+
</div>
|
|
34522
|
+
}
|
|
34523
|
+
</div>
|
|
34524
|
+
}
|
|
34525
|
+
</div>
|
|
34526
|
+
</div>
|
|
34527
|
+
}
|
|
34528
|
+
@case ('week') {
|
|
34529
|
+
<div class="week-view">
|
|
34530
|
+
<div class="week-header">
|
|
34531
|
+
<div class="time-gutter"></div>
|
|
34532
|
+
@for (col of weekColumns(); track col.day.dateStr) {
|
|
34533
|
+
<div class="week-day-hdr" [class.today]="col.day.isToday">
|
|
34534
|
+
<span class="wdh-dow">{{ dowLabel(col.day.dateStr) }}</span>
|
|
34535
|
+
<span class="wdh-num" [class.today-badge]="col.day.isToday">{{ col.day.dayNum }}</span>
|
|
34536
|
+
</div>
|
|
34537
|
+
}
|
|
34538
|
+
</div>
|
|
34539
|
+
<div class="allday-row">
|
|
34540
|
+
<div class="time-gutter allday-label">All day</div>
|
|
34541
|
+
@for (col of weekColumns(); track col.day.dateStr) {
|
|
34542
|
+
<div class="allday-cell" [class.clickable]="col.clickable" (click)="onDateClick(col.day.dateStr)">
|
|
34543
|
+
@if (col.clickable) {
|
|
34544
|
+
<button type="button" class="slot-add" [attr.aria-label]="'Add all-day event on ' + col.label" (click)="onAddAllDay(col.day.dateStr, $event)">+ Add</button>
|
|
34545
|
+
}
|
|
34546
|
+
@for (e of col.allDay; track e.id) {
|
|
34547
|
+
<button type="button" class="allday-chip" [style.background]="e.bgColor" [style.borderLeftColor]="e.color"
|
|
34548
|
+
[attr.aria-label]="itemLabel(e)" (click)="onItemClick(e, $event)">{{ e.title }}</button>
|
|
34549
|
+
}
|
|
34550
|
+
</div>
|
|
34551
|
+
}
|
|
34552
|
+
</div>
|
|
34553
|
+
<div class="week-body">
|
|
34554
|
+
<div class="time-col">
|
|
34555
|
+
@for (h of hours(); track h) { <div class="time-slot-label">{{ formatHour(h) }}</div> }
|
|
34556
|
+
</div>
|
|
34557
|
+
@for (col of weekColumns(); track col.day.dateStr) {
|
|
34558
|
+
<div class="day-col" [class.today]="col.day.isToday" [class.clickable]="col.clickable" (click)="onSlotClick(col.day.dateStr, $event)">
|
|
34559
|
+
@if (col.clickable) {
|
|
34560
|
+
<button type="button" class="slot-add" [attr.aria-label]="'Add event on ' + col.label" (click)="onAddTimed(col.day.dateStr, $event)">+ Add</button>
|
|
34561
|
+
}
|
|
34562
|
+
@for (h of hours(); track h) { <div class="time-slot"></div> }
|
|
34563
|
+
@for (t of col.timed; track t.item.id) {
|
|
34564
|
+
<button type="button" class="timed-event"
|
|
34565
|
+
[style.top.px]="t.top" [style.height.px]="t.height"
|
|
34566
|
+
[style.left]="'calc(' + (t.lane.lane / t.lane.lanes * 100) + '% + 2px)'"
|
|
34567
|
+
[style.width]="'calc(' + (100 / t.lane.lanes) + '% - 4px)'"
|
|
34568
|
+
[style.background]="t.item.bgColor" [style.borderLeftColor]="t.item.color"
|
|
34569
|
+
[attr.aria-label]="itemLabel(t.item)" (click)="onItemClick(t.item, $event)">
|
|
34570
|
+
<span class="te-title" [class.strike]="t.item.strike">{{ t.item.title }}</span>
|
|
34571
|
+
@if (t.item.startTime) { <span class="te-time">{{ t.item.timeLabel || timeRange(t.item) }}</span> }
|
|
34572
|
+
</button>
|
|
34573
|
+
}
|
|
34574
|
+
</div>
|
|
34575
|
+
}
|
|
34576
|
+
</div>
|
|
34577
|
+
</div>
|
|
34578
|
+
}
|
|
34579
|
+
@case ('agenda') {
|
|
34580
|
+
<div class="agenda-view">
|
|
34581
|
+
@if (agendaGroups().length === 0) {
|
|
34582
|
+
<ui-empty-state iconType="task" [message]="emptyMessage()" />
|
|
34583
|
+
}
|
|
34584
|
+
@for (group of agendaGroups(); track group.dateStr) {
|
|
34585
|
+
<div class="agenda-group">
|
|
34586
|
+
<div class="agenda-date-hdr">
|
|
34587
|
+
<span class="ag-dow">{{ agendaDow(group.dateStr) }}</span>
|
|
34588
|
+
<span class="ag-date">{{ agendaDate(group.dateStr) }}</span>
|
|
34589
|
+
@if (group.dateStr === todayStr()) { <ui-badge label="Today" variant="blue" /> }
|
|
34590
|
+
</div>
|
|
34591
|
+
<div class="agenda-events">
|
|
34592
|
+
@for (e of group.items; track e.id) {
|
|
34593
|
+
<button type="button" class="agenda-event" [attr.aria-label]="e.ariaLabel || null" (click)="onItemClick(e, $event)">
|
|
34594
|
+
<span class="ae-color-bar" [style.background]="e.color"></span>
|
|
34595
|
+
<span class="ae-body">
|
|
34596
|
+
<span class="ae-top">
|
|
34597
|
+
<span class="ae-title" [class.strike]="e.strike">{{ e.title }}</span>
|
|
34598
|
+
@for (b of e.badges ?? []; track b.label) { <ui-badge [label]="b.label" [variant]="b.variant" /> }
|
|
34599
|
+
</span>
|
|
34600
|
+
@if (agendaMeta(e).length) {
|
|
34601
|
+
<span class="ae-meta">
|
|
34602
|
+
@for (m of agendaMeta(e); track $index) { <span class="ae-meta-item">{{ m }}</span> }
|
|
34603
|
+
</span>
|
|
34604
|
+
}
|
|
34605
|
+
</span>
|
|
34606
|
+
</button>
|
|
34607
|
+
}
|
|
34608
|
+
</div>
|
|
34609
|
+
</div>
|
|
34610
|
+
}
|
|
34611
|
+
</div>
|
|
34612
|
+
}
|
|
34613
|
+
}
|
|
34614
|
+
}
|
|
34615
|
+
<ui-toast />
|
|
34616
|
+
`,
|
|
34617
|
+
isInline: true,
|
|
34618
|
+
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"],
|
|
34619
|
+
dependencies: [
|
|
34620
|
+
{
|
|
34621
|
+
kind: "component",
|
|
34622
|
+
type: BadgeComponent,
|
|
34623
|
+
selector: "ui-badge",
|
|
34624
|
+
inputs: ["label", "variant"]
|
|
34625
|
+
},
|
|
34626
|
+
{
|
|
34627
|
+
kind: "component",
|
|
34628
|
+
type: EmptyStateComponent,
|
|
34629
|
+
selector: "ui-empty-state",
|
|
34630
|
+
inputs: [
|
|
34631
|
+
"message",
|
|
34632
|
+
"title",
|
|
34633
|
+
"iconType"
|
|
34634
|
+
]
|
|
34635
|
+
},
|
|
34636
|
+
{
|
|
34637
|
+
kind: "component",
|
|
34638
|
+
type: PillTabsComponent,
|
|
34639
|
+
selector: "ui-pill-tabs",
|
|
34640
|
+
inputs: [
|
|
34641
|
+
"tabs",
|
|
34642
|
+
"activeKey",
|
|
34643
|
+
"ariaLabel",
|
|
34644
|
+
"name"
|
|
34645
|
+
],
|
|
34646
|
+
outputs: ["tabChange"]
|
|
34647
|
+
},
|
|
34648
|
+
{
|
|
34649
|
+
kind: "component",
|
|
34650
|
+
type: SkeletonComponent,
|
|
34651
|
+
selector: "ui-skeleton",
|
|
34652
|
+
inputs: [
|
|
34653
|
+
"height",
|
|
34654
|
+
"width",
|
|
34655
|
+
"radius",
|
|
34656
|
+
"mb",
|
|
34657
|
+
"ariaLabel"
|
|
34658
|
+
]
|
|
34659
|
+
},
|
|
34660
|
+
{
|
|
34661
|
+
kind: "component",
|
|
34662
|
+
type: ToastComponent,
|
|
34663
|
+
selector: "ui-toast",
|
|
34664
|
+
inputs: ["dismissible", "persistentLiveRegion"]
|
|
34665
|
+
}
|
|
34666
|
+
],
|
|
34667
|
+
changeDetection: i0.ChangeDetectionStrategy.OnPush
|
|
34668
|
+
});
|
|
34669
|
+
}
|
|
34670
|
+
};
|
|
34671
|
+
i0.ɵɵngDeclareClassMetadata({
|
|
34672
|
+
minVersion: "12.0.0",
|
|
34673
|
+
version: "22.2.2",
|
|
34674
|
+
ngImport: i0,
|
|
34675
|
+
type: CalendarComponent,
|
|
34676
|
+
decorators: [{
|
|
34677
|
+
type: Component,
|
|
34678
|
+
args: [{
|
|
34679
|
+
selector: "ui-calendar",
|
|
34680
|
+
standalone: true,
|
|
34681
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
34682
|
+
imports: [
|
|
34683
|
+
BadgeComponent,
|
|
34684
|
+
EmptyStateComponent,
|
|
34685
|
+
PillTabsComponent,
|
|
34686
|
+
SkeletonComponent,
|
|
34687
|
+
ToastComponent
|
|
34688
|
+
],
|
|
34689
|
+
template: `
|
|
34690
|
+
<div class="cal-toolbar">
|
|
34691
|
+
<div class="toolbar-left">
|
|
34692
|
+
<h2 class="period-label" aria-live="polite" aria-atomic="true">{{ periodLabel() }}</h2>
|
|
34693
|
+
<div class="nav-controls">
|
|
34694
|
+
<button type="button" class="btn-nav" (click)="navigate(-1)" aria-label="Previous">
|
|
34695
|
+
<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>
|
|
34696
|
+
</button>
|
|
34697
|
+
<button type="button" class="btn-today" (click)="goToday()">Today</button>
|
|
34698
|
+
<button type="button" class="btn-nav" (click)="navigate(1)" aria-label="Next">
|
|
34699
|
+
<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>
|
|
34700
|
+
</button>
|
|
34701
|
+
</div>
|
|
34702
|
+
</div>
|
|
34703
|
+
<div class="toolbar-center"><ng-content select="[calendar-summary]" /></div>
|
|
34704
|
+
<div class="toolbar-right">
|
|
34705
|
+
@if (viewTabs().length > 1) {
|
|
34706
|
+
<ui-pill-tabs ariaLabel="Calendar view" name="ui-calendar-view" [tabs]="viewTabs()" [activeKey]="view()" (tabChange)="setView($any($event))" />
|
|
34707
|
+
}
|
|
34708
|
+
<ng-content select="[calendar-actions]" />
|
|
34709
|
+
</div>
|
|
34710
|
+
</div>
|
|
34711
|
+
|
|
34712
|
+
@if (!loading()) {
|
|
34713
|
+
<div class="mobile-summary"><ng-content select="[calendar-summary-mobile]" /></div>
|
|
34714
|
+
}
|
|
34715
|
+
|
|
34716
|
+
@if (filters().length && !loading()) {
|
|
34717
|
+
<div class="filter-bar">
|
|
34718
|
+
@if (filterLabel()) { <div class="filter-bar-label">{{ filterLabel() }}</div> }
|
|
34719
|
+
<div class="filter-chips" role="group" [attr.aria-label]="filterLabel() || 'Filter'">
|
|
34720
|
+
<button type="button" class="filter-chip" [class.active-all]="!activeFilters().length" [attr.aria-pressed]="!activeFilters().length" (click)="clearFilters()">
|
|
34721
|
+
All
|
|
34722
|
+
@if (showFilterCounts()) { <span class="chip-count">{{ items().length }}</span> }
|
|
34723
|
+
</button>
|
|
34724
|
+
@for (f of filters(); track f.value) {
|
|
34725
|
+
<button type="button" class="filter-chip"
|
|
34726
|
+
[class.active-type]="isFilterActive(f.value)"
|
|
34727
|
+
[attr.aria-pressed]="isFilterActive(f.value)"
|
|
34728
|
+
[style.--chip-color]="f.color"
|
|
34729
|
+
[style.--chip-bg]="f.bgColor ?? null"
|
|
34730
|
+
(click)="toggleFilter(f.value)">
|
|
34731
|
+
<span class="chip-dot" [style.background]="f.color" aria-hidden="true"></span>
|
|
34732
|
+
{{ f.label }}
|
|
34733
|
+
@if (showFilterCounts()) { <span class="chip-count">{{ typeCounts()[f.value] ?? 0 }}</span> }
|
|
34734
|
+
</button>
|
|
34735
|
+
}
|
|
34736
|
+
</div>
|
|
34737
|
+
</div>
|
|
34738
|
+
}
|
|
34739
|
+
|
|
34740
|
+
@if (loading()) {
|
|
34741
|
+
<div class="cal-skeleton" aria-busy="true" aria-label="Loading calendar" role="status">
|
|
34742
|
+
<div class="skel-dow-row">
|
|
34743
|
+
@for (d of weekDayLabels; track d) { <div class="skel-dow"><ui-skeleton [height]="16" width="36px" [radius]="4" /></div> }
|
|
34744
|
+
</div>
|
|
34745
|
+
<div class="skel-month-grid">
|
|
34746
|
+
@for (i of skeletonCells; track i) {
|
|
34747
|
+
<div class="skel-cell">
|
|
34748
|
+
<ui-skeleton [height]="22" width="22px" [radius]="11" />
|
|
34749
|
+
@if (i % 3 === 0) { <ui-skeleton [height]="14" [radius]="3" /> }
|
|
34750
|
+
@if (i % 5 === 0) { <ui-skeleton [height]="14" width="72%" [radius]="3" /> }
|
|
34751
|
+
</div>
|
|
34752
|
+
}
|
|
34753
|
+
</div>
|
|
34754
|
+
</div>
|
|
34755
|
+
} @else {
|
|
34756
|
+
@switch (view()) {
|
|
34757
|
+
@case ('month') {
|
|
34758
|
+
<div class="month-view">
|
|
34759
|
+
<div class="month-grid" role="grid" [attr.aria-label]="periodLabel()">
|
|
34760
|
+
<div class="month-header" role="row">
|
|
34761
|
+
@for (d of weekDayLabels; track d; let i = $index) {
|
|
34762
|
+
<div class="month-dow" role="columnheader" [attr.aria-label]="weekDayNames[i]">
|
|
34763
|
+
<span class="dow-full" aria-hidden="true">{{ d }}</span><span class="dow-short" aria-hidden="true">{{ d.slice(0, 2) }}</span>
|
|
34764
|
+
</div>
|
|
34765
|
+
}
|
|
34766
|
+
</div>
|
|
34767
|
+
@for (row of monthRows(); track row.key) {
|
|
34768
|
+
<div class="month-row" role="row">
|
|
34769
|
+
@for (c of row.cells; track c.day.dateStr) {
|
|
34770
|
+
<div class="month-cell" role="gridcell"
|
|
34771
|
+
[attr.data-date]="c.day.dateStr"
|
|
34772
|
+
[class.other-month]="!c.day.isCurrentMonth" [class.today]="c.day.isToday" [class.weekend]="c.day.isWeekend"
|
|
34773
|
+
[class.clickable]="c.clickable"
|
|
34774
|
+
[attr.tabindex]="c.day.dateStr === focusDate() ? 0 : -1"
|
|
34775
|
+
[attr.aria-label]="c.label"
|
|
34776
|
+
[attr.aria-current]="c.day.isToday ? 'date' : null"
|
|
34777
|
+
(click)="onDateClick(c.day.dateStr)"
|
|
34778
|
+
(focus)="focusedDate.set(c.day.dateStr)"
|
|
34779
|
+
(keydown)="onCellKey($event, c.day.dateStr)">
|
|
34780
|
+
<span class="day-num" [class.today-badge]="c.day.isToday">{{ c.day.dayNum }}</span>
|
|
34781
|
+
<div class="cell-events">
|
|
34782
|
+
@for (e of c.visible; track e.id) {
|
|
34783
|
+
<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"
|
|
34784
|
+
[attr.aria-label]="itemLabel(e)" [title]="e.title"
|
|
34785
|
+
(click)="onItemClick(e, $event)">
|
|
34786
|
+
<span class="chip-head">
|
|
34787
|
+
@if (e.iconPath) {
|
|
34788
|
+
<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>
|
|
34789
|
+
}
|
|
34790
|
+
@if (chipTime(e); as t) { <span class="chip-time">{{ t }}</span> }
|
|
34791
|
+
</span>
|
|
34792
|
+
<span class="chip-title" [class.strike]="e.strike">{{ e.title }}</span>
|
|
34793
|
+
@if (e.tag) { <span class="chip-src">{{ e.tag }}</span> }
|
|
34794
|
+
</button>
|
|
34795
|
+
}
|
|
34796
|
+
@if (c.overflow > 0) {
|
|
34797
|
+
<button type="button" class="more-events" (click)="onMoreClick(c.day.dateStr, c.items, $event)">+{{ c.overflow }} more</button>
|
|
34798
|
+
}
|
|
34799
|
+
</div>
|
|
34800
|
+
</div>
|
|
34801
|
+
}
|
|
34802
|
+
</div>
|
|
34803
|
+
}
|
|
34804
|
+
</div>
|
|
34805
|
+
</div>
|
|
34806
|
+
}
|
|
34807
|
+
@case ('week') {
|
|
34808
|
+
<div class="week-view">
|
|
34809
|
+
<div class="week-header">
|
|
34810
|
+
<div class="time-gutter"></div>
|
|
34811
|
+
@for (col of weekColumns(); track col.day.dateStr) {
|
|
34812
|
+
<div class="week-day-hdr" [class.today]="col.day.isToday">
|
|
34813
|
+
<span class="wdh-dow">{{ dowLabel(col.day.dateStr) }}</span>
|
|
34814
|
+
<span class="wdh-num" [class.today-badge]="col.day.isToday">{{ col.day.dayNum }}</span>
|
|
34815
|
+
</div>
|
|
34816
|
+
}
|
|
34817
|
+
</div>
|
|
34818
|
+
<div class="allday-row">
|
|
34819
|
+
<div class="time-gutter allday-label">All day</div>
|
|
34820
|
+
@for (col of weekColumns(); track col.day.dateStr) {
|
|
34821
|
+
<div class="allday-cell" [class.clickable]="col.clickable" (click)="onDateClick(col.day.dateStr)">
|
|
34822
|
+
@if (col.clickable) {
|
|
34823
|
+
<button type="button" class="slot-add" [attr.aria-label]="'Add all-day event on ' + col.label" (click)="onAddAllDay(col.day.dateStr, $event)">+ Add</button>
|
|
34824
|
+
}
|
|
34825
|
+
@for (e of col.allDay; track e.id) {
|
|
34826
|
+
<button type="button" class="allday-chip" [style.background]="e.bgColor" [style.borderLeftColor]="e.color"
|
|
34827
|
+
[attr.aria-label]="itemLabel(e)" (click)="onItemClick(e, $event)">{{ e.title }}</button>
|
|
34828
|
+
}
|
|
34829
|
+
</div>
|
|
34830
|
+
}
|
|
34831
|
+
</div>
|
|
34832
|
+
<div class="week-body">
|
|
34833
|
+
<div class="time-col">
|
|
34834
|
+
@for (h of hours(); track h) { <div class="time-slot-label">{{ formatHour(h) }}</div> }
|
|
34835
|
+
</div>
|
|
34836
|
+
@for (col of weekColumns(); track col.day.dateStr) {
|
|
34837
|
+
<div class="day-col" [class.today]="col.day.isToday" [class.clickable]="col.clickable" (click)="onSlotClick(col.day.dateStr, $event)">
|
|
34838
|
+
@if (col.clickable) {
|
|
34839
|
+
<button type="button" class="slot-add" [attr.aria-label]="'Add event on ' + col.label" (click)="onAddTimed(col.day.dateStr, $event)">+ Add</button>
|
|
34840
|
+
}
|
|
34841
|
+
@for (h of hours(); track h) { <div class="time-slot"></div> }
|
|
34842
|
+
@for (t of col.timed; track t.item.id) {
|
|
34843
|
+
<button type="button" class="timed-event"
|
|
34844
|
+
[style.top.px]="t.top" [style.height.px]="t.height"
|
|
34845
|
+
[style.left]="'calc(' + (t.lane.lane / t.lane.lanes * 100) + '% + 2px)'"
|
|
34846
|
+
[style.width]="'calc(' + (100 / t.lane.lanes) + '% - 4px)'"
|
|
34847
|
+
[style.background]="t.item.bgColor" [style.borderLeftColor]="t.item.color"
|
|
34848
|
+
[attr.aria-label]="itemLabel(t.item)" (click)="onItemClick(t.item, $event)">
|
|
34849
|
+
<span class="te-title" [class.strike]="t.item.strike">{{ t.item.title }}</span>
|
|
34850
|
+
@if (t.item.startTime) { <span class="te-time">{{ t.item.timeLabel || timeRange(t.item) }}</span> }
|
|
34851
|
+
</button>
|
|
34852
|
+
}
|
|
34853
|
+
</div>
|
|
34854
|
+
}
|
|
34855
|
+
</div>
|
|
34856
|
+
</div>
|
|
34857
|
+
}
|
|
34858
|
+
@case ('agenda') {
|
|
34859
|
+
<div class="agenda-view">
|
|
34860
|
+
@if (agendaGroups().length === 0) {
|
|
34861
|
+
<ui-empty-state iconType="task" [message]="emptyMessage()" />
|
|
34862
|
+
}
|
|
34863
|
+
@for (group of agendaGroups(); track group.dateStr) {
|
|
34864
|
+
<div class="agenda-group">
|
|
34865
|
+
<div class="agenda-date-hdr">
|
|
34866
|
+
<span class="ag-dow">{{ agendaDow(group.dateStr) }}</span>
|
|
34867
|
+
<span class="ag-date">{{ agendaDate(group.dateStr) }}</span>
|
|
34868
|
+
@if (group.dateStr === todayStr()) { <ui-badge label="Today" variant="blue" /> }
|
|
34869
|
+
</div>
|
|
34870
|
+
<div class="agenda-events">
|
|
34871
|
+
@for (e of group.items; track e.id) {
|
|
34872
|
+
<button type="button" class="agenda-event" [attr.aria-label]="e.ariaLabel || null" (click)="onItemClick(e, $event)">
|
|
34873
|
+
<span class="ae-color-bar" [style.background]="e.color"></span>
|
|
34874
|
+
<span class="ae-body">
|
|
34875
|
+
<span class="ae-top">
|
|
34876
|
+
<span class="ae-title" [class.strike]="e.strike">{{ e.title }}</span>
|
|
34877
|
+
@for (b of e.badges ?? []; track b.label) { <ui-badge [label]="b.label" [variant]="b.variant" /> }
|
|
34878
|
+
</span>
|
|
34879
|
+
@if (agendaMeta(e).length) {
|
|
34880
|
+
<span class="ae-meta">
|
|
34881
|
+
@for (m of agendaMeta(e); track $index) { <span class="ae-meta-item">{{ m }}</span> }
|
|
34882
|
+
</span>
|
|
34883
|
+
}
|
|
34884
|
+
</span>
|
|
34885
|
+
</button>
|
|
34886
|
+
}
|
|
34887
|
+
</div>
|
|
34888
|
+
</div>
|
|
34889
|
+
}
|
|
34890
|
+
</div>
|
|
34891
|
+
}
|
|
34892
|
+
}
|
|
34893
|
+
}
|
|
34894
|
+
<ui-toast />
|
|
34895
|
+
`,
|
|
34896
|
+
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"]
|
|
34897
|
+
}]
|
|
34898
|
+
}],
|
|
34899
|
+
ctorParameters: () => [],
|
|
34900
|
+
propDecorators: {
|
|
34901
|
+
items: [{
|
|
34902
|
+
type: i0.Input,
|
|
34903
|
+
args: [{
|
|
34904
|
+
isSignal: true,
|
|
34905
|
+
alias: "items",
|
|
34906
|
+
required: false
|
|
34907
|
+
}]
|
|
34908
|
+
}],
|
|
34909
|
+
loading: [{
|
|
34910
|
+
type: i0.Input,
|
|
34911
|
+
args: [{
|
|
34912
|
+
isSignal: true,
|
|
34913
|
+
alias: "loading",
|
|
34914
|
+
required: false
|
|
34915
|
+
}]
|
|
34916
|
+
}],
|
|
34917
|
+
view: [{
|
|
34918
|
+
type: i0.Input,
|
|
34919
|
+
args: [{
|
|
34920
|
+
isSignal: true,
|
|
34921
|
+
alias: "view",
|
|
34922
|
+
required: false
|
|
34923
|
+
}]
|
|
34924
|
+
}, {
|
|
34925
|
+
type: i0.Output,
|
|
34926
|
+
args: ["viewChange"]
|
|
34927
|
+
}],
|
|
34928
|
+
views: [{
|
|
34929
|
+
type: i0.Input,
|
|
34930
|
+
args: [{
|
|
34931
|
+
isSignal: true,
|
|
34932
|
+
alias: "views",
|
|
34933
|
+
required: false
|
|
34934
|
+
}]
|
|
34935
|
+
}],
|
|
34936
|
+
anchorDate: [{
|
|
34937
|
+
type: i0.Input,
|
|
34938
|
+
args: [{
|
|
34939
|
+
isSignal: true,
|
|
34940
|
+
alias: "anchorDate",
|
|
34941
|
+
required: false
|
|
34942
|
+
}]
|
|
34943
|
+
}, {
|
|
34944
|
+
type: i0.Output,
|
|
34945
|
+
args: ["anchorDateChange"]
|
|
34946
|
+
}],
|
|
34947
|
+
filters: [{
|
|
34948
|
+
type: i0.Input,
|
|
34949
|
+
args: [{
|
|
34950
|
+
isSignal: true,
|
|
34951
|
+
alias: "filters",
|
|
34952
|
+
required: false
|
|
34953
|
+
}]
|
|
34954
|
+
}],
|
|
34955
|
+
filterLabel: [{
|
|
34956
|
+
type: i0.Input,
|
|
34957
|
+
args: [{
|
|
34958
|
+
isSignal: true,
|
|
34959
|
+
alias: "filterLabel",
|
|
34960
|
+
required: false
|
|
34961
|
+
}]
|
|
34962
|
+
}],
|
|
34963
|
+
filterMode: [{
|
|
34964
|
+
type: i0.Input,
|
|
34965
|
+
args: [{
|
|
34966
|
+
isSignal: true,
|
|
34967
|
+
alias: "filterMode",
|
|
34968
|
+
required: false
|
|
34969
|
+
}]
|
|
34970
|
+
}],
|
|
34971
|
+
activeFilters: [{
|
|
34972
|
+
type: i0.Input,
|
|
34973
|
+
args: [{
|
|
34974
|
+
isSignal: true,
|
|
34975
|
+
alias: "activeFilters",
|
|
34976
|
+
required: false
|
|
34977
|
+
}]
|
|
34978
|
+
}, {
|
|
34979
|
+
type: i0.Output,
|
|
34980
|
+
args: ["activeFiltersChange"]
|
|
34981
|
+
}],
|
|
34982
|
+
showFilterCounts: [{
|
|
34983
|
+
type: i0.Input,
|
|
34984
|
+
args: [{
|
|
34985
|
+
isSignal: true,
|
|
34986
|
+
alias: "showFilterCounts",
|
|
34987
|
+
required: false
|
|
34988
|
+
}]
|
|
34989
|
+
}],
|
|
34990
|
+
canCreate: [{
|
|
34991
|
+
type: i0.Input,
|
|
34992
|
+
args: [{
|
|
34993
|
+
isSignal: true,
|
|
34994
|
+
alias: "canCreate",
|
|
34995
|
+
required: false
|
|
34996
|
+
}]
|
|
34997
|
+
}],
|
|
34998
|
+
disablePast: [{
|
|
34999
|
+
type: i0.Input,
|
|
35000
|
+
args: [{
|
|
35001
|
+
isSignal: true,
|
|
35002
|
+
alias: "disablePast",
|
|
35003
|
+
required: false
|
|
35004
|
+
}]
|
|
35005
|
+
}],
|
|
35006
|
+
maxVisible: [{
|
|
35007
|
+
type: i0.Input,
|
|
35008
|
+
args: [{
|
|
35009
|
+
isSignal: true,
|
|
35010
|
+
alias: "maxVisible",
|
|
35011
|
+
required: false
|
|
35012
|
+
}]
|
|
35013
|
+
}],
|
|
35014
|
+
chipLayout: [{
|
|
35015
|
+
type: i0.Input,
|
|
35016
|
+
args: [{
|
|
35017
|
+
isSignal: true,
|
|
35018
|
+
alias: "chipLayout",
|
|
35019
|
+
required: false
|
|
35020
|
+
}]
|
|
35021
|
+
}],
|
|
35022
|
+
sortByTime: [{
|
|
35023
|
+
type: i0.Input,
|
|
35024
|
+
args: [{
|
|
35025
|
+
isSignal: true,
|
|
35026
|
+
alias: "sortByTime",
|
|
35027
|
+
required: false
|
|
35028
|
+
}]
|
|
35029
|
+
}],
|
|
35030
|
+
startHour: [{
|
|
35031
|
+
type: i0.Input,
|
|
35032
|
+
args: [{
|
|
35033
|
+
isSignal: true,
|
|
35034
|
+
alias: "startHour",
|
|
35035
|
+
required: false
|
|
35036
|
+
}]
|
|
35037
|
+
}],
|
|
35038
|
+
endHour: [{
|
|
35039
|
+
type: i0.Input,
|
|
35040
|
+
args: [{
|
|
35041
|
+
isSignal: true,
|
|
35042
|
+
alias: "endHour",
|
|
35043
|
+
required: false
|
|
35044
|
+
}]
|
|
35045
|
+
}],
|
|
35046
|
+
emptyMessage: [{
|
|
35047
|
+
type: i0.Input,
|
|
35048
|
+
args: [{
|
|
35049
|
+
isSignal: true,
|
|
35050
|
+
alias: "emptyMessage",
|
|
35051
|
+
required: false
|
|
35052
|
+
}]
|
|
35053
|
+
}],
|
|
35054
|
+
dayLabelFn: [{
|
|
35055
|
+
type: i0.Input,
|
|
35056
|
+
args: [{
|
|
35057
|
+
isSignal: true,
|
|
35058
|
+
alias: "dayLabelFn",
|
|
35059
|
+
required: false
|
|
35060
|
+
}]
|
|
35061
|
+
}],
|
|
35062
|
+
rangeChange: [{
|
|
35063
|
+
type: i0.Output,
|
|
35064
|
+
args: ["rangeChange"]
|
|
35065
|
+
}],
|
|
35066
|
+
itemClick: [{
|
|
35067
|
+
type: i0.Output,
|
|
35068
|
+
args: ["itemClick"]
|
|
35069
|
+
}],
|
|
35070
|
+
dateClick: [{
|
|
35071
|
+
type: i0.Output,
|
|
35072
|
+
args: ["dateClick"]
|
|
35073
|
+
}],
|
|
35074
|
+
slotClick: [{
|
|
35075
|
+
type: i0.Output,
|
|
35076
|
+
args: ["slotClick"]
|
|
35077
|
+
}],
|
|
35078
|
+
moreClick: [{
|
|
35079
|
+
type: i0.Output,
|
|
35080
|
+
args: ["moreClick"]
|
|
35081
|
+
}]
|
|
35082
|
+
}
|
|
35083
|
+
});
|
|
35084
|
+
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, FileInputComponent, FormColSpanDirective, FormComponent, FormRowComponent, FormSectionComponent, HintComponent, IconComponent, ImageComponent, ImageGalleryComponent, ImagePreviewComponent, ImageRepositionComponent, ImportExportComponent, KpiCardComponent, LAYOUT_GAP_PX, ListComponent, ListItemComponent, LiveRegionComponent, ModalComponent, MoreMenuComponent, MultiSelectComponent, PHONE_NUMBER_AREA_CODE_LENGTH, PHONE_NUMBER_ZIP_LENGTH, PaginationComponent, PanelInfoListComponent, PdfHotspotComponent, PhoneNumberPickerComponent, PillTabsComponent, ProgressBarComponent, ProgressRingComponent, QrCodeComponent, QuickFilterTabsComponent, RICH_TEXT_OPTIONS, RadioComponent, RadioGroupComponent, RadioMatrixComponent, RadioOptionContentDirective, ReadonlyFieldsetComponent, RichTextEditorComponent, SEMANTIC_BADGE_MAP, SearchInputComponent, SectionHeaderComponent, SelectComponent, 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, encodeFilterValue, encodeFilterValues, errorContextInterceptor, fileMatchesAccept, formatFileSize, formatIsoDate, formatIsoDateTime, formatTime, getEligibleIds, getEligibleOptions, getErrorMessage, humanReadableMessage, iconPath, isoKey, issueToErrors, maxLengthIssue, normalizeHexColor, parseBizHours, parseIso, parseTime, pluralize, provideForgerouteToast, reorderItems, requiredIssue, resolveLayoutGap, resolvePreset, serializeBizHours };
|
|
33560
35085
|
|
|
33561
35086
|
//# sourceMappingURL=forgeroute-ui.mjs.map
|