@forgeroute/ui 0.4.67 → 0.4.69
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.
|
@@ -830,7 +830,12 @@ var QuickFilterTabsComponent = class QuickFilterTabsComponent {
|
|
|
830
830
|
|
|
831
831
|
<!-- More button (inside scrollable .tabs for layout) -->
|
|
832
832
|
@if (overflowTabs().length) {
|
|
833
|
-
|
|
833
|
+
<!-- role="tab" (not a bare button): a tablist may only own tab children. The trigger is the tab for the
|
|
834
|
+
overflow group: aria-selected mirrors "the active tab lives in the overflow", and aria-haspopup /
|
|
835
|
+
aria-expanded describe the listbox it opens. -->
|
|
836
|
+
<button class="tab more-btn" role="tab" aria-haspopup="listbox" [class.active]="overflowActive()"
|
|
837
|
+
[attr.aria-selected]="overflowActive()"
|
|
838
|
+
[attr.aria-expanded]="dropdownOpen()"
|
|
834
839
|
(click)="toggleDropdown($event)">
|
|
835
840
|
@if (overflowActive()) {
|
|
836
841
|
{{ activeOverflowLabel() }}
|
|
@@ -864,7 +869,7 @@ var QuickFilterTabsComponent = class QuickFilterTabsComponent {
|
|
|
864
869
|
</div>
|
|
865
870
|
`,
|
|
866
871
|
isInline: true,
|
|
867
|
-
styles: [":host{display:block;min-width:0}.tabs-outer{position:relative;display:inline-flex;align-items:center;max-width:100%;min-width:0}.tabs{display:flex;align-items:center;gap:2px;background:#f1f5f9;border-radius:8px;padding:3px;overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch;min-width:0;max-width:100%}.tabs::-webkit-scrollbar{display:none}.tab{display:inline-flex;align-items:center;gap:6px;padding:6px 14px;border-radius:6px;border:none;background:transparent;font-size:.8125rem;font-weight:500;color:#
|
|
872
|
+
styles: [":host{display:block;min-width:0}.tabs-outer{position:relative;display:inline-flex;align-items:center;max-width:100%;min-width:0}.tabs{display:flex;align-items:center;gap:2px;background:#f1f5f9;border-radius:8px;padding:3px;overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch;min-width:0;max-width:100%}.tabs::-webkit-scrollbar{display:none}.tab{display:inline-flex;align-items:center;gap:6px;padding:6px 14px;border-radius:6px;border:none;background:transparent;font-size:.8125rem;font-weight:500;color:#475569;cursor:pointer;font-family:inherit;transition:background .1s,color .1s;white-space:nowrap;flex-shrink:0}.tab:hover{color:#1e293b}.tab.active{background:#fff;color:#1e293b;box-shadow:0 1px 3px #00000014}.tab:focus-visible{outline:2px solid #60a5fa;outline-offset:2px}.tab.tab-disabled{opacity:.45;cursor:default;pointer-events:none}.tab-count{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 5px;border-radius:999px;font-size:.6875rem;font-weight:700;background:#e2e8f0;color:#475569;line-height:1}.active .tab-count,.active-count{background:#1e293b;color:#fff}.more-btn{gap:4px}.more-dropdown{position:absolute;top:calc(100% + 4px);right:0;z-index:100;background:#fff;border:1px solid #e2e8f0;border-radius:8px;box-shadow:0 4px 16px #0000001a;min-width:180px;padding:4px;max-height:260px;overflow-y:auto}.more-option{display:flex;align-items:center;justify-content:space-between;width:100%;padding:8px 12px;background:none;border:none;cursor:pointer;font-size:.875rem;color:#334155;font-family:inherit;border-radius:5px;transition:background .1s;text-align:left;gap:12px}.more-option:hover{background:#f8fafc}.more-option.more-option-active{background:#f1f5f9;color:#1e293b;font-weight:500}.more-option:focus-visible{outline:2px solid #60a5fa;outline-offset:-2px}.more-option-label{flex:1}.more-option-count{display:inline-flex;align-items:center;justify-content:center;min-width:20px;height:20px;padding:0 6px;border-radius:999px;font-size:.6875rem;font-weight:700;line-height:1;background:#e2e8f0;color:#475569}.more-option-active .more-option-count{background:#1e293b;color:#fff}@media(max-width:1024px){.tab{padding:7px 12px}}@media(pointer:coarse){.tab{min-height:44px}}@media(max-width:640px){:host{align-self:flex-start;max-width:100%}.tab{padding:10px 12px;font-size:.8125rem;min-height:44px}.more-option{padding:12px 14px}}\n"],
|
|
868
873
|
dependencies: [{
|
|
869
874
|
kind: "pipe",
|
|
870
875
|
type: DecimalPipe,
|
|
@@ -921,7 +926,12 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
921
926
|
|
|
922
927
|
<!-- More button (inside scrollable .tabs for layout) -->
|
|
923
928
|
@if (overflowTabs().length) {
|
|
924
|
-
|
|
929
|
+
<!-- role="tab" (not a bare button): a tablist may only own tab children. The trigger is the tab for the
|
|
930
|
+
overflow group: aria-selected mirrors "the active tab lives in the overflow", and aria-haspopup /
|
|
931
|
+
aria-expanded describe the listbox it opens. -->
|
|
932
|
+
<button class="tab more-btn" role="tab" aria-haspopup="listbox" [class.active]="overflowActive()"
|
|
933
|
+
[attr.aria-selected]="overflowActive()"
|
|
934
|
+
[attr.aria-expanded]="dropdownOpen()"
|
|
925
935
|
(click)="toggleDropdown($event)">
|
|
926
936
|
@if (overflowActive()) {
|
|
927
937
|
{{ activeOverflowLabel() }}
|
|
@@ -954,7 +964,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
954
964
|
}
|
|
955
965
|
</div>
|
|
956
966
|
`,
|
|
957
|
-
styles: [":host{display:block;min-width:0}.tabs-outer{position:relative;display:inline-flex;align-items:center;max-width:100%;min-width:0}.tabs{display:flex;align-items:center;gap:2px;background:#f1f5f9;border-radius:8px;padding:3px;overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch;min-width:0;max-width:100%}.tabs::-webkit-scrollbar{display:none}.tab{display:inline-flex;align-items:center;gap:6px;padding:6px 14px;border-radius:6px;border:none;background:transparent;font-size:.8125rem;font-weight:500;color:#
|
|
967
|
+
styles: [":host{display:block;min-width:0}.tabs-outer{position:relative;display:inline-flex;align-items:center;max-width:100%;min-width:0}.tabs{display:flex;align-items:center;gap:2px;background:#f1f5f9;border-radius:8px;padding:3px;overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch;min-width:0;max-width:100%}.tabs::-webkit-scrollbar{display:none}.tab{display:inline-flex;align-items:center;gap:6px;padding:6px 14px;border-radius:6px;border:none;background:transparent;font-size:.8125rem;font-weight:500;color:#475569;cursor:pointer;font-family:inherit;transition:background .1s,color .1s;white-space:nowrap;flex-shrink:0}.tab:hover{color:#1e293b}.tab.active{background:#fff;color:#1e293b;box-shadow:0 1px 3px #00000014}.tab:focus-visible{outline:2px solid #60a5fa;outline-offset:2px}.tab.tab-disabled{opacity:.45;cursor:default;pointer-events:none}.tab-count{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 5px;border-radius:999px;font-size:.6875rem;font-weight:700;background:#e2e8f0;color:#475569;line-height:1}.active .tab-count,.active-count{background:#1e293b;color:#fff}.more-btn{gap:4px}.more-dropdown{position:absolute;top:calc(100% + 4px);right:0;z-index:100;background:#fff;border:1px solid #e2e8f0;border-radius:8px;box-shadow:0 4px 16px #0000001a;min-width:180px;padding:4px;max-height:260px;overflow-y:auto}.more-option{display:flex;align-items:center;justify-content:space-between;width:100%;padding:8px 12px;background:none;border:none;cursor:pointer;font-size:.875rem;color:#334155;font-family:inherit;border-radius:5px;transition:background .1s;text-align:left;gap:12px}.more-option:hover{background:#f8fafc}.more-option.more-option-active{background:#f1f5f9;color:#1e293b;font-weight:500}.more-option:focus-visible{outline:2px solid #60a5fa;outline-offset:-2px}.more-option-label{flex:1}.more-option-count{display:inline-flex;align-items:center;justify-content:center;min-width:20px;height:20px;padding:0 6px;border-radius:999px;font-size:.6875rem;font-weight:700;line-height:1;background:#e2e8f0;color:#475569}.more-option-active .more-option-count{background:#1e293b;color:#fff}@media(max-width:1024px){.tab{padding:7px 12px}}@media(pointer:coarse){.tab{min-height:44px}}@media(max-width:640px){:host{align-self:flex-start;max-width:100%}.tab{padding:10px 12px;font-size:.8125rem;min-height:44px}.more-option{padding:12px 14px}}\n"]
|
|
958
968
|
}]
|
|
959
969
|
}],
|
|
960
970
|
ctorParameters: () => [],
|
|
@@ -1243,7 +1253,7 @@ var ColumnFilterComponent = class ColumnFilterComponent {
|
|
|
1243
1253
|
</div>
|
|
1244
1254
|
`,
|
|
1245
1255
|
isInline: true,
|
|
1246
|
-
styles: [":host{display:inline-block;position:relative}.cf-wrapper{position:relative}.cf-trigger{display:inline-flex;align-items:center;gap:4px;background:none;border:none;cursor:pointer;color:#94a3b8;padding:2px 4px;border-radius:4px;font-family:inherit;font-size:.75rem;transition:color .15s}.cf-trigger:hover{color:#1e293b}.cf-trigger.cf-active{color:#3b82f6}.cf-trigger:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}@media(max-width:640px),(pointer:coarse){.cf-trigger{position:relative}.cf-trigger:after{content:\"\";position:absolute;top:50%;left:50%;width:44px;height:44px;transform:translate(-50%,-50%)}}.cf-active-label{font-size:.75rem;font-weight:500;color:#3b82f6}.cf-trigger--chip{min-height:44px;padding:0 14px;gap:6px;border:1px solid #e2e8f0;border-radius:999px;background:#fff;color:#334155;font-size:.8125rem;font-weight:500}.cf-trigger--chip.cf-active{border-color:#bfdbfe;background:#eff6ff}.cf-trigger--chip:after{display:none}.cf-chip-label{white-space:nowrap}.cf-dropdown{position:fixed;display:flex;flex-direction:column;max-height:calc(100vh - 16px);z-index:9999;background:#fff;border:1px solid #e2e8f0;border-radius:12px;box-shadow:0 4px 6px #0000000a,0 12px 28px #0000001a;min-width:220px;animation:cf-drop .16s cubic-bezier(.16,1,.3,1)}.cf-header{display:flex;align-items:center;justify-content:space-between;padding:12px 12px 10px 16px;border-bottom:1px solid #f1f5f9}.cf-header-label{font-size:.7rem;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:#64748b}.cf-close{display:flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:6px;background:none;border:none;cursor:pointer;color:#94a3b8;flex-shrink:0;transition:background .13s,color .13s}.cf-close:hover{background:#f1f5f9;color:#1e293b}@media(max-width:640px),(pointer:coarse){.cf-close{position:relative}.cf-close:after{content:\"\";position:absolute;inset:-10px}}.cf-options{padding:6px 8px;overflow-y:auto;min-height:0}.cf-option{display:flex;align-items:center;gap:10px;width:100%;padding:10px;background:none;border:none;border-bottom:1px solid #e2e8f0;cursor:pointer;font-size:.875rem;font-weight:400;color:#1e293b;font-family:inherit;text-align:left;border-radius:0;transition:background .12s}.cf-option:last-child{border-bottom:none}.cf-option:hover{background:#f8fafc}.cf-option.cf-selected{background:#eff6ff;color:#1d4ed8;font-weight:500}.cf-option:focus-visible{outline:2px solid #3b82f6;outline-offset:-2px}.cf-checkbox{flex-shrink:0;width:16px;height:16px;border-radius:4px;border:1.5px solid #7c8ba1;display:flex;align-items:center;justify-content:center;background:#fff;transition:background .12s,border-color .12s}.cf-checkbox.cf-checkbox--checked{background:#3b82f6;border-color:#3b82f6;color:#fff}.cf-count{margin-left:auto;font-size:.7rem;font-weight:600;line-height:1;background:#f1f5f9;color:#
|
|
1256
|
+
styles: [":host{display:inline-block;position:relative}.cf-wrapper{position:relative}.cf-trigger{display:inline-flex;align-items:center;gap:4px;background:none;border:none;cursor:pointer;color:#94a3b8;padding:2px 4px;border-radius:4px;font-family:inherit;font-size:.75rem;transition:color .15s}.cf-trigger:hover{color:#1e293b}.cf-trigger.cf-active{color:#3b82f6}.cf-trigger:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}@media(max-width:640px),(pointer:coarse){.cf-trigger{position:relative}.cf-trigger:after{content:\"\";position:absolute;top:50%;left:50%;width:44px;height:44px;transform:translate(-50%,-50%)}}.cf-active-label{font-size:.75rem;font-weight:500;color:#3b82f6}.cf-trigger--chip{min-height:44px;padding:0 14px;gap:6px;border:1px solid #e2e8f0;border-radius:999px;background:#fff;color:#334155;font-size:.8125rem;font-weight:500}.cf-trigger--chip.cf-active{border-color:#bfdbfe;background:#eff6ff}.cf-trigger--chip:after{display:none}.cf-chip-label{white-space:nowrap}.cf-dropdown{position:fixed;display:flex;flex-direction:column;max-height:calc(100vh - 16px);z-index:9999;background:#fff;border:1px solid #e2e8f0;border-radius:12px;box-shadow:0 4px 6px #0000000a,0 12px 28px #0000001a;min-width:220px;animation:cf-drop .16s cubic-bezier(.16,1,.3,1)}.cf-header{display:flex;align-items:center;justify-content:space-between;padding:12px 12px 10px 16px;border-bottom:1px solid #f1f5f9}.cf-header-label{font-size:.7rem;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:#64748b}.cf-close{display:flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:6px;background:none;border:none;cursor:pointer;color:#94a3b8;flex-shrink:0;transition:background .13s,color .13s}.cf-close:hover{background:#f1f5f9;color:#1e293b}@media(max-width:640px),(pointer:coarse){.cf-close{position:relative}.cf-close:after{content:\"\";position:absolute;inset:-10px}}.cf-options{padding:6px 8px;overflow-y:auto;min-height:0}.cf-option{display:flex;align-items:center;gap:10px;width:100%;padding:10px;background:none;border:none;border-bottom:1px solid #e2e8f0;cursor:pointer;font-size:.875rem;font-weight:400;color:#1e293b;font-family:inherit;text-align:left;border-radius:0;transition:background .12s}.cf-option:last-child{border-bottom:none}.cf-option:hover{background:#f8fafc}.cf-option.cf-selected{background:#eff6ff;color:#1d4ed8;font-weight:500}.cf-option:focus-visible{outline:2px solid #3b82f6;outline-offset:-2px}.cf-checkbox{flex-shrink:0;width:16px;height:16px;border-radius:4px;border:1.5px solid #7c8ba1;display:flex;align-items:center;justify-content:center;background:#fff;transition:background .12s,border-color .12s}.cf-checkbox.cf-checkbox--checked{background:#3b82f6;border-color:#3b82f6;color:#fff}.cf-count{margin-left:auto;font-size:.7rem;font-weight:600;line-height:1;background:#f1f5f9;color:#475569;border-radius:999px;padding:2px 7px;min-width:22px;text-align:center}.cf-option.cf-selected .cf-count{background:#dbeafe;color:#1d4ed8}.cf-footer{display:flex;gap:8px;padding:10px 12px 12px;border-top:1px solid #f1f5f9}.cf-clear{flex:1;padding:8px;border-radius:8px;border:1px solid #e2e8f0;background:#fff;font-size:.8125rem;color:#64748b;cursor:pointer;font-family:inherit;font-weight:500;transition:background .12s,color .12s}.cf-clear:hover{background:#f8fafc;color:#1e293b}.cf-apply{flex:1;padding:8px;border-radius:8px;border:none;background:#0f172a;color:#fff;font-size:.8125rem;cursor:pointer;font-family:inherit;font-weight:600;transition:background .12s}.cf-apply:hover{background:#1e293b}@keyframes cf-drop{0%{opacity:0;transform:translateY(-4px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}@media(max-width:1024px){.cf-trigger{padding:6px 8px}.cf-option{padding:11px 10px;min-height:40px}.cf-clear,.cf-apply{padding:10px}}@media(max-width:640px){.cf-dropdown{min-width:200px;max-width:calc(100vw - 16px)}.cf-option{padding:12px 10px;min-height:44px}.cf-clear,.cf-apply{padding:11px}}@media(prefers-reduced-motion:reduce){.cf-dropdown{animation:none}}\n"],
|
|
1247
1257
|
changeDetection: i0.ChangeDetectionStrategy.OnPush
|
|
1248
1258
|
});
|
|
1249
1259
|
}
|
|
@@ -1332,7 +1342,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
1332
1342
|
}
|
|
1333
1343
|
</div>
|
|
1334
1344
|
`,
|
|
1335
|
-
styles: [":host{display:inline-block;position:relative}.cf-wrapper{position:relative}.cf-trigger{display:inline-flex;align-items:center;gap:4px;background:none;border:none;cursor:pointer;color:#94a3b8;padding:2px 4px;border-radius:4px;font-family:inherit;font-size:.75rem;transition:color .15s}.cf-trigger:hover{color:#1e293b}.cf-trigger.cf-active{color:#3b82f6}.cf-trigger:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}@media(max-width:640px),(pointer:coarse){.cf-trigger{position:relative}.cf-trigger:after{content:\"\";position:absolute;top:50%;left:50%;width:44px;height:44px;transform:translate(-50%,-50%)}}.cf-active-label{font-size:.75rem;font-weight:500;color:#3b82f6}.cf-trigger--chip{min-height:44px;padding:0 14px;gap:6px;border:1px solid #e2e8f0;border-radius:999px;background:#fff;color:#334155;font-size:.8125rem;font-weight:500}.cf-trigger--chip.cf-active{border-color:#bfdbfe;background:#eff6ff}.cf-trigger--chip:after{display:none}.cf-chip-label{white-space:nowrap}.cf-dropdown{position:fixed;display:flex;flex-direction:column;max-height:calc(100vh - 16px);z-index:9999;background:#fff;border:1px solid #e2e8f0;border-radius:12px;box-shadow:0 4px 6px #0000000a,0 12px 28px #0000001a;min-width:220px;animation:cf-drop .16s cubic-bezier(.16,1,.3,1)}.cf-header{display:flex;align-items:center;justify-content:space-between;padding:12px 12px 10px 16px;border-bottom:1px solid #f1f5f9}.cf-header-label{font-size:.7rem;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:#64748b}.cf-close{display:flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:6px;background:none;border:none;cursor:pointer;color:#94a3b8;flex-shrink:0;transition:background .13s,color .13s}.cf-close:hover{background:#f1f5f9;color:#1e293b}@media(max-width:640px),(pointer:coarse){.cf-close{position:relative}.cf-close:after{content:\"\";position:absolute;inset:-10px}}.cf-options{padding:6px 8px;overflow-y:auto;min-height:0}.cf-option{display:flex;align-items:center;gap:10px;width:100%;padding:10px;background:none;border:none;border-bottom:1px solid #e2e8f0;cursor:pointer;font-size:.875rem;font-weight:400;color:#1e293b;font-family:inherit;text-align:left;border-radius:0;transition:background .12s}.cf-option:last-child{border-bottom:none}.cf-option:hover{background:#f8fafc}.cf-option.cf-selected{background:#eff6ff;color:#1d4ed8;font-weight:500}.cf-option:focus-visible{outline:2px solid #3b82f6;outline-offset:-2px}.cf-checkbox{flex-shrink:0;width:16px;height:16px;border-radius:4px;border:1.5px solid #7c8ba1;display:flex;align-items:center;justify-content:center;background:#fff;transition:background .12s,border-color .12s}.cf-checkbox.cf-checkbox--checked{background:#3b82f6;border-color:#3b82f6;color:#fff}.cf-count{margin-left:auto;font-size:.7rem;font-weight:600;line-height:1;background:#f1f5f9;color:#
|
|
1345
|
+
styles: [":host{display:inline-block;position:relative}.cf-wrapper{position:relative}.cf-trigger{display:inline-flex;align-items:center;gap:4px;background:none;border:none;cursor:pointer;color:#94a3b8;padding:2px 4px;border-radius:4px;font-family:inherit;font-size:.75rem;transition:color .15s}.cf-trigger:hover{color:#1e293b}.cf-trigger.cf-active{color:#3b82f6}.cf-trigger:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}@media(max-width:640px),(pointer:coarse){.cf-trigger{position:relative}.cf-trigger:after{content:\"\";position:absolute;top:50%;left:50%;width:44px;height:44px;transform:translate(-50%,-50%)}}.cf-active-label{font-size:.75rem;font-weight:500;color:#3b82f6}.cf-trigger--chip{min-height:44px;padding:0 14px;gap:6px;border:1px solid #e2e8f0;border-radius:999px;background:#fff;color:#334155;font-size:.8125rem;font-weight:500}.cf-trigger--chip.cf-active{border-color:#bfdbfe;background:#eff6ff}.cf-trigger--chip:after{display:none}.cf-chip-label{white-space:nowrap}.cf-dropdown{position:fixed;display:flex;flex-direction:column;max-height:calc(100vh - 16px);z-index:9999;background:#fff;border:1px solid #e2e8f0;border-radius:12px;box-shadow:0 4px 6px #0000000a,0 12px 28px #0000001a;min-width:220px;animation:cf-drop .16s cubic-bezier(.16,1,.3,1)}.cf-header{display:flex;align-items:center;justify-content:space-between;padding:12px 12px 10px 16px;border-bottom:1px solid #f1f5f9}.cf-header-label{font-size:.7rem;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:#64748b}.cf-close{display:flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:6px;background:none;border:none;cursor:pointer;color:#94a3b8;flex-shrink:0;transition:background .13s,color .13s}.cf-close:hover{background:#f1f5f9;color:#1e293b}@media(max-width:640px),(pointer:coarse){.cf-close{position:relative}.cf-close:after{content:\"\";position:absolute;inset:-10px}}.cf-options{padding:6px 8px;overflow-y:auto;min-height:0}.cf-option{display:flex;align-items:center;gap:10px;width:100%;padding:10px;background:none;border:none;border-bottom:1px solid #e2e8f0;cursor:pointer;font-size:.875rem;font-weight:400;color:#1e293b;font-family:inherit;text-align:left;border-radius:0;transition:background .12s}.cf-option:last-child{border-bottom:none}.cf-option:hover{background:#f8fafc}.cf-option.cf-selected{background:#eff6ff;color:#1d4ed8;font-weight:500}.cf-option:focus-visible{outline:2px solid #3b82f6;outline-offset:-2px}.cf-checkbox{flex-shrink:0;width:16px;height:16px;border-radius:4px;border:1.5px solid #7c8ba1;display:flex;align-items:center;justify-content:center;background:#fff;transition:background .12s,border-color .12s}.cf-checkbox.cf-checkbox--checked{background:#3b82f6;border-color:#3b82f6;color:#fff}.cf-count{margin-left:auto;font-size:.7rem;font-weight:600;line-height:1;background:#f1f5f9;color:#475569;border-radius:999px;padding:2px 7px;min-width:22px;text-align:center}.cf-option.cf-selected .cf-count{background:#dbeafe;color:#1d4ed8}.cf-footer{display:flex;gap:8px;padding:10px 12px 12px;border-top:1px solid #f1f5f9}.cf-clear{flex:1;padding:8px;border-radius:8px;border:1px solid #e2e8f0;background:#fff;font-size:.8125rem;color:#64748b;cursor:pointer;font-family:inherit;font-weight:500;transition:background .12s,color .12s}.cf-clear:hover{background:#f8fafc;color:#1e293b}.cf-apply{flex:1;padding:8px;border-radius:8px;border:none;background:#0f172a;color:#fff;font-size:.8125rem;cursor:pointer;font-family:inherit;font-weight:600;transition:background .12s}.cf-apply:hover{background:#1e293b}@keyframes cf-drop{0%{opacity:0;transform:translateY(-4px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}@media(max-width:1024px){.cf-trigger{padding:6px 8px}.cf-option{padding:11px 10px;min-height:40px}.cf-clear,.cf-apply{padding:10px}}@media(max-width:640px){.cf-dropdown{min-width:200px;max-width:calc(100vw - 16px)}.cf-option{padding:12px 10px;min-height:44px}.cf-clear,.cf-apply{padding:11px}}@media(prefers-reduced-motion:reduce){.cf-dropdown{animation:none}}\n"]
|
|
1336
1346
|
}]
|
|
1337
1347
|
}],
|
|
1338
1348
|
ctorParameters: () => [],
|
|
@@ -7890,6 +7900,9 @@ var ToastService = class ToastService {
|
|
|
7890
7900
|
show(msg, duration = 3e3) {
|
|
7891
7901
|
this._display("success", msg, duration);
|
|
7892
7902
|
}
|
|
7903
|
+
success(msg, duration = 3e3) {
|
|
7904
|
+
this._display("success", msg, duration);
|
|
7905
|
+
}
|
|
7893
7906
|
info(msg, duration = 3e3) {
|
|
7894
7907
|
this._display("info", msg, duration);
|
|
7895
7908
|
}
|
|
@@ -11250,7 +11263,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
11250
11263
|
}
|
|
11251
11264
|
});
|
|
11252
11265
|
let reorderHelpSeq = 0;
|
|
11253
|
-
function formatPhone$
|
|
11266
|
+
function formatPhone$2(raw) {
|
|
11254
11267
|
if (!raw) return "—";
|
|
11255
11268
|
const digits = raw.replace(/\D/g, "");
|
|
11256
11269
|
if (digits.length === 10) return `(${digits.slice(0, 3)}) ${digits.slice(3, 6)}-${digits.slice(6)}`;
|
|
@@ -11892,6 +11905,7 @@ var DataTableComponent = class DataTableComponent {
|
|
|
11892
11905
|
}))];
|
|
11893
11906
|
}, ...ngDevMode ? [{ debugName: "_effectiveTabs" }] : /* istanbul ignore next */ []);
|
|
11894
11907
|
this._error = signal(null, ...ngDevMode ? [{ debugName: "_error" }] : /* istanbul ignore next */ []);
|
|
11908
|
+
this._cardListHasItems = computed(() => this._loading() || !this._error() && this._items().length > 0, ...ngDevMode ? [{ debugName: "_cardListHasItems" }] : /* istanbul ignore next */ []);
|
|
11895
11909
|
this._loadFailed = signal(false, ...ngDevMode ? [{ debugName: "_loadFailed" }] : /* istanbul ignore next */ []);
|
|
11896
11910
|
this.loadFailed = this._loadFailed.asReadonly();
|
|
11897
11911
|
this._search = signal("", ...ngDevMode ? [{ debugName: "_search" }] : /* istanbul ignore next */ []);
|
|
@@ -12618,7 +12632,7 @@ var DataTableComponent = class DataTableComponent {
|
|
|
12618
12632
|
this._failedImages.update((s) => new Set(s).add(url));
|
|
12619
12633
|
}
|
|
12620
12634
|
phoneCell(value) {
|
|
12621
|
-
return formatPhone$
|
|
12635
|
+
return formatPhone$2(value);
|
|
12622
12636
|
}
|
|
12623
12637
|
_safeHref(raw) {
|
|
12624
12638
|
if (typeof raw !== "string") return null;
|
|
@@ -12707,7 +12721,7 @@ var DataTableComponent = class DataTableComponent {
|
|
|
12707
12721
|
const v = item[col.key];
|
|
12708
12722
|
return v ? this._datePipe.transform(v, col.dateFormat ?? "MMM d, y") ?? "—" : "—";
|
|
12709
12723
|
}
|
|
12710
|
-
case "phone": return formatPhone$
|
|
12724
|
+
case "phone": return formatPhone$2(item[col.key]);
|
|
12711
12725
|
case "link": return this.linkView(col, item).text;
|
|
12712
12726
|
case "days-ago": {
|
|
12713
12727
|
const days = item[col.daysKey ?? col.key];
|
|
@@ -13460,7 +13474,8 @@ var DataTableComponent = class DataTableComponent {
|
|
|
13460
13474
|
}
|
|
13461
13475
|
</div>
|
|
13462
13476
|
}
|
|
13463
|
-
|
|
13477
|
+
<!-- role=list only while it holds listitems (cards or skeleton cards); empty / error / no-match states are not an empty list -->
|
|
13478
|
+
<div class="dt-card-list" [attr.role]="_cardListHasItems() ? 'list' : null" [attr.aria-label]="_cardListHasItems() ? tableLabel() : null">
|
|
13464
13479
|
|
|
13465
13480
|
@if (_loading()) {
|
|
13466
13481
|
@for (_ of skeletonRows(); track $index) {
|
|
@@ -13688,7 +13703,7 @@ var DataTableComponent = class DataTableComponent {
|
|
|
13688
13703
|
</div>
|
|
13689
13704
|
`,
|
|
13690
13705
|
isInline: true,
|
|
13691
|
-
styles: [":host{display:flex;flex-direction:column;flex:1;min-height:0}.dt-host{display:flex;flex-direction:column;height:100%;min-height:0}.dt-header{display:flex;align-items:center;gap:12px;margin-bottom:16px;flex-wrap:wrap;justify-content:space-between;position:relative;z-index:10}.dt-header-left{display:flex;align-items:center;gap:10px;flex-wrap:wrap;flex:1;min-width:0}.dt-header-right{display:flex;align-items:center;gap:8px;flex-shrink:0;flex-wrap:wrap;justify-content:flex-end}.dt-title{margin:0;font-size:.8125rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:#64748b;overflow-wrap:anywhere}.dt-sk-shimmer{position:relative;overflow:hidden;background:#f1f5f9}.dt-sk-shimmer:after{content:\"\";position:absolute;inset:0;background:linear-gradient(90deg,transparent 25%,rgba(255,255,255,.65) 50%,transparent 75%);transform:translate(-100%);animation:dt-shimmer 1.4s ease-in-out infinite}@keyframes dt-shimmer{to{transform:translate(200%)}}.dt-sk-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:16px}.dt-sk-toolbar-left{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.dt-sk-toolbar-right{display:flex;align-items:center;gap:8px;flex-shrink:0}.dt-sk-search{display:flex;align-items:center;gap:10px;width:380px;height:36px;padding:0 12px;border:1px solid #e2e8f0;border-radius:6px;background:#f8fafc;box-sizing:border-box}.dt-sk-search-icon{width:16px;height:16px;border-radius:50%;flex-shrink:0}.dt-sk-search-text{flex:1;height:11px;border-radius:4px}.dt-sk-tab-strip{display:flex;gap:2px;padding:3px;background:#f1f5f9;border-radius:8px}.dt-sk-tab{height:28px;width:70px;border-radius:6px}.dt-sk-icon-btn{width:32px;height:32px;border-radius:6px}.dt-skeleton{border:1px solid #e2e8f0;border-radius:10px;overflow:hidden}.dt-sk-header{display:flex;gap:24px;padding:12px 16px;background:#f8fafc;border-bottom:1px solid #e2e8f0}.dt-sk-row{display:flex;gap:24px;padding:13px 16px;border-bottom:1px solid #f1f5f9}.dt-sk-row:last-child{border-bottom:none}.dt-sk-cell{flex:1;height:13px;border-radius:4px;position:relative;overflow:hidden;background:#f1f5f9}.dt-sk-cell:first-child{max-width:100px}.dt-sk-cell:after{content:\"\";position:absolute;inset:0;background:linear-gradient(90deg,transparent 25%,rgba(255,255,255,.65) 50%,transparent 75%);transform:translate(-100%);animation:dt-shimmer 1.4s ease-in-out infinite}.dt-sk-head{height:10px}.dt-table-wrap{flex:1;min-height:0;overflow:auto;border:1px solid #e2e8f0;border-radius:10px 10px 0 0}.dt-sk-reload-row td{padding:10px 14px;border-bottom:1px solid #f1f5f9}table{width:100%;border-collapse:collapse;font-size:.875rem}thead tr{background:#f8fafc;border-bottom:1px solid #e2e8f0}thead{position:sticky;top:0;z-index:2}th{padding:10px 14px;font-size:.75rem;font-weight:600;color:#64748b;text-transform:uppercase;letter-spacing:.04em;white-space:nowrap;border-right:1px solid #e2e8f0;text-align:center;background:#f8fafc}th:last-child{border-right:none}th.dt-th-sorted{background:#f1f5f9}th.dt-th-actions{width:48px}.dt-th-inner{display:flex;align-items:center;justify-content:center;gap:4px}.dt-sort-btn{display:inline-flex;align-items:center;gap:4px;background:none;border:none;cursor:pointer;font-size:inherit;font-weight:inherit;color:inherit;font-family:inherit;padding:0;text-transform:inherit;letter-spacing:inherit}.dt-sort-btn:hover{color:#1e293b}.dt-sort-btn:focus-visible{outline:2px solid #60a5fa;outline-offset:2px;border-radius:2px}@media(pointer:coarse){.dt-sort-btn{position:relative}.dt-sort-btn:after{content:\"\";position:absolute;left:-4px;right:-4px;top:50%;height:44px;transform:translateY(-50%)}}.dt-sort-icon{transition:transform .15s}.dt-sort-desc{transform:rotate(180deg)}.dt-sort-inactive{opacity:.4}tbody tr{border-bottom:1px solid #f1f5f9;background:#fff;transition:background .1s}tbody tr:last-child{border-bottom:none}tbody tr:hover{background:#f8fafc}.dt-row-clickable{cursor:pointer}.dt-row-clickable:focus-visible{outline:2px solid #3b82f6;outline-offset:-2px}td{padding:10px 14px;color:#334155;vertical-align:middle;white-space:nowrap;border-right:1px solid #f1f5f9}td:last-child{border-right:none}.dt-td-actions{text-align:center;padding:6px 8px}.dt-sticky-actions th.dt-th-actions,.dt-sticky-actions td.dt-td-actions{position:sticky;right:0;box-shadow:-1px 0 #e2e8f0}.dt-sticky-actions th.dt-th-actions{z-index:3;background:#f8fafc}.dt-sticky-actions td.dt-td-actions{z-index:1;background:#fff}.dt-sticky-actions td.dt-td-actions:focus-within,.dt-sticky-actions td.dt-td-actions:has(.mm-dropdown){z-index:2}.dt-sticky-actions tbody tr:hover td.dt-td-actions{background:#f8fafc}.dt-sticky-actions tbody tr.dt-row-selected td.dt-td-actions{background:#eff6ff}.dt-sticky-actions tbody tr.dt-row-selected:hover td.dt-td-actions{background:#dbeafe}.dt-td-width{overflow:hidden;text-overflow:ellipsis}.dt-img{display:inline-block;vertical-align:middle;object-fit:cover;border:1px solid #e2e8f0;background:#f1f5f9;flex-shrink:0}.dt-img-ph{display:inline-flex;align-items:center;justify-content:center;vertical-align:middle;color:#94a3b8;background:#f1f5f9;border:1px solid #e2e8f0;flex-shrink:0}.dt-img-ph svg{width:55%;height:55%}.dt-img-circle-md{width:40px;height:40px;border-radius:50%}.dt-img-circle-sm{width:28px;height:28px;border-radius:50%}.dt-img-rounded-md{width:48px;height:32px;border-radius:6px}.dt-img-rounded-sm{width:36px;height:24px;border-radius:5px}.dt-avatar-name{display:flex;align-items:center;gap:8px}.dt-name-text{color:#1e293b}.dt-overdue{color:#dc2626;font-weight:500}.dt-none{color:#94a3b8}.dt-link{position:relative;display:inline-block;max-width:100%;padding:1px 2px;vertical-align:bottom;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#2563eb;text-decoration:none;border-radius:3px;cursor:pointer}.dt-link:hover{text-decoration:underline;color:#1d4ed8}.dt-link:focus-visible{outline:2px solid #3b82f6;outline-offset:-2px;text-decoration:underline}.dt-card-detail-value .dt-link,.dt-card-name .dt-link{white-space:normal;overflow-wrap:anywhere}.dt-sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.dt-tags{display:flex;align-items:center;gap:4px}.dt-tags-more{font-size:.75rem;font-weight:600;color:#475569;background:#f1f5f9;border-radius:999px;padding:2px 7px;cursor:default;-webkit-user-select:none;user-select:none;border:1px solid #e2e8f0}.dt-tags-more:focus-visible{outline:2px solid #60a5fa;outline-offset:2px;border-radius:999px}.dt-tag-tooltip{position:fixed;z-index:9999;pointer-events:none;background:#1e293b;border-radius:10px;padding:8px 10px;display:flex;flex-direction:column;gap:5px;box-shadow:0 4px 6px #0000000f,0 10px 24px #00000024;transform:translate(-50%) translateY(-100%);animation:dt-tip-in .12s ease;max-width:220px}@keyframes dt-tip-in{0%{opacity:0;transform:translate(-50%) translateY(calc(-100% + 4px))}to{opacity:1;transform:translate(-50%) translateY(-100%)}}.dt-cell-star{margin-right:6px}.dt-actions-cell{display:flex;align-items:center;justify-content:center}.dt-bulk-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;align-self:flex-start;padding:10px 14px;margin-bottom:8px;background:#eff6ff;border:1px solid #bfdbfe;border-radius:8px}.dt-bulk-count{font-size:.875rem;font-weight:600;color:#1e40af;white-space:nowrap;flex-shrink:0}.dt-bulk-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;flex:1;min-width:0}.dt-bulk-actions ui-select{max-width:180px;min-width:120px}.dt-bulk-hint{font-size:.8125rem;line-height:1.35;color:#475569}.dt-card-cb{display:flex;align-items:center;padding:0 0 6px}.dt-card-selected{background:#eff6ff!important;border-color:#bfdbfe!important}.dt-th-cb{width:44px;padding:0 10px!important;text-align:center!important;border-right:1px solid #e2e8f0;background:#f8fafc}.dt-td-cb{width:44px;padding:0 10px!important;text-align:center!important;border-right:1px solid #f1f5f9}.dt-th-grip{width:36px;padding:0!important;border-right:1px solid #e2e8f0;background:#f8fafc}.dt-td-grip{width:36px;padding:0!important;text-align:center!important;border-right:1px solid #f1f5f9}.dt-grip{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:6px;color:#64748b;cursor:grab;-webkit-user-select:none;user-select:none;touch-action:none}.dt-grip:hover{background:#f1f5f9;color:#334155}.dt-grip:active{cursor:grabbing}.dt-grip:focus-visible{outline:2px solid #3b82f6;outline-offset:1px}.dt-grip-off{color:#cbd5e1;cursor:not-allowed}.dt-grip-off:hover{background:none;color:#cbd5e1}.dt-row-move{display:none}@media(pointer:coarse){.dt-grip{display:none}.dt-row-move{display:inline-flex;flex-direction:column;align-items:center}.dt-th-grip,.dt-td-grip{width:56px}}.dt-row-dragging{opacity:.45}.dt-row-over-before>td{box-shadow:inset 0 2px #3b82f6}.dt-row-over-after>td{box-shadow:inset 0 -2px #3b82f6}.dt-card-move{display:inline-flex;align-items:center;gap:2px;flex-shrink:0}@media(forced-colors:active){.dt-row-over-before>td{box-shadow:inset 0 2px 0 Highlight}.dt-row-over-after>td{box-shadow:inset 0 -2px 0 Highlight}.dt-grip:focus-visible{outline-color:Highlight}}.dt-row-selected{background:#eff6ff!important}.dt-row-selected:hover{background:#dbeafe!important}.dt-state-cell{padding:0!important;border:none!important;background:#fff!important}@media(max-width:1024px){th{padding:10px 12px}td{padding:11px 12px}.dt-sort-btn{padding:4px 0}.dt-td-actions{padding:6px}.dt-bulk-bar{align-self:stretch}}@media(max-width:820px){.dt-header-left{flex-basis:100%}.dt-header-right{flex-basis:100%;justify-content:flex-start}}@media(max-width:768px){th{padding:9px 10px;font-size:.8125rem}td{padding:10px;font-size:.8125rem}.dt-sk-search{width:100%}}@media(max-width:640px){.dt-header{flex-direction:column;flex-wrap:nowrap;flex-shrink:0;align-items:stretch}.dt-header-left,.dt-header-right{width:100%;flex-basis:auto}.dt-table-wrap{display:none}.dt-sk-search{width:100%}.dt-sk-toolbar{flex-direction:column;align-items:stretch;gap:8px}.dt-sk-toolbar-right{align-self:flex-end}.dt-bulk-bar{align-self:stretch;padding:10px 12px;row-gap:8px}.dt-bulk-count{flex:1 1 100%}.dt-bulk-actions{flex:1 1 auto;width:auto}.dt-bulk-hint{flex-basis:100%}.dt-bulk-actions ui-select{max-width:100%;flex:1}}.dt-confirm-msg{margin:0;font-size:.9375rem;color:#334155;line-height:1.5;overflow-wrap:anywhere;word-break:break-word;white-space:pre-line}.dt-confirm-details{margin:10px 0 0;padding-left:20px;font-size:.875rem;color:#64748b;line-height:1.5;overflow-wrap:anywhere;word-break:break-word}.dt-confirm-details li+li{margin-top:4px}ui-pagination{flex-shrink:0;--ui-pagination-bg: #f8fafc}.dt-phone-controls{display:flex;flex-direction:column;gap:8px;margin-bottom:8px;flex-shrink:0}.dt-phone-sort{display:flex;align-items:center;gap:8px}.dt-phone-sort-label{font-size:.8125rem;font-weight:600;color:#64748b;flex-shrink:0}.dt-phone-sort-select{flex:1;min-width:0;min-height:44px;box-sizing:border-box;padding:0 36px 0 12px;font-family:inherit;font-size:1rem;color:#1e293b;border:1px solid #7c8ba1;border-radius:8px;-webkit-appearance:none;appearance:none;background:#fff url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8' fill='none' stroke='%2394a3b8' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M1 1.5l5 5 5-5'/%3E%3C/svg%3E\") no-repeat right 12px center}.dt-phone-filters{display:flex;flex-wrap:wrap;gap:8px}.dt-card-list{display:none;flex-direction:column;gap:8px;flex:1;min-height:0;overflow-y:auto}@media(max-width:640px){.dt-card-list{display:flex;padding-bottom:8px}}.dt-card{background:#fff;border:1px solid #e2e8f0;border-radius:10px;contain:layout style;padding:14px 16px;display:flex;flex-direction:column;gap:10px;transition:background .1s}.dt-card:has(.mm-dropdown){position:relative;z-index:1}.dt-card-clickable{cursor:pointer}.dt-card-clickable:active{background:#f8fafc}.dt-card-clickable:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.dt-card-header{display:flex;align-items:center;gap:10px}.dt-card-title{display:flex;align-items:center;gap:10px;flex:1;min-width:0}.dt-card-name{min-width:0;font-weight:600;color:#1e293b;font-size:.9375rem;overflow:hidden;text-overflow:ellipsis;overflow-wrap:anywhere;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;line-clamp:3}.dt-card-name-plain{flex:1}.dt-card-actions{margin-left:auto;flex-shrink:0}.dt-card-badges{display:flex;flex-wrap:wrap;gap:6px}.dt-card-tags{display:flex;flex-wrap:wrap;gap:4px}.dt-card-details{display:flex;flex-direction:column;gap:5px}.dt-card-detail-row{display:flex;justify-content:space-between;align-items:baseline;gap:8px;font-size:.8125rem}.dt-card-detail-label{color:#64748b;flex-shrink:0}.dt-card-detail-value{color:#334155;font-weight:500;text-align:right;min-width:0;overflow-wrap:anywhere;word-break:break-word}.dt-card-sk{gap:12px}.dt-card-sk-header{display:flex;align-items:center;gap:10px}.dt-card-sk-badges{display:flex;gap:6px}.dt-card-sk-rows{display:flex;flex-direction:column;gap:8px}@media(prefers-reduced-motion:reduce){.dt-sk-shimmer:after,.dt-sk-cell:after{animation:none;transform:none;opacity:0}.dt-tag-tooltip{animation:none}.dt-sort-icon{transition:none}}\n"],
|
|
13706
|
+
styles: [":host{display:flex;flex-direction:column;flex:1;min-height:0}.dt-host{display:flex;flex-direction:column;height:100%;min-height:0}.dt-header{display:flex;align-items:center;gap:12px;margin-bottom:16px;flex-wrap:wrap;justify-content:space-between;position:relative;z-index:10}.dt-header-left{display:flex;align-items:center;gap:10px;flex-wrap:wrap;flex:1;min-width:0}.dt-header-right{display:flex;align-items:center;gap:8px;flex-shrink:0;flex-wrap:wrap;justify-content:flex-end}.dt-title{margin:0;font-size:.8125rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:#64748b;overflow-wrap:anywhere}.dt-sk-shimmer{position:relative;overflow:hidden;background:#f1f5f9}.dt-sk-shimmer:after{content:\"\";position:absolute;inset:0;background:linear-gradient(90deg,transparent 25%,rgba(255,255,255,.65) 50%,transparent 75%);transform:translate(-100%);animation:dt-shimmer 1.4s ease-in-out infinite}@keyframes dt-shimmer{to{transform:translate(200%)}}.dt-sk-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:16px}.dt-sk-toolbar-left{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.dt-sk-toolbar-right{display:flex;align-items:center;gap:8px;flex-shrink:0}.dt-sk-search{display:flex;align-items:center;gap:10px;width:380px;height:36px;padding:0 12px;border:1px solid #e2e8f0;border-radius:6px;background:#f8fafc;box-sizing:border-box}.dt-sk-search-icon{width:16px;height:16px;border-radius:50%;flex-shrink:0}.dt-sk-search-text{flex:1;height:11px;border-radius:4px}.dt-sk-tab-strip{display:flex;gap:2px;padding:3px;background:#f1f5f9;border-radius:8px}.dt-sk-tab{height:28px;width:70px;border-radius:6px}.dt-sk-icon-btn{width:32px;height:32px;border-radius:6px}.dt-skeleton{border:1px solid #e2e8f0;border-radius:10px;overflow:hidden}.dt-sk-header{display:flex;gap:24px;padding:12px 16px;background:#f8fafc;border-bottom:1px solid #e2e8f0}.dt-sk-row{display:flex;gap:24px;padding:13px 16px;border-bottom:1px solid #f1f5f9}.dt-sk-row:last-child{border-bottom:none}.dt-sk-cell{flex:1;height:13px;border-radius:4px;position:relative;overflow:hidden;background:#f1f5f9}.dt-sk-cell:first-child{max-width:100px}.dt-sk-cell:after{content:\"\";position:absolute;inset:0;background:linear-gradient(90deg,transparent 25%,rgba(255,255,255,.65) 50%,transparent 75%);transform:translate(-100%);animation:dt-shimmer 1.4s ease-in-out infinite}.dt-sk-head{height:10px}.dt-table-wrap{flex:1;min-height:0;overflow:auto;border:1px solid #e2e8f0;border-radius:10px 10px 0 0}.dt-sk-reload-row td{padding:10px 14px;border-bottom:1px solid #f1f5f9}table{width:100%;border-collapse:collapse;font-size:.875rem}thead tr{background:#f8fafc;border-bottom:1px solid #e2e8f0}thead{position:sticky;top:0;z-index:2}th{padding:10px 14px;font-size:.75rem;font-weight:600;color:#64748b;text-transform:uppercase;letter-spacing:.04em;white-space:nowrap;border-right:1px solid #e2e8f0;text-align:center;background:#f8fafc}th:last-child{border-right:none}th.dt-th-sorted{background:#f1f5f9}th.dt-th-actions{width:48px}.dt-th-inner{display:flex;align-items:center;justify-content:center;gap:4px}.dt-sort-btn{display:inline-flex;align-items:center;gap:4px;background:none;border:none;cursor:pointer;font-size:inherit;font-weight:inherit;color:inherit;font-family:inherit;padding:0;text-transform:inherit;letter-spacing:inherit}.dt-sort-btn:hover{color:#1e293b}.dt-sort-btn:focus-visible{outline:2px solid #60a5fa;outline-offset:2px;border-radius:2px}@media(pointer:coarse){.dt-sort-btn{position:relative}.dt-sort-btn:after{content:\"\";position:absolute;left:-4px;right:-4px;top:50%;height:44px;transform:translateY(-50%)}}.dt-sort-icon{transition:transform .15s}.dt-sort-desc{transform:rotate(180deg)}.dt-sort-inactive{opacity:.4}tbody tr{border-bottom:1px solid #f1f5f9;background:#fff;transition:background .1s}tbody tr:last-child{border-bottom:none}tbody tr:hover{background:#f8fafc}.dt-row-clickable{cursor:pointer}.dt-row-clickable:focus-visible{outline:2px solid #3b82f6;outline-offset:-2px}td{padding:10px 14px;color:#334155;vertical-align:middle;white-space:nowrap;border-right:1px solid #f1f5f9}td:last-child{border-right:none}.dt-td-actions{text-align:center;padding:6px 8px}.dt-sticky-actions th.dt-th-actions,.dt-sticky-actions td.dt-td-actions{position:sticky;right:0;box-shadow:-1px 0 #e2e8f0}.dt-sticky-actions th.dt-th-actions{z-index:3;background:#f8fafc}.dt-sticky-actions td.dt-td-actions{z-index:1;background:#fff}.dt-sticky-actions td.dt-td-actions:focus-within,.dt-sticky-actions td.dt-td-actions:has(.mm-dropdown){z-index:2}.dt-sticky-actions tbody tr:hover td.dt-td-actions{background:#f8fafc}.dt-sticky-actions tbody tr.dt-row-selected td.dt-td-actions{background:#eff6ff}.dt-sticky-actions tbody tr.dt-row-selected:hover td.dt-td-actions{background:#dbeafe}.dt-td-width{overflow:hidden;text-overflow:ellipsis}.dt-img{display:inline-block;vertical-align:middle;object-fit:cover;border:1px solid #e2e8f0;background:#f1f5f9;flex-shrink:0}.dt-img-ph{display:inline-flex;align-items:center;justify-content:center;vertical-align:middle;color:#94a3b8;background:#f1f5f9;border:1px solid #e2e8f0;flex-shrink:0}.dt-img-ph svg{width:55%;height:55%}.dt-img-circle-md{width:40px;height:40px;border-radius:50%}.dt-img-circle-sm{width:28px;height:28px;border-radius:50%}.dt-img-rounded-md{width:48px;height:32px;border-radius:6px}.dt-img-rounded-sm{width:36px;height:24px;border-radius:5px}.dt-avatar-name{display:flex;align-items:center;gap:8px}.dt-name-text{color:#1e293b}.dt-overdue{color:#dc2626;font-weight:500}.dt-none{color:#64748b}.dt-link{position:relative;display:inline-block;max-width:100%;padding:1px 2px;vertical-align:bottom;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#2563eb;text-decoration:none;border-radius:3px;cursor:pointer}.dt-link:hover{text-decoration:underline;color:#1d4ed8}.dt-link:focus-visible{outline:2px solid #3b82f6;outline-offset:-2px;text-decoration:underline}.dt-card-detail-value .dt-link,.dt-card-name .dt-link{white-space:normal;overflow-wrap:anywhere}.dt-sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.dt-tags{display:flex;align-items:center;gap:4px}.dt-tags-more{font-size:.75rem;font-weight:600;color:#475569;background:#f1f5f9;border-radius:999px;padding:2px 7px;cursor:default;-webkit-user-select:none;user-select:none;border:1px solid #e2e8f0}.dt-tags-more:focus-visible{outline:2px solid #60a5fa;outline-offset:2px;border-radius:999px}.dt-tag-tooltip{position:fixed;z-index:9999;pointer-events:none;background:#1e293b;border-radius:10px;padding:8px 10px;display:flex;flex-direction:column;gap:5px;box-shadow:0 4px 6px #0000000f,0 10px 24px #00000024;transform:translate(-50%) translateY(-100%);animation:dt-tip-in .12s ease;max-width:220px}@keyframes dt-tip-in{0%{opacity:0;transform:translate(-50%) translateY(calc(-100% + 4px))}to{opacity:1;transform:translate(-50%) translateY(-100%)}}.dt-cell-star{margin-right:6px}.dt-actions-cell{display:flex;align-items:center;justify-content:center}.dt-bulk-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;align-self:flex-start;padding:10px 14px;margin-bottom:8px;background:#eff6ff;border:1px solid #bfdbfe;border-radius:8px}.dt-bulk-count{font-size:.875rem;font-weight:600;color:#1e40af;white-space:nowrap;flex-shrink:0}.dt-bulk-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;flex:1;min-width:0}.dt-bulk-actions ui-select{max-width:180px;min-width:120px}.dt-bulk-hint{font-size:.8125rem;line-height:1.35;color:#475569}.dt-card-cb{display:flex;align-items:center;padding:0 0 6px}.dt-card-selected{background:#eff6ff!important;border-color:#bfdbfe!important}.dt-th-cb{width:44px;padding:0 10px!important;text-align:center!important;border-right:1px solid #e2e8f0;background:#f8fafc}.dt-td-cb{width:44px;padding:0 10px!important;text-align:center!important;border-right:1px solid #f1f5f9}.dt-th-grip{width:36px;padding:0!important;border-right:1px solid #e2e8f0;background:#f8fafc}.dt-td-grip{width:36px;padding:0!important;text-align:center!important;border-right:1px solid #f1f5f9}.dt-grip{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:6px;color:#64748b;cursor:grab;-webkit-user-select:none;user-select:none;touch-action:none}.dt-grip:hover{background:#f1f5f9;color:#334155}.dt-grip:active{cursor:grabbing}.dt-grip:focus-visible{outline:2px solid #3b82f6;outline-offset:1px}.dt-grip-off{color:#cbd5e1;cursor:not-allowed}.dt-grip-off:hover{background:none;color:#cbd5e1}.dt-row-move{display:none}@media(pointer:coarse){.dt-grip{display:none}.dt-row-move{display:inline-flex;flex-direction:column;align-items:center}.dt-th-grip,.dt-td-grip{width:56px}}.dt-row-dragging{opacity:.45}.dt-row-over-before>td{box-shadow:inset 0 2px #3b82f6}.dt-row-over-after>td{box-shadow:inset 0 -2px #3b82f6}.dt-card-move{display:inline-flex;align-items:center;gap:2px;flex-shrink:0}@media(forced-colors:active){.dt-row-over-before>td{box-shadow:inset 0 2px 0 Highlight}.dt-row-over-after>td{box-shadow:inset 0 -2px 0 Highlight}.dt-grip:focus-visible{outline-color:Highlight}}.dt-row-selected{background:#eff6ff!important}.dt-row-selected:hover{background:#dbeafe!important}.dt-state-cell{padding:0!important;border:none!important;background:#fff!important}@media(max-width:1024px){th{padding:10px 12px}td{padding:11px 12px}.dt-sort-btn{padding:4px 0}.dt-td-actions{padding:6px}.dt-bulk-bar{align-self:stretch}}@media(max-width:820px){.dt-header-left{flex-basis:100%}.dt-header-right{flex-basis:100%;justify-content:flex-start}}@media(max-width:768px){th{padding:9px 10px;font-size:.8125rem}td{padding:10px;font-size:.8125rem}.dt-sk-search{width:100%}}@media(max-width:640px){.dt-header{flex-direction:column;flex-wrap:nowrap;flex-shrink:0;align-items:stretch}.dt-header-left,.dt-header-right{width:100%;flex-basis:auto}.dt-table-wrap{display:none}.dt-sk-search{width:100%}.dt-sk-toolbar{flex-direction:column;align-items:stretch;gap:8px}.dt-sk-toolbar-right{align-self:flex-end}.dt-bulk-bar{align-self:stretch;padding:10px 12px;row-gap:8px}.dt-bulk-count{flex:1 1 100%}.dt-bulk-actions{flex:1 1 auto;width:auto}.dt-bulk-hint{flex-basis:100%}.dt-bulk-actions ui-select{max-width:100%;flex:1}}.dt-confirm-msg{margin:0;font-size:.9375rem;color:#334155;line-height:1.5;overflow-wrap:anywhere;word-break:break-word;white-space:pre-line}.dt-confirm-details{margin:10px 0 0;padding-left:20px;font-size:.875rem;color:#64748b;line-height:1.5;overflow-wrap:anywhere;word-break:break-word}.dt-confirm-details li+li{margin-top:4px}ui-pagination{flex-shrink:0;--ui-pagination-bg: #f8fafc}.dt-phone-controls{display:flex;flex-direction:column;gap:8px;margin-bottom:8px;flex-shrink:0}.dt-phone-sort{display:flex;align-items:center;gap:8px}.dt-phone-sort-label{font-size:.8125rem;font-weight:600;color:#475569;flex-shrink:0}.dt-phone-sort-select{flex:1;min-width:0;min-height:44px;box-sizing:border-box;padding:0 36px 0 12px;font-family:inherit;font-size:1rem;color:#1e293b;border:1px solid #7c8ba1;border-radius:8px;-webkit-appearance:none;appearance:none;background:#fff url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8' fill='none' stroke='%2394a3b8' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M1 1.5l5 5 5-5'/%3E%3C/svg%3E\") no-repeat right 12px center}.dt-phone-filters{display:flex;flex-wrap:wrap;gap:8px}.dt-card-list{display:none;flex-direction:column;gap:8px;flex:1;min-height:0;overflow-y:auto}@media(max-width:640px){.dt-card-list{display:flex;padding-bottom:8px}}.dt-card{background:#fff;border:1px solid #e2e8f0;border-radius:10px;contain:layout style;padding:14px 16px;display:flex;flex-direction:column;gap:10px;transition:background .1s}.dt-card:has(.mm-dropdown){position:relative;z-index:1}.dt-card-clickable{cursor:pointer}.dt-card-clickable:active{background:#f8fafc}.dt-card-clickable:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.dt-card-header{display:flex;align-items:center;gap:10px}.dt-card-title{display:flex;align-items:center;gap:10px;flex:1;min-width:0}.dt-card-name{min-width:0;font-weight:600;color:#1e293b;font-size:.9375rem;overflow:hidden;text-overflow:ellipsis;overflow-wrap:anywhere;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;line-clamp:3}.dt-card-name-plain{flex:1}.dt-card-actions{margin-left:auto;flex-shrink:0}.dt-card-badges{display:flex;flex-wrap:wrap;gap:6px}.dt-card-tags{display:flex;flex-wrap:wrap;gap:4px}.dt-card-details{display:flex;flex-direction:column;gap:5px}.dt-card-detail-row{display:flex;justify-content:space-between;align-items:baseline;gap:8px;font-size:.8125rem}.dt-card-detail-label{color:#64748b;flex-shrink:0}.dt-card-detail-value{color:#334155;font-weight:500;text-align:right;min-width:0;overflow-wrap:anywhere;word-break:break-word}.dt-card-sk{gap:12px}.dt-card-sk-header{display:flex;align-items:center;gap:10px}.dt-card-sk-badges{display:flex;gap:6px}.dt-card-sk-rows{display:flex;flex-direction:column;gap:8px}@media(prefers-reduced-motion:reduce){.dt-sk-shimmer:after,.dt-sk-cell:after{animation:none;transform:none;opacity:0}.dt-tag-tooltip{animation:none}.dt-sort-icon{transition:none}}\n"],
|
|
13692
13707
|
dependencies: [
|
|
13693
13708
|
{
|
|
13694
13709
|
kind: "directive",
|
|
@@ -14533,7 +14548,8 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
14533
14548
|
}
|
|
14534
14549
|
</div>
|
|
14535
14550
|
}
|
|
14536
|
-
|
|
14551
|
+
<!-- role=list only while it holds listitems (cards or skeleton cards); empty / error / no-match states are not an empty list -->
|
|
14552
|
+
<div class="dt-card-list" [attr.role]="_cardListHasItems() ? 'list' : null" [attr.aria-label]="_cardListHasItems() ? tableLabel() : null">
|
|
14537
14553
|
|
|
14538
14554
|
@if (_loading()) {
|
|
14539
14555
|
@for (_ of skeletonRows(); track $index) {
|
|
@@ -14760,7 +14776,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
14760
14776
|
}
|
|
14761
14777
|
</div>
|
|
14762
14778
|
`,
|
|
14763
|
-
styles: [":host{display:flex;flex-direction:column;flex:1;min-height:0}.dt-host{display:flex;flex-direction:column;height:100%;min-height:0}.dt-header{display:flex;align-items:center;gap:12px;margin-bottom:16px;flex-wrap:wrap;justify-content:space-between;position:relative;z-index:10}.dt-header-left{display:flex;align-items:center;gap:10px;flex-wrap:wrap;flex:1;min-width:0}.dt-header-right{display:flex;align-items:center;gap:8px;flex-shrink:0;flex-wrap:wrap;justify-content:flex-end}.dt-title{margin:0;font-size:.8125rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:#64748b;overflow-wrap:anywhere}.dt-sk-shimmer{position:relative;overflow:hidden;background:#f1f5f9}.dt-sk-shimmer:after{content:\"\";position:absolute;inset:0;background:linear-gradient(90deg,transparent 25%,rgba(255,255,255,.65) 50%,transparent 75%);transform:translate(-100%);animation:dt-shimmer 1.4s ease-in-out infinite}@keyframes dt-shimmer{to{transform:translate(200%)}}.dt-sk-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:16px}.dt-sk-toolbar-left{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.dt-sk-toolbar-right{display:flex;align-items:center;gap:8px;flex-shrink:0}.dt-sk-search{display:flex;align-items:center;gap:10px;width:380px;height:36px;padding:0 12px;border:1px solid #e2e8f0;border-radius:6px;background:#f8fafc;box-sizing:border-box}.dt-sk-search-icon{width:16px;height:16px;border-radius:50%;flex-shrink:0}.dt-sk-search-text{flex:1;height:11px;border-radius:4px}.dt-sk-tab-strip{display:flex;gap:2px;padding:3px;background:#f1f5f9;border-radius:8px}.dt-sk-tab{height:28px;width:70px;border-radius:6px}.dt-sk-icon-btn{width:32px;height:32px;border-radius:6px}.dt-skeleton{border:1px solid #e2e8f0;border-radius:10px;overflow:hidden}.dt-sk-header{display:flex;gap:24px;padding:12px 16px;background:#f8fafc;border-bottom:1px solid #e2e8f0}.dt-sk-row{display:flex;gap:24px;padding:13px 16px;border-bottom:1px solid #f1f5f9}.dt-sk-row:last-child{border-bottom:none}.dt-sk-cell{flex:1;height:13px;border-radius:4px;position:relative;overflow:hidden;background:#f1f5f9}.dt-sk-cell:first-child{max-width:100px}.dt-sk-cell:after{content:\"\";position:absolute;inset:0;background:linear-gradient(90deg,transparent 25%,rgba(255,255,255,.65) 50%,transparent 75%);transform:translate(-100%);animation:dt-shimmer 1.4s ease-in-out infinite}.dt-sk-head{height:10px}.dt-table-wrap{flex:1;min-height:0;overflow:auto;border:1px solid #e2e8f0;border-radius:10px 10px 0 0}.dt-sk-reload-row td{padding:10px 14px;border-bottom:1px solid #f1f5f9}table{width:100%;border-collapse:collapse;font-size:.875rem}thead tr{background:#f8fafc;border-bottom:1px solid #e2e8f0}thead{position:sticky;top:0;z-index:2}th{padding:10px 14px;font-size:.75rem;font-weight:600;color:#64748b;text-transform:uppercase;letter-spacing:.04em;white-space:nowrap;border-right:1px solid #e2e8f0;text-align:center;background:#f8fafc}th:last-child{border-right:none}th.dt-th-sorted{background:#f1f5f9}th.dt-th-actions{width:48px}.dt-th-inner{display:flex;align-items:center;justify-content:center;gap:4px}.dt-sort-btn{display:inline-flex;align-items:center;gap:4px;background:none;border:none;cursor:pointer;font-size:inherit;font-weight:inherit;color:inherit;font-family:inherit;padding:0;text-transform:inherit;letter-spacing:inherit}.dt-sort-btn:hover{color:#1e293b}.dt-sort-btn:focus-visible{outline:2px solid #60a5fa;outline-offset:2px;border-radius:2px}@media(pointer:coarse){.dt-sort-btn{position:relative}.dt-sort-btn:after{content:\"\";position:absolute;left:-4px;right:-4px;top:50%;height:44px;transform:translateY(-50%)}}.dt-sort-icon{transition:transform .15s}.dt-sort-desc{transform:rotate(180deg)}.dt-sort-inactive{opacity:.4}tbody tr{border-bottom:1px solid #f1f5f9;background:#fff;transition:background .1s}tbody tr:last-child{border-bottom:none}tbody tr:hover{background:#f8fafc}.dt-row-clickable{cursor:pointer}.dt-row-clickable:focus-visible{outline:2px solid #3b82f6;outline-offset:-2px}td{padding:10px 14px;color:#334155;vertical-align:middle;white-space:nowrap;border-right:1px solid #f1f5f9}td:last-child{border-right:none}.dt-td-actions{text-align:center;padding:6px 8px}.dt-sticky-actions th.dt-th-actions,.dt-sticky-actions td.dt-td-actions{position:sticky;right:0;box-shadow:-1px 0 #e2e8f0}.dt-sticky-actions th.dt-th-actions{z-index:3;background:#f8fafc}.dt-sticky-actions td.dt-td-actions{z-index:1;background:#fff}.dt-sticky-actions td.dt-td-actions:focus-within,.dt-sticky-actions td.dt-td-actions:has(.mm-dropdown){z-index:2}.dt-sticky-actions tbody tr:hover td.dt-td-actions{background:#f8fafc}.dt-sticky-actions tbody tr.dt-row-selected td.dt-td-actions{background:#eff6ff}.dt-sticky-actions tbody tr.dt-row-selected:hover td.dt-td-actions{background:#dbeafe}.dt-td-width{overflow:hidden;text-overflow:ellipsis}.dt-img{display:inline-block;vertical-align:middle;object-fit:cover;border:1px solid #e2e8f0;background:#f1f5f9;flex-shrink:0}.dt-img-ph{display:inline-flex;align-items:center;justify-content:center;vertical-align:middle;color:#94a3b8;background:#f1f5f9;border:1px solid #e2e8f0;flex-shrink:0}.dt-img-ph svg{width:55%;height:55%}.dt-img-circle-md{width:40px;height:40px;border-radius:50%}.dt-img-circle-sm{width:28px;height:28px;border-radius:50%}.dt-img-rounded-md{width:48px;height:32px;border-radius:6px}.dt-img-rounded-sm{width:36px;height:24px;border-radius:5px}.dt-avatar-name{display:flex;align-items:center;gap:8px}.dt-name-text{color:#1e293b}.dt-overdue{color:#dc2626;font-weight:500}.dt-none{color:#94a3b8}.dt-link{position:relative;display:inline-block;max-width:100%;padding:1px 2px;vertical-align:bottom;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#2563eb;text-decoration:none;border-radius:3px;cursor:pointer}.dt-link:hover{text-decoration:underline;color:#1d4ed8}.dt-link:focus-visible{outline:2px solid #3b82f6;outline-offset:-2px;text-decoration:underline}.dt-card-detail-value .dt-link,.dt-card-name .dt-link{white-space:normal;overflow-wrap:anywhere}.dt-sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.dt-tags{display:flex;align-items:center;gap:4px}.dt-tags-more{font-size:.75rem;font-weight:600;color:#475569;background:#f1f5f9;border-radius:999px;padding:2px 7px;cursor:default;-webkit-user-select:none;user-select:none;border:1px solid #e2e8f0}.dt-tags-more:focus-visible{outline:2px solid #60a5fa;outline-offset:2px;border-radius:999px}.dt-tag-tooltip{position:fixed;z-index:9999;pointer-events:none;background:#1e293b;border-radius:10px;padding:8px 10px;display:flex;flex-direction:column;gap:5px;box-shadow:0 4px 6px #0000000f,0 10px 24px #00000024;transform:translate(-50%) translateY(-100%);animation:dt-tip-in .12s ease;max-width:220px}@keyframes dt-tip-in{0%{opacity:0;transform:translate(-50%) translateY(calc(-100% + 4px))}to{opacity:1;transform:translate(-50%) translateY(-100%)}}.dt-cell-star{margin-right:6px}.dt-actions-cell{display:flex;align-items:center;justify-content:center}.dt-bulk-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;align-self:flex-start;padding:10px 14px;margin-bottom:8px;background:#eff6ff;border:1px solid #bfdbfe;border-radius:8px}.dt-bulk-count{font-size:.875rem;font-weight:600;color:#1e40af;white-space:nowrap;flex-shrink:0}.dt-bulk-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;flex:1;min-width:0}.dt-bulk-actions ui-select{max-width:180px;min-width:120px}.dt-bulk-hint{font-size:.8125rem;line-height:1.35;color:#475569}.dt-card-cb{display:flex;align-items:center;padding:0 0 6px}.dt-card-selected{background:#eff6ff!important;border-color:#bfdbfe!important}.dt-th-cb{width:44px;padding:0 10px!important;text-align:center!important;border-right:1px solid #e2e8f0;background:#f8fafc}.dt-td-cb{width:44px;padding:0 10px!important;text-align:center!important;border-right:1px solid #f1f5f9}.dt-th-grip{width:36px;padding:0!important;border-right:1px solid #e2e8f0;background:#f8fafc}.dt-td-grip{width:36px;padding:0!important;text-align:center!important;border-right:1px solid #f1f5f9}.dt-grip{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:6px;color:#64748b;cursor:grab;-webkit-user-select:none;user-select:none;touch-action:none}.dt-grip:hover{background:#f1f5f9;color:#334155}.dt-grip:active{cursor:grabbing}.dt-grip:focus-visible{outline:2px solid #3b82f6;outline-offset:1px}.dt-grip-off{color:#cbd5e1;cursor:not-allowed}.dt-grip-off:hover{background:none;color:#cbd5e1}.dt-row-move{display:none}@media(pointer:coarse){.dt-grip{display:none}.dt-row-move{display:inline-flex;flex-direction:column;align-items:center}.dt-th-grip,.dt-td-grip{width:56px}}.dt-row-dragging{opacity:.45}.dt-row-over-before>td{box-shadow:inset 0 2px #3b82f6}.dt-row-over-after>td{box-shadow:inset 0 -2px #3b82f6}.dt-card-move{display:inline-flex;align-items:center;gap:2px;flex-shrink:0}@media(forced-colors:active){.dt-row-over-before>td{box-shadow:inset 0 2px 0 Highlight}.dt-row-over-after>td{box-shadow:inset 0 -2px 0 Highlight}.dt-grip:focus-visible{outline-color:Highlight}}.dt-row-selected{background:#eff6ff!important}.dt-row-selected:hover{background:#dbeafe!important}.dt-state-cell{padding:0!important;border:none!important;background:#fff!important}@media(max-width:1024px){th{padding:10px 12px}td{padding:11px 12px}.dt-sort-btn{padding:4px 0}.dt-td-actions{padding:6px}.dt-bulk-bar{align-self:stretch}}@media(max-width:820px){.dt-header-left{flex-basis:100%}.dt-header-right{flex-basis:100%;justify-content:flex-start}}@media(max-width:768px){th{padding:9px 10px;font-size:.8125rem}td{padding:10px;font-size:.8125rem}.dt-sk-search{width:100%}}@media(max-width:640px){.dt-header{flex-direction:column;flex-wrap:nowrap;flex-shrink:0;align-items:stretch}.dt-header-left,.dt-header-right{width:100%;flex-basis:auto}.dt-table-wrap{display:none}.dt-sk-search{width:100%}.dt-sk-toolbar{flex-direction:column;align-items:stretch;gap:8px}.dt-sk-toolbar-right{align-self:flex-end}.dt-bulk-bar{align-self:stretch;padding:10px 12px;row-gap:8px}.dt-bulk-count{flex:1 1 100%}.dt-bulk-actions{flex:1 1 auto;width:auto}.dt-bulk-hint{flex-basis:100%}.dt-bulk-actions ui-select{max-width:100%;flex:1}}.dt-confirm-msg{margin:0;font-size:.9375rem;color:#334155;line-height:1.5;overflow-wrap:anywhere;word-break:break-word;white-space:pre-line}.dt-confirm-details{margin:10px 0 0;padding-left:20px;font-size:.875rem;color:#64748b;line-height:1.5;overflow-wrap:anywhere;word-break:break-word}.dt-confirm-details li+li{margin-top:4px}ui-pagination{flex-shrink:0;--ui-pagination-bg: #f8fafc}.dt-phone-controls{display:flex;flex-direction:column;gap:8px;margin-bottom:8px;flex-shrink:0}.dt-phone-sort{display:flex;align-items:center;gap:8px}.dt-phone-sort-label{font-size:.8125rem;font-weight:600;color:#64748b;flex-shrink:0}.dt-phone-sort-select{flex:1;min-width:0;min-height:44px;box-sizing:border-box;padding:0 36px 0 12px;font-family:inherit;font-size:1rem;color:#1e293b;border:1px solid #7c8ba1;border-radius:8px;-webkit-appearance:none;appearance:none;background:#fff url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8' fill='none' stroke='%2394a3b8' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M1 1.5l5 5 5-5'/%3E%3C/svg%3E\") no-repeat right 12px center}.dt-phone-filters{display:flex;flex-wrap:wrap;gap:8px}.dt-card-list{display:none;flex-direction:column;gap:8px;flex:1;min-height:0;overflow-y:auto}@media(max-width:640px){.dt-card-list{display:flex;padding-bottom:8px}}.dt-card{background:#fff;border:1px solid #e2e8f0;border-radius:10px;contain:layout style;padding:14px 16px;display:flex;flex-direction:column;gap:10px;transition:background .1s}.dt-card:has(.mm-dropdown){position:relative;z-index:1}.dt-card-clickable{cursor:pointer}.dt-card-clickable:active{background:#f8fafc}.dt-card-clickable:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.dt-card-header{display:flex;align-items:center;gap:10px}.dt-card-title{display:flex;align-items:center;gap:10px;flex:1;min-width:0}.dt-card-name{min-width:0;font-weight:600;color:#1e293b;font-size:.9375rem;overflow:hidden;text-overflow:ellipsis;overflow-wrap:anywhere;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;line-clamp:3}.dt-card-name-plain{flex:1}.dt-card-actions{margin-left:auto;flex-shrink:0}.dt-card-badges{display:flex;flex-wrap:wrap;gap:6px}.dt-card-tags{display:flex;flex-wrap:wrap;gap:4px}.dt-card-details{display:flex;flex-direction:column;gap:5px}.dt-card-detail-row{display:flex;justify-content:space-between;align-items:baseline;gap:8px;font-size:.8125rem}.dt-card-detail-label{color:#64748b;flex-shrink:0}.dt-card-detail-value{color:#334155;font-weight:500;text-align:right;min-width:0;overflow-wrap:anywhere;word-break:break-word}.dt-card-sk{gap:12px}.dt-card-sk-header{display:flex;align-items:center;gap:10px}.dt-card-sk-badges{display:flex;gap:6px}.dt-card-sk-rows{display:flex;flex-direction:column;gap:8px}@media(prefers-reduced-motion:reduce){.dt-sk-shimmer:after,.dt-sk-cell:after{animation:none;transform:none;opacity:0}.dt-tag-tooltip{animation:none}.dt-sort-icon{transition:none}}\n"]
|
|
14779
|
+
styles: [":host{display:flex;flex-direction:column;flex:1;min-height:0}.dt-host{display:flex;flex-direction:column;height:100%;min-height:0}.dt-header{display:flex;align-items:center;gap:12px;margin-bottom:16px;flex-wrap:wrap;justify-content:space-between;position:relative;z-index:10}.dt-header-left{display:flex;align-items:center;gap:10px;flex-wrap:wrap;flex:1;min-width:0}.dt-header-right{display:flex;align-items:center;gap:8px;flex-shrink:0;flex-wrap:wrap;justify-content:flex-end}.dt-title{margin:0;font-size:.8125rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:#64748b;overflow-wrap:anywhere}.dt-sk-shimmer{position:relative;overflow:hidden;background:#f1f5f9}.dt-sk-shimmer:after{content:\"\";position:absolute;inset:0;background:linear-gradient(90deg,transparent 25%,rgba(255,255,255,.65) 50%,transparent 75%);transform:translate(-100%);animation:dt-shimmer 1.4s ease-in-out infinite}@keyframes dt-shimmer{to{transform:translate(200%)}}.dt-sk-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:16px}.dt-sk-toolbar-left{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.dt-sk-toolbar-right{display:flex;align-items:center;gap:8px;flex-shrink:0}.dt-sk-search{display:flex;align-items:center;gap:10px;width:380px;height:36px;padding:0 12px;border:1px solid #e2e8f0;border-radius:6px;background:#f8fafc;box-sizing:border-box}.dt-sk-search-icon{width:16px;height:16px;border-radius:50%;flex-shrink:0}.dt-sk-search-text{flex:1;height:11px;border-radius:4px}.dt-sk-tab-strip{display:flex;gap:2px;padding:3px;background:#f1f5f9;border-radius:8px}.dt-sk-tab{height:28px;width:70px;border-radius:6px}.dt-sk-icon-btn{width:32px;height:32px;border-radius:6px}.dt-skeleton{border:1px solid #e2e8f0;border-radius:10px;overflow:hidden}.dt-sk-header{display:flex;gap:24px;padding:12px 16px;background:#f8fafc;border-bottom:1px solid #e2e8f0}.dt-sk-row{display:flex;gap:24px;padding:13px 16px;border-bottom:1px solid #f1f5f9}.dt-sk-row:last-child{border-bottom:none}.dt-sk-cell{flex:1;height:13px;border-radius:4px;position:relative;overflow:hidden;background:#f1f5f9}.dt-sk-cell:first-child{max-width:100px}.dt-sk-cell:after{content:\"\";position:absolute;inset:0;background:linear-gradient(90deg,transparent 25%,rgba(255,255,255,.65) 50%,transparent 75%);transform:translate(-100%);animation:dt-shimmer 1.4s ease-in-out infinite}.dt-sk-head{height:10px}.dt-table-wrap{flex:1;min-height:0;overflow:auto;border:1px solid #e2e8f0;border-radius:10px 10px 0 0}.dt-sk-reload-row td{padding:10px 14px;border-bottom:1px solid #f1f5f9}table{width:100%;border-collapse:collapse;font-size:.875rem}thead tr{background:#f8fafc;border-bottom:1px solid #e2e8f0}thead{position:sticky;top:0;z-index:2}th{padding:10px 14px;font-size:.75rem;font-weight:600;color:#64748b;text-transform:uppercase;letter-spacing:.04em;white-space:nowrap;border-right:1px solid #e2e8f0;text-align:center;background:#f8fafc}th:last-child{border-right:none}th.dt-th-sorted{background:#f1f5f9}th.dt-th-actions{width:48px}.dt-th-inner{display:flex;align-items:center;justify-content:center;gap:4px}.dt-sort-btn{display:inline-flex;align-items:center;gap:4px;background:none;border:none;cursor:pointer;font-size:inherit;font-weight:inherit;color:inherit;font-family:inherit;padding:0;text-transform:inherit;letter-spacing:inherit}.dt-sort-btn:hover{color:#1e293b}.dt-sort-btn:focus-visible{outline:2px solid #60a5fa;outline-offset:2px;border-radius:2px}@media(pointer:coarse){.dt-sort-btn{position:relative}.dt-sort-btn:after{content:\"\";position:absolute;left:-4px;right:-4px;top:50%;height:44px;transform:translateY(-50%)}}.dt-sort-icon{transition:transform .15s}.dt-sort-desc{transform:rotate(180deg)}.dt-sort-inactive{opacity:.4}tbody tr{border-bottom:1px solid #f1f5f9;background:#fff;transition:background .1s}tbody tr:last-child{border-bottom:none}tbody tr:hover{background:#f8fafc}.dt-row-clickable{cursor:pointer}.dt-row-clickable:focus-visible{outline:2px solid #3b82f6;outline-offset:-2px}td{padding:10px 14px;color:#334155;vertical-align:middle;white-space:nowrap;border-right:1px solid #f1f5f9}td:last-child{border-right:none}.dt-td-actions{text-align:center;padding:6px 8px}.dt-sticky-actions th.dt-th-actions,.dt-sticky-actions td.dt-td-actions{position:sticky;right:0;box-shadow:-1px 0 #e2e8f0}.dt-sticky-actions th.dt-th-actions{z-index:3;background:#f8fafc}.dt-sticky-actions td.dt-td-actions{z-index:1;background:#fff}.dt-sticky-actions td.dt-td-actions:focus-within,.dt-sticky-actions td.dt-td-actions:has(.mm-dropdown){z-index:2}.dt-sticky-actions tbody tr:hover td.dt-td-actions{background:#f8fafc}.dt-sticky-actions tbody tr.dt-row-selected td.dt-td-actions{background:#eff6ff}.dt-sticky-actions tbody tr.dt-row-selected:hover td.dt-td-actions{background:#dbeafe}.dt-td-width{overflow:hidden;text-overflow:ellipsis}.dt-img{display:inline-block;vertical-align:middle;object-fit:cover;border:1px solid #e2e8f0;background:#f1f5f9;flex-shrink:0}.dt-img-ph{display:inline-flex;align-items:center;justify-content:center;vertical-align:middle;color:#94a3b8;background:#f1f5f9;border:1px solid #e2e8f0;flex-shrink:0}.dt-img-ph svg{width:55%;height:55%}.dt-img-circle-md{width:40px;height:40px;border-radius:50%}.dt-img-circle-sm{width:28px;height:28px;border-radius:50%}.dt-img-rounded-md{width:48px;height:32px;border-radius:6px}.dt-img-rounded-sm{width:36px;height:24px;border-radius:5px}.dt-avatar-name{display:flex;align-items:center;gap:8px}.dt-name-text{color:#1e293b}.dt-overdue{color:#dc2626;font-weight:500}.dt-none{color:#64748b}.dt-link{position:relative;display:inline-block;max-width:100%;padding:1px 2px;vertical-align:bottom;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#2563eb;text-decoration:none;border-radius:3px;cursor:pointer}.dt-link:hover{text-decoration:underline;color:#1d4ed8}.dt-link:focus-visible{outline:2px solid #3b82f6;outline-offset:-2px;text-decoration:underline}.dt-card-detail-value .dt-link,.dt-card-name .dt-link{white-space:normal;overflow-wrap:anywhere}.dt-sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.dt-tags{display:flex;align-items:center;gap:4px}.dt-tags-more{font-size:.75rem;font-weight:600;color:#475569;background:#f1f5f9;border-radius:999px;padding:2px 7px;cursor:default;-webkit-user-select:none;user-select:none;border:1px solid #e2e8f0}.dt-tags-more:focus-visible{outline:2px solid #60a5fa;outline-offset:2px;border-radius:999px}.dt-tag-tooltip{position:fixed;z-index:9999;pointer-events:none;background:#1e293b;border-radius:10px;padding:8px 10px;display:flex;flex-direction:column;gap:5px;box-shadow:0 4px 6px #0000000f,0 10px 24px #00000024;transform:translate(-50%) translateY(-100%);animation:dt-tip-in .12s ease;max-width:220px}@keyframes dt-tip-in{0%{opacity:0;transform:translate(-50%) translateY(calc(-100% + 4px))}to{opacity:1;transform:translate(-50%) translateY(-100%)}}.dt-cell-star{margin-right:6px}.dt-actions-cell{display:flex;align-items:center;justify-content:center}.dt-bulk-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;align-self:flex-start;padding:10px 14px;margin-bottom:8px;background:#eff6ff;border:1px solid #bfdbfe;border-radius:8px}.dt-bulk-count{font-size:.875rem;font-weight:600;color:#1e40af;white-space:nowrap;flex-shrink:0}.dt-bulk-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;flex:1;min-width:0}.dt-bulk-actions ui-select{max-width:180px;min-width:120px}.dt-bulk-hint{font-size:.8125rem;line-height:1.35;color:#475569}.dt-card-cb{display:flex;align-items:center;padding:0 0 6px}.dt-card-selected{background:#eff6ff!important;border-color:#bfdbfe!important}.dt-th-cb{width:44px;padding:0 10px!important;text-align:center!important;border-right:1px solid #e2e8f0;background:#f8fafc}.dt-td-cb{width:44px;padding:0 10px!important;text-align:center!important;border-right:1px solid #f1f5f9}.dt-th-grip{width:36px;padding:0!important;border-right:1px solid #e2e8f0;background:#f8fafc}.dt-td-grip{width:36px;padding:0!important;text-align:center!important;border-right:1px solid #f1f5f9}.dt-grip{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:6px;color:#64748b;cursor:grab;-webkit-user-select:none;user-select:none;touch-action:none}.dt-grip:hover{background:#f1f5f9;color:#334155}.dt-grip:active{cursor:grabbing}.dt-grip:focus-visible{outline:2px solid #3b82f6;outline-offset:1px}.dt-grip-off{color:#cbd5e1;cursor:not-allowed}.dt-grip-off:hover{background:none;color:#cbd5e1}.dt-row-move{display:none}@media(pointer:coarse){.dt-grip{display:none}.dt-row-move{display:inline-flex;flex-direction:column;align-items:center}.dt-th-grip,.dt-td-grip{width:56px}}.dt-row-dragging{opacity:.45}.dt-row-over-before>td{box-shadow:inset 0 2px #3b82f6}.dt-row-over-after>td{box-shadow:inset 0 -2px #3b82f6}.dt-card-move{display:inline-flex;align-items:center;gap:2px;flex-shrink:0}@media(forced-colors:active){.dt-row-over-before>td{box-shadow:inset 0 2px 0 Highlight}.dt-row-over-after>td{box-shadow:inset 0 -2px 0 Highlight}.dt-grip:focus-visible{outline-color:Highlight}}.dt-row-selected{background:#eff6ff!important}.dt-row-selected:hover{background:#dbeafe!important}.dt-state-cell{padding:0!important;border:none!important;background:#fff!important}@media(max-width:1024px){th{padding:10px 12px}td{padding:11px 12px}.dt-sort-btn{padding:4px 0}.dt-td-actions{padding:6px}.dt-bulk-bar{align-self:stretch}}@media(max-width:820px){.dt-header-left{flex-basis:100%}.dt-header-right{flex-basis:100%;justify-content:flex-start}}@media(max-width:768px){th{padding:9px 10px;font-size:.8125rem}td{padding:10px;font-size:.8125rem}.dt-sk-search{width:100%}}@media(max-width:640px){.dt-header{flex-direction:column;flex-wrap:nowrap;flex-shrink:0;align-items:stretch}.dt-header-left,.dt-header-right{width:100%;flex-basis:auto}.dt-table-wrap{display:none}.dt-sk-search{width:100%}.dt-sk-toolbar{flex-direction:column;align-items:stretch;gap:8px}.dt-sk-toolbar-right{align-self:flex-end}.dt-bulk-bar{align-self:stretch;padding:10px 12px;row-gap:8px}.dt-bulk-count{flex:1 1 100%}.dt-bulk-actions{flex:1 1 auto;width:auto}.dt-bulk-hint{flex-basis:100%}.dt-bulk-actions ui-select{max-width:100%;flex:1}}.dt-confirm-msg{margin:0;font-size:.9375rem;color:#334155;line-height:1.5;overflow-wrap:anywhere;word-break:break-word;white-space:pre-line}.dt-confirm-details{margin:10px 0 0;padding-left:20px;font-size:.875rem;color:#64748b;line-height:1.5;overflow-wrap:anywhere;word-break:break-word}.dt-confirm-details li+li{margin-top:4px}ui-pagination{flex-shrink:0;--ui-pagination-bg: #f8fafc}.dt-phone-controls{display:flex;flex-direction:column;gap:8px;margin-bottom:8px;flex-shrink:0}.dt-phone-sort{display:flex;align-items:center;gap:8px}.dt-phone-sort-label{font-size:.8125rem;font-weight:600;color:#475569;flex-shrink:0}.dt-phone-sort-select{flex:1;min-width:0;min-height:44px;box-sizing:border-box;padding:0 36px 0 12px;font-family:inherit;font-size:1rem;color:#1e293b;border:1px solid #7c8ba1;border-radius:8px;-webkit-appearance:none;appearance:none;background:#fff url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8' fill='none' stroke='%2394a3b8' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M1 1.5l5 5 5-5'/%3E%3C/svg%3E\") no-repeat right 12px center}.dt-phone-filters{display:flex;flex-wrap:wrap;gap:8px}.dt-card-list{display:none;flex-direction:column;gap:8px;flex:1;min-height:0;overflow-y:auto}@media(max-width:640px){.dt-card-list{display:flex;padding-bottom:8px}}.dt-card{background:#fff;border:1px solid #e2e8f0;border-radius:10px;contain:layout style;padding:14px 16px;display:flex;flex-direction:column;gap:10px;transition:background .1s}.dt-card:has(.mm-dropdown){position:relative;z-index:1}.dt-card-clickable{cursor:pointer}.dt-card-clickable:active{background:#f8fafc}.dt-card-clickable:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.dt-card-header{display:flex;align-items:center;gap:10px}.dt-card-title{display:flex;align-items:center;gap:10px;flex:1;min-width:0}.dt-card-name{min-width:0;font-weight:600;color:#1e293b;font-size:.9375rem;overflow:hidden;text-overflow:ellipsis;overflow-wrap:anywhere;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;line-clamp:3}.dt-card-name-plain{flex:1}.dt-card-actions{margin-left:auto;flex-shrink:0}.dt-card-badges{display:flex;flex-wrap:wrap;gap:6px}.dt-card-tags{display:flex;flex-wrap:wrap;gap:4px}.dt-card-details{display:flex;flex-direction:column;gap:5px}.dt-card-detail-row{display:flex;justify-content:space-between;align-items:baseline;gap:8px;font-size:.8125rem}.dt-card-detail-label{color:#64748b;flex-shrink:0}.dt-card-detail-value{color:#334155;font-weight:500;text-align:right;min-width:0;overflow-wrap:anywhere;word-break:break-word}.dt-card-sk{gap:12px}.dt-card-sk-header{display:flex;align-items:center;gap:10px}.dt-card-sk-badges{display:flex;gap:6px}.dt-card-sk-rows{display:flex;flex-direction:column;gap:8px}@media(prefers-reduced-motion:reduce){.dt-sk-shimmer:after,.dt-sk-cell:after{animation:none;transform:none;opacity:0}.dt-tag-tooltip{animation:none}.dt-sort-icon{transition:none}}\n"]
|
|
14764
14780
|
}]
|
|
14765
14781
|
}],
|
|
14766
14782
|
ctorParameters: () => [],
|
|
@@ -19991,7 +20007,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
19991
20007
|
}
|
|
19992
20008
|
});
|
|
19993
20009
|
let nextPickerId = 0;
|
|
19994
|
-
function formatPhone(raw) {
|
|
20010
|
+
function formatPhone$1(raw) {
|
|
19995
20011
|
if (!raw) return "";
|
|
19996
20012
|
const normalized = raw.startsWith("+1") && raw.replace(/\D/g, "").length === 11 ? raw.slice(2) : raw;
|
|
19997
20013
|
if (normalized.startsWith("+")) return normalized;
|
|
@@ -20006,7 +20022,7 @@ var ContactPickerComponent = class ContactPickerComponent {
|
|
|
20006
20022
|
return `${this.uid}-opt-${i}`;
|
|
20007
20023
|
}
|
|
20008
20024
|
constructor() {
|
|
20009
|
-
this.formatPhone = formatPhone;
|
|
20025
|
+
this.formatPhone = formatPhone$1;
|
|
20010
20026
|
this.label = input("", ...ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []);
|
|
20011
20027
|
this.placeholder = input("Search by name...", ...ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []);
|
|
20012
20028
|
this.hint = input("", ...ngDevMode ? [{ debugName: "hint" }] : /* istanbul ignore next */ []);
|
|
@@ -22354,6 +22370,45 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
22354
22370
|
}]
|
|
22355
22371
|
}
|
|
22356
22372
|
});
|
|
22373
|
+
const PASSWORD_MAX_LENGTH = 128;
|
|
22374
|
+
const BASE_RULES = [
|
|
22375
|
+
{
|
|
22376
|
+
id: "length",
|
|
22377
|
+
label: "At least 8 characters",
|
|
22378
|
+
test: (p) => p.length >= 8
|
|
22379
|
+
},
|
|
22380
|
+
{
|
|
22381
|
+
id: "upper",
|
|
22382
|
+
label: "One uppercase letter",
|
|
22383
|
+
test: (p) => /[A-Z]/.test(p)
|
|
22384
|
+
},
|
|
22385
|
+
{
|
|
22386
|
+
id: "lower",
|
|
22387
|
+
label: "One lowercase letter",
|
|
22388
|
+
test: (p) => /[a-z]/.test(p)
|
|
22389
|
+
},
|
|
22390
|
+
{
|
|
22391
|
+
id: "digit",
|
|
22392
|
+
label: "One digit (0-9)",
|
|
22393
|
+
test: (p) => /\d/.test(p)
|
|
22394
|
+
}
|
|
22395
|
+
];
|
|
22396
|
+
const LISTED_SPECIAL_PASSWORD_RULES = [...BASE_RULES, {
|
|
22397
|
+
id: "special",
|
|
22398
|
+
label: "One special character (@ $ ! % * ? & #)",
|
|
22399
|
+
test: (p) => /[@$!%*?&#]/.test(p)
|
|
22400
|
+
}];
|
|
22401
|
+
const ASCII_SPECIAL_PASSWORD_RULES = [...BASE_RULES, {
|
|
22402
|
+
id: "special",
|
|
22403
|
+
label: "One special character (e.g. ! @ # $ %)",
|
|
22404
|
+
test: (p) => /[!-\/:-@[-`{-~]/.test(p)
|
|
22405
|
+
}];
|
|
22406
|
+
function createPasswordPolicyValidator(rules, maxLength = 128) {
|
|
22407
|
+
return (c) => {
|
|
22408
|
+
const p = String(c.value ?? "");
|
|
22409
|
+
return p.length <= maxLength && passwordMeetsRules(p, rules) ? null : { passwordRules: true };
|
|
22410
|
+
};
|
|
22411
|
+
}
|
|
22357
22412
|
const KEYS = [
|
|
22358
22413
|
"1",
|
|
22359
22414
|
"2",
|
|
@@ -31691,7 +31746,7 @@ var PanelInfoListComponent = class PanelInfoListComponent {
|
|
|
31691
31746
|
</ng-template>
|
|
31692
31747
|
`,
|
|
31693
31748
|
isInline: true,
|
|
31694
|
-
styles: [":host{display:flex;flex-direction:column;gap:12px}:host(.pil-fill){flex:1;min-height:0}:host(.pil-fill) .pil-section{flex:1}.pil-section{border:1px solid #e2e8f0;border-radius:8px;overflow:hidden}.pil-section-label{display:flex;justify-content:space-between;align-items:center;font-size:.6875rem;font-weight:700;letter-spacing:.07em;color:#
|
|
31749
|
+
styles: [":host{display:flex;flex-direction:column;gap:12px}:host(.pil-fill){flex:1;min-height:0}:host(.pil-fill) .pil-section{flex:1}.pil-section{border:1px solid #e2e8f0;border-radius:8px;overflow:hidden}.pil-section-label{display:flex;justify-content:space-between;align-items:center;font-size:.6875rem;font-weight:700;letter-spacing:.07em;color:#64748b;text-transform:uppercase;padding:8px 14px;background:#f8fafc;border-bottom:1px solid #e2e8f0}.pil-header-action{text-transform:none;letter-spacing:0;margin:-4px 0;flex-shrink:0}.pil-header-action-icon{margin-right:6px;vertical-align:-2px;flex-shrink:0}.pil-header-link{font-size:.75rem;font-weight:500;color:#2563eb;text-decoration:none;text-transform:none;letter-spacing:0}.pil-header-link:hover{text-decoration:underline}.pil-row{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:9px 14px;border-bottom:1px solid #f1f5f9}.pil-row:last-child{border-bottom:none}.pil-row--inline{justify-content:flex-start}.pil-row--inline .pil-value{text-align:left;justify-content:flex-start;flex-wrap:wrap;min-width:0;overflow-wrap:anywhere;word-break:break-word}.pil-label{font-size:.8125rem;color:#64748b;flex-shrink:0}.pil-value{font-size:.875rem;font-weight:500;color:#1e293b;text-align:right;display:flex;align-items:center;justify-content:flex-end;min-width:0;overflow-wrap:anywhere;word-break:break-word}.pil-multiline{white-space:pre-line;overflow-wrap:anywhere;word-break:break-word}.pil-strong .pil-label,.pil-strong .pil-value,.pil-strong .pil-muted{font-weight:700;color:#0f172a}.pil-badges{display:flex;align-items:center;gap:4px;flex-wrap:wrap;justify-content:flex-end}.pil-edit-btn{margin-left:4px;flex-shrink:0}ui-empty-state{padding:12px 0}.pil-muted{color:#1e293b;font-weight:400}.pil-danger{color:#ef4444;font-weight:600}.pil-link{font-size:.875rem;font-weight:500;color:#2563eb;text-decoration:none}.pil-link:hover{text-decoration:underline}.pil-link,.pil-link-icon,.pil-header-link{position:relative}@media(pointer:coarse),(max-width:480px){.pil-link:after,.pil-link-icon:after,.pil-header-link:after{content:\"\";position:absolute;inset:-14px -4px}}.pil-link--href{overflow-wrap:anywhere;word-break:break-word}.pil-link:focus-visible,.pil-link-icon:focus-visible,.pil-header-link:focus-visible{outline:2px solid #3b82f6;outline-offset:2px;border-radius:2px}.pil-link-icon{display:inline-flex;align-items:center;gap:5px;font-size:.875rem;font-weight:500;color:#1e293b;text-decoration:none}.pil-link-icon svg{color:#94a3b8;flex-shrink:0}.pil-grid-2{display:grid;grid-template-columns:1fr 1fr}.pil-grid-cell{display:flex;flex-direction:column;gap:3px;padding:10px 14px;min-width:0;border-right:1px solid #f1f5f9}.pil-grid-cell:last-child{border-right:none}.pil-grid-cell:nth-child(2n){border-right:none}@media(max-width:480px){.pil-grid-2{grid-template-columns:1fr}.pil-grid-cell{border-right:none;border-bottom:1px solid #f1f5f9}.pil-grid-cell:last-child{border-bottom:none}}.pil-value--block{text-align:left;justify-content:flex-start}\n"],
|
|
31695
31750
|
dependencies: [
|
|
31696
31751
|
{
|
|
31697
31752
|
kind: "directive",
|
|
@@ -31880,7 +31935,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
31880
31935
|
}
|
|
31881
31936
|
</ng-template>
|
|
31882
31937
|
`,
|
|
31883
|
-
styles: [":host{display:flex;flex-direction:column;gap:12px}:host(.pil-fill){flex:1;min-height:0}:host(.pil-fill) .pil-section{flex:1}.pil-section{border:1px solid #e2e8f0;border-radius:8px;overflow:hidden}.pil-section-label{display:flex;justify-content:space-between;align-items:center;font-size:.6875rem;font-weight:700;letter-spacing:.07em;color:#
|
|
31938
|
+
styles: [":host{display:flex;flex-direction:column;gap:12px}:host(.pil-fill){flex:1;min-height:0}:host(.pil-fill) .pil-section{flex:1}.pil-section{border:1px solid #e2e8f0;border-radius:8px;overflow:hidden}.pil-section-label{display:flex;justify-content:space-between;align-items:center;font-size:.6875rem;font-weight:700;letter-spacing:.07em;color:#64748b;text-transform:uppercase;padding:8px 14px;background:#f8fafc;border-bottom:1px solid #e2e8f0}.pil-header-action{text-transform:none;letter-spacing:0;margin:-4px 0;flex-shrink:0}.pil-header-action-icon{margin-right:6px;vertical-align:-2px;flex-shrink:0}.pil-header-link{font-size:.75rem;font-weight:500;color:#2563eb;text-decoration:none;text-transform:none;letter-spacing:0}.pil-header-link:hover{text-decoration:underline}.pil-row{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:9px 14px;border-bottom:1px solid #f1f5f9}.pil-row:last-child{border-bottom:none}.pil-row--inline{justify-content:flex-start}.pil-row--inline .pil-value{text-align:left;justify-content:flex-start;flex-wrap:wrap;min-width:0;overflow-wrap:anywhere;word-break:break-word}.pil-label{font-size:.8125rem;color:#64748b;flex-shrink:0}.pil-value{font-size:.875rem;font-weight:500;color:#1e293b;text-align:right;display:flex;align-items:center;justify-content:flex-end;min-width:0;overflow-wrap:anywhere;word-break:break-word}.pil-multiline{white-space:pre-line;overflow-wrap:anywhere;word-break:break-word}.pil-strong .pil-label,.pil-strong .pil-value,.pil-strong .pil-muted{font-weight:700;color:#0f172a}.pil-badges{display:flex;align-items:center;gap:4px;flex-wrap:wrap;justify-content:flex-end}.pil-edit-btn{margin-left:4px;flex-shrink:0}ui-empty-state{padding:12px 0}.pil-muted{color:#1e293b;font-weight:400}.pil-danger{color:#ef4444;font-weight:600}.pil-link{font-size:.875rem;font-weight:500;color:#2563eb;text-decoration:none}.pil-link:hover{text-decoration:underline}.pil-link,.pil-link-icon,.pil-header-link{position:relative}@media(pointer:coarse),(max-width:480px){.pil-link:after,.pil-link-icon:after,.pil-header-link:after{content:\"\";position:absolute;inset:-14px -4px}}.pil-link--href{overflow-wrap:anywhere;word-break:break-word}.pil-link:focus-visible,.pil-link-icon:focus-visible,.pil-header-link:focus-visible{outline:2px solid #3b82f6;outline-offset:2px;border-radius:2px}.pil-link-icon{display:inline-flex;align-items:center;gap:5px;font-size:.875rem;font-weight:500;color:#1e293b;text-decoration:none}.pil-link-icon svg{color:#94a3b8;flex-shrink:0}.pil-grid-2{display:grid;grid-template-columns:1fr 1fr}.pil-grid-cell{display:flex;flex-direction:column;gap:3px;padding:10px 14px;min-width:0;border-right:1px solid #f1f5f9}.pil-grid-cell:last-child{border-right:none}.pil-grid-cell:nth-child(2n){border-right:none}@media(max-width:480px){.pil-grid-2{grid-template-columns:1fr}.pil-grid-cell{border-right:none;border-bottom:1px solid #f1f5f9}.pil-grid-cell:last-child{border-bottom:none}}.pil-value--block{text-align:left;justify-content:flex-start}\n"]
|
|
31884
31939
|
}]
|
|
31885
31940
|
}],
|
|
31886
31941
|
propDecorators: {
|
|
@@ -32251,6 +32306,662 @@ const US_STATES = [
|
|
|
32251
32306
|
label: "District of Columbia"
|
|
32252
32307
|
}
|
|
32253
32308
|
];
|
|
32309
|
+
const US_LOCATIONS = {
|
|
32310
|
+
AL: [
|
|
32311
|
+
"Anniston",
|
|
32312
|
+
"Auburn",
|
|
32313
|
+
"Birmingham",
|
|
32314
|
+
"Decatur",
|
|
32315
|
+
"Dothan",
|
|
32316
|
+
"Florence",
|
|
32317
|
+
"Gadsden",
|
|
32318
|
+
"Hoover",
|
|
32319
|
+
"Huntsville",
|
|
32320
|
+
"Mobile",
|
|
32321
|
+
"Montgomery",
|
|
32322
|
+
"Tuscaloosa"
|
|
32323
|
+
],
|
|
32324
|
+
AK: [
|
|
32325
|
+
"Anchorage",
|
|
32326
|
+
"Badger",
|
|
32327
|
+
"Fairbanks",
|
|
32328
|
+
"Juneau",
|
|
32329
|
+
"Ketchikan",
|
|
32330
|
+
"Sitka",
|
|
32331
|
+
"Wasilla"
|
|
32332
|
+
],
|
|
32333
|
+
AZ: [
|
|
32334
|
+
"Avondale",
|
|
32335
|
+
"Buckeye",
|
|
32336
|
+
"Casa Grande",
|
|
32337
|
+
"Chandler",
|
|
32338
|
+
"Flagstaff",
|
|
32339
|
+
"Gilbert",
|
|
32340
|
+
"Glendale",
|
|
32341
|
+
"Goodyear",
|
|
32342
|
+
"Lake Havasu City",
|
|
32343
|
+
"Maricopa",
|
|
32344
|
+
"Mesa",
|
|
32345
|
+
"Peoria",
|
|
32346
|
+
"Phoenix",
|
|
32347
|
+
"Prescott",
|
|
32348
|
+
"Queen Creek",
|
|
32349
|
+
"Scottsdale",
|
|
32350
|
+
"Surprise",
|
|
32351
|
+
"Tempe",
|
|
32352
|
+
"Tucson",
|
|
32353
|
+
"Yuma"
|
|
32354
|
+
],
|
|
32355
|
+
AR: [
|
|
32356
|
+
"Bentonville",
|
|
32357
|
+
"Conway",
|
|
32358
|
+
"Fayetteville",
|
|
32359
|
+
"Fort Smith",
|
|
32360
|
+
"Jonesboro",
|
|
32361
|
+
"Little Rock",
|
|
32362
|
+
"North Little Rock",
|
|
32363
|
+
"Pine Bluff",
|
|
32364
|
+
"Rogers",
|
|
32365
|
+
"Springdale"
|
|
32366
|
+
],
|
|
32367
|
+
CA: [
|
|
32368
|
+
"Anaheim",
|
|
32369
|
+
"Antioch",
|
|
32370
|
+
"Bakersfield",
|
|
32371
|
+
"Berkeley",
|
|
32372
|
+
"Burbank",
|
|
32373
|
+
"Chula Vista",
|
|
32374
|
+
"Concord",
|
|
32375
|
+
"Corona",
|
|
32376
|
+
"El Monte",
|
|
32377
|
+
"Elk Grove",
|
|
32378
|
+
"Escondido",
|
|
32379
|
+
"Fontana",
|
|
32380
|
+
"Fremont",
|
|
32381
|
+
"Fresno",
|
|
32382
|
+
"Fullerton",
|
|
32383
|
+
"Garden Grove",
|
|
32384
|
+
"Glendale",
|
|
32385
|
+
"Hayward",
|
|
32386
|
+
"Huntington Beach",
|
|
32387
|
+
"Inglewood",
|
|
32388
|
+
"Irvine",
|
|
32389
|
+
"Lancaster",
|
|
32390
|
+
"Long Beach",
|
|
32391
|
+
"Los Angeles",
|
|
32392
|
+
"Modesto",
|
|
32393
|
+
"Moreno Valley",
|
|
32394
|
+
"Murrieta",
|
|
32395
|
+
"Ontario",
|
|
32396
|
+
"Oxnard",
|
|
32397
|
+
"Palmdale",
|
|
32398
|
+
"Pasadena",
|
|
32399
|
+
"Pomona",
|
|
32400
|
+
"Rancho Cucamonga",
|
|
32401
|
+
"Riverside",
|
|
32402
|
+
"Sacramento",
|
|
32403
|
+
"Salinas",
|
|
32404
|
+
"San Bernardino",
|
|
32405
|
+
"San Diego",
|
|
32406
|
+
"San Francisco",
|
|
32407
|
+
"San Jose",
|
|
32408
|
+
"Santa Ana",
|
|
32409
|
+
"Santa Clarita",
|
|
32410
|
+
"Santa Rosa",
|
|
32411
|
+
"Simi Valley",
|
|
32412
|
+
"Stockton",
|
|
32413
|
+
"Sunnyvale",
|
|
32414
|
+
"Thousand Oaks",
|
|
32415
|
+
"Torrance",
|
|
32416
|
+
"Vallejo",
|
|
32417
|
+
"Victorville",
|
|
32418
|
+
"Visalia"
|
|
32419
|
+
],
|
|
32420
|
+
CO: [
|
|
32421
|
+
"Arvada",
|
|
32422
|
+
"Aurora",
|
|
32423
|
+
"Boulder",
|
|
32424
|
+
"Brighton",
|
|
32425
|
+
"Broomfield",
|
|
32426
|
+
"Castle Rock",
|
|
32427
|
+
"Colorado Springs",
|
|
32428
|
+
"Commerce City",
|
|
32429
|
+
"Denver",
|
|
32430
|
+
"Fort Collins",
|
|
32431
|
+
"Greeley",
|
|
32432
|
+
"Highlands Ranch",
|
|
32433
|
+
"Lakewood",
|
|
32434
|
+
"Longmont",
|
|
32435
|
+
"Loveland",
|
|
32436
|
+
"Parker",
|
|
32437
|
+
"Pueblo",
|
|
32438
|
+
"Thornton",
|
|
32439
|
+
"Westminster"
|
|
32440
|
+
],
|
|
32441
|
+
CT: [
|
|
32442
|
+
"Bridgeport",
|
|
32443
|
+
"Bristol",
|
|
32444
|
+
"Danbury",
|
|
32445
|
+
"Greenwich",
|
|
32446
|
+
"Hartford",
|
|
32447
|
+
"Meriden",
|
|
32448
|
+
"New Britain",
|
|
32449
|
+
"New Haven",
|
|
32450
|
+
"Norwalk",
|
|
32451
|
+
"Stamford",
|
|
32452
|
+
"Waterbury"
|
|
32453
|
+
],
|
|
32454
|
+
DE: [
|
|
32455
|
+
"Dover",
|
|
32456
|
+
"Middletown",
|
|
32457
|
+
"Newark",
|
|
32458
|
+
"Wilmington"
|
|
32459
|
+
],
|
|
32460
|
+
FL: [
|
|
32461
|
+
"Boca Raton",
|
|
32462
|
+
"Bonita Springs",
|
|
32463
|
+
"Boynton Beach",
|
|
32464
|
+
"Bradenton",
|
|
32465
|
+
"Cape Coral",
|
|
32466
|
+
"Clearwater",
|
|
32467
|
+
"Coral Springs",
|
|
32468
|
+
"Davie",
|
|
32469
|
+
"Daytona Beach",
|
|
32470
|
+
"Deerfield Beach",
|
|
32471
|
+
"Deltona",
|
|
32472
|
+
"Fort Lauderdale",
|
|
32473
|
+
"Fort Myers",
|
|
32474
|
+
"Gainesville",
|
|
32475
|
+
"Hialeah",
|
|
32476
|
+
"Hollywood",
|
|
32477
|
+
"Homestead",
|
|
32478
|
+
"Jacksonville",
|
|
32479
|
+
"Jupiter",
|
|
32480
|
+
"Kissimmee",
|
|
32481
|
+
"Lakeland",
|
|
32482
|
+
"Lauderhill",
|
|
32483
|
+
"Margate",
|
|
32484
|
+
"Melbourne",
|
|
32485
|
+
"Miami",
|
|
32486
|
+
"Miami Gardens",
|
|
32487
|
+
"Miramar",
|
|
32488
|
+
"Naples",
|
|
32489
|
+
"Orlando",
|
|
32490
|
+
"Palm Bay",
|
|
32491
|
+
"Palm Beach Gardens",
|
|
32492
|
+
"Pembroke Pines",
|
|
32493
|
+
"Pensacola",
|
|
32494
|
+
"Pompano Beach",
|
|
32495
|
+
"Port St. Lucie",
|
|
32496
|
+
"St. Petersburg",
|
|
32497
|
+
"Sarasota",
|
|
32498
|
+
"Sunrise",
|
|
32499
|
+
"Tallahassee",
|
|
32500
|
+
"Tampa",
|
|
32501
|
+
"Temecula",
|
|
32502
|
+
"West Palm Beach"
|
|
32503
|
+
],
|
|
32504
|
+
GA: [
|
|
32505
|
+
"Albany",
|
|
32506
|
+
"Alpharetta",
|
|
32507
|
+
"Athens",
|
|
32508
|
+
"Atlanta",
|
|
32509
|
+
"Augusta",
|
|
32510
|
+
"Columbus",
|
|
32511
|
+
"Gainesville",
|
|
32512
|
+
"Johns Creek",
|
|
32513
|
+
"Macon",
|
|
32514
|
+
"Marietta",
|
|
32515
|
+
"Roswell",
|
|
32516
|
+
"Sandy Springs",
|
|
32517
|
+
"Savannah",
|
|
32518
|
+
"South Fulton",
|
|
32519
|
+
"Valdosta",
|
|
32520
|
+
"Warner Robins"
|
|
32521
|
+
],
|
|
32522
|
+
HI: [
|
|
32523
|
+
"Hilo",
|
|
32524
|
+
"Honolulu",
|
|
32525
|
+
"Kailua",
|
|
32526
|
+
"Kaneohe",
|
|
32527
|
+
"Mililani Town",
|
|
32528
|
+
"Pearl City"
|
|
32529
|
+
],
|
|
32530
|
+
ID: [
|
|
32531
|
+
"Boise",
|
|
32532
|
+
"Caldwell",
|
|
32533
|
+
"Idaho Falls",
|
|
32534
|
+
"Meridian",
|
|
32535
|
+
"Nampa",
|
|
32536
|
+
"Pocatello",
|
|
32537
|
+
"Twin Falls"
|
|
32538
|
+
],
|
|
32539
|
+
IL: [
|
|
32540
|
+
"Aurora",
|
|
32541
|
+
"Bloomington",
|
|
32542
|
+
"Champaign",
|
|
32543
|
+
"Chicago",
|
|
32544
|
+
"Cicero",
|
|
32545
|
+
"Elgin",
|
|
32546
|
+
"Evanston",
|
|
32547
|
+
"Joliet",
|
|
32548
|
+
"Naperville",
|
|
32549
|
+
"Peoria",
|
|
32550
|
+
"Rockford",
|
|
32551
|
+
"Springfield",
|
|
32552
|
+
"Waukegan"
|
|
32553
|
+
],
|
|
32554
|
+
IN: [
|
|
32555
|
+
"Anderson",
|
|
32556
|
+
"Bloomington",
|
|
32557
|
+
"Carmel",
|
|
32558
|
+
"Evansville",
|
|
32559
|
+
"Fishers",
|
|
32560
|
+
"Fort Wayne",
|
|
32561
|
+
"Hammond",
|
|
32562
|
+
"Indianapolis",
|
|
32563
|
+
"Muncie",
|
|
32564
|
+
"South Bend",
|
|
32565
|
+
"Terre Haute"
|
|
32566
|
+
],
|
|
32567
|
+
IA: [
|
|
32568
|
+
"Ames",
|
|
32569
|
+
"Cedar Rapids",
|
|
32570
|
+
"Council Bluffs",
|
|
32571
|
+
"Davenport",
|
|
32572
|
+
"Des Moines",
|
|
32573
|
+
"Dubuque",
|
|
32574
|
+
"Iowa City",
|
|
32575
|
+
"Sioux City",
|
|
32576
|
+
"Waterloo"
|
|
32577
|
+
],
|
|
32578
|
+
KS: [
|
|
32579
|
+
"Kansas City",
|
|
32580
|
+
"Lawrence",
|
|
32581
|
+
"Olathe",
|
|
32582
|
+
"Overland Park",
|
|
32583
|
+
"Salina",
|
|
32584
|
+
"Topeka",
|
|
32585
|
+
"Wichita"
|
|
32586
|
+
],
|
|
32587
|
+
KY: [
|
|
32588
|
+
"Bowling Green",
|
|
32589
|
+
"Covington",
|
|
32590
|
+
"Frankfort",
|
|
32591
|
+
"Lexington",
|
|
32592
|
+
"Louisville",
|
|
32593
|
+
"Owensboro",
|
|
32594
|
+
"Richmond"
|
|
32595
|
+
],
|
|
32596
|
+
LA: [
|
|
32597
|
+
"Baton Rouge",
|
|
32598
|
+
"Bossier City",
|
|
32599
|
+
"Kenner",
|
|
32600
|
+
"Lafayette",
|
|
32601
|
+
"Lake Charles",
|
|
32602
|
+
"Metairie",
|
|
32603
|
+
"Monroe",
|
|
32604
|
+
"New Orleans",
|
|
32605
|
+
"Shreveport"
|
|
32606
|
+
],
|
|
32607
|
+
ME: [
|
|
32608
|
+
"Auburn",
|
|
32609
|
+
"Augusta",
|
|
32610
|
+
"Bangor",
|
|
32611
|
+
"Lewiston",
|
|
32612
|
+
"Portland",
|
|
32613
|
+
"South Portland"
|
|
32614
|
+
],
|
|
32615
|
+
MD: [
|
|
32616
|
+
"Annapolis",
|
|
32617
|
+
"Baltimore",
|
|
32618
|
+
"Bowie",
|
|
32619
|
+
"Columbia",
|
|
32620
|
+
"Frederick",
|
|
32621
|
+
"Gaithersburg",
|
|
32622
|
+
"Germantown",
|
|
32623
|
+
"Hagerstown",
|
|
32624
|
+
"Rockville",
|
|
32625
|
+
"Silver Spring",
|
|
32626
|
+
"Waldorf"
|
|
32627
|
+
],
|
|
32628
|
+
MA: [
|
|
32629
|
+
"Boston",
|
|
32630
|
+
"Brockton",
|
|
32631
|
+
"Cambridge",
|
|
32632
|
+
"Fall River",
|
|
32633
|
+
"Lowell",
|
|
32634
|
+
"Lynn",
|
|
32635
|
+
"New Bedford",
|
|
32636
|
+
"Newton",
|
|
32637
|
+
"Quincy",
|
|
32638
|
+
"Springfield",
|
|
32639
|
+
"Worcester"
|
|
32640
|
+
],
|
|
32641
|
+
MI: [
|
|
32642
|
+
"Ann Arbor",
|
|
32643
|
+
"Dearborn",
|
|
32644
|
+
"Detroit",
|
|
32645
|
+
"Flint",
|
|
32646
|
+
"Grand Rapids",
|
|
32647
|
+
"Kalamazoo",
|
|
32648
|
+
"Lansing",
|
|
32649
|
+
"Livonia",
|
|
32650
|
+
"Sterling Heights",
|
|
32651
|
+
"Warren"
|
|
32652
|
+
],
|
|
32653
|
+
MN: [
|
|
32654
|
+
"Bloomington",
|
|
32655
|
+
"Brooklyn Park",
|
|
32656
|
+
"Burnsville",
|
|
32657
|
+
"Duluth",
|
|
32658
|
+
"Eden Prairie",
|
|
32659
|
+
"Minneapolis",
|
|
32660
|
+
"Plymouth",
|
|
32661
|
+
"Rochester",
|
|
32662
|
+
"St. Cloud",
|
|
32663
|
+
"St. Paul"
|
|
32664
|
+
],
|
|
32665
|
+
MS: [
|
|
32666
|
+
"Biloxi",
|
|
32667
|
+
"Gulfport",
|
|
32668
|
+
"Hattiesburg",
|
|
32669
|
+
"Jackson",
|
|
32670
|
+
"Meridian",
|
|
32671
|
+
"Southaven",
|
|
32672
|
+
"Tupelo"
|
|
32673
|
+
],
|
|
32674
|
+
MO: [
|
|
32675
|
+
"Columbia",
|
|
32676
|
+
"Independence",
|
|
32677
|
+
"Kansas City",
|
|
32678
|
+
"Lee's Summit",
|
|
32679
|
+
"O'Fallon",
|
|
32680
|
+
"Springfield",
|
|
32681
|
+
"St. Joseph",
|
|
32682
|
+
"St. Louis"
|
|
32683
|
+
],
|
|
32684
|
+
MT: [
|
|
32685
|
+
"Billings",
|
|
32686
|
+
"Bozeman",
|
|
32687
|
+
"Butte",
|
|
32688
|
+
"Great Falls",
|
|
32689
|
+
"Helena",
|
|
32690
|
+
"Missoula"
|
|
32691
|
+
],
|
|
32692
|
+
NE: [
|
|
32693
|
+
"Bellevue",
|
|
32694
|
+
"Grand Island",
|
|
32695
|
+
"Kearney",
|
|
32696
|
+
"Lincoln",
|
|
32697
|
+
"Omaha"
|
|
32698
|
+
],
|
|
32699
|
+
NV: [
|
|
32700
|
+
"Carson City",
|
|
32701
|
+
"Henderson",
|
|
32702
|
+
"Las Vegas",
|
|
32703
|
+
"North Las Vegas",
|
|
32704
|
+
"Reno",
|
|
32705
|
+
"Sparks",
|
|
32706
|
+
"Sunrise Manor"
|
|
32707
|
+
],
|
|
32708
|
+
NH: [
|
|
32709
|
+
"Concord",
|
|
32710
|
+
"Dover",
|
|
32711
|
+
"Manchester",
|
|
32712
|
+
"Nashua",
|
|
32713
|
+
"Portsmouth"
|
|
32714
|
+
],
|
|
32715
|
+
NJ: [
|
|
32716
|
+
"Camden",
|
|
32717
|
+
"Edison",
|
|
32718
|
+
"Elizabeth",
|
|
32719
|
+
"Jersey City",
|
|
32720
|
+
"Newark",
|
|
32721
|
+
"Paterson",
|
|
32722
|
+
"Toms River",
|
|
32723
|
+
"Trenton"
|
|
32724
|
+
],
|
|
32725
|
+
NM: [
|
|
32726
|
+
"Albuquerque",
|
|
32727
|
+
"Las Cruces",
|
|
32728
|
+
"Rio Rancho",
|
|
32729
|
+
"Roswell",
|
|
32730
|
+
"Santa Fe"
|
|
32731
|
+
],
|
|
32732
|
+
NY: [
|
|
32733
|
+
"Albany",
|
|
32734
|
+
"Amherst",
|
|
32735
|
+
"Bronx",
|
|
32736
|
+
"Brooklyn",
|
|
32737
|
+
"Buffalo",
|
|
32738
|
+
"Cheektowaga",
|
|
32739
|
+
"Manhattan",
|
|
32740
|
+
"New Rochelle",
|
|
32741
|
+
"New York",
|
|
32742
|
+
"Niagara Falls",
|
|
32743
|
+
"Queens",
|
|
32744
|
+
"Rochester",
|
|
32745
|
+
"Staten Island",
|
|
32746
|
+
"Syracuse",
|
|
32747
|
+
"Utica",
|
|
32748
|
+
"Yonkers"
|
|
32749
|
+
],
|
|
32750
|
+
NC: [
|
|
32751
|
+
"Asheville",
|
|
32752
|
+
"Cary",
|
|
32753
|
+
"Chapel Hill",
|
|
32754
|
+
"Charlotte",
|
|
32755
|
+
"Concord",
|
|
32756
|
+
"Durham",
|
|
32757
|
+
"Fayetteville",
|
|
32758
|
+
"Gastonia",
|
|
32759
|
+
"Greensboro",
|
|
32760
|
+
"High Point",
|
|
32761
|
+
"Raleigh",
|
|
32762
|
+
"Wilmington",
|
|
32763
|
+
"Winston-Salem"
|
|
32764
|
+
],
|
|
32765
|
+
ND: [
|
|
32766
|
+
"Bismarck",
|
|
32767
|
+
"Fargo",
|
|
32768
|
+
"Grand Forks",
|
|
32769
|
+
"Minot"
|
|
32770
|
+
],
|
|
32771
|
+
OH: [
|
|
32772
|
+
"Akron",
|
|
32773
|
+
"Canton",
|
|
32774
|
+
"Cincinnati",
|
|
32775
|
+
"Cleveland",
|
|
32776
|
+
"Columbus",
|
|
32777
|
+
"Dayton",
|
|
32778
|
+
"Lorain",
|
|
32779
|
+
"Parma",
|
|
32780
|
+
"Toledo",
|
|
32781
|
+
"Youngstown"
|
|
32782
|
+
],
|
|
32783
|
+
OK: [
|
|
32784
|
+
"Broken Arrow",
|
|
32785
|
+
"Edmond",
|
|
32786
|
+
"Lawton",
|
|
32787
|
+
"Moore",
|
|
32788
|
+
"Norman",
|
|
32789
|
+
"Oklahoma City",
|
|
32790
|
+
"Tulsa"
|
|
32791
|
+
],
|
|
32792
|
+
OR: [
|
|
32793
|
+
"Beaverton",
|
|
32794
|
+
"Bend",
|
|
32795
|
+
"Eugene",
|
|
32796
|
+
"Gresham",
|
|
32797
|
+
"Hillsboro",
|
|
32798
|
+
"Medford",
|
|
32799
|
+
"Portland",
|
|
32800
|
+
"Salem"
|
|
32801
|
+
],
|
|
32802
|
+
PA: [
|
|
32803
|
+
"Allentown",
|
|
32804
|
+
"Bethlehem",
|
|
32805
|
+
"Erie",
|
|
32806
|
+
"Philadelphia",
|
|
32807
|
+
"Pittsburgh",
|
|
32808
|
+
"Reading",
|
|
32809
|
+
"Scranton"
|
|
32810
|
+
],
|
|
32811
|
+
RI: [
|
|
32812
|
+
"Cranston",
|
|
32813
|
+
"Pawtucket",
|
|
32814
|
+
"Providence",
|
|
32815
|
+
"Warwick",
|
|
32816
|
+
"Woonsocket"
|
|
32817
|
+
],
|
|
32818
|
+
SC: [
|
|
32819
|
+
"Charleston",
|
|
32820
|
+
"Columbia",
|
|
32821
|
+
"Florence",
|
|
32822
|
+
"Greenville",
|
|
32823
|
+
"Mount Pleasant",
|
|
32824
|
+
"North Charleston",
|
|
32825
|
+
"Rock Hill",
|
|
32826
|
+
"Spartanburg"
|
|
32827
|
+
],
|
|
32828
|
+
SD: [
|
|
32829
|
+
"Aberdeen",
|
|
32830
|
+
"Rapid City",
|
|
32831
|
+
"Sioux Falls"
|
|
32832
|
+
],
|
|
32833
|
+
TN: [
|
|
32834
|
+
"Chattanooga",
|
|
32835
|
+
"Clarksville",
|
|
32836
|
+
"Jackson",
|
|
32837
|
+
"Johnson City",
|
|
32838
|
+
"Kingsport",
|
|
32839
|
+
"Knoxville",
|
|
32840
|
+
"Memphis",
|
|
32841
|
+
"Murfreesboro",
|
|
32842
|
+
"Nashville"
|
|
32843
|
+
],
|
|
32844
|
+
TX: [
|
|
32845
|
+
"Abilene",
|
|
32846
|
+
"Allen",
|
|
32847
|
+
"Amarillo",
|
|
32848
|
+
"Arlington",
|
|
32849
|
+
"Austin",
|
|
32850
|
+
"Beaumont",
|
|
32851
|
+
"Brownsville",
|
|
32852
|
+
"Carrollton",
|
|
32853
|
+
"Cedar Park",
|
|
32854
|
+
"College Station",
|
|
32855
|
+
"Corpus Christi",
|
|
32856
|
+
"Dallas",
|
|
32857
|
+
"Denton",
|
|
32858
|
+
"El Paso",
|
|
32859
|
+
"Fort Worth",
|
|
32860
|
+
"Frisco",
|
|
32861
|
+
"Garland",
|
|
32862
|
+
"Georgetown",
|
|
32863
|
+
"Grand Prairie",
|
|
32864
|
+
"Houston",
|
|
32865
|
+
"Irving",
|
|
32866
|
+
"Killeen",
|
|
32867
|
+
"Laredo",
|
|
32868
|
+
"League City",
|
|
32869
|
+
"Lewisville",
|
|
32870
|
+
"Lubbock",
|
|
32871
|
+
"Mcallen",
|
|
32872
|
+
"McKinney",
|
|
32873
|
+
"Mesquite",
|
|
32874
|
+
"Midland",
|
|
32875
|
+
"Missouri City",
|
|
32876
|
+
"New Braunfels",
|
|
32877
|
+
"Odessa",
|
|
32878
|
+
"Pasadena",
|
|
32879
|
+
"Pearland",
|
|
32880
|
+
"Plano",
|
|
32881
|
+
"Richardson",
|
|
32882
|
+
"Round Rock",
|
|
32883
|
+
"San Antonio",
|
|
32884
|
+
"Sugar Land",
|
|
32885
|
+
"Tyler",
|
|
32886
|
+
"Waco",
|
|
32887
|
+
"Wichita Falls"
|
|
32888
|
+
],
|
|
32889
|
+
UT: [
|
|
32890
|
+
"Ogden",
|
|
32891
|
+
"Orem",
|
|
32892
|
+
"Provo",
|
|
32893
|
+
"Salt Lake City",
|
|
32894
|
+
"Sandy",
|
|
32895
|
+
"St. George",
|
|
32896
|
+
"West Jordan",
|
|
32897
|
+
"West Valley City"
|
|
32898
|
+
],
|
|
32899
|
+
VT: [
|
|
32900
|
+
"Burlington",
|
|
32901
|
+
"Essex Junction",
|
|
32902
|
+
"Montpelier",
|
|
32903
|
+
"Rutland"
|
|
32904
|
+
],
|
|
32905
|
+
VA: [
|
|
32906
|
+
"Alexandria",
|
|
32907
|
+
"Arlington",
|
|
32908
|
+
"Chesapeake",
|
|
32909
|
+
"Hampton",
|
|
32910
|
+
"Newport News",
|
|
32911
|
+
"Norfolk",
|
|
32912
|
+
"Portsmouth",
|
|
32913
|
+
"Richmond",
|
|
32914
|
+
"Roanoke",
|
|
32915
|
+
"Virginia Beach"
|
|
32916
|
+
],
|
|
32917
|
+
WA: [
|
|
32918
|
+
"Bellevue",
|
|
32919
|
+
"Bellingham",
|
|
32920
|
+
"Everett",
|
|
32921
|
+
"Kent",
|
|
32922
|
+
"Kirkland",
|
|
32923
|
+
"Renton",
|
|
32924
|
+
"Seattle",
|
|
32925
|
+
"Spokane",
|
|
32926
|
+
"Tacoma",
|
|
32927
|
+
"Vancouver"
|
|
32928
|
+
],
|
|
32929
|
+
WV: [
|
|
32930
|
+
"Charleston",
|
|
32931
|
+
"Huntington",
|
|
32932
|
+
"Morgantown",
|
|
32933
|
+
"Parkersburg"
|
|
32934
|
+
],
|
|
32935
|
+
WI: [
|
|
32936
|
+
"Appleton",
|
|
32937
|
+
"Green Bay",
|
|
32938
|
+
"Kenosha",
|
|
32939
|
+
"Madison",
|
|
32940
|
+
"Milwaukee",
|
|
32941
|
+
"Oshkosh",
|
|
32942
|
+
"Racine"
|
|
32943
|
+
],
|
|
32944
|
+
WY: [
|
|
32945
|
+
"Casper",
|
|
32946
|
+
"Cheyenne",
|
|
32947
|
+
"Gillette",
|
|
32948
|
+
"Laramie"
|
|
32949
|
+
]
|
|
32950
|
+
};
|
|
32951
|
+
const COMMON_DETAIL_GROUP_STYLES = {
|
|
32952
|
+
activity: {
|
|
32953
|
+
title: "Activity",
|
|
32954
|
+
icon: "message",
|
|
32955
|
+
background: "#eff6ff"
|
|
32956
|
+
},
|
|
32957
|
+
notes: {
|
|
32958
|
+
title: "Notes",
|
|
32959
|
+
icon: "add-note",
|
|
32960
|
+
background: "#f1f5f9"
|
|
32961
|
+
}
|
|
32962
|
+
};
|
|
32963
|
+
const DETAIL_CARD_HEADER_BG = "#f8fafc";
|
|
32964
|
+
const DETAIL_GROUP_HEADER_BG = "#eaf3ff";
|
|
32254
32965
|
var ShellProjectedStylesComponent = class ShellProjectedStylesComponent {
|
|
32255
32966
|
static {
|
|
32256
32967
|
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
@@ -32304,6 +33015,7 @@ var AppShellComponent = class AppShellComponent {
|
|
|
32304
33015
|
this.router = inject(Router);
|
|
32305
33016
|
this.navGroups = input([], ...ngDevMode ? [{ debugName: "navGroups" }] : /* istanbul ignore next */ []);
|
|
32306
33017
|
this.pageTitle = input("", ...ngDevMode ? [{ debugName: "pageTitle" }] : /* istanbul ignore next */ []);
|
|
33018
|
+
this.showToast = input(false, ...ngDevMode ? [{ debugName: "showToast" }] : /* istanbul ignore next */ []);
|
|
32307
33019
|
this.appName = input("App", ...ngDevMode ? [{ debugName: "appName" }] : /* istanbul ignore next */ []);
|
|
32308
33020
|
this.user = input(null, ...ngDevMode ? [{ debugName: "user" }] : /* istanbul ignore next */ []);
|
|
32309
33021
|
this.readOnly = input(false, ...ngDevMode ? [{ debugName: "readOnly" }] : /* istanbul ignore next */ []);
|
|
@@ -32313,6 +33025,8 @@ var AppShellComponent = class AppShellComponent {
|
|
|
32313
33025
|
this.persistKey = input("", ...ngDevMode ? [{ debugName: "persistKey" }] : /* istanbul ignore next */ []);
|
|
32314
33026
|
this.logoutClick = output();
|
|
32315
33027
|
this._sidebarOpen = signal(false, ...ngDevMode ? [{ debugName: "_sidebarOpen" }] : /* istanbul ignore next */ []);
|
|
33028
|
+
this._routeTitle = signal("", ...ngDevMode ? [{ debugName: "_routeTitle" }] : /* istanbul ignore next */ []);
|
|
33029
|
+
this._title = computed(() => this.pageTitle() || this._routeTitle(), ...ngDevMode ? [{ debugName: "_title" }] : /* istanbul ignore next */ []);
|
|
32316
33030
|
this._collapsed = signal(AppShellComponent._loadCollapsed(), ...ngDevMode ? [{ debugName: "_collapsed" }] : /* istanbul ignore next */ []);
|
|
32317
33031
|
this._drawerLayout = signal(false, ...ngDevMode ? [{ debugName: "_drawerLayout" }] : /* istanbul ignore next */ []);
|
|
32318
33032
|
this._isRail = computed(() => this.collapsible() && this._collapsed() && !this._drawerLayout(), ...ngDevMode ? [{ debugName: "_isRail" }] : /* istanbul ignore next */ []);
|
|
@@ -32489,6 +33203,7 @@ var AppShellComponent = class AppShellComponent {
|
|
|
32489
33203
|
this._routerSub = this.router.events.pipe(filter((e) => e instanceof NavigationEnd)).subscribe((e) => {
|
|
32490
33204
|
this.closeSidebar();
|
|
32491
33205
|
this._expandActiveGroup(e.urlAfterRedirects);
|
|
33206
|
+
this._routeTitle.set(this._titleOfRoute());
|
|
32492
33207
|
});
|
|
32493
33208
|
if (typeof matchMedia === "function") {
|
|
32494
33209
|
this._drawerMq = matchMedia(AppShellComponent._DRAWER_MQ);
|
|
@@ -32496,6 +33211,17 @@ var AppShellComponent = class AppShellComponent {
|
|
|
32496
33211
|
this._drawerMq?.addEventListener?.("change", this._onDrawerMqChange);
|
|
32497
33212
|
}
|
|
32498
33213
|
this._expandActiveGroup(this.router.url);
|
|
33214
|
+
this._routeTitle.set(this._titleOfRoute());
|
|
33215
|
+
}
|
|
33216
|
+
_titleOfRoute() {
|
|
33217
|
+
let route = this.router.routerState?.snapshot?.root ?? null;
|
|
33218
|
+
let title = "";
|
|
33219
|
+
while (route) {
|
|
33220
|
+
const t = route.data?.["pageTitle"];
|
|
33221
|
+
if (typeof t === "string" && t) title = t;
|
|
33222
|
+
route = route.firstChild;
|
|
33223
|
+
}
|
|
33224
|
+
return title;
|
|
32499
33225
|
}
|
|
32500
33226
|
ngOnDestroy() {
|
|
32501
33227
|
this._routerSub?.unsubscribe();
|
|
@@ -32548,6 +33274,13 @@ var AppShellComponent = class AppShellComponent {
|
|
|
32548
33274
|
isRequired: false,
|
|
32549
33275
|
transformFunction: null
|
|
32550
33276
|
},
|
|
33277
|
+
showToast: {
|
|
33278
|
+
classPropertyName: "showToast",
|
|
33279
|
+
publicName: "showToast",
|
|
33280
|
+
isSignal: true,
|
|
33281
|
+
isRequired: false,
|
|
33282
|
+
transformFunction: null
|
|
33283
|
+
},
|
|
32551
33284
|
appName: {
|
|
32552
33285
|
classPropertyName: "appName",
|
|
32553
33286
|
publicName: "appName",
|
|
@@ -32773,8 +33506,8 @@ var AppShellComponent = class AppShellComponent {
|
|
|
32773
33506
|
</svg>
|
|
32774
33507
|
</button>
|
|
32775
33508
|
|
|
32776
|
-
@if (
|
|
32777
|
-
<h1 class="page-title" id="shell-page-title" tabindex="-1">{{
|
|
33509
|
+
@if (_title()) {
|
|
33510
|
+
<h1 class="page-title" id="shell-page-title" tabindex="-1">{{ _title() }}</h1>
|
|
32778
33511
|
}
|
|
32779
33512
|
|
|
32780
33513
|
@if (readOnly()) {
|
|
@@ -32798,7 +33531,7 @@ var AppShellComponent = class AppShellComponent {
|
|
|
32798
33531
|
<ng-content select="[shell-banners]" />
|
|
32799
33532
|
|
|
32800
33533
|
<!-- Page content -->
|
|
32801
|
-
<main class="content" id="main-content" role="main" tabindex="-1" [attr.aria-labelledby]="
|
|
33534
|
+
<main class="content" id="main-content" role="main" tabindex="-1" [attr.aria-labelledby]="_title() ? 'shell-page-title' : null">
|
|
32802
33535
|
<ng-content />
|
|
32803
33536
|
</main>
|
|
32804
33537
|
</div>
|
|
@@ -32806,6 +33539,10 @@ var AppShellComponent = class AppShellComponent {
|
|
|
32806
33539
|
|
|
32807
33540
|
<!-- Global confirm overlay — position:fixed so it overlays without affecting layout -->
|
|
32808
33541
|
<ui-confirm-outlet />
|
|
33542
|
+
|
|
33543
|
+
@if (showToast()) {
|
|
33544
|
+
<ui-toast />
|
|
33545
|
+
}
|
|
32809
33546
|
`,
|
|
32810
33547
|
isInline: true,
|
|
32811
33548
|
styles: [":host{display:contents}.shell{display:flex;height:100vh;height:100dvh;overflow:hidden;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}.sidebar-backdrop{display:none;position:fixed;inset:0;background:#00000080;backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px);z-index:199}.sidebar{width:256px;background:var(--shell-bg, linear-gradient(175deg, #0f172a 0%, #111827 100%));display:flex;flex-direction:column;flex-shrink:0;overflow:hidden}.sidebar-header{display:flex;align-items:center;padding:0 20px;min-height:64px;border-bottom:1px solid color-mix(in srgb,var(--shell-text, #fff) 6%,transparent);box-sizing:border-box}.brand-default{display:flex;align-items:center;gap:10px}.brand-text{font-size:1.125rem;font-weight:700;color:var(--shell-text, #fff);letter-spacing:-.01em}.sidebar-nav{padding:6px 0 8px;flex:1;overflow-y:auto;overflow-x:hidden;scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--shell-text, #fff) 8%,transparent) transparent}.sidebar-nav::-webkit-scrollbar{width:3px}.sidebar-nav::-webkit-scrollbar-track{background:transparent}.sidebar-nav::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--shell-text, #fff) 8%,transparent);border-radius:2px}.nav-group{margin-bottom:6px}.nav-group-links[hidden]{display:none}.nav-group-label{display:flex;align-items:center;gap:6px;width:100%;padding:8px 16px;font-size:.6875rem;font-weight:700;color:color-mix(in srgb,var(--shell-text, #fff) 80%,transparent);text-transform:uppercase;letter-spacing:.12em;background:none;border:none;cursor:pointer;transition:color .15s;text-align:left;border-radius:6px;background:color-mix(in srgb,var(--shell-text, #fff) 10%,transparent);margin:6px 4px 4px;width:calc(100% - 8px);box-sizing:border-box}.nav-group-label:hover{color:color-mix(in srgb,var(--shell-text, #fff) 100%,transparent)}.nav-group-label:focus-visible{outline:2px solid rgba(96,165,250,.5);outline-offset:-1px}.chevron{flex-shrink:0;transition:transform .2s cubic-bezier(.4,0,.2,1);opacity:.85}.chevron.collapsed{transform:rotate(-90deg)}.sidebar-nav a{display:flex;align-items:center;gap:10px;padding:8px 12px 8px 32px;color:color-mix(in srgb,var(--shell-text, #fff) 95%,transparent);font-size:.9375rem;font-weight:500;text-decoration:none;border-left:2px solid transparent;border-radius:0 8px 8px 0;margin-right:10px;transition:color .15s,background .15s,border-color .15s}.sidebar-nav a:hover{color:color-mix(in srgb,var(--shell-text, #fff) 100%,transparent);background:color-mix(in srgb,var(--shell-text, #fff) 6%,transparent)}.sidebar-nav a.active{color:var(--shell-text, #fff);background:#60a5fa21;border-left-color:#60a5fa;font-weight:600}.sidebar-nav a:focus-visible{outline:2px solid rgba(96,165,250,.5);outline-offset:-2px}.nav-icon{display:flex;align-items:center;flex-shrink:0}.nav-label{flex:1}.nav-badge{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 5px;border-radius:9px;background:#ef4444;color:#fff;font-size:.625rem;font-weight:700;margin-left:auto}.sidebar-footer{padding:10px 14px;border-top:1px solid color-mix(in srgb,var(--shell-text, #fff) 6%,transparent)}.user-info{display:flex;align-items:center;gap:10px}.user-avatar{width:32px;height:32px;border-radius:50%;background:linear-gradient(135deg,#60a5fa38,#60a5fa14);border:1px solid rgba(96,165,250,.18);color:color-mix(in srgb,var(--shell-text, #fff) 88%,transparent);font-size:.75rem;font-weight:600;display:flex;align-items:center;justify-content:center;flex-shrink:0}.user-details{display:flex;flex-direction:column;min-width:0;flex:1}.user-name{font-size:.8125rem;font-weight:600;color:var(--shell-text, #fff);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.user-role{font-size:.6875rem;color:color-mix(in srgb,var(--shell-text, #fff) 80%,transparent);text-transform:uppercase;letter-spacing:.05em;font-weight:500}.btn-logout{background:none;border:none;cursor:pointer;color:color-mix(in srgb,var(--shell-text, #fff) 85%,transparent);padding:6px;border-radius:8px;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:color .15s,background .15s}.btn-logout:hover{color:#f87171;background:#f871711a}.btn-logout:focus-visible{outline:2px solid rgba(96,165,250,.5);outline-offset:2px}.brand-full{display:flex;align-items:center;min-width:0;flex:1}.brand-mark{display:none}.shell.collapsed .brand-mark{width:36px;height:36px;border-radius:10px;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:1.125rem;color:var(--shell-text, #fff);background:color-mix(in srgb,var(--shell-text, #fff) 15%,transparent)}.rail-toggle{display:none;align-items:center;justify-content:center;width:32px;height:32px;margin-left:auto;flex-shrink:0;border:none;background:none;cursor:pointer;border-radius:8px;color:color-mix(in srgb,var(--shell-text, #fff) 85%,transparent);transition:background .15s,color .15s}.rail-toggle:hover{background:color-mix(in srgb,var(--shell-text, #fff) 12%,transparent);color:var(--shell-text, #fff)}.rail-toggle:focus-visible{outline:2px solid rgba(96,165,250,.5);outline-offset:2px}.rail-divider{display:none}@media(min-width:1025px){.rail-toggle{display:flex}.sidebar{transition:width .2s cubic-bezier(.4,0,.2,1)}.shell.collapsed .sidebar{width:68px}.shell.collapsed .sidebar-header{flex-direction:column;justify-content:center;gap:4px;padding:8px 0}.shell.collapsed .brand-full{flex:none;width:44px;height:44px;overflow:hidden;border-radius:10px;justify-content:center}.shell.collapsed .brand-text{display:none}.shell.collapsed .rail-toggle{margin-left:0}.shell.collapsed .nav-group-label{display:none}.shell.collapsed .rail-divider{display:block;height:1px;margin:8px 14px;background:color-mix(in srgb,var(--shell-text, #fff) 20%,transparent)}.shell.collapsed .nav-group:first-child .rail-divider{display:none}.shell.collapsed .sidebar-nav a{position:relative;justify-content:center;padding:10px 0;margin:0 8px 2px;border-left:none;border-radius:8px}.shell.collapsed .sidebar-nav a.active{box-shadow:inset 3px 0 #60a5fa}.shell.collapsed .nav-label{display:none}.shell.collapsed .nav-badge{position:absolute;top:2px;right:4px;min-width:16px;height:16px;padding:0 4px;font-size:.5625rem;margin:0}.shell.collapsed .sidebar-footer{padding:10px 8px}.shell.collapsed .user-info{flex-direction:column;gap:8px}.shell.collapsed .user-details{display:none}}.main-area{flex:1;display:flex;flex-direction:column;overflow:hidden;min-width:0}.top-header{display:flex;align-items:center;gap:8px;padding:0 24px;background:#fff;box-shadow:0 1px 3px #00000012,0 1px #0000000a;min-height:64px;box-sizing:border-box;position:relative;z-index:50}.hamburger{display:none;align-items:center;justify-content:center;width:36px;height:36px;border:none;background:none;cursor:pointer;color:#374151;border-radius:8px;flex-shrink:0;transition:background .15s,color .15s}.hamburger:hover{background:#f3f4f6}.hamburger:focus-visible{outline:2px solid rgba(59,130,246,.5);outline-offset:2px}.page-title{font-size:1.25rem;font-weight:700;color:#111827;margin:0;letter-spacing:-.02em}.page-title:focus{outline:none}.read-only-badge{display:inline-flex;align-items:center;flex-shrink:0;padding:2px 8px;border-radius:9999px;font-size:.6875rem;font-weight:600;letter-spacing:.02em;text-transform:uppercase;background:#fef9c3;color:#854d0e;border:1px solid #fde68a;white-space:nowrap}.header-start{display:flex;align-items:center;min-width:0;margin-left:8px;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none}.header-start:empty{display:none}.header-start::-webkit-scrollbar{display:none}.header-end{display:flex;align-items:center;margin-left:auto}.content:focus{outline:none}.content{--shell-content-padding: 24px;flex:1;overflow-y:auto;padding:var(--shell-content-padding);background:#f7f8f6;display:flex;flex-direction:column;box-sizing:border-box;min-height:0}.content>*{flex:1;min-height:0;display:flex;flex-direction:column}.skip-link{position:absolute;top:-48px;left:8px;z-index:300;padding:8px 14px;border-radius:6px;background:#fff;color:#1d4ed8;font-size:.875rem;font-weight:600;text-decoration:none;box-shadow:0 2px 10px #00000040}.skip-link:focus{top:8px;outline:2px solid #1d4ed8;outline-offset:2px}.nav-group-label--static{cursor:default}@media(max-width:1024px){.hamburger{display:flex}.sidebar{position:fixed;top:0;left:0;bottom:0;z-index:200;transform:translate(-100%);transition:transform .26s cubic-bezier(.4,0,.2,1),box-shadow .26s cubic-bezier(.4,0,.2,1),visibility 0s linear .26s;visibility:hidden;box-shadow:none}.shell.sidebar-open .sidebar{transform:translate(0);box-shadow:4px 0 32px #0000004d;visibility:visible;transition-delay:0s}.shell.sidebar-open .sidebar-backdrop{display:block}.main-area{width:100%}.top-header{padding:0 16px;gap:4px}.content{--shell-content-padding: 16px}}@media(max-width:480px){.page-title{font-size:1.0625rem}.content{--shell-content-padding: 12px}}@media(pointer:coarse),(max-width:480px){.sidebar-nav a,.nav-group-label{min-height:44px}.btn-logout,.hamburger,.rail-toggle{min-width:44px;min-height:44px}}@media(prefers-reduced-motion:reduce){.chevron,.sidebar-nav a,.sidebar{transition:none!important}}\n"],
|
|
@@ -32846,6 +33583,12 @@ var AppShellComponent = class AppShellComponent {
|
|
|
32846
33583
|
type: ConfirmOutletComponent,
|
|
32847
33584
|
selector: "ui-confirm-outlet"
|
|
32848
33585
|
},
|
|
33586
|
+
{
|
|
33587
|
+
kind: "component",
|
|
33588
|
+
type: ToastComponent,
|
|
33589
|
+
selector: "ui-toast",
|
|
33590
|
+
inputs: ["dismissible", "persistentLiveRegion"]
|
|
33591
|
+
},
|
|
32849
33592
|
{
|
|
32850
33593
|
kind: "component",
|
|
32851
33594
|
type: ShellProjectedStylesComponent,
|
|
@@ -32871,6 +33614,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
32871
33614
|
RouterLink,
|
|
32872
33615
|
RouterLinkActive,
|
|
32873
33616
|
ConfirmOutletComponent,
|
|
33617
|
+
ToastComponent,
|
|
32874
33618
|
ShellProjectedStylesComponent
|
|
32875
33619
|
],
|
|
32876
33620
|
template: `
|
|
@@ -33046,8 +33790,8 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
33046
33790
|
</svg>
|
|
33047
33791
|
</button>
|
|
33048
33792
|
|
|
33049
|
-
@if (
|
|
33050
|
-
<h1 class="page-title" id="shell-page-title" tabindex="-1">{{
|
|
33793
|
+
@if (_title()) {
|
|
33794
|
+
<h1 class="page-title" id="shell-page-title" tabindex="-1">{{ _title() }}</h1>
|
|
33051
33795
|
}
|
|
33052
33796
|
|
|
33053
33797
|
@if (readOnly()) {
|
|
@@ -33071,7 +33815,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
33071
33815
|
<ng-content select="[shell-banners]" />
|
|
33072
33816
|
|
|
33073
33817
|
<!-- Page content -->
|
|
33074
|
-
<main class="content" id="main-content" role="main" tabindex="-1" [attr.aria-labelledby]="
|
|
33818
|
+
<main class="content" id="main-content" role="main" tabindex="-1" [attr.aria-labelledby]="_title() ? 'shell-page-title' : null">
|
|
33075
33819
|
<ng-content />
|
|
33076
33820
|
</main>
|
|
33077
33821
|
</div>
|
|
@@ -33079,6 +33823,10 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
33079
33823
|
|
|
33080
33824
|
<!-- Global confirm overlay — position:fixed so it overlays without affecting layout -->
|
|
33081
33825
|
<ui-confirm-outlet />
|
|
33826
|
+
|
|
33827
|
+
@if (showToast()) {
|
|
33828
|
+
<ui-toast />
|
|
33829
|
+
}
|
|
33082
33830
|
`,
|
|
33083
33831
|
styles: [":host{display:contents}.shell{display:flex;height:100vh;height:100dvh;overflow:hidden;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}.sidebar-backdrop{display:none;position:fixed;inset:0;background:#00000080;backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px);z-index:199}.sidebar{width:256px;background:var(--shell-bg, linear-gradient(175deg, #0f172a 0%, #111827 100%));display:flex;flex-direction:column;flex-shrink:0;overflow:hidden}.sidebar-header{display:flex;align-items:center;padding:0 20px;min-height:64px;border-bottom:1px solid color-mix(in srgb,var(--shell-text, #fff) 6%,transparent);box-sizing:border-box}.brand-default{display:flex;align-items:center;gap:10px}.brand-text{font-size:1.125rem;font-weight:700;color:var(--shell-text, #fff);letter-spacing:-.01em}.sidebar-nav{padding:6px 0 8px;flex:1;overflow-y:auto;overflow-x:hidden;scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--shell-text, #fff) 8%,transparent) transparent}.sidebar-nav::-webkit-scrollbar{width:3px}.sidebar-nav::-webkit-scrollbar-track{background:transparent}.sidebar-nav::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--shell-text, #fff) 8%,transparent);border-radius:2px}.nav-group{margin-bottom:6px}.nav-group-links[hidden]{display:none}.nav-group-label{display:flex;align-items:center;gap:6px;width:100%;padding:8px 16px;font-size:.6875rem;font-weight:700;color:color-mix(in srgb,var(--shell-text, #fff) 80%,transparent);text-transform:uppercase;letter-spacing:.12em;background:none;border:none;cursor:pointer;transition:color .15s;text-align:left;border-radius:6px;background:color-mix(in srgb,var(--shell-text, #fff) 10%,transparent);margin:6px 4px 4px;width:calc(100% - 8px);box-sizing:border-box}.nav-group-label:hover{color:color-mix(in srgb,var(--shell-text, #fff) 100%,transparent)}.nav-group-label:focus-visible{outline:2px solid rgba(96,165,250,.5);outline-offset:-1px}.chevron{flex-shrink:0;transition:transform .2s cubic-bezier(.4,0,.2,1);opacity:.85}.chevron.collapsed{transform:rotate(-90deg)}.sidebar-nav a{display:flex;align-items:center;gap:10px;padding:8px 12px 8px 32px;color:color-mix(in srgb,var(--shell-text, #fff) 95%,transparent);font-size:.9375rem;font-weight:500;text-decoration:none;border-left:2px solid transparent;border-radius:0 8px 8px 0;margin-right:10px;transition:color .15s,background .15s,border-color .15s}.sidebar-nav a:hover{color:color-mix(in srgb,var(--shell-text, #fff) 100%,transparent);background:color-mix(in srgb,var(--shell-text, #fff) 6%,transparent)}.sidebar-nav a.active{color:var(--shell-text, #fff);background:#60a5fa21;border-left-color:#60a5fa;font-weight:600}.sidebar-nav a:focus-visible{outline:2px solid rgba(96,165,250,.5);outline-offset:-2px}.nav-icon{display:flex;align-items:center;flex-shrink:0}.nav-label{flex:1}.nav-badge{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 5px;border-radius:9px;background:#ef4444;color:#fff;font-size:.625rem;font-weight:700;margin-left:auto}.sidebar-footer{padding:10px 14px;border-top:1px solid color-mix(in srgb,var(--shell-text, #fff) 6%,transparent)}.user-info{display:flex;align-items:center;gap:10px}.user-avatar{width:32px;height:32px;border-radius:50%;background:linear-gradient(135deg,#60a5fa38,#60a5fa14);border:1px solid rgba(96,165,250,.18);color:color-mix(in srgb,var(--shell-text, #fff) 88%,transparent);font-size:.75rem;font-weight:600;display:flex;align-items:center;justify-content:center;flex-shrink:0}.user-details{display:flex;flex-direction:column;min-width:0;flex:1}.user-name{font-size:.8125rem;font-weight:600;color:var(--shell-text, #fff);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.user-role{font-size:.6875rem;color:color-mix(in srgb,var(--shell-text, #fff) 80%,transparent);text-transform:uppercase;letter-spacing:.05em;font-weight:500}.btn-logout{background:none;border:none;cursor:pointer;color:color-mix(in srgb,var(--shell-text, #fff) 85%,transparent);padding:6px;border-radius:8px;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:color .15s,background .15s}.btn-logout:hover{color:#f87171;background:#f871711a}.btn-logout:focus-visible{outline:2px solid rgba(96,165,250,.5);outline-offset:2px}.brand-full{display:flex;align-items:center;min-width:0;flex:1}.brand-mark{display:none}.shell.collapsed .brand-mark{width:36px;height:36px;border-radius:10px;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:1.125rem;color:var(--shell-text, #fff);background:color-mix(in srgb,var(--shell-text, #fff) 15%,transparent)}.rail-toggle{display:none;align-items:center;justify-content:center;width:32px;height:32px;margin-left:auto;flex-shrink:0;border:none;background:none;cursor:pointer;border-radius:8px;color:color-mix(in srgb,var(--shell-text, #fff) 85%,transparent);transition:background .15s,color .15s}.rail-toggle:hover{background:color-mix(in srgb,var(--shell-text, #fff) 12%,transparent);color:var(--shell-text, #fff)}.rail-toggle:focus-visible{outline:2px solid rgba(96,165,250,.5);outline-offset:2px}.rail-divider{display:none}@media(min-width:1025px){.rail-toggle{display:flex}.sidebar{transition:width .2s cubic-bezier(.4,0,.2,1)}.shell.collapsed .sidebar{width:68px}.shell.collapsed .sidebar-header{flex-direction:column;justify-content:center;gap:4px;padding:8px 0}.shell.collapsed .brand-full{flex:none;width:44px;height:44px;overflow:hidden;border-radius:10px;justify-content:center}.shell.collapsed .brand-text{display:none}.shell.collapsed .rail-toggle{margin-left:0}.shell.collapsed .nav-group-label{display:none}.shell.collapsed .rail-divider{display:block;height:1px;margin:8px 14px;background:color-mix(in srgb,var(--shell-text, #fff) 20%,transparent)}.shell.collapsed .nav-group:first-child .rail-divider{display:none}.shell.collapsed .sidebar-nav a{position:relative;justify-content:center;padding:10px 0;margin:0 8px 2px;border-left:none;border-radius:8px}.shell.collapsed .sidebar-nav a.active{box-shadow:inset 3px 0 #60a5fa}.shell.collapsed .nav-label{display:none}.shell.collapsed .nav-badge{position:absolute;top:2px;right:4px;min-width:16px;height:16px;padding:0 4px;font-size:.5625rem;margin:0}.shell.collapsed .sidebar-footer{padding:10px 8px}.shell.collapsed .user-info{flex-direction:column;gap:8px}.shell.collapsed .user-details{display:none}}.main-area{flex:1;display:flex;flex-direction:column;overflow:hidden;min-width:0}.top-header{display:flex;align-items:center;gap:8px;padding:0 24px;background:#fff;box-shadow:0 1px 3px #00000012,0 1px #0000000a;min-height:64px;box-sizing:border-box;position:relative;z-index:50}.hamburger{display:none;align-items:center;justify-content:center;width:36px;height:36px;border:none;background:none;cursor:pointer;color:#374151;border-radius:8px;flex-shrink:0;transition:background .15s,color .15s}.hamburger:hover{background:#f3f4f6}.hamburger:focus-visible{outline:2px solid rgba(59,130,246,.5);outline-offset:2px}.page-title{font-size:1.25rem;font-weight:700;color:#111827;margin:0;letter-spacing:-.02em}.page-title:focus{outline:none}.read-only-badge{display:inline-flex;align-items:center;flex-shrink:0;padding:2px 8px;border-radius:9999px;font-size:.6875rem;font-weight:600;letter-spacing:.02em;text-transform:uppercase;background:#fef9c3;color:#854d0e;border:1px solid #fde68a;white-space:nowrap}.header-start{display:flex;align-items:center;min-width:0;margin-left:8px;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none}.header-start:empty{display:none}.header-start::-webkit-scrollbar{display:none}.header-end{display:flex;align-items:center;margin-left:auto}.content:focus{outline:none}.content{--shell-content-padding: 24px;flex:1;overflow-y:auto;padding:var(--shell-content-padding);background:#f7f8f6;display:flex;flex-direction:column;box-sizing:border-box;min-height:0}.content>*{flex:1;min-height:0;display:flex;flex-direction:column}.skip-link{position:absolute;top:-48px;left:8px;z-index:300;padding:8px 14px;border-radius:6px;background:#fff;color:#1d4ed8;font-size:.875rem;font-weight:600;text-decoration:none;box-shadow:0 2px 10px #00000040}.skip-link:focus{top:8px;outline:2px solid #1d4ed8;outline-offset:2px}.nav-group-label--static{cursor:default}@media(max-width:1024px){.hamburger{display:flex}.sidebar{position:fixed;top:0;left:0;bottom:0;z-index:200;transform:translate(-100%);transition:transform .26s cubic-bezier(.4,0,.2,1),box-shadow .26s cubic-bezier(.4,0,.2,1),visibility 0s linear .26s;visibility:hidden;box-shadow:none}.shell.sidebar-open .sidebar{transform:translate(0);box-shadow:4px 0 32px #0000004d;visibility:visible;transition-delay:0s}.shell.sidebar-open .sidebar-backdrop{display:block}.main-area{width:100%}.top-header{padding:0 16px;gap:4px}.content{--shell-content-padding: 16px}}@media(max-width:480px){.page-title{font-size:1.0625rem}.content{--shell-content-padding: 12px}}@media(pointer:coarse),(max-width:480px){.sidebar-nav a,.nav-group-label{min-height:44px}.btn-logout,.hamburger,.rail-toggle{min-width:44px;min-height:44px}}@media(prefers-reduced-motion:reduce){.chevron,.sidebar-nav a,.sidebar{transition:none!important}}\n"]
|
|
33084
33832
|
}]
|
|
@@ -33100,6 +33848,14 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
33100
33848
|
required: false
|
|
33101
33849
|
}]
|
|
33102
33850
|
}],
|
|
33851
|
+
showToast: [{
|
|
33852
|
+
type: i0.Input,
|
|
33853
|
+
args: [{
|
|
33854
|
+
isSignal: true,
|
|
33855
|
+
alias: "showToast",
|
|
33856
|
+
required: false
|
|
33857
|
+
}]
|
|
33858
|
+
}],
|
|
33103
33859
|
appName: [{
|
|
33104
33860
|
type: i0.Input,
|
|
33105
33861
|
args: [{
|
|
@@ -41243,6 +41999,69 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
41243
41999
|
}]
|
|
41244
42000
|
}
|
|
41245
42001
|
});
|
|
42002
|
+
const MIN_HEIGHT_PX = 240;
|
|
42003
|
+
var FillViewportDirective = class FillViewportDirective {
|
|
42004
|
+
constructor() {
|
|
42005
|
+
this.el = inject(ElementRef).nativeElement;
|
|
42006
|
+
const destroyRef = inject(DestroyRef);
|
|
42007
|
+
afterNextRender(() => {
|
|
42008
|
+
const scroller = this.el.closest("main");
|
|
42009
|
+
if (!scroller) return;
|
|
42010
|
+
let frame = 0;
|
|
42011
|
+
const measure = () => {
|
|
42012
|
+
cancelAnimationFrame(frame);
|
|
42013
|
+
frame = requestAnimationFrame(() => {
|
|
42014
|
+
const padBottom = parseFloat(getComputedStyle(scroller).paddingBottom) || 0;
|
|
42015
|
+
const topInContent = this.el.getBoundingClientRect().top - scroller.getBoundingClientRect().top + scroller.scrollTop;
|
|
42016
|
+
const height = Math.max(MIN_HEIGHT_PX, Math.floor(scroller.clientHeight - padBottom - topInContent));
|
|
42017
|
+
this.el.style.setProperty("--cols-h", `${height}px`);
|
|
42018
|
+
});
|
|
42019
|
+
};
|
|
42020
|
+
const observer = new ResizeObserver(measure);
|
|
42021
|
+
observer.observe(scroller);
|
|
42022
|
+
if (this.el.parentElement) observer.observe(this.el.parentElement);
|
|
42023
|
+
measure();
|
|
42024
|
+
destroyRef.onDestroy(() => {
|
|
42025
|
+
observer.disconnect();
|
|
42026
|
+
cancelAnimationFrame(frame);
|
|
42027
|
+
});
|
|
42028
|
+
});
|
|
42029
|
+
}
|
|
42030
|
+
static {
|
|
42031
|
+
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
42032
|
+
minVersion: "12.0.0",
|
|
42033
|
+
version: "22.2.2",
|
|
42034
|
+
ngImport: i0,
|
|
42035
|
+
type: FillViewportDirective,
|
|
42036
|
+
deps: [],
|
|
42037
|
+
target: i0.ɵɵFactoryTarget.Directive
|
|
42038
|
+
});
|
|
42039
|
+
}
|
|
42040
|
+
static {
|
|
42041
|
+
this.ɵdir = i0.ɵɵngDeclareDirective({
|
|
42042
|
+
minVersion: "14.0.0",
|
|
42043
|
+
version: "22.2.2",
|
|
42044
|
+
type: FillViewportDirective,
|
|
42045
|
+
isStandalone: true,
|
|
42046
|
+
selector: "[uiFillViewport]",
|
|
42047
|
+
ngImport: i0
|
|
42048
|
+
});
|
|
42049
|
+
}
|
|
42050
|
+
};
|
|
42051
|
+
i0.ɵɵngDeclareClassMetadata({
|
|
42052
|
+
minVersion: "12.0.0",
|
|
42053
|
+
version: "22.2.2",
|
|
42054
|
+
ngImport: i0,
|
|
42055
|
+
type: FillViewportDirective,
|
|
42056
|
+
decorators: [{
|
|
42057
|
+
type: Directive,
|
|
42058
|
+
args: [{
|
|
42059
|
+
selector: "[uiFillViewport]",
|
|
42060
|
+
standalone: true
|
|
42061
|
+
}]
|
|
42062
|
+
}],
|
|
42063
|
+
ctorParameters: () => []
|
|
42064
|
+
});
|
|
41246
42065
|
const JUSTIFY = {
|
|
41247
42066
|
start: "flex-start",
|
|
41248
42067
|
center: "center",
|
|
@@ -41603,6 +42422,44 @@ function layoutLanes(boxes) {
|
|
|
41603
42422
|
flush();
|
|
41604
42423
|
return result;
|
|
41605
42424
|
}
|
|
42425
|
+
function periodGroup(todayStr) {
|
|
42426
|
+
if (!isValidDateStr(todayStr)) return () => null;
|
|
42427
|
+
const today = fromDateStr(todayStr);
|
|
42428
|
+
const tomorrow = toDateStr(new Date(today.getFullYear(), today.getMonth(), today.getDate() + 1));
|
|
42429
|
+
const weekEnd = toDateStr(new Date(today.getFullYear(), today.getMonth(), today.getDate() + (6 - today.getDay())));
|
|
42430
|
+
return (dateStr) => {
|
|
42431
|
+
if (!isValidDateStr(dateStr)) return null;
|
|
42432
|
+
if (dateStr < todayStr) return {
|
|
42433
|
+
key: "overdue",
|
|
42434
|
+
label: "Overdue"
|
|
42435
|
+
};
|
|
42436
|
+
if (dateStr === todayStr) return {
|
|
42437
|
+
key: "today",
|
|
42438
|
+
label: "Today"
|
|
42439
|
+
};
|
|
42440
|
+
if (dateStr === tomorrow) return {
|
|
42441
|
+
key: "tomorrow",
|
|
42442
|
+
label: "Tomorrow"
|
|
42443
|
+
};
|
|
42444
|
+
if (dateStr <= weekEnd) return {
|
|
42445
|
+
key: "this-week",
|
|
42446
|
+
label: "This Week"
|
|
42447
|
+
};
|
|
42448
|
+
return {
|
|
42449
|
+
key: "later",
|
|
42450
|
+
label: "Later"
|
|
42451
|
+
};
|
|
42452
|
+
};
|
|
42453
|
+
}
|
|
42454
|
+
const DAY_LEVEL_TEXT = {
|
|
42455
|
+
low: "low activity",
|
|
42456
|
+
medium: "medium activity",
|
|
42457
|
+
high: "high activity",
|
|
42458
|
+
critical: "critical activity"
|
|
42459
|
+
};
|
|
42460
|
+
function isDayLevel(level) {
|
|
42461
|
+
return level === "low" || level === "medium" || level === "high" || level === "critical";
|
|
42462
|
+
}
|
|
41606
42463
|
const PENDING_FOCUS_MS = 1e3;
|
|
41607
42464
|
var CalendarComponent = class CalendarComponent {
|
|
41608
42465
|
clickable(dateStr) {
|
|
@@ -41637,11 +42494,15 @@ var CalendarComponent = class CalendarComponent {
|
|
|
41637
42494
|
this.endHour = input(21, ...ngDevMode ? [{ debugName: "endHour" }] : /* istanbul ignore next */ []);
|
|
41638
42495
|
this.emptyMessage = input("No events in this period.", ...ngDevMode ? [{ debugName: "emptyMessage" }] : /* istanbul ignore next */ []);
|
|
41639
42496
|
this.dayLabelFn = input(null, ...ngDevMode ? [{ debugName: "dayLabelFn" }] : /* istanbul ignore next */ []);
|
|
42497
|
+
this.dayDecorationFn = input(null, ...ngDevMode ? [{ debugName: "dayDecorationFn" }] : /* istanbul ignore next */ []);
|
|
42498
|
+
this.itemActionsFn = input(null, ...ngDevMode ? [{ debugName: "itemActionsFn" }] : /* istanbul ignore next */ []);
|
|
42499
|
+
this.agendaGroupFn = input(null, ...ngDevMode ? [{ debugName: "agendaGroupFn" }] : /* istanbul ignore next */ []);
|
|
41640
42500
|
this.rangeChange = output();
|
|
41641
42501
|
this.itemClick = output();
|
|
41642
42502
|
this.dateClick = output();
|
|
41643
42503
|
this.slotClick = output();
|
|
41644
42504
|
this.moreClick = output();
|
|
42505
|
+
this.itemAction = output();
|
|
41645
42506
|
this.host = inject(ElementRef);
|
|
41646
42507
|
this.weekDayLabels = WEEK_DAY_LABELS;
|
|
41647
42508
|
this.weekDayNames = [
|
|
@@ -41733,13 +42594,16 @@ var CalendarComponent = class CalendarComponent {
|
|
|
41733
42594
|
const max = this.maxVisible();
|
|
41734
42595
|
const cells = this.monthCells().map((day) => {
|
|
41735
42596
|
const items = this.byDate()[day.dateStr] ?? [];
|
|
42597
|
+
const deco = this.decoration(day.dateStr, items);
|
|
41736
42598
|
return {
|
|
41737
42599
|
day,
|
|
41738
42600
|
items,
|
|
41739
42601
|
visible: items.slice(0, max),
|
|
41740
42602
|
overflow: Math.max(0, items.length - max),
|
|
41741
42603
|
clickable: this.clickable(day.dateStr),
|
|
41742
|
-
label: this.dayAriaLabel(day.dateStr, items)
|
|
42604
|
+
label: this.dayAriaLabel(day.dateStr, items, deco.level),
|
|
42605
|
+
level: deco.level,
|
|
42606
|
+
tooltip: deco.tooltip
|
|
41743
42607
|
};
|
|
41744
42608
|
});
|
|
41745
42609
|
return Array.from({ length: 6 }, (_, r) => ({
|
|
@@ -41760,10 +42624,13 @@ var CalendarComponent = class CalendarComponent {
|
|
|
41760
42624
|
top: b.top,
|
|
41761
42625
|
height: b.height
|
|
41762
42626
|
})));
|
|
42627
|
+
const deco = this.decoration(day.dateStr, items);
|
|
41763
42628
|
return {
|
|
41764
42629
|
day,
|
|
41765
42630
|
label: formatDayLabel(day.dateStr),
|
|
41766
42631
|
clickable: this.clickable(day.dateStr),
|
|
42632
|
+
level: deco.level,
|
|
42633
|
+
tooltip: deco.tooltip,
|
|
41767
42634
|
allDay: items.filter((e) => e.allDay || !e.startTime),
|
|
41768
42635
|
timed: boxes.map((b) => ({
|
|
41769
42636
|
...b,
|
|
@@ -41780,6 +42647,41 @@ var CalendarComponent = class CalendarComponent {
|
|
|
41780
42647
|
}, ...ngDevMode ? [{ debugName: "focusDate" }] : /* istanbul ignore next */ []);
|
|
41781
42648
|
this.pendingFocus = null;
|
|
41782
42649
|
this.pendingSawLoading = false;
|
|
42650
|
+
this.actionsById = computed(() => {
|
|
42651
|
+
const map = /* @__PURE__ */ new Map();
|
|
42652
|
+
const fn = this.itemActionsFn();
|
|
42653
|
+
if (!fn) return map;
|
|
42654
|
+
for (const e of this.items()) {
|
|
42655
|
+
const acts = fn(e);
|
|
42656
|
+
const seen = /* @__PURE__ */ new Set();
|
|
42657
|
+
const valid = Array.isArray(acts) ? acts.filter((a) => {
|
|
42658
|
+
if (!a || !a.id || !a.label || seen.has(a.id)) return false;
|
|
42659
|
+
seen.add(a.id);
|
|
42660
|
+
return true;
|
|
42661
|
+
}) : [];
|
|
42662
|
+
if (valid.length) map.set(e.id, valid);
|
|
42663
|
+
}
|
|
42664
|
+
return map;
|
|
42665
|
+
}, ...ngDevMode ? [{ debugName: "actionsById" }] : /* istanbul ignore next */ []);
|
|
42666
|
+
this.uid = `ui-cal-${CalendarComponent.nextUid++}`;
|
|
42667
|
+
this.agendaSections = computed(() => {
|
|
42668
|
+
const fn = this.agendaGroupFn();
|
|
42669
|
+
if (!fn) return null;
|
|
42670
|
+
const sections = [];
|
|
42671
|
+
for (const g of this.agendaGroups()) {
|
|
42672
|
+
const grp = fn(g.dateStr);
|
|
42673
|
+
const key = grp?.key ?? "";
|
|
42674
|
+
const last = sections.at(-1);
|
|
42675
|
+
if (last && last.key === key) last.groups.push(g);
|
|
42676
|
+
else sections.push({
|
|
42677
|
+
key,
|
|
42678
|
+
label: grp?.label ?? "",
|
|
42679
|
+
id: `${this.uid}-agenda-${sections.length}`,
|
|
42680
|
+
groups: [g]
|
|
42681
|
+
});
|
|
42682
|
+
}
|
|
42683
|
+
return sections;
|
|
42684
|
+
}, ...ngDevMode ? [{ debugName: "agendaSections" }] : /* istanbul ignore next */ []);
|
|
41783
42685
|
this.host.nativeElement.addEventListener("pointerdown", () => {
|
|
41784
42686
|
this.pendingFocus = null;
|
|
41785
42687
|
});
|
|
@@ -41886,11 +42788,46 @@ var CalendarComponent = class CalendarComponent {
|
|
|
41886
42788
|
agendaMeta(e) {
|
|
41887
42789
|
return [e.timeLabel ?? (!e.allDay && e.startTime ? this.timeRange(e) : ""), ...e.meta ?? []].filter(Boolean);
|
|
41888
42790
|
}
|
|
41889
|
-
dayAriaLabel(dateStr, items) {
|
|
42791
|
+
dayAriaLabel(dateStr, items, level = null) {
|
|
41890
42792
|
const fn = this.dayLabelFn();
|
|
41891
42793
|
if (fn) return fn(dateStr, items);
|
|
41892
42794
|
const label = formatDayLabel(dateStr);
|
|
41893
|
-
|
|
42795
|
+
const base = items.length ? `${label}, ${items.length} ${items.length === 1 ? "event" : "events"}` : label;
|
|
42796
|
+
return level ? `${base}, ${DAY_LEVEL_TEXT[level]}` : base;
|
|
42797
|
+
}
|
|
42798
|
+
decoration(dateStr, items) {
|
|
42799
|
+
const d = this.dayDecorationFn()?.(dateStr, items);
|
|
42800
|
+
return {
|
|
42801
|
+
level: d && isDayLevel(d.level) ? d.level : null,
|
|
42802
|
+
tooltip: d?.tooltip ?? ""
|
|
42803
|
+
};
|
|
42804
|
+
}
|
|
42805
|
+
levelText(level) {
|
|
42806
|
+
return DAY_LEVEL_TEXT[level];
|
|
42807
|
+
}
|
|
42808
|
+
static {
|
|
42809
|
+
this.NO_ACTIONS = [];
|
|
42810
|
+
}
|
|
42811
|
+
actionsFor(item) {
|
|
42812
|
+
return this.actionsById().get(item.id) ?? CalendarComponent.NO_ACTIONS;
|
|
42813
|
+
}
|
|
42814
|
+
actionIconD(a) {
|
|
42815
|
+
return a.icon ? iconPath(a.icon) ?? null : null;
|
|
42816
|
+
}
|
|
42817
|
+
onActionClick(item, action, event) {
|
|
42818
|
+
event.stopPropagation();
|
|
42819
|
+
if (action.disabled) return;
|
|
42820
|
+
this.itemAction.emit({
|
|
42821
|
+
item,
|
|
42822
|
+
actionId: action.id
|
|
42823
|
+
});
|
|
42824
|
+
}
|
|
42825
|
+
onActionsEscape(event) {
|
|
42826
|
+
event.stopPropagation();
|
|
42827
|
+
event.currentTarget.parentElement?.querySelector(":scope > .event-chip, :scope > .allday-chip, :scope > .timed-event, :scope > .agenda-event")?.focus();
|
|
42828
|
+
}
|
|
42829
|
+
static {
|
|
42830
|
+
this.nextUid = 0;
|
|
41894
42831
|
}
|
|
41895
42832
|
onDateClick(dateStr) {
|
|
41896
42833
|
if (this.clickable(dateStr)) this.dateClick.emit(dateStr);
|
|
@@ -42135,6 +43072,27 @@ var CalendarComponent = class CalendarComponent {
|
|
|
42135
43072
|
isSignal: true,
|
|
42136
43073
|
isRequired: false,
|
|
42137
43074
|
transformFunction: null
|
|
43075
|
+
},
|
|
43076
|
+
dayDecorationFn: {
|
|
43077
|
+
classPropertyName: "dayDecorationFn",
|
|
43078
|
+
publicName: "dayDecorationFn",
|
|
43079
|
+
isSignal: true,
|
|
43080
|
+
isRequired: false,
|
|
43081
|
+
transformFunction: null
|
|
43082
|
+
},
|
|
43083
|
+
itemActionsFn: {
|
|
43084
|
+
classPropertyName: "itemActionsFn",
|
|
43085
|
+
publicName: "itemActionsFn",
|
|
43086
|
+
isSignal: true,
|
|
43087
|
+
isRequired: false,
|
|
43088
|
+
transformFunction: null
|
|
43089
|
+
},
|
|
43090
|
+
agendaGroupFn: {
|
|
43091
|
+
classPropertyName: "agendaGroupFn",
|
|
43092
|
+
publicName: "agendaGroupFn",
|
|
43093
|
+
isSignal: true,
|
|
43094
|
+
isRequired: false,
|
|
43095
|
+
transformFunction: null
|
|
42138
43096
|
}
|
|
42139
43097
|
},
|
|
42140
43098
|
outputs: {
|
|
@@ -42145,7 +43103,8 @@ var CalendarComponent = class CalendarComponent {
|
|
|
42145
43103
|
itemClick: "itemClick",
|
|
42146
43104
|
dateClick: "dateClick",
|
|
42147
43105
|
slotClick: "slotClick",
|
|
42148
|
-
moreClick: "moreClick"
|
|
43106
|
+
moreClick: "moreClick",
|
|
43107
|
+
itemAction: "itemAction"
|
|
42149
43108
|
},
|
|
42150
43109
|
ngImport: i0,
|
|
42151
43110
|
template: `
|
|
@@ -42253,6 +43212,90 @@ var CalendarComponent = class CalendarComponent {
|
|
|
42253
43212
|
</div>
|
|
42254
43213
|
</ng-template>
|
|
42255
43214
|
|
|
43215
|
+
<!-- Shared item markup: the same button is drawn on its own or, when itemActionsFn offers actions, inside a wrapper next to the action buttons
|
|
43216
|
+
(a button can never contain buttons). -->
|
|
43217
|
+
<ng-template #monthChip let-e>
|
|
43218
|
+
<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"
|
|
43219
|
+
[attr.aria-label]="itemLabel(e)" [title]="e.tooltip || e.title"
|
|
43220
|
+
(click)="onItemClick(e, $event)">
|
|
43221
|
+
<span class="chip-head">
|
|
43222
|
+
@if (e.iconPath) {
|
|
43223
|
+
<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>
|
|
43224
|
+
}
|
|
43225
|
+
@if (chipTime(e); as t) { <span class="chip-time">{{ t }}</span> }
|
|
43226
|
+
</span>
|
|
43227
|
+
<span class="chip-title" [class.strike]="e.strike">{{ e.title }}</span>
|
|
43228
|
+
@if (e.tag) { <span class="chip-src">{{ e.tag }}</span> }
|
|
43229
|
+
</button>
|
|
43230
|
+
</ng-template>
|
|
43231
|
+
<ng-template #allDayChip let-e>
|
|
43232
|
+
<button type="button" class="allday-chip" [style.background]="e.bgColor" [style.borderLeftColor]="e.color"
|
|
43233
|
+
[attr.aria-label]="itemLabel(e)" [attr.title]="e.tooltip || null" (click)="onItemClick(e, $event)">{{ e.title }}</button>
|
|
43234
|
+
</ng-template>
|
|
43235
|
+
<ng-template #timedEvent let-t let-wrapped="wrapped">
|
|
43236
|
+
<button type="button" class="timed-event"
|
|
43237
|
+
[class.in-wrap]="wrapped" [style.top.px]="wrapped ? null : t.top" [style.height.px]="wrapped ? null : t.height"
|
|
43238
|
+
[style.left]="wrapped ? null : 'calc(' + (t.lane.lane / t.lane.lanes * 100) + '% + 2px)'"
|
|
43239
|
+
[style.width]="wrapped ? null : 'calc(' + (100 / t.lane.lanes) + '% - 4px)'"
|
|
43240
|
+
[style.background]="t.item.bgColor" [style.borderLeftColor]="t.item.color"
|
|
43241
|
+
[attr.aria-label]="itemLabel(t.item)" [attr.title]="t.item.tooltip || null" (click)="onItemClick(t.item, $event)">
|
|
43242
|
+
<span class="te-title" [class.strike]="t.item.strike">{{ t.item.title }}</span>
|
|
43243
|
+
@if (t.item.startTime) { <span class="te-time">{{ t.item.timeLabel || timeRange(t.item) }}</span> }
|
|
43244
|
+
</button>
|
|
43245
|
+
</ng-template>
|
|
43246
|
+
<ng-template #agendaRow let-e>
|
|
43247
|
+
<button type="button" class="agenda-event" [attr.aria-label]="e.ariaLabel || null" [attr.title]="e.tooltip || null" (click)="onItemClick(e, $event)">
|
|
43248
|
+
<span class="ae-color-bar" [style.background]="e.color"></span>
|
|
43249
|
+
<span class="ae-body">
|
|
43250
|
+
<span class="ae-top">
|
|
43251
|
+
<span class="ae-title" [class.strike]="e.strike">{{ e.title }}</span>
|
|
43252
|
+
@for (b of e.badges ?? []; track b.label) { <ui-badge [label]="b.label" [variant]="b.variant" /> }
|
|
43253
|
+
</span>
|
|
43254
|
+
@if (agendaMeta(e).length) {
|
|
43255
|
+
<span class="ae-meta">
|
|
43256
|
+
@for (m of agendaMeta(e); track $index) { <span class="ae-meta-item">{{ m }}</span> }
|
|
43257
|
+
</span>
|
|
43258
|
+
}
|
|
43259
|
+
</span>
|
|
43260
|
+
</button>
|
|
43261
|
+
</ng-template>
|
|
43262
|
+
<ng-template #agendaGroupTpl let-group>
|
|
43263
|
+
<div class="agenda-group">
|
|
43264
|
+
<div class="agenda-date-hdr">
|
|
43265
|
+
<span class="ag-dow">{{ agendaDow(group.dateStr) }}</span>
|
|
43266
|
+
<span class="ag-date">{{ agendaDate(group.dateStr) }}</span>
|
|
43267
|
+
@if (group.dateStr === todayStr()) { <ui-badge label="Today" variant="blue" /> }
|
|
43268
|
+
</div>
|
|
43269
|
+
<div class="agenda-events">
|
|
43270
|
+
@for (e of group.items; track e.id) {
|
|
43271
|
+
@if (actionsFor(e).length) {
|
|
43272
|
+
<div class="item-wrap agenda-wrap">
|
|
43273
|
+
<ng-container *ngTemplateOutlet="agendaRow; context: { $implicit: e }" />
|
|
43274
|
+
<ng-container *ngTemplateOutlet="itemActionsTpl; context: { $implicit: e }" />
|
|
43275
|
+
</div>
|
|
43276
|
+
} @else {
|
|
43277
|
+
<ng-container *ngTemplateOutlet="agendaRow; context: { $implicit: e }" />
|
|
43278
|
+
}
|
|
43279
|
+
}
|
|
43280
|
+
</div>
|
|
43281
|
+
</div>
|
|
43282
|
+
|
|
43283
|
+
</ng-template>
|
|
43284
|
+
<ng-template #itemActionsTpl let-e>
|
|
43285
|
+
<span class="item-actions" role="group" [attr.aria-label]="'Actions for ' + e.title" (keydown.escape)="onActionsEscape($event)">
|
|
43286
|
+
@for (a of actionsFor(e); track a.id) {
|
|
43287
|
+
<button type="button" class="item-action" [class.item-action--danger]="a.variant === 'danger'" [disabled]="!!a.disabled"
|
|
43288
|
+
[attr.aria-label]="a.label + ': ' + e.title" [attr.title]="a.label" (click)="onActionClick(e, a, $event)">
|
|
43289
|
+
@if (actionIconD(a); as d) {
|
|
43290
|
+
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path [attr.d]="d" /></svg>
|
|
43291
|
+
} @else {
|
|
43292
|
+
<span class="item-action-text">{{ a.label }}</span>
|
|
43293
|
+
}
|
|
43294
|
+
</button>
|
|
43295
|
+
}
|
|
43296
|
+
</span>
|
|
43297
|
+
</ng-template>
|
|
43298
|
+
|
|
42256
43299
|
<div class="cal-header">
|
|
42257
43300
|
<div class="cal-toolbar">
|
|
42258
43301
|
<div class="toolbar-left">
|
|
@@ -42336,6 +43379,8 @@ var CalendarComponent = class CalendarComponent {
|
|
|
42336
43379
|
[class.clickable]="c.clickable"
|
|
42337
43380
|
[attr.tabindex]="c.day.dateStr === focusDate() ? 0 : -1"
|
|
42338
43381
|
[attr.aria-label]="c.label"
|
|
43382
|
+
[attr.data-level]="c.level"
|
|
43383
|
+
[uiTooltip]="c.tooltip"
|
|
42339
43384
|
[attr.aria-current]="c.day.isToday ? 'date' : null"
|
|
42340
43385
|
(click)="onDateClick(c.day.dateStr)"
|
|
42341
43386
|
(focus)="focusedDate.set(c.day.dateStr)"
|
|
@@ -42343,18 +43388,14 @@ var CalendarComponent = class CalendarComponent {
|
|
|
42343
43388
|
<span class="day-num" [class.today-badge]="c.day.isToday">{{ c.day.dayNum }}</span>
|
|
42344
43389
|
<div class="cell-events">
|
|
42345
43390
|
@for (e of c.visible; track e.id) {
|
|
42346
|
-
|
|
42347
|
-
|
|
42348
|
-
|
|
42349
|
-
|
|
42350
|
-
|
|
42351
|
-
|
|
42352
|
-
|
|
42353
|
-
|
|
42354
|
-
</span>
|
|
42355
|
-
<span class="chip-title" [class.strike]="e.strike">{{ e.title }}</span>
|
|
42356
|
-
@if (e.tag) { <span class="chip-src">{{ e.tag }}</span> }
|
|
42357
|
-
</button>
|
|
43391
|
+
@if (actionsFor(e).length) {
|
|
43392
|
+
<div class="item-wrap">
|
|
43393
|
+
<ng-container *ngTemplateOutlet="monthChip; context: { $implicit: e }" />
|
|
43394
|
+
<ng-container *ngTemplateOutlet="itemActionsTpl; context: { $implicit: e }" />
|
|
43395
|
+
</div>
|
|
43396
|
+
} @else {
|
|
43397
|
+
<ng-container *ngTemplateOutlet="monthChip; context: { $implicit: e }" />
|
|
43398
|
+
}
|
|
42358
43399
|
}
|
|
42359
43400
|
@if (c.overflow > 0) {
|
|
42360
43401
|
<button type="button" class="more-events" (click)="onMoreClick(c.day.dateStr, c.items, $event)">+{{ c.overflow }} more</button>
|
|
@@ -42372,9 +43413,10 @@ var CalendarComponent = class CalendarComponent {
|
|
|
42372
43413
|
<div class="week-header">
|
|
42373
43414
|
<div class="time-gutter"></div>
|
|
42374
43415
|
@for (col of weekColumns(); track col.day.dateStr) {
|
|
42375
|
-
<div class="week-day-hdr" [class.today]="col.day.isToday">
|
|
43416
|
+
<div class="week-day-hdr" [class.today]="col.day.isToday" [attr.data-level]="col.level" [uiTooltip]="col.tooltip">
|
|
42376
43417
|
<span class="wdh-dow">{{ dowLabel(col.day.dateStr) }}</span>
|
|
42377
43418
|
<span class="wdh-num" [class.today-badge]="col.day.isToday">{{ col.day.dayNum }}</span>
|
|
43419
|
+
@if (col.level) { <span class="deco-sr">{{ levelText(col.level) }}</span> }
|
|
42378
43420
|
</div>
|
|
42379
43421
|
}
|
|
42380
43422
|
</div>
|
|
@@ -42386,8 +43428,14 @@ var CalendarComponent = class CalendarComponent {
|
|
|
42386
43428
|
<button type="button" class="slot-add" [attr.aria-label]="'Add all-day event on ' + col.label" (click)="onAddAllDay(col.day.dateStr, $event)">+ Add</button>
|
|
42387
43429
|
}
|
|
42388
43430
|
@for (e of col.allDay; track e.id) {
|
|
42389
|
-
|
|
42390
|
-
|
|
43431
|
+
@if (actionsFor(e).length) {
|
|
43432
|
+
<div class="item-wrap">
|
|
43433
|
+
<ng-container *ngTemplateOutlet="allDayChip; context: { $implicit: e }" />
|
|
43434
|
+
<ng-container *ngTemplateOutlet="itemActionsTpl; context: { $implicit: e }" />
|
|
43435
|
+
</div>
|
|
43436
|
+
} @else {
|
|
43437
|
+
<ng-container *ngTemplateOutlet="allDayChip; context: { $implicit: e }" />
|
|
43438
|
+
}
|
|
42391
43439
|
}
|
|
42392
43440
|
</div>
|
|
42393
43441
|
}
|
|
@@ -42403,15 +43451,16 @@ var CalendarComponent = class CalendarComponent {
|
|
|
42403
43451
|
}
|
|
42404
43452
|
@for (h of hours(); track h) { <div class="time-slot"></div> }
|
|
42405
43453
|
@for (t of col.timed; track t.item.id) {
|
|
42406
|
-
|
|
42407
|
-
[style.top.px]="t.top" [style.height.px]="t.height"
|
|
42408
|
-
|
|
42409
|
-
|
|
42410
|
-
|
|
42411
|
-
|
|
42412
|
-
|
|
42413
|
-
|
|
42414
|
-
|
|
43454
|
+
@if (actionsFor(t.item).length) {
|
|
43455
|
+
<div class="item-wrap timed-wrap" [style.top.px]="t.top" [style.height.px]="t.height"
|
|
43456
|
+
[style.left]="'calc(' + (t.lane.lane / t.lane.lanes * 100) + '% + 2px)'"
|
|
43457
|
+
[style.width]="'calc(' + (100 / t.lane.lanes) + '% - 4px)'">
|
|
43458
|
+
<ng-container *ngTemplateOutlet="timedEvent; context: { $implicit: t, wrapped: true }" />
|
|
43459
|
+
<ng-container *ngTemplateOutlet="itemActionsTpl; context: { $implicit: t.item }" />
|
|
43460
|
+
</div>
|
|
43461
|
+
} @else {
|
|
43462
|
+
<ng-container *ngTemplateOutlet="timedEvent; context: { $implicit: t, wrapped: false }" />
|
|
43463
|
+
}
|
|
42415
43464
|
}
|
|
42416
43465
|
</div>
|
|
42417
43466
|
}
|
|
@@ -42423,32 +43472,25 @@ var CalendarComponent = class CalendarComponent {
|
|
|
42423
43472
|
@if (agendaGroups().length === 0) {
|
|
42424
43473
|
<ui-empty-state iconType="task" [message]="emptyMessage()" />
|
|
42425
43474
|
}
|
|
42426
|
-
@
|
|
42427
|
-
|
|
42428
|
-
|
|
42429
|
-
<
|
|
42430
|
-
|
|
42431
|
-
|
|
42432
|
-
|
|
42433
|
-
|
|
42434
|
-
|
|
42435
|
-
|
|
42436
|
-
|
|
42437
|
-
|
|
42438
|
-
<span class="ae-top">
|
|
42439
|
-
<span class="ae-title" [class.strike]="e.strike">{{ e.title }}</span>
|
|
42440
|
-
@for (b of e.badges ?? []; track b.label) { <ui-badge [label]="b.label" [variant]="b.variant" /> }
|
|
42441
|
-
</span>
|
|
42442
|
-
@if (agendaMeta(e).length) {
|
|
42443
|
-
<span class="ae-meta">
|
|
42444
|
-
@for (m of agendaMeta(e); track $index) { <span class="ae-meta-item">{{ m }}</span> }
|
|
42445
|
-
</span>
|
|
42446
|
-
}
|
|
42447
|
-
</span>
|
|
42448
|
-
</button>
|
|
43475
|
+
@if (agendaSections(); as sections) {
|
|
43476
|
+
@for (s of sections; track $index) {
|
|
43477
|
+
@if (s.label) {
|
|
43478
|
+
<section class="agenda-section" [attr.aria-labelledby]="s.id">
|
|
43479
|
+
<h3 class="agenda-period-hdr" [id]="s.id">{{ s.label }}</h3>
|
|
43480
|
+
@for (group of s.groups; track group.dateStr) {
|
|
43481
|
+
<ng-container *ngTemplateOutlet="agendaGroupTpl; context: { $implicit: group }" />
|
|
43482
|
+
}
|
|
43483
|
+
</section>
|
|
43484
|
+
} @else {
|
|
43485
|
+
@for (group of s.groups; track group.dateStr) {
|
|
43486
|
+
<ng-container *ngTemplateOutlet="agendaGroupTpl; context: { $implicit: group }" />
|
|
42449
43487
|
}
|
|
42450
|
-
|
|
42451
|
-
|
|
43488
|
+
}
|
|
43489
|
+
}
|
|
43490
|
+
} @else {
|
|
43491
|
+
@for (group of agendaGroups(); track group.dateStr) {
|
|
43492
|
+
<ng-container *ngTemplateOutlet="agendaGroupTpl; context: { $implicit: group }" />
|
|
43493
|
+
}
|
|
42452
43494
|
}
|
|
42453
43495
|
</div>
|
|
42454
43496
|
}
|
|
@@ -42458,7 +43500,7 @@ var CalendarComponent = class CalendarComponent {
|
|
|
42458
43500
|
<ui-toast />
|
|
42459
43501
|
`,
|
|
42460
43502
|
isInline: true,
|
|
42461
|
-
styles: [":host{display:flex;flex-direction:column;gap:0;height:100%;min-height:0}.cal-header{background:#fff;border:1px solid #e2e8f0;border-radius:12px;box-shadow:0 1px 2px #0f172a0a;margin-bottom:12px;flex-shrink:0}.cal-toolbar{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;padding:18px 20px;gap:16px;flex-shrink:0}.toolbar-left{display:flex;flex-direction:row;align-items:center;flex-wrap:wrap;column-gap:20px;row-gap:8px;min-width:0}.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}.toolbar-actions{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:nowrap}.toolbar-actions:empty{display:none}ui-pill-tabs+.toolbar-actions:not(:empty){margin-left:4px;padding-left:12px;border-left:1px solid #e2e8f0;align-self:stretch}@media(max-width:480px){.toolbar-actions{flex-wrap:wrap}}.period-label{font-size:2.5rem;font-weight:800;line-height:1.15;letter-spacing:-.025em;color:#0f172a;margin:0;min-width:0}.pl-sub{font-weight:600;color:#64748b}.nav-controls{display:inline-flex;align-items:center}.nav-controls>*+*{margin-left:-1px}.btn-nav{width:38px;height:38px;border:1px solid #cbd5e1;background:#fff;font-family:inherit;position:relative;cursor:pointer;display:flex;align-items:center;justify-content:center;color:#475569;transition:background .12s,color .12s}.nav-controls>.btn-nav:first-child{border-radius:10px 0 0 10px}.nav-controls>.btn-nav:last-child{border-radius:0 10px 10px 0}.btn-today{padding:0 18px;height:38px;border:1px solid #cbd5e1;background:#fff;border-radius:0;font-family:inherit;position:relative;font-size:.9375rem;font-weight:600;color:#1d4ed8;cursor:pointer;transition:background .12s}.btn-nav:hover,.btn-today:hover{background:#eff6ff;color:#1d4ed8;z-index:1}.btn-nav:active,.btn-today:active{background:#dbeafe}.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;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:8px 16px;padding:12px 20px 14px;border-top:1px solid #eef2f7;background:#f8fafc;border-radius:0 0 12px 12px;flex-shrink:0}.filter-main{display:flex;flex-direction:column;gap:8px;flex:1 1 auto;min-width:0}.filter-nav{margin-left:auto;flex-shrink:0}.filter-bar-label{font-size:.6875rem;font-weight:700;color:#64748b;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;background:color-mix(in srgb,var(--chip-color, #64748b) 14%,#fff);color:#475569;padding:1px 8px;border-radius:999px;min-width:18px;text-align:center;box-sizing:border-box}.cal-skeleton,.outline-grid,.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}.cal-outline{flex:1;display:flex;flex-direction:column;min-height:0}.cal-outline ui-skeleton{display:block;flex-shrink:0}.skel-period-wrap{width:240px;max-width:100%;min-width:0}.skel-nav-controls{gap:2px}.skel-nav-controls>*+*{margin-left:0}.skel-tabs{display:flex;align-items:center;gap:6px}.skel-tabs+.toolbar-actions:not(:empty){margin-left:4px;padding-left:12px;border-left:1px solid #e2e8f0;align-self:stretch}.skel-week-grid{display:grid;grid-template-columns:repeat(7,1fr);flex:1;min-height:360px}.skel-agenda{display:flex;flex-direction:column;flex:1}.skel-row{display:flex;align-items:center;gap:16px;padding:16px 12px;border-bottom:1px solid #f1f5f9}.skel-row-body{display:flex;flex-direction:column;gap:8px;flex:1;min-width:0}.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(prefers-reduced-motion:reduce){.btn-nav,.btn-today,.filter-chip,.month-cell,.agenda-event{transition:none}}@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{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px 12px}.toolbar-left{flex:1 1 auto}.toolbar-right{flex:0 1 auto;min-width:0;max-width:100%}.toolbar-center{display:none}.period-label{font-size:1.875rem}.toolbar-right{justify-content:flex-end}.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}.filter-main{flex-basis:100%}.month-view,.cal-skeleton,.outline-grid,.week-view{overflow-x:auto;-webkit-overflow-scrolling:touch}.month-grid,.skel-month-grid,.skel-week-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:640px){.cal-toolbar{padding:14px}.period-label{font-size:1.625rem}.filter-bar{padding:10px 14px 12px}.filter-nav{width:100%;margin-left:0}.filter-nav .nav-controls{display:flex;width:100%}.filter-nav .btn-today{flex:1 1 auto}.chip-head{flex-wrap:wrap;row-gap:0;flex-shrink:1;min-width:0}.chip-time{white-space:normal;line-height:1.1;flex-shrink:1;min-width:0;overflow-wrap:anywhere}.event-chip.stacked{flex-wrap:nowrap}.month-view,.cal-skeleton,.outline-grid{overflow-x:hidden}.month-grid,.skel-month-grid,.skel-week-grid,.skel-dow-row{min-width:0}.month-dow{padding:8px 2px;font-size:.6875rem;letter-spacing:0}.month-row{flex-basis:72px}.month-cell{min-height:72px;padding:3px 2px 2px}.day-num{width:22px;height:22px;line-height:22px;font-size:.75rem;margin-bottom:2px}.cell-events{gap:1px}.event-chip{min-height:24px;padding:1px 3px;font-size:.625rem;gap:2px}.more-events{min-height:24px;padding:1px 3px;font-size:.625rem;white-space:normal;line-height:1.1;max-width:100%}}@media(max-width:480px){.dow-full{display:none}.dow-short{display:inline}}\n"],
|
|
43503
|
+
styles: [":host{display:flex;flex-direction:column;gap:0;height:100%;min-height:0}.cal-header{background:#fff;border:1px solid #e2e8f0;border-radius:12px;box-shadow:0 1px 2px #0f172a0a;margin-bottom:12px;flex-shrink:0}.cal-toolbar{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;padding:18px 20px;gap:16px;flex-shrink:0}.toolbar-left{display:flex;flex-direction:row;align-items:center;flex-wrap:wrap;column-gap:20px;row-gap:8px;min-width:0}.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}.toolbar-actions{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:nowrap}.toolbar-actions:empty{display:none}ui-pill-tabs+.toolbar-actions:not(:empty){margin-left:4px;padding-left:12px;border-left:1px solid #e2e8f0;align-self:stretch}@media(max-width:480px){.toolbar-actions{flex-wrap:wrap}}.period-label{font-size:2.5rem;font-weight:800;line-height:1.15;letter-spacing:-.025em;color:#0f172a;margin:0;min-width:0}.pl-sub{font-weight:600;color:#64748b}.nav-controls{display:inline-flex;align-items:center}.nav-controls>*+*{margin-left:-1px}.btn-nav{width:38px;height:38px;border:1px solid #cbd5e1;background:#fff;font-family:inherit;position:relative;cursor:pointer;display:flex;align-items:center;justify-content:center;color:#475569;transition:background .12s,color .12s}.nav-controls>.btn-nav:first-child{border-radius:10px 0 0 10px}.nav-controls>.btn-nav:last-child{border-radius:0 10px 10px 0}.btn-today{padding:0 18px;height:38px;border:1px solid #cbd5e1;background:#fff;border-radius:0;font-family:inherit;position:relative;font-size:.9375rem;font-weight:600;color:#1d4ed8;cursor:pointer;transition:background .12s}.btn-nav:hover,.btn-today:hover{background:#eff6ff;color:#1d4ed8;z-index:1}.btn-nav:active,.btn-today:active{background:#dbeafe}.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;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:8px 16px;padding:12px 20px 14px;border-top:1px solid #eef2f7;background:#f8fafc;border-radius:0 0 12px 12px;flex-shrink:0}.filter-main{display:flex;flex-direction:column;gap:8px;flex:1 1 auto;min-width:0}.filter-nav{margin-left:auto;flex-shrink:0}.filter-bar-label{font-size:.6875rem;font-weight:700;color:#64748b;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;background:color-mix(in srgb,var(--chip-color, #64748b) 14%,#fff);color:#475569;padding:1px 8px;border-radius:999px;min-width:18px;text-align:center;box-sizing:border-box}.cal-skeleton,.outline-grid,.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}.cal-outline{flex:1;display:flex;flex-direction:column;min-height:0}.cal-outline ui-skeleton{display:block;flex-shrink:0}.skel-period-wrap{width:240px;max-width:100%;min-width:0}.skel-nav-controls{gap:2px}.skel-nav-controls>*+*{margin-left:0}.skel-tabs{display:flex;align-items:center;gap:6px}.skel-tabs+.toolbar-actions:not(:empty){margin-left:4px;padding-left:12px;border-left:1px solid #e2e8f0;align-self:stretch}.skel-week-grid{display:grid;grid-template-columns:repeat(7,1fr);flex:1;min-height:360px}.skel-agenda{display:flex;flex-direction:column;flex:1}.skel-row{display:flex;align-items:center;gap:16px;padding:16px 12px;border-bottom:1px solid #f1f5f9}.skel-row-body{display:flex;flex-direction:column;gap:8px;flex:1;min-width:0}.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[data-level=low]{background:#f0fdf4;box-shadow:inset 0 3px #86efac}.month-cell[data-level=medium]{background:#fefce8;box-shadow:inset 0 3px #facc15}.month-cell[data-level=high]{background:#fff7ed;box-shadow:inset 0 3px #fb923c}.month-cell[data-level=critical]{background:#fef2f2;box-shadow:inset 0 3px #ef4444}.month-cell.other-month[data-level] .day-num{color:#475569}.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[data-level=low]{background:#f0fdf4;box-shadow:inset 0 3px #86efac}.week-day-hdr[data-level=medium]{background:#fefce8;box-shadow:inset 0 3px #facc15}.week-day-hdr[data-level=high]{background:#fff7ed;box-shadow:inset 0 3px #fb923c}.week-day-hdr[data-level=critical]{background:#fef2f2;box-shadow:inset 0 3px #ef4444}.week-day-hdr.today{background:#eff6ff}.deco-sr{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);border:0;white-space:nowrap}.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-section{display:block}.agenda-period-hdr{margin:0;padding:8px 12px;font-size:.75rem;font-weight:700;color:#475569;text-transform:uppercase;letter-spacing:.06em;background:#f1f5f9;border-bottom:1px solid #e2e8f0;position:-webkit-sticky;position:sticky;top:0;z-index:1}.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}.item-wrap{position:relative;display:block;min-width:0}.item-wrap.timed-wrap{position:absolute;min-height:20px}.timed-event.in-wrap{position:static;width:100%;height:100%}.item-actions{position:absolute;top:50%;right:2px;transform:translateY(-50%);display:inline-flex;gap:2px;opacity:0;pointer-events:none;z-index:2}.item-wrap:hover>.item-actions,.item-wrap:focus-within>.item-actions{opacity:1;pointer-events:auto}.agenda-wrap>.item-actions{right:12px}.item-action{min-width:20px;height:20px;padding:0 4px;display:inline-flex;align-items:center;justify-content:center;font-family:inherit;font-size:.6875rem;font-weight:600;color:#334155;background:#fff;border:1px solid #cbd5e1;border-radius:4px;cursor:pointer}.item-action:hover:not(:disabled){background:#eff6ff;color:#1d4ed8}.item-action--danger{color:#b91c1c;border-color:#fecaca}.item-action--danger:hover:not(:disabled){background:#fef2f2;color:#991b1b}.item-action:disabled{opacity:.5;cursor:not-allowed}.item-action:focus-visible{outline:2px solid #3b82f6;outline-offset:1px}@media(hover:none){.agenda-wrap>.item-actions{opacity:1;pointer-events:auto}}@media(pointer:coarse),(max-width:480px){.item-action{min-width:44px;min-height:44px}}@media(prefers-reduced-motion:reduce){.btn-nav,.btn-today,.filter-chip,.month-cell,.agenda-event{transition:none}}@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{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px 12px}.toolbar-left{flex:1 1 auto}.toolbar-right{flex:0 1 auto;min-width:0;max-width:100%}.toolbar-center{display:none}.period-label{font-size:1.875rem}.toolbar-right{justify-content:flex-end}.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}.filter-main{flex-basis:100%}.month-view,.cal-skeleton,.outline-grid,.week-view{overflow-x:auto;-webkit-overflow-scrolling:touch}.month-grid,.skel-month-grid,.skel-week-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:640px){.cal-toolbar{padding:14px}.period-label{font-size:1.625rem}.filter-bar{padding:10px 14px 12px}.filter-nav{width:100%;margin-left:0}.filter-nav .nav-controls{display:flex;width:100%}.filter-nav .btn-today{flex:1 1 auto}.chip-head{flex-wrap:wrap;row-gap:0;flex-shrink:1;min-width:0}.chip-time{white-space:normal;line-height:1.1;flex-shrink:1;min-width:0;overflow-wrap:anywhere}.event-chip.stacked{flex-wrap:nowrap}.month-view,.cal-skeleton,.outline-grid{overflow-x:hidden}.month-grid,.skel-month-grid,.skel-week-grid,.skel-dow-row{min-width:0}.month-dow{padding:8px 2px;font-size:.6875rem;letter-spacing:0}.month-row{flex-basis:72px}.month-cell{min-height:72px;padding:3px 2px 2px}.day-num{width:22px;height:22px;line-height:22px;font-size:.75rem;margin-bottom:2px}.cell-events{gap:1px}.event-chip{min-height:24px;padding:1px 3px;font-size:.625rem;gap:2px}.more-events{min-height:24px;padding:1px 3px;font-size:.625rem;white-space:normal;line-height:1.1;max-width:100%}}@media(max-width:480px){.dow-full{display:none}.dow-short{display:inline}}\n"],
|
|
42462
43504
|
dependencies: [
|
|
42463
43505
|
{
|
|
42464
43506
|
kind: "component",
|
|
@@ -42517,6 +43559,12 @@ var CalendarComponent = class CalendarComponent {
|
|
|
42517
43559
|
type: ToastComponent,
|
|
42518
43560
|
selector: "ui-toast",
|
|
42519
43561
|
inputs: ["dismissible", "persistentLiveRegion"]
|
|
43562
|
+
},
|
|
43563
|
+
{
|
|
43564
|
+
kind: "directive",
|
|
43565
|
+
type: TooltipDirective,
|
|
43566
|
+
selector: "[uiTooltip]",
|
|
43567
|
+
inputs: ["uiTooltip", "tooltipPosition"]
|
|
42520
43568
|
}
|
|
42521
43569
|
],
|
|
42522
43570
|
changeDetection: i0.ChangeDetectionStrategy.OnPush
|
|
@@ -42540,7 +43588,8 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
42540
43588
|
NgTemplateOutlet,
|
|
42541
43589
|
PillTabsComponent,
|
|
42542
43590
|
SkeletonComponent,
|
|
42543
|
-
ToastComponent
|
|
43591
|
+
ToastComponent,
|
|
43592
|
+
TooltipDirective
|
|
42544
43593
|
],
|
|
42545
43594
|
template: `
|
|
42546
43595
|
@if (showOutline()) {
|
|
@@ -42647,6 +43696,90 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
42647
43696
|
</div>
|
|
42648
43697
|
</ng-template>
|
|
42649
43698
|
|
|
43699
|
+
<!-- Shared item markup: the same button is drawn on its own or, when itemActionsFn offers actions, inside a wrapper next to the action buttons
|
|
43700
|
+
(a button can never contain buttons). -->
|
|
43701
|
+
<ng-template #monthChip let-e>
|
|
43702
|
+
<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"
|
|
43703
|
+
[attr.aria-label]="itemLabel(e)" [title]="e.tooltip || e.title"
|
|
43704
|
+
(click)="onItemClick(e, $event)">
|
|
43705
|
+
<span class="chip-head">
|
|
43706
|
+
@if (e.iconPath) {
|
|
43707
|
+
<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>
|
|
43708
|
+
}
|
|
43709
|
+
@if (chipTime(e); as t) { <span class="chip-time">{{ t }}</span> }
|
|
43710
|
+
</span>
|
|
43711
|
+
<span class="chip-title" [class.strike]="e.strike">{{ e.title }}</span>
|
|
43712
|
+
@if (e.tag) { <span class="chip-src">{{ e.tag }}</span> }
|
|
43713
|
+
</button>
|
|
43714
|
+
</ng-template>
|
|
43715
|
+
<ng-template #allDayChip let-e>
|
|
43716
|
+
<button type="button" class="allday-chip" [style.background]="e.bgColor" [style.borderLeftColor]="e.color"
|
|
43717
|
+
[attr.aria-label]="itemLabel(e)" [attr.title]="e.tooltip || null" (click)="onItemClick(e, $event)">{{ e.title }}</button>
|
|
43718
|
+
</ng-template>
|
|
43719
|
+
<ng-template #timedEvent let-t let-wrapped="wrapped">
|
|
43720
|
+
<button type="button" class="timed-event"
|
|
43721
|
+
[class.in-wrap]="wrapped" [style.top.px]="wrapped ? null : t.top" [style.height.px]="wrapped ? null : t.height"
|
|
43722
|
+
[style.left]="wrapped ? null : 'calc(' + (t.lane.lane / t.lane.lanes * 100) + '% + 2px)'"
|
|
43723
|
+
[style.width]="wrapped ? null : 'calc(' + (100 / t.lane.lanes) + '% - 4px)'"
|
|
43724
|
+
[style.background]="t.item.bgColor" [style.borderLeftColor]="t.item.color"
|
|
43725
|
+
[attr.aria-label]="itemLabel(t.item)" [attr.title]="t.item.tooltip || null" (click)="onItemClick(t.item, $event)">
|
|
43726
|
+
<span class="te-title" [class.strike]="t.item.strike">{{ t.item.title }}</span>
|
|
43727
|
+
@if (t.item.startTime) { <span class="te-time">{{ t.item.timeLabel || timeRange(t.item) }}</span> }
|
|
43728
|
+
</button>
|
|
43729
|
+
</ng-template>
|
|
43730
|
+
<ng-template #agendaRow let-e>
|
|
43731
|
+
<button type="button" class="agenda-event" [attr.aria-label]="e.ariaLabel || null" [attr.title]="e.tooltip || null" (click)="onItemClick(e, $event)">
|
|
43732
|
+
<span class="ae-color-bar" [style.background]="e.color"></span>
|
|
43733
|
+
<span class="ae-body">
|
|
43734
|
+
<span class="ae-top">
|
|
43735
|
+
<span class="ae-title" [class.strike]="e.strike">{{ e.title }}</span>
|
|
43736
|
+
@for (b of e.badges ?? []; track b.label) { <ui-badge [label]="b.label" [variant]="b.variant" /> }
|
|
43737
|
+
</span>
|
|
43738
|
+
@if (agendaMeta(e).length) {
|
|
43739
|
+
<span class="ae-meta">
|
|
43740
|
+
@for (m of agendaMeta(e); track $index) { <span class="ae-meta-item">{{ m }}</span> }
|
|
43741
|
+
</span>
|
|
43742
|
+
}
|
|
43743
|
+
</span>
|
|
43744
|
+
</button>
|
|
43745
|
+
</ng-template>
|
|
43746
|
+
<ng-template #agendaGroupTpl let-group>
|
|
43747
|
+
<div class="agenda-group">
|
|
43748
|
+
<div class="agenda-date-hdr">
|
|
43749
|
+
<span class="ag-dow">{{ agendaDow(group.dateStr) }}</span>
|
|
43750
|
+
<span class="ag-date">{{ agendaDate(group.dateStr) }}</span>
|
|
43751
|
+
@if (group.dateStr === todayStr()) { <ui-badge label="Today" variant="blue" /> }
|
|
43752
|
+
</div>
|
|
43753
|
+
<div class="agenda-events">
|
|
43754
|
+
@for (e of group.items; track e.id) {
|
|
43755
|
+
@if (actionsFor(e).length) {
|
|
43756
|
+
<div class="item-wrap agenda-wrap">
|
|
43757
|
+
<ng-container *ngTemplateOutlet="agendaRow; context: { $implicit: e }" />
|
|
43758
|
+
<ng-container *ngTemplateOutlet="itemActionsTpl; context: { $implicit: e }" />
|
|
43759
|
+
</div>
|
|
43760
|
+
} @else {
|
|
43761
|
+
<ng-container *ngTemplateOutlet="agendaRow; context: { $implicit: e }" />
|
|
43762
|
+
}
|
|
43763
|
+
}
|
|
43764
|
+
</div>
|
|
43765
|
+
</div>
|
|
43766
|
+
|
|
43767
|
+
</ng-template>
|
|
43768
|
+
<ng-template #itemActionsTpl let-e>
|
|
43769
|
+
<span class="item-actions" role="group" [attr.aria-label]="'Actions for ' + e.title" (keydown.escape)="onActionsEscape($event)">
|
|
43770
|
+
@for (a of actionsFor(e); track a.id) {
|
|
43771
|
+
<button type="button" class="item-action" [class.item-action--danger]="a.variant === 'danger'" [disabled]="!!a.disabled"
|
|
43772
|
+
[attr.aria-label]="a.label + ': ' + e.title" [attr.title]="a.label" (click)="onActionClick(e, a, $event)">
|
|
43773
|
+
@if (actionIconD(a); as d) {
|
|
43774
|
+
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path [attr.d]="d" /></svg>
|
|
43775
|
+
} @else {
|
|
43776
|
+
<span class="item-action-text">{{ a.label }}</span>
|
|
43777
|
+
}
|
|
43778
|
+
</button>
|
|
43779
|
+
}
|
|
43780
|
+
</span>
|
|
43781
|
+
</ng-template>
|
|
43782
|
+
|
|
42650
43783
|
<div class="cal-header">
|
|
42651
43784
|
<div class="cal-toolbar">
|
|
42652
43785
|
<div class="toolbar-left">
|
|
@@ -42730,6 +43863,8 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
42730
43863
|
[class.clickable]="c.clickable"
|
|
42731
43864
|
[attr.tabindex]="c.day.dateStr === focusDate() ? 0 : -1"
|
|
42732
43865
|
[attr.aria-label]="c.label"
|
|
43866
|
+
[attr.data-level]="c.level"
|
|
43867
|
+
[uiTooltip]="c.tooltip"
|
|
42733
43868
|
[attr.aria-current]="c.day.isToday ? 'date' : null"
|
|
42734
43869
|
(click)="onDateClick(c.day.dateStr)"
|
|
42735
43870
|
(focus)="focusedDate.set(c.day.dateStr)"
|
|
@@ -42737,18 +43872,14 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
42737
43872
|
<span class="day-num" [class.today-badge]="c.day.isToday">{{ c.day.dayNum }}</span>
|
|
42738
43873
|
<div class="cell-events">
|
|
42739
43874
|
@for (e of c.visible; track e.id) {
|
|
42740
|
-
|
|
42741
|
-
|
|
42742
|
-
|
|
42743
|
-
|
|
42744
|
-
|
|
42745
|
-
|
|
42746
|
-
|
|
42747
|
-
|
|
42748
|
-
</span>
|
|
42749
|
-
<span class="chip-title" [class.strike]="e.strike">{{ e.title }}</span>
|
|
42750
|
-
@if (e.tag) { <span class="chip-src">{{ e.tag }}</span> }
|
|
42751
|
-
</button>
|
|
43875
|
+
@if (actionsFor(e).length) {
|
|
43876
|
+
<div class="item-wrap">
|
|
43877
|
+
<ng-container *ngTemplateOutlet="monthChip; context: { $implicit: e }" />
|
|
43878
|
+
<ng-container *ngTemplateOutlet="itemActionsTpl; context: { $implicit: e }" />
|
|
43879
|
+
</div>
|
|
43880
|
+
} @else {
|
|
43881
|
+
<ng-container *ngTemplateOutlet="monthChip; context: { $implicit: e }" />
|
|
43882
|
+
}
|
|
42752
43883
|
}
|
|
42753
43884
|
@if (c.overflow > 0) {
|
|
42754
43885
|
<button type="button" class="more-events" (click)="onMoreClick(c.day.dateStr, c.items, $event)">+{{ c.overflow }} more</button>
|
|
@@ -42766,9 +43897,10 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
42766
43897
|
<div class="week-header">
|
|
42767
43898
|
<div class="time-gutter"></div>
|
|
42768
43899
|
@for (col of weekColumns(); track col.day.dateStr) {
|
|
42769
|
-
<div class="week-day-hdr" [class.today]="col.day.isToday">
|
|
43900
|
+
<div class="week-day-hdr" [class.today]="col.day.isToday" [attr.data-level]="col.level" [uiTooltip]="col.tooltip">
|
|
42770
43901
|
<span class="wdh-dow">{{ dowLabel(col.day.dateStr) }}</span>
|
|
42771
43902
|
<span class="wdh-num" [class.today-badge]="col.day.isToday">{{ col.day.dayNum }}</span>
|
|
43903
|
+
@if (col.level) { <span class="deco-sr">{{ levelText(col.level) }}</span> }
|
|
42772
43904
|
</div>
|
|
42773
43905
|
}
|
|
42774
43906
|
</div>
|
|
@@ -42780,8 +43912,14 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
42780
43912
|
<button type="button" class="slot-add" [attr.aria-label]="'Add all-day event on ' + col.label" (click)="onAddAllDay(col.day.dateStr, $event)">+ Add</button>
|
|
42781
43913
|
}
|
|
42782
43914
|
@for (e of col.allDay; track e.id) {
|
|
42783
|
-
|
|
42784
|
-
|
|
43915
|
+
@if (actionsFor(e).length) {
|
|
43916
|
+
<div class="item-wrap">
|
|
43917
|
+
<ng-container *ngTemplateOutlet="allDayChip; context: { $implicit: e }" />
|
|
43918
|
+
<ng-container *ngTemplateOutlet="itemActionsTpl; context: { $implicit: e }" />
|
|
43919
|
+
</div>
|
|
43920
|
+
} @else {
|
|
43921
|
+
<ng-container *ngTemplateOutlet="allDayChip; context: { $implicit: e }" />
|
|
43922
|
+
}
|
|
42785
43923
|
}
|
|
42786
43924
|
</div>
|
|
42787
43925
|
}
|
|
@@ -42797,15 +43935,16 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
42797
43935
|
}
|
|
42798
43936
|
@for (h of hours(); track h) { <div class="time-slot"></div> }
|
|
42799
43937
|
@for (t of col.timed; track t.item.id) {
|
|
42800
|
-
|
|
42801
|
-
[style.top.px]="t.top" [style.height.px]="t.height"
|
|
42802
|
-
|
|
42803
|
-
|
|
42804
|
-
|
|
42805
|
-
|
|
42806
|
-
|
|
42807
|
-
|
|
42808
|
-
|
|
43938
|
+
@if (actionsFor(t.item).length) {
|
|
43939
|
+
<div class="item-wrap timed-wrap" [style.top.px]="t.top" [style.height.px]="t.height"
|
|
43940
|
+
[style.left]="'calc(' + (t.lane.lane / t.lane.lanes * 100) + '% + 2px)'"
|
|
43941
|
+
[style.width]="'calc(' + (100 / t.lane.lanes) + '% - 4px)'">
|
|
43942
|
+
<ng-container *ngTemplateOutlet="timedEvent; context: { $implicit: t, wrapped: true }" />
|
|
43943
|
+
<ng-container *ngTemplateOutlet="itemActionsTpl; context: { $implicit: t.item }" />
|
|
43944
|
+
</div>
|
|
43945
|
+
} @else {
|
|
43946
|
+
<ng-container *ngTemplateOutlet="timedEvent; context: { $implicit: t, wrapped: false }" />
|
|
43947
|
+
}
|
|
42809
43948
|
}
|
|
42810
43949
|
</div>
|
|
42811
43950
|
}
|
|
@@ -42817,32 +43956,25 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
42817
43956
|
@if (agendaGroups().length === 0) {
|
|
42818
43957
|
<ui-empty-state iconType="task" [message]="emptyMessage()" />
|
|
42819
43958
|
}
|
|
42820
|
-
@
|
|
42821
|
-
|
|
42822
|
-
|
|
42823
|
-
<
|
|
42824
|
-
|
|
42825
|
-
|
|
42826
|
-
|
|
42827
|
-
|
|
42828
|
-
|
|
42829
|
-
|
|
42830
|
-
|
|
42831
|
-
|
|
42832
|
-
<span class="ae-top">
|
|
42833
|
-
<span class="ae-title" [class.strike]="e.strike">{{ e.title }}</span>
|
|
42834
|
-
@for (b of e.badges ?? []; track b.label) { <ui-badge [label]="b.label" [variant]="b.variant" /> }
|
|
42835
|
-
</span>
|
|
42836
|
-
@if (agendaMeta(e).length) {
|
|
42837
|
-
<span class="ae-meta">
|
|
42838
|
-
@for (m of agendaMeta(e); track $index) { <span class="ae-meta-item">{{ m }}</span> }
|
|
42839
|
-
</span>
|
|
42840
|
-
}
|
|
42841
|
-
</span>
|
|
42842
|
-
</button>
|
|
43959
|
+
@if (agendaSections(); as sections) {
|
|
43960
|
+
@for (s of sections; track $index) {
|
|
43961
|
+
@if (s.label) {
|
|
43962
|
+
<section class="agenda-section" [attr.aria-labelledby]="s.id">
|
|
43963
|
+
<h3 class="agenda-period-hdr" [id]="s.id">{{ s.label }}</h3>
|
|
43964
|
+
@for (group of s.groups; track group.dateStr) {
|
|
43965
|
+
<ng-container *ngTemplateOutlet="agendaGroupTpl; context: { $implicit: group }" />
|
|
43966
|
+
}
|
|
43967
|
+
</section>
|
|
43968
|
+
} @else {
|
|
43969
|
+
@for (group of s.groups; track group.dateStr) {
|
|
43970
|
+
<ng-container *ngTemplateOutlet="agendaGroupTpl; context: { $implicit: group }" />
|
|
42843
43971
|
}
|
|
42844
|
-
|
|
42845
|
-
|
|
43972
|
+
}
|
|
43973
|
+
}
|
|
43974
|
+
} @else {
|
|
43975
|
+
@for (group of agendaGroups(); track group.dateStr) {
|
|
43976
|
+
<ng-container *ngTemplateOutlet="agendaGroupTpl; context: { $implicit: group }" />
|
|
43977
|
+
}
|
|
42846
43978
|
}
|
|
42847
43979
|
</div>
|
|
42848
43980
|
}
|
|
@@ -42851,7 +43983,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
42851
43983
|
}
|
|
42852
43984
|
<ui-toast />
|
|
42853
43985
|
`,
|
|
42854
|
-
styles: [":host{display:flex;flex-direction:column;gap:0;height:100%;min-height:0}.cal-header{background:#fff;border:1px solid #e2e8f0;border-radius:12px;box-shadow:0 1px 2px #0f172a0a;margin-bottom:12px;flex-shrink:0}.cal-toolbar{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;padding:18px 20px;gap:16px;flex-shrink:0}.toolbar-left{display:flex;flex-direction:row;align-items:center;flex-wrap:wrap;column-gap:20px;row-gap:8px;min-width:0}.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}.toolbar-actions{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:nowrap}.toolbar-actions:empty{display:none}ui-pill-tabs+.toolbar-actions:not(:empty){margin-left:4px;padding-left:12px;border-left:1px solid #e2e8f0;align-self:stretch}@media(max-width:480px){.toolbar-actions{flex-wrap:wrap}}.period-label{font-size:2.5rem;font-weight:800;line-height:1.15;letter-spacing:-.025em;color:#0f172a;margin:0;min-width:0}.pl-sub{font-weight:600;color:#64748b}.nav-controls{display:inline-flex;align-items:center}.nav-controls>*+*{margin-left:-1px}.btn-nav{width:38px;height:38px;border:1px solid #cbd5e1;background:#fff;font-family:inherit;position:relative;cursor:pointer;display:flex;align-items:center;justify-content:center;color:#475569;transition:background .12s,color .12s}.nav-controls>.btn-nav:first-child{border-radius:10px 0 0 10px}.nav-controls>.btn-nav:last-child{border-radius:0 10px 10px 0}.btn-today{padding:0 18px;height:38px;border:1px solid #cbd5e1;background:#fff;border-radius:0;font-family:inherit;position:relative;font-size:.9375rem;font-weight:600;color:#1d4ed8;cursor:pointer;transition:background .12s}.btn-nav:hover,.btn-today:hover{background:#eff6ff;color:#1d4ed8;z-index:1}.btn-nav:active,.btn-today:active{background:#dbeafe}.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;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:8px 16px;padding:12px 20px 14px;border-top:1px solid #eef2f7;background:#f8fafc;border-radius:0 0 12px 12px;flex-shrink:0}.filter-main{display:flex;flex-direction:column;gap:8px;flex:1 1 auto;min-width:0}.filter-nav{margin-left:auto;flex-shrink:0}.filter-bar-label{font-size:.6875rem;font-weight:700;color:#64748b;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;background:color-mix(in srgb,var(--chip-color, #64748b) 14%,#fff);color:#475569;padding:1px 8px;border-radius:999px;min-width:18px;text-align:center;box-sizing:border-box}.cal-skeleton,.outline-grid,.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}.cal-outline{flex:1;display:flex;flex-direction:column;min-height:0}.cal-outline ui-skeleton{display:block;flex-shrink:0}.skel-period-wrap{width:240px;max-width:100%;min-width:0}.skel-nav-controls{gap:2px}.skel-nav-controls>*+*{margin-left:0}.skel-tabs{display:flex;align-items:center;gap:6px}.skel-tabs+.toolbar-actions:not(:empty){margin-left:4px;padding-left:12px;border-left:1px solid #e2e8f0;align-self:stretch}.skel-week-grid{display:grid;grid-template-columns:repeat(7,1fr);flex:1;min-height:360px}.skel-agenda{display:flex;flex-direction:column;flex:1}.skel-row{display:flex;align-items:center;gap:16px;padding:16px 12px;border-bottom:1px solid #f1f5f9}.skel-row-body{display:flex;flex-direction:column;gap:8px;flex:1;min-width:0}.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(prefers-reduced-motion:reduce){.btn-nav,.btn-today,.filter-chip,.month-cell,.agenda-event{transition:none}}@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{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px 12px}.toolbar-left{flex:1 1 auto}.toolbar-right{flex:0 1 auto;min-width:0;max-width:100%}.toolbar-center{display:none}.period-label{font-size:1.875rem}.toolbar-right{justify-content:flex-end}.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}.filter-main{flex-basis:100%}.month-view,.cal-skeleton,.outline-grid,.week-view{overflow-x:auto;-webkit-overflow-scrolling:touch}.month-grid,.skel-month-grid,.skel-week-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:640px){.cal-toolbar{padding:14px}.period-label{font-size:1.625rem}.filter-bar{padding:10px 14px 12px}.filter-nav{width:100%;margin-left:0}.filter-nav .nav-controls{display:flex;width:100%}.filter-nav .btn-today{flex:1 1 auto}.chip-head{flex-wrap:wrap;row-gap:0;flex-shrink:1;min-width:0}.chip-time{white-space:normal;line-height:1.1;flex-shrink:1;min-width:0;overflow-wrap:anywhere}.event-chip.stacked{flex-wrap:nowrap}.month-view,.cal-skeleton,.outline-grid{overflow-x:hidden}.month-grid,.skel-month-grid,.skel-week-grid,.skel-dow-row{min-width:0}.month-dow{padding:8px 2px;font-size:.6875rem;letter-spacing:0}.month-row{flex-basis:72px}.month-cell{min-height:72px;padding:3px 2px 2px}.day-num{width:22px;height:22px;line-height:22px;font-size:.75rem;margin-bottom:2px}.cell-events{gap:1px}.event-chip{min-height:24px;padding:1px 3px;font-size:.625rem;gap:2px}.more-events{min-height:24px;padding:1px 3px;font-size:.625rem;white-space:normal;line-height:1.1;max-width:100%}}@media(max-width:480px){.dow-full{display:none}.dow-short{display:inline}}\n"]
|
|
43986
|
+
styles: [":host{display:flex;flex-direction:column;gap:0;height:100%;min-height:0}.cal-header{background:#fff;border:1px solid #e2e8f0;border-radius:12px;box-shadow:0 1px 2px #0f172a0a;margin-bottom:12px;flex-shrink:0}.cal-toolbar{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;padding:18px 20px;gap:16px;flex-shrink:0}.toolbar-left{display:flex;flex-direction:row;align-items:center;flex-wrap:wrap;column-gap:20px;row-gap:8px;min-width:0}.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}.toolbar-actions{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:nowrap}.toolbar-actions:empty{display:none}ui-pill-tabs+.toolbar-actions:not(:empty){margin-left:4px;padding-left:12px;border-left:1px solid #e2e8f0;align-self:stretch}@media(max-width:480px){.toolbar-actions{flex-wrap:wrap}}.period-label{font-size:2.5rem;font-weight:800;line-height:1.15;letter-spacing:-.025em;color:#0f172a;margin:0;min-width:0}.pl-sub{font-weight:600;color:#64748b}.nav-controls{display:inline-flex;align-items:center}.nav-controls>*+*{margin-left:-1px}.btn-nav{width:38px;height:38px;border:1px solid #cbd5e1;background:#fff;font-family:inherit;position:relative;cursor:pointer;display:flex;align-items:center;justify-content:center;color:#475569;transition:background .12s,color .12s}.nav-controls>.btn-nav:first-child{border-radius:10px 0 0 10px}.nav-controls>.btn-nav:last-child{border-radius:0 10px 10px 0}.btn-today{padding:0 18px;height:38px;border:1px solid #cbd5e1;background:#fff;border-radius:0;font-family:inherit;position:relative;font-size:.9375rem;font-weight:600;color:#1d4ed8;cursor:pointer;transition:background .12s}.btn-nav:hover,.btn-today:hover{background:#eff6ff;color:#1d4ed8;z-index:1}.btn-nav:active,.btn-today:active{background:#dbeafe}.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;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:8px 16px;padding:12px 20px 14px;border-top:1px solid #eef2f7;background:#f8fafc;border-radius:0 0 12px 12px;flex-shrink:0}.filter-main{display:flex;flex-direction:column;gap:8px;flex:1 1 auto;min-width:0}.filter-nav{margin-left:auto;flex-shrink:0}.filter-bar-label{font-size:.6875rem;font-weight:700;color:#64748b;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;background:color-mix(in srgb,var(--chip-color, #64748b) 14%,#fff);color:#475569;padding:1px 8px;border-radius:999px;min-width:18px;text-align:center;box-sizing:border-box}.cal-skeleton,.outline-grid,.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}.cal-outline{flex:1;display:flex;flex-direction:column;min-height:0}.cal-outline ui-skeleton{display:block;flex-shrink:0}.skel-period-wrap{width:240px;max-width:100%;min-width:0}.skel-nav-controls{gap:2px}.skel-nav-controls>*+*{margin-left:0}.skel-tabs{display:flex;align-items:center;gap:6px}.skel-tabs+.toolbar-actions:not(:empty){margin-left:4px;padding-left:12px;border-left:1px solid #e2e8f0;align-self:stretch}.skel-week-grid{display:grid;grid-template-columns:repeat(7,1fr);flex:1;min-height:360px}.skel-agenda{display:flex;flex-direction:column;flex:1}.skel-row{display:flex;align-items:center;gap:16px;padding:16px 12px;border-bottom:1px solid #f1f5f9}.skel-row-body{display:flex;flex-direction:column;gap:8px;flex:1;min-width:0}.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[data-level=low]{background:#f0fdf4;box-shadow:inset 0 3px #86efac}.month-cell[data-level=medium]{background:#fefce8;box-shadow:inset 0 3px #facc15}.month-cell[data-level=high]{background:#fff7ed;box-shadow:inset 0 3px #fb923c}.month-cell[data-level=critical]{background:#fef2f2;box-shadow:inset 0 3px #ef4444}.month-cell.other-month[data-level] .day-num{color:#475569}.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[data-level=low]{background:#f0fdf4;box-shadow:inset 0 3px #86efac}.week-day-hdr[data-level=medium]{background:#fefce8;box-shadow:inset 0 3px #facc15}.week-day-hdr[data-level=high]{background:#fff7ed;box-shadow:inset 0 3px #fb923c}.week-day-hdr[data-level=critical]{background:#fef2f2;box-shadow:inset 0 3px #ef4444}.week-day-hdr.today{background:#eff6ff}.deco-sr{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);border:0;white-space:nowrap}.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-section{display:block}.agenda-period-hdr{margin:0;padding:8px 12px;font-size:.75rem;font-weight:700;color:#475569;text-transform:uppercase;letter-spacing:.06em;background:#f1f5f9;border-bottom:1px solid #e2e8f0;position:-webkit-sticky;position:sticky;top:0;z-index:1}.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}.item-wrap{position:relative;display:block;min-width:0}.item-wrap.timed-wrap{position:absolute;min-height:20px}.timed-event.in-wrap{position:static;width:100%;height:100%}.item-actions{position:absolute;top:50%;right:2px;transform:translateY(-50%);display:inline-flex;gap:2px;opacity:0;pointer-events:none;z-index:2}.item-wrap:hover>.item-actions,.item-wrap:focus-within>.item-actions{opacity:1;pointer-events:auto}.agenda-wrap>.item-actions{right:12px}.item-action{min-width:20px;height:20px;padding:0 4px;display:inline-flex;align-items:center;justify-content:center;font-family:inherit;font-size:.6875rem;font-weight:600;color:#334155;background:#fff;border:1px solid #cbd5e1;border-radius:4px;cursor:pointer}.item-action:hover:not(:disabled){background:#eff6ff;color:#1d4ed8}.item-action--danger{color:#b91c1c;border-color:#fecaca}.item-action--danger:hover:not(:disabled){background:#fef2f2;color:#991b1b}.item-action:disabled{opacity:.5;cursor:not-allowed}.item-action:focus-visible{outline:2px solid #3b82f6;outline-offset:1px}@media(hover:none){.agenda-wrap>.item-actions{opacity:1;pointer-events:auto}}@media(pointer:coarse),(max-width:480px){.item-action{min-width:44px;min-height:44px}}@media(prefers-reduced-motion:reduce){.btn-nav,.btn-today,.filter-chip,.month-cell,.agenda-event{transition:none}}@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{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px 12px}.toolbar-left{flex:1 1 auto}.toolbar-right{flex:0 1 auto;min-width:0;max-width:100%}.toolbar-center{display:none}.period-label{font-size:1.875rem}.toolbar-right{justify-content:flex-end}.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}.filter-main{flex-basis:100%}.month-view,.cal-skeleton,.outline-grid,.week-view{overflow-x:auto;-webkit-overflow-scrolling:touch}.month-grid,.skel-month-grid,.skel-week-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:640px){.cal-toolbar{padding:14px}.period-label{font-size:1.625rem}.filter-bar{padding:10px 14px 12px}.filter-nav{width:100%;margin-left:0}.filter-nav .nav-controls{display:flex;width:100%}.filter-nav .btn-today{flex:1 1 auto}.chip-head{flex-wrap:wrap;row-gap:0;flex-shrink:1;min-width:0}.chip-time{white-space:normal;line-height:1.1;flex-shrink:1;min-width:0;overflow-wrap:anywhere}.event-chip.stacked{flex-wrap:nowrap}.month-view,.cal-skeleton,.outline-grid{overflow-x:hidden}.month-grid,.skel-month-grid,.skel-week-grid,.skel-dow-row{min-width:0}.month-dow{padding:8px 2px;font-size:.6875rem;letter-spacing:0}.month-row{flex-basis:72px}.month-cell{min-height:72px;padding:3px 2px 2px}.day-num{width:22px;height:22px;line-height:22px;font-size:.75rem;margin-bottom:2px}.cell-events{gap:1px}.event-chip{min-height:24px;padding:1px 3px;font-size:.625rem;gap:2px}.more-events{min-height:24px;padding:1px 3px;font-size:.625rem;white-space:normal;line-height:1.1;max-width:100%}}@media(max-width:480px){.dow-full{display:none}.dow-short{display:inline}}\n"]
|
|
42855
43987
|
}]
|
|
42856
43988
|
}],
|
|
42857
43989
|
ctorParameters: () => [],
|
|
@@ -43033,6 +44165,30 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
43033
44165
|
required: false
|
|
43034
44166
|
}]
|
|
43035
44167
|
}],
|
|
44168
|
+
dayDecorationFn: [{
|
|
44169
|
+
type: i0.Input,
|
|
44170
|
+
args: [{
|
|
44171
|
+
isSignal: true,
|
|
44172
|
+
alias: "dayDecorationFn",
|
|
44173
|
+
required: false
|
|
44174
|
+
}]
|
|
44175
|
+
}],
|
|
44176
|
+
itemActionsFn: [{
|
|
44177
|
+
type: i0.Input,
|
|
44178
|
+
args: [{
|
|
44179
|
+
isSignal: true,
|
|
44180
|
+
alias: "itemActionsFn",
|
|
44181
|
+
required: false
|
|
44182
|
+
}]
|
|
44183
|
+
}],
|
|
44184
|
+
agendaGroupFn: [{
|
|
44185
|
+
type: i0.Input,
|
|
44186
|
+
args: [{
|
|
44187
|
+
isSignal: true,
|
|
44188
|
+
alias: "agendaGroupFn",
|
|
44189
|
+
required: false
|
|
44190
|
+
}]
|
|
44191
|
+
}],
|
|
43036
44192
|
rangeChange: [{
|
|
43037
44193
|
type: i0.Output,
|
|
43038
44194
|
args: ["rangeChange"]
|
|
@@ -43052,6 +44208,10 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
43052
44208
|
moreClick: [{
|
|
43053
44209
|
type: i0.Output,
|
|
43054
44210
|
args: ["moreClick"]
|
|
44211
|
+
}],
|
|
44212
|
+
itemAction: [{
|
|
44213
|
+
type: i0.Output,
|
|
44214
|
+
args: ["itemAction"]
|
|
43055
44215
|
}]
|
|
43056
44216
|
}
|
|
43057
44217
|
});
|
|
@@ -43629,6 +44789,50 @@ function formatAddress(parts, options = {}) {
|
|
|
43629
44789
|
zip
|
|
43630
44790
|
].filter(Boolean).join(separator);
|
|
43631
44791
|
}
|
|
44792
|
+
function getInitials(firstName, lastName) {
|
|
44793
|
+
return (firstName?.[0] || "") + (lastName?.[0] || "");
|
|
44794
|
+
}
|
|
44795
|
+
function formatDuration(seconds) {
|
|
44796
|
+
if (!seconds) return "";
|
|
44797
|
+
const m = Math.floor(seconds / 60);
|
|
44798
|
+
const s = seconds % 60;
|
|
44799
|
+
return m > 0 ? `${m}m ${s}s` : `${s}s`;
|
|
44800
|
+
}
|
|
44801
|
+
function formatPhone(raw) {
|
|
44802
|
+
if (!raw) return "";
|
|
44803
|
+
const normalized = raw.startsWith("+1") && raw.replace(/\D/g, "").length === 11 ? raw.slice(2) : raw;
|
|
44804
|
+
if (normalized.startsWith("+")) return normalized;
|
|
44805
|
+
const digits = normalized.replace(/\D/g, "");
|
|
44806
|
+
const d = digits.startsWith("1") && digits.length === 11 ? digits.slice(1) : digits.slice(0, 10);
|
|
44807
|
+
if (d.length <= 3) return d;
|
|
44808
|
+
if (d.length <= 6) return `(${d.slice(0, 3)}) ${d.slice(3)}`;
|
|
44809
|
+
return `(${d.slice(0, 3)}) ${d.slice(3, 6)}-${d.slice(6)}`;
|
|
44810
|
+
}
|
|
44811
|
+
function formatPhoneDisplay(e164) {
|
|
44812
|
+
const value = (e164 ?? "").trim();
|
|
44813
|
+
const m = /^\+1(\d{3})(\d{3})(\d{4})$/.exec(value);
|
|
44814
|
+
return m ? `+1 ${m[1]} ${m[2]}-${m[3]}` : e164 ?? "";
|
|
44815
|
+
}
|
|
44816
|
+
function formatShortDate(value) {
|
|
44817
|
+
if (!value) return "—";
|
|
44818
|
+
return new Date(/^\d{4}-\d{2}-\d{2}$/.test(value) ? value + "T00:00:00" : value).toLocaleDateString("en-US", {
|
|
44819
|
+
month: "short",
|
|
44820
|
+
day: "numeric",
|
|
44821
|
+
year: "numeric"
|
|
44822
|
+
});
|
|
44823
|
+
}
|
|
44824
|
+
function todayInTimezone(timezone) {
|
|
44825
|
+
const fmt = (tz) => new Intl.DateTimeFormat("en-CA", {
|
|
44826
|
+
timeZone: tz,
|
|
44827
|
+
year: "numeric",
|
|
44828
|
+
month: "2-digit",
|
|
44829
|
+
day: "2-digit"
|
|
44830
|
+
}).format(/* @__PURE__ */ new Date());
|
|
44831
|
+
if (timezone) try {
|
|
44832
|
+
return fmt(timezone);
|
|
44833
|
+
} catch {}
|
|
44834
|
+
return fmt();
|
|
44835
|
+
}
|
|
43632
44836
|
function downloadBlob(blob, fileName) {
|
|
43633
44837
|
if (typeof document === "undefined" || typeof URL === "undefined" || typeof URL.createObjectURL !== "function") return;
|
|
43634
44838
|
const url = URL.createObjectURL(blob);
|
|
@@ -53436,6 +54640,6 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
53436
54640
|
}]
|
|
53437
54641
|
}
|
|
53438
54642
|
});
|
|
53439
|
-
export { ActionBarComponent, AlertComponent, AppShellComponent, AudioPlayerComponent, AvatarComponent, BADGE_VARIANT_STYLES, BadgeComponent, BankAccountFormComponent, BarRowComponent, BoardCardDirective, BoardComponent, BulkMessagePanelComponent, BusinessHoursComponent, ButtonComponent, CalendarComponent, CardListItemComponent, CheckboxComponent, CheckboxTrailingDirective, ChipComponent, ChipGroupComponent, ColorInputComponent, ColumnFilterComponent, ColumnsComponent, ComboboxComponent, ConfirmOutletComponent, ConfirmService, ContactPickerComponent, ConversationRichBodyComponent, ConversationsComponent, DEFAULT_BANK_ACCOUNT_TYPE_OPTIONS, DEFAULT_BANK_HOLDER_TYPE_OPTIONS, DEFAULT_BANK_MANDATE_TEXT, DEFAULT_EMAIL_TEMPLATE_BLOCK_GROUPS, DEFAULT_EMAIL_TEMPLATE_VARIABLE_GROUPS, DEFAULT_PASSWORD_RULES, DROPDOWN_GROUP, DataTableComponent, DateInputComponent, DateRangePickerComponent, DatetimeInputComponent, DetailCardComponent, DiscountSelectorComponent, DividerComponent, DropdownComponent, EMAIL_BLOCK_DRAG_TYPE, EMAIL_TEMPLATE_MAX_BODY, EMAIL_TEMPLATE_MAX_TEXT, EMAIL_TEMPLATE_START_TEXT, EmailTemplateEditorComponent, EmptyStateComponent, ErrorComponent, ErrorStateComponent, FORGEROUTE_CONFIG, FadeComponent, FileInputComponent, FixedFooterComponent, FormColSpanDirective, FormComponent, FormRowComponent, FormSectionComponent, HintComponent, IDX_BEHAVIOR_SIGNALS, INTEGRATION_CATALOG, INTEGRATION_FIELD_DEFS, INTEGRATION_GROUP_ORDER, INTEGRATION_OPTION_DEFS, IconComponent, ImageComponent, ImageGalleryComponent, ImageGalleryDialogComponent, ImagePreviewComponent, ImageRepositionComponent, ImportExportComponent, ImportSourceGridComponent, KeypadComponent, KpiCardComponent, LAYOUT_GAP_PX, ListComponent, ListItemComponent, LiveRegionComponent, MAX_EMAIL_ADDRESS_LENGTH, ModalComponent, MoreMenuComponent, MultiSelectComponent, NOTES_MAX_LENGTH, NotesComponent, OfflineBannerComponent, OptionCardComponent, PHONE_NUMBER_AREA_CODE_LENGTH, PHONE_NUMBER_ZIP_LENGTH, PageComponent, PaginationComponent, PanelInfoListComponent, PasswordRequirementsComponent, PdfHotspotComponent, PhoneNumberPickerComponent, PillTabsComponent, ProgressBarComponent, ProgressRingComponent, QrCodeComponent, QuickFilterTabsComponent, RICH_TEXT_OPTIONS, RadioComponent, RadioGroupComponent, RadioMatrixComponent, RadioOptionContentDirective, ReadonlyFieldsetComponent, ReminderAlertsComponent, RichTextEditorComponent, SEMANTIC_BADGE_MAP, SETUP_DONE_KEY, SETUP_INTEGRATIONS, SearchInputComponent, SectionHeaderComponent, SelectComponent, SetupWizardComponent, SetupWizardStepDirective, SetupWizardStepHeaderDirective, ShareMenuComponent, ShowComponent, SidePanelComponent, SidebarLayoutComponent, SignaturePadComponent, SkeletonComponent, SnackbarComponent, SnackbarService, StackComponent, StarComponent, StepperComponent, TableToolbarComponent, TextComponent, TextInputComponent, TextTemplatePickerComponent, TextareaInputComponent, TimeInputComponent, TimelineComponent, ToastComponent, ToastService, ToggleBadgeComponent, ToggleComponent, TooltipDirective, US_STATES, UiFieldValidity, acceptLabel, appShellGroupsStorageKey, autoVariant, blockHasContent, buildDefaultSchedule, buildPreviewDocument, buildVideoBlockHtml, builtInActionIcon, businessTimeOptions, conversationDateLabel, conversationHtmlToText, conversationInitial, conversationMessageStatusLabel, conversationMessageStatusMark, createFieldReveal, decodeFilterValues, digitsOnly, downloadBlob, emailShareUrl, encodeFilterValue, encodeFilterValues, errorContextInterceptor, escapeHtml, facebookShareUrl, fileMatchesAccept, formatAddress, formatCategoryLabel, formatConversationPhone, formatConversationTime, formatCurrency, formatFileSize, formatIsoDate, formatIsoDateTime, formatMessageTime, formatTime, formatVideoDuration, getEligibleIds, getEligibleOptions, getErrorMessage, gmailShareUrl, groupMessagesByDay, humanReadableMessage, iconPath, insideEditorBlock, integrationPlainText, integrationsForApp, integrationsOnlyFor, isBlockDrag, isValidEmailAddress, isWebUrl, isoKey, issueToErrors, linkedInShareUrl, maxLengthIssue, mergeDescribedBy, normalizeHexColor, outlookShareUrl, parseBizHours, parseIso, parseTime, passwordMeetsRules, pluralize, provideForgerouteToast, reorderItems, requiredIssue, resolveLayoutGap, resolvePreset, serializeBizHours, serializedTextLength, setupIntegrations, splitIntro, truncateConversationText, xShareUrl };
|
|
54643
|
+
export { ASCII_SPECIAL_PASSWORD_RULES, ActionBarComponent, AlertComponent, AppShellComponent, AudioPlayerComponent, AvatarComponent, BADGE_VARIANT_STYLES, BadgeComponent, BankAccountFormComponent, BarRowComponent, BoardCardDirective, BoardComponent, BulkMessagePanelComponent, BusinessHoursComponent, ButtonComponent, COMMON_DETAIL_GROUP_STYLES, CalendarComponent, CardListItemComponent, CheckboxComponent, CheckboxTrailingDirective, ChipComponent, ChipGroupComponent, ColorInputComponent, ColumnFilterComponent, ColumnsComponent, ComboboxComponent, ConfirmOutletComponent, ConfirmService, ContactPickerComponent, ConversationRichBodyComponent, ConversationsComponent, DEFAULT_BANK_ACCOUNT_TYPE_OPTIONS, DEFAULT_BANK_HOLDER_TYPE_OPTIONS, DEFAULT_BANK_MANDATE_TEXT, DEFAULT_EMAIL_TEMPLATE_BLOCK_GROUPS, DEFAULT_EMAIL_TEMPLATE_VARIABLE_GROUPS, DEFAULT_PASSWORD_RULES, DETAIL_CARD_HEADER_BG, DETAIL_GROUP_HEADER_BG, DROPDOWN_GROUP, DataTableComponent, DateInputComponent, DateRangePickerComponent, DatetimeInputComponent, DetailCardComponent, DiscountSelectorComponent, DividerComponent, DropdownComponent, EMAIL_BLOCK_DRAG_TYPE, EMAIL_TEMPLATE_MAX_BODY, EMAIL_TEMPLATE_MAX_TEXT, EMAIL_TEMPLATE_START_TEXT, EmailTemplateEditorComponent, EmptyStateComponent, ErrorComponent, ErrorStateComponent, FORGEROUTE_CONFIG, FadeComponent, FileInputComponent, FillViewportDirective, FixedFooterComponent, FormColSpanDirective, FormComponent, FormRowComponent, FormSectionComponent, HintComponent, IDX_BEHAVIOR_SIGNALS, INTEGRATION_CATALOG, INTEGRATION_FIELD_DEFS, INTEGRATION_GROUP_ORDER, INTEGRATION_OPTION_DEFS, IconComponent, ImageComponent, ImageGalleryComponent, ImageGalleryDialogComponent, ImagePreviewComponent, ImageRepositionComponent, ImportExportComponent, ImportSourceGridComponent, KeypadComponent, KpiCardComponent, LAYOUT_GAP_PX, LISTED_SPECIAL_PASSWORD_RULES, ListComponent, ListItemComponent, LiveRegionComponent, MAX_EMAIL_ADDRESS_LENGTH, ModalComponent, MoreMenuComponent, MultiSelectComponent, NOTES_MAX_LENGTH, NotesComponent, OfflineBannerComponent, OptionCardComponent, PASSWORD_MAX_LENGTH, PHONE_NUMBER_AREA_CODE_LENGTH, PHONE_NUMBER_ZIP_LENGTH, PageComponent, PaginationComponent, PanelInfoListComponent, PasswordRequirementsComponent, PdfHotspotComponent, PhoneNumberPickerComponent, PillTabsComponent, ProgressBarComponent, ProgressRingComponent, QrCodeComponent, QuickFilterTabsComponent, RICH_TEXT_OPTIONS, RadioComponent, RadioGroupComponent, RadioMatrixComponent, RadioOptionContentDirective, ReadonlyFieldsetComponent, ReminderAlertsComponent, RichTextEditorComponent, SEMANTIC_BADGE_MAP, SETUP_DONE_KEY, SETUP_INTEGRATIONS, SearchInputComponent, SectionHeaderComponent, SelectComponent, SetupWizardComponent, SetupWizardStepDirective, SetupWizardStepHeaderDirective, ShareMenuComponent, ShowComponent, SidePanelComponent, SidebarLayoutComponent, SignaturePadComponent, SkeletonComponent, SnackbarComponent, SnackbarService, StackComponent, StarComponent, StepperComponent, TableToolbarComponent, TextComponent, TextInputComponent, TextTemplatePickerComponent, TextareaInputComponent, TimeInputComponent, TimelineComponent, ToastComponent, ToastService, ToggleBadgeComponent, ToggleComponent, TooltipDirective, US_LOCATIONS, US_STATES, UiFieldValidity, acceptLabel, appShellGroupsStorageKey, autoVariant, blockHasContent, buildDefaultSchedule, buildPreviewDocument, buildVideoBlockHtml, builtInActionIcon, businessTimeOptions, conversationDateLabel, conversationHtmlToText, conversationInitial, conversationMessageStatusLabel, conversationMessageStatusMark, createFieldReveal, createPasswordPolicyValidator, decodeFilterValues, digitsOnly, downloadBlob, emailShareUrl, encodeFilterValue, encodeFilterValues, errorContextInterceptor, escapeHtml, facebookShareUrl, fileMatchesAccept, formatAddress, formatCategoryLabel, formatConversationPhone, formatConversationTime, formatCurrency, formatDuration, formatFileSize, formatIsoDate, formatIsoDateTime, formatMessageTime, formatPhone, formatPhoneDisplay, formatShortDate, formatTime, formatVideoDuration, getEligibleIds, getEligibleOptions, getErrorMessage, getInitials, gmailShareUrl, groupMessagesByDay, humanReadableMessage, iconPath, insideEditorBlock, integrationPlainText, integrationsForApp, integrationsOnlyFor, isBlockDrag, isValidEmailAddress, isWebUrl, isoKey, issueToErrors, linkedInShareUrl, maxLengthIssue, mergeDescribedBy, normalizeHexColor, outlookShareUrl, parseBizHours, parseIso, parseTime, passwordMeetsRules, periodGroup, pluralize, provideForgerouteToast, reorderItems, requiredIssue, resolveLayoutGap, resolvePreset, serializeBizHours, serializedTextLength, setupIntegrations, splitIntro, todayInTimezone, truncateConversationText, xShareUrl };
|
|
53440
54644
|
|
|
53441
54645
|
//# sourceMappingURL=forgeroute-ui.mjs.map
|