@forgeroute/ui 0.4.15 → 0.4.17

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.
@@ -1205,7 +1205,7 @@ var ColumnFilterComponent = class ColumnFilterComponent {
1205
1205
  </div>
1206
1206
  `,
1207
1207
  isInline: true,
1208
- 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;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 #d1d5db;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:#64748b;border-radius:999px;padding:2px 7px;min-width:22px;text-align:center}.cf-option.cf-selected .cf-count{background:#dbeafe;color:#2563eb}.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}}\n"],
1208
+ 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 #d1d5db;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:#64748b;border-radius:999px;padding:2px 7px;min-width:22px;text-align:center}.cf-option.cf-selected .cf-count{background:#dbeafe;color:#2563eb}.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}}\n"],
1209
1209
  changeDetection: i0.ChangeDetectionStrategy.OnPush
1210
1210
  });
1211
1211
  }
@@ -1294,7 +1294,7 @@ i0.ɵɵngDeclareClassMetadata({
1294
1294
  }
1295
1295
  </div>
1296
1296
  `,
1297
- 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;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 #d1d5db;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:#64748b;border-radius:999px;padding:2px 7px;min-width:22px;text-align:center}.cf-option.cf-selected .cf-count{background:#dbeafe;color:#2563eb}.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}}\n"]
1297
+ 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 #d1d5db;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:#64748b;border-radius:999px;padding:2px 7px;min-width:22px;text-align:center}.cf-option.cf-selected .cf-count{background:#dbeafe;color:#2563eb}.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}}\n"]
1298
1298
  }]
1299
1299
  }],
1300
1300
  ctorParameters: () => [],
@@ -2068,8 +2068,114 @@ function isUsableField(el) {
2068
2068
  const view = el.ownerDocument.defaultView;
2069
2069
  return !view || view.getComputedStyle(el).visibility !== "hidden";
2070
2070
  }
2071
+ const TABBABLE_SELECTOR = "button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), iframe, [tabindex]:not([tabindex=\"-1\"])";
2071
2072
  function tabbables(root) {
2072
- return Array.from(root.querySelectorAll("button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])")).filter((el) => el.getAttribute("tabindex") !== "-1");
2073
+ return Array.from(root.querySelectorAll(TABBABLE_SELECTOR)).filter((el) => {
2074
+ if (el.getAttribute("tabindex") === "-1") return false;
2075
+ if (el.hasAttribute("data-ui-focus-guard")) return false;
2076
+ return el.tagName !== "IFRAME" || isRenderedFrame(el);
2077
+ });
2078
+ }
2079
+ function isRenderedFrame(el) {
2080
+ if (!el.getClientRects().length || el.closest("[inert]")) return false;
2081
+ const view = el.ownerDocument.defaultView;
2082
+ return !view || view.getComputedStyle(el).visibility !== "hidden";
2083
+ }
2084
+ function redirectFromGuard(which, host, dialog, relatedTarget = null) {
2085
+ const list = tabbables(host);
2086
+ if (!list.length) {
2087
+ dialog?.focus();
2088
+ return;
2089
+ }
2090
+ if (which === "start" && dialog && relatedTarget === dialog) {
2091
+ list[0].focus();
2092
+ return;
2093
+ }
2094
+ (which === "start" ? list[list.length - 1] : list[0]).focus();
2095
+ }
2096
+ function neighbourTabbable(list, ref, dir) {
2097
+ if (!list.length) return null;
2098
+ if (dir === 1) return list.find((el) => el !== ref && !ref.contains(el) && (ref.compareDocumentPosition(el) & 4) !== 0) ?? list[0];
2099
+ return [...list].reverse().find((el) => el !== ref && !el.contains(ref) && (ref.compareDocumentPosition(el) & 2) !== 0) ?? list[list.length - 1];
2100
+ }
2101
+ function accessibleDocument(frame) {
2102
+ try {
2103
+ return frame.contentDocument ?? null;
2104
+ } catch {
2105
+ return null;
2106
+ }
2107
+ }
2108
+ function bridgeIframeKeys(root, doc, options) {
2109
+ if (!doc.defaultView) return () => {};
2110
+ const bound = /* @__PURE__ */ new Map();
2111
+ const makeHandler = (frame) => (event) => {
2112
+ if (event.key === "Escape") {
2113
+ options.onEscape(event);
2114
+ return;
2115
+ }
2116
+ if (event.key !== "Tab" || !options.isActive()) return;
2117
+ const inner = accessibleDocument(frame);
2118
+ if (!inner) return;
2119
+ const own = tabbables(inner.body);
2120
+ const active = inner.activeElement;
2121
+ if (!(event.shiftKey ? !own.length || active === own[0] || active === inner.body || active === inner.documentElement : !own.length || active === own[own.length - 1])) return;
2122
+ const target = neighbourTabbable(tabbables(root), frame, event.shiftKey ? -1 : 1);
2123
+ if (!target) return;
2124
+ event.preventDefault();
2125
+ target.focus();
2126
+ };
2127
+ const unbindDoc = (b) => {
2128
+ if (!b.doc) return;
2129
+ try {
2130
+ b.doc.removeEventListener("keydown", b.onKey, true);
2131
+ } catch {}
2132
+ b.doc = null;
2133
+ };
2134
+ const bindDoc = (frame, b) => {
2135
+ unbindDoc(b);
2136
+ const inner = accessibleDocument(frame);
2137
+ if (!inner) return;
2138
+ inner.addEventListener("keydown", b.onKey, true);
2139
+ b.doc = inner;
2140
+ };
2141
+ const attach = (frame) => {
2142
+ const b = {
2143
+ doc: null,
2144
+ onKey: makeHandler(frame),
2145
+ onLoad: () => bindDoc(frame, b)
2146
+ };
2147
+ frame.addEventListener("load", b.onLoad);
2148
+ bound.set(frame, b);
2149
+ bindDoc(frame, b);
2150
+ };
2151
+ const detach = (frame) => {
2152
+ const b = bound.get(frame);
2153
+ if (!b) return;
2154
+ frame.removeEventListener("load", b.onLoad);
2155
+ unbindDoc(b);
2156
+ bound.delete(frame);
2157
+ };
2158
+ const sync = () => {
2159
+ const current = new Set(Array.from(root.querySelectorAll("iframe")));
2160
+ for (const frame of Array.from(bound.keys())) if (!current.has(frame)) detach(frame);
2161
+ for (const frame of current) if (!bound.has(frame)) attach(frame);
2162
+ };
2163
+ sync();
2164
+ const touchesFrame = (n) => n.nodeType === 1 && (n.tagName === "IFRAME" || !!n.querySelector("iframe"));
2165
+ const observer = typeof MutationObserver === "undefined" ? null : new MutationObserver((records) => {
2166
+ if (records.some((r) => Array.from(r.addedNodes).some(touchesFrame) || Array.from(r.removedNodes).some(touchesFrame))) sync();
2167
+ });
2168
+ observer?.observe(root, {
2169
+ childList: true,
2170
+ subtree: true
2171
+ });
2172
+ let destroyed = false;
2173
+ return () => {
2174
+ if (destroyed) return;
2175
+ destroyed = true;
2176
+ observer?.disconnect();
2177
+ for (const frame of Array.from(bound.keys())) detach(frame);
2178
+ };
2073
2179
  }
2074
2180
  function focusInitial(dialog, body, doc) {
2075
2181
  if (!dialog) return;
@@ -2091,6 +2197,105 @@ function focusInitial(dialog, body, doc) {
2091
2197
  for (const f of fields) if (isUsableField(f) && tryFocus(f)) return;
2092
2198
  dialog.focus();
2093
2199
  }
2200
+ const FOCUSABLE_ANCESTOR = "button, a[href], [tabindex], [role=\"button\"], input:not([type=\"hidden\"]), select, textarea, summary";
2201
+ var LastInteraction = class LastInteraction {
2202
+ constructor() {
2203
+ this._target = null;
2204
+ this._at = 0;
2205
+ this._users = 0;
2206
+ this._off = null;
2207
+ }
2208
+ get target() {
2209
+ return this._target;
2210
+ }
2211
+ consume() {
2212
+ const fresh = this._target && Date.now() - this._at <= 1e3 ? this._target : null;
2213
+ this._target = null;
2214
+ return fresh;
2215
+ }
2216
+ acquire(doc) {
2217
+ this._users++;
2218
+ if (this._off || !doc.defaultView) return;
2219
+ const remember = (e) => {
2220
+ if (e.target instanceof Element) {
2221
+ this._target = e.target;
2222
+ this._at = Date.now();
2223
+ }
2224
+ };
2225
+ const onKey = (e) => {
2226
+ if (e.key === "Enter" || e.key === " ") remember(e);
2227
+ };
2228
+ doc.addEventListener("pointerdown", remember, true);
2229
+ doc.addEventListener("click", remember, true);
2230
+ doc.addEventListener("keydown", onKey, true);
2231
+ this._off = () => {
2232
+ doc.removeEventListener("pointerdown", remember, true);
2233
+ doc.removeEventListener("click", remember, true);
2234
+ doc.removeEventListener("keydown", onKey, true);
2235
+ };
2236
+ }
2237
+ release() {
2238
+ this._users = Math.max(0, this._users - 1);
2239
+ if (this._users > 0) return;
2240
+ this._off?.();
2241
+ this._off = null;
2242
+ this._target = null;
2243
+ }
2244
+ static {
2245
+ this.ɵfac = i0.ɵɵngDeclareFactory({
2246
+ minVersion: "12.0.0",
2247
+ version: "22.2.2",
2248
+ ngImport: i0,
2249
+ type: LastInteraction,
2250
+ deps: [],
2251
+ target: i0.ɵɵFactoryTarget.Injectable
2252
+ });
2253
+ }
2254
+ static {
2255
+ this.ɵprov = i0.ɵɵngDeclareInjectable({
2256
+ minVersion: "12.0.0",
2257
+ version: "22.2.2",
2258
+ ngImport: i0,
2259
+ type: LastInteraction,
2260
+ providedIn: "root"
2261
+ });
2262
+ }
2263
+ };
2264
+ i0.ɵɵngDeclareClassMetadata({
2265
+ minVersion: "12.0.0",
2266
+ version: "22.2.2",
2267
+ ngImport: i0,
2268
+ type: LastInteraction,
2269
+ decorators: [{
2270
+ type: Injectable,
2271
+ args: [{ providedIn: "root" }]
2272
+ }]
2273
+ });
2274
+ function closestFocusable(target) {
2275
+ return target?.closest(FOCUSABLE_ANCESTOR) ?? null;
2276
+ }
2277
+ function resolveTrigger(doc, tracker) {
2278
+ const consumed = tracker.consume();
2279
+ const active = doc.activeElement;
2280
+ const isBody = !active || active === doc.body || active === doc.documentElement;
2281
+ const isDialog = !isBody && active.matches("[role=\"dialog\"]");
2282
+ if (!isBody && !isDialog) return active;
2283
+ const tracked = closestFocusable(consumed);
2284
+ if (!tracked) return active;
2285
+ return isDialog && !active.contains(tracked) ? active : tracked;
2286
+ }
2287
+ function isUsable(el) {
2288
+ if (!el || !el.isConnected || !el.getClientRects().length) return false;
2289
+ const view = el.ownerDocument.defaultView;
2290
+ return !view || view.getComputedStyle(el).visibility !== "hidden";
2291
+ }
2292
+ function restoreFocus(explicit, captured) {
2293
+ for (const candidate of [explicit, captured]) if (isUsable(candidate)) {
2294
+ candidate.focus();
2295
+ return;
2296
+ }
2297
+ captured?.focus();
2298
+ }
2094
2299
  function trackVisualViewport(win, host) {
2095
2300
  const vv = win?.visualViewport;
2096
2301
  if (!win || !vv) return () => {};
@@ -2120,6 +2325,7 @@ var ModalComponent = class ModalComponent {
2120
2325
  this.hideClose = input(false, ...ngDevMode ? [{ debugName: "hideClose" }] : /* istanbul ignore next */ []);
2121
2326
  this.closable = input(true, ...ngDevMode ? [{ debugName: "closable" }] : /* istanbul ignore next */ []);
2122
2327
  this.close = output();
2328
+ this.returnFocusTo = input(null, ...ngDevMode ? [{ debugName: "returnFocusTo" }] : /* istanbul ignore next */ []);
2123
2329
  this.titleId = `m-title-${Math.random().toString(36).slice(2, 8)}`;
2124
2330
  this.el = inject(ElementRef);
2125
2331
  this.ren = inject(Renderer2);
@@ -2128,10 +2334,18 @@ var ModalComponent = class ModalComponent {
2128
2334
  this._prevFocus = null;
2129
2335
  this._scrollLocked = false;
2130
2336
  this._stopViewport = null;
2337
+ this._stopIframeKeys = null;
2338
+ this._interaction = inject(LastInteraction);
2339
+ this._interaction.acquire(this.doc);
2131
2340
  effect(() => {
2132
2341
  if (this.open()) {
2133
2342
  this._overlays.push(this);
2134
- this._prevFocus = this.doc.activeElement;
2343
+ this._prevFocus = resolveTrigger(this.doc, this._interaction);
2344
+ this._stopIframeKeys?.();
2345
+ this._stopIframeKeys = bridgeIframeKeys(this.el.nativeElement, this.doc, {
2346
+ onEscape: (e) => this.onKeydown(e),
2347
+ isActive: () => this.open() && this._overlays.isTop(this)
2348
+ });
2135
2349
  this.doc.body.style.overflow = "hidden";
2136
2350
  this._scrollLocked = true;
2137
2351
  this._stopViewport?.();
@@ -2143,7 +2357,9 @@ var ModalComponent = class ModalComponent {
2143
2357
  this._scrollLocked = false;
2144
2358
  this._stopViewport?.();
2145
2359
  this._stopViewport = null;
2146
- this._prevFocus?.focus();
2360
+ this._stopIframeKeys?.();
2361
+ this._stopIframeKeys = null;
2362
+ restoreFocus(untracked(() => this.returnFocusTo()), this._prevFocus);
2147
2363
  this._prevFocus = null;
2148
2364
  }
2149
2365
  });
@@ -2175,6 +2391,10 @@ var ModalComponent = class ModalComponent {
2175
2391
  }
2176
2392
  }
2177
2393
  }
2394
+ onGuardFocus(which, event) {
2395
+ if (!this._overlays.isTop(this)) return;
2396
+ redirectFromGuard(which, this.el.nativeElement, this.el.nativeElement.querySelector(".m-modal"), event?.relatedTarget ?? null);
2397
+ }
2178
2398
  _focusFirst() {
2179
2399
  focusInitial(this.el.nativeElement.querySelector(".m-modal"), this.el.nativeElement.querySelector(".m-body"), this.doc);
2180
2400
  }
@@ -2185,6 +2405,9 @@ var ModalComponent = class ModalComponent {
2185
2405
  this.ren.appendChild(this.doc.body, this.el.nativeElement);
2186
2406
  }
2187
2407
  ngOnDestroy() {
2408
+ this._interaction.release();
2409
+ this._stopIframeKeys?.();
2410
+ this._stopIframeKeys = null;
2188
2411
  this._stopViewport?.();
2189
2412
  this._stopViewport = null;
2190
2413
  this._overlays.remove(this);
@@ -2265,6 +2488,13 @@ var ModalComponent = class ModalComponent {
2265
2488
  isSignal: true,
2266
2489
  isRequired: false,
2267
2490
  transformFunction: null
2491
+ },
2492
+ returnFocusTo: {
2493
+ classPropertyName: "returnFocusTo",
2494
+ publicName: "returnFocusTo",
2495
+ isSignal: true,
2496
+ isRequired: false,
2497
+ transformFunction: null
2268
2498
  }
2269
2499
  },
2270
2500
  outputs: { close: "close" },
@@ -2274,6 +2504,7 @@ var ModalComponent = class ModalComponent {
2274
2504
  @if (open()) {
2275
2505
  <div class="m-backdrop" (click)="closable() && close.emit()"></div>
2276
2506
  <div class="m-modal" role="dialog" aria-modal="true" tabindex="-1" [attr.aria-labelledby]="titleId" [attr.data-testid]="dialogTestId() || null" [style.max-width]="maxWidth()">
2507
+ <span class="m-focus-guard" data-ui-focus-guard="start" tabindex="0" (focus)="onGuardFocus('start', $event)"></span>
2277
2508
  <div class="m-header">
2278
2509
  <div class="m-header-text">
2279
2510
  <h3 class="m-title" [id]="titleId">{{ title() }}</h3>
@@ -2297,11 +2528,12 @@ var ModalComponent = class ModalComponent {
2297
2528
  <div class="m-footer-center"><ng-content select="[modal-footer-center]" /></div>
2298
2529
  <div class="m-footer-right"><ng-content select="[modal-footer-right]" /></div>
2299
2530
  </div>
2531
+ <span class="m-focus-guard" data-ui-focus-guard="end" tabindex="0" (focus)="onGuardFocus('end', $event)"></span>
2300
2532
  </div>
2301
2533
  }
2302
2534
  `,
2303
2535
  isInline: true,
2304
- styles: [".m-backdrop{position:fixed;inset:0;background:#02081773;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);z-index:200;animation:m-fade .18s ease}.m-modal:focus{outline:none}.m-modal{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);background:#fff;border-radius:16px;border:1px solid rgba(0,0,0,.07);z-index:201;width:calc(100% - 32px);box-shadow:0 4px 6px #0000000a,0 16px 32px #0000001f,0 48px 96px #0000001a;max-height:calc(100vh - 48px);max-height:calc(100dvh - 48px);display:flex;flex-direction:column;animation:m-scale .22s cubic-bezier(.16,1,.3,1)}.m-header{display:flex;align-items:flex-start;justify-content:space-between;padding:20px 24px 16px;background:#f8fafc;border-bottom:1px solid #e2e8f0;border-radius:16px 16px 0 0;flex-shrink:0}.m-header-text{display:flex;flex-direction:column;gap:3px;flex:1;min-width:0}.m-title{font-size:1.125rem;font-weight:700;color:#0f172a;margin:0;letter-spacing:-.02em;line-height:1.3}.m-description{font-size:.8125rem;color:#64748b;margin:0;line-height:1.4}.m-close{display:flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:8px;border:none;background:none;cursor:pointer;color:#94a3b8;flex-shrink:0;margin-left:12px;transition:background .13s,color .13s}.m-close:hover{background:#f1f5f9;color:#1e293b}.m-close:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.m-body{padding:20px 24px;overflow-y:auto;flex:1;min-height:0;font-size:.9rem;color:#475569;line-height:1.65}.m-footer{padding:14px 24px 18px;background:#f8fafc;border-top:1px solid #e2e8f0;border-radius:0 0 16px 16px;flex-shrink:0;display:flex;align-items:center;justify-content:space-between;gap:8px}.m-footer:not(:has(*)){display:none}.m-footer-left{display:flex;align-items:center;gap:8px}.m-footer-right{display:flex;align-items:center;gap:8px;margin-left:auto}.m-footer-center{display:flex;align-items:center;justify-content:center;gap:8px;flex:1 1 auto;margin:0 8px}.m-footer-center:empty{display:none}@media(max-width:480px){.m-modal{top:auto;bottom:var(--ui-kb, 0px);left:0;right:0;transform:none;width:100vw;max-width:none!important;max-height:min(85dvh,var(--ui-vvh, 100dvh));border-radius:20px 20px 0 0;animation:m-up .24s cubic-bezier(.16,1,.3,1)}.m-footer{border-radius:0;flex-direction:column-reverse;align-items:stretch;padding-bottom:max(18px,env(safe-area-inset-bottom))}}@media(pointer:coarse),(max-width:480px){.m-close{position:relative}.m-close:after{content:\"\";position:absolute;inset:-7px}}@keyframes m-fade{0%{opacity:0}to{opacity:1}}@keyframes m-scale{0%{opacity:0;transform:translate(-50%,-48%) scale(.96)}to{opacity:1;transform:translate(-50%,-50%) scale(1)}}@keyframes m-up{0%{transform:translateY(100%)}to{transform:translateY(0)}}\n"],
2536
+ styles: [".m-backdrop{position:fixed;inset:0;background:#02081773;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);z-index:200;animation:m-fade .18s ease}.m-modal:focus{outline:none}.m-focus-guard{position:absolute;width:1px;height:1px;padding:0;margin:-1px;border:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;outline:none}.m-modal{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);background:#fff;border-radius:16px;border:1px solid rgba(0,0,0,.07);z-index:201;width:calc(100% - 32px);box-shadow:0 4px 6px #0000000a,0 16px 32px #0000001f,0 48px 96px #0000001a;max-height:calc(100vh - 48px);max-height:calc(100dvh - 48px);display:flex;flex-direction:column;animation:m-scale .22s cubic-bezier(.16,1,.3,1)}.m-header{display:flex;align-items:flex-start;justify-content:space-between;padding:20px 24px 16px;background:#f8fafc;border-bottom:1px solid #e2e8f0;border-radius:16px 16px 0 0;flex-shrink:0}.m-header-text{display:flex;flex-direction:column;gap:3px;flex:1;min-width:0}.m-title{font-size:1.125rem;font-weight:700;color:#0f172a;margin:0;letter-spacing:-.02em;line-height:1.3}.m-description{font-size:.8125rem;color:#64748b;margin:0;line-height:1.4}.m-close{display:flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:8px;border:none;background:none;cursor:pointer;color:#94a3b8;flex-shrink:0;margin-left:12px;transition:background .13s,color .13s}.m-close:hover{background:#f1f5f9;color:#1e293b}.m-close:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.m-body{padding:20px 24px;overflow-y:auto;flex:1;min-height:0;font-size:.9rem;color:#475569;line-height:1.65}.m-footer{padding:14px 24px 18px;background:#f8fafc;border-top:1px solid #e2e8f0;border-radius:0 0 16px 16px;flex-shrink:0;display:flex;align-items:center;justify-content:space-between;gap:8px}.m-footer:not(:has(*)){display:none}.m-footer-left{display:flex;align-items:center;gap:8px}.m-footer-right{display:flex;align-items:center;gap:8px;margin-left:auto}.m-footer-center{display:flex;align-items:center;justify-content:center;gap:8px;flex:1 1 auto;margin:0 8px}.m-footer-center:empty{display:none}@media(max-width:480px){.m-modal{top:auto;bottom:var(--ui-kb, 0px);left:0;right:0;transform:none;width:100vw;max-width:none!important;max-height:min(85dvh,var(--ui-vvh, 100dvh));border-radius:20px 20px 0 0;animation:m-up .24s cubic-bezier(.16,1,.3,1)}.m-footer{border-radius:0;flex-direction:column-reverse;align-items:stretch;padding-bottom:max(18px,env(safe-area-inset-bottom))}}@media(pointer:coarse),(max-width:480px){.m-close{position:relative}.m-close:after{content:\"\";position:absolute;inset:-7px}}@keyframes m-fade{0%{opacity:0}to{opacity:1}}@keyframes m-scale{0%{opacity:0;transform:translate(-50%,-48%) scale(.96)}to{opacity:1;transform:translate(-50%,-50%) scale(1)}}@keyframes m-up{0%{transform:translateY(100%)}to{transform:translateY(0)}}\n"],
2305
2537
  changeDetection: i0.ChangeDetectionStrategy.OnPush
2306
2538
  });
2307
2539
  }
@@ -2322,6 +2554,7 @@ i0.ɵɵngDeclareClassMetadata({
2322
2554
  @if (open()) {
2323
2555
  <div class="m-backdrop" (click)="closable() && close.emit()"></div>
2324
2556
  <div class="m-modal" role="dialog" aria-modal="true" tabindex="-1" [attr.aria-labelledby]="titleId" [attr.data-testid]="dialogTestId() || null" [style.max-width]="maxWidth()">
2557
+ <span class="m-focus-guard" data-ui-focus-guard="start" tabindex="0" (focus)="onGuardFocus('start', $event)"></span>
2325
2558
  <div class="m-header">
2326
2559
  <div class="m-header-text">
2327
2560
  <h3 class="m-title" [id]="titleId">{{ title() }}</h3>
@@ -2345,10 +2578,11 @@ i0.ɵɵngDeclareClassMetadata({
2345
2578
  <div class="m-footer-center"><ng-content select="[modal-footer-center]" /></div>
2346
2579
  <div class="m-footer-right"><ng-content select="[modal-footer-right]" /></div>
2347
2580
  </div>
2581
+ <span class="m-focus-guard" data-ui-focus-guard="end" tabindex="0" (focus)="onGuardFocus('end', $event)"></span>
2348
2582
  </div>
2349
2583
  }
2350
2584
  `,
2351
- styles: [".m-backdrop{position:fixed;inset:0;background:#02081773;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);z-index:200;animation:m-fade .18s ease}.m-modal:focus{outline:none}.m-modal{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);background:#fff;border-radius:16px;border:1px solid rgba(0,0,0,.07);z-index:201;width:calc(100% - 32px);box-shadow:0 4px 6px #0000000a,0 16px 32px #0000001f,0 48px 96px #0000001a;max-height:calc(100vh - 48px);max-height:calc(100dvh - 48px);display:flex;flex-direction:column;animation:m-scale .22s cubic-bezier(.16,1,.3,1)}.m-header{display:flex;align-items:flex-start;justify-content:space-between;padding:20px 24px 16px;background:#f8fafc;border-bottom:1px solid #e2e8f0;border-radius:16px 16px 0 0;flex-shrink:0}.m-header-text{display:flex;flex-direction:column;gap:3px;flex:1;min-width:0}.m-title{font-size:1.125rem;font-weight:700;color:#0f172a;margin:0;letter-spacing:-.02em;line-height:1.3}.m-description{font-size:.8125rem;color:#64748b;margin:0;line-height:1.4}.m-close{display:flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:8px;border:none;background:none;cursor:pointer;color:#94a3b8;flex-shrink:0;margin-left:12px;transition:background .13s,color .13s}.m-close:hover{background:#f1f5f9;color:#1e293b}.m-close:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.m-body{padding:20px 24px;overflow-y:auto;flex:1;min-height:0;font-size:.9rem;color:#475569;line-height:1.65}.m-footer{padding:14px 24px 18px;background:#f8fafc;border-top:1px solid #e2e8f0;border-radius:0 0 16px 16px;flex-shrink:0;display:flex;align-items:center;justify-content:space-between;gap:8px}.m-footer:not(:has(*)){display:none}.m-footer-left{display:flex;align-items:center;gap:8px}.m-footer-right{display:flex;align-items:center;gap:8px;margin-left:auto}.m-footer-center{display:flex;align-items:center;justify-content:center;gap:8px;flex:1 1 auto;margin:0 8px}.m-footer-center:empty{display:none}@media(max-width:480px){.m-modal{top:auto;bottom:var(--ui-kb, 0px);left:0;right:0;transform:none;width:100vw;max-width:none!important;max-height:min(85dvh,var(--ui-vvh, 100dvh));border-radius:20px 20px 0 0;animation:m-up .24s cubic-bezier(.16,1,.3,1)}.m-footer{border-radius:0;flex-direction:column-reverse;align-items:stretch;padding-bottom:max(18px,env(safe-area-inset-bottom))}}@media(pointer:coarse),(max-width:480px){.m-close{position:relative}.m-close:after{content:\"\";position:absolute;inset:-7px}}@keyframes m-fade{0%{opacity:0}to{opacity:1}}@keyframes m-scale{0%{opacity:0;transform:translate(-50%,-48%) scale(.96)}to{opacity:1;transform:translate(-50%,-50%) scale(1)}}@keyframes m-up{0%{transform:translateY(100%)}to{transform:translateY(0)}}\n"]
2585
+ styles: [".m-backdrop{position:fixed;inset:0;background:#02081773;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);z-index:200;animation:m-fade .18s ease}.m-modal:focus{outline:none}.m-focus-guard{position:absolute;width:1px;height:1px;padding:0;margin:-1px;border:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;outline:none}.m-modal{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);background:#fff;border-radius:16px;border:1px solid rgba(0,0,0,.07);z-index:201;width:calc(100% - 32px);box-shadow:0 4px 6px #0000000a,0 16px 32px #0000001f,0 48px 96px #0000001a;max-height:calc(100vh - 48px);max-height:calc(100dvh - 48px);display:flex;flex-direction:column;animation:m-scale .22s cubic-bezier(.16,1,.3,1)}.m-header{display:flex;align-items:flex-start;justify-content:space-between;padding:20px 24px 16px;background:#f8fafc;border-bottom:1px solid #e2e8f0;border-radius:16px 16px 0 0;flex-shrink:0}.m-header-text{display:flex;flex-direction:column;gap:3px;flex:1;min-width:0}.m-title{font-size:1.125rem;font-weight:700;color:#0f172a;margin:0;letter-spacing:-.02em;line-height:1.3}.m-description{font-size:.8125rem;color:#64748b;margin:0;line-height:1.4}.m-close{display:flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:8px;border:none;background:none;cursor:pointer;color:#94a3b8;flex-shrink:0;margin-left:12px;transition:background .13s,color .13s}.m-close:hover{background:#f1f5f9;color:#1e293b}.m-close:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.m-body{padding:20px 24px;overflow-y:auto;flex:1;min-height:0;font-size:.9rem;color:#475569;line-height:1.65}.m-footer{padding:14px 24px 18px;background:#f8fafc;border-top:1px solid #e2e8f0;border-radius:0 0 16px 16px;flex-shrink:0;display:flex;align-items:center;justify-content:space-between;gap:8px}.m-footer:not(:has(*)){display:none}.m-footer-left{display:flex;align-items:center;gap:8px}.m-footer-right{display:flex;align-items:center;gap:8px;margin-left:auto}.m-footer-center{display:flex;align-items:center;justify-content:center;gap:8px;flex:1 1 auto;margin:0 8px}.m-footer-center:empty{display:none}@media(max-width:480px){.m-modal{top:auto;bottom:var(--ui-kb, 0px);left:0;right:0;transform:none;width:100vw;max-width:none!important;max-height:min(85dvh,var(--ui-vvh, 100dvh));border-radius:20px 20px 0 0;animation:m-up .24s cubic-bezier(.16,1,.3,1)}.m-footer{border-radius:0;flex-direction:column-reverse;align-items:stretch;padding-bottom:max(18px,env(safe-area-inset-bottom))}}@media(pointer:coarse),(max-width:480px){.m-close{position:relative}.m-close:after{content:\"\";position:absolute;inset:-7px}}@keyframes m-fade{0%{opacity:0}to{opacity:1}}@keyframes m-scale{0%{opacity:0;transform:translate(-50%,-48%) scale(.96)}to{opacity:1;transform:translate(-50%,-50%) scale(1)}}@keyframes m-up{0%{transform:translateY(100%)}to{transform:translateY(0)}}\n"]
2352
2586
  }]
2353
2587
  }],
2354
2588
  ctorParameters: () => [],
@@ -2420,6 +2654,14 @@ i0.ɵɵngDeclareClassMetadata({
2420
2654
  close: [{
2421
2655
  type: i0.Output,
2422
2656
  args: ["close"]
2657
+ }],
2658
+ returnFocusTo: [{
2659
+ type: i0.Input,
2660
+ args: [{
2661
+ isSignal: true,
2662
+ alias: "returnFocusTo",
2663
+ required: false
2664
+ }]
2423
2665
  }]
2424
2666
  }
2425
2667
  });
@@ -2871,10 +3113,11 @@ var CheckboxComponent = class CheckboxComponent {
2871
3113
  template: `
2872
3114
  @if (groupMode()) {
2873
3115
  <fieldset class="cb-group" [class.cb-indent]="indent()" [class.cb-error]="_activeError()" [disabled]="disabled()"
2874
- [attr.aria-required]="required() ? 'true' : null" [attr.aria-invalid]="_activeError() ? 'true' : null"
3116
+ [attr.aria-invalid]="_activeError() ? 'true' : null"
2875
3117
  [attr.aria-describedby]="(_activeError() || hint()) ? _descId : null">
2876
3118
  @if (_legend()) {
2877
- <legend class="cb-legend">{{ _legend() }}@if (required()) { <span class="cb-required" aria-hidden="true">*</span> }</legend>
3119
+ <!-- aria-required is not allowed on a fieldset / group, so "required" is part of the legend's text for assistive technology -->
3120
+ <legend class="cb-legend">{{ _legend() }}@if (required()) { <span class="cb-required" aria-hidden="true">*</span><span class="cb-sr-only"> (required)</span> }</legend>
2878
3121
  }
2879
3122
  <div class="cb-options" [class.cb-horizontal]="orientation() === 'horizontal'">
2880
3123
  @for (opt of options(); track opt.value; let i = $index) {
@@ -2965,7 +3208,7 @@ var CheckboxComponent = class CheckboxComponent {
2965
3208
  }
2966
3209
  `,
2967
3210
  isInline: true,
2968
- styles: [".cb-field{display:inline-flex;flex-direction:column;gap:4px;vertical-align:top}.cb-group{display:flex;flex-direction:column;gap:8px;margin:0;padding:0;border:0;min-width:0}.cb-legend{padding:0;margin:0 0 8px;font-size:.8125rem;font-weight:600;color:#374151;line-height:1.2}.cb-required{color:#ef4444;margin-left:2px}.cb-options{display:flex;flex-direction:column;gap:10px}.cb-options.cb-horizontal{flex-direction:row;flex-wrap:wrap;gap:8px 20px}.cb-field.cb-has-trailing{display:flex}.cb-row{display:flex;align-items:center;justify-content:space-between;gap:12px}.cb-trailing{display:inline-flex;align-items:center;flex-shrink:0}.cb-option{display:flex;flex-direction:column;gap:4px}.cb-group-desc{margin-left:0}.cb-indent{margin-left:29px}.cb-desc{margin:0 0 0 29px;font-size:.75rem;line-height:1.4;color:#64748b}.cb-desc-error{color:#ef4444}.cb-error .cb-box:not(.cb-checked){border-color:#ef4444}.cb-wrap{position:relative;vertical-align:top;display:inline-flex;align-items:center;gap:9px;cursor:pointer;-webkit-user-select:none;user-select:none}.cb-wrap.cb-disabled{cursor:not-allowed;opacity:.5}.cb-hidden{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.cb-wrap:has(.cb-hidden:focus-visible) .cb-box{outline:2px solid #3b82f6;outline-offset:2px}@media(pointer:coarse),(max-width:480px){.cb-wrap{position:relative}.cb-hidden{width:44px;height:44px;margin:0;clip:auto;overflow:visible;left:-12px;top:50%;transform:translateY(-50%);opacity:0;cursor:pointer;z-index:1}.cb-wrap.cb-disabled .cb-hidden{cursor:not-allowed}}.cb-box{flex-shrink:0;width:20px;height:20px;border:2px solid #cbd5e1;border-radius:5px;background:#fff;display:flex;align-items:center;justify-content:center;transition:background .12s,border-color .12s}.cb-box.cb-checked,.cb-box.cb-indeterminate{background:#3b82f6;border-color:#3b82f6}.cb-wrap:hover .cb-box:not(.cb-checked):not(.cb-disabled){border-color:#3b82f6}@media(max-width:640px),(pointer:coarse){.cb-box{position:relative}.cb-box:after{content:\"\";position:absolute;inset:-12px}}.cb-label{font-size:.875rem;color:#334155;line-height:1.4}\n"],
3211
+ styles: [".cb-field{display:inline-flex;flex-direction:column;gap:4px;vertical-align:top}.cb-group{display:flex;flex-direction:column;gap:8px;margin:0;padding:0;border:0;min-width:0}.cb-legend{padding:0;margin:0 0 8px;font-size:.8125rem;font-weight:600;color:#374151;line-height:1.2}.cb-required{color:#dc2626;margin-left:2px}.cb-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}.cb-options{display:flex;flex-direction:column;gap:10px}.cb-options.cb-horizontal{flex-direction:row;flex-wrap:wrap;gap:8px 20px}.cb-field.cb-has-trailing{display:flex}.cb-row{display:flex;align-items:center;justify-content:space-between;gap:12px}.cb-trailing{display:inline-flex;align-items:center;flex-shrink:0}.cb-option{display:flex;flex-direction:column;gap:4px}.cb-group-desc{margin-left:0}.cb-indent{margin-left:29px}.cb-desc{margin:0 0 0 29px;font-size:.75rem;line-height:1.4;color:#64748b}.cb-desc-error{color:#dc2626}.cb-error .cb-box:not(.cb-checked){border-color:#ef4444}.cb-wrap{position:relative;vertical-align:top;display:inline-flex;align-items:center;gap:9px;cursor:pointer;-webkit-user-select:none;user-select:none}.cb-wrap.cb-disabled{cursor:not-allowed;opacity:.5}.cb-hidden{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.cb-wrap:has(.cb-hidden:focus-visible) .cb-box{outline:2px solid #3b82f6;outline-offset:2px}@media(pointer:coarse),(max-width:480px){.cb-wrap{position:relative}.cb-hidden{width:44px;height:44px;margin:0;clip:auto;overflow:visible;left:-12px;top:50%;transform:translateY(-50%);opacity:0;cursor:pointer;z-index:1}.cb-wrap.cb-disabled .cb-hidden{cursor:not-allowed}}.cb-box{flex-shrink:0;width:20px;height:20px;border:2px solid #cbd5e1;border-radius:5px;background:#fff;display:flex;align-items:center;justify-content:center;transition:background .12s,border-color .12s}.cb-box.cb-checked,.cb-box.cb-indeterminate{background:#3b82f6;border-color:#3b82f6}.cb-wrap:hover .cb-box:not(.cb-checked):not(.cb-disabled){border-color:#3b82f6}@media(max-width:640px),(pointer:coarse){.cb-box{position:relative}.cb-box:after{content:\"\";position:absolute;inset:-12px}}.cb-label{font-size:.875rem;color:#334155;line-height:1.4}\n"],
2969
3212
  dependencies: [{
2970
3213
  kind: "directive",
2971
3214
  type: NgTemplateOutlet,
@@ -3011,10 +3254,11 @@ i0.ɵɵngDeclareClassMetadata({
3011
3254
  template: `
3012
3255
  @if (groupMode()) {
3013
3256
  <fieldset class="cb-group" [class.cb-indent]="indent()" [class.cb-error]="_activeError()" [disabled]="disabled()"
3014
- [attr.aria-required]="required() ? 'true' : null" [attr.aria-invalid]="_activeError() ? 'true' : null"
3257
+ [attr.aria-invalid]="_activeError() ? 'true' : null"
3015
3258
  [attr.aria-describedby]="(_activeError() || hint()) ? _descId : null">
3016
3259
  @if (_legend()) {
3017
- <legend class="cb-legend">{{ _legend() }}@if (required()) { <span class="cb-required" aria-hidden="true">*</span> }</legend>
3260
+ <!-- aria-required is not allowed on a fieldset / group, so "required" is part of the legend's text for assistive technology -->
3261
+ <legend class="cb-legend">{{ _legend() }}@if (required()) { <span class="cb-required" aria-hidden="true">*</span><span class="cb-sr-only"> (required)</span> }</legend>
3018
3262
  }
3019
3263
  <div class="cb-options" [class.cb-horizontal]="orientation() === 'horizontal'">
3020
3264
  @for (opt of options(); track opt.value; let i = $index) {
@@ -3104,7 +3348,7 @@ i0.ɵɵngDeclareClassMetadata({
3104
3348
  </div>
3105
3349
  }
3106
3350
  `,
3107
- styles: [".cb-field{display:inline-flex;flex-direction:column;gap:4px;vertical-align:top}.cb-group{display:flex;flex-direction:column;gap:8px;margin:0;padding:0;border:0;min-width:0}.cb-legend{padding:0;margin:0 0 8px;font-size:.8125rem;font-weight:600;color:#374151;line-height:1.2}.cb-required{color:#ef4444;margin-left:2px}.cb-options{display:flex;flex-direction:column;gap:10px}.cb-options.cb-horizontal{flex-direction:row;flex-wrap:wrap;gap:8px 20px}.cb-field.cb-has-trailing{display:flex}.cb-row{display:flex;align-items:center;justify-content:space-between;gap:12px}.cb-trailing{display:inline-flex;align-items:center;flex-shrink:0}.cb-option{display:flex;flex-direction:column;gap:4px}.cb-group-desc{margin-left:0}.cb-indent{margin-left:29px}.cb-desc{margin:0 0 0 29px;font-size:.75rem;line-height:1.4;color:#64748b}.cb-desc-error{color:#ef4444}.cb-error .cb-box:not(.cb-checked){border-color:#ef4444}.cb-wrap{position:relative;vertical-align:top;display:inline-flex;align-items:center;gap:9px;cursor:pointer;-webkit-user-select:none;user-select:none}.cb-wrap.cb-disabled{cursor:not-allowed;opacity:.5}.cb-hidden{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.cb-wrap:has(.cb-hidden:focus-visible) .cb-box{outline:2px solid #3b82f6;outline-offset:2px}@media(pointer:coarse),(max-width:480px){.cb-wrap{position:relative}.cb-hidden{width:44px;height:44px;margin:0;clip:auto;overflow:visible;left:-12px;top:50%;transform:translateY(-50%);opacity:0;cursor:pointer;z-index:1}.cb-wrap.cb-disabled .cb-hidden{cursor:not-allowed}}.cb-box{flex-shrink:0;width:20px;height:20px;border:2px solid #cbd5e1;border-radius:5px;background:#fff;display:flex;align-items:center;justify-content:center;transition:background .12s,border-color .12s}.cb-box.cb-checked,.cb-box.cb-indeterminate{background:#3b82f6;border-color:#3b82f6}.cb-wrap:hover .cb-box:not(.cb-checked):not(.cb-disabled){border-color:#3b82f6}@media(max-width:640px),(pointer:coarse){.cb-box{position:relative}.cb-box:after{content:\"\";position:absolute;inset:-12px}}.cb-label{font-size:.875rem;color:#334155;line-height:1.4}\n"]
3351
+ styles: [".cb-field{display:inline-flex;flex-direction:column;gap:4px;vertical-align:top}.cb-group{display:flex;flex-direction:column;gap:8px;margin:0;padding:0;border:0;min-width:0}.cb-legend{padding:0;margin:0 0 8px;font-size:.8125rem;font-weight:600;color:#374151;line-height:1.2}.cb-required{color:#dc2626;margin-left:2px}.cb-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}.cb-options{display:flex;flex-direction:column;gap:10px}.cb-options.cb-horizontal{flex-direction:row;flex-wrap:wrap;gap:8px 20px}.cb-field.cb-has-trailing{display:flex}.cb-row{display:flex;align-items:center;justify-content:space-between;gap:12px}.cb-trailing{display:inline-flex;align-items:center;flex-shrink:0}.cb-option{display:flex;flex-direction:column;gap:4px}.cb-group-desc{margin-left:0}.cb-indent{margin-left:29px}.cb-desc{margin:0 0 0 29px;font-size:.75rem;line-height:1.4;color:#64748b}.cb-desc-error{color:#dc2626}.cb-error .cb-box:not(.cb-checked){border-color:#ef4444}.cb-wrap{position:relative;vertical-align:top;display:inline-flex;align-items:center;gap:9px;cursor:pointer;-webkit-user-select:none;user-select:none}.cb-wrap.cb-disabled{cursor:not-allowed;opacity:.5}.cb-hidden{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.cb-wrap:has(.cb-hidden:focus-visible) .cb-box{outline:2px solid #3b82f6;outline-offset:2px}@media(pointer:coarse),(max-width:480px){.cb-wrap{position:relative}.cb-hidden{width:44px;height:44px;margin:0;clip:auto;overflow:visible;left:-12px;top:50%;transform:translateY(-50%);opacity:0;cursor:pointer;z-index:1}.cb-wrap.cb-disabled .cb-hidden{cursor:not-allowed}}.cb-box{flex-shrink:0;width:20px;height:20px;border:2px solid #cbd5e1;border-radius:5px;background:#fff;display:flex;align-items:center;justify-content:center;transition:background .12s,border-color .12s}.cb-box.cb-checked,.cb-box.cb-indeterminate{background:#3b82f6;border-color:#3b82f6}.cb-wrap:hover .cb-box:not(.cb-checked):not(.cb-disabled){border-color:#3b82f6}@media(max-width:640px),(pointer:coarse){.cb-box{position:relative}.cb-box:after{content:\"\";position:absolute;inset:-12px}}.cb-label{font-size:.875rem;color:#334155;line-height:1.4}\n"]
3108
3352
  }]
3109
3353
  }],
3110
3354
  ctorParameters: () => [],
@@ -3912,6 +4156,583 @@ i0.ɵɵngDeclareClassMetadata({
3912
4156
  }]
3913
4157
  }
3914
4158
  });
4159
+ let nextTooltipId = 0;
4160
+ var TooltipDirective = class TooltipDirective {
4161
+ constructor() {
4162
+ this.uiTooltip = input("", ...ngDevMode ? [{ debugName: "uiTooltip" }] : /* istanbul ignore next */ []);
4163
+ this.tooltipPosition = input("top", ...ngDevMode ? [{ debugName: "tooltipPosition" }] : /* istanbul ignore next */ []);
4164
+ this.host = inject(ElementRef).nativeElement;
4165
+ this.doc = inject(DOCUMENT);
4166
+ this.bubble = null;
4167
+ this.id = `ui-tooltip-${nextTooltipId++}`;
4168
+ inject(DestroyRef).onDestroy(() => this.hide());
4169
+ }
4170
+ show() {
4171
+ const text = this.uiTooltip();
4172
+ if (!text || this.bubble) return;
4173
+ const el = this.doc.createElement("div");
4174
+ el.id = this.id;
4175
+ el.setAttribute("role", "tooltip");
4176
+ el.textContent = text;
4177
+ Object.assign(el.style, {
4178
+ position: "fixed",
4179
+ zIndex: "10000",
4180
+ maxWidth: "280px",
4181
+ padding: "6px 10px",
4182
+ background: "#0f172a",
4183
+ color: "#fff",
4184
+ fontSize: "0.75rem",
4185
+ lineHeight: "1.4",
4186
+ borderRadius: "6px",
4187
+ boxShadow: "0 4px 12px rgba(15,23,42,.25)",
4188
+ whiteSpace: "pre-line",
4189
+ pointerEvents: "none",
4190
+ visibility: "hidden"
4191
+ });
4192
+ this.doc.body.appendChild(el);
4193
+ this.bubble = el;
4194
+ this.host.setAttribute("aria-describedby", this.id);
4195
+ const r = this.host.getBoundingClientRect();
4196
+ const b = el.getBoundingClientRect();
4197
+ const gap = 6;
4198
+ let top = this.tooltipPosition() === "top" ? r.top - b.height - gap : r.bottom + gap;
4199
+ if (top < 4) top = r.bottom + gap;
4200
+ else if (top + b.height > window.innerHeight - 4) top = r.top - b.height - gap;
4201
+ const left = Math.min(Math.max(4, r.left + r.width / 2 - b.width / 2), window.innerWidth - b.width - 4);
4202
+ el.style.top = `${top}px`;
4203
+ el.style.left = `${left}px`;
4204
+ el.style.visibility = "visible";
4205
+ }
4206
+ hide() {
4207
+ this.bubble?.remove();
4208
+ this.bubble = null;
4209
+ this.host.removeAttribute("aria-describedby");
4210
+ }
4211
+ static {
4212
+ this.ɵfac = i0.ɵɵngDeclareFactory({
4213
+ minVersion: "12.0.0",
4214
+ version: "22.2.2",
4215
+ ngImport: i0,
4216
+ type: TooltipDirective,
4217
+ deps: [],
4218
+ target: i0.ɵɵFactoryTarget.Directive
4219
+ });
4220
+ }
4221
+ static {
4222
+ this.ɵdir = i0.ɵɵngDeclareDirective({
4223
+ minVersion: "17.1.0",
4224
+ version: "22.2.2",
4225
+ type: TooltipDirective,
4226
+ isStandalone: true,
4227
+ selector: "[uiTooltip]",
4228
+ inputs: {
4229
+ uiTooltip: {
4230
+ classPropertyName: "uiTooltip",
4231
+ publicName: "uiTooltip",
4232
+ isSignal: true,
4233
+ isRequired: false,
4234
+ transformFunction: null
4235
+ },
4236
+ tooltipPosition: {
4237
+ classPropertyName: "tooltipPosition",
4238
+ publicName: "tooltipPosition",
4239
+ isSignal: true,
4240
+ isRequired: false,
4241
+ transformFunction: null
4242
+ }
4243
+ },
4244
+ host: { listeners: {
4245
+ "mouseenter": "show()",
4246
+ "mouseleave": "hide()",
4247
+ "focusin": "show()",
4248
+ "focusout": "hide()",
4249
+ "keydown.escape": "hide()",
4250
+ "click": "hide()"
4251
+ } },
4252
+ ngImport: i0
4253
+ });
4254
+ }
4255
+ };
4256
+ i0.ɵɵngDeclareClassMetadata({
4257
+ minVersion: "12.0.0",
4258
+ version: "22.2.2",
4259
+ ngImport: i0,
4260
+ type: TooltipDirective,
4261
+ decorators: [{
4262
+ type: Directive,
4263
+ args: [{
4264
+ selector: "[uiTooltip]",
4265
+ standalone: true,
4266
+ host: {
4267
+ "(mouseenter)": "show()",
4268
+ "(mouseleave)": "hide()",
4269
+ "(focusin)": "show()",
4270
+ "(focusout)": "hide()",
4271
+ "(keydown.escape)": "hide()",
4272
+ "(click)": "hide()"
4273
+ }
4274
+ }]
4275
+ }],
4276
+ ctorParameters: () => [],
4277
+ propDecorators: {
4278
+ uiTooltip: [{
4279
+ type: i0.Input,
4280
+ args: [{
4281
+ isSignal: true,
4282
+ alias: "uiTooltip",
4283
+ required: false
4284
+ }]
4285
+ }],
4286
+ tooltipPosition: [{
4287
+ type: i0.Input,
4288
+ args: [{
4289
+ isSignal: true,
4290
+ alias: "tooltipPosition",
4291
+ required: false
4292
+ }]
4293
+ }]
4294
+ }
4295
+ });
4296
+ const EXTRA_ICONS = {
4297
+ "delete": "M3 6h18 M8 6V4a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v2 M5 6l1 14a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2l1-14 M10 11v6 M14 11v6",
4298
+ "add": "M12 5v14 M5 12h14",
4299
+ "close": "M18 6L6 18 M6 6l12 12",
4300
+ "check": "M20 6L9 17l-5-5",
4301
+ "upload": "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4 M17 8l-5-5-5 5 M12 3v12",
4302
+ "image": "M19 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V5a2 2 0 0 0-2-2z M8.5 8.5a1.5 1.5 0 1 0 0 3 1.5 1.5 0 0 0 0-3z M21 15l-5-5L5 21",
4303
+ "chevron-up": "M18 15l-6-6-6 6",
4304
+ "chevron-down": "M6 9l6 6 6-6",
4305
+ "arrow-left": "M19 12H5 M12 19l-7-7 7-7",
4306
+ "bell": "M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9 M13.73 21a2 2 0 0 1-3.46 0",
4307
+ "print": "M6 9V2h12v7 M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2 M6 14h12v8H6z",
4308
+ "shield": "M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z",
4309
+ "lock": "M5 11h14a2 2 0 0 1 2 2v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-7a2 2 0 0 1 2-2z M7 11V7a5 5 0 0 1 10 0v4",
4310
+ "arrow-up": "M12 19V5 M5 12l7-7 7 7",
4311
+ "arrow-down": "M12 5v14 M19 12l-7 7-7-7",
4312
+ "arrow-right": "M5 12h14 M12 5l7 7-7 7",
4313
+ "document": "M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z M14 2v6h6 M16 13H8 M16 17H8 M10 9H8",
4314
+ "grip": "M9 5h.01 M15 5h.01 M9 12h.01 M15 12h.01 M9 19h.01 M15 19h.01",
4315
+ "card": "M3 4h18a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2z M1 10h22",
4316
+ "view-off": "M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z M12 9a3 3 0 1 0 0 6 3 3 0 0 0 0-6z M3 3l18 18",
4317
+ "bank": "M3 21h18 M3 10h18 M5 6l7-3 7 3 M4 10v11 M20 10v11 M8 14v3 M12 14v3 M16 14v3"
4318
+ };
4319
+ function iconPath(name) {
4320
+ return Object.prototype.hasOwnProperty.call(EXTRA_ICONS, name) ? EXTRA_ICONS[name] : builtInActionIcon(name);
4321
+ }
4322
+ var IconComponent = class IconComponent {
4323
+ constructor() {
4324
+ this.name = input.required(...ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []);
4325
+ this.tooltip = input("", ...ngDevMode ? [{ debugName: "tooltip" }] : /* istanbul ignore next */ []);
4326
+ this.ariaLabel = input("", ...ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []);
4327
+ this.size = input(16, ...ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []);
4328
+ this.variant = input("default", ...ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []);
4329
+ this.disabled = input(false, ...ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []);
4330
+ this.loading = input(false, ...ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []);
4331
+ this.interactive = input(true, ...ngDevMode ? [{ debugName: "interactive" }] : /* istanbul ignore next */ []);
4332
+ this.iconClick = output();
4333
+ this.accessibleName = computed(() => this.ariaLabel() || this.tooltip(), ...ngDevMode ? [{ debugName: "accessibleName" }] : /* istanbul ignore next */ []);
4334
+ this.path = computed(() => iconPath(this.name()), ...ngDevMode ? [{ debugName: "path" }] : /* istanbul ignore next */ []);
4335
+ }
4336
+ onClick(event) {
4337
+ event.stopPropagation();
4338
+ this.iconClick.emit(event);
4339
+ }
4340
+ static {
4341
+ this.ɵfac = i0.ɵɵngDeclareFactory({
4342
+ minVersion: "12.0.0",
4343
+ version: "22.2.2",
4344
+ ngImport: i0,
4345
+ type: IconComponent,
4346
+ deps: [],
4347
+ target: i0.ɵɵFactoryTarget.Component
4348
+ });
4349
+ }
4350
+ static {
4351
+ this.ɵcmp = i0.ɵɵngDeclareComponent({
4352
+ minVersion: "17.0.0",
4353
+ version: "22.2.2",
4354
+ type: IconComponent,
4355
+ isStandalone: true,
4356
+ selector: "ui-icon",
4357
+ inputs: {
4358
+ name: {
4359
+ classPropertyName: "name",
4360
+ publicName: "name",
4361
+ isSignal: true,
4362
+ isRequired: true,
4363
+ transformFunction: null
4364
+ },
4365
+ tooltip: {
4366
+ classPropertyName: "tooltip",
4367
+ publicName: "tooltip",
4368
+ isSignal: true,
4369
+ isRequired: false,
4370
+ transformFunction: null
4371
+ },
4372
+ ariaLabel: {
4373
+ classPropertyName: "ariaLabel",
4374
+ publicName: "ariaLabel",
4375
+ isSignal: true,
4376
+ isRequired: false,
4377
+ transformFunction: null
4378
+ },
4379
+ size: {
4380
+ classPropertyName: "size",
4381
+ publicName: "size",
4382
+ isSignal: true,
4383
+ isRequired: false,
4384
+ transformFunction: null
4385
+ },
4386
+ variant: {
4387
+ classPropertyName: "variant",
4388
+ publicName: "variant",
4389
+ isSignal: true,
4390
+ isRequired: false,
4391
+ transformFunction: null
4392
+ },
4393
+ disabled: {
4394
+ classPropertyName: "disabled",
4395
+ publicName: "disabled",
4396
+ isSignal: true,
4397
+ isRequired: false,
4398
+ transformFunction: null
4399
+ },
4400
+ loading: {
4401
+ classPropertyName: "loading",
4402
+ publicName: "loading",
4403
+ isSignal: true,
4404
+ isRequired: false,
4405
+ transformFunction: null
4406
+ },
4407
+ interactive: {
4408
+ classPropertyName: "interactive",
4409
+ publicName: "interactive",
4410
+ isSignal: true,
4411
+ isRequired: false,
4412
+ transformFunction: null
4413
+ }
4414
+ },
4415
+ outputs: { iconClick: "iconClick" },
4416
+ ngImport: i0,
4417
+ template: `
4418
+ @if (interactive()) {
4419
+ <button type="button" class="icon-btn" [class.danger]="variant() === 'danger'"
4420
+ [class.loading]="loading()" [disabled]="disabled() || loading()" [attr.aria-busy]="loading() ? 'true' : null"
4421
+ [attr.aria-label]="accessibleName() || null" [uiTooltip]="tooltip()" (click)="onClick($event)">
4422
+ <ng-container *ngTemplateOutlet="glyph" />
4423
+ </button>
4424
+ } @else {
4425
+ <span class="icon-static" [class.danger]="variant() === 'danger'" [attr.aria-busy]="loading() ? 'true' : null"
4426
+ [attr.role]="accessibleName() ? 'img' : null" [attr.aria-label]="accessibleName() || null" [uiTooltip]="tooltip()" [attr.aria-hidden]="accessibleName() ? null : 'true'">
4427
+ <ng-container *ngTemplateOutlet="glyph" />
4428
+ </span>
4429
+ }
4430
+ <ng-template #glyph>
4431
+ @if (loading()) {
4432
+ <span class="spinner" [style.width.px]="size()" [style.height.px]="size()" aria-hidden="true"></span>
4433
+ } @else if (path(); as d) {
4434
+ <svg viewBox="0 0 24 24" [attr.width]="size()" [attr.height]="size()" fill="none" stroke="currentColor"
4435
+ stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">
4436
+ <path [attr.d]="d" />
4437
+ </svg>
4438
+ }
4439
+ </ng-template>
4440
+ `,
4441
+ isInline: true,
4442
+ styles: [":host{display:inline-flex}.icon-static{display:inline-flex;align-items:center;justify-content:center;color:inherit}.icon-static.danger{color:#b91c1c}.icon-static svg{display:block}.icon-btn{position:relative;display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border:none;border-radius:6px;background:transparent;color:#475569;cursor:pointer;-webkit-appearance:none;appearance:none;font:inherit;transition:background .15s ease,color .15s ease}.icon-btn:hover:not(:disabled){background:#f1f5f9;color:#0f172a}.icon-btn.danger{color:#b91c1c}.icon-btn.danger:hover:not(:disabled){background:#fef2f2;color:#991b1b}.icon-btn:focus-visible{outline:2px solid #2563eb;outline-offset:2px}.icon-btn:disabled{opacity:.5;cursor:not-allowed}.icon-btn.loading:disabled{opacity:1;cursor:progress}.spinner{display:block;box-sizing:border-box;border:2px solid rgba(100,116,139,.3);border-top-color:currentColor;border-radius:50%;animation:ui-icon-spin .6s linear infinite}@keyframes ui-icon-spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){.spinner{animation-duration:2s}}.icon-btn:after{content:\"\";position:absolute;inset:-8px}\n"],
4443
+ dependencies: [{
4444
+ kind: "directive",
4445
+ type: NgTemplateOutlet,
4446
+ selector: "[ngTemplateOutlet]",
4447
+ inputs: [
4448
+ "ngTemplateOutletContext",
4449
+ "ngTemplateOutlet",
4450
+ "ngTemplateOutletInjector"
4451
+ ]
4452
+ }, {
4453
+ kind: "directive",
4454
+ type: TooltipDirective,
4455
+ selector: "[uiTooltip]",
4456
+ inputs: ["uiTooltip", "tooltipPosition"]
4457
+ }],
4458
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
4459
+ });
4460
+ }
4461
+ };
4462
+ i0.ɵɵngDeclareClassMetadata({
4463
+ minVersion: "12.0.0",
4464
+ version: "22.2.2",
4465
+ ngImport: i0,
4466
+ type: IconComponent,
4467
+ decorators: [{
4468
+ type: Component,
4469
+ args: [{
4470
+ selector: "ui-icon",
4471
+ standalone: true,
4472
+ imports: [NgTemplateOutlet, TooltipDirective],
4473
+ changeDetection: ChangeDetectionStrategy.OnPush,
4474
+ template: `
4475
+ @if (interactive()) {
4476
+ <button type="button" class="icon-btn" [class.danger]="variant() === 'danger'"
4477
+ [class.loading]="loading()" [disabled]="disabled() || loading()" [attr.aria-busy]="loading() ? 'true' : null"
4478
+ [attr.aria-label]="accessibleName() || null" [uiTooltip]="tooltip()" (click)="onClick($event)">
4479
+ <ng-container *ngTemplateOutlet="glyph" />
4480
+ </button>
4481
+ } @else {
4482
+ <span class="icon-static" [class.danger]="variant() === 'danger'" [attr.aria-busy]="loading() ? 'true' : null"
4483
+ [attr.role]="accessibleName() ? 'img' : null" [attr.aria-label]="accessibleName() || null" [uiTooltip]="tooltip()" [attr.aria-hidden]="accessibleName() ? null : 'true'">
4484
+ <ng-container *ngTemplateOutlet="glyph" />
4485
+ </span>
4486
+ }
4487
+ <ng-template #glyph>
4488
+ @if (loading()) {
4489
+ <span class="spinner" [style.width.px]="size()" [style.height.px]="size()" aria-hidden="true"></span>
4490
+ } @else if (path(); as d) {
4491
+ <svg viewBox="0 0 24 24" [attr.width]="size()" [attr.height]="size()" fill="none" stroke="currentColor"
4492
+ stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">
4493
+ <path [attr.d]="d" />
4494
+ </svg>
4495
+ }
4496
+ </ng-template>
4497
+ `,
4498
+ styles: [":host{display:inline-flex}.icon-static{display:inline-flex;align-items:center;justify-content:center;color:inherit}.icon-static.danger{color:#b91c1c}.icon-static svg{display:block}.icon-btn{position:relative;display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border:none;border-radius:6px;background:transparent;color:#475569;cursor:pointer;-webkit-appearance:none;appearance:none;font:inherit;transition:background .15s ease,color .15s ease}.icon-btn:hover:not(:disabled){background:#f1f5f9;color:#0f172a}.icon-btn.danger{color:#b91c1c}.icon-btn.danger:hover:not(:disabled){background:#fef2f2;color:#991b1b}.icon-btn:focus-visible{outline:2px solid #2563eb;outline-offset:2px}.icon-btn:disabled{opacity:.5;cursor:not-allowed}.icon-btn.loading:disabled{opacity:1;cursor:progress}.spinner{display:block;box-sizing:border-box;border:2px solid rgba(100,116,139,.3);border-top-color:currentColor;border-radius:50%;animation:ui-icon-spin .6s linear infinite}@keyframes ui-icon-spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){.spinner{animation-duration:2s}}.icon-btn:after{content:\"\";position:absolute;inset:-8px}\n"]
4499
+ }]
4500
+ }],
4501
+ propDecorators: {
4502
+ name: [{
4503
+ type: i0.Input,
4504
+ args: [{
4505
+ isSignal: true,
4506
+ alias: "name",
4507
+ required: true
4508
+ }]
4509
+ }],
4510
+ tooltip: [{
4511
+ type: i0.Input,
4512
+ args: [{
4513
+ isSignal: true,
4514
+ alias: "tooltip",
4515
+ required: false
4516
+ }]
4517
+ }],
4518
+ ariaLabel: [{
4519
+ type: i0.Input,
4520
+ args: [{
4521
+ isSignal: true,
4522
+ alias: "ariaLabel",
4523
+ required: false
4524
+ }]
4525
+ }],
4526
+ size: [{
4527
+ type: i0.Input,
4528
+ args: [{
4529
+ isSignal: true,
4530
+ alias: "size",
4531
+ required: false
4532
+ }]
4533
+ }],
4534
+ variant: [{
4535
+ type: i0.Input,
4536
+ args: [{
4537
+ isSignal: true,
4538
+ alias: "variant",
4539
+ required: false
4540
+ }]
4541
+ }],
4542
+ disabled: [{
4543
+ type: i0.Input,
4544
+ args: [{
4545
+ isSignal: true,
4546
+ alias: "disabled",
4547
+ required: false
4548
+ }]
4549
+ }],
4550
+ loading: [{
4551
+ type: i0.Input,
4552
+ args: [{
4553
+ isSignal: true,
4554
+ alias: "loading",
4555
+ required: false
4556
+ }]
4557
+ }],
4558
+ interactive: [{
4559
+ type: i0.Input,
4560
+ args: [{
4561
+ isSignal: true,
4562
+ alias: "interactive",
4563
+ required: false
4564
+ }]
4565
+ }],
4566
+ iconClick: [{
4567
+ type: i0.Output,
4568
+ args: ["iconClick"]
4569
+ }]
4570
+ }
4571
+ });
4572
+ const DEFAULT_PASSWORD_RULES = [
4573
+ {
4574
+ id: "length",
4575
+ label: "At least 8 characters",
4576
+ test: (p) => p.length >= 8
4577
+ },
4578
+ {
4579
+ id: "uppercase",
4580
+ label: "One uppercase letter",
4581
+ test: (p) => /[A-Z]/.test(p)
4582
+ },
4583
+ {
4584
+ id: "lowercase",
4585
+ label: "One lowercase letter",
4586
+ test: (p) => /[a-z]/.test(p)
4587
+ },
4588
+ {
4589
+ id: "digit",
4590
+ label: "One digit",
4591
+ test: (p) => /[0-9]/.test(p)
4592
+ },
4593
+ {
4594
+ id: "special",
4595
+ label: "One special character (!@#$%^&*...)",
4596
+ test: (p) => /[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]/.test(p)
4597
+ }
4598
+ ];
4599
+ function passwordMeetsRules(password, rules = DEFAULT_PASSWORD_RULES) {
4600
+ return rules.every((r) => r.test(password));
4601
+ }
4602
+ var PasswordRequirementsComponent = class PasswordRequirementsComponent {
4603
+ constructor() {
4604
+ this.value = input("", ...ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []);
4605
+ this.rules = input(DEFAULT_PASSWORD_RULES, ...ngDevMode ? [{ debugName: "rules" }] : /* istanbul ignore next */ []);
4606
+ this.title = input("Password Requirements:", ...ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []);
4607
+ this._check = iconPath("check");
4608
+ this._results = computed(() => this.rules().map((r) => ({
4609
+ id: r.id,
4610
+ label: r.label,
4611
+ met: r.test(this.value() ?? "")
4612
+ })), ...ngDevMode ? [{ debugName: "_results" }] : /* istanbul ignore next */ []);
4613
+ }
4614
+ static {
4615
+ this.ɵfac = i0.ɵɵngDeclareFactory({
4616
+ minVersion: "12.0.0",
4617
+ version: "22.2.2",
4618
+ ngImport: i0,
4619
+ type: PasswordRequirementsComponent,
4620
+ deps: [],
4621
+ target: i0.ɵɵFactoryTarget.Component
4622
+ });
4623
+ }
4624
+ static {
4625
+ this.ɵcmp = i0.ɵɵngDeclareComponent({
4626
+ minVersion: "17.0.0",
4627
+ version: "22.2.2",
4628
+ type: PasswordRequirementsComponent,
4629
+ isStandalone: true,
4630
+ selector: "ui-password-requirements",
4631
+ inputs: {
4632
+ value: {
4633
+ classPropertyName: "value",
4634
+ publicName: "value",
4635
+ isSignal: true,
4636
+ isRequired: false,
4637
+ transformFunction: null
4638
+ },
4639
+ rules: {
4640
+ classPropertyName: "rules",
4641
+ publicName: "rules",
4642
+ isSignal: true,
4643
+ isRequired: false,
4644
+ transformFunction: null
4645
+ },
4646
+ title: {
4647
+ classPropertyName: "title",
4648
+ publicName: "title",
4649
+ isSignal: true,
4650
+ isRequired: false,
4651
+ transformFunction: null
4652
+ }
4653
+ },
4654
+ ngImport: i0,
4655
+ template: `
4656
+ <div class="pr" role="group" [attr.aria-label]="title()" data-testid="password-requirements">
4657
+ <p class="pr-title">{{ title() }}</p>
4658
+ <ul class="pr-list">
4659
+ @for (r of _results(); track r.id) {
4660
+ <li class="pr-item" [class.pr-met]="r.met" [attr.data-testid]="'password-requirement-' + r.id" [attr.data-met]="r.met">
4661
+ <svg class="pr-icon" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2.5"
4662
+ stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">
4663
+ @if (r.met) { <path [attr.d]="_check" /> } @else { <circle cx="12" cy="12" r="8" /> }
4664
+ </svg>
4665
+ <span>{{ r.label }}</span>
4666
+ <span class="pr-sr">{{ r.met ? ', met' : ', not met' }}</span>
4667
+ </li>
4668
+ }
4669
+ </ul>
4670
+ </div>
4671
+ `,
4672
+ isInline: true,
4673
+ styles: [":host{display:block}.pr-title{margin:0 0 6px;font-size:.8125rem;color:#64748b}.pr-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:4px}.pr-item{display:flex;align-items:center;gap:8px;font-size:.8125rem;line-height:1.3;color:#64748b;transition:color .15s}.pr-icon{flex:0 0 auto}.pr-met{color:#15803d;font-weight:500}.pr-sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}\n"],
4674
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
4675
+ });
4676
+ }
4677
+ };
4678
+ i0.ɵɵngDeclareClassMetadata({
4679
+ minVersion: "12.0.0",
4680
+ version: "22.2.2",
4681
+ ngImport: i0,
4682
+ type: PasswordRequirementsComponent,
4683
+ decorators: [{
4684
+ type: Component,
4685
+ args: [{
4686
+ selector: "ui-password-requirements",
4687
+ standalone: true,
4688
+ changeDetection: ChangeDetectionStrategy.OnPush,
4689
+ template: `
4690
+ <div class="pr" role="group" [attr.aria-label]="title()" data-testid="password-requirements">
4691
+ <p class="pr-title">{{ title() }}</p>
4692
+ <ul class="pr-list">
4693
+ @for (r of _results(); track r.id) {
4694
+ <li class="pr-item" [class.pr-met]="r.met" [attr.data-testid]="'password-requirement-' + r.id" [attr.data-met]="r.met">
4695
+ <svg class="pr-icon" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2.5"
4696
+ stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">
4697
+ @if (r.met) { <path [attr.d]="_check" /> } @else { <circle cx="12" cy="12" r="8" /> }
4698
+ </svg>
4699
+ <span>{{ r.label }}</span>
4700
+ <span class="pr-sr">{{ r.met ? ', met' : ', not met' }}</span>
4701
+ </li>
4702
+ }
4703
+ </ul>
4704
+ </div>
4705
+ `,
4706
+ styles: [":host{display:block}.pr-title{margin:0 0 6px;font-size:.8125rem;color:#64748b}.pr-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:4px}.pr-item{display:flex;align-items:center;gap:8px;font-size:.8125rem;line-height:1.3;color:#64748b;transition:color .15s}.pr-icon{flex:0 0 auto}.pr-met{color:#15803d;font-weight:500}.pr-sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}\n"]
4707
+ }]
4708
+ }],
4709
+ propDecorators: {
4710
+ value: [{
4711
+ type: i0.Input,
4712
+ args: [{
4713
+ isSignal: true,
4714
+ alias: "value",
4715
+ required: false
4716
+ }]
4717
+ }],
4718
+ rules: [{
4719
+ type: i0.Input,
4720
+ args: [{
4721
+ isSignal: true,
4722
+ alias: "rules",
4723
+ required: false
4724
+ }]
4725
+ }],
4726
+ title: [{
4727
+ type: i0.Input,
4728
+ args: [{
4729
+ isSignal: true,
4730
+ alias: "title",
4731
+ required: false
4732
+ }]
4733
+ }]
4734
+ }
4735
+ });
3915
4736
  var TextInputComponent = class TextInputComponent {
3916
4737
  static {
3917
4738
  this._EMAIL_RE = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
@@ -3921,6 +4742,9 @@ var TextInputComponent = class TextInputComponent {
3921
4742
  this.ariaLabel = input("", ...ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []);
3922
4743
  this.placeholder = input("", ...ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []);
3923
4744
  this.prefix = input("", ...ngDevMode ? [{ debugName: "prefix" }] : /* istanbul ignore next */ []);
4745
+ this.revealable = input(false, ...ngDevMode ? [{ debugName: "revealable" }] : /* istanbul ignore next */ []);
4746
+ this.passwordRequirements = input(false, ...ngDevMode ? [{ debugName: "passwordRequirements" }] : /* istanbul ignore next */ []);
4747
+ this.passwordRules = input(void 0, ...ngDevMode ? [{ debugName: "passwordRules" }] : /* istanbul ignore next */ []);
3924
4748
  this.type = input("text", ...ngDevMode ? [{ debugName: "type" }] : /* istanbul ignore next */ []);
3925
4749
  this.maxlength = input(void 0, ...ngDevMode ? [{ debugName: "maxlength" }] : /* istanbul ignore next */ []);
3926
4750
  this.required = input(false, ...ngDevMode ? [{ debugName: "required" }] : /* istanbul ignore next */ []);
@@ -3957,6 +4781,18 @@ var TextInputComponent = class TextInputComponent {
3957
4781
  if (this.type() === "number" && typeof step === "number" && Number.isFinite(step) && step > 0) return String(step);
3958
4782
  return this.type() === "number" && this.integer() ? "1" : null;
3959
4783
  }, ...ngDevMode ? [{ debugName: "_stepAttr" }] : /* istanbul ignore next */ []);
4784
+ this._revealable = computed(() => this.revealable() && this.type() === "password", ...ngDevMode ? [{ debugName: "_revealable" }] : /* istanbul ignore next */ []);
4785
+ this._shown = signal(false, ...ngDevMode ? [{ debugName: "_shown" }] : /* istanbul ignore next */ []);
4786
+ this._inputType = computed(() => this._revealable() && this._shown() ? "text" : this.type(), ...ngDevMode ? [{ debugName: "_inputType" }] : /* istanbul ignore next */ []);
4787
+ this._eyePath = iconPath("view");
4788
+ this._eyeOffPath = iconPath("view-off");
4789
+ this._showRequirements = computed(() => this.passwordRequirements() && this.type() === "password" && this._typed(), ...ngDevMode ? [{ debugName: "_showRequirements" }] : /* istanbul ignore next */ []);
4790
+ this._describedBy = computed(() => {
4791
+ const ids = [this._activeError() || this.hint() ? this._inputId + "-desc" : "", this._showRequirements() ? this._inputId + "-req" : ""].filter(Boolean);
4792
+ return ids.length ? ids.join(" ") : null;
4793
+ }, ...ngDevMode ? [{ debugName: "_describedBy" }] : /* istanbul ignore next */ []);
4794
+ this._typed = signal(false, ...ngDevMode ? [{ debugName: "_typed" }] : /* istanbul ignore next */ []);
4795
+ this._defaultRules = DEFAULT_PASSWORD_RULES;
3960
4796
  this._warned = false;
3961
4797
  this._formatting = computed(() => this.phoneFormat() || this.type() === "tel", ...ngDevMode ? [{ debugName: "_formatting" }] : /* istanbul ignore next */ []);
3962
4798
  this._issue = computed(() => this._check(this._value()), ...ngDevMode ? [{ debugName: "_issue" }] : /* istanbul ignore next */ []);
@@ -3983,6 +4819,7 @@ var TextInputComponent = class TextInputComponent {
3983
4819
  writeValue(val) {
3984
4820
  const text = val == null || typeof val === "number" && Number.isNaN(val) && this._numeric() ? "" : String(val);
3985
4821
  this._value.set(this._formatting() ? TextInputComponent._formatPhone(text) : text);
4822
+ if (text === "") this._typed.set(false);
3986
4823
  }
3987
4824
  validate(control) {
3988
4825
  const v = control.value;
@@ -4006,6 +4843,7 @@ var TextInputComponent = class TextInputComponent {
4006
4843
  this._cvaDisabled.set(d);
4007
4844
  }
4008
4845
  onInput(event) {
4846
+ this._typed.set(true);
4009
4847
  const input = event.target;
4010
4848
  const raw = input.value;
4011
4849
  let val = this._formatting() ? TextInputComponent._formatPhone(raw) : raw;
@@ -4147,6 +4985,27 @@ var TextInputComponent = class TextInputComponent {
4147
4985
  isRequired: false,
4148
4986
  transformFunction: null
4149
4987
  },
4988
+ revealable: {
4989
+ classPropertyName: "revealable",
4990
+ publicName: "revealable",
4991
+ isSignal: true,
4992
+ isRequired: false,
4993
+ transformFunction: null
4994
+ },
4995
+ passwordRequirements: {
4996
+ classPropertyName: "passwordRequirements",
4997
+ publicName: "passwordRequirements",
4998
+ isSignal: true,
4999
+ isRequired: false,
5000
+ transformFunction: null
5001
+ },
5002
+ passwordRules: {
5003
+ classPropertyName: "passwordRules",
5004
+ publicName: "passwordRules",
5005
+ isSignal: true,
5006
+ isRequired: false,
5007
+ transformFunction: null
5008
+ },
4150
5009
  type: {
4151
5010
  classPropertyName: "type",
4152
5011
  publicName: "type",
@@ -4300,7 +5159,7 @@ var TextInputComponent = class TextInputComponent {
4300
5159
  ngImport: i0,
4301
5160
  template: `
4302
5161
  <div class="ti-field" [class.ti-error]="_activeError()" [class.ti-disabled]="disabled()"
4303
- [class.ti-prefixed]="!!prefix()" [style.--ti-input-row]="prefix() ? (label() ? 2 : 1) : null">
5162
+ [class.ti-prefixed]="!!prefix() || _revealable()" [style.--ti-input-row]="(prefix() || _revealable()) ? (label() ? 2 : 1) : null">
4304
5163
  @if (label()) {
4305
5164
  <label class="ti-label" [for]="_inputId">
4306
5165
  {{ label() }}
@@ -4310,8 +5169,9 @@ var TextInputComponent = class TextInputComponent {
4310
5169
  <input
4311
5170
  class="ti-input"
4312
5171
  [style.padding-left]="_prefixPadding()"
5172
+ [style.padding-right]="_revealable() ? '44px' : null"
4313
5173
  [id]="_inputId"
4314
- [type]="type()"
5174
+ [type]="_inputType()"
4315
5175
  [attr.inputmode]="inputmode() || (type() === 'tel' ? 'tel' : integer() ? 'numeric' : null)"
4316
5176
  [placeholder]="placeholder()"
4317
5177
  [value]="_value()"
@@ -4323,7 +5183,7 @@ var TextInputComponent = class TextInputComponent {
4323
5183
  [attr.required]="required() || null"
4324
5184
  [attr.aria-label]="ariaLabel() || null"
4325
5185
  [attr.aria-invalid]="_activeError() ? 'true' : null"
4326
- [attr.aria-describedby]="(_activeError() || hint()) ? _inputId + '-desc' : null"
5186
+ [attr.aria-describedby]="_describedBy()"
4327
5187
  (input)="onInput($event)"
4328
5188
  (focus)="onFocus()"
4329
5189
  (blur)="onBlur()"
@@ -4332,6 +5192,18 @@ var TextInputComponent = class TextInputComponent {
4332
5192
  <!-- Optional leading mark ("$"): a sibling after the input, laid over it by the grid of .ti-prefixed, so toggling it never recreates the input (focus and caret stay). -->
4333
5193
  <span class="ti-prefix" aria-hidden="true">{{ prefix() }}</span>
4334
5194
  }
5195
+ @if (_revealable()) {
5196
+ <!-- Show / hide toggle laid over the end of the input by the grid of .ti-prefixed. The name stays "Show password"; aria-pressed carries the state. -->
5197
+ <button type="button" class="ti-reveal" data-testid="ti-reveal" aria-label="Show password"
5198
+ [attr.aria-pressed]="_shown()" [attr.aria-controls]="_inputId" [disabled]="disabled()" (click)="_shown.set(!_shown())">
5199
+ <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">
5200
+ <path [attr.d]="_shown() ? _eyeOffPath : _eyePath" />
5201
+ </svg>
5202
+ </button>
5203
+ }
5204
+ @if (_showRequirements()) {
5205
+ <ui-password-requirements [attr.id]="_inputId + '-req'" [value]="_value()" [rules]="passwordRules() ?? _defaultRules" />
5206
+ }
4335
5207
  @if (_activeError()) {
4336
5208
  <p class="ti-desc ti-desc-error" [id]="_inputId + '-desc'" role="alert">{{ _activeError() }}</p>
4337
5209
  } @else if (hint()) {
@@ -4340,7 +5212,17 @@ var TextInputComponent = class TextInputComponent {
4340
5212
  </div>
4341
5213
  `,
4342
5214
  isInline: true,
4343
- styles: [":host{display:block}.ti-field{display:flex;flex-direction:column;gap:6px}.ti-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.ti-required{color:#ef4444;margin-left:2px}.ti-prefixed{display:grid;grid-template-columns:minmax(0,1fr)}.ti-prefixed .ti-input{grid-row:var(--ti-input-row);grid-column:1}.ti-prefix{grid-row:var(--ti-input-row);grid-column:1;justify-self:start;align-self:center;margin-left:12px;font-size:.875rem;line-height:1;color:#64748b;pointer-events:none}@media(max-width:480px){.ti-prefix{font-size:1rem}}.ti-disabled .ti-prefix{opacity:.5}.ti-input{width:100%;box-sizing:border-box;padding:9px 12px;font-size:.875rem;font-family:inherit;color:#1e293b;background:#fff;border:1px solid #e2e8f0;border-radius:8px;outline:none;transition:border-color .15s,box-shadow .15s}.ti-input::placeholder{color:#94a3b8}.ti-input:focus{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.ti-input:read-only{background:#f8fafc;cursor:default}.ti-error .ti-input{border-color:#ef4444}.ti-error .ti-input:focus{box-shadow:0 0 0 3px #ef44441f}.ti-disabled .ti-input{opacity:.5;cursor:not-allowed}.ti-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.ti-desc-error{color:#ef4444}@media(max-width:480px){.ti-input{font-size:1rem}}@media(pointer:coarse),(max-width:480px){.ti-input{min-height:44px}}\n"],
5215
+ styles: [":host{display:block}.ti-field{display:flex;flex-direction:column;gap:6px}.ti-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.ti-required{color:#dc2626;margin-left:2px}.ti-prefixed{display:grid;grid-template-columns:minmax(0,1fr)}.ti-prefixed .ti-input{grid-row:var(--ti-input-row);grid-column:1}.ti-prefix{grid-row:var(--ti-input-row);grid-column:1;justify-self:start;align-self:center;margin-left:12px;font-size:.875rem;line-height:1;color:#64748b;pointer-events:none}@media(max-width:480px){.ti-prefix{font-size:1rem}}.ti-disabled .ti-prefix{opacity:.5}.ti-reveal{grid-row:var(--ti-input-row);grid-column:1;justify-self:end;align-self:center;margin-right:6px;position:relative;display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;border:0;border-radius:6px;background:transparent;color:#64748b;cursor:pointer}.ti-reveal:hover:not(:disabled){color:#1e293b;background:#f1f5f9}.ti-reveal:focus-visible{outline:2px solid #3b82f6;outline-offset:0}.ti-reveal:disabled{opacity:.5;cursor:not-allowed}@media(pointer:coarse),(max-width:480px){.ti-reveal{width:44px;height:44px;margin-right:0}}.ti-input{width:100%;box-sizing:border-box;padding:9px 12px;font-size:.875rem;font-family:inherit;color:#1e293b;background:#fff;border:1px solid #e2e8f0;border-radius:8px;outline:none;transition:border-color .15s,box-shadow .15s}.ti-input::placeholder{color:#94a3b8}.ti-input:focus{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.ti-input:read-only{background:#f8fafc;cursor:default}.ti-error .ti-input{border-color:#ef4444}.ti-error .ti-input:focus{box-shadow:0 0 0 3px #ef44441f}.ti-disabled .ti-input{opacity:.5;cursor:not-allowed}.ti-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.ti-desc-error{color:#dc2626}@media(max-width:480px){.ti-input{font-size:1rem}}@media(pointer:coarse),(max-width:480px){.ti-input{min-height:44px}}\n"],
5216
+ dependencies: [{
5217
+ kind: "component",
5218
+ type: PasswordRequirementsComponent,
5219
+ selector: "ui-password-requirements",
5220
+ inputs: [
5221
+ "value",
5222
+ "rules",
5223
+ "title"
5224
+ ]
5225
+ }],
4344
5226
  changeDetection: i0.ChangeDetectionStrategy.OnPush
4345
5227
  });
4346
5228
  }
@@ -4356,6 +5238,7 @@ i0.ɵɵngDeclareClassMetadata({
4356
5238
  selector: "ui-text-input",
4357
5239
  standalone: true,
4358
5240
  changeDetection: ChangeDetectionStrategy.OnPush,
5241
+ imports: [PasswordRequirementsComponent],
4359
5242
  providers: [
4360
5243
  {
4361
5244
  provide: NG_VALUE_ACCESSOR,
@@ -4374,7 +5257,7 @@ i0.ɵɵngDeclareClassMetadata({
4374
5257
  ],
4375
5258
  template: `
4376
5259
  <div class="ti-field" [class.ti-error]="_activeError()" [class.ti-disabled]="disabled()"
4377
- [class.ti-prefixed]="!!prefix()" [style.--ti-input-row]="prefix() ? (label() ? 2 : 1) : null">
5260
+ [class.ti-prefixed]="!!prefix() || _revealable()" [style.--ti-input-row]="(prefix() || _revealable()) ? (label() ? 2 : 1) : null">
4378
5261
  @if (label()) {
4379
5262
  <label class="ti-label" [for]="_inputId">
4380
5263
  {{ label() }}
@@ -4384,8 +5267,9 @@ i0.ɵɵngDeclareClassMetadata({
4384
5267
  <input
4385
5268
  class="ti-input"
4386
5269
  [style.padding-left]="_prefixPadding()"
5270
+ [style.padding-right]="_revealable() ? '44px' : null"
4387
5271
  [id]="_inputId"
4388
- [type]="type()"
5272
+ [type]="_inputType()"
4389
5273
  [attr.inputmode]="inputmode() || (type() === 'tel' ? 'tel' : integer() ? 'numeric' : null)"
4390
5274
  [placeholder]="placeholder()"
4391
5275
  [value]="_value()"
@@ -4397,7 +5281,7 @@ i0.ɵɵngDeclareClassMetadata({
4397
5281
  [attr.required]="required() || null"
4398
5282
  [attr.aria-label]="ariaLabel() || null"
4399
5283
  [attr.aria-invalid]="_activeError() ? 'true' : null"
4400
- [attr.aria-describedby]="(_activeError() || hint()) ? _inputId + '-desc' : null"
5284
+ [attr.aria-describedby]="_describedBy()"
4401
5285
  (input)="onInput($event)"
4402
5286
  (focus)="onFocus()"
4403
5287
  (blur)="onBlur()"
@@ -4406,6 +5290,18 @@ i0.ɵɵngDeclareClassMetadata({
4406
5290
  <!-- Optional leading mark ("$"): a sibling after the input, laid over it by the grid of .ti-prefixed, so toggling it never recreates the input (focus and caret stay). -->
4407
5291
  <span class="ti-prefix" aria-hidden="true">{{ prefix() }}</span>
4408
5292
  }
5293
+ @if (_revealable()) {
5294
+ <!-- Show / hide toggle laid over the end of the input by the grid of .ti-prefixed. The name stays "Show password"; aria-pressed carries the state. -->
5295
+ <button type="button" class="ti-reveal" data-testid="ti-reveal" aria-label="Show password"
5296
+ [attr.aria-pressed]="_shown()" [attr.aria-controls]="_inputId" [disabled]="disabled()" (click)="_shown.set(!_shown())">
5297
+ <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">
5298
+ <path [attr.d]="_shown() ? _eyeOffPath : _eyePath" />
5299
+ </svg>
5300
+ </button>
5301
+ }
5302
+ @if (_showRequirements()) {
5303
+ <ui-password-requirements [attr.id]="_inputId + '-req'" [value]="_value()" [rules]="passwordRules() ?? _defaultRules" />
5304
+ }
4409
5305
  @if (_activeError()) {
4410
5306
  <p class="ti-desc ti-desc-error" [id]="_inputId + '-desc'" role="alert">{{ _activeError() }}</p>
4411
5307
  } @else if (hint()) {
@@ -4413,7 +5309,7 @@ i0.ɵɵngDeclareClassMetadata({
4413
5309
  }
4414
5310
  </div>
4415
5311
  `,
4416
- styles: [":host{display:block}.ti-field{display:flex;flex-direction:column;gap:6px}.ti-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.ti-required{color:#ef4444;margin-left:2px}.ti-prefixed{display:grid;grid-template-columns:minmax(0,1fr)}.ti-prefixed .ti-input{grid-row:var(--ti-input-row);grid-column:1}.ti-prefix{grid-row:var(--ti-input-row);grid-column:1;justify-self:start;align-self:center;margin-left:12px;font-size:.875rem;line-height:1;color:#64748b;pointer-events:none}@media(max-width:480px){.ti-prefix{font-size:1rem}}.ti-disabled .ti-prefix{opacity:.5}.ti-input{width:100%;box-sizing:border-box;padding:9px 12px;font-size:.875rem;font-family:inherit;color:#1e293b;background:#fff;border:1px solid #e2e8f0;border-radius:8px;outline:none;transition:border-color .15s,box-shadow .15s}.ti-input::placeholder{color:#94a3b8}.ti-input:focus{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.ti-input:read-only{background:#f8fafc;cursor:default}.ti-error .ti-input{border-color:#ef4444}.ti-error .ti-input:focus{box-shadow:0 0 0 3px #ef44441f}.ti-disabled .ti-input{opacity:.5;cursor:not-allowed}.ti-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.ti-desc-error{color:#ef4444}@media(max-width:480px){.ti-input{font-size:1rem}}@media(pointer:coarse),(max-width:480px){.ti-input{min-height:44px}}\n"]
5312
+ styles: [":host{display:block}.ti-field{display:flex;flex-direction:column;gap:6px}.ti-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.ti-required{color:#dc2626;margin-left:2px}.ti-prefixed{display:grid;grid-template-columns:minmax(0,1fr)}.ti-prefixed .ti-input{grid-row:var(--ti-input-row);grid-column:1}.ti-prefix{grid-row:var(--ti-input-row);grid-column:1;justify-self:start;align-self:center;margin-left:12px;font-size:.875rem;line-height:1;color:#64748b;pointer-events:none}@media(max-width:480px){.ti-prefix{font-size:1rem}}.ti-disabled .ti-prefix{opacity:.5}.ti-reveal{grid-row:var(--ti-input-row);grid-column:1;justify-self:end;align-self:center;margin-right:6px;position:relative;display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;border:0;border-radius:6px;background:transparent;color:#64748b;cursor:pointer}.ti-reveal:hover:not(:disabled){color:#1e293b;background:#f1f5f9}.ti-reveal:focus-visible{outline:2px solid #3b82f6;outline-offset:0}.ti-reveal:disabled{opacity:.5;cursor:not-allowed}@media(pointer:coarse),(max-width:480px){.ti-reveal{width:44px;height:44px;margin-right:0}}.ti-input{width:100%;box-sizing:border-box;padding:9px 12px;font-size:.875rem;font-family:inherit;color:#1e293b;background:#fff;border:1px solid #e2e8f0;border-radius:8px;outline:none;transition:border-color .15s,box-shadow .15s}.ti-input::placeholder{color:#94a3b8}.ti-input:focus{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.ti-input:read-only{background:#f8fafc;cursor:default}.ti-error .ti-input{border-color:#ef4444}.ti-error .ti-input:focus{box-shadow:0 0 0 3px #ef44441f}.ti-disabled .ti-input{opacity:.5;cursor:not-allowed}.ti-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.ti-desc-error{color:#dc2626}@media(max-width:480px){.ti-input{font-size:1rem}}@media(pointer:coarse),(max-width:480px){.ti-input{min-height:44px}}\n"]
4417
5313
  }]
4418
5314
  }],
4419
5315
  ctorParameters: () => [],
@@ -4450,6 +5346,30 @@ i0.ɵɵngDeclareClassMetadata({
4450
5346
  required: false
4451
5347
  }]
4452
5348
  }],
5349
+ revealable: [{
5350
+ type: i0.Input,
5351
+ args: [{
5352
+ isSignal: true,
5353
+ alias: "revealable",
5354
+ required: false
5355
+ }]
5356
+ }],
5357
+ passwordRequirements: [{
5358
+ type: i0.Input,
5359
+ args: [{
5360
+ isSignal: true,
5361
+ alias: "passwordRequirements",
5362
+ required: false
5363
+ }]
5364
+ }],
5365
+ passwordRules: [{
5366
+ type: i0.Input,
5367
+ args: [{
5368
+ isSignal: true,
5369
+ alias: "passwordRules",
5370
+ required: false
5371
+ }]
5372
+ }],
4453
5373
  type: [{
4454
5374
  type: i0.Input,
4455
5375
  args: [{
@@ -4992,7 +5912,8 @@ var TableToolbarComponent = class TableToolbarComponent {
4992
5912
  "bodyOverflow",
4993
5913
  "dialogTestId",
4994
5914
  "hideClose",
4995
- "closable"
5915
+ "closable",
5916
+ "returnFocusTo"
4996
5917
  ],
4997
5918
  outputs: ["close"]
4998
5919
  },
@@ -5066,6 +5987,9 @@ var TableToolbarComponent = class TableToolbarComponent {
5066
5987
  "ariaLabel",
5067
5988
  "placeholder",
5068
5989
  "prefix",
5990
+ "revealable",
5991
+ "passwordRequirements",
5992
+ "passwordRules",
5069
5993
  "type",
5070
5994
  "maxlength",
5071
5995
  "required",
@@ -5565,143 +6489,6 @@ function getEligibleIds(items, selectedIds, action, options = {}) {
5565
6489
  skippedCount: selected.length - eligible.length
5566
6490
  };
5567
6491
  }
5568
- let nextTooltipId = 0;
5569
- var TooltipDirective = class TooltipDirective {
5570
- constructor() {
5571
- this.uiTooltip = input("", ...ngDevMode ? [{ debugName: "uiTooltip" }] : /* istanbul ignore next */ []);
5572
- this.tooltipPosition = input("top", ...ngDevMode ? [{ debugName: "tooltipPosition" }] : /* istanbul ignore next */ []);
5573
- this.host = inject(ElementRef).nativeElement;
5574
- this.doc = inject(DOCUMENT);
5575
- this.bubble = null;
5576
- this.id = `ui-tooltip-${nextTooltipId++}`;
5577
- inject(DestroyRef).onDestroy(() => this.hide());
5578
- }
5579
- show() {
5580
- const text = this.uiTooltip();
5581
- if (!text || this.bubble) return;
5582
- const el = this.doc.createElement("div");
5583
- el.id = this.id;
5584
- el.setAttribute("role", "tooltip");
5585
- el.textContent = text;
5586
- Object.assign(el.style, {
5587
- position: "fixed",
5588
- zIndex: "10000",
5589
- maxWidth: "280px",
5590
- padding: "6px 10px",
5591
- background: "#0f172a",
5592
- color: "#fff",
5593
- fontSize: "0.75rem",
5594
- lineHeight: "1.4",
5595
- borderRadius: "6px",
5596
- boxShadow: "0 4px 12px rgba(15,23,42,.25)",
5597
- whiteSpace: "pre-line",
5598
- pointerEvents: "none",
5599
- visibility: "hidden"
5600
- });
5601
- this.doc.body.appendChild(el);
5602
- this.bubble = el;
5603
- this.host.setAttribute("aria-describedby", this.id);
5604
- const r = this.host.getBoundingClientRect();
5605
- const b = el.getBoundingClientRect();
5606
- const gap = 6;
5607
- let top = this.tooltipPosition() === "top" ? r.top - b.height - gap : r.bottom + gap;
5608
- if (top < 4) top = r.bottom + gap;
5609
- else if (top + b.height > window.innerHeight - 4) top = r.top - b.height - gap;
5610
- const left = Math.min(Math.max(4, r.left + r.width / 2 - b.width / 2), window.innerWidth - b.width - 4);
5611
- el.style.top = `${top}px`;
5612
- el.style.left = `${left}px`;
5613
- el.style.visibility = "visible";
5614
- }
5615
- hide() {
5616
- this.bubble?.remove();
5617
- this.bubble = null;
5618
- this.host.removeAttribute("aria-describedby");
5619
- }
5620
- static {
5621
- this.ɵfac = i0.ɵɵngDeclareFactory({
5622
- minVersion: "12.0.0",
5623
- version: "22.2.2",
5624
- ngImport: i0,
5625
- type: TooltipDirective,
5626
- deps: [],
5627
- target: i0.ɵɵFactoryTarget.Directive
5628
- });
5629
- }
5630
- static {
5631
- this.ɵdir = i0.ɵɵngDeclareDirective({
5632
- minVersion: "17.1.0",
5633
- version: "22.2.2",
5634
- type: TooltipDirective,
5635
- isStandalone: true,
5636
- selector: "[uiTooltip]",
5637
- inputs: {
5638
- uiTooltip: {
5639
- classPropertyName: "uiTooltip",
5640
- publicName: "uiTooltip",
5641
- isSignal: true,
5642
- isRequired: false,
5643
- transformFunction: null
5644
- },
5645
- tooltipPosition: {
5646
- classPropertyName: "tooltipPosition",
5647
- publicName: "tooltipPosition",
5648
- isSignal: true,
5649
- isRequired: false,
5650
- transformFunction: null
5651
- }
5652
- },
5653
- host: { listeners: {
5654
- "mouseenter": "show()",
5655
- "mouseleave": "hide()",
5656
- "focusin": "show()",
5657
- "focusout": "hide()",
5658
- "keydown.escape": "hide()",
5659
- "click": "hide()"
5660
- } },
5661
- ngImport: i0
5662
- });
5663
- }
5664
- };
5665
- i0.ɵɵngDeclareClassMetadata({
5666
- minVersion: "12.0.0",
5667
- version: "22.2.2",
5668
- ngImport: i0,
5669
- type: TooltipDirective,
5670
- decorators: [{
5671
- type: Directive,
5672
- args: [{
5673
- selector: "[uiTooltip]",
5674
- standalone: true,
5675
- host: {
5676
- "(mouseenter)": "show()",
5677
- "(mouseleave)": "hide()",
5678
- "(focusin)": "show()",
5679
- "(focusout)": "hide()",
5680
- "(keydown.escape)": "hide()",
5681
- "(click)": "hide()"
5682
- }
5683
- }]
5684
- }],
5685
- ctorParameters: () => [],
5686
- propDecorators: {
5687
- uiTooltip: [{
5688
- type: i0.Input,
5689
- args: [{
5690
- isSignal: true,
5691
- alias: "uiTooltip",
5692
- required: false
5693
- }]
5694
- }],
5695
- tooltipPosition: [{
5696
- type: i0.Input,
5697
- args: [{
5698
- isSignal: true,
5699
- alias: "tooltipPosition",
5700
- required: false
5701
- }]
5702
- }]
5703
- }
5704
- });
5705
6492
  var StarComponent = class StarComponent {
5706
6493
  constructor() {
5707
6494
  this.tooltip = input("", ...ngDevMode ? [{ debugName: "tooltip" }] : /* istanbul ignore next */ []);
@@ -5762,7 +6549,7 @@ var StarComponent = class StarComponent {
5762
6549
  ngImport: i0,
5763
6550
  template: `
5764
6551
  @if (interactive()) {
5765
- <button type="button" class="star star-btn" [class.star-off]="!filled()" [uiTooltip]="tooltip()"
6552
+ <button type="button" class="star star-btn" [class.star-off]="!filled()" [style.--star-size.px]="size()" [uiTooltip]="tooltip()"
5766
6553
  [attr.aria-label]="tooltip() || null" (click)="starClick.emit($event)">
5767
6554
  <ng-container *ngTemplateOutlet="shape" />
5768
6555
  </button>
@@ -5783,7 +6570,7 @@ var StarComponent = class StarComponent {
5783
6570
  </ng-template>
5784
6571
  `,
5785
6572
  isInline: true,
5786
- styles: [":host{display:inline-flex;vertical-align:middle;line-height:1}.star{display:inline-flex;align-items:center;justify-content:center;border-radius:3px}.star-btn{border:0;background:none;padding:0;margin:0;cursor:pointer;font:inherit}.star-off .star-shape{fill:none;stroke:#94a3b8;stroke-width:1.25}.star-btn.star-off:hover .star-shape{stroke:#64748b}.star:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.star-shape{fill:#f5b301;stroke:#d99a00;stroke-width:.75;stroke-linejoin:round}\n"],
6573
+ styles: [":host{display:inline-flex;vertical-align:middle;line-height:1}.star{display:inline-flex;align-items:center;justify-content:center;border-radius:3px}.star-btn{position:relative;border:0;background:none;padding:0;margin:0;cursor:pointer;font:inherit}@media(pointer:coarse){.star-btn:after{content:\"\";position:absolute;inset:min(-8px,calc((var(--star-size, 16px) - 44px) / 2))}}.star-off .star-shape{fill:none;stroke:#94a3b8;stroke-width:1.25}.star-btn.star-off:hover .star-shape{stroke:#64748b}.star:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.star-shape{fill:#f5b301;stroke:#d99a00;stroke-width:.75;stroke-linejoin:round}\n"],
5787
6574
  dependencies: [{
5788
6575
  kind: "directive",
5789
6576
  type: TooltipDirective,
@@ -5817,7 +6604,7 @@ i0.ɵɵngDeclareClassMetadata({
5817
6604
  imports: [TooltipDirective, NgTemplateOutlet],
5818
6605
  template: `
5819
6606
  @if (interactive()) {
5820
- <button type="button" class="star star-btn" [class.star-off]="!filled()" [uiTooltip]="tooltip()"
6607
+ <button type="button" class="star star-btn" [class.star-off]="!filled()" [style.--star-size.px]="size()" [uiTooltip]="tooltip()"
5821
6608
  [attr.aria-label]="tooltip() || null" (click)="starClick.emit($event)">
5822
6609
  <ng-container *ngTemplateOutlet="shape" />
5823
6610
  </button>
@@ -5837,7 +6624,7 @@ i0.ɵɵngDeclareClassMetadata({
5837
6624
  </svg>
5838
6625
  </ng-template>
5839
6626
  `,
5840
- styles: [":host{display:inline-flex;vertical-align:middle;line-height:1}.star{display:inline-flex;align-items:center;justify-content:center;border-radius:3px}.star-btn{border:0;background:none;padding:0;margin:0;cursor:pointer;font:inherit}.star-off .star-shape{fill:none;stroke:#94a3b8;stroke-width:1.25}.star-btn.star-off:hover .star-shape{stroke:#64748b}.star:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.star-shape{fill:#f5b301;stroke:#d99a00;stroke-width:.75;stroke-linejoin:round}\n"]
6627
+ styles: [":host{display:inline-flex;vertical-align:middle;line-height:1}.star{display:inline-flex;align-items:center;justify-content:center;border-radius:3px}.star-btn{position:relative;border:0;background:none;padding:0;margin:0;cursor:pointer;font:inherit}@media(pointer:coarse){.star-btn:after{content:\"\";position:absolute;inset:min(-8px,calc((var(--star-size, 16px) - 44px) / 2))}}.star-off .star-shape{fill:none;stroke:#94a3b8;stroke-width:1.25}.star-btn.star-off:hover .star-shape{stroke:#64748b}.star:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.star-shape{fill:#f5b301;stroke:#d99a00;stroke-width:.75;stroke-linejoin:round}\n"]
5841
6628
  }]
5842
6629
  }],
5843
6630
  propDecorators: {
@@ -6535,7 +7322,7 @@ var SelectComponent = class SelectComponent {
6535
7322
  </div>
6536
7323
  `,
6537
7324
  isInline: true,
6538
- styles: [":host{display:block}.sl-field{display:flex;flex-direction:column;gap:6px}.sl-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.sl-required{color:#ef4444;margin-left:2px}.sl-wrap{position:relative;display:flex;align-items:center}.sl-select{width:100%;box-sizing:border-box;padding:9px 32px 9px 12px;font-size:.875rem;font-family:inherit;color:#1e293b;background:#fff;border:1px solid #e2e8f0;border-radius:8px;outline:none;appearance:none;cursor:pointer;transition:border-color .15s,box-shadow .15s}.sl-select:focus{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.sl-error .sl-select{border-color:#ef4444}.sl-error .sl-select:focus{box-shadow:0 0 0 3px #ef44441f}.sl-disabled .sl-select{opacity:.5;cursor:not-allowed}.sl-select-sm{padding:6px 32px 6px 12px;font-size:.8125rem;border-radius:6px}.sl-chevron{position:absolute;right:10px;pointer-events:none;color:#94a3b8;flex-shrink:0}.sl-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.sl-desc-error{color:#ef4444}@media(max-width:480px){.sl-select{font-size:1rem}}@media(pointer:coarse),(max-width:480px){.sl-select,.sl-select-sm{min-height:44px}}\n"],
7325
+ styles: [":host{display:block}.sl-field{display:flex;flex-direction:column;gap:6px}.sl-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.sl-required{color:#dc2626;margin-left:2px}.sl-wrap{position:relative;display:flex;align-items:center}.sl-select{width:100%;box-sizing:border-box;padding:9px 32px 9px 12px;font-size:.875rem;font-family:inherit;color:#1e293b;background:#fff;border:1px solid #e2e8f0;border-radius:8px;outline:none;appearance:none;cursor:pointer;transition:border-color .15s,box-shadow .15s}.sl-select:focus{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.sl-error .sl-select{border-color:#ef4444}.sl-error .sl-select:focus{box-shadow:0 0 0 3px #ef44441f}.sl-disabled .sl-select{opacity:.5;cursor:not-allowed}.sl-select-sm{padding:6px 32px 6px 12px;font-size:.8125rem;border-radius:6px}.sl-chevron{position:absolute;right:10px;pointer-events:none;color:#94a3b8;flex-shrink:0}.sl-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.sl-desc-error{color:#dc2626}@media(max-width:480px){.sl-select{font-size:1rem}}@media(pointer:coarse),(max-width:480px){.sl-select,.sl-select-sm{min-height:44px}}\n"],
6539
7326
  changeDetection: i0.ChangeDetectionStrategy.OnPush
6540
7327
  });
6541
7328
  }
@@ -6605,7 +7392,7 @@ i0.ɵɵngDeclareClassMetadata({
6605
7392
  }
6606
7393
  </div>
6607
7394
  `,
6608
- styles: [":host{display:block}.sl-field{display:flex;flex-direction:column;gap:6px}.sl-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.sl-required{color:#ef4444;margin-left:2px}.sl-wrap{position:relative;display:flex;align-items:center}.sl-select{width:100%;box-sizing:border-box;padding:9px 32px 9px 12px;font-size:.875rem;font-family:inherit;color:#1e293b;background:#fff;border:1px solid #e2e8f0;border-radius:8px;outline:none;appearance:none;cursor:pointer;transition:border-color .15s,box-shadow .15s}.sl-select:focus{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.sl-error .sl-select{border-color:#ef4444}.sl-error .sl-select:focus{box-shadow:0 0 0 3px #ef44441f}.sl-disabled .sl-select{opacity:.5;cursor:not-allowed}.sl-select-sm{padding:6px 32px 6px 12px;font-size:.8125rem;border-radius:6px}.sl-chevron{position:absolute;right:10px;pointer-events:none;color:#94a3b8;flex-shrink:0}.sl-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.sl-desc-error{color:#ef4444}@media(max-width:480px){.sl-select{font-size:1rem}}@media(pointer:coarse),(max-width:480px){.sl-select,.sl-select-sm{min-height:44px}}\n"]
7395
+ styles: [":host{display:block}.sl-field{display:flex;flex-direction:column;gap:6px}.sl-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.sl-required{color:#dc2626;margin-left:2px}.sl-wrap{position:relative;display:flex;align-items:center}.sl-select{width:100%;box-sizing:border-box;padding:9px 32px 9px 12px;font-size:.875rem;font-family:inherit;color:#1e293b;background:#fff;border:1px solid #e2e8f0;border-radius:8px;outline:none;appearance:none;cursor:pointer;transition:border-color .15s,box-shadow .15s}.sl-select:focus{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.sl-error .sl-select{border-color:#ef4444}.sl-error .sl-select:focus{box-shadow:0 0 0 3px #ef44441f}.sl-disabled .sl-select{opacity:.5;cursor:not-allowed}.sl-select-sm{padding:6px 32px 6px 12px;font-size:.8125rem;border-radius:6px}.sl-chevron{position:absolute;right:10px;pointer-events:none;color:#94a3b8;flex-shrink:0}.sl-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.sl-desc-error{color:#dc2626}@media(max-width:480px){.sl-select{font-size:1rem}}@media(pointer:coarse),(max-width:480px){.sl-select,.sl-select-sm{min-height:44px}}\n"]
6609
7396
  }]
6610
7397
  }],
6611
7398
  ctorParameters: () => [],
@@ -7707,7 +8494,7 @@ var ImportExportComponent = class ImportExportComponent {
7707
8494
  </ui-modal>
7708
8495
  `,
7709
8496
  isInline: true,
7710
- styles: [".ie-actions{display:flex;gap:8px}.ie-steps{display:flex;align-items:center;margin-bottom:24px;gap:0;list-style:none;padding:0}.ie-step{display:flex;align-items:center;gap:6px;flex-shrink:0}.ie-step-num{width:24px;height:24px;border-radius:50%;background:#e2e8f0;color:#64748b;font-size:.75rem;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0}.ie-step-label{font-size:.8125rem;color:#94a3b8;font-weight:500}.ie-step.active .ie-step-num{background:#3b82f6;color:#fff}.ie-step.active .ie-step-label{color:#1e293b;font-weight:600}.ie-step.done .ie-step-num{background:#22c55e;color:#fff}.ie-step.done .ie-step-label{color:#64748b}.ie-step-divider{flex:1;height:1px;background:#e2e8f0;margin:0 8px;min-width:16px}.ie-source-step{display:flex;flex-direction:column;gap:16px}.ie-source-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}@media(max-width:520px){.ie-source-grid{grid-template-columns:repeat(2,1fr)}}.ie-source-card{display:flex;flex-direction:column;align-items:flex-start;gap:4px;padding:12px;border:1px solid #e2e8f0;border-radius:10px;background:#fff;cursor:pointer;font-family:inherit;text-align:left;transition:all .15s}.ie-source-card:hover{border-color:#94a3b8;background:#f8fafc}.ie-source-card.ie-source-card--active{border-color:#3b82f6;background:#eff6ff}.ie-source-card:focus-visible{outline:2px solid #60a5fa;outline-offset:2px}.ie-source-letter{width:36px;height:36px;border-radius:8px;color:#fff;font-size:1rem;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0}.ie-source-label{font-size:.8125rem;font-weight:600;color:#1e293b;line-height:1.2}.ie-source-desc{font-size:.75rem;color:#64748b}.ie-upload-area{display:flex;flex-direction:column;gap:12px}.ie-template-hint{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:.875rem;color:#64748b;background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;padding:10px 14px}.ie-file-hidden{display:none}.ie-dropzone{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:40px 24px;border:2px dashed #cbd5e1;border-radius:10px;cursor:pointer;transition:border-color .18s ease,background .18s ease}.ie-dropzone:hover,.ie-dropzone:focus-within{border-color:#3b82f6;background:#f0f7ff}.ie-dropzone.has-error{border-color:#ef4444}.ie-dropzone-text{font-size:.9375rem;font-weight:600;color:#1e293b}.ie-dropzone-sub{font-size:.8125rem;color:#94a3b8}.ie-mapping{display:flex;flex-direction:column;gap:12px}.ie-mapping-hint{font-size:.875rem;color:#64748b;margin:0}.ie-mapping-success{display:flex;align-items:flex-start;gap:8px;padding:10px 14px;background:#f0fdf4;border:1px solid #bbf7d0;border-radius:8px;font-size:.875rem;color:#15803d}.ie-mapping-success svg{flex-shrink:0;margin-top:1px;color:#16a34a}.ie-mapping-unmatched{display:flex;align-items:flex-start;gap:6px;font-size:.8125rem;color:#64748b;margin:0;padding-top:4px}.ie-mapping-unmatched svg{flex-shrink:0;margin-top:1px}.ie-mapping-unmatched em{font-style:normal;color:#475569}.ie-mapping-table{border:1px solid #e2e8f0;border-radius:8px;overflow:hidden}.ie-mapping-header{display:grid;grid-template-columns:1fr 1fr 1fr;padding:8px 12px;background:#f8fafc;border-bottom:1px solid #e2e8f0;font-size:.75rem;font-weight:600;color:#64748b;text-transform:uppercase}.ie-mapping-row{display:grid;grid-template-columns:1fr 1fr 1fr;align-items:start;padding:8px 12px;border-bottom:1px solid #f1f5f9;gap:8px}.ie-mapping-row:last-child{border-bottom:none}.ie-mapping-row.ie-mapping-row--required-missing{background:#fff7ed}.ie-mapping-row.ie-mapping-row--required-missing .ie-field-label{color:#c2410c}.ie-match-icon{color:#16a34a;margin-right:4px;vertical-align:-1px}.ie-field-label{display:flex;align-items:center;font-size:.875rem;color:#1e293b;font-weight:500}.ie-required{color:#ef4444;margin-left:2px}.ie-sample{font-size:.8125rem;color:#64748b;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ie-preview{display:flex;flex-direction:column;gap:12px}.ie-preview-scroll{overflow-x:auto;border:1px solid #e2e8f0;border-radius:8px}.ie-preview-table{width:100%;border-collapse:collapse;font-size:.8125rem}.ie-preview-table th{background:#f8fafc;padding:8px 12px;text-align:left;font-size:.75rem;font-weight:600;color:#64748b;text-transform:uppercase;border-bottom:1px solid #e2e8f0;white-space:nowrap}.ie-preview-table td{padding:7px 12px;color:#1e293b;border-bottom:1px solid #f1f5f9;max-width:160px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ie-preview-table tr:last-child td{border-bottom:none}.ie-result{display:flex;flex-direction:column;gap:16px}.ie-result-summary{display:flex;flex-direction:column;gap:8px}.ie-result-stat{display:flex;align-items:center;gap:10px;padding:12px 16px;border-radius:8px;font-size:.9375rem}.ie-result-stat.success{background:#f0fdf4;color:#15803d}.ie-result-stat.success svg{stroke:#22c55e}.ie-result-stat.error{background:#fef2f2;color:#b91c1c}.ie-result-stat.error svg{stroke:#ef4444}.ie-result-stat.warning{background:#fffbeb;color:#b45309}.ie-result-stat.warning svg{stroke:#f59e0b}.ie-errors-list{border:1px solid #fecaca;border-radius:8px;overflow:hidden}.ie-errors-title{font-size:.8125rem;font-weight:600;color:#b91c1c;padding:8px 12px;background:#fef2f2;margin:0;border-bottom:1px solid #fecaca}.ie-error-row{display:flex;gap:12px;padding:7px 12px;border-bottom:1px solid #fff1f2;font-size:.8125rem;color:#374151}.ie-error-row:last-child{border-bottom:none}.ie-error-row-num{font-weight:600;color:#b91c1c;flex-shrink:0}.ie-warnings-list{border:1px solid #fde68a;border-radius:8px;overflow:hidden}.ie-warnings-title{font-size:.8125rem;font-weight:600;color:#b45309;padding:8px 12px;background:#fffbeb;margin:0;border-bottom:1px solid #fde68a}.ie-warning-row{display:flex;gap:12px;padding:7px 12px;border-bottom:1px solid #fef3c7;font-size:.8125rem;color:#374151}.ie-warning-row:last-child{border-bottom:none}.ie-warning-row-num{font-weight:600;color:#b45309;flex-shrink:0}.ie-error{font-size:.875rem;color:#ef4444;margin:0}.ie-footer-right{display:flex;gap:8px;align-items:center}@media(max-width:600px){.ie-step-label{display:none}.ie-dropzone{padding:24px 16px}.ie-mapping-header{grid-template-columns:1fr 1fr}.ie-mapping-header span:last-child{display:none}.ie-mapping-row{grid-template-columns:1fr 1fr}.ie-mapping-row .ie-sample{display:none}}\n"],
8497
+ styles: [".ie-actions{display:flex;gap:8px}.ie-steps{display:flex;align-items:center;margin-bottom:24px;gap:0;list-style:none;padding:0}.ie-step{display:flex;align-items:center;gap:6px;flex-shrink:0}.ie-step-num{width:24px;height:24px;border-radius:50%;background:#e2e8f0;color:#64748b;font-size:.75rem;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0}.ie-step-label{font-size:.8125rem;color:#94a3b8;font-weight:500}.ie-step.active .ie-step-num{background:#3b82f6;color:#fff}.ie-step.active .ie-step-label{color:#1e293b;font-weight:600}.ie-step.done .ie-step-num{background:#22c55e;color:#fff}.ie-step.done .ie-step-label{color:#64748b}.ie-step-divider{flex:1;height:1px;background:#e2e8f0;margin:0 8px;min-width:16px}.ie-source-step{display:flex;flex-direction:column;gap:16px}.ie-source-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}@media(max-width:520px){.ie-source-grid{grid-template-columns:repeat(2,1fr)}}.ie-source-card{display:flex;flex-direction:column;align-items:flex-start;gap:4px;padding:12px;border:1px solid #e2e8f0;border-radius:10px;background:#fff;cursor:pointer;font-family:inherit;text-align:left;transition:all .15s}.ie-source-card:hover{border-color:#94a3b8;background:#f8fafc}.ie-source-card.ie-source-card--active{border-color:#3b82f6;background:#eff6ff}.ie-source-card:focus-visible{outline:2px solid #60a5fa;outline-offset:2px}.ie-source-letter{width:36px;height:36px;border-radius:8px;color:#fff;font-size:1rem;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0}.ie-source-label{font-size:.8125rem;font-weight:600;color:#1e293b;line-height:1.2}.ie-source-desc{font-size:.75rem;color:#64748b}.ie-upload-area{display:flex;flex-direction:column;gap:12px}.ie-template-hint{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:.875rem;color:#64748b;background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;padding:10px 14px}.ie-file-hidden{display:none}.ie-dropzone{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:40px 24px;border:2px dashed #cbd5e1;border-radius:10px;cursor:pointer;transition:border-color .18s ease,background .18s ease}.ie-dropzone:hover,.ie-dropzone:focus-within{border-color:#3b82f6;background:#f0f7ff}.ie-dropzone.has-error{border-color:#ef4444}.ie-dropzone-text{font-size:.9375rem;font-weight:600;color:#1e293b}.ie-dropzone-sub{font-size:.8125rem;color:#94a3b8}.ie-mapping{display:flex;flex-direction:column;gap:12px}.ie-mapping-hint{font-size:.875rem;color:#64748b;margin:0}.ie-mapping-success{display:flex;align-items:flex-start;gap:8px;padding:10px 14px;background:#f0fdf4;border:1px solid #bbf7d0;border-radius:8px;font-size:.875rem;color:#15803d}.ie-mapping-success svg{flex-shrink:0;margin-top:1px;color:#16a34a}.ie-mapping-unmatched{display:flex;align-items:flex-start;gap:6px;font-size:.8125rem;color:#64748b;margin:0;padding-top:4px}.ie-mapping-unmatched svg{flex-shrink:0;margin-top:1px}.ie-mapping-unmatched em{font-style:normal;color:#475569}.ie-mapping-table{border:1px solid #e2e8f0;border-radius:8px;overflow:hidden}.ie-mapping-header{display:grid;grid-template-columns:1fr 1fr 1fr;padding:8px 12px;background:#f8fafc;border-bottom:1px solid #e2e8f0;font-size:.75rem;font-weight:600;color:#64748b;text-transform:uppercase}.ie-mapping-row{display:grid;grid-template-columns:1fr 1fr 1fr;align-items:start;padding:8px 12px;border-bottom:1px solid #f1f5f9;gap:8px}.ie-mapping-row:last-child{border-bottom:none}.ie-mapping-row.ie-mapping-row--required-missing{background:#fff7ed}.ie-mapping-row.ie-mapping-row--required-missing .ie-field-label{color:#c2410c}.ie-match-icon{color:#16a34a;margin-right:4px;vertical-align:-1px}.ie-field-label{display:flex;align-items:center;font-size:.875rem;color:#1e293b;font-weight:500}.ie-required{color:#dc2626;margin-left:2px}.ie-sample{font-size:.8125rem;color:#64748b;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ie-preview{display:flex;flex-direction:column;gap:12px}.ie-preview-scroll{overflow-x:auto;border:1px solid #e2e8f0;border-radius:8px}.ie-preview-table{width:100%;border-collapse:collapse;font-size:.8125rem}.ie-preview-table th{background:#f8fafc;padding:8px 12px;text-align:left;font-size:.75rem;font-weight:600;color:#64748b;text-transform:uppercase;border-bottom:1px solid #e2e8f0;white-space:nowrap}.ie-preview-table td{padding:7px 12px;color:#1e293b;border-bottom:1px solid #f1f5f9;max-width:160px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ie-preview-table tr:last-child td{border-bottom:none}.ie-result{display:flex;flex-direction:column;gap:16px}.ie-result-summary{display:flex;flex-direction:column;gap:8px}.ie-result-stat{display:flex;align-items:center;gap:10px;padding:12px 16px;border-radius:8px;font-size:.9375rem}.ie-result-stat.success{background:#f0fdf4;color:#15803d}.ie-result-stat.success svg{stroke:#22c55e}.ie-result-stat.error{background:#fef2f2;color:#b91c1c}.ie-result-stat.error svg{stroke:#ef4444}.ie-result-stat.warning{background:#fffbeb;color:#b45309}.ie-result-stat.warning svg{stroke:#f59e0b}.ie-errors-list{border:1px solid #fecaca;border-radius:8px;overflow:hidden}.ie-errors-title{font-size:.8125rem;font-weight:600;color:#b91c1c;padding:8px 12px;background:#fef2f2;margin:0;border-bottom:1px solid #fecaca}.ie-error-row{display:flex;gap:12px;padding:7px 12px;border-bottom:1px solid #fff1f2;font-size:.8125rem;color:#374151}.ie-error-row:last-child{border-bottom:none}.ie-error-row-num{font-weight:600;color:#b91c1c;flex-shrink:0}.ie-warnings-list{border:1px solid #fde68a;border-radius:8px;overflow:hidden}.ie-warnings-title{font-size:.8125rem;font-weight:600;color:#b45309;padding:8px 12px;background:#fffbeb;margin:0;border-bottom:1px solid #fde68a}.ie-warning-row{display:flex;gap:12px;padding:7px 12px;border-bottom:1px solid #fef3c7;font-size:.8125rem;color:#374151}.ie-warning-row:last-child{border-bottom:none}.ie-warning-row-num{font-weight:600;color:#b45309;flex-shrink:0}.ie-error{font-size:.875rem;color:#dc2626;margin:0}.ie-footer-right{display:flex;gap:8px;align-items:center}@media(max-width:600px){.ie-step-label{display:none}.ie-dropzone{padding:24px 16px}.ie-mapping-header{grid-template-columns:1fr 1fr}.ie-mapping-header span:last-child{display:none}.ie-mapping-row{grid-template-columns:1fr 1fr}.ie-mapping-row .ie-sample{display:none}}\n"],
7711
8498
  dependencies: [
7712
8499
  {
7713
8500
  kind: "ngmodule",
@@ -7743,7 +8530,8 @@ var ImportExportComponent = class ImportExportComponent {
7743
8530
  "bodyOverflow",
7744
8531
  "dialogTestId",
7745
8532
  "hideClose",
7746
- "closable"
8533
+ "closable",
8534
+ "returnFocusTo"
7747
8535
  ],
7748
8536
  outputs: ["close"]
7749
8537
  },
@@ -8063,7 +8851,7 @@ i0.ɵɵngDeclareClassMetadata({
8063
8851
 
8064
8852
  </ui-modal>
8065
8853
  `,
8066
- styles: [".ie-actions{display:flex;gap:8px}.ie-steps{display:flex;align-items:center;margin-bottom:24px;gap:0;list-style:none;padding:0}.ie-step{display:flex;align-items:center;gap:6px;flex-shrink:0}.ie-step-num{width:24px;height:24px;border-radius:50%;background:#e2e8f0;color:#64748b;font-size:.75rem;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0}.ie-step-label{font-size:.8125rem;color:#94a3b8;font-weight:500}.ie-step.active .ie-step-num{background:#3b82f6;color:#fff}.ie-step.active .ie-step-label{color:#1e293b;font-weight:600}.ie-step.done .ie-step-num{background:#22c55e;color:#fff}.ie-step.done .ie-step-label{color:#64748b}.ie-step-divider{flex:1;height:1px;background:#e2e8f0;margin:0 8px;min-width:16px}.ie-source-step{display:flex;flex-direction:column;gap:16px}.ie-source-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}@media(max-width:520px){.ie-source-grid{grid-template-columns:repeat(2,1fr)}}.ie-source-card{display:flex;flex-direction:column;align-items:flex-start;gap:4px;padding:12px;border:1px solid #e2e8f0;border-radius:10px;background:#fff;cursor:pointer;font-family:inherit;text-align:left;transition:all .15s}.ie-source-card:hover{border-color:#94a3b8;background:#f8fafc}.ie-source-card.ie-source-card--active{border-color:#3b82f6;background:#eff6ff}.ie-source-card:focus-visible{outline:2px solid #60a5fa;outline-offset:2px}.ie-source-letter{width:36px;height:36px;border-radius:8px;color:#fff;font-size:1rem;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0}.ie-source-label{font-size:.8125rem;font-weight:600;color:#1e293b;line-height:1.2}.ie-source-desc{font-size:.75rem;color:#64748b}.ie-upload-area{display:flex;flex-direction:column;gap:12px}.ie-template-hint{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:.875rem;color:#64748b;background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;padding:10px 14px}.ie-file-hidden{display:none}.ie-dropzone{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:40px 24px;border:2px dashed #cbd5e1;border-radius:10px;cursor:pointer;transition:border-color .18s ease,background .18s ease}.ie-dropzone:hover,.ie-dropzone:focus-within{border-color:#3b82f6;background:#f0f7ff}.ie-dropzone.has-error{border-color:#ef4444}.ie-dropzone-text{font-size:.9375rem;font-weight:600;color:#1e293b}.ie-dropzone-sub{font-size:.8125rem;color:#94a3b8}.ie-mapping{display:flex;flex-direction:column;gap:12px}.ie-mapping-hint{font-size:.875rem;color:#64748b;margin:0}.ie-mapping-success{display:flex;align-items:flex-start;gap:8px;padding:10px 14px;background:#f0fdf4;border:1px solid #bbf7d0;border-radius:8px;font-size:.875rem;color:#15803d}.ie-mapping-success svg{flex-shrink:0;margin-top:1px;color:#16a34a}.ie-mapping-unmatched{display:flex;align-items:flex-start;gap:6px;font-size:.8125rem;color:#64748b;margin:0;padding-top:4px}.ie-mapping-unmatched svg{flex-shrink:0;margin-top:1px}.ie-mapping-unmatched em{font-style:normal;color:#475569}.ie-mapping-table{border:1px solid #e2e8f0;border-radius:8px;overflow:hidden}.ie-mapping-header{display:grid;grid-template-columns:1fr 1fr 1fr;padding:8px 12px;background:#f8fafc;border-bottom:1px solid #e2e8f0;font-size:.75rem;font-weight:600;color:#64748b;text-transform:uppercase}.ie-mapping-row{display:grid;grid-template-columns:1fr 1fr 1fr;align-items:start;padding:8px 12px;border-bottom:1px solid #f1f5f9;gap:8px}.ie-mapping-row:last-child{border-bottom:none}.ie-mapping-row.ie-mapping-row--required-missing{background:#fff7ed}.ie-mapping-row.ie-mapping-row--required-missing .ie-field-label{color:#c2410c}.ie-match-icon{color:#16a34a;margin-right:4px;vertical-align:-1px}.ie-field-label{display:flex;align-items:center;font-size:.875rem;color:#1e293b;font-weight:500}.ie-required{color:#ef4444;margin-left:2px}.ie-sample{font-size:.8125rem;color:#64748b;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ie-preview{display:flex;flex-direction:column;gap:12px}.ie-preview-scroll{overflow-x:auto;border:1px solid #e2e8f0;border-radius:8px}.ie-preview-table{width:100%;border-collapse:collapse;font-size:.8125rem}.ie-preview-table th{background:#f8fafc;padding:8px 12px;text-align:left;font-size:.75rem;font-weight:600;color:#64748b;text-transform:uppercase;border-bottom:1px solid #e2e8f0;white-space:nowrap}.ie-preview-table td{padding:7px 12px;color:#1e293b;border-bottom:1px solid #f1f5f9;max-width:160px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ie-preview-table tr:last-child td{border-bottom:none}.ie-result{display:flex;flex-direction:column;gap:16px}.ie-result-summary{display:flex;flex-direction:column;gap:8px}.ie-result-stat{display:flex;align-items:center;gap:10px;padding:12px 16px;border-radius:8px;font-size:.9375rem}.ie-result-stat.success{background:#f0fdf4;color:#15803d}.ie-result-stat.success svg{stroke:#22c55e}.ie-result-stat.error{background:#fef2f2;color:#b91c1c}.ie-result-stat.error svg{stroke:#ef4444}.ie-result-stat.warning{background:#fffbeb;color:#b45309}.ie-result-stat.warning svg{stroke:#f59e0b}.ie-errors-list{border:1px solid #fecaca;border-radius:8px;overflow:hidden}.ie-errors-title{font-size:.8125rem;font-weight:600;color:#b91c1c;padding:8px 12px;background:#fef2f2;margin:0;border-bottom:1px solid #fecaca}.ie-error-row{display:flex;gap:12px;padding:7px 12px;border-bottom:1px solid #fff1f2;font-size:.8125rem;color:#374151}.ie-error-row:last-child{border-bottom:none}.ie-error-row-num{font-weight:600;color:#b91c1c;flex-shrink:0}.ie-warnings-list{border:1px solid #fde68a;border-radius:8px;overflow:hidden}.ie-warnings-title{font-size:.8125rem;font-weight:600;color:#b45309;padding:8px 12px;background:#fffbeb;margin:0;border-bottom:1px solid #fde68a}.ie-warning-row{display:flex;gap:12px;padding:7px 12px;border-bottom:1px solid #fef3c7;font-size:.8125rem;color:#374151}.ie-warning-row:last-child{border-bottom:none}.ie-warning-row-num{font-weight:600;color:#b45309;flex-shrink:0}.ie-error{font-size:.875rem;color:#ef4444;margin:0}.ie-footer-right{display:flex;gap:8px;align-items:center}@media(max-width:600px){.ie-step-label{display:none}.ie-dropzone{padding:24px 16px}.ie-mapping-header{grid-template-columns:1fr 1fr}.ie-mapping-header span:last-child{display:none}.ie-mapping-row{grid-template-columns:1fr 1fr}.ie-mapping-row .ie-sample{display:none}}\n"]
8854
+ styles: [".ie-actions{display:flex;gap:8px}.ie-steps{display:flex;align-items:center;margin-bottom:24px;gap:0;list-style:none;padding:0}.ie-step{display:flex;align-items:center;gap:6px;flex-shrink:0}.ie-step-num{width:24px;height:24px;border-radius:50%;background:#e2e8f0;color:#64748b;font-size:.75rem;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0}.ie-step-label{font-size:.8125rem;color:#94a3b8;font-weight:500}.ie-step.active .ie-step-num{background:#3b82f6;color:#fff}.ie-step.active .ie-step-label{color:#1e293b;font-weight:600}.ie-step.done .ie-step-num{background:#22c55e;color:#fff}.ie-step.done .ie-step-label{color:#64748b}.ie-step-divider{flex:1;height:1px;background:#e2e8f0;margin:0 8px;min-width:16px}.ie-source-step{display:flex;flex-direction:column;gap:16px}.ie-source-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}@media(max-width:520px){.ie-source-grid{grid-template-columns:repeat(2,1fr)}}.ie-source-card{display:flex;flex-direction:column;align-items:flex-start;gap:4px;padding:12px;border:1px solid #e2e8f0;border-radius:10px;background:#fff;cursor:pointer;font-family:inherit;text-align:left;transition:all .15s}.ie-source-card:hover{border-color:#94a3b8;background:#f8fafc}.ie-source-card.ie-source-card--active{border-color:#3b82f6;background:#eff6ff}.ie-source-card:focus-visible{outline:2px solid #60a5fa;outline-offset:2px}.ie-source-letter{width:36px;height:36px;border-radius:8px;color:#fff;font-size:1rem;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0}.ie-source-label{font-size:.8125rem;font-weight:600;color:#1e293b;line-height:1.2}.ie-source-desc{font-size:.75rem;color:#64748b}.ie-upload-area{display:flex;flex-direction:column;gap:12px}.ie-template-hint{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:.875rem;color:#64748b;background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;padding:10px 14px}.ie-file-hidden{display:none}.ie-dropzone{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:40px 24px;border:2px dashed #cbd5e1;border-radius:10px;cursor:pointer;transition:border-color .18s ease,background .18s ease}.ie-dropzone:hover,.ie-dropzone:focus-within{border-color:#3b82f6;background:#f0f7ff}.ie-dropzone.has-error{border-color:#ef4444}.ie-dropzone-text{font-size:.9375rem;font-weight:600;color:#1e293b}.ie-dropzone-sub{font-size:.8125rem;color:#94a3b8}.ie-mapping{display:flex;flex-direction:column;gap:12px}.ie-mapping-hint{font-size:.875rem;color:#64748b;margin:0}.ie-mapping-success{display:flex;align-items:flex-start;gap:8px;padding:10px 14px;background:#f0fdf4;border:1px solid #bbf7d0;border-radius:8px;font-size:.875rem;color:#15803d}.ie-mapping-success svg{flex-shrink:0;margin-top:1px;color:#16a34a}.ie-mapping-unmatched{display:flex;align-items:flex-start;gap:6px;font-size:.8125rem;color:#64748b;margin:0;padding-top:4px}.ie-mapping-unmatched svg{flex-shrink:0;margin-top:1px}.ie-mapping-unmatched em{font-style:normal;color:#475569}.ie-mapping-table{border:1px solid #e2e8f0;border-radius:8px;overflow:hidden}.ie-mapping-header{display:grid;grid-template-columns:1fr 1fr 1fr;padding:8px 12px;background:#f8fafc;border-bottom:1px solid #e2e8f0;font-size:.75rem;font-weight:600;color:#64748b;text-transform:uppercase}.ie-mapping-row{display:grid;grid-template-columns:1fr 1fr 1fr;align-items:start;padding:8px 12px;border-bottom:1px solid #f1f5f9;gap:8px}.ie-mapping-row:last-child{border-bottom:none}.ie-mapping-row.ie-mapping-row--required-missing{background:#fff7ed}.ie-mapping-row.ie-mapping-row--required-missing .ie-field-label{color:#c2410c}.ie-match-icon{color:#16a34a;margin-right:4px;vertical-align:-1px}.ie-field-label{display:flex;align-items:center;font-size:.875rem;color:#1e293b;font-weight:500}.ie-required{color:#dc2626;margin-left:2px}.ie-sample{font-size:.8125rem;color:#64748b;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ie-preview{display:flex;flex-direction:column;gap:12px}.ie-preview-scroll{overflow-x:auto;border:1px solid #e2e8f0;border-radius:8px}.ie-preview-table{width:100%;border-collapse:collapse;font-size:.8125rem}.ie-preview-table th{background:#f8fafc;padding:8px 12px;text-align:left;font-size:.75rem;font-weight:600;color:#64748b;text-transform:uppercase;border-bottom:1px solid #e2e8f0;white-space:nowrap}.ie-preview-table td{padding:7px 12px;color:#1e293b;border-bottom:1px solid #f1f5f9;max-width:160px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ie-preview-table tr:last-child td{border-bottom:none}.ie-result{display:flex;flex-direction:column;gap:16px}.ie-result-summary{display:flex;flex-direction:column;gap:8px}.ie-result-stat{display:flex;align-items:center;gap:10px;padding:12px 16px;border-radius:8px;font-size:.9375rem}.ie-result-stat.success{background:#f0fdf4;color:#15803d}.ie-result-stat.success svg{stroke:#22c55e}.ie-result-stat.error{background:#fef2f2;color:#b91c1c}.ie-result-stat.error svg{stroke:#ef4444}.ie-result-stat.warning{background:#fffbeb;color:#b45309}.ie-result-stat.warning svg{stroke:#f59e0b}.ie-errors-list{border:1px solid #fecaca;border-radius:8px;overflow:hidden}.ie-errors-title{font-size:.8125rem;font-weight:600;color:#b91c1c;padding:8px 12px;background:#fef2f2;margin:0;border-bottom:1px solid #fecaca}.ie-error-row{display:flex;gap:12px;padding:7px 12px;border-bottom:1px solid #fff1f2;font-size:.8125rem;color:#374151}.ie-error-row:last-child{border-bottom:none}.ie-error-row-num{font-weight:600;color:#b91c1c;flex-shrink:0}.ie-warnings-list{border:1px solid #fde68a;border-radius:8px;overflow:hidden}.ie-warnings-title{font-size:.8125rem;font-weight:600;color:#b45309;padding:8px 12px;background:#fffbeb;margin:0;border-bottom:1px solid #fde68a}.ie-warning-row{display:flex;gap:12px;padding:7px 12px;border-bottom:1px solid #fef3c7;font-size:.8125rem;color:#374151}.ie-warning-row:last-child{border-bottom:none}.ie-warning-row-num{font-weight:600;color:#b45309;flex-shrink:0}.ie-error{font-size:.875rem;color:#dc2626;margin:0}.ie-footer-right{display:flex;gap:8px;align-items:center}@media(max-width:600px){.ie-step-label{display:none}.ie-dropzone{padding:24px 16px}.ie-mapping-header{grid-template-columns:1fr 1fr}.ie-mapping-header span:last-child{display:none}.ie-mapping-row{grid-template-columns:1fr 1fr}.ie-mapping-row .ie-sample{display:none}}\n"]
8067
8855
  }]
8068
8856
  }],
8069
8857
  ctorParameters: () => [],
@@ -8244,7 +9032,8 @@ var ConfirmOutletComponent = class ConfirmOutletComponent {
8244
9032
  "bodyOverflow",
8245
9033
  "dialogTestId",
8246
9034
  "hideClose",
8247
- "closable"
9035
+ "closable",
9036
+ "returnFocusTo"
8248
9037
  ],
8249
9038
  outputs: ["close"]
8250
9039
  }, {
@@ -8698,6 +9487,7 @@ i0.ɵɵngDeclareClassMetadata({
8698
9487
  }]
8699
9488
  }
8700
9489
  });
9490
+ let reorderHelpSeq = 0;
8701
9491
  function formatPhone$1(raw) {
8702
9492
  if (!raw) return "—";
8703
9493
  const digits = raw.replace(/\D/g, "");
@@ -8743,6 +9533,96 @@ var DataTableComponent = class DataTableComponent {
8743
9533
  const listeners = this.rowClick.listeners;
8744
9534
  return listeners === void 0 ? true : (listeners?.length ?? 0) > 0;
8745
9535
  }
9536
+ reorderLabel(item) {
9537
+ const name = this.rowAccessibleName(item);
9538
+ return name ? `Reorder ${name}` : "Reorder row";
9539
+ }
9540
+ onGripDragStart(e, index) {
9541
+ if (!this._reorderActive()) {
9542
+ e.preventDefault();
9543
+ return;
9544
+ }
9545
+ this._dragFrom.set(index);
9546
+ this._dragKey = this.trackItem(this._items()[index], index);
9547
+ if (e.dataTransfer) {
9548
+ e.dataTransfer.effectAllowed = "move";
9549
+ e.dataTransfer.setData("text/plain", String(index));
9550
+ const row = e.target.closest("tr, .dt-card");
9551
+ if (row) e.dataTransfer.setDragImage(row, 16, 16);
9552
+ }
9553
+ }
9554
+ onGripDragEnd() {
9555
+ this._dragFrom.set(null);
9556
+ this._dragOver.set(null);
9557
+ this._dragKey = null;
9558
+ }
9559
+ onRowDragOver(e, index) {
9560
+ if (this._dragFrom() === null) return;
9561
+ e.preventDefault();
9562
+ if (e.dataTransfer) e.dataTransfer.dropEffect = "move";
9563
+ this._dragOver.set(index);
9564
+ }
9565
+ onRowDrop(e, index) {
9566
+ const dragged = this._dragFrom();
9567
+ if (dragged === null) return;
9568
+ e.preventDefault();
9569
+ const key = this._dragKey;
9570
+ const from = key === null ? dragged : this._items().findIndex((item, i) => this.trackItem(item, i) === key);
9571
+ this.onGripDragEnd();
9572
+ if (from >= 0) this.moveRow(from, index);
9573
+ }
9574
+ onGripKeydown(e, index) {
9575
+ if (!this._reorderActive()) return;
9576
+ const last = this._items().length - 1;
9577
+ if (e.key === "Enter" || e.key === " ") {
9578
+ e.preventDefault();
9579
+ e.stopPropagation();
9580
+ const name = this.rowAccessibleName(this._items()[index]) || "Row";
9581
+ this._reorderAnnouncement.set("");
9582
+ afterNextRender(() => this._reorderAnnouncement.set(`${name} is at position ${index + 1} of ${last + 1}. Use the up and down arrow keys to move it, Home for the top, End for the bottom.`), { injector: this._injector });
9583
+ return;
9584
+ }
9585
+ const target = e.key === "ArrowUp" ? index - 1 : e.key === "ArrowDown" ? index + 1 : e.key === "Home" ? 0 : e.key === "End" ? last : null;
9586
+ if (target === null) return;
9587
+ e.preventDefault();
9588
+ e.stopPropagation();
9589
+ if (this.moveRow(index, target)) {
9590
+ const key = String(this._items()[Math.max(0, Math.min(last, target))]["id"] ?? target);
9591
+ afterNextRender(() => {
9592
+ this._host.nativeElement.querySelector(`[data-row-key="${CSS.escape(key)}"] .dt-grip`)?.focus();
9593
+ }, { injector: this._injector });
9594
+ }
9595
+ }
9596
+ moveByButton(index, direction) {
9597
+ const key = String(this.trackItem(this._items()[index], index));
9598
+ if (!this.moveRow(index, index + direction)) return;
9599
+ afterNextRender(() => {
9600
+ const row = this._host.nativeElement.querySelector(`[data-row-key="${CSS.escape(key)}"]`);
9601
+ const suffix = direction === -1 ? " up" : " down";
9602
+ (row?.querySelector(`button[aria-label$="${suffix}"]:not(:disabled)`) ?? row?.querySelector(".dt-row-move button:not(:disabled), .dt-card-move button:not(:disabled)"))?.focus();
9603
+ }, { injector: this._injector });
9604
+ }
9605
+ moveRow(from, to) {
9606
+ const items = this._items();
9607
+ if (!this._reorderActive() || !Number.isInteger(from) || from < 0 || from >= items.length) return false;
9608
+ const target = Math.max(0, Math.min(items.length - 1, to));
9609
+ if (target === from) return false;
9610
+ const next = [...items];
9611
+ const [moved] = next.splice(from, 1);
9612
+ next.splice(target, 0, moved);
9613
+ this._items.set(next);
9614
+ const name = this.rowAccessibleName(moved) || "Row";
9615
+ this._reorderAnnouncement.set("");
9616
+ afterNextRender(() => this._reorderAnnouncement.set(`${name} moved to position ${target + 1} of ${next.length}`), { injector: this._injector });
9617
+ this.rowReorder.emit({
9618
+ item: moved,
9619
+ from,
9620
+ to: target,
9621
+ items: next,
9622
+ offset: (this._page() - 1) * this.pageSize()
9623
+ });
9624
+ return true;
9625
+ }
8746
9626
  _bulkOptionsFor(def) {
8747
9627
  const opts = this._getOptionsForField(def.field);
8748
9628
  return def.exclude?.length ? opts.filter((o) => !this._isBulkExcluded(def, o.value)) : opts;
@@ -9075,6 +9955,7 @@ var DataTableComponent = class DataTableComponent {
9075
9955
  this.savedViews = input([], ...ngDevMode ? [{ debugName: "savedViews" }] : /* istanbul ignore next */ []);
9076
9956
  this.page = input("", ...ngDevMode ? [{ debugName: "page" }] : /* istanbul ignore next */ []);
9077
9957
  this.showToolbar = input(true, ...ngDevMode ? [{ debugName: "showToolbar" }] : /* istanbul ignore next */ []);
9958
+ this.showMoreActions = input(true, ...ngDevMode ? [{ debugName: "showMoreActions" }] : /* istanbul ignore next */ []);
9078
9959
  this.showSearch = input(true, ...ngDevMode ? [{ debugName: "showSearch" }] : /* istanbul ignore next */ []);
9079
9960
  this._showHeader = computed(() => this.showSearch() || this.showToolbar() || this._effectiveTabs().length > 0, ...ngDevMode ? [{ debugName: "_showHeader" }] : /* istanbul ignore next */ []);
9080
9961
  this.countsEndpoint = input("", ...ngDevMode ? [{ debugName: "countsEndpoint" }] : /* istanbul ignore next */ []);
@@ -9103,6 +9984,8 @@ var DataTableComponent = class DataTableComponent {
9103
9984
  this.tabChange = output();
9104
9985
  this.bulkAction = output();
9105
9986
  this.rowDeleted = output();
9987
+ this.reorderable = input(false, ...ngDevMode ? [{ debugName: "reorderable" }] : /* istanbul ignore next */ []);
9988
+ this.rowReorder = output();
9106
9989
  this.config = inject(FORGEROUTE_CONFIG);
9107
9990
  this.http = inject(HttpClient);
9108
9991
  this.destroyRef = inject(DestroyRef);
@@ -9199,6 +10082,15 @@ var DataTableComponent = class DataTableComponent {
9199
10082
  this._emptyUnfiltered = computed(() => this._hasLoaded() && !this._loading() && !this._error() && this._items().length === 0 && !this._hasActiveFilters(), ...ngDevMode ? [{ debugName: "_emptyUnfiltered" }] : /* istanbul ignore next */ []);
9200
10083
  this._toolbarButtons = computed(() => this._emptyUnfiltered() ? this._effectiveButtons().filter((b) => b.variant === "primary" || b.keepWhenEmpty) : this._effectiveButtons(), ...ngDevMode ? [{ debugName: "_toolbarButtons" }] : /* istanbul ignore next */ []);
9201
10084
  this._keepMoreActions = computed(() => this._emptyUnfiltered() && this._toolbarButtons().some((b) => !b.variant && !b.hidden), ...ngDevMode ? [{ debugName: "_keepMoreActions" }] : /* istanbul ignore next */ []);
10085
+ this._reorderOn = computed(() => this.reorderable() && this._canEdit(), ...ngDevMode ? [{ debugName: "_reorderOn" }] : /* istanbul ignore next */ []);
10086
+ this._reorderActive = computed(() => this._reorderOn() && !this._loading() && !this._error() && !this._sortField() && !this._hasActiveFilters() && this._items().length > 1, ...ngDevMode ? [{ debugName: "_reorderActive" }] : /* istanbul ignore next */ []);
10087
+ this._reorderHint = computed(() => this._sortField() || this._hasActiveFilters() ? "Clear the sort, search and filters to change the order" : this._items().length < 2 ? "There is nothing to reorder" : "Reordering is not available right now", ...ngDevMode ? [{ debugName: "_reorderHint" }] : /* istanbul ignore next */ []);
10088
+ this._reorderHelpId = `dt-reorder-help-${++reorderHelpSeq}`;
10089
+ this._dragFrom = signal(null, ...ngDevMode ? [{ debugName: "_dragFrom" }] : /* istanbul ignore next */ []);
10090
+ this._dragKey = null;
10091
+ this._dragOver = signal(null, ...ngDevMode ? [{ debugName: "_dragOver" }] : /* istanbul ignore next */ []);
10092
+ this._reorderAnnouncement = signal("", ...ngDevMode ? [{ debugName: "_reorderAnnouncement" }] : /* istanbul ignore next */ []);
10093
+ this._host = inject(ElementRef);
9202
10094
  this._hasActiveFilters = computed(() => {
9203
10095
  const cf = this._colFilterValues();
9204
10096
  return !!this._search() || !!this._activeTab() || Object.values(cf).some((v) => v.length > 0);
@@ -10022,6 +10914,13 @@ var DataTableComponent = class DataTableComponent {
10022
10914
  isRequired: false,
10023
10915
  transformFunction: null
10024
10916
  },
10917
+ showMoreActions: {
10918
+ classPropertyName: "showMoreActions",
10919
+ publicName: "showMoreActions",
10920
+ isSignal: true,
10921
+ isRequired: false,
10922
+ transformFunction: null
10923
+ },
10025
10924
  showSearch: {
10026
10925
  classPropertyName: "showSearch",
10027
10926
  publicName: "showSearch",
@@ -10119,6 +11018,13 @@ var DataTableComponent = class DataTableComponent {
10119
11018
  isSignal: true,
10120
11019
  isRequired: false,
10121
11020
  transformFunction: null
11021
+ },
11022
+ reorderable: {
11023
+ classPropertyName: "reorderable",
11024
+ publicName: "reorderable",
11025
+ isSignal: true,
11026
+ isRequired: false,
11027
+ transformFunction: null
10122
11028
  }
10123
11029
  },
10124
11030
  outputs: {
@@ -10133,7 +11039,8 @@ var DataTableComponent = class DataTableComponent {
10133
11039
  selectionChange: "selectionChange",
10134
11040
  tabChange: "tabChange",
10135
11041
  bulkAction: "bulkAction",
10136
- rowDeleted: "rowDeleted"
11042
+ rowDeleted: "rowDeleted",
11043
+ rowReorder: "rowReorder"
10137
11044
  },
10138
11045
  providers: [DatePipe, {
10139
11046
  provide: DROPDOWN_GROUP,
@@ -10207,7 +11114,7 @@ var DataTableComponent = class DataTableComponent {
10207
11114
  [showSavedViews]="_effectiveSavedViews().length > 0 || !!page() || showToolbar()"
10208
11115
  [readOnly]="!_canEdit()"
10209
11116
  [tableButtons]="_toolbarButtons()"
10210
- [hideMoreActions]="_emptyUnfiltered() && !_keepMoreActions()"
11117
+ [hideMoreActions]="!showMoreActions() || (_emptyUnfiltered() && !_keepMoreActions())"
10211
11118
  (visibleColumnsChange)="_visibleColumns.set(_configurableKeys($event))"
10212
11119
  (saveViewClick)="onSaveViewClick($event)"
10213
11120
  (loadViewClick)="onLoadViewClick($event)"
@@ -10288,6 +11195,9 @@ var DataTableComponent = class DataTableComponent {
10288
11195
  <table [attr.aria-label]="tableLabel()" [attr.aria-busy]="_loading()">
10289
11196
  <thead>
10290
11197
  <tr>
11198
+ @if (_reorderOn()) {
11199
+ <th class="dt-th-grip" scope="col"><span class="dt-sr-only">Reorder</span></th>
11200
+ }
10291
11201
  @if (_isSelectable()) {
10292
11202
  <th class="dt-th-cb" scope="col">
10293
11203
  <ui-checkbox
@@ -10342,6 +11252,9 @@ var DataTableComponent = class DataTableComponent {
10342
11252
  @if (_loading()) {
10343
11253
  @for (_ of skeletonRows(); track $index) {
10344
11254
  <tr class="dt-sk-reload-row">
11255
+ @if (_reorderOn()) {
11256
+ <td class="dt-td-grip"></td>
11257
+ }
10345
11258
  @if (_isSelectable()) {
10346
11259
  <td class="dt-td-cb"></td>
10347
11260
  }
@@ -10355,7 +11268,7 @@ var DataTableComponent = class DataTableComponent {
10355
11268
  <!-- Error -->
10356
11269
  @else if (_error()) {
10357
11270
  <tr>
10358
- <td [attr.colspan]="visibleCols().length + (_isSelectable() ? 1 : 0)" class="dt-state-cell">
11271
+ <td [attr.colspan]="visibleCols().length + (_isSelectable() ? 1 : 0) + (_reorderOn() ? 1 : 0)" class="dt-state-cell">
10359
11272
  <ui-error-state [message]="_error()!" [retryLabel]="_retryLabel()" (retry)="load()" />
10360
11273
  </td>
10361
11274
  </tr>
@@ -10364,7 +11277,7 @@ var DataTableComponent = class DataTableComponent {
10364
11277
  <!-- Empty (no filters active) -->
10365
11278
  @else if (_items().length === 0 && !_hasActiveFilters()) {
10366
11279
  <tr>
10367
- <td [attr.colspan]="visibleCols().length + (_isSelectable() ? 1 : 0)" class="dt-state-cell">
11280
+ <td [attr.colspan]="visibleCols().length + (_isSelectable() ? 1 : 0) + (_reorderOn() ? 1 : 0)" class="dt-state-cell">
10368
11281
  <ui-empty-state iconType="table" [message]="emptyMessage()" />
10369
11282
  </td>
10370
11283
  </tr>
@@ -10373,7 +11286,7 @@ var DataTableComponent = class DataTableComponent {
10373
11286
  <!-- No match -->
10374
11287
  @else if (_items().length === 0 && _hasActiveFilters()) {
10375
11288
  <tr>
10376
- <td [attr.colspan]="visibleCols().length + (_isSelectable() ? 1 : 0)" class="dt-state-cell">
11289
+ <td [attr.colspan]="visibleCols().length + (_isSelectable() ? 1 : 0) + (_reorderOn() ? 1 : 0)" class="dt-state-cell">
10377
11290
  <ui-empty-state iconType="search" message="No results match your search or filters.">
10378
11291
  <ui-button variant="secondary" size="sm" (click)="clearFilters()">Clear filters</ui-button>
10379
11292
  </ui-empty-state>
@@ -10389,10 +11302,44 @@ var DataTableComponent = class DataTableComponent {
10389
11302
  [style.--i]="$index < 8 ? $index : 8"
10390
11303
  [class.dt-row-clickable]="isRowClickable(item)"
10391
11304
  [class.dt-row-selected]="_isSelectable() && _selectedIds().has(item['id'])"
11305
+ [class.dt-row-dragging]="_dragFrom() === $index"
11306
+ [class.dt-row-over-before]="_reorderOn() && _dragFrom() !== null && _dragOver() === $index && _dragFrom()! > $index"
11307
+ [class.dt-row-over-after]="_reorderOn() && _dragFrom() !== null && _dragOver() === $index && _dragFrom()! < $index"
11308
+ [attr.data-row-key]="_reorderOn() ? trackItem(item, $index) : null"
10392
11309
  [attr.tabindex]="isRowClickable(item) ? 0 : null"
10393
11310
  [attr.aria-label]="rowLabel(item)"
10394
11311
  (keydown)="onRowKeydown($event, item)"
11312
+ (dragover)="onRowDragOver($event, $index)"
11313
+ (drop)="onRowDrop($event, $index)"
10395
11314
  (click)="onRowClick(item)">
11315
+ @if (_reorderOn()) {
11316
+ <td class="dt-td-grip" (click)="$event.stopPropagation()">
11317
+ <span class="dt-grip" role="button" [attr.tabindex]="_reorderActive() ? 0 : null"
11318
+ [attr.draggable]="_reorderActive() ? 'true' : null"
11319
+ [attr.aria-label]="reorderLabel(item)"
11320
+ [attr.aria-disabled]="_reorderActive() ? null : 'true'"
11321
+ [attr.aria-roledescription]="'drag handle'"
11322
+ [attr.aria-describedby]="_reorderHelpId"
11323
+ [attr.title]="_reorderActive() ? 'Drag to reorder, or use the up and down arrow keys' : _reorderHint()"
11324
+ [class.dt-grip-off]="!_reorderActive()"
11325
+ (dragstart)="onGripDragStart($event, $index)"
11326
+ (dragend)="onGripDragEnd()"
11327
+ (keydown)="onGripKeydown($event, $index)">
11328
+ <svg viewBox="0 0 24 24" width="16" height="16" fill="currentColor" aria-hidden="true" focusable="false"><circle cx="9" cy="6" r="1.6"/><circle cx="15" cy="6" r="1.6"/><circle cx="9" cy="12" r="1.6"/><circle cx="15" cy="12" r="1.6"/><circle cx="9" cy="18" r="1.6"/><circle cx="15" cy="18" r="1.6"/></svg>
11329
+ </span>
11330
+ <!-- Touch screens (coarse primary pointer, e.g. a tablet) cannot rely on native drag: they get Move up / Move down instead of the grip. -->
11331
+ <span class="dt-row-move">
11332
+ <ui-button variant="icon" size="sm" [ariaLabel]="'Move ' + (rowAccessibleName(item) || 'row') + ' up'"
11333
+ [disabled]="!_reorderActive() || $first" (click)="moveByButton($index, -1)">
11334
+ <svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 15l6-6 6 6"/></svg>
11335
+ </ui-button>
11336
+ <ui-button variant="icon" size="sm" [ariaLabel]="'Move ' + (rowAccessibleName(item) || 'row') + ' down'"
11337
+ [disabled]="!_reorderActive() || $last" (click)="moveByButton($index, 1)">
11338
+ <svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 9l6 6 6-6"/></svg>
11339
+ </ui-button>
11340
+ </span>
11341
+ </td>
11342
+ }
10396
11343
  @if (_isSelectable()) {
10397
11344
  <td class="dt-td-cb" (click)="$event.stopPropagation()">
10398
11345
  <ui-checkbox
@@ -10598,6 +11545,7 @@ var DataTableComponent = class DataTableComponent {
10598
11545
  @for (item of _items(); track trackItem(item, $index)) {
10599
11546
  <div
10600
11547
  class="dt-card alive-row"
11548
+ [attr.data-row-key]="_reorderOn() ? trackItem(item, $index) : null"
10601
11549
  [style.--i]="$index < 8 ? $index : 8"
10602
11550
  role="listitem"
10603
11551
  [class.dt-card-clickable]="isRowClickable(item)"
@@ -10643,6 +11591,18 @@ var DataTableComponent = class DataTableComponent {
10643
11591
  </span>
10644
11592
  }
10645
11593
  }
11594
+ @if (_reorderOn()) {
11595
+ <span class="dt-card-move" (click)="$event.stopPropagation()">
11596
+ <ui-button variant="icon" size="sm" [ariaLabel]="'Move ' + (rowAccessibleName(item) || 'row') + ' up'"
11597
+ [disabled]="!_reorderActive() || $first" (click)="moveByButton($index, -1)">
11598
+ <svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 15l6-6 6 6"/></svg>
11599
+ </ui-button>
11600
+ <ui-button variant="icon" size="sm" [ariaLabel]="'Move ' + (rowAccessibleName(item) || 'row') + ' down'"
11601
+ [disabled]="!_reorderActive() || $last" (click)="moveByButton($index, 1)">
11602
+ <svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 9l6 6 6-6"/></svg>
11603
+ </ui-button>
11604
+ </span>
11605
+ }
10646
11606
  @if (_cardCols().actionsCol; as ac) {
10647
11607
  @let cardActions = _rowActions(ac, item);
10648
11608
  @if (cardActions.length) {
@@ -10706,6 +11666,13 @@ var DataTableComponent = class DataTableComponent {
10706
11666
  </div>
10707
11667
  }
10708
11668
 
11669
+ @if (_reorderOn()) {
11670
+ <span class="dt-sr-only" [id]="_reorderHelpId">{{ _reorderActive()
11671
+ ? 'Drag to reorder with a mouse, or use the up and down arrow keys; Home moves to the top and End to the bottom.'
11672
+ : _reorderHint() }}</span>
11673
+ <span class="dt-sr-only" role="status" aria-live="polite" aria-atomic="true">{{ _reorderAnnouncement() }}</span>
11674
+ }
11675
+
10709
11676
  <!-- ── PAGINATION ─────────────────────────────────────────── -->
10710
11677
  @if (_total() > pageSize()) {
10711
11678
  <ui-pagination
@@ -10764,7 +11731,7 @@ var DataTableComponent = class DataTableComponent {
10764
11731
  </div>
10765
11732
  `,
10766
11733
  isInline: true,
10767
- 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-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-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-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;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}.dt-bulk-actions{width:100%}.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}.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 12px;font-family:inherit;font-size:1rem;color:#1e293b;background:#fff;border:1px solid #e2e8f0;border-radius:8px}.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;white-space:nowrap}.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}\n"],
11734
+ 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-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-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;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}.dt-bulk-actions{width:100%}.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}.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 12px;font-family:inherit;font-size:1rem;color:#1e293b;background:#fff;border:1px solid #e2e8f0;border-radius:8px}.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;white-space:nowrap}.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}\n"],
10768
11735
  dependencies: [
10769
11736
  {
10770
11737
  kind: "directive",
@@ -11065,7 +12032,8 @@ var DataTableComponent = class DataTableComponent {
11065
12032
  "bodyOverflow",
11066
12033
  "dialogTestId",
11067
12034
  "hideClose",
11068
- "closable"
12035
+ "closable",
12036
+ "returnFocusTo"
11069
12037
  ],
11070
12038
  outputs: ["close"]
11071
12039
  },
@@ -11200,7 +12168,7 @@ i0.ɵɵngDeclareClassMetadata({
11200
12168
  [showSavedViews]="_effectiveSavedViews().length > 0 || !!page() || showToolbar()"
11201
12169
  [readOnly]="!_canEdit()"
11202
12170
  [tableButtons]="_toolbarButtons()"
11203
- [hideMoreActions]="_emptyUnfiltered() && !_keepMoreActions()"
12171
+ [hideMoreActions]="!showMoreActions() || (_emptyUnfiltered() && !_keepMoreActions())"
11204
12172
  (visibleColumnsChange)="_visibleColumns.set(_configurableKeys($event))"
11205
12173
  (saveViewClick)="onSaveViewClick($event)"
11206
12174
  (loadViewClick)="onLoadViewClick($event)"
@@ -11281,6 +12249,9 @@ i0.ɵɵngDeclareClassMetadata({
11281
12249
  <table [attr.aria-label]="tableLabel()" [attr.aria-busy]="_loading()">
11282
12250
  <thead>
11283
12251
  <tr>
12252
+ @if (_reorderOn()) {
12253
+ <th class="dt-th-grip" scope="col"><span class="dt-sr-only">Reorder</span></th>
12254
+ }
11284
12255
  @if (_isSelectable()) {
11285
12256
  <th class="dt-th-cb" scope="col">
11286
12257
  <ui-checkbox
@@ -11335,6 +12306,9 @@ i0.ɵɵngDeclareClassMetadata({
11335
12306
  @if (_loading()) {
11336
12307
  @for (_ of skeletonRows(); track $index) {
11337
12308
  <tr class="dt-sk-reload-row">
12309
+ @if (_reorderOn()) {
12310
+ <td class="dt-td-grip"></td>
12311
+ }
11338
12312
  @if (_isSelectable()) {
11339
12313
  <td class="dt-td-cb"></td>
11340
12314
  }
@@ -11348,7 +12322,7 @@ i0.ɵɵngDeclareClassMetadata({
11348
12322
  <!-- Error -->
11349
12323
  @else if (_error()) {
11350
12324
  <tr>
11351
- <td [attr.colspan]="visibleCols().length + (_isSelectable() ? 1 : 0)" class="dt-state-cell">
12325
+ <td [attr.colspan]="visibleCols().length + (_isSelectable() ? 1 : 0) + (_reorderOn() ? 1 : 0)" class="dt-state-cell">
11352
12326
  <ui-error-state [message]="_error()!" [retryLabel]="_retryLabel()" (retry)="load()" />
11353
12327
  </td>
11354
12328
  </tr>
@@ -11357,7 +12331,7 @@ i0.ɵɵngDeclareClassMetadata({
11357
12331
  <!-- Empty (no filters active) -->
11358
12332
  @else if (_items().length === 0 && !_hasActiveFilters()) {
11359
12333
  <tr>
11360
- <td [attr.colspan]="visibleCols().length + (_isSelectable() ? 1 : 0)" class="dt-state-cell">
12334
+ <td [attr.colspan]="visibleCols().length + (_isSelectable() ? 1 : 0) + (_reorderOn() ? 1 : 0)" class="dt-state-cell">
11361
12335
  <ui-empty-state iconType="table" [message]="emptyMessage()" />
11362
12336
  </td>
11363
12337
  </tr>
@@ -11366,7 +12340,7 @@ i0.ɵɵngDeclareClassMetadata({
11366
12340
  <!-- No match -->
11367
12341
  @else if (_items().length === 0 && _hasActiveFilters()) {
11368
12342
  <tr>
11369
- <td [attr.colspan]="visibleCols().length + (_isSelectable() ? 1 : 0)" class="dt-state-cell">
12343
+ <td [attr.colspan]="visibleCols().length + (_isSelectable() ? 1 : 0) + (_reorderOn() ? 1 : 0)" class="dt-state-cell">
11370
12344
  <ui-empty-state iconType="search" message="No results match your search or filters.">
11371
12345
  <ui-button variant="secondary" size="sm" (click)="clearFilters()">Clear filters</ui-button>
11372
12346
  </ui-empty-state>
@@ -11382,10 +12356,44 @@ i0.ɵɵngDeclareClassMetadata({
11382
12356
  [style.--i]="$index < 8 ? $index : 8"
11383
12357
  [class.dt-row-clickable]="isRowClickable(item)"
11384
12358
  [class.dt-row-selected]="_isSelectable() && _selectedIds().has(item['id'])"
12359
+ [class.dt-row-dragging]="_dragFrom() === $index"
12360
+ [class.dt-row-over-before]="_reorderOn() && _dragFrom() !== null && _dragOver() === $index && _dragFrom()! > $index"
12361
+ [class.dt-row-over-after]="_reorderOn() && _dragFrom() !== null && _dragOver() === $index && _dragFrom()! < $index"
12362
+ [attr.data-row-key]="_reorderOn() ? trackItem(item, $index) : null"
11385
12363
  [attr.tabindex]="isRowClickable(item) ? 0 : null"
11386
12364
  [attr.aria-label]="rowLabel(item)"
11387
12365
  (keydown)="onRowKeydown($event, item)"
12366
+ (dragover)="onRowDragOver($event, $index)"
12367
+ (drop)="onRowDrop($event, $index)"
11388
12368
  (click)="onRowClick(item)">
12369
+ @if (_reorderOn()) {
12370
+ <td class="dt-td-grip" (click)="$event.stopPropagation()">
12371
+ <span class="dt-grip" role="button" [attr.tabindex]="_reorderActive() ? 0 : null"
12372
+ [attr.draggable]="_reorderActive() ? 'true' : null"
12373
+ [attr.aria-label]="reorderLabel(item)"
12374
+ [attr.aria-disabled]="_reorderActive() ? null : 'true'"
12375
+ [attr.aria-roledescription]="'drag handle'"
12376
+ [attr.aria-describedby]="_reorderHelpId"
12377
+ [attr.title]="_reorderActive() ? 'Drag to reorder, or use the up and down arrow keys' : _reorderHint()"
12378
+ [class.dt-grip-off]="!_reorderActive()"
12379
+ (dragstart)="onGripDragStart($event, $index)"
12380
+ (dragend)="onGripDragEnd()"
12381
+ (keydown)="onGripKeydown($event, $index)">
12382
+ <svg viewBox="0 0 24 24" width="16" height="16" fill="currentColor" aria-hidden="true" focusable="false"><circle cx="9" cy="6" r="1.6"/><circle cx="15" cy="6" r="1.6"/><circle cx="9" cy="12" r="1.6"/><circle cx="15" cy="12" r="1.6"/><circle cx="9" cy="18" r="1.6"/><circle cx="15" cy="18" r="1.6"/></svg>
12383
+ </span>
12384
+ <!-- Touch screens (coarse primary pointer, e.g. a tablet) cannot rely on native drag: they get Move up / Move down instead of the grip. -->
12385
+ <span class="dt-row-move">
12386
+ <ui-button variant="icon" size="sm" [ariaLabel]="'Move ' + (rowAccessibleName(item) || 'row') + ' up'"
12387
+ [disabled]="!_reorderActive() || $first" (click)="moveByButton($index, -1)">
12388
+ <svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 15l6-6 6 6"/></svg>
12389
+ </ui-button>
12390
+ <ui-button variant="icon" size="sm" [ariaLabel]="'Move ' + (rowAccessibleName(item) || 'row') + ' down'"
12391
+ [disabled]="!_reorderActive() || $last" (click)="moveByButton($index, 1)">
12392
+ <svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 9l6 6 6-6"/></svg>
12393
+ </ui-button>
12394
+ </span>
12395
+ </td>
12396
+ }
11389
12397
  @if (_isSelectable()) {
11390
12398
  <td class="dt-td-cb" (click)="$event.stopPropagation()">
11391
12399
  <ui-checkbox
@@ -11591,6 +12599,7 @@ i0.ɵɵngDeclareClassMetadata({
11591
12599
  @for (item of _items(); track trackItem(item, $index)) {
11592
12600
  <div
11593
12601
  class="dt-card alive-row"
12602
+ [attr.data-row-key]="_reorderOn() ? trackItem(item, $index) : null"
11594
12603
  [style.--i]="$index < 8 ? $index : 8"
11595
12604
  role="listitem"
11596
12605
  [class.dt-card-clickable]="isRowClickable(item)"
@@ -11636,6 +12645,18 @@ i0.ɵɵngDeclareClassMetadata({
11636
12645
  </span>
11637
12646
  }
11638
12647
  }
12648
+ @if (_reorderOn()) {
12649
+ <span class="dt-card-move" (click)="$event.stopPropagation()">
12650
+ <ui-button variant="icon" size="sm" [ariaLabel]="'Move ' + (rowAccessibleName(item) || 'row') + ' up'"
12651
+ [disabled]="!_reorderActive() || $first" (click)="moveByButton($index, -1)">
12652
+ <svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 15l6-6 6 6"/></svg>
12653
+ </ui-button>
12654
+ <ui-button variant="icon" size="sm" [ariaLabel]="'Move ' + (rowAccessibleName(item) || 'row') + ' down'"
12655
+ [disabled]="!_reorderActive() || $last" (click)="moveByButton($index, 1)">
12656
+ <svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 9l6 6 6-6"/></svg>
12657
+ </ui-button>
12658
+ </span>
12659
+ }
11639
12660
  @if (_cardCols().actionsCol; as ac) {
11640
12661
  @let cardActions = _rowActions(ac, item);
11641
12662
  @if (cardActions.length) {
@@ -11699,6 +12720,13 @@ i0.ɵɵngDeclareClassMetadata({
11699
12720
  </div>
11700
12721
  }
11701
12722
 
12723
+ @if (_reorderOn()) {
12724
+ <span class="dt-sr-only" [id]="_reorderHelpId">{{ _reorderActive()
12725
+ ? 'Drag to reorder with a mouse, or use the up and down arrow keys; Home moves to the top and End to the bottom.'
12726
+ : _reorderHint() }}</span>
12727
+ <span class="dt-sr-only" role="status" aria-live="polite" aria-atomic="true">{{ _reorderAnnouncement() }}</span>
12728
+ }
12729
+
11702
12730
  <!-- ── PAGINATION ─────────────────────────────────────────── -->
11703
12731
  @if (_total() > pageSize()) {
11704
12732
  <ui-pagination
@@ -11756,7 +12784,7 @@ i0.ɵɵngDeclareClassMetadata({
11756
12784
  }
11757
12785
  </div>
11758
12786
  `,
11759
- 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-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-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-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;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}.dt-bulk-actions{width:100%}.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}.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 12px;font-family:inherit;font-size:1rem;color:#1e293b;background:#fff;border:1px solid #e2e8f0;border-radius:8px}.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;white-space:nowrap}.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}\n"]
12787
+ 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-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-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;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}.dt-bulk-actions{width:100%}.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}.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 12px;font-family:inherit;font-size:1rem;color:#1e293b;background:#fff;border:1px solid #e2e8f0;border-radius:8px}.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;white-space:nowrap}.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}\n"]
11760
12788
  }]
11761
12789
  }],
11762
12790
  ctorParameters: () => [],
@@ -11849,6 +12877,14 @@ i0.ɵɵngDeclareClassMetadata({
11849
12877
  required: false
11850
12878
  }]
11851
12879
  }],
12880
+ showMoreActions: [{
12881
+ type: i0.Input,
12882
+ args: [{
12883
+ isSignal: true,
12884
+ alias: "showMoreActions",
12885
+ required: false
12886
+ }]
12887
+ }],
11852
12888
  showSearch: [{
11853
12889
  type: i0.Input,
11854
12890
  args: [{
@@ -12009,6 +13045,18 @@ i0.ɵɵngDeclareClassMetadata({
12009
13045
  type: i0.Output,
12010
13046
  args: ["rowDeleted"]
12011
13047
  }],
13048
+ reorderable: [{
13049
+ type: i0.Input,
13050
+ args: [{
13051
+ isSignal: true,
13052
+ alias: "reorderable",
13053
+ required: false
13054
+ }]
13055
+ }],
13056
+ rowReorder: [{
13057
+ type: i0.Output,
13058
+ args: ["rowReorder"]
13059
+ }],
12012
13060
  _ieRef: [{
12013
13061
  type: i0.ViewChild,
12014
13062
  args: ["ieRef", { isSignal: true }]
@@ -12029,6 +13077,7 @@ var SidePanelComponent = class SidePanelComponent {
12029
13077
  this.primaryDisabled = input(false, ...ngDevMode ? [{ debugName: "primaryDisabled" }] : /* istanbul ignore next */ []);
12030
13078
  this.cancelTestId = input("", ...ngDevMode ? [{ debugName: "cancelTestId" }] : /* istanbul ignore next */ []);
12031
13079
  this.primaryTestId = input("", ...ngDevMode ? [{ debugName: "primaryTestId" }] : /* istanbul ignore next */ []);
13080
+ this.returnFocusTo = input(null, ...ngDevMode ? [{ debugName: "returnFocusTo" }] : /* istanbul ignore next */ []);
12032
13081
  this.closed = output();
12033
13082
  this.primaryClick = output();
12034
13083
  this.titleId = `sp-title-${Math.random().toString(36).slice(2, 8)}`;
@@ -12038,10 +13087,18 @@ var SidePanelComponent = class SidePanelComponent {
12038
13087
  this._prevFocus = null;
12039
13088
  this._scrollLocked = false;
12040
13089
  this._stopViewport = null;
13090
+ this._stopIframeKeys = null;
13091
+ this._interaction = inject(LastInteraction);
13092
+ this._interaction.acquire(this._doc);
12041
13093
  effect(() => {
12042
13094
  if (this.open()) {
12043
13095
  this._overlays.push(this);
12044
- this._prevFocus = this._doc.activeElement;
13096
+ this._prevFocus = resolveTrigger(this._doc, this._interaction);
13097
+ this._stopIframeKeys?.();
13098
+ this._stopIframeKeys = bridgeIframeKeys(this._el.nativeElement, this._doc, {
13099
+ onEscape: (e) => this.onKeydown(e),
13100
+ isActive: () => this.open() && this._overlays.isTop(this)
13101
+ });
12045
13102
  this._doc.body.style.overflow = "hidden";
12046
13103
  this._scrollLocked = true;
12047
13104
  this._stopViewport?.();
@@ -12053,7 +13110,9 @@ var SidePanelComponent = class SidePanelComponent {
12053
13110
  this._scrollLocked = false;
12054
13111
  this._stopViewport?.();
12055
13112
  this._stopViewport = null;
12056
- this._prevFocus?.focus();
13113
+ this._stopIframeKeys?.();
13114
+ this._stopIframeKeys = null;
13115
+ restoreFocus(untracked(() => this.returnFocusTo()), this._prevFocus);
12057
13116
  this._prevFocus = null;
12058
13117
  }
12059
13118
  });
@@ -12086,6 +13145,10 @@ var SidePanelComponent = class SidePanelComponent {
12086
13145
  }
12087
13146
  }
12088
13147
  }
13148
+ onGuardFocus(which, event) {
13149
+ if (!this._overlays.isTop(this)) return;
13150
+ redirectFromGuard(which, this._el.nativeElement, this._el.nativeElement.querySelector(".sp-panel"), event?.relatedTarget ?? null);
13151
+ }
12089
13152
  _focusFirst() {
12090
13153
  focusInitial(this._el.nativeElement.querySelector(".sp-panel"), this._el.nativeElement.querySelector(".sp-body"), this._doc);
12091
13154
  }
@@ -12093,6 +13156,9 @@ var SidePanelComponent = class SidePanelComponent {
12093
13156
  return tabbables(this._el.nativeElement);
12094
13157
  }
12095
13158
  ngOnDestroy() {
13159
+ this._interaction.release();
13160
+ this._stopIframeKeys?.();
13161
+ this._stopIframeKeys = null;
12096
13162
  this._stopViewport?.();
12097
13163
  this._stopViewport = null;
12098
13164
  this._overlays.remove(this);
@@ -12199,6 +13265,13 @@ var SidePanelComponent = class SidePanelComponent {
12199
13265
  isSignal: true,
12200
13266
  isRequired: false,
12201
13267
  transformFunction: null
13268
+ },
13269
+ returnFocusTo: {
13270
+ classPropertyName: "returnFocusTo",
13271
+ publicName: "returnFocusTo",
13272
+ isSignal: true,
13273
+ isRequired: false,
13274
+ transformFunction: null
12202
13275
  }
12203
13276
  },
12204
13277
  outputs: {
@@ -12218,6 +13291,7 @@ var SidePanelComponent = class SidePanelComponent {
12218
13291
  aria-modal="true"
12219
13292
  tabindex="-1"
12220
13293
  [attr.aria-labelledby]="titleId">
13294
+ <span class="sp-focus-guard" data-ui-focus-guard="start" tabindex="0" (focus)="onGuardFocus('start', $event)"></span>
12221
13295
 
12222
13296
  <!-- Header -->
12223
13297
  <div class="sp-header">
@@ -12271,11 +13345,12 @@ var SidePanelComponent = class SidePanelComponent {
12271
13345
  }
12272
13346
  </div>
12273
13347
  }
13348
+ <span class="sp-focus-guard" data-ui-focus-guard="end" tabindex="0" (focus)="onGuardFocus('end', $event)"></span>
12274
13349
  </aside>
12275
13350
  }
12276
13351
  `,
12277
13352
  isInline: true,
12278
- styles: [".sp-backdrop{position:fixed;inset:0;background:#0000004d;z-index:90;animation:sp-fade .2s ease}.sp-panel{position:fixed;top:0;right:0;bottom:var(--ui-kb, 0px);width:480px;max-width:100vw;max-height:100vh;max-height:var(--ui-vvh, 100dvh);background:#fff;z-index:100;box-shadow:-4px 0 20px #0000001a;display:flex;flex-direction:column;animation:sp-slide .25s ease}.sp-panel:focus{outline:none}.sp-wide{width:620px}.sp-extra-wide{width:760px}.sp-header{display:flex;justify-content:space-between;align-items:center;padding:24px 24px 20px;gap:12px;flex-shrink:0;background:linear-gradient(135deg,#1e293b,#334155)}.sp-header-text{flex:1;min-width:0}.sp-title{font-size:1.125rem;font-weight:700;color:#fff;margin:0}.sp-subtitle{font-size:.8125rem;color:#94a3b8;margin:4px 0 0}.sp-close{display:flex;align-items:center;justify-content:center;flex-shrink:0;width:36px;height:36px;border-radius:8px;border:1px solid rgba(255,255,255,.2);background:#ffffff1a;cursor:pointer;color:#cbd5e1;transition:background .15s,border-color .15s}.sp-close:hover{background:#fff3;border-color:#ffffff4d;color:#fff}.sp-close:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.sp-body{padding:20px 24px 24px;flex:1;overflow-y:auto;overflow-x:hidden}.sp-footer{display:flex;align-items:center;justify-content:space-between;flex-shrink:0;padding:14px 24px calc(14px + env(safe-area-inset-bottom,0px));border-top:1px solid #e2e8f0;background:#f8fafc}.sp-footer-extra{display:flex;align-items:center;justify-content:center;gap:8px;flex:1 1 auto;margin:0 8px;min-width:0}.sp-footer-extra:empty{display:none}.sp-btn{display:inline-flex;align-items:center;gap:7px;padding:8px 18px;border-radius:7px;font-size:.875rem;font-weight:500;font-family:inherit;cursor:pointer;white-space:nowrap;transition:background .1s,border-color .1s,opacity .1s}.sp-btn:disabled{opacity:.5;cursor:default}.sp-btn:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.sp-btn-cancel{background:#fff;border:1px solid #e2e8f0;color:#475569}.sp-btn-cancel:hover:not(:disabled){background:#f8fafc;border-color:#cbd5e1}.sp-btn-primary{background:#3b82f6;border:1px solid #3b82f6;color:#fff}.sp-btn-primary:hover:not(:disabled){background:#2563eb;border-color:#2563eb}.sp-btn-danger{background:#dc2626;border:1px solid #dc2626;color:#fff}.sp-btn-danger:hover:not(:disabled){background:#b91c1c;border-color:#b91c1c}.sp-btn-warning{background:#d97706;border:1px solid #d97706;color:#fff}.sp-btn-warning:hover:not(:disabled){background:#b45309;border-color:#b45309}.sp-spinner{display:inline-block;width:13px;height:13px;border-radius:50%;border:2px solid rgba(255,255,255,.35);border-top-color:#fff;animation:sp-spin .55s linear infinite;flex-shrink:0}@media(max-width:768px){.sp-panel,.sp-wide,.sp-extra-wide{width:100vw}}@media(max-width:480px){.sp-panel,.sp-wide,.sp-extra-wide{inset:auto 0 0;width:100vw;max-height:90vh;max-height:min(90dvh,var(--ui-vvh, 100dvh));border-radius:16px 16px 0 0;box-shadow:0 -4px 24px #00000026;animation:sp-up .25s ease}.sp-header{padding:16px 16px 14px}.sp-body{padding:16px}.sp-footer{padding:12px 16px calc(12px + env(safe-area-inset-bottom,0px))}}@media(pointer:coarse),(max-width:480px){.sp-close{position:relative}.sp-close:after{content:\"\";position:absolute;inset:-5px}.sp-btn{min-height:44px;justify-content:center}}@keyframes sp-slide{0%{transform:translate(100%)}to{transform:translate(0)}}@keyframes sp-up{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes sp-fade{0%{opacity:0}to{opacity:1}}@keyframes sp-spin{to{transform:rotate(360deg)}}\n"],
13353
+ styles: [".sp-backdrop{position:fixed;inset:0;background:#0000004d;z-index:90;animation:sp-fade .2s ease}.sp-panel{position:fixed;top:0;right:0;bottom:var(--ui-kb, 0px);width:480px;max-width:100vw;max-height:100vh;max-height:var(--ui-vvh, 100dvh);background:#fff;z-index:100;box-shadow:-4px 0 20px #0000001a;display:flex;flex-direction:column;animation:sp-slide .25s ease}.sp-panel:focus{outline:none}.sp-focus-guard{position:absolute;width:1px;height:1px;padding:0;margin:-1px;border:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;outline:none}.sp-wide{width:620px}.sp-extra-wide{width:760px}.sp-header{display:flex;justify-content:space-between;align-items:center;padding:24px 24px 20px;gap:12px;flex-shrink:0;background:linear-gradient(135deg,#1e293b,#334155)}.sp-header-text{flex:1;min-width:0}.sp-title{font-size:1.125rem;font-weight:700;color:#fff;margin:0}.sp-subtitle{font-size:.8125rem;color:#94a3b8;margin:4px 0 0}.sp-close{display:flex;align-items:center;justify-content:center;flex-shrink:0;width:36px;height:36px;border-radius:8px;border:1px solid rgba(255,255,255,.2);background:#ffffff1a;cursor:pointer;color:#cbd5e1;transition:background .15s,border-color .15s}.sp-close:hover{background:#fff3;border-color:#ffffff4d;color:#fff}.sp-close:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.sp-body{padding:20px 24px 24px;flex:1;overflow-y:auto;overflow-x:hidden}.sp-footer{display:flex;align-items:center;justify-content:space-between;flex-shrink:0;padding:14px 24px calc(14px + env(safe-area-inset-bottom,0px));border-top:1px solid #e2e8f0;background:#f8fafc}.sp-footer-extra{display:flex;align-items:center;justify-content:center;gap:8px;flex:1 1 auto;margin:0 8px;min-width:0}.sp-footer-extra:empty{display:none}.sp-btn{display:inline-flex;align-items:center;gap:7px;padding:8px 18px;border-radius:7px;font-size:.875rem;font-weight:500;font-family:inherit;cursor:pointer;white-space:nowrap;transition:background .1s,border-color .1s,opacity .1s}.sp-btn:disabled{opacity:.5;cursor:default}.sp-btn:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.sp-btn-cancel{background:#fff;border:1px solid #e2e8f0;color:#475569}.sp-btn-cancel:hover:not(:disabled){background:#f8fafc;border-color:#cbd5e1}.sp-btn-primary{background:#3b82f6;border:1px solid #3b82f6;color:#fff}.sp-btn-primary:hover:not(:disabled){background:#2563eb;border-color:#2563eb}.sp-btn-danger{background:#dc2626;border:1px solid #dc2626;color:#fff}.sp-btn-danger:hover:not(:disabled){background:#b91c1c;border-color:#b91c1c}.sp-btn-warning{background:#d97706;border:1px solid #d97706;color:#fff}.sp-btn-warning:hover:not(:disabled){background:#b45309;border-color:#b45309}.sp-spinner{display:inline-block;width:13px;height:13px;border-radius:50%;border:2px solid rgba(255,255,255,.35);border-top-color:#fff;animation:sp-spin .55s linear infinite;flex-shrink:0}@media(max-width:768px){.sp-panel,.sp-wide,.sp-extra-wide{width:100vw}}@media(max-width:480px){.sp-panel,.sp-wide,.sp-extra-wide{inset:auto 0 0;width:100vw;max-height:90vh;max-height:min(90dvh,var(--ui-vvh, 100dvh));border-radius:16px 16px 0 0;box-shadow:0 -4px 24px #00000026;animation:sp-up .25s ease}.sp-header{padding:16px 16px 14px}.sp-body{padding:16px}.sp-footer{padding:12px 16px calc(12px + env(safe-area-inset-bottom,0px))}}@media(pointer:coarse),(max-width:480px){.sp-close{position:relative}.sp-close:after{content:\"\";position:absolute;inset:-5px}.sp-btn{min-height:44px;justify-content:center}}@keyframes sp-slide{0%{transform:translate(100%)}to{transform:translate(0)}}@keyframes sp-up{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes sp-fade{0%{opacity:0}to{opacity:1}}@keyframes sp-spin{to{transform:rotate(360deg)}}\n"],
12279
13354
  changeDetection: i0.ChangeDetectionStrategy.OnPush
12280
13355
  });
12281
13356
  }
@@ -12303,6 +13378,7 @@ i0.ɵɵngDeclareClassMetadata({
12303
13378
  aria-modal="true"
12304
13379
  tabindex="-1"
12305
13380
  [attr.aria-labelledby]="titleId">
13381
+ <span class="sp-focus-guard" data-ui-focus-guard="start" tabindex="0" (focus)="onGuardFocus('start', $event)"></span>
12306
13382
 
12307
13383
  <!-- Header -->
12308
13384
  <div class="sp-header">
@@ -12356,10 +13432,11 @@ i0.ɵɵngDeclareClassMetadata({
12356
13432
  }
12357
13433
  </div>
12358
13434
  }
13435
+ <span class="sp-focus-guard" data-ui-focus-guard="end" tabindex="0" (focus)="onGuardFocus('end', $event)"></span>
12359
13436
  </aside>
12360
13437
  }
12361
13438
  `,
12362
- styles: [".sp-backdrop{position:fixed;inset:0;background:#0000004d;z-index:90;animation:sp-fade .2s ease}.sp-panel{position:fixed;top:0;right:0;bottom:var(--ui-kb, 0px);width:480px;max-width:100vw;max-height:100vh;max-height:var(--ui-vvh, 100dvh);background:#fff;z-index:100;box-shadow:-4px 0 20px #0000001a;display:flex;flex-direction:column;animation:sp-slide .25s ease}.sp-panel:focus{outline:none}.sp-wide{width:620px}.sp-extra-wide{width:760px}.sp-header{display:flex;justify-content:space-between;align-items:center;padding:24px 24px 20px;gap:12px;flex-shrink:0;background:linear-gradient(135deg,#1e293b,#334155)}.sp-header-text{flex:1;min-width:0}.sp-title{font-size:1.125rem;font-weight:700;color:#fff;margin:0}.sp-subtitle{font-size:.8125rem;color:#94a3b8;margin:4px 0 0}.sp-close{display:flex;align-items:center;justify-content:center;flex-shrink:0;width:36px;height:36px;border-radius:8px;border:1px solid rgba(255,255,255,.2);background:#ffffff1a;cursor:pointer;color:#cbd5e1;transition:background .15s,border-color .15s}.sp-close:hover{background:#fff3;border-color:#ffffff4d;color:#fff}.sp-close:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.sp-body{padding:20px 24px 24px;flex:1;overflow-y:auto;overflow-x:hidden}.sp-footer{display:flex;align-items:center;justify-content:space-between;flex-shrink:0;padding:14px 24px calc(14px + env(safe-area-inset-bottom,0px));border-top:1px solid #e2e8f0;background:#f8fafc}.sp-footer-extra{display:flex;align-items:center;justify-content:center;gap:8px;flex:1 1 auto;margin:0 8px;min-width:0}.sp-footer-extra:empty{display:none}.sp-btn{display:inline-flex;align-items:center;gap:7px;padding:8px 18px;border-radius:7px;font-size:.875rem;font-weight:500;font-family:inherit;cursor:pointer;white-space:nowrap;transition:background .1s,border-color .1s,opacity .1s}.sp-btn:disabled{opacity:.5;cursor:default}.sp-btn:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.sp-btn-cancel{background:#fff;border:1px solid #e2e8f0;color:#475569}.sp-btn-cancel:hover:not(:disabled){background:#f8fafc;border-color:#cbd5e1}.sp-btn-primary{background:#3b82f6;border:1px solid #3b82f6;color:#fff}.sp-btn-primary:hover:not(:disabled){background:#2563eb;border-color:#2563eb}.sp-btn-danger{background:#dc2626;border:1px solid #dc2626;color:#fff}.sp-btn-danger:hover:not(:disabled){background:#b91c1c;border-color:#b91c1c}.sp-btn-warning{background:#d97706;border:1px solid #d97706;color:#fff}.sp-btn-warning:hover:not(:disabled){background:#b45309;border-color:#b45309}.sp-spinner{display:inline-block;width:13px;height:13px;border-radius:50%;border:2px solid rgba(255,255,255,.35);border-top-color:#fff;animation:sp-spin .55s linear infinite;flex-shrink:0}@media(max-width:768px){.sp-panel,.sp-wide,.sp-extra-wide{width:100vw}}@media(max-width:480px){.sp-panel,.sp-wide,.sp-extra-wide{inset:auto 0 0;width:100vw;max-height:90vh;max-height:min(90dvh,var(--ui-vvh, 100dvh));border-radius:16px 16px 0 0;box-shadow:0 -4px 24px #00000026;animation:sp-up .25s ease}.sp-header{padding:16px 16px 14px}.sp-body{padding:16px}.sp-footer{padding:12px 16px calc(12px + env(safe-area-inset-bottom,0px))}}@media(pointer:coarse),(max-width:480px){.sp-close{position:relative}.sp-close:after{content:\"\";position:absolute;inset:-5px}.sp-btn{min-height:44px;justify-content:center}}@keyframes sp-slide{0%{transform:translate(100%)}to{transform:translate(0)}}@keyframes sp-up{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes sp-fade{0%{opacity:0}to{opacity:1}}@keyframes sp-spin{to{transform:rotate(360deg)}}\n"]
13439
+ styles: [".sp-backdrop{position:fixed;inset:0;background:#0000004d;z-index:90;animation:sp-fade .2s ease}.sp-panel{position:fixed;top:0;right:0;bottom:var(--ui-kb, 0px);width:480px;max-width:100vw;max-height:100vh;max-height:var(--ui-vvh, 100dvh);background:#fff;z-index:100;box-shadow:-4px 0 20px #0000001a;display:flex;flex-direction:column;animation:sp-slide .25s ease}.sp-panel:focus{outline:none}.sp-focus-guard{position:absolute;width:1px;height:1px;padding:0;margin:-1px;border:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;outline:none}.sp-wide{width:620px}.sp-extra-wide{width:760px}.sp-header{display:flex;justify-content:space-between;align-items:center;padding:24px 24px 20px;gap:12px;flex-shrink:0;background:linear-gradient(135deg,#1e293b,#334155)}.sp-header-text{flex:1;min-width:0}.sp-title{font-size:1.125rem;font-weight:700;color:#fff;margin:0}.sp-subtitle{font-size:.8125rem;color:#94a3b8;margin:4px 0 0}.sp-close{display:flex;align-items:center;justify-content:center;flex-shrink:0;width:36px;height:36px;border-radius:8px;border:1px solid rgba(255,255,255,.2);background:#ffffff1a;cursor:pointer;color:#cbd5e1;transition:background .15s,border-color .15s}.sp-close:hover{background:#fff3;border-color:#ffffff4d;color:#fff}.sp-close:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.sp-body{padding:20px 24px 24px;flex:1;overflow-y:auto;overflow-x:hidden}.sp-footer{display:flex;align-items:center;justify-content:space-between;flex-shrink:0;padding:14px 24px calc(14px + env(safe-area-inset-bottom,0px));border-top:1px solid #e2e8f0;background:#f8fafc}.sp-footer-extra{display:flex;align-items:center;justify-content:center;gap:8px;flex:1 1 auto;margin:0 8px;min-width:0}.sp-footer-extra:empty{display:none}.sp-btn{display:inline-flex;align-items:center;gap:7px;padding:8px 18px;border-radius:7px;font-size:.875rem;font-weight:500;font-family:inherit;cursor:pointer;white-space:nowrap;transition:background .1s,border-color .1s,opacity .1s}.sp-btn:disabled{opacity:.5;cursor:default}.sp-btn:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.sp-btn-cancel{background:#fff;border:1px solid #e2e8f0;color:#475569}.sp-btn-cancel:hover:not(:disabled){background:#f8fafc;border-color:#cbd5e1}.sp-btn-primary{background:#3b82f6;border:1px solid #3b82f6;color:#fff}.sp-btn-primary:hover:not(:disabled){background:#2563eb;border-color:#2563eb}.sp-btn-danger{background:#dc2626;border:1px solid #dc2626;color:#fff}.sp-btn-danger:hover:not(:disabled){background:#b91c1c;border-color:#b91c1c}.sp-btn-warning{background:#d97706;border:1px solid #d97706;color:#fff}.sp-btn-warning:hover:not(:disabled){background:#b45309;border-color:#b45309}.sp-spinner{display:inline-block;width:13px;height:13px;border-radius:50%;border:2px solid rgba(255,255,255,.35);border-top-color:#fff;animation:sp-spin .55s linear infinite;flex-shrink:0}@media(max-width:768px){.sp-panel,.sp-wide,.sp-extra-wide{width:100vw}}@media(max-width:480px){.sp-panel,.sp-wide,.sp-extra-wide{inset:auto 0 0;width:100vw;max-height:90vh;max-height:min(90dvh,var(--ui-vvh, 100dvh));border-radius:16px 16px 0 0;box-shadow:0 -4px 24px #00000026;animation:sp-up .25s ease}.sp-header{padding:16px 16px 14px}.sp-body{padding:16px}.sp-footer{padding:12px 16px calc(12px + env(safe-area-inset-bottom,0px))}}@media(pointer:coarse),(max-width:480px){.sp-close{position:relative}.sp-close:after{content:\"\";position:absolute;inset:-5px}.sp-btn{min-height:44px;justify-content:center}}@keyframes sp-slide{0%{transform:translate(100%)}to{transform:translate(0)}}@keyframes sp-up{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes sp-fade{0%{opacity:0}to{opacity:1}}@keyframes sp-spin{to{transform:rotate(360deg)}}\n"]
12363
13440
  }]
12364
13441
  }],
12365
13442
  ctorParameters: () => [],
@@ -12460,6 +13537,14 @@ i0.ɵɵngDeclareClassMetadata({
12460
13537
  required: false
12461
13538
  }]
12462
13539
  }],
13540
+ returnFocusTo: [{
13541
+ type: i0.Input,
13542
+ args: [{
13543
+ isSignal: true,
13544
+ alias: "returnFocusTo",
13545
+ required: false
13546
+ }]
13547
+ }],
12463
13548
  closed: [{
12464
13549
  type: i0.Output,
12465
13550
  args: ["closed"]
@@ -13123,6 +14208,7 @@ var ToggleComponent = class ToggleComponent {
13123
14208
  this.label = input("", ...ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []);
13124
14209
  this.hint = input("", ...ngDevMode ? [{ debugName: "hint" }] : /* istanbul ignore next */ []);
13125
14210
  this.ariaLabel = input("", ...ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []);
14211
+ this.ariaDescribedBy = input("", ...ngDevMode ? [{ debugName: "ariaDescribedBy" }] : /* istanbul ignore next */ []);
13126
14212
  this.checked = model(false, ...ngDevMode ? [{ debugName: "checked" }] : /* istanbul ignore next */ []);
13127
14213
  this._disabledInput = input(false, {
13128
14214
  ...ngDevMode ? { debugName: "_disabledInput" } : /* istanbul ignore next */ {},
@@ -13134,6 +14220,10 @@ var ToggleComponent = class ToggleComponent {
13134
14220
  this._inputId = `${this._id}-input`;
13135
14221
  this._labelId = `${this._id}-label`;
13136
14222
  this._hintId = `${this._id}-hint`;
14223
+ this._describedBy = computed(() => {
14224
+ const ids = [this.hint() ? this._hintId : "", this.ariaDescribedBy().trim()].filter(Boolean);
14225
+ return ids.length ? ids.join(" ") : null;
14226
+ }, ...ngDevMode ? [{ debugName: "_describedBy" }] : /* istanbul ignore next */ []);
13137
14227
  this._onChange = (_) => {};
13138
14228
  this._onTouched = () => {};
13139
14229
  }
@@ -13201,6 +14291,13 @@ var ToggleComponent = class ToggleComponent {
13201
14291
  isRequired: false,
13202
14292
  transformFunction: null
13203
14293
  },
14294
+ ariaDescribedBy: {
14295
+ classPropertyName: "ariaDescribedBy",
14296
+ publicName: "ariaDescribedBy",
14297
+ isSignal: true,
14298
+ isRequired: false,
14299
+ transformFunction: null
14300
+ },
13204
14301
  checked: {
13205
14302
  classPropertyName: "checked",
13206
14303
  publicName: "checked",
@@ -13242,7 +14339,7 @@ var ToggleComponent = class ToggleComponent {
13242
14339
  [attr.aria-checked]="checked() ? 'true' : 'false'"
13243
14340
  [attr.aria-labelledby]="label() ? _labelId : null"
13244
14341
  [attr.aria-label]="label() ? null : (ariaLabel() || null)"
13245
- [attr.aria-describedby]="hint() ? _hintId : null"
14342
+ [attr.aria-describedby]="_describedBy()"
13246
14343
  (change)="onToggle($event)"
13247
14344
  (blur)="onTouched()" />
13248
14345
  <span class="tg-slider" aria-hidden="true"></span>
@@ -13290,7 +14387,7 @@ i0.ɵɵngDeclareClassMetadata({
13290
14387
  [attr.aria-checked]="checked() ? 'true' : 'false'"
13291
14388
  [attr.aria-labelledby]="label() ? _labelId : null"
13292
14389
  [attr.aria-label]="label() ? null : (ariaLabel() || null)"
13293
- [attr.aria-describedby]="hint() ? _hintId : null"
14390
+ [attr.aria-describedby]="_describedBy()"
13294
14391
  (change)="onToggle($event)"
13295
14392
  (blur)="onTouched()" />
13296
14393
  <span class="tg-slider" aria-hidden="true"></span>
@@ -13325,6 +14422,14 @@ i0.ɵɵngDeclareClassMetadata({
13325
14422
  required: false
13326
14423
  }]
13327
14424
  }],
14425
+ ariaDescribedBy: [{
14426
+ type: i0.Input,
14427
+ args: [{
14428
+ isSignal: true,
14429
+ alias: "ariaDescribedBy",
14430
+ required: false
14431
+ }]
14432
+ }],
13328
14433
  checked: [{
13329
14434
  type: i0.Input,
13330
14435
  args: [{
@@ -14292,7 +15397,7 @@ var BusinessHoursComponent = class BusinessHoursComponent {
14292
15397
  </div>
14293
15398
  `,
14294
15399
  isInline: true,
14295
- styles: [":host{display:block}.bh-label{display:block;font-size:.8125rem;font-weight:600;color:#334155;margin-bottom:4px}.bh-tools{margin:2px 0 4px}.bh-grid{display:flex;flex-direction:column}.bh-row{display:flex;align-items:flex-start;gap:12px;padding:8px 0;border-bottom:1px solid #f1f5f9}.bh-row:last-child{border-bottom:none}.bh-day{width:140px;flex-shrink:0;padding-top:6px}.bh-times{display:flex;flex-direction:column;gap:6px;flex:1;min-width:0}.bh-shift{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.bh-to{font-size:.8125rem;color:#94a3b8}.bh-closed{font-size:.8125rem;color:#94a3b8;font-style:italic;padding-top:8px}.bh-desc{margin:6px 0 0;font-size:.75rem;line-height:1.4;color:#64748b}.bh-desc-error{color:#ef4444}@media(max-width:480px){.bh-row{flex-direction:column;gap:4px}.bh-day{width:auto;padding-top:0}.bh-closed{padding-top:0}}\n"],
15400
+ styles: [":host{display:block}.bh-label{display:block;font-size:.8125rem;font-weight:600;color:#334155;margin-bottom:4px}.bh-tools{margin:2px 0 4px}.bh-grid{display:flex;flex-direction:column}.bh-row{display:flex;align-items:flex-start;gap:12px;padding:8px 0;border-bottom:1px solid #f1f5f9}.bh-row:last-child{border-bottom:none}.bh-day{width:140px;flex-shrink:0;padding-top:6px}.bh-times{display:flex;flex-direction:column;gap:6px;flex:1;min-width:0}.bh-shift{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.bh-to{font-size:.8125rem;color:#94a3b8}.bh-closed{font-size:.8125rem;color:#94a3b8;font-style:italic;padding-top:8px}.bh-desc{margin:6px 0 0;font-size:.75rem;line-height:1.4;color:#64748b}.bh-desc-error{color:#dc2626}@media(max-width:480px){.bh-row{flex-direction:column;gap:4px}.bh-day{width:auto;padding-top:0}.bh-closed{padding-top:0}}\n"],
14296
15401
  dependencies: [
14297
15402
  {
14298
15403
  kind: "ngmodule",
@@ -14478,7 +15583,7 @@ i0.ɵɵngDeclareClassMetadata({
14478
15583
  }
14479
15584
  </div>
14480
15585
  `,
14481
- styles: [":host{display:block}.bh-label{display:block;font-size:.8125rem;font-weight:600;color:#334155;margin-bottom:4px}.bh-tools{margin:2px 0 4px}.bh-grid{display:flex;flex-direction:column}.bh-row{display:flex;align-items:flex-start;gap:12px;padding:8px 0;border-bottom:1px solid #f1f5f9}.bh-row:last-child{border-bottom:none}.bh-day{width:140px;flex-shrink:0;padding-top:6px}.bh-times{display:flex;flex-direction:column;gap:6px;flex:1;min-width:0}.bh-shift{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.bh-to{font-size:.8125rem;color:#94a3b8}.bh-closed{font-size:.8125rem;color:#94a3b8;font-style:italic;padding-top:8px}.bh-desc{margin:6px 0 0;font-size:.75rem;line-height:1.4;color:#64748b}.bh-desc-error{color:#ef4444}@media(max-width:480px){.bh-row{flex-direction:column;gap:4px}.bh-day{width:auto;padding-top:0}.bh-closed{padding-top:0}}\n"]
15586
+ styles: [":host{display:block}.bh-label{display:block;font-size:.8125rem;font-weight:600;color:#334155;margin-bottom:4px}.bh-tools{margin:2px 0 4px}.bh-grid{display:flex;flex-direction:column}.bh-row{display:flex;align-items:flex-start;gap:12px;padding:8px 0;border-bottom:1px solid #f1f5f9}.bh-row:last-child{border-bottom:none}.bh-day{width:140px;flex-shrink:0;padding-top:6px}.bh-times{display:flex;flex-direction:column;gap:6px;flex:1;min-width:0}.bh-shift{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.bh-to{font-size:.8125rem;color:#94a3b8}.bh-closed{font-size:.8125rem;color:#94a3b8;font-style:italic;padding-top:8px}.bh-desc{margin:6px 0 0;font-size:.75rem;line-height:1.4;color:#64748b}.bh-desc-error{color:#dc2626}@media(max-width:480px){.bh-row{flex-direction:column;gap:4px}.bh-day{width:auto;padding-top:0}.bh-closed{padding-top:0}}\n"]
14482
15587
  }]
14483
15588
  }],
14484
15589
  ctorParameters: () => [],
@@ -15187,7 +16292,7 @@ var RadioGroupComponent = class RadioGroupComponent {
15187
16292
  </fieldset>
15188
16293
  `,
15189
16294
  isInline: true,
15190
- styles: [":host{display:block}.rg-field{display:flex;flex-direction:column;gap:6px;border:0;margin:0;padding:0;min-width:0}.rg-label{padding:0;margin-bottom:6px;font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.rg-required{color:#ef4444;margin-left:2px}.rg-options{display:flex;flex-direction:column;gap:10px}.rg-options.rg-horizontal{flex-direction:row;flex-wrap:wrap;gap:8px 20px}.rg-nested{padding-left:29px;min-width:0}.rg-options.rg-horizontal .rg-nested{flex:1 0 100%}.rg-disabled{cursor:not-allowed}.rg-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.rg-desc-error{color:#ef4444}@media(pointer:coarse),(max-width:480px){.rg-options{gap:4px}}\n"],
16295
+ styles: [":host{display:block}.rg-field{display:flex;flex-direction:column;gap:6px;border:0;margin:0;padding:0;min-width:0}.rg-label{padding:0;margin-bottom:6px;font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.rg-required{color:#dc2626;margin-left:2px}.rg-options{display:flex;flex-direction:column;gap:10px}.rg-options.rg-horizontal{flex-direction:row;flex-wrap:wrap;gap:8px 20px}.rg-nested{padding-left:29px;min-width:0}.rg-options.rg-horizontal .rg-nested{flex:1 0 100%}.rg-disabled{cursor:not-allowed}.rg-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.rg-desc-error{color:#dc2626}@media(pointer:coarse),(max-width:480px){.rg-options{gap:4px}}\n"],
15191
16296
  dependencies: [{
15192
16297
  kind: "component",
15193
16298
  type: RadioComponent,
@@ -15293,7 +16398,7 @@ i0.ɵɵngDeclareClassMetadata({
15293
16398
  }
15294
16399
  </fieldset>
15295
16400
  `,
15296
- styles: [":host{display:block}.rg-field{display:flex;flex-direction:column;gap:6px;border:0;margin:0;padding:0;min-width:0}.rg-label{padding:0;margin-bottom:6px;font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.rg-required{color:#ef4444;margin-left:2px}.rg-options{display:flex;flex-direction:column;gap:10px}.rg-options.rg-horizontal{flex-direction:row;flex-wrap:wrap;gap:8px 20px}.rg-nested{padding-left:29px;min-width:0}.rg-options.rg-horizontal .rg-nested{flex:1 0 100%}.rg-disabled{cursor:not-allowed}.rg-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.rg-desc-error{color:#ef4444}@media(pointer:coarse),(max-width:480px){.rg-options{gap:4px}}\n"]
16401
+ styles: [":host{display:block}.rg-field{display:flex;flex-direction:column;gap:6px;border:0;margin:0;padding:0;min-width:0}.rg-label{padding:0;margin-bottom:6px;font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.rg-required{color:#dc2626;margin-left:2px}.rg-options{display:flex;flex-direction:column;gap:10px}.rg-options.rg-horizontal{flex-direction:row;flex-wrap:wrap;gap:8px 20px}.rg-nested{padding-left:29px;min-width:0}.rg-options.rg-horizontal .rg-nested{flex:1 0 100%}.rg-disabled{cursor:not-allowed}.rg-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.rg-desc-error{color:#dc2626}@media(pointer:coarse),(max-width:480px){.rg-options{gap:4px}}\n"]
15297
16402
  }]
15298
16403
  }],
15299
16404
  ctorParameters: () => [],
@@ -15469,7 +16574,7 @@ var AlertComponent = class AlertComponent {
15469
16574
  </div>
15470
16575
  `,
15471
16576
  isInline: true,
15472
- styles: [":host{display:block}.alert{display:flex;align-items:flex-start;gap:12px;padding:12px 14px;border-radius:8px;border-left:4px solid transparent;font-size:13px;line-height:1.5}.alert--info{background:#dbeafe;border-color:#3b82f6;color:#1e3a8a}.alert--success{background:#dcfce7;border-color:#22c55e;color:#14532d}.alert--warning{background:#ffedd5;border-color:#f97316;color:#7c2d12}.alert--danger{background:#fee2e2;border-color:#ef4444;color:#7f1d1d}.alert--neutral{background:#f1f5f9;border-color:#64748b;color:#334155}.alert--compact{padding:8px 12px;gap:8px;font-size:12.5px;line-height:1.4}.alert-content{flex:1;display:flex;flex-direction:column;gap:2px}.alert-title{font-weight:700}.alert-body{opacity:.9;display:flex;align-items:center;flex-wrap:wrap;gap:8px}.alert-body--inline{display:block}.alert-body--inline>*{vertical-align:middle}.alert-dismiss{flex-shrink:0;background:none;border:none;cursor:pointer;padding:2px;border-radius:4px;color:inherit;opacity:.6;display:flex;align-items:center;transition:opacity .15s}.alert-dismiss:hover{opacity:1}\n"],
16577
+ styles: [":host{display:block}.alert{display:flex;align-items:flex-start;gap:12px;padding:12px 14px;border-radius:8px;border-left:4px solid transparent;font-size:13px;line-height:1.5}.alert--info{background:#dbeafe;border-color:#3b82f6;color:#1e3a8a}.alert--success{background:#dcfce7;border-color:#22c55e;color:#14532d}.alert--warning{background:#ffedd5;border-color:#f97316;color:#7c2d12}.alert--danger{background:#fee2e2;border-color:#ef4444;color:#7f1d1d}.alert--neutral{background:#f1f5f9;border-color:#64748b;color:#334155}.alert--compact{padding:8px 12px;gap:8px;font-size:12.5px;line-height:1.4}.alert-content{flex:1;display:flex;flex-direction:column;gap:2px}.alert-title{font-weight:700}.alert-body{opacity:.9;display:flex;align-items:center;flex-wrap:wrap;gap:8px}.alert-body--inline{display:block}.alert-body--inline>*{vertical-align:middle}.alert-dismiss{flex-shrink:0;background:none;border:none;cursor:pointer;padding:2px;border-radius:4px;color:inherit;opacity:.6;display:flex;align-items:center;transition:opacity .15s}.alert-dismiss:hover{opacity:1}.alert-dismiss:focus-visible{outline:2px solid currentColor;outline-offset:2px}@media(pointer:coarse),(max-width:480px){.alert-dismiss{position:relative}.alert-dismiss:after{content:\"\";position:absolute;inset:-13px}}\n"],
15473
16578
  changeDetection: i0.ChangeDetectionStrategy.OnPush
15474
16579
  });
15475
16580
  }
@@ -15500,7 +16605,7 @@ i0.ɵɵngDeclareClassMetadata({
15500
16605
  }
15501
16606
  </div>
15502
16607
  `,
15503
- styles: [":host{display:block}.alert{display:flex;align-items:flex-start;gap:12px;padding:12px 14px;border-radius:8px;border-left:4px solid transparent;font-size:13px;line-height:1.5}.alert--info{background:#dbeafe;border-color:#3b82f6;color:#1e3a8a}.alert--success{background:#dcfce7;border-color:#22c55e;color:#14532d}.alert--warning{background:#ffedd5;border-color:#f97316;color:#7c2d12}.alert--danger{background:#fee2e2;border-color:#ef4444;color:#7f1d1d}.alert--neutral{background:#f1f5f9;border-color:#64748b;color:#334155}.alert--compact{padding:8px 12px;gap:8px;font-size:12.5px;line-height:1.4}.alert-content{flex:1;display:flex;flex-direction:column;gap:2px}.alert-title{font-weight:700}.alert-body{opacity:.9;display:flex;align-items:center;flex-wrap:wrap;gap:8px}.alert-body--inline{display:block}.alert-body--inline>*{vertical-align:middle}.alert-dismiss{flex-shrink:0;background:none;border:none;cursor:pointer;padding:2px;border-radius:4px;color:inherit;opacity:.6;display:flex;align-items:center;transition:opacity .15s}.alert-dismiss:hover{opacity:1}\n"]
16608
+ styles: [":host{display:block}.alert{display:flex;align-items:flex-start;gap:12px;padding:12px 14px;border-radius:8px;border-left:4px solid transparent;font-size:13px;line-height:1.5}.alert--info{background:#dbeafe;border-color:#3b82f6;color:#1e3a8a}.alert--success{background:#dcfce7;border-color:#22c55e;color:#14532d}.alert--warning{background:#ffedd5;border-color:#f97316;color:#7c2d12}.alert--danger{background:#fee2e2;border-color:#ef4444;color:#7f1d1d}.alert--neutral{background:#f1f5f9;border-color:#64748b;color:#334155}.alert--compact{padding:8px 12px;gap:8px;font-size:12.5px;line-height:1.4}.alert-content{flex:1;display:flex;flex-direction:column;gap:2px}.alert-title{font-weight:700}.alert-body{opacity:.9;display:flex;align-items:center;flex-wrap:wrap;gap:8px}.alert-body--inline{display:block}.alert-body--inline>*{vertical-align:middle}.alert-dismiss{flex-shrink:0;background:none;border:none;cursor:pointer;padding:2px;border-radius:4px;color:inherit;opacity:.6;display:flex;align-items:center;transition:opacity .15s}.alert-dismiss:hover{opacity:1}.alert-dismiss:focus-visible{outline:2px solid currentColor;outline-offset:2px}@media(pointer:coarse),(max-width:480px){.alert-dismiss{position:relative}.alert-dismiss:after{content:\"\";position:absolute;inset:-13px}}\n"]
15504
16609
  }]
15505
16610
  }],
15506
16611
  propDecorators: {
@@ -16023,7 +17128,8 @@ var PhoneNumberPickerComponent = class PhoneNumberPickerComponent {
16023
17128
  "primaryLoading",
16024
17129
  "primaryDisabled",
16025
17130
  "cancelTestId",
16026
- "primaryTestId"
17131
+ "primaryTestId",
17132
+ "returnFocusTo"
16027
17133
  ],
16028
17134
  outputs: ["closed", "primaryClick"]
16029
17135
  },
@@ -16036,6 +17142,9 @@ var PhoneNumberPickerComponent = class PhoneNumberPickerComponent {
16036
17142
  "ariaLabel",
16037
17143
  "placeholder",
16038
17144
  "prefix",
17145
+ "revealable",
17146
+ "passwordRequirements",
17147
+ "passwordRules",
16039
17148
  "type",
16040
17149
  "maxlength",
16041
17150
  "required",
@@ -17174,7 +18283,7 @@ var ContactPickerComponent = class ContactPickerComponent {
17174
18283
  </div>
17175
18284
  `,
17176
18285
  isInline: true,
17177
- styles: [".picker-wrapper{position:relative;overflow:visible}.picker-label{display:block;font-size:.8125rem;font-weight:600;color:#374151;margin-bottom:6px}.picker-req{color:#ef4444}.picker-hint{margin:6px 0 0;font-size:.75rem;line-height:1.4;color:#64748b}.picker-input{width:100%;padding:9px 12px;border:1px solid #e2e8f0;border-radius:8px;font-size:.875rem;color:#1e293b;font-family:inherit;outline:none;box-sizing:border-box}.picker-input::placeholder{color:#94a3b8}.picker-input:focus{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.picker-input:focus-visible{outline:2px solid transparent}@media(max-width:480px){.picker-input{font-size:1rem}}.picker-sr{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.picker-dropdown{position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:9999;background:#fff;border:1px solid #e2e8f0;border-radius:8px;box-shadow:0 6px 16px #0000001a;max-height:240px;overflow-y:auto}@media(pointer:coarse),(max-width:480px){.picker-input{min-height:44px}.picker-dropdown{max-height:min(240px,40vh);overscroll-behavior:contain}.picker-option{min-height:44px;justify-content:center;box-sizing:border-box}.picker-option--check{min-height:44px}.chip-remove{position:relative}.chip-remove:after{content:\"\";position:absolute;inset:-13px}}@media(max-width:480px){:host-context(.m-body) .picker-dropdown{position:static;margin-top:4px;max-height:min(240px,calc(var(--ui-vvh, 100dvh) * .3))}}.picker-option{display:flex;flex-direction:column;gap:2px;width:100%;padding:10px 12px;border:none;background:none;text-align:left;cursor:pointer;font-family:inherit}.picker-option:hover,.picker-option.picker-option--active{background:#f8fafc}.picker-option:first-child{border-radius:8px 8px 0 0}.picker-option:last-child{border-radius:0 0 8px 8px}.picker-option--check{flex-direction:row;align-items:center;gap:10px}.picker-option--check .option-body{display:flex;flex-direction:column;gap:1px;min-width:0;flex:1}.picker-option--check .option-name,.picker-option--check .option-detail{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.option-check{display:flex;pointer-events:none}.option-name{font-size:.875rem;font-weight:600;color:#1e293b;overflow-wrap:anywhere}.option-detail{font-size:.75rem;color:#94a3b8;overflow-wrap:anywhere}.picker-loading,.picker-empty{padding:12px;font-size:.8125rem;color:#94a3b8;text-align:center}.selected-input{display:flex;align-items:center;justify-content:space-between;padding:9px 12px;border:1px solid #e2e8f0;border-radius:8px;background:#f8fafc;font-size:.875rem;font-weight:600;color:#1e293b;gap:8px;overflow-wrap:anywhere;min-width:0}.selected-input:focus{outline:none}.selected-input:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.clear-btn{width:18px;height:18px;border:none;background:#e2e8f0;border-radius:50%;cursor:pointer;font-size:.75rem;color:#64748b;display:flex;align-items:center;justify-content:center;position:relative;flex-shrink:0}.clear-btn:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.clear-btn:hover{background:#cbd5e1;color:#1e293b}.clear-btn:after{content:\"\";position:absolute;inset:-13px}.recipient-details{margin-top:16px}.details-label{display:block;font-size:.6875rem;font-weight:600;color:#94a3b8;text-transform:uppercase;letter-spacing:.05em;margin-bottom:8px}.details-card{border:1px solid #e2e8f0;border-radius:8px;overflow:hidden}.detail-row{display:flex;justify-content:space-between;align-items:center;padding:10px 14px;border-bottom:1px solid #f1f5f9}.detail-row.last{border-bottom:none}.detail-row:nth-child(2n){background:#f8fafc}.detail-key{font-size:.8125rem;color:#94a3b8;font-weight:500}.detail-val{font-size:.875rem;color:#1e293b;font-weight:600}.multi-chips{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:8px}.multi-chip{display:inline-flex;align-items:center;gap:4px;padding:4px 8px 4px 10px;background:#dbeafe;border-radius:20px;font-size:.8125rem;font-weight:500;color:#1e40af}.chip-remove{width:18px;height:18px;border:none;background:#1e40af26;border-radius:50%;cursor:pointer;font-size:.875rem;line-height:1;color:#1e40af;display:flex;align-items:center;justify-content:center;flex-shrink:0}.chip-remove:hover{background:#1e40af4d}.chip-remove:focus-visible{outline:2px solid #1e40af;outline-offset:2px}@media(forced-colors:active){.picker-input:focus{outline:2px solid Highlight;outline-offset:1px}.picker-option--active{outline:2px solid Highlight;outline-offset:-2px}}\n"],
18286
+ styles: [".picker-wrapper{position:relative;overflow:visible}.picker-label{display:block;font-size:.8125rem;font-weight:600;color:#374151;margin-bottom:6px}.picker-req{color:#dc2626}.picker-hint{margin:6px 0 0;font-size:.75rem;line-height:1.4;color:#64748b}.picker-input{width:100%;padding:9px 12px;border:1px solid #e2e8f0;border-radius:8px;font-size:.875rem;color:#1e293b;font-family:inherit;outline:none;box-sizing:border-box}.picker-input::placeholder{color:#94a3b8}.picker-input:focus{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.picker-input:focus-visible{outline:2px solid transparent}@media(max-width:480px){.picker-input{font-size:1rem}}.picker-sr{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.picker-dropdown{position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:9999;background:#fff;border:1px solid #e2e8f0;border-radius:8px;box-shadow:0 6px 16px #0000001a;max-height:240px;overflow-y:auto}@media(pointer:coarse),(max-width:480px){.picker-input{min-height:44px}.picker-dropdown{max-height:min(240px,40vh);overscroll-behavior:contain}.picker-option{min-height:44px;justify-content:center;box-sizing:border-box}.picker-option--check{min-height:44px}.chip-remove{position:relative}.chip-remove:after{content:\"\";position:absolute;inset:-13px}}@media(max-width:480px){:host-context(.m-body) .picker-dropdown{position:static;margin-top:4px;max-height:min(240px,calc(var(--ui-vvh, 100dvh) * .3))}}.picker-option{display:flex;flex-direction:column;gap:2px;width:100%;padding:10px 12px;border:none;background:none;text-align:left;cursor:pointer;font-family:inherit}.picker-option:hover,.picker-option.picker-option--active{background:#f8fafc}.picker-option:first-child{border-radius:8px 8px 0 0}.picker-option:last-child{border-radius:0 0 8px 8px}.picker-option--check{flex-direction:row;align-items:center;gap:10px}.picker-option--check .option-body{display:flex;flex-direction:column;gap:1px;min-width:0;flex:1}.picker-option--check .option-name,.picker-option--check .option-detail{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.option-check{display:flex;pointer-events:none}.option-name{font-size:.875rem;font-weight:600;color:#1e293b;overflow-wrap:anywhere}.option-detail{font-size:.75rem;color:#94a3b8;overflow-wrap:anywhere}.picker-loading,.picker-empty{padding:12px;font-size:.8125rem;color:#94a3b8;text-align:center}.selected-input{display:flex;align-items:center;justify-content:space-between;padding:9px 12px;border:1px solid #e2e8f0;border-radius:8px;background:#f8fafc;font-size:.875rem;font-weight:600;color:#1e293b;gap:8px;overflow-wrap:anywhere;min-width:0}.selected-input:focus{outline:none}.selected-input:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.clear-btn{width:18px;height:18px;border:none;background:#e2e8f0;border-radius:50%;cursor:pointer;font-size:.75rem;color:#64748b;display:flex;align-items:center;justify-content:center;position:relative;flex-shrink:0}.clear-btn:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.clear-btn:hover{background:#cbd5e1;color:#1e293b}.clear-btn:after{content:\"\";position:absolute;inset:-13px}.recipient-details{margin-top:16px}.details-label{display:block;font-size:.6875rem;font-weight:600;color:#94a3b8;text-transform:uppercase;letter-spacing:.05em;margin-bottom:8px}.details-card{border:1px solid #e2e8f0;border-radius:8px;overflow:hidden}.detail-row{display:flex;justify-content:space-between;align-items:center;padding:10px 14px;border-bottom:1px solid #f1f5f9}.detail-row.last{border-bottom:none}.detail-row:nth-child(2n){background:#f8fafc}.detail-key{font-size:.8125rem;color:#94a3b8;font-weight:500}.detail-val{font-size:.875rem;color:#1e293b;font-weight:600}.multi-chips{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:8px}.multi-chip{display:inline-flex;align-items:center;gap:4px;padding:4px 8px 4px 10px;background:#dbeafe;border-radius:20px;font-size:.8125rem;font-weight:500;color:#1e40af}.chip-remove{width:18px;height:18px;border:none;background:#1e40af26;border-radius:50%;cursor:pointer;font-size:.875rem;line-height:1;color:#1e40af;display:flex;align-items:center;justify-content:center;flex-shrink:0}.chip-remove:hover{background:#1e40af4d}.chip-remove:focus-visible{outline:2px solid #1e40af;outline-offset:2px}@media(forced-colors:active){.picker-input:focus{outline:2px solid Highlight;outline-offset:1px}.picker-option--active{outline:2px solid Highlight;outline-offset:-2px}}\n"],
17178
18287
  dependencies: [
17179
18288
  {
17180
18289
  kind: "ngmodule",
@@ -17415,7 +18524,7 @@ i0.ɵɵngDeclareClassMetadata({
17415
18524
  }
17416
18525
  </div>
17417
18526
  `,
17418
- styles: [".picker-wrapper{position:relative;overflow:visible}.picker-label{display:block;font-size:.8125rem;font-weight:600;color:#374151;margin-bottom:6px}.picker-req{color:#ef4444}.picker-hint{margin:6px 0 0;font-size:.75rem;line-height:1.4;color:#64748b}.picker-input{width:100%;padding:9px 12px;border:1px solid #e2e8f0;border-radius:8px;font-size:.875rem;color:#1e293b;font-family:inherit;outline:none;box-sizing:border-box}.picker-input::placeholder{color:#94a3b8}.picker-input:focus{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.picker-input:focus-visible{outline:2px solid transparent}@media(max-width:480px){.picker-input{font-size:1rem}}.picker-sr{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.picker-dropdown{position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:9999;background:#fff;border:1px solid #e2e8f0;border-radius:8px;box-shadow:0 6px 16px #0000001a;max-height:240px;overflow-y:auto}@media(pointer:coarse),(max-width:480px){.picker-input{min-height:44px}.picker-dropdown{max-height:min(240px,40vh);overscroll-behavior:contain}.picker-option{min-height:44px;justify-content:center;box-sizing:border-box}.picker-option--check{min-height:44px}.chip-remove{position:relative}.chip-remove:after{content:\"\";position:absolute;inset:-13px}}@media(max-width:480px){:host-context(.m-body) .picker-dropdown{position:static;margin-top:4px;max-height:min(240px,calc(var(--ui-vvh, 100dvh) * .3))}}.picker-option{display:flex;flex-direction:column;gap:2px;width:100%;padding:10px 12px;border:none;background:none;text-align:left;cursor:pointer;font-family:inherit}.picker-option:hover,.picker-option.picker-option--active{background:#f8fafc}.picker-option:first-child{border-radius:8px 8px 0 0}.picker-option:last-child{border-radius:0 0 8px 8px}.picker-option--check{flex-direction:row;align-items:center;gap:10px}.picker-option--check .option-body{display:flex;flex-direction:column;gap:1px;min-width:0;flex:1}.picker-option--check .option-name,.picker-option--check .option-detail{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.option-check{display:flex;pointer-events:none}.option-name{font-size:.875rem;font-weight:600;color:#1e293b;overflow-wrap:anywhere}.option-detail{font-size:.75rem;color:#94a3b8;overflow-wrap:anywhere}.picker-loading,.picker-empty{padding:12px;font-size:.8125rem;color:#94a3b8;text-align:center}.selected-input{display:flex;align-items:center;justify-content:space-between;padding:9px 12px;border:1px solid #e2e8f0;border-radius:8px;background:#f8fafc;font-size:.875rem;font-weight:600;color:#1e293b;gap:8px;overflow-wrap:anywhere;min-width:0}.selected-input:focus{outline:none}.selected-input:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.clear-btn{width:18px;height:18px;border:none;background:#e2e8f0;border-radius:50%;cursor:pointer;font-size:.75rem;color:#64748b;display:flex;align-items:center;justify-content:center;position:relative;flex-shrink:0}.clear-btn:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.clear-btn:hover{background:#cbd5e1;color:#1e293b}.clear-btn:after{content:\"\";position:absolute;inset:-13px}.recipient-details{margin-top:16px}.details-label{display:block;font-size:.6875rem;font-weight:600;color:#94a3b8;text-transform:uppercase;letter-spacing:.05em;margin-bottom:8px}.details-card{border:1px solid #e2e8f0;border-radius:8px;overflow:hidden}.detail-row{display:flex;justify-content:space-between;align-items:center;padding:10px 14px;border-bottom:1px solid #f1f5f9}.detail-row.last{border-bottom:none}.detail-row:nth-child(2n){background:#f8fafc}.detail-key{font-size:.8125rem;color:#94a3b8;font-weight:500}.detail-val{font-size:.875rem;color:#1e293b;font-weight:600}.multi-chips{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:8px}.multi-chip{display:inline-flex;align-items:center;gap:4px;padding:4px 8px 4px 10px;background:#dbeafe;border-radius:20px;font-size:.8125rem;font-weight:500;color:#1e40af}.chip-remove{width:18px;height:18px;border:none;background:#1e40af26;border-radius:50%;cursor:pointer;font-size:.875rem;line-height:1;color:#1e40af;display:flex;align-items:center;justify-content:center;flex-shrink:0}.chip-remove:hover{background:#1e40af4d}.chip-remove:focus-visible{outline:2px solid #1e40af;outline-offset:2px}@media(forced-colors:active){.picker-input:focus{outline:2px solid Highlight;outline-offset:1px}.picker-option--active{outline:2px solid Highlight;outline-offset:-2px}}\n"]
18527
+ styles: [".picker-wrapper{position:relative;overflow:visible}.picker-label{display:block;font-size:.8125rem;font-weight:600;color:#374151;margin-bottom:6px}.picker-req{color:#dc2626}.picker-hint{margin:6px 0 0;font-size:.75rem;line-height:1.4;color:#64748b}.picker-input{width:100%;padding:9px 12px;border:1px solid #e2e8f0;border-radius:8px;font-size:.875rem;color:#1e293b;font-family:inherit;outline:none;box-sizing:border-box}.picker-input::placeholder{color:#94a3b8}.picker-input:focus{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.picker-input:focus-visible{outline:2px solid transparent}@media(max-width:480px){.picker-input{font-size:1rem}}.picker-sr{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.picker-dropdown{position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:9999;background:#fff;border:1px solid #e2e8f0;border-radius:8px;box-shadow:0 6px 16px #0000001a;max-height:240px;overflow-y:auto}@media(pointer:coarse),(max-width:480px){.picker-input{min-height:44px}.picker-dropdown{max-height:min(240px,40vh);overscroll-behavior:contain}.picker-option{min-height:44px;justify-content:center;box-sizing:border-box}.picker-option--check{min-height:44px}.chip-remove{position:relative}.chip-remove:after{content:\"\";position:absolute;inset:-13px}}@media(max-width:480px){:host-context(.m-body) .picker-dropdown{position:static;margin-top:4px;max-height:min(240px,calc(var(--ui-vvh, 100dvh) * .3))}}.picker-option{display:flex;flex-direction:column;gap:2px;width:100%;padding:10px 12px;border:none;background:none;text-align:left;cursor:pointer;font-family:inherit}.picker-option:hover,.picker-option.picker-option--active{background:#f8fafc}.picker-option:first-child{border-radius:8px 8px 0 0}.picker-option:last-child{border-radius:0 0 8px 8px}.picker-option--check{flex-direction:row;align-items:center;gap:10px}.picker-option--check .option-body{display:flex;flex-direction:column;gap:1px;min-width:0;flex:1}.picker-option--check .option-name,.picker-option--check .option-detail{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.option-check{display:flex;pointer-events:none}.option-name{font-size:.875rem;font-weight:600;color:#1e293b;overflow-wrap:anywhere}.option-detail{font-size:.75rem;color:#94a3b8;overflow-wrap:anywhere}.picker-loading,.picker-empty{padding:12px;font-size:.8125rem;color:#94a3b8;text-align:center}.selected-input{display:flex;align-items:center;justify-content:space-between;padding:9px 12px;border:1px solid #e2e8f0;border-radius:8px;background:#f8fafc;font-size:.875rem;font-weight:600;color:#1e293b;gap:8px;overflow-wrap:anywhere;min-width:0}.selected-input:focus{outline:none}.selected-input:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.clear-btn{width:18px;height:18px;border:none;background:#e2e8f0;border-radius:50%;cursor:pointer;font-size:.75rem;color:#64748b;display:flex;align-items:center;justify-content:center;position:relative;flex-shrink:0}.clear-btn:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.clear-btn:hover{background:#cbd5e1;color:#1e293b}.clear-btn:after{content:\"\";position:absolute;inset:-13px}.recipient-details{margin-top:16px}.details-label{display:block;font-size:.6875rem;font-weight:600;color:#94a3b8;text-transform:uppercase;letter-spacing:.05em;margin-bottom:8px}.details-card{border:1px solid #e2e8f0;border-radius:8px;overflow:hidden}.detail-row{display:flex;justify-content:space-between;align-items:center;padding:10px 14px;border-bottom:1px solid #f1f5f9}.detail-row.last{border-bottom:none}.detail-row:nth-child(2n){background:#f8fafc}.detail-key{font-size:.8125rem;color:#94a3b8;font-weight:500}.detail-val{font-size:.875rem;color:#1e293b;font-weight:600}.multi-chips{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:8px}.multi-chip{display:inline-flex;align-items:center;gap:4px;padding:4px 8px 4px 10px;background:#dbeafe;border-radius:20px;font-size:.8125rem;font-weight:500;color:#1e40af}.chip-remove{width:18px;height:18px;border:none;background:#1e40af26;border-radius:50%;cursor:pointer;font-size:.875rem;line-height:1;color:#1e40af;display:flex;align-items:center;justify-content:center;flex-shrink:0}.chip-remove:hover{background:#1e40af4d}.chip-remove:focus-visible{outline:2px solid #1e40af;outline-offset:2px}@media(forced-colors:active){.picker-input:focus{outline:2px solid Highlight;outline-offset:1px}.picker-option--active{outline:2px solid Highlight;outline-offset:-2px}}\n"]
17419
18528
  }]
17420
18529
  }],
17421
18530
  ctorParameters: () => [],
@@ -17773,7 +18882,7 @@ var TextareaInputComponent = class TextareaInputComponent {
17773
18882
  </div>
17774
18883
  `,
17775
18884
  isInline: true,
17776
- styles: [":host{display:block}.ta-field{display:flex;flex-direction:column;gap:6px}.ta-head{display:flex;flex-wrap:wrap;align-items:baseline;column-gap:4px;row-gap:2px}.ta-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.ta-required{color:#ef4444;margin-left:2px}.ta-hint-inline{font-size:.75rem;color:#64748b;font-weight:400;margin-left:4px}.ta-head .ta-hint-inline{margin-left:0;line-height:1}.ta-input{width:100%;box-sizing:border-box;padding:9px 12px;font-size:.875rem;font-family:inherit;color:#1e293b;background:#fff;border:1px solid #e2e8f0;border-radius:8px;outline:none;resize:vertical;transition:border-color .15s,box-shadow .15s}.ta-input::placeholder{color:#94a3b8}.ta-input:focus{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.ta-input:read-only{background:#f8fafc;cursor:default}.ta-input.ta-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,Liberation Mono,monospace}@media(min-width:481px){.ta-input.ta-mono{font-size:.8125rem}}.ta-error .ta-input{border-color:#ef4444}.ta-error .ta-input:focus{box-shadow:0 0 0 3px #ef44441f}.ta-disabled .ta-input{opacity:.5;cursor:not-allowed}.ta-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.ta-desc-error{color:#ef4444}@media(max-width:480px){.ta-input{font-size:1rem}}\n"],
18885
+ styles: [":host{display:block}.ta-field{display:flex;flex-direction:column;gap:6px}.ta-head{display:flex;flex-wrap:wrap;align-items:baseline;column-gap:4px;row-gap:2px}.ta-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.ta-required{color:#dc2626;margin-left:2px}.ta-hint-inline{font-size:.75rem;color:#64748b;font-weight:400;margin-left:4px}.ta-head .ta-hint-inline{margin-left:0;line-height:1}.ta-input{width:100%;box-sizing:border-box;padding:9px 12px;font-size:.875rem;font-family:inherit;color:#1e293b;background:#fff;border:1px solid #e2e8f0;border-radius:8px;outline:none;resize:vertical;transition:border-color .15s,box-shadow .15s}.ta-input::placeholder{color:#94a3b8}.ta-input:focus{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.ta-input:read-only{background:#f8fafc;cursor:default}.ta-input.ta-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,Liberation Mono,monospace}@media(min-width:481px){.ta-input.ta-mono{font-size:.8125rem}}.ta-error .ta-input{border-color:#ef4444}.ta-error .ta-input:focus{box-shadow:0 0 0 3px #ef44441f}.ta-disabled .ta-input{opacity:.5;cursor:not-allowed}.ta-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.ta-desc-error{color:#dc2626}@media(max-width:480px){.ta-input{font-size:1rem}}\n"],
17777
18886
  changeDetection: i0.ChangeDetectionStrategy.OnPush
17778
18887
  });
17779
18888
  }
@@ -17846,7 +18955,7 @@ i0.ɵɵngDeclareClassMetadata({
17846
18955
  }
17847
18956
  </div>
17848
18957
  `,
17849
- styles: [":host{display:block}.ta-field{display:flex;flex-direction:column;gap:6px}.ta-head{display:flex;flex-wrap:wrap;align-items:baseline;column-gap:4px;row-gap:2px}.ta-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.ta-required{color:#ef4444;margin-left:2px}.ta-hint-inline{font-size:.75rem;color:#64748b;font-weight:400;margin-left:4px}.ta-head .ta-hint-inline{margin-left:0;line-height:1}.ta-input{width:100%;box-sizing:border-box;padding:9px 12px;font-size:.875rem;font-family:inherit;color:#1e293b;background:#fff;border:1px solid #e2e8f0;border-radius:8px;outline:none;resize:vertical;transition:border-color .15s,box-shadow .15s}.ta-input::placeholder{color:#94a3b8}.ta-input:focus{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.ta-input:read-only{background:#f8fafc;cursor:default}.ta-input.ta-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,Liberation Mono,monospace}@media(min-width:481px){.ta-input.ta-mono{font-size:.8125rem}}.ta-error .ta-input{border-color:#ef4444}.ta-error .ta-input:focus{box-shadow:0 0 0 3px #ef44441f}.ta-disabled .ta-input{opacity:.5;cursor:not-allowed}.ta-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.ta-desc-error{color:#ef4444}@media(max-width:480px){.ta-input{font-size:1rem}}\n"]
18958
+ styles: [":host{display:block}.ta-field{display:flex;flex-direction:column;gap:6px}.ta-head{display:flex;flex-wrap:wrap;align-items:baseline;column-gap:4px;row-gap:2px}.ta-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.ta-required{color:#dc2626;margin-left:2px}.ta-hint-inline{font-size:.75rem;color:#64748b;font-weight:400;margin-left:4px}.ta-head .ta-hint-inline{margin-left:0;line-height:1}.ta-input{width:100%;box-sizing:border-box;padding:9px 12px;font-size:.875rem;font-family:inherit;color:#1e293b;background:#fff;border:1px solid #e2e8f0;border-radius:8px;outline:none;resize:vertical;transition:border-color .15s,box-shadow .15s}.ta-input::placeholder{color:#94a3b8}.ta-input:focus{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.ta-input:read-only{background:#f8fafc;cursor:default}.ta-input.ta-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,Liberation Mono,monospace}@media(min-width:481px){.ta-input.ta-mono{font-size:.8125rem}}.ta-error .ta-input{border-color:#ef4444}.ta-error .ta-input:focus{box-shadow:0 0 0 3px #ef44441f}.ta-disabled .ta-input{opacity:.5;cursor:not-allowed}.ta-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.ta-desc-error{color:#dc2626}@media(max-width:480px){.ta-input{font-size:1rem}}\n"]
17850
18959
  }]
17851
18960
  }],
17852
18961
  ctorParameters: () => [],
@@ -18156,7 +19265,8 @@ var BulkMessagePanelComponent = class BulkMessagePanelComponent {
18156
19265
  "primaryLoading",
18157
19266
  "primaryDisabled",
18158
19267
  "cancelTestId",
18159
- "primaryTestId"
19268
+ "primaryTestId",
19269
+ "returnFocusTo"
18160
19270
  ],
18161
19271
  outputs: ["closed", "primaryClick"]
18162
19272
  },
@@ -18176,6 +19286,9 @@ var BulkMessagePanelComponent = class BulkMessagePanelComponent {
18176
19286
  "ariaLabel",
18177
19287
  "placeholder",
18178
19288
  "prefix",
19289
+ "revealable",
19290
+ "passwordRequirements",
19291
+ "passwordRules",
18179
19292
  "type",
18180
19293
  "maxlength",
18181
19294
  "required",
@@ -19288,7 +20401,7 @@ var FileInputComponent = class FileInputComponent {
19288
20401
  </div>
19289
20402
  `,
19290
20403
  isInline: true,
19291
- styles: [":host{display:block}:host(:has(.fi-hidden)){display:contents}.fi-field{display:flex;flex-direction:column;gap:6px}.fi-hidden{display:contents}.fi-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.fi-required{color:#ef4444;margin-left:2px}.fi-hint-inline{font-size:.75rem;color:#94a3b8;font-weight:400;margin-left:4px}.fi-native{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}.fi-row{display:flex;align-items:stretch;gap:8px}.fi-control{display:flex;align-items:center;justify-content:space-between;gap:12px;flex:1 1 auto;min-width:0;box-sizing:border-box;text-align:left;padding:9px 12px;font-size:.875rem;font-family:inherit;color:#1e293b;background:#fff;border:1px solid #e2e8f0;border-radius:8px;outline:none;cursor:pointer;transition:border-color .15s,box-shadow .15s}.fi-control:focus-visible{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.fi-control:has(ui-image-preview){padding-top:6px;padding-bottom:6px}.fi-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fi-loading{overflow:visible}.fi-placeholder{color:#94a3b8}.fi-browse{flex-shrink:0;font-size:.75rem;font-weight:600;color:#374151;padding:3px 10px;border:1px solid #e2e8f0;border-radius:6px;background:#f8fafc}.fi-remove{flex-shrink:0;align-self:center;font-family:inherit;font-size:.75rem;font-weight:600;color:#b91c1c;padding:6px 10px;border:1px solid #fecaca;border-radius:6px;background:#fff;cursor:pointer;-webkit-appearance:none;appearance:none}.fi-remove:hover{background:#fef2f2}.fi-remove:focus-visible{outline:2px solid #ef4444;outline-offset:2px}.fi-sr{position:absolute;width:1px;height:1px;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.fi-error .fi-control{border-color:#ef4444}.fi-error .fi-control:focus-visible{box-shadow:0 0 0 3px #ef44441f}.fi-drag .fi-control{border-color:#3b82f6;border-style:dashed;background:#eff6ff}.fi-disabled .fi-control{opacity:.5;cursor:not-allowed}.fi-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.fi-desc-error{color:#ef4444}@media(max-width:480px){.fi-control{font-size:1rem}.fi-remove{padding:10px 12px}}@media(pointer:coarse){.fi-control,.fi-remove{min-height:44px}}\n"],
20404
+ styles: [":host{display:block}:host(:has(.fi-hidden)){display:contents}.fi-field{display:flex;flex-direction:column;gap:6px}.fi-hidden{display:contents}.fi-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.fi-required{color:#dc2626;margin-left:2px}.fi-hint-inline{font-size:.75rem;color:#94a3b8;font-weight:400;margin-left:4px}.fi-native{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}.fi-row{display:flex;align-items:stretch;gap:8px}.fi-control{display:flex;align-items:center;justify-content:space-between;gap:12px;flex:1 1 auto;min-width:0;box-sizing:border-box;text-align:left;padding:9px 12px;font-size:.875rem;font-family:inherit;color:#1e293b;background:#fff;border:1px solid #e2e8f0;border-radius:8px;outline:none;cursor:pointer;transition:border-color .15s,box-shadow .15s}.fi-control:focus-visible{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.fi-control:has(ui-image-preview){padding-top:6px;padding-bottom:6px}.fi-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fi-loading{overflow:visible}.fi-placeholder{color:#94a3b8}.fi-browse{flex-shrink:0;font-size:.75rem;font-weight:600;color:#374151;padding:3px 10px;border:1px solid #e2e8f0;border-radius:6px;background:#f8fafc}.fi-remove{flex-shrink:0;align-self:center;font-family:inherit;font-size:.75rem;font-weight:600;color:#b91c1c;padding:6px 10px;border:1px solid #fecaca;border-radius:6px;background:#fff;cursor:pointer;-webkit-appearance:none;appearance:none}.fi-remove:hover{background:#fef2f2}.fi-remove:focus-visible{outline:2px solid #ef4444;outline-offset:2px}.fi-sr{position:absolute;width:1px;height:1px;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.fi-error .fi-control{border-color:#ef4444}.fi-error .fi-control:focus-visible{box-shadow:0 0 0 3px #ef44441f}.fi-drag .fi-control{border-color:#3b82f6;border-style:dashed;background:#eff6ff}.fi-disabled .fi-control{opacity:.5;cursor:not-allowed}.fi-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.fi-desc-error{color:#dc2626}@media(max-width:480px){.fi-control{font-size:1rem}.fi-remove{padding:10px 12px}}@media(pointer:coarse){.fi-control,.fi-remove{min-height:44px}}\n"],
19292
20405
  dependencies: [{
19293
20406
  kind: "component",
19294
20407
  type: ImagePreviewComponent,
@@ -19399,7 +20512,7 @@ i0.ɵɵngDeclareClassMetadata({
19399
20512
  }
19400
20513
  </div>
19401
20514
  `,
19402
- styles: [":host{display:block}:host(:has(.fi-hidden)){display:contents}.fi-field{display:flex;flex-direction:column;gap:6px}.fi-hidden{display:contents}.fi-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.fi-required{color:#ef4444;margin-left:2px}.fi-hint-inline{font-size:.75rem;color:#94a3b8;font-weight:400;margin-left:4px}.fi-native{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}.fi-row{display:flex;align-items:stretch;gap:8px}.fi-control{display:flex;align-items:center;justify-content:space-between;gap:12px;flex:1 1 auto;min-width:0;box-sizing:border-box;text-align:left;padding:9px 12px;font-size:.875rem;font-family:inherit;color:#1e293b;background:#fff;border:1px solid #e2e8f0;border-radius:8px;outline:none;cursor:pointer;transition:border-color .15s,box-shadow .15s}.fi-control:focus-visible{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.fi-control:has(ui-image-preview){padding-top:6px;padding-bottom:6px}.fi-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fi-loading{overflow:visible}.fi-placeholder{color:#94a3b8}.fi-browse{flex-shrink:0;font-size:.75rem;font-weight:600;color:#374151;padding:3px 10px;border:1px solid #e2e8f0;border-radius:6px;background:#f8fafc}.fi-remove{flex-shrink:0;align-self:center;font-family:inherit;font-size:.75rem;font-weight:600;color:#b91c1c;padding:6px 10px;border:1px solid #fecaca;border-radius:6px;background:#fff;cursor:pointer;-webkit-appearance:none;appearance:none}.fi-remove:hover{background:#fef2f2}.fi-remove:focus-visible{outline:2px solid #ef4444;outline-offset:2px}.fi-sr{position:absolute;width:1px;height:1px;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.fi-error .fi-control{border-color:#ef4444}.fi-error .fi-control:focus-visible{box-shadow:0 0 0 3px #ef44441f}.fi-drag .fi-control{border-color:#3b82f6;border-style:dashed;background:#eff6ff}.fi-disabled .fi-control{opacity:.5;cursor:not-allowed}.fi-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.fi-desc-error{color:#ef4444}@media(max-width:480px){.fi-control{font-size:1rem}.fi-remove{padding:10px 12px}}@media(pointer:coarse){.fi-control,.fi-remove{min-height:44px}}\n"]
20515
+ styles: [":host{display:block}:host(:has(.fi-hidden)){display:contents}.fi-field{display:flex;flex-direction:column;gap:6px}.fi-hidden{display:contents}.fi-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.fi-required{color:#dc2626;margin-left:2px}.fi-hint-inline{font-size:.75rem;color:#94a3b8;font-weight:400;margin-left:4px}.fi-native{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}.fi-row{display:flex;align-items:stretch;gap:8px}.fi-control{display:flex;align-items:center;justify-content:space-between;gap:12px;flex:1 1 auto;min-width:0;box-sizing:border-box;text-align:left;padding:9px 12px;font-size:.875rem;font-family:inherit;color:#1e293b;background:#fff;border:1px solid #e2e8f0;border-radius:8px;outline:none;cursor:pointer;transition:border-color .15s,box-shadow .15s}.fi-control:focus-visible{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.fi-control:has(ui-image-preview){padding-top:6px;padding-bottom:6px}.fi-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fi-loading{overflow:visible}.fi-placeholder{color:#94a3b8}.fi-browse{flex-shrink:0;font-size:.75rem;font-weight:600;color:#374151;padding:3px 10px;border:1px solid #e2e8f0;border-radius:6px;background:#f8fafc}.fi-remove{flex-shrink:0;align-self:center;font-family:inherit;font-size:.75rem;font-weight:600;color:#b91c1c;padding:6px 10px;border:1px solid #fecaca;border-radius:6px;background:#fff;cursor:pointer;-webkit-appearance:none;appearance:none}.fi-remove:hover{background:#fef2f2}.fi-remove:focus-visible{outline:2px solid #ef4444;outline-offset:2px}.fi-sr{position:absolute;width:1px;height:1px;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.fi-error .fi-control{border-color:#ef4444}.fi-error .fi-control:focus-visible{box-shadow:0 0 0 3px #ef44441f}.fi-drag .fi-control{border-color:#3b82f6;border-style:dashed;background:#eff6ff}.fi-disabled .fi-control{opacity:.5;cursor:not-allowed}.fi-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.fi-desc-error{color:#dc2626}@media(max-width:480px){.fi-control{font-size:1rem}.fi-remove{padding:10px 12px}}@media(pointer:coarse){.fi-control,.fi-remove{min-height:44px}}\n"]
19403
20516
  }]
19404
20517
  }],
19405
20518
  ctorParameters: () => [],
@@ -19869,7 +20982,7 @@ var DateInputComponent = class DateInputComponent {
19869
20982
  </div>
19870
20983
  `,
19871
20984
  isInline: true,
19872
- styles: [":host{display:block}.di-field{display:flex;flex-direction:column;gap:6px}.di-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.di-required{color:#ef4444;margin-left:2px}.di-input{width:100%;box-sizing:border-box;padding:8px 12px;font-size:.875rem;font-family:inherit;color:#1e293b;background:#fff;border:1px solid #e2e8f0;border-radius:8px;outline:none;transition:border-color .15s,box-shadow .15s;appearance:none}.di-input:focus{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.di-error .di-input{border-color:#ef4444}.di-error .di-input:focus{box-shadow:0 0 0 3px #ef44441f}.di-disabled .di-input{opacity:.5;cursor:not-allowed}.di-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.di-desc-error{color:#ef4444}@media(max-width:480px){.di-input{font-size:1rem}}@media(pointer:coarse),(max-width:480px){.di-input{min-height:44px}}\n"],
20985
+ styles: [":host{display:block}.di-field{display:flex;flex-direction:column;gap:6px}.di-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.di-required{color:#dc2626;margin-left:2px}.di-input{width:100%;box-sizing:border-box;padding:8px 12px;font-size:.875rem;font-family:inherit;color:#1e293b;background:#fff;border:1px solid #e2e8f0;border-radius:8px;outline:none;transition:border-color .15s,box-shadow .15s;appearance:none}.di-input:focus{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.di-error .di-input{border-color:#ef4444}.di-error .di-input:focus{box-shadow:0 0 0 3px #ef44441f}.di-disabled .di-input{opacity:.5;cursor:not-allowed}.di-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.di-desc-error{color:#dc2626}@media(max-width:480px){.di-input{font-size:1rem}}@media(pointer:coarse),(max-width:480px){.di-input{min-height:44px}}\n"],
19873
20986
  changeDetection: i0.ChangeDetectionStrategy.OnPush
19874
20987
  });
19875
20988
  }
@@ -19930,7 +21043,7 @@ i0.ɵɵngDeclareClassMetadata({
19930
21043
  }
19931
21044
  </div>
19932
21045
  `,
19933
- styles: [":host{display:block}.di-field{display:flex;flex-direction:column;gap:6px}.di-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.di-required{color:#ef4444;margin-left:2px}.di-input{width:100%;box-sizing:border-box;padding:8px 12px;font-size:.875rem;font-family:inherit;color:#1e293b;background:#fff;border:1px solid #e2e8f0;border-radius:8px;outline:none;transition:border-color .15s,box-shadow .15s;appearance:none}.di-input:focus{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.di-error .di-input{border-color:#ef4444}.di-error .di-input:focus{box-shadow:0 0 0 3px #ef44441f}.di-disabled .di-input{opacity:.5;cursor:not-allowed}.di-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.di-desc-error{color:#ef4444}@media(max-width:480px){.di-input{font-size:1rem}}@media(pointer:coarse),(max-width:480px){.di-input{min-height:44px}}\n"]
21046
+ styles: [":host{display:block}.di-field{display:flex;flex-direction:column;gap:6px}.di-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.di-required{color:#dc2626;margin-left:2px}.di-input{width:100%;box-sizing:border-box;padding:8px 12px;font-size:.875rem;font-family:inherit;color:#1e293b;background:#fff;border:1px solid #e2e8f0;border-radius:8px;outline:none;transition:border-color .15s,box-shadow .15s;appearance:none}.di-input:focus{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.di-error .di-input{border-color:#ef4444}.di-error .di-input:focus{box-shadow:0 0 0 3px #ef44441f}.di-disabled .di-input{opacity:.5;cursor:not-allowed}.di-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.di-desc-error{color:#dc2626}@media(max-width:480px){.di-input{font-size:1rem}}@media(pointer:coarse),(max-width:480px){.di-input{min-height:44px}}\n"]
19934
21047
  }]
19935
21048
  }],
19936
21049
  ctorParameters: () => [],
@@ -20223,7 +21336,7 @@ var DatetimeInputComponent = class DatetimeInputComponent {
20223
21336
  </div>
20224
21337
  `,
20225
21338
  isInline: true,
20226
- styles: [":host{display:block}.dti-field{display:flex;flex-direction:column;gap:6px}.dti-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.dti-required{color:#ef4444;margin-left:2px}.dti-input{width:100%;box-sizing:border-box;padding:8px 12px;font-size:.875rem;font-family:inherit;color:#1e293b;background:#fff;border:1px solid #e2e8f0;border-radius:8px;outline:none;transition:border-color .15s,box-shadow .15s;appearance:none}.dti-input:focus{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.dti-error .dti-input{border-color:#ef4444}.dti-error .dti-input:focus{box-shadow:0 0 0 3px #ef44441f}.dti-disabled .dti-input{opacity:.5;cursor:not-allowed}.dti-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.dti-desc-error{color:#ef4444}@media(max-width:480px){.dti-input{font-size:1rem}}@media(pointer:coarse),(max-width:480px){.dti-input{min-height:44px}}\n"],
21339
+ styles: [":host{display:block}.dti-field{display:flex;flex-direction:column;gap:6px}.dti-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.dti-required{color:#dc2626;margin-left:2px}.dti-input{width:100%;box-sizing:border-box;padding:8px 12px;font-size:.875rem;font-family:inherit;color:#1e293b;background:#fff;border:1px solid #e2e8f0;border-radius:8px;outline:none;transition:border-color .15s,box-shadow .15s;appearance:none}.dti-input:focus{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.dti-error .dti-input{border-color:#ef4444}.dti-error .dti-input:focus{box-shadow:0 0 0 3px #ef44441f}.dti-disabled .dti-input{opacity:.5;cursor:not-allowed}.dti-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.dti-desc-error{color:#dc2626}@media(max-width:480px){.dti-input{font-size:1rem}}@media(pointer:coarse),(max-width:480px){.dti-input{min-height:44px}}\n"],
20227
21340
  changeDetection: i0.ChangeDetectionStrategy.OnPush
20228
21341
  });
20229
21342
  }
@@ -20284,7 +21397,7 @@ i0.ɵɵngDeclareClassMetadata({
20284
21397
  }
20285
21398
  </div>
20286
21399
  `,
20287
- styles: [":host{display:block}.dti-field{display:flex;flex-direction:column;gap:6px}.dti-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.dti-required{color:#ef4444;margin-left:2px}.dti-input{width:100%;box-sizing:border-box;padding:8px 12px;font-size:.875rem;font-family:inherit;color:#1e293b;background:#fff;border:1px solid #e2e8f0;border-radius:8px;outline:none;transition:border-color .15s,box-shadow .15s;appearance:none}.dti-input:focus{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.dti-error .dti-input{border-color:#ef4444}.dti-error .dti-input:focus{box-shadow:0 0 0 3px #ef44441f}.dti-disabled .dti-input{opacity:.5;cursor:not-allowed}.dti-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.dti-desc-error{color:#ef4444}@media(max-width:480px){.dti-input{font-size:1rem}}@media(pointer:coarse),(max-width:480px){.dti-input{min-height:44px}}\n"]
21400
+ styles: [":host{display:block}.dti-field{display:flex;flex-direction:column;gap:6px}.dti-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.dti-required{color:#dc2626;margin-left:2px}.dti-input{width:100%;box-sizing:border-box;padding:8px 12px;font-size:.875rem;font-family:inherit;color:#1e293b;background:#fff;border:1px solid #e2e8f0;border-radius:8px;outline:none;transition:border-color .15s,box-shadow .15s;appearance:none}.dti-input:focus{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.dti-error .dti-input{border-color:#ef4444}.dti-error .dti-input:focus{box-shadow:0 0 0 3px #ef44441f}.dti-disabled .dti-input{opacity:.5;cursor:not-allowed}.dti-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.dti-desc-error{color:#dc2626}@media(max-width:480px){.dti-input{font-size:1rem}}@media(pointer:coarse),(max-width:480px){.dti-input{min-height:44px}}\n"]
20288
21401
  }]
20289
21402
  }],
20290
21403
  ctorParameters: () => [],
@@ -20587,7 +21700,7 @@ var TimeInputComponent = class TimeInputComponent {
20587
21700
  </div>
20588
21701
  `,
20589
21702
  isInline: true,
20590
- styles: [":host{display:block}.tmi-field{display:flex;flex-direction:column;gap:6px}.tmi-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.tmi-required{color:#ef4444;margin-left:2px}.tmi-input{width:100%;box-sizing:border-box;padding:8px 12px;font-size:.875rem;font-family:inherit;color:#1e293b;background:#fff;border:1px solid #e2e8f0;border-radius:8px;outline:none;transition:border-color .15s,box-shadow .15s;appearance:none}.tmi-input:focus{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.tmi-error .tmi-input{border-color:#ef4444}.tmi-error .tmi-input:focus{box-shadow:0 0 0 3px #ef44441f}.tmi-disabled .tmi-input{opacity:.5;cursor:not-allowed}.tmi-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.tmi-desc-error{color:#ef4444}@media(max-width:480px){.tmi-input{font-size:1rem}}@media(pointer:coarse),(max-width:480px){.tmi-input{min-height:44px}}\n"],
21703
+ styles: [":host{display:block}.tmi-field{display:flex;flex-direction:column;gap:6px}.tmi-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.tmi-required{color:#dc2626;margin-left:2px}.tmi-input{width:100%;box-sizing:border-box;padding:8px 12px;font-size:.875rem;font-family:inherit;color:#1e293b;background:#fff;border:1px solid #e2e8f0;border-radius:8px;outline:none;transition:border-color .15s,box-shadow .15s;appearance:none}.tmi-input:focus{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.tmi-error .tmi-input{border-color:#ef4444}.tmi-error .tmi-input:focus{box-shadow:0 0 0 3px #ef44441f}.tmi-disabled .tmi-input{opacity:.5;cursor:not-allowed}.tmi-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.tmi-desc-error{color:#dc2626}@media(max-width:480px){.tmi-input{font-size:1rem}}@media(pointer:coarse),(max-width:480px){.tmi-input{min-height:44px}}\n"],
20591
21704
  changeDetection: i0.ChangeDetectionStrategy.OnPush
20592
21705
  });
20593
21706
  }
@@ -20650,7 +21763,7 @@ i0.ɵɵngDeclareClassMetadata({
20650
21763
  }
20651
21764
  </div>
20652
21765
  `,
20653
- styles: [":host{display:block}.tmi-field{display:flex;flex-direction:column;gap:6px}.tmi-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.tmi-required{color:#ef4444;margin-left:2px}.tmi-input{width:100%;box-sizing:border-box;padding:8px 12px;font-size:.875rem;font-family:inherit;color:#1e293b;background:#fff;border:1px solid #e2e8f0;border-radius:8px;outline:none;transition:border-color .15s,box-shadow .15s;appearance:none}.tmi-input:focus{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.tmi-error .tmi-input{border-color:#ef4444}.tmi-error .tmi-input:focus{box-shadow:0 0 0 3px #ef44441f}.tmi-disabled .tmi-input{opacity:.5;cursor:not-allowed}.tmi-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.tmi-desc-error{color:#ef4444}@media(max-width:480px){.tmi-input{font-size:1rem}}@media(pointer:coarse),(max-width:480px){.tmi-input{min-height:44px}}\n"]
21766
+ styles: [":host{display:block}.tmi-field{display:flex;flex-direction:column;gap:6px}.tmi-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.tmi-required{color:#dc2626;margin-left:2px}.tmi-input{width:100%;box-sizing:border-box;padding:8px 12px;font-size:.875rem;font-family:inherit;color:#1e293b;background:#fff;border:1px solid #e2e8f0;border-radius:8px;outline:none;transition:border-color .15s,box-shadow .15s;appearance:none}.tmi-input:focus{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.tmi-error .tmi-input{border-color:#ef4444}.tmi-error .tmi-input:focus{box-shadow:0 0 0 3px #ef44441f}.tmi-disabled .tmi-input{opacity:.5;cursor:not-allowed}.tmi-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.tmi-desc-error{color:#dc2626}@media(max-width:480px){.tmi-input{font-size:1rem}}@media(pointer:coarse),(max-width:480px){.tmi-input{min-height:44px}}\n"]
20654
21767
  }]
20655
21768
  }],
20656
21769
  ctorParameters: () => [],
@@ -21218,7 +22331,7 @@ var ComboboxComponent = class ComboboxComponent {
21218
22331
  </div>
21219
22332
  `,
21220
22333
  isInline: true,
21221
- styles: [":host{display:block}.cb-field{display:flex;flex-direction:column;gap:6px}.cb-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.cb-required{color:#ef4444;margin-left:2px}.cb-control{position:relative}.cb-input{width:100%;box-sizing:border-box;padding:9px 12px;font-size:.875rem;font-family:inherit;color:#1e293b;background:#fff;border:1px solid #e2e8f0;border-radius:8px;outline:none;transition:border-color .15s,box-shadow .15s}.cb-input::placeholder{color:#94a3b8}.cb-input:focus{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.cb-has-clear{padding-right:40px}.cb-warning .cb-input{border-color:#f59e0b;background:#fffbeb}.cb-error .cb-input{border-color:#ef4444}.cb-error .cb-input:focus{box-shadow:0 0 0 3px #ef44441f}.cb-disabled .cb-input{opacity:.5;cursor:not-allowed}.cb-clear{position:absolute;top:50%;right:4px;transform:translateY(-50%);border:0;background:transparent;cursor:pointer;color:#64748b;font-size:1.25rem;line-height:1;min-width:32px;min-height:32px;padding:0 8px;border-radius:6px}.cb-clear:hover{color:#0f172a}.cb-clear:focus-visible{outline:2px solid #3b82f6}.cb-popup{position:absolute;z-index:30;left:0;right:0;top:100%;margin-top:4px;box-sizing:border-box;max-width:100%;max-height:min(260px,40vh);overflow-y:auto;overscroll-behavior:contain;background:#fff;border:1px solid #e2e8f0;border-radius:8px;box-shadow:0 8px 24px #0f172a1f}.cb-list:empty{display:none}.cb-status{padding:12px;font-size:.875rem;color:#64748b}.cb-option{display:flex;flex-direction:column;gap:2px;padding:8px 12px;min-height:40px;justify-content:center;box-sizing:border-box;cursor:pointer}.cb-option-active{background:#eff6ff}.cb-option-selected .cb-option-label{font-weight:600}.cb-option-disabled{opacity:.5;cursor:not-allowed}.cb-option-label{font-size:.875rem;color:#0f172a;overflow-wrap:anywhere}.cb-option-desc{font-size:.75rem;color:#64748b;overflow-wrap:anywhere}.cb-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.cb-desc-error{color:#ef4444}.cb-live{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}@media(prefers-reduced-motion:reduce){.cb-input{transition:none}}@media(forced-colors:active){.cb-input:focus{outline:2px solid Highlight;outline-offset:1px}.cb-option-active{outline:2px solid Highlight;outline-offset:-2px}}@media(pointer:coarse),(max-width:480px){.cb-input{min-height:44px}.cb-clear{min-width:44px;min-height:44px}}@media(pointer:coarse){.cb-option{min-height:44px}}@media(max-width:480px){.cb-input{font-size:1rem}.cb-option{min-height:44px}}\n"],
22334
+ styles: [":host{display:block}.cb-field{display:flex;flex-direction:column;gap:6px}.cb-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.cb-required{color:#dc2626;margin-left:2px}.cb-control{position:relative}.cb-input{width:100%;box-sizing:border-box;padding:9px 12px;font-size:.875rem;font-family:inherit;color:#1e293b;background:#fff;border:1px solid #e2e8f0;border-radius:8px;outline:none;transition:border-color .15s,box-shadow .15s}.cb-input::placeholder{color:#94a3b8}.cb-input:focus{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.cb-has-clear{padding-right:40px}.cb-warning .cb-input{border-color:#f59e0b;background:#fffbeb}.cb-error .cb-input{border-color:#ef4444}.cb-error .cb-input:focus{box-shadow:0 0 0 3px #ef44441f}.cb-disabled .cb-input{opacity:.5;cursor:not-allowed}.cb-clear{position:absolute;top:50%;right:4px;transform:translateY(-50%);border:0;background:transparent;cursor:pointer;color:#64748b;font-size:1.25rem;line-height:1;min-width:32px;min-height:32px;padding:0 8px;border-radius:6px}.cb-clear:hover{color:#0f172a}.cb-clear:focus-visible{outline:2px solid #3b82f6}.cb-popup{position:absolute;z-index:30;left:0;right:0;top:100%;margin-top:4px;box-sizing:border-box;max-width:100%;max-height:min(260px,40vh);overflow-y:auto;overscroll-behavior:contain;background:#fff;border:1px solid #e2e8f0;border-radius:8px;box-shadow:0 8px 24px #0f172a1f}.cb-list:empty{display:none}.cb-status{padding:12px;font-size:.875rem;color:#64748b}.cb-option{display:flex;flex-direction:column;gap:2px;padding:8px 12px;min-height:40px;justify-content:center;box-sizing:border-box;cursor:pointer}.cb-option-active{background:#eff6ff}.cb-option-selected .cb-option-label{font-weight:600}.cb-option-disabled{opacity:.5;cursor:not-allowed}.cb-option-label{font-size:.875rem;color:#0f172a;overflow-wrap:anywhere}.cb-option-desc{font-size:.75rem;color:#64748b;overflow-wrap:anywhere}.cb-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.cb-desc-error{color:#dc2626}.cb-live{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}@media(prefers-reduced-motion:reduce){.cb-input{transition:none}}@media(forced-colors:active){.cb-input:focus{outline:2px solid Highlight;outline-offset:1px}.cb-option-active{outline:2px solid Highlight;outline-offset:-2px}}@media(pointer:coarse),(max-width:480px){.cb-input{min-height:44px}.cb-clear{min-width:44px;min-height:44px}}@media(pointer:coarse){.cb-option{min-height:44px}}@media(max-width:480px){.cb-input{font-size:1rem}.cb-option{min-height:44px}}\n"],
21222
22335
  changeDetection: i0.ChangeDetectionStrategy.OnPush
21223
22336
  });
21224
22337
  }
@@ -21321,7 +22434,7 @@ i0.ɵɵngDeclareClassMetadata({
21321
22434
  }
21322
22435
  </div>
21323
22436
  `,
21324
- styles: [":host{display:block}.cb-field{display:flex;flex-direction:column;gap:6px}.cb-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.cb-required{color:#ef4444;margin-left:2px}.cb-control{position:relative}.cb-input{width:100%;box-sizing:border-box;padding:9px 12px;font-size:.875rem;font-family:inherit;color:#1e293b;background:#fff;border:1px solid #e2e8f0;border-radius:8px;outline:none;transition:border-color .15s,box-shadow .15s}.cb-input::placeholder{color:#94a3b8}.cb-input:focus{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.cb-has-clear{padding-right:40px}.cb-warning .cb-input{border-color:#f59e0b;background:#fffbeb}.cb-error .cb-input{border-color:#ef4444}.cb-error .cb-input:focus{box-shadow:0 0 0 3px #ef44441f}.cb-disabled .cb-input{opacity:.5;cursor:not-allowed}.cb-clear{position:absolute;top:50%;right:4px;transform:translateY(-50%);border:0;background:transparent;cursor:pointer;color:#64748b;font-size:1.25rem;line-height:1;min-width:32px;min-height:32px;padding:0 8px;border-radius:6px}.cb-clear:hover{color:#0f172a}.cb-clear:focus-visible{outline:2px solid #3b82f6}.cb-popup{position:absolute;z-index:30;left:0;right:0;top:100%;margin-top:4px;box-sizing:border-box;max-width:100%;max-height:min(260px,40vh);overflow-y:auto;overscroll-behavior:contain;background:#fff;border:1px solid #e2e8f0;border-radius:8px;box-shadow:0 8px 24px #0f172a1f}.cb-list:empty{display:none}.cb-status{padding:12px;font-size:.875rem;color:#64748b}.cb-option{display:flex;flex-direction:column;gap:2px;padding:8px 12px;min-height:40px;justify-content:center;box-sizing:border-box;cursor:pointer}.cb-option-active{background:#eff6ff}.cb-option-selected .cb-option-label{font-weight:600}.cb-option-disabled{opacity:.5;cursor:not-allowed}.cb-option-label{font-size:.875rem;color:#0f172a;overflow-wrap:anywhere}.cb-option-desc{font-size:.75rem;color:#64748b;overflow-wrap:anywhere}.cb-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.cb-desc-error{color:#ef4444}.cb-live{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}@media(prefers-reduced-motion:reduce){.cb-input{transition:none}}@media(forced-colors:active){.cb-input:focus{outline:2px solid Highlight;outline-offset:1px}.cb-option-active{outline:2px solid Highlight;outline-offset:-2px}}@media(pointer:coarse),(max-width:480px){.cb-input{min-height:44px}.cb-clear{min-width:44px;min-height:44px}}@media(pointer:coarse){.cb-option{min-height:44px}}@media(max-width:480px){.cb-input{font-size:1rem}.cb-option{min-height:44px}}\n"]
22437
+ styles: [":host{display:block}.cb-field{display:flex;flex-direction:column;gap:6px}.cb-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.cb-required{color:#dc2626;margin-left:2px}.cb-control{position:relative}.cb-input{width:100%;box-sizing:border-box;padding:9px 12px;font-size:.875rem;font-family:inherit;color:#1e293b;background:#fff;border:1px solid #e2e8f0;border-radius:8px;outline:none;transition:border-color .15s,box-shadow .15s}.cb-input::placeholder{color:#94a3b8}.cb-input:focus{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.cb-has-clear{padding-right:40px}.cb-warning .cb-input{border-color:#f59e0b;background:#fffbeb}.cb-error .cb-input{border-color:#ef4444}.cb-error .cb-input:focus{box-shadow:0 0 0 3px #ef44441f}.cb-disabled .cb-input{opacity:.5;cursor:not-allowed}.cb-clear{position:absolute;top:50%;right:4px;transform:translateY(-50%);border:0;background:transparent;cursor:pointer;color:#64748b;font-size:1.25rem;line-height:1;min-width:32px;min-height:32px;padding:0 8px;border-radius:6px}.cb-clear:hover{color:#0f172a}.cb-clear:focus-visible{outline:2px solid #3b82f6}.cb-popup{position:absolute;z-index:30;left:0;right:0;top:100%;margin-top:4px;box-sizing:border-box;max-width:100%;max-height:min(260px,40vh);overflow-y:auto;overscroll-behavior:contain;background:#fff;border:1px solid #e2e8f0;border-radius:8px;box-shadow:0 8px 24px #0f172a1f}.cb-list:empty{display:none}.cb-status{padding:12px;font-size:.875rem;color:#64748b}.cb-option{display:flex;flex-direction:column;gap:2px;padding:8px 12px;min-height:40px;justify-content:center;box-sizing:border-box;cursor:pointer}.cb-option-active{background:#eff6ff}.cb-option-selected .cb-option-label{font-weight:600}.cb-option-disabled{opacity:.5;cursor:not-allowed}.cb-option-label{font-size:.875rem;color:#0f172a;overflow-wrap:anywhere}.cb-option-desc{font-size:.75rem;color:#64748b;overflow-wrap:anywhere}.cb-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.cb-desc-error{color:#dc2626}.cb-live{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}@media(prefers-reduced-motion:reduce){.cb-input{transition:none}}@media(forced-colors:active){.cb-input:focus{outline:2px solid Highlight;outline-offset:1px}.cb-option-active{outline:2px solid Highlight;outline-offset:-2px}}@media(pointer:coarse),(max-width:480px){.cb-input{min-height:44px}.cb-clear{min-width:44px;min-height:44px}}@media(pointer:coarse){.cb-option{min-height:44px}}@media(max-width:480px){.cb-input{font-size:1rem}.cb-option{min-height:44px}}\n"]
21325
22438
  }]
21326
22439
  }],
21327
22440
  ctorParameters: () => [],
@@ -21937,7 +23050,7 @@ var MultiSelectComponent = class MultiSelectComponent {
21937
23050
  </div>
21938
23051
  `,
21939
23052
  isInline: true,
21940
- styles: [":host{display:block}.ms-field{display:flex;flex-direction:column;gap:6px}.ms-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.ms-required{color:#ef4444;margin-left:2px}.ms-tags{display:flex;flex-wrap:wrap;gap:6px}.ms-wrap{position:relative}.ms-trigger{width:100%;box-sizing:border-box;display:flex;align-items:center;justify-content:space-between;padding:9px 10px 9px 12px;font-size:.875rem;font-family:inherit;text-align:left;color:#1e293b;background:#fff;border:1px solid #e2e8f0;border-radius:8px;cursor:pointer;outline:none;transition:border-color .15s,box-shadow .15s}.ms-trigger:focus-visible,.ms-trigger.ms-open{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.ms-has-error .ms-trigger{border-color:#ef4444}.ms-disabled .ms-trigger{opacity:.5;cursor:not-allowed}.ms-placeholder{color:#64748b}.ms-chevron{color:#94a3b8;flex-shrink:0;margin-left:8px;transition:transform .2s ease}.ms-chevron-open{transform:rotate(180deg)}.ms-dropdown{position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:50;display:flex;flex-direction:column;max-height:260px;background:#fff;border:1px solid #e2e8f0;border-radius:8px;box-shadow:0 4px 16px #0f172a1a}.ms-search-wrap{padding:8px;border-bottom:1px solid #e2e8f0}.ms-search{width:100%;box-sizing:border-box;padding:7px 10px;font-size:.8125rem;font-family:inherit;color:#1e293b;border:1px solid #e2e8f0;border-radius:6px;outline:none}.ms-search::placeholder{color:#94a3b8}.ms-search:focus{border-color:#3b82f6}.ms-options{overflow-y:auto;padding:4px 0}.ms-option{padding:7px 12px;font-size:.8125rem}.ms-option:hover{background:#f8fafc}.ms-option-selected{background:#eff6ff}.ms-empty{padding:16px;text-align:center;color:#94a3b8;font-size:.8125rem}.ms-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.ms-desc-error{color:#ef4444}@media(max-width:480px){.ms-trigger,.ms-search{font-size:1rem}}\n"],
23053
+ styles: [":host{display:block}.ms-field{display:flex;flex-direction:column;gap:6px}.ms-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.ms-required{color:#dc2626;margin-left:2px}.ms-tags{display:flex;flex-wrap:wrap;gap:6px}.ms-wrap{position:relative}.ms-trigger{width:100%;box-sizing:border-box;display:flex;align-items:center;justify-content:space-between;padding:9px 10px 9px 12px;font-size:.875rem;font-family:inherit;text-align:left;color:#1e293b;background:#fff;border:1px solid #e2e8f0;border-radius:8px;cursor:pointer;outline:none;transition:border-color .15s,box-shadow .15s}.ms-trigger:focus-visible,.ms-trigger.ms-open{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.ms-has-error .ms-trigger{border-color:#ef4444}.ms-disabled .ms-trigger{opacity:.5;cursor:not-allowed}.ms-placeholder{color:#64748b}.ms-chevron{color:#94a3b8;flex-shrink:0;margin-left:8px;transition:transform .2s ease}.ms-chevron-open{transform:rotate(180deg)}.ms-dropdown{position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:50;display:flex;flex-direction:column;max-height:260px;background:#fff;border:1px solid #e2e8f0;border-radius:8px;box-shadow:0 4px 16px #0f172a1a}.ms-search-wrap{padding:8px;border-bottom:1px solid #e2e8f0}.ms-search{width:100%;box-sizing:border-box;padding:7px 10px;font-size:.8125rem;font-family:inherit;color:#1e293b;border:1px solid #e2e8f0;border-radius:6px;outline:none}.ms-search::placeholder{color:#94a3b8}.ms-search:focus{border-color:#3b82f6}.ms-options{overflow-y:auto;padding:4px 0}.ms-option{padding:7px 12px;font-size:.8125rem}.ms-option:hover{background:#f8fafc}.ms-option-selected{background:#eff6ff}.ms-empty{padding:16px;text-align:center;color:#94a3b8;font-size:.8125rem}.ms-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.ms-desc-error{color:#dc2626}@media(max-width:480px){.ms-trigger,.ms-search{font-size:1rem}}\n"],
21941
23054
  dependencies: [{
21942
23055
  kind: "component",
21943
23056
  type: ChipComponent,
@@ -22066,7 +23179,7 @@ i0.ɵɵngDeclareClassMetadata({
22066
23179
  }
22067
23180
  </div>
22068
23181
  `,
22069
- styles: [":host{display:block}.ms-field{display:flex;flex-direction:column;gap:6px}.ms-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.ms-required{color:#ef4444;margin-left:2px}.ms-tags{display:flex;flex-wrap:wrap;gap:6px}.ms-wrap{position:relative}.ms-trigger{width:100%;box-sizing:border-box;display:flex;align-items:center;justify-content:space-between;padding:9px 10px 9px 12px;font-size:.875rem;font-family:inherit;text-align:left;color:#1e293b;background:#fff;border:1px solid #e2e8f0;border-radius:8px;cursor:pointer;outline:none;transition:border-color .15s,box-shadow .15s}.ms-trigger:focus-visible,.ms-trigger.ms-open{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.ms-has-error .ms-trigger{border-color:#ef4444}.ms-disabled .ms-trigger{opacity:.5;cursor:not-allowed}.ms-placeholder{color:#64748b}.ms-chevron{color:#94a3b8;flex-shrink:0;margin-left:8px;transition:transform .2s ease}.ms-chevron-open{transform:rotate(180deg)}.ms-dropdown{position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:50;display:flex;flex-direction:column;max-height:260px;background:#fff;border:1px solid #e2e8f0;border-radius:8px;box-shadow:0 4px 16px #0f172a1a}.ms-search-wrap{padding:8px;border-bottom:1px solid #e2e8f0}.ms-search{width:100%;box-sizing:border-box;padding:7px 10px;font-size:.8125rem;font-family:inherit;color:#1e293b;border:1px solid #e2e8f0;border-radius:6px;outline:none}.ms-search::placeholder{color:#94a3b8}.ms-search:focus{border-color:#3b82f6}.ms-options{overflow-y:auto;padding:4px 0}.ms-option{padding:7px 12px;font-size:.8125rem}.ms-option:hover{background:#f8fafc}.ms-option-selected{background:#eff6ff}.ms-empty{padding:16px;text-align:center;color:#94a3b8;font-size:.8125rem}.ms-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.ms-desc-error{color:#ef4444}@media(max-width:480px){.ms-trigger,.ms-search{font-size:1rem}}\n"]
23182
+ styles: [":host{display:block}.ms-field{display:flex;flex-direction:column;gap:6px}.ms-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.ms-required{color:#dc2626;margin-left:2px}.ms-tags{display:flex;flex-wrap:wrap;gap:6px}.ms-wrap{position:relative}.ms-trigger{width:100%;box-sizing:border-box;display:flex;align-items:center;justify-content:space-between;padding:9px 10px 9px 12px;font-size:.875rem;font-family:inherit;text-align:left;color:#1e293b;background:#fff;border:1px solid #e2e8f0;border-radius:8px;cursor:pointer;outline:none;transition:border-color .15s,box-shadow .15s}.ms-trigger:focus-visible,.ms-trigger.ms-open{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.ms-has-error .ms-trigger{border-color:#ef4444}.ms-disabled .ms-trigger{opacity:.5;cursor:not-allowed}.ms-placeholder{color:#64748b}.ms-chevron{color:#94a3b8;flex-shrink:0;margin-left:8px;transition:transform .2s ease}.ms-chevron-open{transform:rotate(180deg)}.ms-dropdown{position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:50;display:flex;flex-direction:column;max-height:260px;background:#fff;border:1px solid #e2e8f0;border-radius:8px;box-shadow:0 4px 16px #0f172a1a}.ms-search-wrap{padding:8px;border-bottom:1px solid #e2e8f0}.ms-search{width:100%;box-sizing:border-box;padding:7px 10px;font-size:.8125rem;font-family:inherit;color:#1e293b;border:1px solid #e2e8f0;border-radius:6px;outline:none}.ms-search::placeholder{color:#94a3b8}.ms-search:focus{border-color:#3b82f6}.ms-options{overflow-y:auto;padding:4px 0}.ms-option{padding:7px 12px;font-size:.8125rem}.ms-option:hover{background:#f8fafc}.ms-option-selected{background:#eff6ff}.ms-empty{padding:16px;text-align:center;color:#94a3b8;font-size:.8125rem}.ms-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.ms-desc-error{color:#dc2626}@media(max-width:480px){.ms-trigger,.ms-search{font-size:1rem}}\n"]
22070
23183
  }]
22071
23184
  }],
22072
23185
  propDecorators: {
@@ -26667,7 +27780,7 @@ var AppShellComponent = class AppShellComponent {
26667
27780
  <ui-confirm-outlet />
26668
27781
  `,
26669
27782
  isInline: true,
26670
- 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-icon ::ng-deep svg{width:17px;height:17px;stroke:color-mix(in srgb,var(--shell-text, #fff) 90%,transparent);transition:stroke .15s;flex-shrink:0}.sidebar-nav a:hover .nav-icon ::ng-deep svg{stroke:color-mix(in srgb,var(--shell-text, #fff) 100%,transparent)}.sidebar-nav a.active .nav-icon ::ng-deep svg{stroke:#93c5fd}.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-full ::ng-deep img,.shell.collapsed .brand-full ::ng-deep svg{width:44px;height:44px;max-width:none;object-fit:cover;object-position:50% 42%}.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-icon ::ng-deep svg{width:20px;height:20px}.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-end{display:flex;align-items:center;margin-left:auto}.content{flex:1;overflow-y:auto;padding:24px;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:4px 0 32px #0000004d}.shell.sidebar-open .sidebar{transform:translate(0)}.shell.sidebar-open .sidebar-backdrop{display:block}.main-area{width:100%}.top-header{padding:0 16px;gap:4px}.content{padding:16px}}@media(max-width:480px){.page-title{font-size:1.0625rem}.content{padding:12px}}@media(prefers-reduced-motion:reduce){.chevron,.sidebar-nav a,.sidebar,.nav-icon ::ng-deep svg{transition:none!important}}\n"],
27783
+ 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-icon ::ng-deep svg{width:17px;height:17px;stroke:color-mix(in srgb,var(--shell-text, #fff) 90%,transparent);transition:stroke .15s;flex-shrink:0}.sidebar-nav a:hover .nav-icon ::ng-deep svg{stroke:color-mix(in srgb,var(--shell-text, #fff) 100%,transparent)}.sidebar-nav a.active .nav-icon ::ng-deep svg{stroke:#93c5fd}.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-full ::ng-deep img,.shell.collapsed .brand-full ::ng-deep svg{width:44px;height:44px;max-width:none;object-fit:cover;object-position:50% 42%}.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-icon ::ng-deep svg{width:20px;height:20px}.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-end{display:flex;align-items:center;margin-left:auto}.content{flex:1;overflow-y:auto;padding:24px;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:4px 0 32px #0000004d}.shell.sidebar-open .sidebar{transform:translate(0)}.shell.sidebar-open .sidebar-backdrop{display:block}.main-area{width:100%}.top-header{padding:0 16px;gap:4px}.content{padding:16px}}@media(max-width:480px){.page-title{font-size:1.0625rem}.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,.nav-icon ::ng-deep svg{transition:none!important}}\n"],
26671
27784
  dependencies: [
26672
27785
  {
26673
27786
  kind: "directive",
@@ -26918,7 +28031,7 @@ i0.ɵɵngDeclareClassMetadata({
26918
28031
  <!-- Global confirm overlay — position:fixed so it overlays without affecting layout -->
26919
28032
  <ui-confirm-outlet />
26920
28033
  `,
26921
- 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-icon ::ng-deep svg{width:17px;height:17px;stroke:color-mix(in srgb,var(--shell-text, #fff) 90%,transparent);transition:stroke .15s;flex-shrink:0}.sidebar-nav a:hover .nav-icon ::ng-deep svg{stroke:color-mix(in srgb,var(--shell-text, #fff) 100%,transparent)}.sidebar-nav a.active .nav-icon ::ng-deep svg{stroke:#93c5fd}.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-full ::ng-deep img,.shell.collapsed .brand-full ::ng-deep svg{width:44px;height:44px;max-width:none;object-fit:cover;object-position:50% 42%}.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-icon ::ng-deep svg{width:20px;height:20px}.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-end{display:flex;align-items:center;margin-left:auto}.content{flex:1;overflow-y:auto;padding:24px;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:4px 0 32px #0000004d}.shell.sidebar-open .sidebar{transform:translate(0)}.shell.sidebar-open .sidebar-backdrop{display:block}.main-area{width:100%}.top-header{padding:0 16px;gap:4px}.content{padding:16px}}@media(max-width:480px){.page-title{font-size:1.0625rem}.content{padding:12px}}@media(prefers-reduced-motion:reduce){.chevron,.sidebar-nav a,.sidebar,.nav-icon ::ng-deep svg{transition:none!important}}\n"]
28034
+ 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-icon ::ng-deep svg{width:17px;height:17px;stroke:color-mix(in srgb,var(--shell-text, #fff) 90%,transparent);transition:stroke .15s;flex-shrink:0}.sidebar-nav a:hover .nav-icon ::ng-deep svg{stroke:color-mix(in srgb,var(--shell-text, #fff) 100%,transparent)}.sidebar-nav a.active .nav-icon ::ng-deep svg{stroke:#93c5fd}.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-full ::ng-deep img,.shell.collapsed .brand-full ::ng-deep svg{width:44px;height:44px;max-width:none;object-fit:cover;object-position:50% 42%}.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-icon ::ng-deep svg{width:20px;height:20px}.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-end{display:flex;align-items:center;margin-left:auto}.content{flex:1;overflow-y:auto;padding:24px;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:4px 0 32px #0000004d}.shell.sidebar-open .sidebar{transform:translate(0)}.shell.sidebar-open .sidebar-backdrop{display:block}.main-area{width:100%}.top-header{padding:0 16px;gap:4px}.content{padding:16px}}@media(max-width:480px){.page-title{font-size:1.0625rem}.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,.nav-icon ::ng-deep svg{transition:none!important}}\n"]
26922
28035
  }]
26923
28036
  }],
26924
28037
  propDecorators: {
@@ -27042,281 +28155,6 @@ i0.ɵɵngDeclareClassMetadata({
27042
28155
  }]
27043
28156
  }]
27044
28157
  });
27045
- const EXTRA_ICONS = {
27046
- "delete": "M3 6h18 M8 6V4a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v2 M5 6l1 14a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2l1-14 M10 11v6 M14 11v6",
27047
- "add": "M12 5v14 M5 12h14",
27048
- "close": "M18 6L6 18 M6 6l12 12",
27049
- "check": "M20 6L9 17l-5-5",
27050
- "upload": "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4 M17 8l-5-5-5 5 M12 3v12",
27051
- "image": "M19 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V5a2 2 0 0 0-2-2z M8.5 8.5a1.5 1.5 0 1 0 0 3 1.5 1.5 0 0 0 0-3z M21 15l-5-5L5 21",
27052
- "chevron-up": "M18 15l-6-6-6 6",
27053
- "chevron-down": "M6 9l6 6 6-6",
27054
- "arrow-left": "M19 12H5 M12 19l-7-7 7-7",
27055
- "bell": "M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9 M13.73 21a2 2 0 0 1-3.46 0",
27056
- "print": "M6 9V2h12v7 M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2 M6 14h12v8H6z",
27057
- "shield": "M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z",
27058
- "lock": "M5 11h14a2 2 0 0 1 2 2v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-7a2 2 0 0 1 2-2z M7 11V7a5 5 0 0 1 10 0v4",
27059
- "arrow-up": "M12 19V5 M5 12l7-7 7 7",
27060
- "arrow-down": "M12 5v14 M19 12l-7 7-7-7",
27061
- "arrow-right": "M5 12h14 M12 5l7 7-7 7",
27062
- "document": "M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z M14 2v6h6 M16 13H8 M16 17H8 M10 9H8",
27063
- "grip": "M9 5h.01 M15 5h.01 M9 12h.01 M15 12h.01 M9 19h.01 M15 19h.01",
27064
- "card": "M3 4h18a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2z M1 10h22",
27065
- "bank": "M3 21h18 M3 10h18 M5 6l7-3 7 3 M4 10v11 M20 10v11 M8 14v3 M12 14v3 M16 14v3"
27066
- };
27067
- function iconPath(name) {
27068
- return Object.prototype.hasOwnProperty.call(EXTRA_ICONS, name) ? EXTRA_ICONS[name] : builtInActionIcon(name);
27069
- }
27070
- var IconComponent = class IconComponent {
27071
- constructor() {
27072
- this.name = input.required(...ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []);
27073
- this.tooltip = input("", ...ngDevMode ? [{ debugName: "tooltip" }] : /* istanbul ignore next */ []);
27074
- this.ariaLabel = input("", ...ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []);
27075
- this.size = input(16, ...ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []);
27076
- this.variant = input("default", ...ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []);
27077
- this.disabled = input(false, ...ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []);
27078
- this.loading = input(false, ...ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []);
27079
- this.interactive = input(true, ...ngDevMode ? [{ debugName: "interactive" }] : /* istanbul ignore next */ []);
27080
- this.iconClick = output();
27081
- this.accessibleName = computed(() => this.ariaLabel() || this.tooltip(), ...ngDevMode ? [{ debugName: "accessibleName" }] : /* istanbul ignore next */ []);
27082
- this.path = computed(() => iconPath(this.name()), ...ngDevMode ? [{ debugName: "path" }] : /* istanbul ignore next */ []);
27083
- }
27084
- onClick(event) {
27085
- event.stopPropagation();
27086
- this.iconClick.emit(event);
27087
- }
27088
- static {
27089
- this.ɵfac = i0.ɵɵngDeclareFactory({
27090
- minVersion: "12.0.0",
27091
- version: "22.2.2",
27092
- ngImport: i0,
27093
- type: IconComponent,
27094
- deps: [],
27095
- target: i0.ɵɵFactoryTarget.Component
27096
- });
27097
- }
27098
- static {
27099
- this.ɵcmp = i0.ɵɵngDeclareComponent({
27100
- minVersion: "17.0.0",
27101
- version: "22.2.2",
27102
- type: IconComponent,
27103
- isStandalone: true,
27104
- selector: "ui-icon",
27105
- inputs: {
27106
- name: {
27107
- classPropertyName: "name",
27108
- publicName: "name",
27109
- isSignal: true,
27110
- isRequired: true,
27111
- transformFunction: null
27112
- },
27113
- tooltip: {
27114
- classPropertyName: "tooltip",
27115
- publicName: "tooltip",
27116
- isSignal: true,
27117
- isRequired: false,
27118
- transformFunction: null
27119
- },
27120
- ariaLabel: {
27121
- classPropertyName: "ariaLabel",
27122
- publicName: "ariaLabel",
27123
- isSignal: true,
27124
- isRequired: false,
27125
- transformFunction: null
27126
- },
27127
- size: {
27128
- classPropertyName: "size",
27129
- publicName: "size",
27130
- isSignal: true,
27131
- isRequired: false,
27132
- transformFunction: null
27133
- },
27134
- variant: {
27135
- classPropertyName: "variant",
27136
- publicName: "variant",
27137
- isSignal: true,
27138
- isRequired: false,
27139
- transformFunction: null
27140
- },
27141
- disabled: {
27142
- classPropertyName: "disabled",
27143
- publicName: "disabled",
27144
- isSignal: true,
27145
- isRequired: false,
27146
- transformFunction: null
27147
- },
27148
- loading: {
27149
- classPropertyName: "loading",
27150
- publicName: "loading",
27151
- isSignal: true,
27152
- isRequired: false,
27153
- transformFunction: null
27154
- },
27155
- interactive: {
27156
- classPropertyName: "interactive",
27157
- publicName: "interactive",
27158
- isSignal: true,
27159
- isRequired: false,
27160
- transformFunction: null
27161
- }
27162
- },
27163
- outputs: { iconClick: "iconClick" },
27164
- ngImport: i0,
27165
- template: `
27166
- @if (interactive()) {
27167
- <button type="button" class="icon-btn" [class.danger]="variant() === 'danger'"
27168
- [class.loading]="loading()" [disabled]="disabled() || loading()" [attr.aria-busy]="loading() ? 'true' : null"
27169
- [attr.aria-label]="accessibleName() || null" [uiTooltip]="tooltip()" (click)="onClick($event)">
27170
- <ng-container *ngTemplateOutlet="glyph" />
27171
- </button>
27172
- } @else {
27173
- <span class="icon-static" [class.danger]="variant() === 'danger'" [attr.aria-busy]="loading() ? 'true' : null"
27174
- [attr.role]="accessibleName() ? 'img' : null" [attr.aria-label]="accessibleName() || null" [uiTooltip]="tooltip()" [attr.aria-hidden]="accessibleName() ? null : 'true'">
27175
- <ng-container *ngTemplateOutlet="glyph" />
27176
- </span>
27177
- }
27178
- <ng-template #glyph>
27179
- @if (loading()) {
27180
- <span class="spinner" [style.width.px]="size()" [style.height.px]="size()" aria-hidden="true"></span>
27181
- } @else if (path(); as d) {
27182
- <svg viewBox="0 0 24 24" [attr.width]="size()" [attr.height]="size()" fill="none" stroke="currentColor"
27183
- stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">
27184
- <path [attr.d]="d" />
27185
- </svg>
27186
- }
27187
- </ng-template>
27188
- `,
27189
- isInline: true,
27190
- styles: [":host{display:inline-flex}.icon-static{display:inline-flex;align-items:center;justify-content:center;color:inherit}.icon-static.danger{color:#b91c1c}.icon-static svg{display:block}.icon-btn{position:relative;display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border:none;border-radius:6px;background:transparent;color:#475569;cursor:pointer;-webkit-appearance:none;appearance:none;font:inherit;transition:background .15s ease,color .15s ease}.icon-btn:hover:not(:disabled){background:#f1f5f9;color:#0f172a}.icon-btn.danger{color:#b91c1c}.icon-btn.danger:hover:not(:disabled){background:#fef2f2;color:#991b1b}.icon-btn:focus-visible{outline:2px solid #2563eb;outline-offset:2px}.icon-btn:disabled{opacity:.5;cursor:not-allowed}.icon-btn.loading:disabled{opacity:1;cursor:progress}.spinner{display:block;box-sizing:border-box;border:2px solid rgba(100,116,139,.3);border-top-color:currentColor;border-radius:50%;animation:ui-icon-spin .6s linear infinite}@keyframes ui-icon-spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){.spinner{animation-duration:2s}}.icon-btn:after{content:\"\";position:absolute;inset:-8px}\n"],
27191
- dependencies: [{
27192
- kind: "directive",
27193
- type: NgTemplateOutlet,
27194
- selector: "[ngTemplateOutlet]",
27195
- inputs: [
27196
- "ngTemplateOutletContext",
27197
- "ngTemplateOutlet",
27198
- "ngTemplateOutletInjector"
27199
- ]
27200
- }, {
27201
- kind: "directive",
27202
- type: TooltipDirective,
27203
- selector: "[uiTooltip]",
27204
- inputs: ["uiTooltip", "tooltipPosition"]
27205
- }],
27206
- changeDetection: i0.ChangeDetectionStrategy.OnPush
27207
- });
27208
- }
27209
- };
27210
- i0.ɵɵngDeclareClassMetadata({
27211
- minVersion: "12.0.0",
27212
- version: "22.2.2",
27213
- ngImport: i0,
27214
- type: IconComponent,
27215
- decorators: [{
27216
- type: Component,
27217
- args: [{
27218
- selector: "ui-icon",
27219
- standalone: true,
27220
- imports: [NgTemplateOutlet, TooltipDirective],
27221
- changeDetection: ChangeDetectionStrategy.OnPush,
27222
- template: `
27223
- @if (interactive()) {
27224
- <button type="button" class="icon-btn" [class.danger]="variant() === 'danger'"
27225
- [class.loading]="loading()" [disabled]="disabled() || loading()" [attr.aria-busy]="loading() ? 'true' : null"
27226
- [attr.aria-label]="accessibleName() || null" [uiTooltip]="tooltip()" (click)="onClick($event)">
27227
- <ng-container *ngTemplateOutlet="glyph" />
27228
- </button>
27229
- } @else {
27230
- <span class="icon-static" [class.danger]="variant() === 'danger'" [attr.aria-busy]="loading() ? 'true' : null"
27231
- [attr.role]="accessibleName() ? 'img' : null" [attr.aria-label]="accessibleName() || null" [uiTooltip]="tooltip()" [attr.aria-hidden]="accessibleName() ? null : 'true'">
27232
- <ng-container *ngTemplateOutlet="glyph" />
27233
- </span>
27234
- }
27235
- <ng-template #glyph>
27236
- @if (loading()) {
27237
- <span class="spinner" [style.width.px]="size()" [style.height.px]="size()" aria-hidden="true"></span>
27238
- } @else if (path(); as d) {
27239
- <svg viewBox="0 0 24 24" [attr.width]="size()" [attr.height]="size()" fill="none" stroke="currentColor"
27240
- stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">
27241
- <path [attr.d]="d" />
27242
- </svg>
27243
- }
27244
- </ng-template>
27245
- `,
27246
- styles: [":host{display:inline-flex}.icon-static{display:inline-flex;align-items:center;justify-content:center;color:inherit}.icon-static.danger{color:#b91c1c}.icon-static svg{display:block}.icon-btn{position:relative;display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border:none;border-radius:6px;background:transparent;color:#475569;cursor:pointer;-webkit-appearance:none;appearance:none;font:inherit;transition:background .15s ease,color .15s ease}.icon-btn:hover:not(:disabled){background:#f1f5f9;color:#0f172a}.icon-btn.danger{color:#b91c1c}.icon-btn.danger:hover:not(:disabled){background:#fef2f2;color:#991b1b}.icon-btn:focus-visible{outline:2px solid #2563eb;outline-offset:2px}.icon-btn:disabled{opacity:.5;cursor:not-allowed}.icon-btn.loading:disabled{opacity:1;cursor:progress}.spinner{display:block;box-sizing:border-box;border:2px solid rgba(100,116,139,.3);border-top-color:currentColor;border-radius:50%;animation:ui-icon-spin .6s linear infinite}@keyframes ui-icon-spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){.spinner{animation-duration:2s}}.icon-btn:after{content:\"\";position:absolute;inset:-8px}\n"]
27247
- }]
27248
- }],
27249
- propDecorators: {
27250
- name: [{
27251
- type: i0.Input,
27252
- args: [{
27253
- isSignal: true,
27254
- alias: "name",
27255
- required: true
27256
- }]
27257
- }],
27258
- tooltip: [{
27259
- type: i0.Input,
27260
- args: [{
27261
- isSignal: true,
27262
- alias: "tooltip",
27263
- required: false
27264
- }]
27265
- }],
27266
- ariaLabel: [{
27267
- type: i0.Input,
27268
- args: [{
27269
- isSignal: true,
27270
- alias: "ariaLabel",
27271
- required: false
27272
- }]
27273
- }],
27274
- size: [{
27275
- type: i0.Input,
27276
- args: [{
27277
- isSignal: true,
27278
- alias: "size",
27279
- required: false
27280
- }]
27281
- }],
27282
- variant: [{
27283
- type: i0.Input,
27284
- args: [{
27285
- isSignal: true,
27286
- alias: "variant",
27287
- required: false
27288
- }]
27289
- }],
27290
- disabled: [{
27291
- type: i0.Input,
27292
- args: [{
27293
- isSignal: true,
27294
- alias: "disabled",
27295
- required: false
27296
- }]
27297
- }],
27298
- loading: [{
27299
- type: i0.Input,
27300
- args: [{
27301
- isSignal: true,
27302
- alias: "loading",
27303
- required: false
27304
- }]
27305
- }],
27306
- interactive: [{
27307
- type: i0.Input,
27308
- args: [{
27309
- isSignal: true,
27310
- alias: "interactive",
27311
- required: false
27312
- }]
27313
- }],
27314
- iconClick: [{
27315
- type: i0.Output,
27316
- args: ["iconClick"]
27317
- }]
27318
- }
27319
- });
27320
28158
  var TimelineComponent = class TimelineComponent {
27321
28159
  constructor() {
27322
28160
  this.items = input([], ...ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []);
@@ -28495,7 +29333,7 @@ var ErrorComponent = class ErrorComponent {
28495
29333
  }
28496
29334
  `,
28497
29335
  isInline: true,
28498
- styles: [":host{display:block}.ui-error{margin:6px 0 0;font-size:.75rem;line-height:1.4;color:#ef4444}\n"],
29336
+ styles: [":host{display:block}.ui-error{margin:6px 0 0;font-size:.75rem;line-height:1.4;color:#dc2626}\n"],
28499
29337
  changeDetection: i0.ChangeDetectionStrategy.OnPush
28500
29338
  });
28501
29339
  }
@@ -28516,7 +29354,7 @@ i0.ɵɵngDeclareClassMetadata({
28516
29354
  <p class="ui-error" role="alert" [attr.id]="errorId() || null">{{ message() }}</p>
28517
29355
  }
28518
29356
  `,
28519
- styles: [":host{display:block}.ui-error{margin:6px 0 0;font-size:.75rem;line-height:1.4;color:#ef4444}\n"]
29357
+ styles: [":host{display:block}.ui-error{margin:6px 0 0;font-size:.75rem;line-height:1.4;color:#dc2626}\n"]
28520
29358
  }]
28521
29359
  }],
28522
29360
  propDecorators: {
@@ -28983,6 +29821,15 @@ var DateRangePickerComponent = class DateRangePickerComponent {
28983
29821
  this.ariaLabel = input("Date range", ...ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []);
28984
29822
  this.rangeChange = output();
28985
29823
  this.selectedPreset = linkedSignal(() => this.activePreset(), ...ngDevMode ? [{ debugName: "selectedPreset" }] : /* istanbul ignore next */ []);
29824
+ this.popoverDismissed = linkedSignal({
29825
+ ...ngDevMode ? { debugName: "popoverDismissed" } : /* istanbul ignore next */ {},
29826
+ source: this.selectedPreset,
29827
+ computation: () => false
29828
+ });
29829
+ this.popoverVisible = computed(() => this.showPresets() && this.selectedPreset() === "custom" && !this.popoverDismissed(), ...ngDevMode ? [{ debugName: "popoverVisible" }] : /* istanbul ignore next */ []);
29830
+ this.popTop = signal(0, ...ngDevMode ? [{ debugName: "popTop" }] : /* istanbul ignore next */ []);
29831
+ this.popRight = signal(16, ...ngDevMode ? [{ debugName: "popRight" }] : /* istanbul ignore next */ []);
29832
+ this.host = inject(ElementRef);
28986
29833
  this.customStart = signal("", ...ngDevMode ? [{ debugName: "customStart" }] : /* istanbul ignore next */ []);
28987
29834
  this.customEnd = signal("", ...ngDevMode ? [{ debugName: "customEnd" }] : /* istanbul ignore next */ []);
28988
29835
  this.presetTabs = computed(() => {
@@ -29001,13 +29848,41 @@ var DateRangePickerComponent = class DateRangePickerComponent {
29001
29848
  label: PRESET_LABELS[key]
29002
29849
  }));
29003
29850
  }, ...ngDevMode ? [{ debugName: "presetTabs" }] : /* istanbul ignore next */ []);
29851
+ effect((onCleanup) => {
29852
+ if (!this.popoverVisible()) return;
29853
+ const place = () => this.place();
29854
+ untracked(place);
29855
+ window.addEventListener("resize", place);
29856
+ window.addEventListener("scroll", place, true);
29857
+ onCleanup(() => {
29858
+ window.removeEventListener("resize", place);
29859
+ window.removeEventListener("scroll", place, true);
29860
+ });
29861
+ });
29862
+ }
29863
+ place() {
29864
+ const pills = this.host.nativeElement.querySelector(".pills");
29865
+ if (!pills) return;
29866
+ const r = pills.getBoundingClientRect();
29867
+ this.popTop.set(Math.round(r.bottom + 8));
29868
+ this.popRight.set(Math.max(16, Math.round(document.documentElement.clientWidth - r.right)));
29869
+ }
29870
+ onDocumentClick(e) {
29871
+ if (this.popoverVisible() && !this.host.nativeElement.contains(e.target)) this.popoverDismissed.set(true);
29872
+ }
29873
+ onEscape(e) {
29874
+ if (!this.popoverVisible()) return;
29875
+ e.stopPropagation();
29876
+ this.popoverDismissed.set(true);
29004
29877
  }
29005
29878
  selectPreset(key) {
29006
29879
  this.selectedPreset.set(key);
29880
+ this.popoverDismissed.set(false);
29007
29881
  if (key !== "custom") this.rangeChange.emit(resolvePreset(key, /* @__PURE__ */ new Date()));
29008
29882
  }
29009
29883
  applyCustom() {
29010
29884
  if (!this.customStart() || !this.customEnd()) return;
29885
+ this.popoverDismissed.set(true);
29011
29886
  this.rangeChange.emit({
29012
29887
  preset: "custom",
29013
29888
  startDate: this.customStart(),
@@ -29063,24 +29938,38 @@ var DateRangePickerComponent = class DateRangePickerComponent {
29063
29938
  }
29064
29939
  },
29065
29940
  outputs: { rangeChange: "rangeChange" },
29941
+ host: { listeners: {
29942
+ "document:click": "onDocumentClick($event)",
29943
+ "keydown.escape": "onEscape($event)"
29944
+ } },
29066
29945
  ngImport: i0,
29067
29946
  template: `
29068
29947
  <div class="date-range-picker">
29069
29948
  @if (showPresets()) {
29070
- <ui-pill-tabs [tabs]="presetTabs()" [activeKey]="selectedPreset()" [ariaLabel]="ariaLabel()" (tabChange)="selectPreset($any($event))" />
29071
- }
29072
- @if (selectedPreset() === 'custom' || !showPresets()) {
29073
- <div class="custom-range">
29074
- <ui-date-input label="From" [max]="customEnd()" [ngModel]="customStart()" (ngModelChange)="customStart.set($event)" />
29075
- <span class="date-sep" aria-hidden="true">–</span>
29076
- <ui-date-input label="To" [min]="customStart()" [ngModel]="customEnd()" (ngModelChange)="customEnd.set($event)" />
29077
- <ui-button variant="primary" size="sm" [disabled]="!customStart() || !customEnd()" (click)="applyCustom()">Apply</ui-button>
29949
+ <div class="pills" #pills>
29950
+ <ui-pill-tabs [tabs]="presetTabs()" [activeKey]="selectedPreset()" [ariaLabel]="ariaLabel()" (tabChange)="selectPreset($any($event))" />
29078
29951
  </div>
29952
+ @if (popoverVisible()) {
29953
+ <div class="custom-popover" role="group" aria-label="Custom date range" data-testid="custom-range-popover"
29954
+ [style.top.px]="popTop()" [style.right.px]="popRight()">
29955
+ <ng-container *ngTemplateOutlet="customFields" />
29956
+ </div>
29957
+ }
29958
+ } @else {
29959
+ <ng-container *ngTemplateOutlet="customFields" />
29079
29960
  }
29080
29961
  </div>
29962
+ <ng-template #customFields>
29963
+ <div class="custom-range">
29964
+ <ui-date-input label="From" [max]="customEnd()" [ngModel]="customStart()" (ngModelChange)="customStart.set($event)" />
29965
+ <span class="date-sep" aria-hidden="true">–</span>
29966
+ <ui-date-input label="To" [min]="customStart()" [ngModel]="customEnd()" (ngModelChange)="customEnd.set($event)" />
29967
+ <ui-button variant="primary" size="sm" [disabled]="!customStart() || !customEnd()" (click)="applyCustom()">Apply</ui-button>
29968
+ </div>
29969
+ </ng-template>
29081
29970
  `,
29082
29971
  isInline: true,
29083
- styles: [":host{display:block}.date-range-picker{display:flex;flex-direction:column;gap:10px}.custom-range{display:flex;align-items:flex-end;gap:8px;flex-wrap:wrap}.date-sep{color:#94a3b8;font-weight:500;padding-bottom:10px}\n"],
29972
+ styles: [":host{display:block}.date-range-picker{display:flex;flex-direction:column;gap:10px}.pills{width:fit-content;max-width:100%}.custom-range{display:flex;align-items:flex-end;gap:8px;flex-wrap:wrap}.date-sep{color:#94a3b8;font-weight:500;padding-bottom:10px}.custom-popover{position:fixed;z-index:1000;box-sizing:border-box;max-width:calc(100vw - 32px);background:#fff;border:1px solid #e2e8f0;border-radius:12px;padding:16px;box-shadow:0 10px 25px #0f172a1f,0 4px 10px #0f172a0f}\n"],
29084
29973
  dependencies: [
29085
29974
  {
29086
29975
  kind: "ngmodule",
@@ -29104,6 +29993,16 @@ var DateRangePickerComponent = class DateRangePickerComponent {
29104
29993
  outputs: ["ngModelChange"],
29105
29994
  exportAs: ["ngModel"]
29106
29995
  },
29996
+ {
29997
+ kind: "directive",
29998
+ type: NgTemplateOutlet,
29999
+ selector: "[ngTemplateOutlet]",
30000
+ inputs: [
30001
+ "ngTemplateOutletContext",
30002
+ "ngTemplateOutlet",
30003
+ "ngTemplateOutletInjector"
30004
+ ]
30005
+ },
29107
30006
  {
29108
30007
  kind: "component",
29109
30008
  type: PillTabsComponent,
@@ -29180,28 +30079,44 @@ i0.ɵɵngDeclareClassMetadata({
29180
30079
  changeDetection: ChangeDetectionStrategy.OnPush,
29181
30080
  imports: [
29182
30081
  FormsModule,
30082
+ NgTemplateOutlet,
29183
30083
  PillTabsComponent,
29184
30084
  DateInputComponent,
29185
30085
  ButtonComponent
29186
30086
  ],
30087
+ host: {
30088
+ "(document:click)": "onDocumentClick($event)",
30089
+ "(keydown.escape)": "onEscape($event)"
30090
+ },
29187
30091
  template: `
29188
30092
  <div class="date-range-picker">
29189
30093
  @if (showPresets()) {
29190
- <ui-pill-tabs [tabs]="presetTabs()" [activeKey]="selectedPreset()" [ariaLabel]="ariaLabel()" (tabChange)="selectPreset($any($event))" />
29191
- }
29192
- @if (selectedPreset() === 'custom' || !showPresets()) {
29193
- <div class="custom-range">
29194
- <ui-date-input label="From" [max]="customEnd()" [ngModel]="customStart()" (ngModelChange)="customStart.set($event)" />
29195
- <span class="date-sep" aria-hidden="true">–</span>
29196
- <ui-date-input label="To" [min]="customStart()" [ngModel]="customEnd()" (ngModelChange)="customEnd.set($event)" />
29197
- <ui-button variant="primary" size="sm" [disabled]="!customStart() || !customEnd()" (click)="applyCustom()">Apply</ui-button>
30094
+ <div class="pills" #pills>
30095
+ <ui-pill-tabs [tabs]="presetTabs()" [activeKey]="selectedPreset()" [ariaLabel]="ariaLabel()" (tabChange)="selectPreset($any($event))" />
29198
30096
  </div>
30097
+ @if (popoverVisible()) {
30098
+ <div class="custom-popover" role="group" aria-label="Custom date range" data-testid="custom-range-popover"
30099
+ [style.top.px]="popTop()" [style.right.px]="popRight()">
30100
+ <ng-container *ngTemplateOutlet="customFields" />
30101
+ </div>
30102
+ }
30103
+ } @else {
30104
+ <ng-container *ngTemplateOutlet="customFields" />
29199
30105
  }
29200
30106
  </div>
30107
+ <ng-template #customFields>
30108
+ <div class="custom-range">
30109
+ <ui-date-input label="From" [max]="customEnd()" [ngModel]="customStart()" (ngModelChange)="customStart.set($event)" />
30110
+ <span class="date-sep" aria-hidden="true">–</span>
30111
+ <ui-date-input label="To" [min]="customStart()" [ngModel]="customEnd()" (ngModelChange)="customEnd.set($event)" />
30112
+ <ui-button variant="primary" size="sm" [disabled]="!customStart() || !customEnd()" (click)="applyCustom()">Apply</ui-button>
30113
+ </div>
30114
+ </ng-template>
29201
30115
  `,
29202
- styles: [":host{display:block}.date-range-picker{display:flex;flex-direction:column;gap:10px}.custom-range{display:flex;align-items:flex-end;gap:8px;flex-wrap:wrap}.date-sep{color:#94a3b8;font-weight:500;padding-bottom:10px}\n"]
30116
+ styles: [":host{display:block}.date-range-picker{display:flex;flex-direction:column;gap:10px}.pills{width:fit-content;max-width:100%}.custom-range{display:flex;align-items:flex-end;gap:8px;flex-wrap:wrap}.date-sep{color:#94a3b8;font-weight:500;padding-bottom:10px}.custom-popover{position:fixed;z-index:1000;box-sizing:border-box;max-width:calc(100vw - 32px);background:#fff;border:1px solid #e2e8f0;border-radius:12px;padding:16px;box-shadow:0 10px 25px #0f172a1f,0 4px 10px #0f172a0f}\n"]
29203
30117
  }]
29204
30118
  }],
30119
+ ctorParameters: () => [],
29205
30120
  propDecorators: {
29206
30121
  activePreset: [{
29207
30122
  type: i0.Input,
@@ -30347,7 +31262,7 @@ var RichTextEditorComponent = class RichTextEditorComponent {
30347
31262
  </div>
30348
31263
  `,
30349
31264
  isInline: true,
30350
- styles: [":host{display:block}.rte-field{display:flex;flex-direction:column;gap:6px}.rte-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.rte-required{color:#ef4444;margin-left:2px}.rte-hint-inline{font-size:.75rem;color:#94a3b8;font-weight:400;margin-left:4px}.rte-box{border:1px solid #e2e8f0;border-radius:8px;background:#fff;transition:border-color .15s,box-shadow .15s}.rte-box:focus-within{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.rte-error .rte-box{border-color:#ef4444}.rte-error .rte-box:focus-within{box-shadow:0 0 0 3px #ef44441f}.rte-disabled .rte-box{opacity:.5;cursor:not-allowed}.rte-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:2px;padding:6px 8px;background:#f8fafc;border-bottom:1px solid #e2e8f0;border-radius:8px 8px 0 0}.rte-divider{width:1px;height:20px;background:#cbd5e1;margin:0 4px}.rte-btn{position:relative;display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border:none;border-radius:4px;background:none;color:#64748b;cursor:pointer;transition:background .15s,color .15s}.rte-btn svg{width:16px;height:16px}.rte-btn:hover:not(:disabled){background:#e2e8f0;color:#1e293b}.rte-btn:focus-visible,.rte-btn:focus-within{outline:2px solid #3b82f6;outline-offset:1px}.rte-btn.active{background:#dbeafe;color:#2563eb}.rte-btn:disabled,.rte-btn-disabled{cursor:not-allowed;opacity:.5}.rte-menu-wrap{position:relative;display:inline-flex}.rte-menu-btn{width:auto;padding:0 6px;gap:3px}.rte-menu-btn .rte-chevron{width:10px;height:10px;color:#94a3b8;flex-shrink:0}.rte-dropdown{position:absolute;top:calc(100% + 4px);left:0;z-index:100;background:#fff;border:1px solid #e2e8f0;border-radius:6px;box-shadow:0 4px 12px #0000001f;padding:4px;overflow-y:auto;max-height:260px}.rte-font-panel{min-width:180px}.rte-item{display:block;width:100%;text-align:left;padding:5px 10px;font-size:12px;color:#374151;border:none;background:none;border-radius:4px;cursor:pointer;white-space:nowrap}.rte-item:hover{background:#f1f5f9}.rte-item.selected{background:#dbeafe;color:#2563eb;font-weight:600}.rte-group-label{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:#94a3b8;padding:6px 10px 2px}.di-h1{font-size:18px;font-weight:700}.di-h2{font-size:15px;font-weight:600}.di-h3{font-size:13px;font-weight:600}.rte-color{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}.rte-editor{padding:12px;outline:none;overflow-y:auto;box-sizing:border-box;font-size:.875rem;line-height:1.6;color:#1e293b;background:#fff;border-radius:0 0 8px 8px;word-break:break-word}.rte-editor[data-empty=true]:before{content:attr(data-placeholder);color:#94a3b8;pointer-events:none;float:left;height:0}.rte-editor ul,.rte-editor ol{padding-left:1.5em;margin:.25em 0}.rte-editor li{margin:.15em 0}.rte-editor h1{font-size:1.75em;font-weight:700;margin:.5em 0 .25em}.rte-editor h2{font-size:1.4em;font-weight:600;margin:.5em 0 .25em}.rte-editor h3{font-size:1.15em;font-weight:600;margin:.5em 0 .25em}.rte-editor a{color:#2563eb;text-decoration:underline}.rte-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.rte-desc-error{color:#ef4444}@media(max-width:480px){.rte-editor{font-size:1rem}}@media(pointer:coarse),(max-width:480px){.rte-btn{width:44px;height:44px}.rte-menu-btn{width:auto;min-width:44px}.rte-divider{height:28px}}\n"],
31265
+ styles: [":host{display:block}.rte-field{display:flex;flex-direction:column;gap:6px}.rte-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.rte-required{color:#dc2626;margin-left:2px}.rte-hint-inline{font-size:.75rem;color:#94a3b8;font-weight:400;margin-left:4px}.rte-box{border:1px solid #e2e8f0;border-radius:8px;background:#fff;transition:border-color .15s,box-shadow .15s}.rte-box:focus-within{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.rte-error .rte-box{border-color:#ef4444}.rte-error .rte-box:focus-within{box-shadow:0 0 0 3px #ef44441f}.rte-disabled .rte-box{opacity:.5;cursor:not-allowed}.rte-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:2px;padding:6px 8px;background:#f8fafc;border-bottom:1px solid #e2e8f0;border-radius:8px 8px 0 0}.rte-divider{width:1px;height:20px;background:#cbd5e1;margin:0 4px}.rte-btn{position:relative;display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border:none;border-radius:4px;background:none;color:#64748b;cursor:pointer;transition:background .15s,color .15s}.rte-btn svg{width:16px;height:16px}.rte-btn:hover:not(:disabled){background:#e2e8f0;color:#1e293b}.rte-btn:focus-visible,.rte-btn:focus-within{outline:2px solid #3b82f6;outline-offset:1px}.rte-btn.active{background:#dbeafe;color:#2563eb}.rte-btn:disabled,.rte-btn-disabled{cursor:not-allowed;opacity:.5}.rte-menu-wrap{position:relative;display:inline-flex}.rte-menu-btn{width:auto;padding:0 6px;gap:3px}.rte-menu-btn .rte-chevron{width:10px;height:10px;color:#94a3b8;flex-shrink:0}.rte-dropdown{position:absolute;top:calc(100% + 4px);left:0;z-index:100;background:#fff;border:1px solid #e2e8f0;border-radius:6px;box-shadow:0 4px 12px #0000001f;padding:4px;overflow-y:auto;max-height:260px}.rte-font-panel{min-width:180px}.rte-item{display:block;width:100%;text-align:left;padding:5px 10px;font-size:12px;color:#374151;border:none;background:none;border-radius:4px;cursor:pointer;white-space:nowrap}.rte-item:hover{background:#f1f5f9}.rte-item.selected{background:#dbeafe;color:#2563eb;font-weight:600}.rte-group-label{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:#94a3b8;padding:6px 10px 2px}.di-h1{font-size:18px;font-weight:700}.di-h2{font-size:15px;font-weight:600}.di-h3{font-size:13px;font-weight:600}.rte-color{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}.rte-editor{padding:12px;outline:none;overflow-y:auto;box-sizing:border-box;font-size:.875rem;line-height:1.6;color:#1e293b;background:#fff;border-radius:0 0 8px 8px;word-break:break-word}.rte-editor[data-empty=true]:before{content:attr(data-placeholder);color:#94a3b8;pointer-events:none;float:left;height:0}.rte-editor ul,.rte-editor ol{padding-left:1.5em;margin:.25em 0}.rte-editor li{margin:.15em 0}.rte-editor h1{font-size:1.75em;font-weight:700;margin:.5em 0 .25em}.rte-editor h2{font-size:1.4em;font-weight:600;margin:.5em 0 .25em}.rte-editor h3{font-size:1.15em;font-weight:600;margin:.5em 0 .25em}.rte-editor a{color:#2563eb;text-decoration:underline}.rte-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.rte-desc-error{color:#dc2626}@media(max-width:480px){.rte-editor{font-size:1rem}}@media(pointer:coarse),(max-width:480px){.rte-btn{width:44px;height:44px}.rte-menu-btn{width:auto;min-width:44px}.rte-divider{height:28px}}\n"],
30351
31266
  changeDetection: i0.ChangeDetectionStrategy.OnPush
30352
31267
  });
30353
31268
  }
@@ -30584,7 +31499,7 @@ i0.ɵɵngDeclareClassMetadata({
30584
31499
  }
30585
31500
  </div>
30586
31501
  `,
30587
- styles: [":host{display:block}.rte-field{display:flex;flex-direction:column;gap:6px}.rte-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.rte-required{color:#ef4444;margin-left:2px}.rte-hint-inline{font-size:.75rem;color:#94a3b8;font-weight:400;margin-left:4px}.rte-box{border:1px solid #e2e8f0;border-radius:8px;background:#fff;transition:border-color .15s,box-shadow .15s}.rte-box:focus-within{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.rte-error .rte-box{border-color:#ef4444}.rte-error .rte-box:focus-within{box-shadow:0 0 0 3px #ef44441f}.rte-disabled .rte-box{opacity:.5;cursor:not-allowed}.rte-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:2px;padding:6px 8px;background:#f8fafc;border-bottom:1px solid #e2e8f0;border-radius:8px 8px 0 0}.rte-divider{width:1px;height:20px;background:#cbd5e1;margin:0 4px}.rte-btn{position:relative;display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border:none;border-radius:4px;background:none;color:#64748b;cursor:pointer;transition:background .15s,color .15s}.rte-btn svg{width:16px;height:16px}.rte-btn:hover:not(:disabled){background:#e2e8f0;color:#1e293b}.rte-btn:focus-visible,.rte-btn:focus-within{outline:2px solid #3b82f6;outline-offset:1px}.rte-btn.active{background:#dbeafe;color:#2563eb}.rte-btn:disabled,.rte-btn-disabled{cursor:not-allowed;opacity:.5}.rte-menu-wrap{position:relative;display:inline-flex}.rte-menu-btn{width:auto;padding:0 6px;gap:3px}.rte-menu-btn .rte-chevron{width:10px;height:10px;color:#94a3b8;flex-shrink:0}.rte-dropdown{position:absolute;top:calc(100% + 4px);left:0;z-index:100;background:#fff;border:1px solid #e2e8f0;border-radius:6px;box-shadow:0 4px 12px #0000001f;padding:4px;overflow-y:auto;max-height:260px}.rte-font-panel{min-width:180px}.rte-item{display:block;width:100%;text-align:left;padding:5px 10px;font-size:12px;color:#374151;border:none;background:none;border-radius:4px;cursor:pointer;white-space:nowrap}.rte-item:hover{background:#f1f5f9}.rte-item.selected{background:#dbeafe;color:#2563eb;font-weight:600}.rte-group-label{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:#94a3b8;padding:6px 10px 2px}.di-h1{font-size:18px;font-weight:700}.di-h2{font-size:15px;font-weight:600}.di-h3{font-size:13px;font-weight:600}.rte-color{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}.rte-editor{padding:12px;outline:none;overflow-y:auto;box-sizing:border-box;font-size:.875rem;line-height:1.6;color:#1e293b;background:#fff;border-radius:0 0 8px 8px;word-break:break-word}.rte-editor[data-empty=true]:before{content:attr(data-placeholder);color:#94a3b8;pointer-events:none;float:left;height:0}.rte-editor ul,.rte-editor ol{padding-left:1.5em;margin:.25em 0}.rte-editor li{margin:.15em 0}.rte-editor h1{font-size:1.75em;font-weight:700;margin:.5em 0 .25em}.rte-editor h2{font-size:1.4em;font-weight:600;margin:.5em 0 .25em}.rte-editor h3{font-size:1.15em;font-weight:600;margin:.5em 0 .25em}.rte-editor a{color:#2563eb;text-decoration:underline}.rte-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.rte-desc-error{color:#ef4444}@media(max-width:480px){.rte-editor{font-size:1rem}}@media(pointer:coarse),(max-width:480px){.rte-btn{width:44px;height:44px}.rte-menu-btn{width:auto;min-width:44px}.rte-divider{height:28px}}\n"]
31502
+ styles: [":host{display:block}.rte-field{display:flex;flex-direction:column;gap:6px}.rte-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.rte-required{color:#dc2626;margin-left:2px}.rte-hint-inline{font-size:.75rem;color:#94a3b8;font-weight:400;margin-left:4px}.rte-box{border:1px solid #e2e8f0;border-radius:8px;background:#fff;transition:border-color .15s,box-shadow .15s}.rte-box:focus-within{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.rte-error .rte-box{border-color:#ef4444}.rte-error .rte-box:focus-within{box-shadow:0 0 0 3px #ef44441f}.rte-disabled .rte-box{opacity:.5;cursor:not-allowed}.rte-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:2px;padding:6px 8px;background:#f8fafc;border-bottom:1px solid #e2e8f0;border-radius:8px 8px 0 0}.rte-divider{width:1px;height:20px;background:#cbd5e1;margin:0 4px}.rte-btn{position:relative;display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border:none;border-radius:4px;background:none;color:#64748b;cursor:pointer;transition:background .15s,color .15s}.rte-btn svg{width:16px;height:16px}.rte-btn:hover:not(:disabled){background:#e2e8f0;color:#1e293b}.rte-btn:focus-visible,.rte-btn:focus-within{outline:2px solid #3b82f6;outline-offset:1px}.rte-btn.active{background:#dbeafe;color:#2563eb}.rte-btn:disabled,.rte-btn-disabled{cursor:not-allowed;opacity:.5}.rte-menu-wrap{position:relative;display:inline-flex}.rte-menu-btn{width:auto;padding:0 6px;gap:3px}.rte-menu-btn .rte-chevron{width:10px;height:10px;color:#94a3b8;flex-shrink:0}.rte-dropdown{position:absolute;top:calc(100% + 4px);left:0;z-index:100;background:#fff;border:1px solid #e2e8f0;border-radius:6px;box-shadow:0 4px 12px #0000001f;padding:4px;overflow-y:auto;max-height:260px}.rte-font-panel{min-width:180px}.rte-item{display:block;width:100%;text-align:left;padding:5px 10px;font-size:12px;color:#374151;border:none;background:none;border-radius:4px;cursor:pointer;white-space:nowrap}.rte-item:hover{background:#f1f5f9}.rte-item.selected{background:#dbeafe;color:#2563eb;font-weight:600}.rte-group-label{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:#94a3b8;padding:6px 10px 2px}.di-h1{font-size:18px;font-weight:700}.di-h2{font-size:15px;font-weight:600}.di-h3{font-size:13px;font-weight:600}.rte-color{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}.rte-editor{padding:12px;outline:none;overflow-y:auto;box-sizing:border-box;font-size:.875rem;line-height:1.6;color:#1e293b;background:#fff;border-radius:0 0 8px 8px;word-break:break-word}.rte-editor[data-empty=true]:before{content:attr(data-placeholder);color:#94a3b8;pointer-events:none;float:left;height:0}.rte-editor ul,.rte-editor ol{padding-left:1.5em;margin:.25em 0}.rte-editor li{margin:.15em 0}.rte-editor h1{font-size:1.75em;font-weight:700;margin:.5em 0 .25em}.rte-editor h2{font-size:1.4em;font-weight:600;margin:.5em 0 .25em}.rte-editor h3{font-size:1.15em;font-weight:600;margin:.5em 0 .25em}.rte-editor a{color:#2563eb;text-decoration:underline}.rte-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.rte-desc-error{color:#dc2626}@media(max-width:480px){.rte-editor{font-size:1rem}}@media(pointer:coarse),(max-width:480px){.rte-btn{width:44px;height:44px}.rte-menu-btn{width:auto;min-width:44px}.rte-divider{height:28px}}\n"]
30588
31503
  }]
30589
31504
  }],
30590
31505
  ctorParameters: () => [],
@@ -30943,7 +31858,7 @@ var RadioMatrixComponent = class RadioMatrixComponent {
30943
31858
  </fieldset>
30944
31859
  `,
30945
31860
  isInline: true,
30946
- styles: [":host{display:block}.rm-field{display:flex;flex-direction:column;gap:6px;border:0;margin:0;padding:0;min-width:0}.rm-label{padding:0;margin-bottom:6px;font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.rm-required{color:#ef4444;margin-left:2px}.rm-scroll{overflow-x:auto;border:1px solid #e2e8f0;border-radius:8px}.rm-table{width:100%;border-collapse:collapse;font-size:.875rem}.rm-table th,.rm-table td{padding:8px 12px;border-bottom:1px solid #f1f5f9;text-align:left}.rm-table tbody tr:last-child th,.rm-table tbody tr:last-child td{border-bottom:0}.rm-table thead th{position:sticky;top:0;background:#f8fafc;font-size:.75rem;font-weight:600;color:#475569;text-transform:uppercase;letter-spacing:.03em;white-space:nowrap}.rm-col,.rm-cell{text-align:center!important;width:1%;white-space:nowrap}.rm-cell ui-radio{display:inline-block}.rm-row-label{font-weight:500;color:#1e293b}.rm-row:hover{background:#f8fafc}.rm-row-missing .rm-row-label{color:#b91c1c}.rm-disabled .rm-scroll{opacity:.6}.rm-error .rm-scroll{border-color:#ef4444}.rm-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.rm-desc-error{color:#ef4444}@media(max-width:480px){.rm-table th,.rm-table td{padding:6px 8px}.rm-table thead th{font-size:.6875rem}}\n"],
31861
+ styles: [":host{display:block}.rm-field{display:flex;flex-direction:column;gap:6px;border:0;margin:0;padding:0;min-width:0}.rm-label{padding:0;margin-bottom:6px;font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.rm-required{color:#dc2626;margin-left:2px}.rm-scroll{overflow-x:auto;border:1px solid #e2e8f0;border-radius:8px}.rm-table{width:100%;border-collapse:collapse;font-size:.875rem}.rm-table th,.rm-table td{padding:8px 12px;border-bottom:1px solid #f1f5f9;text-align:left}.rm-table tbody tr:last-child th,.rm-table tbody tr:last-child td{border-bottom:0}.rm-table thead th{position:sticky;top:0;background:#f8fafc;font-size:.75rem;font-weight:600;color:#475569;text-transform:uppercase;letter-spacing:.03em;white-space:nowrap}.rm-col,.rm-cell{text-align:center!important;width:1%;white-space:nowrap}.rm-cell ui-radio{display:inline-block}.rm-row-label{font-weight:500;color:#1e293b}.rm-row:hover{background:#f8fafc}.rm-row-missing .rm-row-label{color:#b91c1c}.rm-disabled .rm-scroll{opacity:.6}.rm-error .rm-scroll{border-color:#ef4444}.rm-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.rm-desc-error{color:#dc2626}@media(max-width:480px){.rm-table th,.rm-table td{padding:6px 8px}.rm-table thead th{font-size:.6875rem}}\n"],
30947
31862
  dependencies: [{
30948
31863
  kind: "component",
30949
31864
  type: RadioComponent,
@@ -31051,7 +31966,7 @@ i0.ɵɵngDeclareClassMetadata({
31051
31966
  }
31052
31967
  </fieldset>
31053
31968
  `,
31054
- styles: [":host{display:block}.rm-field{display:flex;flex-direction:column;gap:6px;border:0;margin:0;padding:0;min-width:0}.rm-label{padding:0;margin-bottom:6px;font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.rm-required{color:#ef4444;margin-left:2px}.rm-scroll{overflow-x:auto;border:1px solid #e2e8f0;border-radius:8px}.rm-table{width:100%;border-collapse:collapse;font-size:.875rem}.rm-table th,.rm-table td{padding:8px 12px;border-bottom:1px solid #f1f5f9;text-align:left}.rm-table tbody tr:last-child th,.rm-table tbody tr:last-child td{border-bottom:0}.rm-table thead th{position:sticky;top:0;background:#f8fafc;font-size:.75rem;font-weight:600;color:#475569;text-transform:uppercase;letter-spacing:.03em;white-space:nowrap}.rm-col,.rm-cell{text-align:center!important;width:1%;white-space:nowrap}.rm-cell ui-radio{display:inline-block}.rm-row-label{font-weight:500;color:#1e293b}.rm-row:hover{background:#f8fafc}.rm-row-missing .rm-row-label{color:#b91c1c}.rm-disabled .rm-scroll{opacity:.6}.rm-error .rm-scroll{border-color:#ef4444}.rm-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.rm-desc-error{color:#ef4444}@media(max-width:480px){.rm-table th,.rm-table td{padding:6px 8px}.rm-table thead th{font-size:.6875rem}}\n"]
31969
+ styles: [":host{display:block}.rm-field{display:flex;flex-direction:column;gap:6px;border:0;margin:0;padding:0;min-width:0}.rm-label{padding:0;margin-bottom:6px;font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.rm-required{color:#dc2626;margin-left:2px}.rm-scroll{overflow-x:auto;border:1px solid #e2e8f0;border-radius:8px}.rm-table{width:100%;border-collapse:collapse;font-size:.875rem}.rm-table th,.rm-table td{padding:8px 12px;border-bottom:1px solid #f1f5f9;text-align:left}.rm-table tbody tr:last-child th,.rm-table tbody tr:last-child td{border-bottom:0}.rm-table thead th{position:sticky;top:0;background:#f8fafc;font-size:.75rem;font-weight:600;color:#475569;text-transform:uppercase;letter-spacing:.03em;white-space:nowrap}.rm-col,.rm-cell{text-align:center!important;width:1%;white-space:nowrap}.rm-cell ui-radio{display:inline-block}.rm-row-label{font-weight:500;color:#1e293b}.rm-row:hover{background:#f8fafc}.rm-row-missing .rm-row-label{color:#b91c1c}.rm-disabled .rm-scroll{opacity:.6}.rm-error .rm-scroll{border-color:#ef4444}.rm-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.rm-desc-error{color:#dc2626}@media(max-width:480px){.rm-table th,.rm-table td{padding:6px 8px}.rm-table thead th{font-size:.6875rem}}\n"]
31055
31970
  }]
31056
31971
  }],
31057
31972
  ctorParameters: () => [],
@@ -31616,7 +32531,7 @@ var SignaturePadComponent = class SignaturePadComponent {
31616
32531
  </div>
31617
32532
  `,
31618
32533
  isInline: true,
31619
- styles: [":host{display:block}.sp-field{display:flex;flex-direction:column;gap:6px}.sp-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.sp-pad{position:relative;border:2px solid #d1d5db;border-radius:8px;background:#f9fafb}.sp-error .sp-pad{border-color:#ef4444}.sp-canvas{display:block;width:100%;height:auto;cursor:crosshair;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;touch-action:none;-webkit-tap-highlight-color:transparent;border-radius:6px}.sp-canvas:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.sp-disabled .sp-pad{opacity:.5}.sp-disabled .sp-canvas{cursor:not-allowed}.sp-cursor{position:absolute;width:8px;height:8px;border-radius:9999px;pointer-events:none;background:#2563eb;border:2px solid #fff;box-shadow:0 1px 4px #00000059;transform:translate(-50%,-50%)}.sp-cursor.is-drawing{animation:sp-pulse 1s ease-in-out infinite}@keyframes sp-pulse{50%{opacity:.5}}@media(prefers-reduced-motion:reduce){.sp-cursor.is-drawing{animation:none}}.sp-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.sp-desc-error{color:#ef4444}.sp-sr{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}\n"],
32534
+ styles: [":host{display:block}.sp-field{display:flex;flex-direction:column;gap:6px}.sp-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.sp-pad{position:relative;border:2px solid #d1d5db;border-radius:8px;background:#f9fafb}.sp-error .sp-pad{border-color:#ef4444}.sp-canvas{display:block;width:100%;height:auto;cursor:crosshair;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;touch-action:none;-webkit-tap-highlight-color:transparent;border-radius:6px}.sp-canvas:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.sp-disabled .sp-pad{opacity:.5}.sp-disabled .sp-canvas{cursor:not-allowed}.sp-cursor{position:absolute;width:8px;height:8px;border-radius:9999px;pointer-events:none;background:#2563eb;border:2px solid #fff;box-shadow:0 1px 4px #00000059;transform:translate(-50%,-50%)}.sp-cursor.is-drawing{animation:sp-pulse 1s ease-in-out infinite}@keyframes sp-pulse{50%{opacity:.5}}@media(prefers-reduced-motion:reduce){.sp-cursor.is-drawing{animation:none}}.sp-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.sp-desc-error{color:#dc2626}.sp-sr{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}\n"],
31620
32535
  dependencies: [{
31621
32536
  kind: "component",
31622
32537
  type: ButtonComponent,
@@ -31711,7 +32626,7 @@ i0.ɵɵngDeclareClassMetadata({
31711
32626
  }
31712
32627
  </div>
31713
32628
  `,
31714
- styles: [":host{display:block}.sp-field{display:flex;flex-direction:column;gap:6px}.sp-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.sp-pad{position:relative;border:2px solid #d1d5db;border-radius:8px;background:#f9fafb}.sp-error .sp-pad{border-color:#ef4444}.sp-canvas{display:block;width:100%;height:auto;cursor:crosshair;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;touch-action:none;-webkit-tap-highlight-color:transparent;border-radius:6px}.sp-canvas:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.sp-disabled .sp-pad{opacity:.5}.sp-disabled .sp-canvas{cursor:not-allowed}.sp-cursor{position:absolute;width:8px;height:8px;border-radius:9999px;pointer-events:none;background:#2563eb;border:2px solid #fff;box-shadow:0 1px 4px #00000059;transform:translate(-50%,-50%)}.sp-cursor.is-drawing{animation:sp-pulse 1s ease-in-out infinite}@keyframes sp-pulse{50%{opacity:.5}}@media(prefers-reduced-motion:reduce){.sp-cursor.is-drawing{animation:none}}.sp-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.sp-desc-error{color:#ef4444}.sp-sr{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}\n"]
32629
+ styles: [":host{display:block}.sp-field{display:flex;flex-direction:column;gap:6px}.sp-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.sp-pad{position:relative;border:2px solid #d1d5db;border-radius:8px;background:#f9fafb}.sp-error .sp-pad{border-color:#ef4444}.sp-canvas{display:block;width:100%;height:auto;cursor:crosshair;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;touch-action:none;-webkit-tap-highlight-color:transparent;border-radius:6px}.sp-canvas:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.sp-disabled .sp-pad{opacity:.5}.sp-disabled .sp-canvas{cursor:not-allowed}.sp-cursor{position:absolute;width:8px;height:8px;border-radius:9999px;pointer-events:none;background:#2563eb;border:2px solid #fff;box-shadow:0 1px 4px #00000059;transform:translate(-50%,-50%)}.sp-cursor.is-drawing{animation:sp-pulse 1s ease-in-out infinite}@keyframes sp-pulse{50%{opacity:.5}}@media(prefers-reduced-motion:reduce){.sp-cursor.is-drawing{animation:none}}.sp-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.sp-desc-error{color:#dc2626}.sp-sr{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}\n"]
31715
32630
  }]
31716
32631
  }],
31717
32632
  ctorParameters: () => [],
@@ -33250,7 +34165,7 @@ var ColorInputComponent = class ColorInputComponent {
33250
34165
  </div>
33251
34166
  `,
33252
34167
  isInline: true,
33253
- styles: [":host{display:block}.co-field{display:flex;flex-direction:column;gap:6px}.co-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.co-required{color:#ef4444;margin-left:2px}.co-row{display:flex;align-items:center;gap:8px}.co-swatch{position:relative;flex-shrink:0;width:38px;height:38px;box-sizing:border-box;border:1px solid #e2e8f0;border-radius:8px;overflow:hidden;background:#fff;transition:border-color .15s,box-shadow .15s}.co-swatch:focus-within{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.co-preview{position:absolute;inset:0;display:block}.co-native{position:absolute;inset:0;width:100%;height:100%;margin:0;padding:0;border:0;opacity:0;cursor:pointer;-webkit-appearance:none;appearance:none;background:transparent}.co-native::-webkit-color-swatch-wrapper{padding:0}.co-native::-webkit-color-swatch{border:0;border-radius:0}.co-native::-moz-color-swatch{border:0;border-radius:0}.co-text{flex:1;min-width:0;box-sizing:border-box;padding:9px 12px;font-size:.875rem;font-family:inherit;color:#1e293b;background:#fff;border:1px solid #e2e8f0;border-radius:8px;outline:none;transition:border-color .15s,box-shadow .15s}.co-text::placeholder{color:#94a3b8}.co-text:focus{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.co-presets{display:flex;flex-wrap:wrap;gap:8px}.co-preset{width:28px;height:28px;padding:0;box-sizing:border-box;cursor:pointer;border:1px solid #cbd5e1;border-radius:50%}.co-preset-selected{box-shadow:0 0 0 2px #fff,0 0 0 4px #3b82f6}.co-preset:focus{outline:2px solid #3b82f6;outline-offset:2px}.co-preset:focus:not(:focus-visible){outline:none}.co-error .co-text,.co-error .co-swatch{border-color:#ef4444}.co-error .co-text:focus{box-shadow:0 0 0 3px #ef44441f}.co-disabled .co-text,.co-disabled .co-swatch,.co-disabled .co-preset{opacity:.5;cursor:not-allowed}.co-disabled .co-native{cursor:not-allowed}.co-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.co-desc-error{color:#ef4444}@media(max-width:480px){.co-text{font-size:1rem}}@media(pointer:coarse),(max-width:480px){.co-text{min-height:44px}.co-swatch,.co-preset{width:44px;height:44px}}\n"],
34168
+ styles: [":host{display:block}.co-field{display:flex;flex-direction:column;gap:6px}.co-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.co-required{color:#dc2626;margin-left:2px}.co-row{display:flex;align-items:center;gap:8px}.co-swatch{position:relative;flex-shrink:0;width:38px;height:38px;box-sizing:border-box;border:1px solid #e2e8f0;border-radius:8px;overflow:hidden;background:#fff;transition:border-color .15s,box-shadow .15s}.co-swatch:focus-within{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.co-preview{position:absolute;inset:0;display:block}.co-native{position:absolute;inset:0;width:100%;height:100%;margin:0;padding:0;border:0;opacity:0;cursor:pointer;-webkit-appearance:none;appearance:none;background:transparent}.co-native::-webkit-color-swatch-wrapper{padding:0}.co-native::-webkit-color-swatch{border:0;border-radius:0}.co-native::-moz-color-swatch{border:0;border-radius:0}.co-text{flex:1;min-width:0;box-sizing:border-box;padding:9px 12px;font-size:.875rem;font-family:inherit;color:#1e293b;background:#fff;border:1px solid #e2e8f0;border-radius:8px;outline:none;transition:border-color .15s,box-shadow .15s}.co-text::placeholder{color:#94a3b8}.co-text:focus{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.co-presets{display:flex;flex-wrap:wrap;gap:8px}.co-preset{width:28px;height:28px;padding:0;box-sizing:border-box;cursor:pointer;border:1px solid #cbd5e1;border-radius:50%}.co-preset-selected{box-shadow:0 0 0 2px #fff,0 0 0 4px #3b82f6}.co-preset:focus{outline:2px solid #3b82f6;outline-offset:2px}.co-preset:focus:not(:focus-visible){outline:none}.co-error .co-text,.co-error .co-swatch{border-color:#ef4444}.co-error .co-text:focus{box-shadow:0 0 0 3px #ef44441f}.co-disabled .co-text,.co-disabled .co-swatch,.co-disabled .co-preset{opacity:.5;cursor:not-allowed}.co-disabled .co-native{cursor:not-allowed}.co-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.co-desc-error{color:#dc2626}@media(max-width:480px){.co-text{font-size:1rem}}@media(pointer:coarse),(max-width:480px){.co-text{min-height:44px}.co-swatch,.co-preset{width:44px;height:44px}}\n"],
33254
34169
  changeDetection: i0.ChangeDetectionStrategy.OnPush
33255
34170
  });
33256
34171
  }
@@ -33343,7 +34258,7 @@ i0.ɵɵngDeclareClassMetadata({
33343
34258
  }
33344
34259
  </div>
33345
34260
  `,
33346
- styles: [":host{display:block}.co-field{display:flex;flex-direction:column;gap:6px}.co-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.co-required{color:#ef4444;margin-left:2px}.co-row{display:flex;align-items:center;gap:8px}.co-swatch{position:relative;flex-shrink:0;width:38px;height:38px;box-sizing:border-box;border:1px solid #e2e8f0;border-radius:8px;overflow:hidden;background:#fff;transition:border-color .15s,box-shadow .15s}.co-swatch:focus-within{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.co-preview{position:absolute;inset:0;display:block}.co-native{position:absolute;inset:0;width:100%;height:100%;margin:0;padding:0;border:0;opacity:0;cursor:pointer;-webkit-appearance:none;appearance:none;background:transparent}.co-native::-webkit-color-swatch-wrapper{padding:0}.co-native::-webkit-color-swatch{border:0;border-radius:0}.co-native::-moz-color-swatch{border:0;border-radius:0}.co-text{flex:1;min-width:0;box-sizing:border-box;padding:9px 12px;font-size:.875rem;font-family:inherit;color:#1e293b;background:#fff;border:1px solid #e2e8f0;border-radius:8px;outline:none;transition:border-color .15s,box-shadow .15s}.co-text::placeholder{color:#94a3b8}.co-text:focus{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.co-presets{display:flex;flex-wrap:wrap;gap:8px}.co-preset{width:28px;height:28px;padding:0;box-sizing:border-box;cursor:pointer;border:1px solid #cbd5e1;border-radius:50%}.co-preset-selected{box-shadow:0 0 0 2px #fff,0 0 0 4px #3b82f6}.co-preset:focus{outline:2px solid #3b82f6;outline-offset:2px}.co-preset:focus:not(:focus-visible){outline:none}.co-error .co-text,.co-error .co-swatch{border-color:#ef4444}.co-error .co-text:focus{box-shadow:0 0 0 3px #ef44441f}.co-disabled .co-text,.co-disabled .co-swatch,.co-disabled .co-preset{opacity:.5;cursor:not-allowed}.co-disabled .co-native{cursor:not-allowed}.co-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.co-desc-error{color:#ef4444}@media(max-width:480px){.co-text{font-size:1rem}}@media(pointer:coarse),(max-width:480px){.co-text{min-height:44px}.co-swatch,.co-preset{width:44px;height:44px}}\n"]
34261
+ styles: [":host{display:block}.co-field{display:flex;flex-direction:column;gap:6px}.co-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.co-required{color:#dc2626;margin-left:2px}.co-row{display:flex;align-items:center;gap:8px}.co-swatch{position:relative;flex-shrink:0;width:38px;height:38px;box-sizing:border-box;border:1px solid #e2e8f0;border-radius:8px;overflow:hidden;background:#fff;transition:border-color .15s,box-shadow .15s}.co-swatch:focus-within{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.co-preview{position:absolute;inset:0;display:block}.co-native{position:absolute;inset:0;width:100%;height:100%;margin:0;padding:0;border:0;opacity:0;cursor:pointer;-webkit-appearance:none;appearance:none;background:transparent}.co-native::-webkit-color-swatch-wrapper{padding:0}.co-native::-webkit-color-swatch{border:0;border-radius:0}.co-native::-moz-color-swatch{border:0;border-radius:0}.co-text{flex:1;min-width:0;box-sizing:border-box;padding:9px 12px;font-size:.875rem;font-family:inherit;color:#1e293b;background:#fff;border:1px solid #e2e8f0;border-radius:8px;outline:none;transition:border-color .15s,box-shadow .15s}.co-text::placeholder{color:#94a3b8}.co-text:focus{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.co-presets{display:flex;flex-wrap:wrap;gap:8px}.co-preset{width:28px;height:28px;padding:0;box-sizing:border-box;cursor:pointer;border:1px solid #cbd5e1;border-radius:50%}.co-preset-selected{box-shadow:0 0 0 2px #fff,0 0 0 4px #3b82f6}.co-preset:focus{outline:2px solid #3b82f6;outline-offset:2px}.co-preset:focus:not(:focus-visible){outline:none}.co-error .co-text,.co-error .co-swatch{border-color:#ef4444}.co-error .co-text:focus{box-shadow:0 0 0 3px #ef44441f}.co-disabled .co-text,.co-disabled .co-swatch,.co-disabled .co-preset{opacity:.5;cursor:not-allowed}.co-disabled .co-native{cursor:not-allowed}.co-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.co-desc-error{color:#dc2626}@media(max-width:480px){.co-text{font-size:1rem}}@media(pointer:coarse),(max-width:480px){.co-text{min-height:44px}.co-swatch,.co-preset{width:44px;height:44px}}\n"]
33347
34262
  }]
33348
34263
  }],
33349
34264
  ctorParameters: () => [],
@@ -36419,7 +37334,8 @@ var ImageGalleryDialogComponent = class ImageGalleryDialogComponent {
36419
37334
  "bodyOverflow",
36420
37335
  "dialogTestId",
36421
37336
  "hideClose",
36422
- "closable"
37337
+ "closable",
37338
+ "returnFocusTo"
36423
37339
  ],
36424
37340
  outputs: ["close"]
36425
37341
  },
@@ -36584,6 +37500,6 @@ i0.ɵɵngDeclareClassMetadata({
36584
37500
  }]
36585
37501
  }
36586
37502
  });
36587
- export { ActionBarComponent, AlertComponent, AppShellComponent, AudioPlayerComponent, AvatarComponent, BADGE_VARIANT_STYLES, BadgeComponent, BarRowComponent, BulkMessagePanelComponent, BusinessHoursComponent, ButtonComponent, CalendarComponent, CheckboxComponent, CheckboxTrailingDirective, ChipComponent, ChipGroupComponent, ColorInputComponent, ColumnFilterComponent, ColumnsComponent, ComboboxComponent, ConfirmOutletComponent, ConfirmService, ContactPickerComponent, DROPDOWN_GROUP, DataTableComponent, DateInputComponent, DateRangePickerComponent, DatetimeInputComponent, DetailCardComponent, DiscountSelectorComponent, DividerComponent, DropdownComponent, EmptyStateComponent, ErrorComponent, ErrorStateComponent, FORGEROUTE_CONFIG, FadeComponent, FileInputComponent, FormColSpanDirective, FormComponent, FormRowComponent, FormSectionComponent, HintComponent, IconComponent, ImageComponent, ImageGalleryComponent, ImageGalleryDialogComponent, ImagePreviewComponent, ImageRepositionComponent, ImportExportComponent, KpiCardComponent, LAYOUT_GAP_PX, ListComponent, ListItemComponent, LiveRegionComponent, ModalComponent, MoreMenuComponent, MultiSelectComponent, PHONE_NUMBER_AREA_CODE_LENGTH, PHONE_NUMBER_ZIP_LENGTH, PageComponent, PaginationComponent, PanelInfoListComponent, PdfHotspotComponent, PhoneNumberPickerComponent, PillTabsComponent, ProgressBarComponent, ProgressRingComponent, QrCodeComponent, QuickFilterTabsComponent, RICH_TEXT_OPTIONS, RadioComponent, RadioGroupComponent, RadioMatrixComponent, RadioOptionContentDirective, ReadonlyFieldsetComponent, RichTextEditorComponent, SEMANTIC_BADGE_MAP, SearchInputComponent, SectionHeaderComponent, SelectComponent, ShowComponent, SidePanelComponent, SignaturePadComponent, SkeletonComponent, StackComponent, StarComponent, StepperComponent, TableToolbarComponent, TextComponent, TextInputComponent, TextareaInputComponent, TimeInputComponent, TimelineComponent, ToastComponent, ToastService, ToggleBadgeComponent, ToggleComponent, TooltipDirective, US_STATES, UiFieldValidity, acceptLabel, appShellGroupsStorageKey, autoVariant, buildDefaultSchedule, builtInActionIcon, businessTimeOptions, createFieldReveal, decodeFilterValues, digitsOnly, downloadBlob, encodeFilterValue, encodeFilterValues, errorContextInterceptor, fileMatchesAccept, formatAddress, formatCurrency, formatFileSize, formatIsoDate, formatIsoDateTime, formatTime, getEligibleIds, getEligibleOptions, getErrorMessage, humanReadableMessage, iconPath, isoKey, issueToErrors, maxLengthIssue, normalizeHexColor, parseBizHours, parseIso, parseTime, pluralize, provideForgerouteToast, reorderItems, requiredIssue, resolveLayoutGap, resolvePreset, serializeBizHours };
37503
+ export { ActionBarComponent, AlertComponent, AppShellComponent, AudioPlayerComponent, AvatarComponent, BADGE_VARIANT_STYLES, BadgeComponent, BarRowComponent, BulkMessagePanelComponent, BusinessHoursComponent, ButtonComponent, CalendarComponent, CheckboxComponent, CheckboxTrailingDirective, ChipComponent, ChipGroupComponent, ColorInputComponent, ColumnFilterComponent, ColumnsComponent, ComboboxComponent, ConfirmOutletComponent, ConfirmService, ContactPickerComponent, DEFAULT_PASSWORD_RULES, DROPDOWN_GROUP, DataTableComponent, DateInputComponent, DateRangePickerComponent, DatetimeInputComponent, DetailCardComponent, DiscountSelectorComponent, DividerComponent, DropdownComponent, EmptyStateComponent, ErrorComponent, ErrorStateComponent, FORGEROUTE_CONFIG, FadeComponent, FileInputComponent, FormColSpanDirective, FormComponent, FormRowComponent, FormSectionComponent, HintComponent, IconComponent, ImageComponent, ImageGalleryComponent, ImageGalleryDialogComponent, ImagePreviewComponent, ImageRepositionComponent, ImportExportComponent, KpiCardComponent, LAYOUT_GAP_PX, ListComponent, ListItemComponent, LiveRegionComponent, ModalComponent, MoreMenuComponent, MultiSelectComponent, PHONE_NUMBER_AREA_CODE_LENGTH, PHONE_NUMBER_ZIP_LENGTH, PageComponent, PaginationComponent, PanelInfoListComponent, PasswordRequirementsComponent, PdfHotspotComponent, PhoneNumberPickerComponent, PillTabsComponent, ProgressBarComponent, ProgressRingComponent, QrCodeComponent, QuickFilterTabsComponent, RICH_TEXT_OPTIONS, RadioComponent, RadioGroupComponent, RadioMatrixComponent, RadioOptionContentDirective, ReadonlyFieldsetComponent, RichTextEditorComponent, SEMANTIC_BADGE_MAP, SearchInputComponent, SectionHeaderComponent, SelectComponent, ShowComponent, SidePanelComponent, SignaturePadComponent, SkeletonComponent, StackComponent, StarComponent, StepperComponent, TableToolbarComponent, TextComponent, TextInputComponent, TextareaInputComponent, TimeInputComponent, TimelineComponent, ToastComponent, ToastService, ToggleBadgeComponent, ToggleComponent, TooltipDirective, US_STATES, UiFieldValidity, acceptLabel, appShellGroupsStorageKey, autoVariant, buildDefaultSchedule, builtInActionIcon, businessTimeOptions, createFieldReveal, decodeFilterValues, digitsOnly, downloadBlob, encodeFilterValue, encodeFilterValues, errorContextInterceptor, fileMatchesAccept, formatAddress, formatCurrency, formatFileSize, formatIsoDate, formatIsoDateTime, formatTime, getEligibleIds, getEligibleOptions, getErrorMessage, humanReadableMessage, iconPath, isoKey, issueToErrors, maxLengthIssue, normalizeHexColor, parseBizHours, parseIso, parseTime, passwordMeetsRules, pluralize, provideForgerouteToast, reorderItems, requiredIssue, resolveLayoutGap, resolvePreset, serializeBizHours };
36588
37504
 
36589
37505
  //# sourceMappingURL=forgeroute-ui.mjs.map