@forgeroute/ui 0.4.66 → 0.4.68
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/forgeroute-ui.mjs +441 -185
- package/fesm2022/forgeroute-ui.mjs.map +1 -1
- package/package.json +1 -1
- package/src/_detail-columns.scss +32 -0
- package/types/forgeroute-ui.d.ts +72 -5
|
@@ -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: () => [],
|
|
@@ -11892,6 +11902,7 @@ var DataTableComponent = class DataTableComponent {
|
|
|
11892
11902
|
}))];
|
|
11893
11903
|
}, ...ngDevMode ? [{ debugName: "_effectiveTabs" }] : /* istanbul ignore next */ []);
|
|
11894
11904
|
this._error = signal(null, ...ngDevMode ? [{ debugName: "_error" }] : /* istanbul ignore next */ []);
|
|
11905
|
+
this._cardListHasItems = computed(() => this._loading() || !this._error() && this._items().length > 0, ...ngDevMode ? [{ debugName: "_cardListHasItems" }] : /* istanbul ignore next */ []);
|
|
11895
11906
|
this._loadFailed = signal(false, ...ngDevMode ? [{ debugName: "_loadFailed" }] : /* istanbul ignore next */ []);
|
|
11896
11907
|
this.loadFailed = this._loadFailed.asReadonly();
|
|
11897
11908
|
this._search = signal("", ...ngDevMode ? [{ debugName: "_search" }] : /* istanbul ignore next */ []);
|
|
@@ -13460,7 +13471,8 @@ var DataTableComponent = class DataTableComponent {
|
|
|
13460
13471
|
}
|
|
13461
13472
|
</div>
|
|
13462
13473
|
}
|
|
13463
|
-
|
|
13474
|
+
<!-- role=list only while it holds listitems (cards or skeleton cards); empty / error / no-match states are not an empty list -->
|
|
13475
|
+
<div class="dt-card-list" [attr.role]="_cardListHasItems() ? 'list' : null" [attr.aria-label]="_cardListHasItems() ? tableLabel() : null">
|
|
13464
13476
|
|
|
13465
13477
|
@if (_loading()) {
|
|
13466
13478
|
@for (_ of skeletonRows(); track $index) {
|
|
@@ -13544,7 +13556,7 @@ var DataTableComponent = class DataTableComponent {
|
|
|
13544
13556
|
@if (tc.starFn?.(item); as starTip) {
|
|
13545
13557
|
<ui-star class="dt-cell-star" [tooltip]="starTip" />
|
|
13546
13558
|
}
|
|
13547
|
-
{{ tc.render ? tc.render(item) : (
|
|
13559
|
+
{{ tc.render ? tc.render(item) : cardCellText(tc, item) }}
|
|
13548
13560
|
</span>
|
|
13549
13561
|
}
|
|
13550
13562
|
}
|
|
@@ -13688,7 +13700,7 @@ var DataTableComponent = class DataTableComponent {
|
|
|
13688
13700
|
</div>
|
|
13689
13701
|
`,
|
|
13690
13702
|
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%}.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"],
|
|
13703
|
+
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
13704
|
dependencies: [
|
|
13693
13705
|
{
|
|
13694
13706
|
kind: "directive",
|
|
@@ -14533,7 +14545,8 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
14533
14545
|
}
|
|
14534
14546
|
</div>
|
|
14535
14547
|
}
|
|
14536
|
-
|
|
14548
|
+
<!-- role=list only while it holds listitems (cards or skeleton cards); empty / error / no-match states are not an empty list -->
|
|
14549
|
+
<div class="dt-card-list" [attr.role]="_cardListHasItems() ? 'list' : null" [attr.aria-label]="_cardListHasItems() ? tableLabel() : null">
|
|
14537
14550
|
|
|
14538
14551
|
@if (_loading()) {
|
|
14539
14552
|
@for (_ of skeletonRows(); track $index) {
|
|
@@ -14617,7 +14630,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
14617
14630
|
@if (tc.starFn?.(item); as starTip) {
|
|
14618
14631
|
<ui-star class="dt-cell-star" [tooltip]="starTip" />
|
|
14619
14632
|
}
|
|
14620
|
-
{{ tc.render ? tc.render(item) : (
|
|
14633
|
+
{{ tc.render ? tc.render(item) : cardCellText(tc, item) }}
|
|
14621
14634
|
</span>
|
|
14622
14635
|
}
|
|
14623
14636
|
}
|
|
@@ -14760,7 +14773,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
14760
14773
|
}
|
|
14761
14774
|
</div>
|
|
14762
14775
|
`,
|
|
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%}.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"]
|
|
14776
|
+
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
14777
|
}]
|
|
14765
14778
|
}],
|
|
14766
14779
|
ctorParameters: () => [],
|
|
@@ -26808,6 +26821,7 @@ var DropdownComponent = class DropdownComponent {
|
|
|
26808
26821
|
this._typeahead = "";
|
|
26809
26822
|
this._typeaheadTimer = null;
|
|
26810
26823
|
this._destroyed = false;
|
|
26824
|
+
this._loadToken = 0;
|
|
26811
26825
|
this.triggerId = `ui-dd-trigger-${this._id}`;
|
|
26812
26826
|
this.menuId = `ui-dd-menu-${this._id}`;
|
|
26813
26827
|
this._ariaLabel = computed(() => this.ariaLabel().trim() || null, ...ngDevMode ? [{ debugName: "_ariaLabel" }] : /* istanbul ignore next */ []);
|
|
@@ -26815,29 +26829,39 @@ var DropdownComponent = class DropdownComponent {
|
|
|
26815
26829
|
inject(DestroyRef).onDestroy(() => {
|
|
26816
26830
|
this._destroyed = true;
|
|
26817
26831
|
if (this._typeaheadTimer) clearTimeout(this._typeaheadTimer);
|
|
26832
|
+
if (_activeDropdownId() === this._id) _activeDropdownId.set("");
|
|
26818
26833
|
});
|
|
26819
26834
|
effect(() => {
|
|
26820
|
-
if (_activeDropdownId() !== this._id) untracked(() =>
|
|
26821
|
-
if (this.open()) this.open.set(false);
|
|
26822
|
-
});
|
|
26835
|
+
if (_activeDropdownId() !== this._id) untracked(() => this.close());
|
|
26823
26836
|
});
|
|
26824
26837
|
effect(() => {
|
|
26825
26838
|
const isOpen = this.open();
|
|
26826
26839
|
const loader = this.loader();
|
|
26827
26840
|
if (!loader) return;
|
|
26828
26841
|
if (isOpen && untracked(() => this._loaded()) === null) {
|
|
26842
|
+
const token = ++this._loadToken;
|
|
26829
26843
|
this.loading.set(true);
|
|
26830
|
-
|
|
26844
|
+
const done = (items) => {
|
|
26845
|
+
if (this._destroyed || token !== this._loadToken) return;
|
|
26831
26846
|
this._loaded.set(items);
|
|
26832
26847
|
this.loading.set(false);
|
|
26833
|
-
if (
|
|
26834
|
-
|
|
26835
|
-
|
|
26848
|
+
if (this.open()) {
|
|
26849
|
+
afterNextRender(() => this._place(), { injector: this._injector });
|
|
26850
|
+
if (this._pendingFocus) this._focusPending();
|
|
26851
|
+
}
|
|
26852
|
+
};
|
|
26853
|
+
new Promise((resolve) => resolve(loader())).then(done, () => done([]));
|
|
26854
|
+
} else if (!isOpen) {
|
|
26855
|
+
this._loadToken++;
|
|
26856
|
+
this.loading.set(false);
|
|
26857
|
+
this._loaded.set(null);
|
|
26858
|
+
}
|
|
26836
26859
|
});
|
|
26837
26860
|
}
|
|
26838
26861
|
toggle(event) {
|
|
26839
26862
|
event.stopPropagation();
|
|
26840
26863
|
this._setOpen(!this.open());
|
|
26864
|
+
this._focusTrigger();
|
|
26841
26865
|
}
|
|
26842
26866
|
select(item) {
|
|
26843
26867
|
if (item.disabled) return;
|
|
@@ -27104,18 +27128,18 @@ var DropdownComponent = class DropdownComponent {
|
|
|
27104
27128
|
template: `
|
|
27105
27129
|
<div class="dd-wrapper">
|
|
27106
27130
|
@if (variant() === 'badge') {
|
|
27107
|
-
<button class="dd-trigger dd-trigger-badge" [class.dd-active]="active()" [class.dd-open]="open()" [attr.id]="triggerId" [attr.aria-label]="_ariaLabel()" [attr.aria-expanded]="open()" aria-haspopup="menu" [attr.aria-controls]="open() ? menuId : null" (click)="toggle($event)" (keydown)="onTriggerKeydown($event)" (keyup)="onTriggerKeyup($event)">
|
|
27131
|
+
<button type="button" class="dd-trigger dd-trigger-badge" [class.dd-active]="active()" [class.dd-open]="open()" [attr.id]="triggerId" [attr.aria-label]="_ariaLabel()" [attr.aria-expanded]="open()" aria-haspopup="menu" [attr.aria-controls]="open() ? menuId : null" (click)="toggle($event)" (keydown)="onTriggerKeydown($event)" (keyup)="onTriggerKeyup($event)">
|
|
27108
27132
|
<span class="dd-text">{{ label() }}</span>
|
|
27109
27133
|
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" aria-hidden="true"><polyline points="6 9 12 15 18 9"/></svg>
|
|
27110
27134
|
</button>
|
|
27111
27135
|
} @else {
|
|
27112
|
-
<button class="dd-trigger dd-trigger-btn" [class.dd-trigger-md]="size() === 'md'" [class.dd-active]="active()" [class.dd-open]="open()" [attr.id]="triggerId" [attr.aria-label]="_ariaLabel()" [attr.aria-expanded]="open()" aria-haspopup="menu" [attr.aria-controls]="open() ? menuId : null" (click)="toggle($event)" (keydown)="onTriggerKeydown($event)" (keyup)="onTriggerKeyup($event)">
|
|
27136
|
+
<button type="button" class="dd-trigger dd-trigger-btn" [class.dd-trigger-md]="size() === 'md'" [class.dd-active]="active()" [class.dd-open]="open()" [attr.id]="triggerId" [attr.aria-label]="_ariaLabel()" [attr.aria-expanded]="open()" aria-haspopup="menu" [attr.aria-controls]="open() ? menuId : null" (click)="toggle($event)" (keydown)="onTriggerKeydown($event)" (keyup)="onTriggerKeyup($event)">
|
|
27113
27137
|
<span class="dd-text">{{ label() }}</span>
|
|
27114
27138
|
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" aria-hidden="true"><polyline points="6 9 12 15 18 9"/></svg>
|
|
27115
27139
|
</button>
|
|
27116
27140
|
}
|
|
27117
27141
|
@if (open()) {
|
|
27118
|
-
<div class="dd-menu" role="menu" [attr.id]="menuId" [attr.aria-label]="_ariaLabel()" [attr.aria-labelledby]="_ariaLabel() ? null : triggerId" [style.min-width]="menuWidth()" [class.dd-menu-end]="alignEnd()" [class.dd-menu-up]="openUp()" [style.max-height.px]="menuMaxHeight()" (click)="$event.stopPropagation()" (keydown)="onMenuKeydown($event)">
|
|
27142
|
+
<div class="dd-menu" role="menu" [attr.id]="menuId" [attr.aria-label]="_ariaLabel()" [attr.aria-labelledby]="_ariaLabel() ? null : triggerId" [style.min-width]="menuWidth()" [class.dd-menu-end]="alignEnd()" [class.dd-menu-up]="openUp()" [style.max-height.px]="menuMaxHeight()" [attr.aria-busy]="loading() ? 'true' : null" (click)="$event.stopPropagation()" (keydown)="onMenuKeydown($event)">
|
|
27119
27143
|
@if (loading()) {
|
|
27120
27144
|
<div class="dd-loading">
|
|
27121
27145
|
<span class="dd-spinner"></span>
|
|
@@ -27123,7 +27147,7 @@ var DropdownComponent = class DropdownComponent {
|
|
|
27123
27147
|
</div>
|
|
27124
27148
|
} @else {
|
|
27125
27149
|
@for (item of displayItems(); track item.value) {
|
|
27126
|
-
<button type="button" class="dd-item" role="menuitem" tabindex="-1" [disabled]="item.disabled === true" [class.dd-item-active]="activeValue() === item.value" (click)="select(item)">
|
|
27150
|
+
<button type="button" class="dd-item" role="menuitem" tabindex="-1" [disabled]="item.disabled === true" [class.dd-item-active]="activeValue() === item.value" [attr.aria-current]="activeValue() === item.value ? 'true' : null" (click)="select(item)">
|
|
27127
27151
|
@if (item.icon) {
|
|
27128
27152
|
<svg class="dd-icon" 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"><path [attr.d]="item.icon" /></svg>
|
|
27129
27153
|
}
|
|
@@ -27164,18 +27188,18 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
27164
27188
|
template: `
|
|
27165
27189
|
<div class="dd-wrapper">
|
|
27166
27190
|
@if (variant() === 'badge') {
|
|
27167
|
-
<button class="dd-trigger dd-trigger-badge" [class.dd-active]="active()" [class.dd-open]="open()" [attr.id]="triggerId" [attr.aria-label]="_ariaLabel()" [attr.aria-expanded]="open()" aria-haspopup="menu" [attr.aria-controls]="open() ? menuId : null" (click)="toggle($event)" (keydown)="onTriggerKeydown($event)" (keyup)="onTriggerKeyup($event)">
|
|
27191
|
+
<button type="button" class="dd-trigger dd-trigger-badge" [class.dd-active]="active()" [class.dd-open]="open()" [attr.id]="triggerId" [attr.aria-label]="_ariaLabel()" [attr.aria-expanded]="open()" aria-haspopup="menu" [attr.aria-controls]="open() ? menuId : null" (click)="toggle($event)" (keydown)="onTriggerKeydown($event)" (keyup)="onTriggerKeyup($event)">
|
|
27168
27192
|
<span class="dd-text">{{ label() }}</span>
|
|
27169
27193
|
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" aria-hidden="true"><polyline points="6 9 12 15 18 9"/></svg>
|
|
27170
27194
|
</button>
|
|
27171
27195
|
} @else {
|
|
27172
|
-
<button class="dd-trigger dd-trigger-btn" [class.dd-trigger-md]="size() === 'md'" [class.dd-active]="active()" [class.dd-open]="open()" [attr.id]="triggerId" [attr.aria-label]="_ariaLabel()" [attr.aria-expanded]="open()" aria-haspopup="menu" [attr.aria-controls]="open() ? menuId : null" (click)="toggle($event)" (keydown)="onTriggerKeydown($event)" (keyup)="onTriggerKeyup($event)">
|
|
27196
|
+
<button type="button" class="dd-trigger dd-trigger-btn" [class.dd-trigger-md]="size() === 'md'" [class.dd-active]="active()" [class.dd-open]="open()" [attr.id]="triggerId" [attr.aria-label]="_ariaLabel()" [attr.aria-expanded]="open()" aria-haspopup="menu" [attr.aria-controls]="open() ? menuId : null" (click)="toggle($event)" (keydown)="onTriggerKeydown($event)" (keyup)="onTriggerKeyup($event)">
|
|
27173
27197
|
<span class="dd-text">{{ label() }}</span>
|
|
27174
27198
|
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" aria-hidden="true"><polyline points="6 9 12 15 18 9"/></svg>
|
|
27175
27199
|
</button>
|
|
27176
27200
|
}
|
|
27177
27201
|
@if (open()) {
|
|
27178
|
-
<div class="dd-menu" role="menu" [attr.id]="menuId" [attr.aria-label]="_ariaLabel()" [attr.aria-labelledby]="_ariaLabel() ? null : triggerId" [style.min-width]="menuWidth()" [class.dd-menu-end]="alignEnd()" [class.dd-menu-up]="openUp()" [style.max-height.px]="menuMaxHeight()" (click)="$event.stopPropagation()" (keydown)="onMenuKeydown($event)">
|
|
27202
|
+
<div class="dd-menu" role="menu" [attr.id]="menuId" [attr.aria-label]="_ariaLabel()" [attr.aria-labelledby]="_ariaLabel() ? null : triggerId" [style.min-width]="menuWidth()" [class.dd-menu-end]="alignEnd()" [class.dd-menu-up]="openUp()" [style.max-height.px]="menuMaxHeight()" [attr.aria-busy]="loading() ? 'true' : null" (click)="$event.stopPropagation()" (keydown)="onMenuKeydown($event)">
|
|
27179
27203
|
@if (loading()) {
|
|
27180
27204
|
<div class="dd-loading">
|
|
27181
27205
|
<span class="dd-spinner"></span>
|
|
@@ -27183,7 +27207,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
27183
27207
|
</div>
|
|
27184
27208
|
} @else {
|
|
27185
27209
|
@for (item of displayItems(); track item.value) {
|
|
27186
|
-
<button type="button" class="dd-item" role="menuitem" tabindex="-1" [disabled]="item.disabled === true" [class.dd-item-active]="activeValue() === item.value" (click)="select(item)">
|
|
27210
|
+
<button type="button" class="dd-item" role="menuitem" tabindex="-1" [disabled]="item.disabled === true" [class.dd-item-active]="activeValue() === item.value" [attr.aria-current]="activeValue() === item.value ? 'true' : null" (click)="select(item)">
|
|
27187
27211
|
@if (item.icon) {
|
|
27188
27212
|
<svg class="dd-icon" 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"><path [attr.d]="item.icon" /></svg>
|
|
27189
27213
|
}
|
|
@@ -31527,11 +31551,13 @@ var PanelInfoListComponent = class PanelInfoListComponent {
|
|
|
31527
31551
|
this.displaySections = computed(() => this.showEmptyState() ? this.sections() : this.sections().filter((s) => s.items.some((i) => !i.hidden)), ...ngDevMode ? [{ debugName: "displaySections" }] : /* istanbul ignore next */ []);
|
|
31528
31552
|
}
|
|
31529
31553
|
hrefOf(item) {
|
|
31530
|
-
let raw = item.href?.trim() ?? "";
|
|
31531
|
-
if (!raw && item.email?.trim()) raw = "mailto:" + item.email.trim();
|
|
31554
|
+
let raw = item.href?.replace(/[\u0000-\u001F]/g, "").trim() ?? "";
|
|
31555
|
+
if (!raw && item.email?.trim()) raw = "mailto:" + item.email.trim().replace(/[?#&%\s<>"]/g, (c) => encodeURIComponent(c));
|
|
31532
31556
|
if (!raw && item.phone?.trim()) {
|
|
31533
|
-
const
|
|
31534
|
-
|
|
31557
|
+
const m = /^(.*?)(?:\s*(?:ext\.?|x|#)\s*(\d+))?\s*$/i.exec(item.phone.trim());
|
|
31558
|
+
const num = m[1];
|
|
31559
|
+
const digits = num.replace(/\D/g, "");
|
|
31560
|
+
if (digits) raw = "tel:" + (num.trim().startsWith("+") ? "+" : "") + digits + (m[2] ? ";ext=" + m[2] : "");
|
|
31535
31561
|
}
|
|
31536
31562
|
if (!raw) return null;
|
|
31537
31563
|
const scheme = /^([a-z][a-z0-9+.\-]*):/i.exec(raw.replace(/[\u0000-\u0020]/g, ""));
|
|
@@ -31548,6 +31574,12 @@ var PanelInfoListComponent = class PanelInfoListComponent {
|
|
|
31548
31574
|
textOf(item) {
|
|
31549
31575
|
return item.value || item.email || item.phone || item.href || "";
|
|
31550
31576
|
}
|
|
31577
|
+
valueOf(item) {
|
|
31578
|
+
return item.value?.trim() ? item.value : "—";
|
|
31579
|
+
}
|
|
31580
|
+
runHeaderAction(ha) {
|
|
31581
|
+
if (!ha.disabled) ha.action();
|
|
31582
|
+
}
|
|
31551
31583
|
visibleItems(section) {
|
|
31552
31584
|
return section.items.filter((i) => !i.hidden);
|
|
31553
31585
|
}
|
|
@@ -31601,16 +31633,16 @@ var PanelInfoListComponent = class PanelInfoListComponent {
|
|
|
31601
31633
|
host: { properties: { "class.pil-fill": "fill()" } },
|
|
31602
31634
|
ngImport: i0,
|
|
31603
31635
|
template: `
|
|
31604
|
-
@for (section of displaySections(); track
|
|
31636
|
+
@for (section of displaySections(); track $index) {
|
|
31605
31637
|
<div class="pil-section">
|
|
31606
|
-
@if (section.title || section.headerAction) {
|
|
31638
|
+
@if (section.title || section.headerAction || section.headerLink) {
|
|
31607
31639
|
<div class="pil-section-label">
|
|
31608
31640
|
<span>{{ section.title }}</span>
|
|
31609
31641
|
@if (section.headerLink) {
|
|
31610
31642
|
<a class="pil-header-link" [routerLink]="section.headerLink.url">{{ section.headerLink.label }}</a>
|
|
31611
31643
|
}
|
|
31612
31644
|
@if (section.headerAction; as ha) {
|
|
31613
|
-
<ui-button class="pil-header-action" variant="secondary" size="xs" [disabled]="!!ha.disabled" [ariaLabel]="ha.ariaLabel ?? ha.label" (click)="ha
|
|
31645
|
+
<ui-button class="pil-header-action" variant="secondary" size="xs" [disabled]="!!ha.disabled" [ariaLabel]="ha.ariaLabel ?? ha.label" (click)="runHeaderAction(ha)">
|
|
31614
31646
|
@if (ha.icon) {
|
|
31615
31647
|
<svg class="pil-header-action-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" focusable="false"><path [attr.d]="ha.icon"/></svg>
|
|
31616
31648
|
}{{ ha.label }}</ui-button>
|
|
@@ -31621,62 +31653,69 @@ var PanelInfoListComponent = class PanelInfoListComponent {
|
|
|
31621
31653
|
<ui-empty-state message="No information available." />
|
|
31622
31654
|
} @else if (section.columns === 2) {
|
|
31623
31655
|
<div class="pil-grid-2">
|
|
31624
|
-
@for (item of visibleItems(section); track
|
|
31656
|
+
@for (item of visibleItems(section); track $index) {
|
|
31625
31657
|
<div class="pil-grid-cell" [class.pil-strong]="item.emphasis">
|
|
31626
31658
|
<span class="pil-label">{{ item.label }}{{ labelColon() ? ':' : '' }}</span>{{ labelColon() ? ' ' : '' }}
|
|
31627
31659
|
<span class="pil-value pil-value--block">
|
|
31628
|
-
|
|
31629
|
-
<ui-badge [label]="item.badge.label" [variant]="item.badge.variant" />
|
|
31630
|
-
} @else if (hrefOf(item); as h) {
|
|
31631
|
-
<a class="pil-link pil-link--href" [attr.href]="h" [attr.target]="isWeb(h) ? '_blank' : null" [attr.rel]="isWeb(h) ? 'noopener noreferrer' : null">{{ textOf(item) }}</a>
|
|
31632
|
-
} @else {
|
|
31633
|
-
<span [class.pil-muted]="item.muted" [class.pil-danger]="item.danger" [class.pil-multiline]="item.multiline">{{ item.value || '—' }}</span>
|
|
31634
|
-
}
|
|
31660
|
+
<ng-container *ngTemplateOutlet="valueTpl; context: { $implicit: item }" />
|
|
31635
31661
|
</span>
|
|
31636
31662
|
</div>
|
|
31637
31663
|
}
|
|
31638
31664
|
</div>
|
|
31639
31665
|
} @else {
|
|
31640
|
-
@for (item of visibleItems(section); track
|
|
31666
|
+
@for (item of visibleItems(section); track $index) {
|
|
31641
31667
|
<div class="pil-row" [class.pil-row--inline]="labelColon()" [class.pil-strong]="item.emphasis">
|
|
31642
31668
|
<span class="pil-label">{{ item.label }}{{ labelColon() ? ':' : '' }}</span>{{ labelColon() ? ' ' : '' }}
|
|
31643
31669
|
<span class="pil-value">
|
|
31644
|
-
|
|
31645
|
-
<span class="pil-badges">
|
|
31646
|
-
@for (b of item.badges; track b.label) {
|
|
31647
|
-
<ui-badge [label]="b.label" [variant]="b.variant" />
|
|
31648
|
-
}
|
|
31649
|
-
</span>
|
|
31650
|
-
} @else if (item.badge) {
|
|
31651
|
-
<ui-badge [label]="item.badge.label" [variant]="item.badge.variant" />
|
|
31652
|
-
} @else if (hrefOf(item); as h) {
|
|
31653
|
-
<a class="pil-link pil-link--href" [attr.href]="h" [attr.target]="isWeb(h) ? '_blank' : null" [attr.rel]="isWeb(h) ? 'noopener noreferrer' : null">{{ textOf(item) }}</a>
|
|
31654
|
-
} @else if (item.link && item.value && item.linkIcon) {
|
|
31655
|
-
<a class="pil-link-icon" [routerLink]="item.link">
|
|
31656
|
-
{{ item.value }}
|
|
31657
|
-
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" aria-hidden="true"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg>
|
|
31658
|
-
</a>
|
|
31659
|
-
} @else if (item.link && item.value) {
|
|
31660
|
-
<a class="pil-link" [routerLink]="item.link">{{ item.value }}</a>
|
|
31661
|
-
} @else {
|
|
31662
|
-
<span [class.pil-muted]="item.muted" [class.pil-danger]="item.danger" [class.pil-multiline]="item.multiline">{{ item.value || '—' }}</span>
|
|
31663
|
-
}
|
|
31664
|
-
@if (item.editAction) {
|
|
31665
|
-
<ui-icon class="pil-edit-btn" name="edit" [size]="14" [tooltip]="item.editTooltip ?? 'Edit'" (iconClick)="item.editAction!()" />
|
|
31666
|
-
}
|
|
31667
|
-
@if (item.deleteAction) {
|
|
31668
|
-
<ui-icon class="pil-edit-btn" name="delete" variant="danger" [size]="14" [tooltip]="item.deleteTooltip ?? 'Delete'" (iconClick)="item.deleteAction!()" />
|
|
31669
|
-
}
|
|
31670
|
+
<ng-container *ngTemplateOutlet="valueTpl; context: { $implicit: item }" />
|
|
31670
31671
|
</span>
|
|
31671
31672
|
</div>
|
|
31672
31673
|
}
|
|
31673
31674
|
}
|
|
31674
31675
|
</div>
|
|
31675
31676
|
}
|
|
31677
|
+
<ng-template #valueTpl let-item>
|
|
31678
|
+
@if (item.badges) {
|
|
31679
|
+
<span class="pil-badges">
|
|
31680
|
+
@for (b of item.badges; track $index) {
|
|
31681
|
+
<ui-badge [label]="b.label" [variant]="b.variant" />
|
|
31682
|
+
}
|
|
31683
|
+
</span>
|
|
31684
|
+
} @else if (item.badge) {
|
|
31685
|
+
<ui-badge [label]="item.badge.label" [variant]="item.badge.variant" />
|
|
31686
|
+
} @else if (hrefOf(item); as h) {
|
|
31687
|
+
<a class="pil-link pil-link--href" [attr.href]="h" [attr.target]="isWeb(h) ? '_blank' : null" [attr.rel]="isWeb(h) ? 'noopener noreferrer' : null">{{ textOf(item) }}</a>
|
|
31688
|
+
} @else if (item.link && item.value && item.linkIcon) {
|
|
31689
|
+
<a class="pil-link-icon" [routerLink]="item.link">
|
|
31690
|
+
{{ item.value }}
|
|
31691
|
+
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" aria-hidden="true" focusable="false"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg>
|
|
31692
|
+
</a>
|
|
31693
|
+
} @else if (item.link && item.value) {
|
|
31694
|
+
<a class="pil-link" [routerLink]="item.link">{{ item.value }}</a>
|
|
31695
|
+
} @else {
|
|
31696
|
+
<span [class.pil-muted]="item.muted" [class.pil-danger]="item.danger" [class.pil-multiline]="item.multiline">{{ valueOf(item) }}</span>
|
|
31697
|
+
}
|
|
31698
|
+
@if (item.editAction) {
|
|
31699
|
+
<ui-icon class="pil-edit-btn" name="edit" [size]="14" [tooltip]="item.editTooltip ?? 'Edit'" (iconClick)="item.editAction()" />
|
|
31700
|
+
}
|
|
31701
|
+
@if (item.deleteAction) {
|
|
31702
|
+
<ui-icon class="pil-edit-btn" name="delete" variant="danger" [size]="14" [tooltip]="item.deleteTooltip ?? 'Delete'" (iconClick)="item.deleteAction()" />
|
|
31703
|
+
}
|
|
31704
|
+
</ng-template>
|
|
31676
31705
|
`,
|
|
31677
31706
|
isInline: true,
|
|
31678
|
-
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:#
|
|
31707
|
+
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"],
|
|
31679
31708
|
dependencies: [
|
|
31709
|
+
{
|
|
31710
|
+
kind: "directive",
|
|
31711
|
+
type: NgTemplateOutlet,
|
|
31712
|
+
selector: "[ngTemplateOutlet]",
|
|
31713
|
+
inputs: [
|
|
31714
|
+
"ngTemplateOutletContext",
|
|
31715
|
+
"ngTemplateOutlet",
|
|
31716
|
+
"ngTemplateOutletInjector"
|
|
31717
|
+
]
|
|
31718
|
+
},
|
|
31680
31719
|
{
|
|
31681
31720
|
kind: "component",
|
|
31682
31721
|
type: BadgeComponent,
|
|
@@ -31775,6 +31814,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
31775
31814
|
standalone: true,
|
|
31776
31815
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
31777
31816
|
imports: [
|
|
31817
|
+
NgTemplateOutlet,
|
|
31778
31818
|
BadgeComponent,
|
|
31779
31819
|
ButtonComponent,
|
|
31780
31820
|
RouterLink,
|
|
@@ -31783,16 +31823,16 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
31783
31823
|
],
|
|
31784
31824
|
host: { "[class.pil-fill]": "fill()" },
|
|
31785
31825
|
template: `
|
|
31786
|
-
@for (section of displaySections(); track
|
|
31826
|
+
@for (section of displaySections(); track $index) {
|
|
31787
31827
|
<div class="pil-section">
|
|
31788
|
-
@if (section.title || section.headerAction) {
|
|
31828
|
+
@if (section.title || section.headerAction || section.headerLink) {
|
|
31789
31829
|
<div class="pil-section-label">
|
|
31790
31830
|
<span>{{ section.title }}</span>
|
|
31791
31831
|
@if (section.headerLink) {
|
|
31792
31832
|
<a class="pil-header-link" [routerLink]="section.headerLink.url">{{ section.headerLink.label }}</a>
|
|
31793
31833
|
}
|
|
31794
31834
|
@if (section.headerAction; as ha) {
|
|
31795
|
-
<ui-button class="pil-header-action" variant="secondary" size="xs" [disabled]="!!ha.disabled" [ariaLabel]="ha.ariaLabel ?? ha.label" (click)="ha
|
|
31835
|
+
<ui-button class="pil-header-action" variant="secondary" size="xs" [disabled]="!!ha.disabled" [ariaLabel]="ha.ariaLabel ?? ha.label" (click)="runHeaderAction(ha)">
|
|
31796
31836
|
@if (ha.icon) {
|
|
31797
31837
|
<svg class="pil-header-action-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" focusable="false"><path [attr.d]="ha.icon"/></svg>
|
|
31798
31838
|
}{{ ha.label }}</ui-button>
|
|
@@ -31803,60 +31843,57 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
31803
31843
|
<ui-empty-state message="No information available." />
|
|
31804
31844
|
} @else if (section.columns === 2) {
|
|
31805
31845
|
<div class="pil-grid-2">
|
|
31806
|
-
@for (item of visibleItems(section); track
|
|
31846
|
+
@for (item of visibleItems(section); track $index) {
|
|
31807
31847
|
<div class="pil-grid-cell" [class.pil-strong]="item.emphasis">
|
|
31808
31848
|
<span class="pil-label">{{ item.label }}{{ labelColon() ? ':' : '' }}</span>{{ labelColon() ? ' ' : '' }}
|
|
31809
31849
|
<span class="pil-value pil-value--block">
|
|
31810
|
-
|
|
31811
|
-
<ui-badge [label]="item.badge.label" [variant]="item.badge.variant" />
|
|
31812
|
-
} @else if (hrefOf(item); as h) {
|
|
31813
|
-
<a class="pil-link pil-link--href" [attr.href]="h" [attr.target]="isWeb(h) ? '_blank' : null" [attr.rel]="isWeb(h) ? 'noopener noreferrer' : null">{{ textOf(item) }}</a>
|
|
31814
|
-
} @else {
|
|
31815
|
-
<span [class.pil-muted]="item.muted" [class.pil-danger]="item.danger" [class.pil-multiline]="item.multiline">{{ item.value || '—' }}</span>
|
|
31816
|
-
}
|
|
31850
|
+
<ng-container *ngTemplateOutlet="valueTpl; context: { $implicit: item }" />
|
|
31817
31851
|
</span>
|
|
31818
31852
|
</div>
|
|
31819
31853
|
}
|
|
31820
31854
|
</div>
|
|
31821
31855
|
} @else {
|
|
31822
|
-
@for (item of visibleItems(section); track
|
|
31856
|
+
@for (item of visibleItems(section); track $index) {
|
|
31823
31857
|
<div class="pil-row" [class.pil-row--inline]="labelColon()" [class.pil-strong]="item.emphasis">
|
|
31824
31858
|
<span class="pil-label">{{ item.label }}{{ labelColon() ? ':' : '' }}</span>{{ labelColon() ? ' ' : '' }}
|
|
31825
31859
|
<span class="pil-value">
|
|
31826
|
-
|
|
31827
|
-
<span class="pil-badges">
|
|
31828
|
-
@for (b of item.badges; track b.label) {
|
|
31829
|
-
<ui-badge [label]="b.label" [variant]="b.variant" />
|
|
31830
|
-
}
|
|
31831
|
-
</span>
|
|
31832
|
-
} @else if (item.badge) {
|
|
31833
|
-
<ui-badge [label]="item.badge.label" [variant]="item.badge.variant" />
|
|
31834
|
-
} @else if (hrefOf(item); as h) {
|
|
31835
|
-
<a class="pil-link pil-link--href" [attr.href]="h" [attr.target]="isWeb(h) ? '_blank' : null" [attr.rel]="isWeb(h) ? 'noopener noreferrer' : null">{{ textOf(item) }}</a>
|
|
31836
|
-
} @else if (item.link && item.value && item.linkIcon) {
|
|
31837
|
-
<a class="pil-link-icon" [routerLink]="item.link">
|
|
31838
|
-
{{ item.value }}
|
|
31839
|
-
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" aria-hidden="true"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg>
|
|
31840
|
-
</a>
|
|
31841
|
-
} @else if (item.link && item.value) {
|
|
31842
|
-
<a class="pil-link" [routerLink]="item.link">{{ item.value }}</a>
|
|
31843
|
-
} @else {
|
|
31844
|
-
<span [class.pil-muted]="item.muted" [class.pil-danger]="item.danger" [class.pil-multiline]="item.multiline">{{ item.value || '—' }}</span>
|
|
31845
|
-
}
|
|
31846
|
-
@if (item.editAction) {
|
|
31847
|
-
<ui-icon class="pil-edit-btn" name="edit" [size]="14" [tooltip]="item.editTooltip ?? 'Edit'" (iconClick)="item.editAction!()" />
|
|
31848
|
-
}
|
|
31849
|
-
@if (item.deleteAction) {
|
|
31850
|
-
<ui-icon class="pil-edit-btn" name="delete" variant="danger" [size]="14" [tooltip]="item.deleteTooltip ?? 'Delete'" (iconClick)="item.deleteAction!()" />
|
|
31851
|
-
}
|
|
31860
|
+
<ng-container *ngTemplateOutlet="valueTpl; context: { $implicit: item }" />
|
|
31852
31861
|
</span>
|
|
31853
31862
|
</div>
|
|
31854
31863
|
}
|
|
31855
31864
|
}
|
|
31856
31865
|
</div>
|
|
31857
31866
|
}
|
|
31867
|
+
<ng-template #valueTpl let-item>
|
|
31868
|
+
@if (item.badges) {
|
|
31869
|
+
<span class="pil-badges">
|
|
31870
|
+
@for (b of item.badges; track $index) {
|
|
31871
|
+
<ui-badge [label]="b.label" [variant]="b.variant" />
|
|
31872
|
+
}
|
|
31873
|
+
</span>
|
|
31874
|
+
} @else if (item.badge) {
|
|
31875
|
+
<ui-badge [label]="item.badge.label" [variant]="item.badge.variant" />
|
|
31876
|
+
} @else if (hrefOf(item); as h) {
|
|
31877
|
+
<a class="pil-link pil-link--href" [attr.href]="h" [attr.target]="isWeb(h) ? '_blank' : null" [attr.rel]="isWeb(h) ? 'noopener noreferrer' : null">{{ textOf(item) }}</a>
|
|
31878
|
+
} @else if (item.link && item.value && item.linkIcon) {
|
|
31879
|
+
<a class="pil-link-icon" [routerLink]="item.link">
|
|
31880
|
+
{{ item.value }}
|
|
31881
|
+
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" aria-hidden="true" focusable="false"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg>
|
|
31882
|
+
</a>
|
|
31883
|
+
} @else if (item.link && item.value) {
|
|
31884
|
+
<a class="pil-link" [routerLink]="item.link">{{ item.value }}</a>
|
|
31885
|
+
} @else {
|
|
31886
|
+
<span [class.pil-muted]="item.muted" [class.pil-danger]="item.danger" [class.pil-multiline]="item.multiline">{{ valueOf(item) }}</span>
|
|
31887
|
+
}
|
|
31888
|
+
@if (item.editAction) {
|
|
31889
|
+
<ui-icon class="pil-edit-btn" name="edit" [size]="14" [tooltip]="item.editTooltip ?? 'Edit'" (iconClick)="item.editAction()" />
|
|
31890
|
+
}
|
|
31891
|
+
@if (item.deleteAction) {
|
|
31892
|
+
<ui-icon class="pil-edit-btn" name="delete" variant="danger" [size]="14" [tooltip]="item.deleteTooltip ?? 'Delete'" (iconClick)="item.deleteAction()" />
|
|
31893
|
+
}
|
|
31894
|
+
</ng-template>
|
|
31858
31895
|
`,
|
|
31859
|
-
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:#
|
|
31896
|
+
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"]
|
|
31860
31897
|
}]
|
|
31861
31898
|
}],
|
|
31862
31899
|
propDecorators: {
|
|
@@ -32280,6 +32317,7 @@ var AppShellComponent = class AppShellComponent {
|
|
|
32280
32317
|
this.router = inject(Router);
|
|
32281
32318
|
this.navGroups = input([], ...ngDevMode ? [{ debugName: "navGroups" }] : /* istanbul ignore next */ []);
|
|
32282
32319
|
this.pageTitle = input("", ...ngDevMode ? [{ debugName: "pageTitle" }] : /* istanbul ignore next */ []);
|
|
32320
|
+
this.showToast = input(false, ...ngDevMode ? [{ debugName: "showToast" }] : /* istanbul ignore next */ []);
|
|
32283
32321
|
this.appName = input("App", ...ngDevMode ? [{ debugName: "appName" }] : /* istanbul ignore next */ []);
|
|
32284
32322
|
this.user = input(null, ...ngDevMode ? [{ debugName: "user" }] : /* istanbul ignore next */ []);
|
|
32285
32323
|
this.readOnly = input(false, ...ngDevMode ? [{ debugName: "readOnly" }] : /* istanbul ignore next */ []);
|
|
@@ -32289,8 +32327,11 @@ var AppShellComponent = class AppShellComponent {
|
|
|
32289
32327
|
this.persistKey = input("", ...ngDevMode ? [{ debugName: "persistKey" }] : /* istanbul ignore next */ []);
|
|
32290
32328
|
this.logoutClick = output();
|
|
32291
32329
|
this._sidebarOpen = signal(false, ...ngDevMode ? [{ debugName: "_sidebarOpen" }] : /* istanbul ignore next */ []);
|
|
32330
|
+
this._routeTitle = signal("", ...ngDevMode ? [{ debugName: "_routeTitle" }] : /* istanbul ignore next */ []);
|
|
32331
|
+
this._title = computed(() => this.pageTitle() || this._routeTitle(), ...ngDevMode ? [{ debugName: "_title" }] : /* istanbul ignore next */ []);
|
|
32292
32332
|
this._collapsed = signal(AppShellComponent._loadCollapsed(), ...ngDevMode ? [{ debugName: "_collapsed" }] : /* istanbul ignore next */ []);
|
|
32293
|
-
this.
|
|
32333
|
+
this._drawerLayout = signal(false, ...ngDevMode ? [{ debugName: "_drawerLayout" }] : /* istanbul ignore next */ []);
|
|
32334
|
+
this._isRail = computed(() => this.collapsible() && this._collapsed() && !this._drawerLayout(), ...ngDevMode ? [{ debugName: "_isRail" }] : /* istanbul ignore next */ []);
|
|
32294
32335
|
this._collapsedGroups = signal({}, ...ngDevMode ? [{ debugName: "_collapsedGroups" }] : /* istanbul ignore next */ []);
|
|
32295
32336
|
this._visibleGroups = computed(() => this.navGroups().filter((g) => g.visible !== false), ...ngDevMode ? [{ debugName: "_visibleGroups" }] : /* istanbul ignore next */ []);
|
|
32296
32337
|
this._userInitials = computed(() => {
|
|
@@ -32302,6 +32343,13 @@ var AppShellComponent = class AppShellComponent {
|
|
|
32302
32343
|
return [u?.firstName, u?.lastName].filter(Boolean).join(" ");
|
|
32303
32344
|
}, ...ngDevMode ? [{ debugName: "_userName" }] : /* istanbul ignore next */ []);
|
|
32304
32345
|
this._iconCache = /* @__PURE__ */ new Map();
|
|
32346
|
+
this._host = inject(ElementRef);
|
|
32347
|
+
this._injector = inject(Injector);
|
|
32348
|
+
this._document = inject(DOCUMENT, { optional: true });
|
|
32349
|
+
this._onDrawerMqChange = (e) => {
|
|
32350
|
+
this._drawerLayout.set(e.matches);
|
|
32351
|
+
if (!e.matches) this._sidebarOpen.set(false);
|
|
32352
|
+
};
|
|
32305
32353
|
}
|
|
32306
32354
|
_safeIcon(svg) {
|
|
32307
32355
|
let safe = this._iconCache.get(svg);
|
|
@@ -32314,8 +32362,11 @@ var AppShellComponent = class AppShellComponent {
|
|
|
32314
32362
|
_visibleLinks(group) {
|
|
32315
32363
|
return group.links.filter((l) => l.visible !== false);
|
|
32316
32364
|
}
|
|
32365
|
+
_canCollapseGroups() {
|
|
32366
|
+
return this._visibleGroups().length > 1;
|
|
32367
|
+
}
|
|
32317
32368
|
_isCollapsed(key) {
|
|
32318
|
-
return !!this._collapsedGroups()[key];
|
|
32369
|
+
return this._canCollapseGroups() && !!this._collapsedGroups()[key];
|
|
32319
32370
|
}
|
|
32320
32371
|
toggleGroup(key) {
|
|
32321
32372
|
const collapsed = !this._collapsedGroups()[key];
|
|
@@ -32364,11 +32415,83 @@ var AppShellComponent = class AppShellComponent {
|
|
|
32364
32415
|
return false;
|
|
32365
32416
|
}
|
|
32366
32417
|
}
|
|
32418
|
+
static {
|
|
32419
|
+
this._DRAWER_MQ = "not all and (min-width: 1025px)";
|
|
32420
|
+
}
|
|
32421
|
+
static {
|
|
32422
|
+
this._FOCUSABLE = "a[href]:not([tabindex=\"-1\"]), button:not([disabled]):not([tabindex=\"-1\"]), input:not([disabled]):not([type=\"hidden\"]):not([tabindex=\"-1\"]), select:not([disabled]):not([tabindex=\"-1\"]), textarea:not([disabled]):not([tabindex=\"-1\"]), [tabindex]:not([tabindex=\"-1\"]), summary:not([tabindex=\"-1\"]), [contenteditable]:not([contenteditable=\"false\"]):not([tabindex=\"-1\"]), iframe:not([tabindex=\"-1\"]), audio[controls]:not([tabindex=\"-1\"]), video[controls]:not([tabindex=\"-1\"])";
|
|
32423
|
+
}
|
|
32424
|
+
_sidebarFocusables() {
|
|
32425
|
+
const aside = this._host.nativeElement.querySelector(".sidebar");
|
|
32426
|
+
return aside ? Array.from(aside.querySelectorAll(AppShellComponent._FOCUSABLE)).filter((el) => !el.hidden && el.getClientRects().length > 0) : [];
|
|
32427
|
+
}
|
|
32428
|
+
_hamburger() {
|
|
32429
|
+
return this._host.nativeElement.querySelector(".hamburger");
|
|
32430
|
+
}
|
|
32367
32431
|
toggleSidebar() {
|
|
32368
|
-
this._sidebarOpen
|
|
32432
|
+
if (this._sidebarOpen()) this.closeSidebar(true);
|
|
32433
|
+
else this.openSidebar();
|
|
32434
|
+
}
|
|
32435
|
+
openSidebar() {
|
|
32436
|
+
if (!this._drawerLayout()) return;
|
|
32437
|
+
this._sidebarOpen.set(true);
|
|
32438
|
+
afterNextRender(() => this._sidebarFocusables()[0]?.focus(), { injector: this._injector });
|
|
32369
32439
|
}
|
|
32370
|
-
closeSidebar() {
|
|
32440
|
+
closeSidebar(returnFocus = false) {
|
|
32441
|
+
const wasOpen = this._sidebarOpen();
|
|
32371
32442
|
this._sidebarOpen.set(false);
|
|
32443
|
+
if (!wasOpen) return;
|
|
32444
|
+
const active = this._document?.activeElement ?? null;
|
|
32445
|
+
const focusInSidebar = !!active && !!this._host.nativeElement.querySelector(".sidebar")?.contains(active);
|
|
32446
|
+
if (returnFocus) this._hamburger()?.focus();
|
|
32447
|
+
else if (focusInSidebar) this._host.nativeElement.querySelector("#main-content")?.focus();
|
|
32448
|
+
}
|
|
32449
|
+
onShellKeydown(e) {
|
|
32450
|
+
if (e.defaultPrevented || !this._sidebarOpen() || !this._drawerLayout()) return;
|
|
32451
|
+
if (e.key === "Escape") {
|
|
32452
|
+
e.preventDefault();
|
|
32453
|
+
this.closeSidebar(true);
|
|
32454
|
+
return;
|
|
32455
|
+
}
|
|
32456
|
+
if (e.key !== "Tab" || e.ctrlKey || e.altKey || e.metaKey) return;
|
|
32457
|
+
const items = this._sidebarFocusables();
|
|
32458
|
+
if (!items.length) return;
|
|
32459
|
+
const first = items[0];
|
|
32460
|
+
const last = items[items.length - 1];
|
|
32461
|
+
const active = this._document?.activeElement ?? null;
|
|
32462
|
+
const owner = active ? items.find((el) => el === active || el.contains(active)) : void 0;
|
|
32463
|
+
if (owner) {
|
|
32464
|
+
if (e.shiftKey && owner === first) {
|
|
32465
|
+
e.preventDefault();
|
|
32466
|
+
last.focus();
|
|
32467
|
+
} else if (!e.shiftKey && owner === last) {
|
|
32468
|
+
e.preventDefault();
|
|
32469
|
+
first.focus();
|
|
32470
|
+
}
|
|
32471
|
+
return;
|
|
32472
|
+
}
|
|
32473
|
+
const host = active && active.shadowRoot && this._host.nativeElement.querySelector(".sidebar")?.contains(active) ? active : null;
|
|
32474
|
+
if (host) {
|
|
32475
|
+
const inner = Array.from(host.shadowRoot.querySelectorAll(AppShellComponent._FOCUSABLE)).filter((el) => !el.hidden && el.getClientRects().length > 0);
|
|
32476
|
+
const innerActive = host.shadowRoot.activeElement;
|
|
32477
|
+
const atInnerEdge = !innerActive || !inner.length || innerActive === (e.shiftKey ? inner[0] : inner[inner.length - 1]);
|
|
32478
|
+
const afterAll = items.every((el) => !!(el.compareDocumentPosition(host) & Node.DOCUMENT_POSITION_FOLLOWING));
|
|
32479
|
+
const beforeAll = items.every((el) => !!(el.compareDocumentPosition(host) & Node.DOCUMENT_POSITION_PRECEDING));
|
|
32480
|
+
if (atInnerEdge && !e.shiftKey && afterAll) {
|
|
32481
|
+
e.preventDefault();
|
|
32482
|
+
first.focus();
|
|
32483
|
+
} else if (atInnerEdge && e.shiftKey && beforeAll) {
|
|
32484
|
+
e.preventDefault();
|
|
32485
|
+
last.focus();
|
|
32486
|
+
}
|
|
32487
|
+
return;
|
|
32488
|
+
}
|
|
32489
|
+
e.preventDefault();
|
|
32490
|
+
(e.shiftKey ? last : first).focus();
|
|
32491
|
+
}
|
|
32492
|
+
skipToContent(e) {
|
|
32493
|
+
e.preventDefault();
|
|
32494
|
+
this._host.nativeElement.querySelector("#main-content")?.focus();
|
|
32372
32495
|
}
|
|
32373
32496
|
ngOnInit() {
|
|
32374
32497
|
const initial = {};
|
|
@@ -32380,13 +32503,31 @@ var AppShellComponent = class AppShellComponent {
|
|
|
32380
32503
|
...this._readSavedGroups()
|
|
32381
32504
|
});
|
|
32382
32505
|
this._routerSub = this.router.events.pipe(filter((e) => e instanceof NavigationEnd)).subscribe((e) => {
|
|
32383
|
-
this.
|
|
32506
|
+
this.closeSidebar();
|
|
32384
32507
|
this._expandActiveGroup(e.urlAfterRedirects);
|
|
32508
|
+
this._routeTitle.set(this._titleOfRoute());
|
|
32385
32509
|
});
|
|
32510
|
+
if (typeof matchMedia === "function") {
|
|
32511
|
+
this._drawerMq = matchMedia(AppShellComponent._DRAWER_MQ);
|
|
32512
|
+
this._drawerLayout.set(!!this._drawerMq?.matches);
|
|
32513
|
+
this._drawerMq?.addEventListener?.("change", this._onDrawerMqChange);
|
|
32514
|
+
}
|
|
32386
32515
|
this._expandActiveGroup(this.router.url);
|
|
32516
|
+
this._routeTitle.set(this._titleOfRoute());
|
|
32517
|
+
}
|
|
32518
|
+
_titleOfRoute() {
|
|
32519
|
+
let route = this.router.routerState?.snapshot?.root ?? null;
|
|
32520
|
+
let title = "";
|
|
32521
|
+
while (route) {
|
|
32522
|
+
const t = route.data?.["pageTitle"];
|
|
32523
|
+
if (typeof t === "string" && t) title = t;
|
|
32524
|
+
route = route.firstChild;
|
|
32525
|
+
}
|
|
32526
|
+
return title;
|
|
32387
32527
|
}
|
|
32388
32528
|
ngOnDestroy() {
|
|
32389
32529
|
this._routerSub?.unsubscribe();
|
|
32530
|
+
this._drawerMq?.removeEventListener?.("change", this._onDrawerMqChange);
|
|
32390
32531
|
this._iconCache.clear();
|
|
32391
32532
|
}
|
|
32392
32533
|
_expandActiveGroup(url) {
|
|
@@ -32435,6 +32576,13 @@ var AppShellComponent = class AppShellComponent {
|
|
|
32435
32576
|
isRequired: false,
|
|
32436
32577
|
transformFunction: null
|
|
32437
32578
|
},
|
|
32579
|
+
showToast: {
|
|
32580
|
+
classPropertyName: "showToast",
|
|
32581
|
+
publicName: "showToast",
|
|
32582
|
+
isSignal: true,
|
|
32583
|
+
isRequired: false,
|
|
32584
|
+
transformFunction: null
|
|
32585
|
+
},
|
|
32438
32586
|
appName: {
|
|
32439
32587
|
classPropertyName: "appName",
|
|
32440
32588
|
publicName: "appName",
|
|
@@ -32492,11 +32640,15 @@ var AppShellComponent = class AppShellComponent {
|
|
|
32492
32640
|
class="shell"
|
|
32493
32641
|
[class.sidebar-open]="_sidebarOpen()"
|
|
32494
32642
|
[class.collapsed]="_isRail()"
|
|
32643
|
+
(keydown)="onShellKeydown($event)"
|
|
32495
32644
|
[style.--shell-bg]="backgroundColor() || null"
|
|
32496
32645
|
[style.--shell-text]="textColor() || null"
|
|
32497
32646
|
>
|
|
32498
32647
|
<ui-shell-projected-styles />
|
|
32499
32648
|
|
|
32649
|
+
<!-- Keyboard users jump past the navigation straight to the page content -->
|
|
32650
|
+
<a class="skip-link" href="#main-content" (click)="skipToContent($event)">Skip to main content</a>
|
|
32651
|
+
|
|
32500
32652
|
<!-- Mobile backdrop -->
|
|
32501
32653
|
<div
|
|
32502
32654
|
class="sidebar-backdrop"
|
|
@@ -32543,6 +32695,7 @@ var AppShellComponent = class AppShellComponent {
|
|
|
32543
32695
|
@for (group of _visibleGroups(); track group.key) {
|
|
32544
32696
|
<div class="nav-group">
|
|
32545
32697
|
@if (_isRail()) { <div class="rail-divider" aria-hidden="true"></div> }
|
|
32698
|
+
@if (_canCollapseGroups()) {
|
|
32546
32699
|
<button
|
|
32547
32700
|
class="nav-group-label"
|
|
32548
32701
|
type="button"
|
|
@@ -32561,38 +32714,44 @@ var AppShellComponent = class AppShellComponent {
|
|
|
32561
32714
|
</svg>
|
|
32562
32715
|
{{ group.label }}
|
|
32563
32716
|
</button>
|
|
32564
|
-
|
|
32565
|
-
|
|
32566
|
-
|
|
32567
|
-
@for (link of _visibleLinks(group); track link.route) {
|
|
32568
|
-
<a
|
|
32569
|
-
role="listitem"
|
|
32570
|
-
[routerLink]="link.route"
|
|
32571
|
-
routerLinkActive="active"
|
|
32572
|
-
[routerLinkActiveOptions]="{ exact: !!link.exact }"
|
|
32573
|
-
#rla="routerLinkActive"
|
|
32574
|
-
[attr.aria-current]="rla.isActive ? 'page' : null"
|
|
32575
|
-
[attr.title]="_isRail() ? link.label : null"
|
|
32576
|
-
[attr.aria-label]="_isRail() ? link.label : null"
|
|
32577
|
-
>
|
|
32578
|
-
@if (link.icon) {
|
|
32579
|
-
<span
|
|
32580
|
-
class="nav-icon"
|
|
32581
|
-
[innerHTML]="_safeIcon(link.icon)"
|
|
32582
|
-
aria-hidden="true"
|
|
32583
|
-
></span>
|
|
32584
|
-
}
|
|
32585
|
-
<span class="nav-label">{{ link.label }}</span>
|
|
32586
|
-
@if (link.badge && link.badge > 0) {
|
|
32587
|
-
<span
|
|
32588
|
-
class="nav-badge"
|
|
32589
|
-
[attr.aria-label]="link.badge + ' unread'"
|
|
32590
|
-
>{{ link.badge }}</span>
|
|
32591
|
-
}
|
|
32592
|
-
</a>
|
|
32593
|
-
}
|
|
32594
|
-
</div>
|
|
32717
|
+
} @else {
|
|
32718
|
+
<!-- A single group can't be collapsed: hiding it would remove the whole navigation -->
|
|
32719
|
+
<div class="nav-group-label nav-group-label--static" [id]="'navg-label-' + group.key">{{ group.label }}</div>
|
|
32595
32720
|
}
|
|
32721
|
+
|
|
32722
|
+
<!-- Always rendered so the toggle's aria-controls resolves; [hidden] (plus display:none in the CSS) removes the links of a collapsed group from view and from the tab order -->
|
|
32723
|
+
<div
|
|
32724
|
+
class="nav-group-links"
|
|
32725
|
+
[id]="'navg-' + group.key"
|
|
32726
|
+
[hidden]="!_isRail() && _isCollapsed(group.key)"
|
|
32727
|
+
>
|
|
32728
|
+
@for (link of _visibleLinks(group); track link.route) {
|
|
32729
|
+
<a
|
|
32730
|
+
[routerLink]="link.route"
|
|
32731
|
+
routerLinkActive="active"
|
|
32732
|
+
[routerLinkActiveOptions]="{ exact: !!link.exact }"
|
|
32733
|
+
#rla="routerLinkActive"
|
|
32734
|
+
[attr.aria-current]="rla.isActive ? 'page' : null"
|
|
32735
|
+
[attr.title]="_isRail() ? link.label : null"
|
|
32736
|
+
[attr.aria-label]="_isRail() ? link.label : null"
|
|
32737
|
+
>
|
|
32738
|
+
@if (link.icon) {
|
|
32739
|
+
<span
|
|
32740
|
+
class="nav-icon"
|
|
32741
|
+
[innerHTML]="_safeIcon(link.icon)"
|
|
32742
|
+
aria-hidden="true"
|
|
32743
|
+
></span>
|
|
32744
|
+
}
|
|
32745
|
+
<span class="nav-label">{{ link.label }}</span>
|
|
32746
|
+
@if (link.badge && link.badge > 0) {
|
|
32747
|
+
<span
|
|
32748
|
+
class="nav-badge"
|
|
32749
|
+
[attr.aria-label]="link.badge + ' unread'"
|
|
32750
|
+
>{{ link.badge }}</span>
|
|
32751
|
+
}
|
|
32752
|
+
</a>
|
|
32753
|
+
}
|
|
32754
|
+
</div>
|
|
32596
32755
|
</div>
|
|
32597
32756
|
}
|
|
32598
32757
|
</nav>
|
|
@@ -32649,8 +32808,8 @@ var AppShellComponent = class AppShellComponent {
|
|
|
32649
32808
|
</svg>
|
|
32650
32809
|
</button>
|
|
32651
32810
|
|
|
32652
|
-
@if (
|
|
32653
|
-
<h1 class="page-title" id="shell-page-title" tabindex="-1">{{
|
|
32811
|
+
@if (_title()) {
|
|
32812
|
+
<h1 class="page-title" id="shell-page-title" tabindex="-1">{{ _title() }}</h1>
|
|
32654
32813
|
}
|
|
32655
32814
|
|
|
32656
32815
|
@if (readOnly()) {
|
|
@@ -32674,7 +32833,7 @@ var AppShellComponent = class AppShellComponent {
|
|
|
32674
32833
|
<ng-content select="[shell-banners]" />
|
|
32675
32834
|
|
|
32676
32835
|
<!-- Page content -->
|
|
32677
|
-
<main class="content" id="main-content" role="main" tabindex="-1" [attr.aria-labelledby]="
|
|
32836
|
+
<main class="content" id="main-content" role="main" tabindex="-1" [attr.aria-labelledby]="_title() ? 'shell-page-title' : null">
|
|
32678
32837
|
<ng-content />
|
|
32679
32838
|
</main>
|
|
32680
32839
|
</div>
|
|
@@ -32682,9 +32841,13 @@ var AppShellComponent = class AppShellComponent {
|
|
|
32682
32841
|
|
|
32683
32842
|
<!-- Global confirm overlay — position:fixed so it overlays without affecting layout -->
|
|
32684
32843
|
<ui-confirm-outlet />
|
|
32844
|
+
|
|
32845
|
+
@if (showToast()) {
|
|
32846
|
+
<ui-toast />
|
|
32847
|
+
}
|
|
32685
32848
|
`,
|
|
32686
32849
|
isInline: true,
|
|
32687
|
-
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-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{--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}@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);box-shadow:none}.shell.sidebar-open .sidebar{transform:translate(0);box-shadow:4px 0 32px #0000004d}.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"],
|
|
32850
|
+
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"],
|
|
32688
32851
|
dependencies: [
|
|
32689
32852
|
{
|
|
32690
32853
|
kind: "directive",
|
|
@@ -32722,6 +32885,12 @@ var AppShellComponent = class AppShellComponent {
|
|
|
32722
32885
|
type: ConfirmOutletComponent,
|
|
32723
32886
|
selector: "ui-confirm-outlet"
|
|
32724
32887
|
},
|
|
32888
|
+
{
|
|
32889
|
+
kind: "component",
|
|
32890
|
+
type: ToastComponent,
|
|
32891
|
+
selector: "ui-toast",
|
|
32892
|
+
inputs: ["dismissible", "persistentLiveRegion"]
|
|
32893
|
+
},
|
|
32725
32894
|
{
|
|
32726
32895
|
kind: "component",
|
|
32727
32896
|
type: ShellProjectedStylesComponent,
|
|
@@ -32747,6 +32916,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
32747
32916
|
RouterLink,
|
|
32748
32917
|
RouterLinkActive,
|
|
32749
32918
|
ConfirmOutletComponent,
|
|
32919
|
+
ToastComponent,
|
|
32750
32920
|
ShellProjectedStylesComponent
|
|
32751
32921
|
],
|
|
32752
32922
|
template: `
|
|
@@ -32754,11 +32924,15 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
32754
32924
|
class="shell"
|
|
32755
32925
|
[class.sidebar-open]="_sidebarOpen()"
|
|
32756
32926
|
[class.collapsed]="_isRail()"
|
|
32927
|
+
(keydown)="onShellKeydown($event)"
|
|
32757
32928
|
[style.--shell-bg]="backgroundColor() || null"
|
|
32758
32929
|
[style.--shell-text]="textColor() || null"
|
|
32759
32930
|
>
|
|
32760
32931
|
<ui-shell-projected-styles />
|
|
32761
32932
|
|
|
32933
|
+
<!-- Keyboard users jump past the navigation straight to the page content -->
|
|
32934
|
+
<a class="skip-link" href="#main-content" (click)="skipToContent($event)">Skip to main content</a>
|
|
32935
|
+
|
|
32762
32936
|
<!-- Mobile backdrop -->
|
|
32763
32937
|
<div
|
|
32764
32938
|
class="sidebar-backdrop"
|
|
@@ -32805,6 +32979,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
32805
32979
|
@for (group of _visibleGroups(); track group.key) {
|
|
32806
32980
|
<div class="nav-group">
|
|
32807
32981
|
@if (_isRail()) { <div class="rail-divider" aria-hidden="true"></div> }
|
|
32982
|
+
@if (_canCollapseGroups()) {
|
|
32808
32983
|
<button
|
|
32809
32984
|
class="nav-group-label"
|
|
32810
32985
|
type="button"
|
|
@@ -32823,38 +32998,44 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
32823
32998
|
</svg>
|
|
32824
32999
|
{{ group.label }}
|
|
32825
33000
|
</button>
|
|
32826
|
-
|
|
32827
|
-
|
|
32828
|
-
|
|
32829
|
-
@for (link of _visibleLinks(group); track link.route) {
|
|
32830
|
-
<a
|
|
32831
|
-
role="listitem"
|
|
32832
|
-
[routerLink]="link.route"
|
|
32833
|
-
routerLinkActive="active"
|
|
32834
|
-
[routerLinkActiveOptions]="{ exact: !!link.exact }"
|
|
32835
|
-
#rla="routerLinkActive"
|
|
32836
|
-
[attr.aria-current]="rla.isActive ? 'page' : null"
|
|
32837
|
-
[attr.title]="_isRail() ? link.label : null"
|
|
32838
|
-
[attr.aria-label]="_isRail() ? link.label : null"
|
|
32839
|
-
>
|
|
32840
|
-
@if (link.icon) {
|
|
32841
|
-
<span
|
|
32842
|
-
class="nav-icon"
|
|
32843
|
-
[innerHTML]="_safeIcon(link.icon)"
|
|
32844
|
-
aria-hidden="true"
|
|
32845
|
-
></span>
|
|
32846
|
-
}
|
|
32847
|
-
<span class="nav-label">{{ link.label }}</span>
|
|
32848
|
-
@if (link.badge && link.badge > 0) {
|
|
32849
|
-
<span
|
|
32850
|
-
class="nav-badge"
|
|
32851
|
-
[attr.aria-label]="link.badge + ' unread'"
|
|
32852
|
-
>{{ link.badge }}</span>
|
|
32853
|
-
}
|
|
32854
|
-
</a>
|
|
32855
|
-
}
|
|
32856
|
-
</div>
|
|
33001
|
+
} @else {
|
|
33002
|
+
<!-- A single group can't be collapsed: hiding it would remove the whole navigation -->
|
|
33003
|
+
<div class="nav-group-label nav-group-label--static" [id]="'navg-label-' + group.key">{{ group.label }}</div>
|
|
32857
33004
|
}
|
|
33005
|
+
|
|
33006
|
+
<!-- Always rendered so the toggle's aria-controls resolves; [hidden] (plus display:none in the CSS) removes the links of a collapsed group from view and from the tab order -->
|
|
33007
|
+
<div
|
|
33008
|
+
class="nav-group-links"
|
|
33009
|
+
[id]="'navg-' + group.key"
|
|
33010
|
+
[hidden]="!_isRail() && _isCollapsed(group.key)"
|
|
33011
|
+
>
|
|
33012
|
+
@for (link of _visibleLinks(group); track link.route) {
|
|
33013
|
+
<a
|
|
33014
|
+
[routerLink]="link.route"
|
|
33015
|
+
routerLinkActive="active"
|
|
33016
|
+
[routerLinkActiveOptions]="{ exact: !!link.exact }"
|
|
33017
|
+
#rla="routerLinkActive"
|
|
33018
|
+
[attr.aria-current]="rla.isActive ? 'page' : null"
|
|
33019
|
+
[attr.title]="_isRail() ? link.label : null"
|
|
33020
|
+
[attr.aria-label]="_isRail() ? link.label : null"
|
|
33021
|
+
>
|
|
33022
|
+
@if (link.icon) {
|
|
33023
|
+
<span
|
|
33024
|
+
class="nav-icon"
|
|
33025
|
+
[innerHTML]="_safeIcon(link.icon)"
|
|
33026
|
+
aria-hidden="true"
|
|
33027
|
+
></span>
|
|
33028
|
+
}
|
|
33029
|
+
<span class="nav-label">{{ link.label }}</span>
|
|
33030
|
+
@if (link.badge && link.badge > 0) {
|
|
33031
|
+
<span
|
|
33032
|
+
class="nav-badge"
|
|
33033
|
+
[attr.aria-label]="link.badge + ' unread'"
|
|
33034
|
+
>{{ link.badge }}</span>
|
|
33035
|
+
}
|
|
33036
|
+
</a>
|
|
33037
|
+
}
|
|
33038
|
+
</div>
|
|
32858
33039
|
</div>
|
|
32859
33040
|
}
|
|
32860
33041
|
</nav>
|
|
@@ -32911,8 +33092,8 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
32911
33092
|
</svg>
|
|
32912
33093
|
</button>
|
|
32913
33094
|
|
|
32914
|
-
@if (
|
|
32915
|
-
<h1 class="page-title" id="shell-page-title" tabindex="-1">{{
|
|
33095
|
+
@if (_title()) {
|
|
33096
|
+
<h1 class="page-title" id="shell-page-title" tabindex="-1">{{ _title() }}</h1>
|
|
32916
33097
|
}
|
|
32917
33098
|
|
|
32918
33099
|
@if (readOnly()) {
|
|
@@ -32936,7 +33117,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
32936
33117
|
<ng-content select="[shell-banners]" />
|
|
32937
33118
|
|
|
32938
33119
|
<!-- Page content -->
|
|
32939
|
-
<main class="content" id="main-content" role="main" tabindex="-1" [attr.aria-labelledby]="
|
|
33120
|
+
<main class="content" id="main-content" role="main" tabindex="-1" [attr.aria-labelledby]="_title() ? 'shell-page-title' : null">
|
|
32940
33121
|
<ng-content />
|
|
32941
33122
|
</main>
|
|
32942
33123
|
</div>
|
|
@@ -32944,8 +33125,12 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
32944
33125
|
|
|
32945
33126
|
<!-- Global confirm overlay — position:fixed so it overlays without affecting layout -->
|
|
32946
33127
|
<ui-confirm-outlet />
|
|
33128
|
+
|
|
33129
|
+
@if (showToast()) {
|
|
33130
|
+
<ui-toast />
|
|
33131
|
+
}
|
|
32947
33132
|
`,
|
|
32948
|
-
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-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{--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}@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);box-shadow:none}.shell.sidebar-open .sidebar{transform:translate(0);box-shadow:4px 0 32px #0000004d}.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"]
|
|
33133
|
+
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"]
|
|
32949
33134
|
}]
|
|
32950
33135
|
}],
|
|
32951
33136
|
propDecorators: {
|
|
@@ -32965,6 +33150,14 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
32965
33150
|
required: false
|
|
32966
33151
|
}]
|
|
32967
33152
|
}],
|
|
33153
|
+
showToast: [{
|
|
33154
|
+
type: i0.Input,
|
|
33155
|
+
args: [{
|
|
33156
|
+
isSignal: true,
|
|
33157
|
+
alias: "showToast",
|
|
33158
|
+
required: false
|
|
33159
|
+
}]
|
|
33160
|
+
}],
|
|
32968
33161
|
appName: [{
|
|
32969
33162
|
type: i0.Input,
|
|
32970
33163
|
args: [{
|
|
@@ -41108,6 +41301,69 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
41108
41301
|
}]
|
|
41109
41302
|
}
|
|
41110
41303
|
});
|
|
41304
|
+
const MIN_HEIGHT_PX = 240;
|
|
41305
|
+
var FillViewportDirective = class FillViewportDirective {
|
|
41306
|
+
constructor() {
|
|
41307
|
+
this.el = inject(ElementRef).nativeElement;
|
|
41308
|
+
const destroyRef = inject(DestroyRef);
|
|
41309
|
+
afterNextRender(() => {
|
|
41310
|
+
const scroller = this.el.closest("main");
|
|
41311
|
+
if (!scroller) return;
|
|
41312
|
+
let frame = 0;
|
|
41313
|
+
const measure = () => {
|
|
41314
|
+
cancelAnimationFrame(frame);
|
|
41315
|
+
frame = requestAnimationFrame(() => {
|
|
41316
|
+
const padBottom = parseFloat(getComputedStyle(scroller).paddingBottom) || 0;
|
|
41317
|
+
const topInContent = this.el.getBoundingClientRect().top - scroller.getBoundingClientRect().top + scroller.scrollTop;
|
|
41318
|
+
const height = Math.max(MIN_HEIGHT_PX, Math.floor(scroller.clientHeight - padBottom - topInContent));
|
|
41319
|
+
this.el.style.setProperty("--cols-h", `${height}px`);
|
|
41320
|
+
});
|
|
41321
|
+
};
|
|
41322
|
+
const observer = new ResizeObserver(measure);
|
|
41323
|
+
observer.observe(scroller);
|
|
41324
|
+
if (this.el.parentElement) observer.observe(this.el.parentElement);
|
|
41325
|
+
measure();
|
|
41326
|
+
destroyRef.onDestroy(() => {
|
|
41327
|
+
observer.disconnect();
|
|
41328
|
+
cancelAnimationFrame(frame);
|
|
41329
|
+
});
|
|
41330
|
+
});
|
|
41331
|
+
}
|
|
41332
|
+
static {
|
|
41333
|
+
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
41334
|
+
minVersion: "12.0.0",
|
|
41335
|
+
version: "22.2.2",
|
|
41336
|
+
ngImport: i0,
|
|
41337
|
+
type: FillViewportDirective,
|
|
41338
|
+
deps: [],
|
|
41339
|
+
target: i0.ɵɵFactoryTarget.Directive
|
|
41340
|
+
});
|
|
41341
|
+
}
|
|
41342
|
+
static {
|
|
41343
|
+
this.ɵdir = i0.ɵɵngDeclareDirective({
|
|
41344
|
+
minVersion: "14.0.0",
|
|
41345
|
+
version: "22.2.2",
|
|
41346
|
+
type: FillViewportDirective,
|
|
41347
|
+
isStandalone: true,
|
|
41348
|
+
selector: "[uiFillViewport]",
|
|
41349
|
+
ngImport: i0
|
|
41350
|
+
});
|
|
41351
|
+
}
|
|
41352
|
+
};
|
|
41353
|
+
i0.ɵɵngDeclareClassMetadata({
|
|
41354
|
+
minVersion: "12.0.0",
|
|
41355
|
+
version: "22.2.2",
|
|
41356
|
+
ngImport: i0,
|
|
41357
|
+
type: FillViewportDirective,
|
|
41358
|
+
decorators: [{
|
|
41359
|
+
type: Directive,
|
|
41360
|
+
args: [{
|
|
41361
|
+
selector: "[uiFillViewport]",
|
|
41362
|
+
standalone: true
|
|
41363
|
+
}]
|
|
41364
|
+
}],
|
|
41365
|
+
ctorParameters: () => []
|
|
41366
|
+
});
|
|
41111
41367
|
const JUSTIFY = {
|
|
41112
41368
|
start: "flex-start",
|
|
41113
41369
|
center: "center",
|
|
@@ -53301,6 +53557,6 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
53301
53557
|
}]
|
|
53302
53558
|
}
|
|
53303
53559
|
});
|
|
53304
|
-
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 };
|
|
53560
|
+
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, 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, 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 };
|
|
53305
53561
|
|
|
53306
53562
|
//# sourceMappingURL=forgeroute-ui.mjs.map
|