@forgeroute/ui 0.4.46 → 0.4.47

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.
@@ -2106,7 +2106,7 @@ var MoreMenuComponent = class MoreMenuComponent {
2106
2106
  </div>
2107
2107
  `,
2108
2108
  isInline: true,
2109
- styles: [":host{display:inline-block;position:relative}.mm-wrapper{position:relative}.mm-trigger{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:8px;border:none;background:transparent;color:#64748b;cursor:pointer;transition:background .1s,color .1s}.mm-trigger:hover{background:#f1f5f9;color:#334155}.mm-trigger:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.mm-dropdown{position:absolute;right:0;top:calc(100% + 4px);z-index:200;border:1px solid #e2e8f0;border-radius:8px;box-shadow:0 4px 16px #0000001a;min-width:160px;overflow-x:hidden;overflow-y:auto;padding:4px;max-width:calc(100vw - 16px);overscroll-behavior:contain;background:linear-gradient(#fff 30%,#fff0) center top / 100% 16px no-repeat local,linear-gradient(#fff0,#fff 70%) center bottom / 100% 16px no-repeat local,radial-gradient(farthest-side at 50% 0,#0f172a38,#0f172a00) center top / 100% 8px no-repeat scroll,radial-gradient(farthest-side at 50% 100%,#0f172a38,#0f172a00) center bottom / 100% 8px no-repeat scroll,#fff}.mm-dropdown.mm-up{top:auto;bottom:calc(100% + 4px)}.mm-dropdown.mm-fixed{position:fixed;left:auto}.mm-item{display:flex;align-items:center;gap:10px;width:100%;padding:10px 12px;background:none;border:none;cursor:pointer;font-size:.875rem;color:#334155;font-family:inherit;text-align:left;border-radius:5px;transition:background .1s;min-height:40px}.mm-item:hover:not(:disabled){background:#f8fafc}.mm-item:disabled{opacity:.4;cursor:default}.mm-item.mm-danger{color:#dc2626}.mm-item.mm-danger:hover:not(:disabled){background:#fef2f2}.mm-item:focus-visible{outline:2px solid #60a5fa;outline-offset:-2px}.mm-icon{flex-shrink:0}@media(max-width:1024px){.mm-trigger{width:36px;height:36px}.mm-item{padding:11px 14px;min-height:40px}}@media(pointer:coarse){.mm-trigger{width:44px;height:44px}}@media(max-width:640px){.mm-trigger{width:44px;height:44px}.mm-item{padding:12px 14px;font-size:.9375rem;min-height:44px}.mm-dropdown{max-height:60vh;overflow-y:auto}}\n"],
2109
+ styles: [":host{display:inline-block;position:relative}.mm-wrapper{position:relative}.mm-trigger{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:8px;border:none;background:transparent;color:#64748b;cursor:pointer;transition:background .1s,color .1s}.mm-trigger:hover{background:#f1f5f9;color:#334155}.mm-trigger:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.mm-dropdown{position:absolute;right:0;top:calc(100% + 4px);z-index:200;border:1px solid #e2e8f0;border-radius:8px;box-shadow:0 4px 16px #0000001a;min-width:160px;width:max-content;overflow-x:hidden;overflow-y:auto;padding:4px;max-width:calc(100vw - 16px);overscroll-behavior:contain;background:linear-gradient(#fff 30%,#fff0) center top / 100% 16px no-repeat local,linear-gradient(#fff0,#fff 70%) center bottom / 100% 16px no-repeat local,radial-gradient(farthest-side at 50% 0,#0f172a38,#0f172a00) center top / 100% 8px no-repeat scroll,radial-gradient(farthest-side at 50% 100%,#0f172a38,#0f172a00) center bottom / 100% 8px no-repeat scroll,#fff}.mm-dropdown.mm-up{top:auto;bottom:calc(100% + 4px)}.mm-dropdown.mm-fixed{position:fixed;left:auto}.mm-item{display:flex;align-items:center;gap:10px;width:100%;padding:10px 12px;background:none;border:none;cursor:pointer;font-size:.875rem;color:#334155;font-family:inherit;text-align:left;border-radius:5px;transition:background .1s;min-height:40px}.mm-item:hover:not(:disabled){background:#f8fafc}.mm-item:disabled{opacity:.4;cursor:default}.mm-item.mm-danger{color:#dc2626}.mm-item.mm-danger:hover:not(:disabled){background:#fef2f2}.mm-item:focus-visible{outline:2px solid #60a5fa;outline-offset:-2px}.mm-icon{flex-shrink:0}@media(max-width:1024px){.mm-trigger{width:36px;height:36px}.mm-item{padding:11px 14px;min-height:40px}}@media(pointer:coarse){.mm-trigger{width:44px;height:44px}}@media(max-width:640px){.mm-trigger{width:44px;height:44px}.mm-item{padding:12px 14px;font-size:.9375rem;min-height:44px}.mm-dropdown{max-height:60vh;overflow-y:auto}}\n"],
2110
2110
  changeDetection: i0.ChangeDetectionStrategy.OnPush
2111
2111
  });
2112
2112
  }
@@ -2161,7 +2161,7 @@ i0.ɵɵngDeclareClassMetadata({
2161
2161
  }
2162
2162
  </div>
2163
2163
  `,
2164
- styles: [":host{display:inline-block;position:relative}.mm-wrapper{position:relative}.mm-trigger{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:8px;border:none;background:transparent;color:#64748b;cursor:pointer;transition:background .1s,color .1s}.mm-trigger:hover{background:#f1f5f9;color:#334155}.mm-trigger:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.mm-dropdown{position:absolute;right:0;top:calc(100% + 4px);z-index:200;border:1px solid #e2e8f0;border-radius:8px;box-shadow:0 4px 16px #0000001a;min-width:160px;overflow-x:hidden;overflow-y:auto;padding:4px;max-width:calc(100vw - 16px);overscroll-behavior:contain;background:linear-gradient(#fff 30%,#fff0) center top / 100% 16px no-repeat local,linear-gradient(#fff0,#fff 70%) center bottom / 100% 16px no-repeat local,radial-gradient(farthest-side at 50% 0,#0f172a38,#0f172a00) center top / 100% 8px no-repeat scroll,radial-gradient(farthest-side at 50% 100%,#0f172a38,#0f172a00) center bottom / 100% 8px no-repeat scroll,#fff}.mm-dropdown.mm-up{top:auto;bottom:calc(100% + 4px)}.mm-dropdown.mm-fixed{position:fixed;left:auto}.mm-item{display:flex;align-items:center;gap:10px;width:100%;padding:10px 12px;background:none;border:none;cursor:pointer;font-size:.875rem;color:#334155;font-family:inherit;text-align:left;border-radius:5px;transition:background .1s;min-height:40px}.mm-item:hover:not(:disabled){background:#f8fafc}.mm-item:disabled{opacity:.4;cursor:default}.mm-item.mm-danger{color:#dc2626}.mm-item.mm-danger:hover:not(:disabled){background:#fef2f2}.mm-item:focus-visible{outline:2px solid #60a5fa;outline-offset:-2px}.mm-icon{flex-shrink:0}@media(max-width:1024px){.mm-trigger{width:36px;height:36px}.mm-item{padding:11px 14px;min-height:40px}}@media(pointer:coarse){.mm-trigger{width:44px;height:44px}}@media(max-width:640px){.mm-trigger{width:44px;height:44px}.mm-item{padding:12px 14px;font-size:.9375rem;min-height:44px}.mm-dropdown{max-height:60vh;overflow-y:auto}}\n"]
2164
+ styles: [":host{display:inline-block;position:relative}.mm-wrapper{position:relative}.mm-trigger{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:8px;border:none;background:transparent;color:#64748b;cursor:pointer;transition:background .1s,color .1s}.mm-trigger:hover{background:#f1f5f9;color:#334155}.mm-trigger:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.mm-dropdown{position:absolute;right:0;top:calc(100% + 4px);z-index:200;border:1px solid #e2e8f0;border-radius:8px;box-shadow:0 4px 16px #0000001a;min-width:160px;width:max-content;overflow-x:hidden;overflow-y:auto;padding:4px;max-width:calc(100vw - 16px);overscroll-behavior:contain;background:linear-gradient(#fff 30%,#fff0) center top / 100% 16px no-repeat local,linear-gradient(#fff0,#fff 70%) center bottom / 100% 16px no-repeat local,radial-gradient(farthest-side at 50% 0,#0f172a38,#0f172a00) center top / 100% 8px no-repeat scroll,radial-gradient(farthest-side at 50% 100%,#0f172a38,#0f172a00) center bottom / 100% 8px no-repeat scroll,#fff}.mm-dropdown.mm-up{top:auto;bottom:calc(100% + 4px)}.mm-dropdown.mm-fixed{position:fixed;left:auto}.mm-item{display:flex;align-items:center;gap:10px;width:100%;padding:10px 12px;background:none;border:none;cursor:pointer;font-size:.875rem;color:#334155;font-family:inherit;text-align:left;border-radius:5px;transition:background .1s;min-height:40px}.mm-item:hover:not(:disabled){background:#f8fafc}.mm-item:disabled{opacity:.4;cursor:default}.mm-item.mm-danger{color:#dc2626}.mm-item.mm-danger:hover:not(:disabled){background:#fef2f2}.mm-item:focus-visible{outline:2px solid #60a5fa;outline-offset:-2px}.mm-icon{flex-shrink:0}@media(max-width:1024px){.mm-trigger{width:36px;height:36px}.mm-item{padding:11px 14px;min-height:40px}}@media(pointer:coarse){.mm-trigger{width:44px;height:44px}}@media(max-width:640px){.mm-trigger{width:44px;height:44px}.mm-item{padding:12px 14px;font-size:.9375rem;min-height:44px}.mm-dropdown{max-height:60vh;overflow-y:auto}}\n"]
2165
2165
  }]
2166
2166
  }],
2167
2167
  ctorParameters: () => [],
@@ -2728,7 +2728,7 @@ var ModalComponent = class ModalComponent {
2728
2728
  }
2729
2729
  `,
2730
2730
  isInline: true,
2731
- 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)}}@media(prefers-reduced-motion:reduce){.m-backdrop,.m-modal{animation:none}}\n"],
2731
+ 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-wrap:wrap;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)}}@media(prefers-reduced-motion:reduce){.m-backdrop,.m-modal{animation:none}}\n"],
2732
2732
  changeDetection: i0.ChangeDetectionStrategy.OnPush
2733
2733
  });
2734
2734
  }
@@ -2777,7 +2777,7 @@ i0.ɵɵngDeclareClassMetadata({
2777
2777
  </div>
2778
2778
  }
2779
2779
  `,
2780
- 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)}}@media(prefers-reduced-motion:reduce){.m-backdrop,.m-modal{animation:none}}\n"]
2780
+ 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-wrap:wrap;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)}}@media(prefers-reduced-motion:reduce){.m-backdrop,.m-modal{animation:none}}\n"]
2781
2781
  }]
2782
2782
  }],
2783
2783
  ctorParameters: () => [],
@@ -5063,6 +5063,10 @@ var TextInputComponent = class TextInputComponent {
5063
5063
  this._typed.set(true);
5064
5064
  const input = event.target;
5065
5065
  const raw = input.value;
5066
+ let caretBefore = null;
5067
+ try {
5068
+ caretBefore = input.selectionStart;
5069
+ } catch {}
5066
5070
  let val = this._formatting() ? TextInputComponent._formatPhone(raw) : raw;
5067
5071
  if (this.integer()) val = val.replace(/[.eE].*$/, "");
5068
5072
  const format = this.formatter();
@@ -5074,11 +5078,28 @@ var TextInputComponent = class TextInputComponent {
5074
5078
  const shown = this._value();
5075
5079
  if (input.value !== shown) {
5076
5080
  input.value = shown;
5081
+ const caret = this._formatting() && !format && caretBefore !== null && caretBefore < raw.length ? TextInputComponent._caretAfterDigits(raw, caretBefore, shown) : shown.length;
5077
5082
  try {
5078
- input.setSelectionRange(shown.length, shown.length);
5083
+ input.setSelectionRange(caret, caret);
5079
5084
  } catch {}
5080
5085
  }
5081
5086
  }
5087
+ static _caretAfterDigits(raw, caret, formatted) {
5088
+ let n = (raw.slice(0, caret).match(/\d/g) ?? []).length;
5089
+ const all = raw.replace(/\D/g, "");
5090
+ if (!raw.startsWith("+") && all.length === 11 && all.startsWith("1")) n = Math.max(0, n - 1);
5091
+ let pos = 0;
5092
+ if (n > 0) {
5093
+ let seen = 0;
5094
+ pos = formatted.length;
5095
+ for (let i = 0; i < formatted.length; i++) if (/\d/.test(formatted[i]) && ++seen === n) {
5096
+ pos = i + 1;
5097
+ break;
5098
+ }
5099
+ }
5100
+ if (caret > 0 && !/\d/.test(raw[caret - 1])) while (pos < formatted.length && !/\d/.test(formatted[pos])) pos++;
5101
+ return pos;
5102
+ }
5082
5103
  static _parse(text) {
5083
5104
  const t = text.trim();
5084
5105
  if (!t) return null;
@@ -5440,7 +5461,7 @@ var TextInputComponent = class TextInputComponent {
5440
5461
  </div>
5441
5462
  `,
5442
5463
  isInline: true,
5443
- styles: [":host{display:block}.ti-field{display:flex;flex-direction:column;gap:6px}.ti-label-row{display:flex;align-items:baseline;justify-content:space-between;gap:8px}.ti-label-row>[uiLabelEnd]{margin-left:auto}.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"],
5464
+ styles: [":host{display:block}.ti-field{display:flex;flex-direction:column;gap:6px}.ti-label-row{display:flex;align-items:baseline;justify-content:space-between;gap:8px}.ti-label-row>[uiLabelEnd]{margin-left:auto}.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(pointer:coarse),(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(pointer:coarse),(max-width:480px){.ti-input{font-size:1rem}}@media(pointer:coarse),(max-width:480px){.ti-input{min-height:44px}}\n"],
5444
5465
  dependencies: [{
5445
5466
  kind: "component",
5446
5467
  type: PasswordRequirementsComponent,
@@ -5541,7 +5562,7 @@ i0.ɵɵngDeclareClassMetadata({
5541
5562
  }
5542
5563
  </div>
5543
5564
  `,
5544
- styles: [":host{display:block}.ti-field{display:flex;flex-direction:column;gap:6px}.ti-label-row{display:flex;align-items:baseline;justify-content:space-between;gap:8px}.ti-label-row>[uiLabelEnd]{margin-left:auto}.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"]
5565
+ styles: [":host{display:block}.ti-field{display:flex;flex-direction:column;gap:6px}.ti-label-row{display:flex;align-items:baseline;justify-content:space-between;gap:8px}.ti-label-row>[uiLabelEnd]{margin-left:auto}.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(pointer:coarse),(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(pointer:coarse),(max-width:480px){.ti-input{font-size:1rem}}@media(pointer:coarse),(max-width:480px){.ti-input{min-height:44px}}\n"]
5545
5566
  }]
5546
5567
  }],
5547
5568
  ctorParameters: () => [],
@@ -7563,7 +7584,7 @@ var SelectComponent = class SelectComponent {
7563
7584
  </div>
7564
7585
  `,
7565
7586
  isInline: true,
7566
- 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"],
7587
+ 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(pointer:coarse),(max-width:480px){.sl-select{font-size:1rem}}@media(pointer:coarse),(max-width:480px){.sl-select,.sl-select-sm{min-height:44px}}\n"],
7567
7588
  changeDetection: i0.ChangeDetectionStrategy.OnPush
7568
7589
  });
7569
7590
  }
@@ -7633,7 +7654,7 @@ i0.ɵɵngDeclareClassMetadata({
7633
7654
  }
7634
7655
  </div>
7635
7656
  `,
7636
- 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"]
7657
+ 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(pointer:coarse),(max-width:480px){.sl-select{font-size:1rem}}@media(pointer:coarse),(max-width:480px){.sl-select,.sl-select-sm{min-height:44px}}\n"]
7637
7658
  }]
7638
7659
  }],
7639
7660
  ctorParameters: () => [],
@@ -9369,10 +9390,16 @@ function exportToCsv(filenamePrefix, headers, rows) {
9369
9390
  const link = document.createElement("a");
9370
9391
  link.href = url;
9371
9392
  link.download = `${filenamePrefix}-${(/* @__PURE__ */ new Date()).toISOString().split("T")[0]}.csv`;
9393
+ link.style.display = "none";
9394
+ document.body.appendChild(link);
9372
9395
  link.click();
9396
+ document.body.removeChild(link);
9373
9397
  setTimeout(() => URL.revokeObjectURL(url), 1e3);
9374
9398
  }
9375
9399
  var ImportExportComponent = class ImportExportComponent {
9400
+ static {
9401
+ this.nextUid = 0;
9402
+ }
9376
9403
  constructor() {
9377
9404
  this._configInput = input(null, {
9378
9405
  ...ngDevMode ? { debugName: "_configInput" } : /* istanbul ignore next */ {},
@@ -9385,6 +9412,8 @@ var ImportExportComponent = class ImportExportComponent {
9385
9412
  this.submit = input(null, ...ngDevMode ? [{ debugName: "submit" }] : /* istanbul ignore next */ []);
9386
9413
  this.finished = output();
9387
9414
  this.imported = output();
9415
+ this.uid = `ie-${++ImportExportComponent.nextUid}`;
9416
+ this.resultBox = viewChild("resultBox", ...ngDevMode ? [{ debugName: "resultBox" }] : /* istanbul ignore next */ []);
9388
9417
  this.http = inject(HttpClient);
9389
9418
  this.apiBase = inject(FORGEROUTE_CONFIG, { optional: true })?.baseUrl ?? "/api";
9390
9419
  this.toast = inject(ToastService);
@@ -9457,6 +9486,32 @@ var ImportExportComponent = class ImportExportComponent {
9457
9486
  result: 3
9458
9487
  }[this.step] ?? 0;
9459
9488
  }
9489
+ get stepItems() {
9490
+ const keys = [
9491
+ ...this.importSources() ? [["source", "Source"]] : [],
9492
+ ["upload", "Upload"],
9493
+ ["mapping", "Map Columns"],
9494
+ ["preview", "Preview"],
9495
+ ["result", "Done"]
9496
+ ];
9497
+ const index = this.stepIndex;
9498
+ return keys.map(([key, label], i) => ({
9499
+ key,
9500
+ num: i + 1,
9501
+ label,
9502
+ current: this.step === key,
9503
+ done: key !== "result" && index > i
9504
+ }));
9505
+ }
9506
+ get resultAnnouncement() {
9507
+ const r = this.step === "result" ? this.importResult : null;
9508
+ if (!r) return "";
9509
+ return [
9510
+ `${r.imported} record(s) imported.`,
9511
+ r.errors.length ? `${r.errors.length} row(s) had errors.` : "",
9512
+ r.warnings.length ? `${r.warnings.length} value(s) changed during import.` : ""
9513
+ ].filter(Boolean).join(" ");
9514
+ }
9460
9515
  get modalTitle() {
9461
9516
  if (this.selectedSource && this.selectedSource !== "custom") {
9462
9517
  const src = this.importSources()?.find((s) => s.value === this.selectedSource);
@@ -9492,6 +9547,7 @@ var ImportExportComponent = class ImportExportComponent {
9492
9547
  this.cdr.detectChanges();
9493
9548
  }
9494
9549
  closeImport() {
9550
+ if (this.importing) return;
9495
9551
  if (this.step === "result") this.finishImport();
9496
9552
  else this.importOpen = false;
9497
9553
  }
@@ -9501,8 +9557,10 @@ var ImportExportComponent = class ImportExportComponent {
9501
9557
  this.imported.emit();
9502
9558
  }
9503
9559
  onFileChange(event) {
9504
- const file = event.target.files?.[0];
9560
+ const input = event.target;
9561
+ const file = input.files?.[0];
9505
9562
  if (!file) return;
9563
+ input.value = "";
9506
9564
  this.readCsvFile(file);
9507
9565
  }
9508
9566
  readCsvFile(file, encoding) {
@@ -9623,6 +9681,9 @@ var ImportExportComponent = class ImportExportComponent {
9623
9681
  return record;
9624
9682
  });
9625
9683
  }
9684
+ focusResult() {
9685
+ this.resultBox()?.nativeElement.focus();
9686
+ }
9626
9687
  stopImportTimer() {
9627
9688
  if (this.importTimer !== null) {
9628
9689
  clearInterval(this.importTimer);
@@ -9665,6 +9726,7 @@ var ImportExportComponent = class ImportExportComponent {
9665
9726
  this.step = "result";
9666
9727
  if (result.imported > 0) this.toast.show(`${result.imported} ${this.config.entityNamePlural.toLowerCase()} imported successfully`);
9667
9728
  this.cdr.detectChanges();
9729
+ this.focusResult();
9668
9730
  },
9669
9731
  error: (err) => {
9670
9732
  this.stopImportTimer();
@@ -9677,6 +9739,7 @@ var ImportExportComponent = class ImportExportComponent {
9677
9739
  };
9678
9740
  this.step = "result";
9679
9741
  this.cdr.detectChanges();
9742
+ this.focusResult();
9680
9743
  return;
9681
9744
  }
9682
9745
  const serverMessage = custom && typeof err?.error?.message === "string" ? err.error.message : "";
@@ -9750,6 +9813,13 @@ var ImportExportComponent = class ImportExportComponent {
9750
9813
  finished: "finished",
9751
9814
  imported: "imported"
9752
9815
  },
9816
+ viewQueries: [{
9817
+ propertyName: "resultBox",
9818
+ first: true,
9819
+ predicate: ["resultBox"],
9820
+ descendants: true,
9821
+ isSignal: true
9822
+ }],
9753
9823
  ngImport: i0,
9754
9824
  template: `
9755
9825
  <!-- Trigger buttons -->
@@ -9767,33 +9837,20 @@ var ImportExportComponent = class ImportExportComponent {
9767
9837
  </div>
9768
9838
 
9769
9839
  <!-- Import modal -->
9770
- <ui-modal [open]="importOpen" [title]="modalTitle" maxWidth="640px" (close)="closeImport()">
9840
+ <ui-modal [open]="importOpen" [title]="modalTitle" maxWidth="640px" [closable]="!importing" (close)="closeImport()">
9771
9841
 
9772
9842
  <!-- Step indicator -->
9773
9843
  <ol class="ie-steps" aria-label="Import progress">
9774
- @if (importSources()) {
9775
- <li class="ie-step" [class.active]="step === 'source'" [class.done]="stepIndex > 0">
9776
- <span class="ie-step-num" aria-hidden="true">1</span><span class="ie-step-label">Source</span>
9844
+ @for (st of stepItems; track st.key) {
9845
+ <li class="ie-step" [class.active]="st.current" [class.done]="st.done" [attr.aria-current]="st.current ? 'step' : null">
9846
+ <span class="ie-step-num" aria-hidden="true">{{ st.num }}</span><span class="ie-step-label">{{ st.label }}</span>@if (st.done) {<span class="ie-sr-only">, completed</span>}@if (st.current) {<span class="ie-sr-only">, current step</span>}
9777
9847
  </li>
9778
- <div class="ie-step-divider" aria-hidden="true"></div>
9779
9848
  }
9780
- <li class="ie-step" [class.active]="step === 'upload'" [class.done]="stepIndex > (importSources() ? 1 : 0)">
9781
- <span class="ie-step-num" aria-hidden="true">{{ importSources() ? 2 : 1 }}</span><span class="ie-step-label">Upload</span>
9782
- </li>
9783
- <div class="ie-step-divider" aria-hidden="true"></div>
9784
- <li class="ie-step" [class.active]="step === 'mapping'" [class.done]="stepIndex > (importSources() ? 2 : 1)">
9785
- <span class="ie-step-num" aria-hidden="true">{{ importSources() ? 3 : 2 }}</span><span class="ie-step-label">Map Columns</span>
9786
- </li>
9787
- <div class="ie-step-divider" aria-hidden="true"></div>
9788
- <li class="ie-step" [class.active]="step === 'preview'" [class.done]="stepIndex > (importSources() ? 3 : 2)">
9789
- <span class="ie-step-num" aria-hidden="true">{{ importSources() ? 4 : 3 }}</span><span class="ie-step-label">Preview</span>
9790
- </li>
9791
- <div class="ie-step-divider" aria-hidden="true"></div>
9792
- <li class="ie-step" [class.active]="step === 'result'">
9793
- <span class="ie-step-num" aria-hidden="true">{{ importSources() ? 5 : 4 }}</span><span class="ie-step-label">Done</span>
9794
- </li>
9795
9849
  </ol>
9796
9850
 
9851
+ <!-- Persistent live region: it exists from the moment the window opens, so the result text it receives later is announced reliably -->
9852
+ <div class="ie-sr-only" role="status" aria-live="polite" aria-atomic="true" data-testid="import-announcement">{{ resultAnnouncement }}</div>
9853
+
9797
9854
  <!-- Step 1: Source selection -->
9798
9855
  @if (step === 'source' && importSources()) {
9799
9856
  <div class="ie-source-step">
@@ -9811,12 +9868,12 @@ var ImportExportComponent = class ImportExportComponent {
9811
9868
  <ui-button variant="ghost" size="sm" data-testid="import-template-button" (click)="downloadTemplate()">{{ config.templateLabel || 'Download template' }}</ui-button>
9812
9869
  </div>
9813
9870
  <label class="ie-dropzone" [class.has-error]="!!fileError">
9814
- <input type="file" class="ie-file-hidden" accept=".csv,text/csv" aria-label="Choose CSV file to import" (change)="onFileChange($event)" />
9871
+ <input type="file" class="ie-file-hidden" accept=".csv,text/csv" aria-label="Choose CSV file to import" [attr.aria-invalid]="fileError ? 'true' : null" [attr.aria-describedby]="fileError ? uid + '-file-error' : null" (change)="onFileChange($event)" />
9815
9872
  <svg width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="#94a3b8" stroke-width="1.5" aria-hidden="true"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="17 8 12 3 7 8"/><line x1="12" y1="3" x2="12" y2="15"/></svg>
9816
9873
  <span class="ie-dropzone-text">Click to choose a CSV file</span>
9817
9874
  <span class="ie-dropzone-sub">Supported: .csv files</span>
9818
9875
  </label>
9819
- @if (fileError) { <p class="ie-error" role="alert">{{ fileError }}</p> }
9876
+ @if (fileError) { <p class="ie-error" role="alert" [id]="uid + '-file-error'">{{ fileError }}</p> }
9820
9877
  </div>
9821
9878
  }
9822
9879
 
@@ -9847,13 +9904,16 @@ var ImportExportComponent = class ImportExportComponent {
9847
9904
  <svg class="ie-match-icon" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" aria-hidden="true"><path d="m20 6-11 11-5-5"/></svg>
9848
9905
  }
9849
9906
  {{ field.label }}
9850
- @if (field.required) { <span class="ie-required" aria-label="required">*</span> }
9907
+ @if (field.required) { <span class="ie-required" aria-hidden="true">*</span> }
9851
9908
  </span>
9852
- <ui-select
9853
- [options]="csvHeaderOptions"
9854
- [(ngModel)]="columnMapping[field.key]"
9855
- [error]="field.required && !columnMapping[field.key] ? 'Required' : ''" />
9856
- <span class="ie-sample" aria-label="Sample value">{{ getSample(field.key) }}</span>
9909
+ <div role="cell">
9910
+ <ui-select
9911
+ [ariaLabel]="field.label + ' column' + (field.required ? ', required' : '')"
9912
+ [options]="csvHeaderOptions"
9913
+ [(ngModel)]="columnMapping[field.key]"
9914
+ [error]="field.required && !columnMapping[field.key] ? 'Required' : ''" />
9915
+ </div>
9916
+ <span class="ie-sample" role="cell">{{ getSample(field.key) }}</span>
9857
9917
  </div>
9858
9918
  }
9859
9919
  </div>
@@ -9871,7 +9931,7 @@ var ImportExportComponent = class ImportExportComponent {
9871
9931
  @if (step === 'preview') {
9872
9932
  <div class="ie-preview">
9873
9933
  <p class="ie-mapping-hint">Preview of the first {{ previewRows.length }} row(s) of {{ csvRows.length }} total. Review before importing.</p>
9874
- <div class="ie-preview-scroll">
9934
+ <div class="ie-preview-scroll" tabindex="0" role="region" aria-label="Import data preview">
9875
9935
  <table class="ie-preview-table" aria-label="Import data preview">
9876
9936
  <thead>
9877
9937
  <tr>@for (field of mappedFields; track field.key) { <th scope="col">{{ field.label }}</th> }</tr>
@@ -9894,7 +9954,7 @@ var ImportExportComponent = class ImportExportComponent {
9894
9954
 
9895
9955
  <!-- Step 5: Result -->
9896
9956
  @if (step === 'result') {
9897
- <div class="ie-result" aria-live="polite">
9957
+ <div class="ie-result" #resultBox tabindex="-1" role="region" aria-label="Import result">
9898
9958
  @if (importResult) {
9899
9959
  <div class="ie-result-summary">
9900
9960
  <div class="ie-result-stat success">
@@ -9916,24 +9976,28 @@ var ImportExportComponent = class ImportExportComponent {
9916
9976
  </div>
9917
9977
  @if (importResult.errors.length > 0) {
9918
9978
  <div class="ie-errors-list">
9919
- <p class="ie-errors-title">Errors:</p>
9920
- @for (err of importResult.errors; track $index) {
9921
- <div class="ie-error-row">
9922
- <span class="ie-error-row-num">Row {{ err.row }}</span>
9923
- <span>{{ err.message }}</span>
9924
- </div>
9925
- }
9979
+ <p class="ie-errors-title" [id]="uid + '-errors-title'">Errors:</p>
9980
+ <ul class="ie-result-list" [attr.aria-labelledby]="uid + '-errors-title'">
9981
+ @for (err of importResult.errors; track $index) {
9982
+ <li class="ie-error-row">
9983
+ <span class="ie-error-row-num">Row {{ err.row }}</span>
9984
+ <span>{{ err.message }}</span>
9985
+ </li>
9986
+ }
9987
+ </ul>
9926
9988
  </div>
9927
9989
  }
9928
9990
  @if (importResult.warnings.length > 0) {
9929
9991
  <div class="ie-warnings-list">
9930
- <p class="ie-warnings-title">Imported with changes:</p>
9931
- @for (w of importResult.warnings; track $index) {
9932
- <div class="ie-warning-row">
9933
- <span class="ie-warning-row-num">Row {{ w.row }}</span>
9934
- <span>{{ w.message }}</span>
9935
- </div>
9936
- }
9992
+ <p class="ie-warnings-title" [id]="uid + '-warnings-title'">Imported with changes:</p>
9993
+ <ul class="ie-result-list" [attr.aria-labelledby]="uid + '-warnings-title'">
9994
+ @for (w of importResult.warnings; track $index) {
9995
+ <li class="ie-warning-row">
9996
+ <span class="ie-warning-row-num">Row {{ w.row }}</span>
9997
+ <span>{{ w.message }}</span>
9998
+ </li>
9999
+ }
10000
+ </ul>
9937
10001
  </div>
9938
10002
  }
9939
10003
  }
@@ -10000,7 +10064,7 @@ var ImportExportComponent = class ImportExportComponent {
10000
10064
  </ui-modal>
10001
10065
  `,
10002
10066
  isInline: true,
10003
- 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:#64748b;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-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:#64748b}.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-progress{margin-top:14px}.ie-progress-track{height:6px;border-radius:999px;background:#e2e8f0;overflow:hidden;position:relative}.ie-progress-bar{position:absolute;inset:0 auto 0 0;width:35%;border-radius:999px;background:#2563eb;animation:ie-progress-slide 1.2s ease-in-out infinite}.ie-progress-text{margin:8px 0 0;font-size:.8125rem;color:#475569}@keyframes ie-progress-slide{0%{left:-35%}to{left:100%}}@media(prefers-reduced-motion:reduce){.ie-progress-bar{animation:none;width:100%;opacity:.5}}.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"],
10067
+ 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:#64748b;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:not(:last-child){flex:1 1 auto}.ie-step:not(:last-child):after{content:\"\";flex:1;height:1px;background:#e2e8f0;margin:0 8px;min-width:16px}.ie-sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;border:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}.ie-source-step{display:flex;flex-direction:column;gap:16px}.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{position:absolute;inset:0;width:100%;height:100%;margin:0;padding:0;opacity:0;overflow:hidden;cursor:pointer}.ie-dropzone{position:relative;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:focus-within{outline:2px solid #3b82f6;outline-offset:2px}.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:#64748b}.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-scroll:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.ie-result:focus{outline:none}.ie-result-list{list-style:none;margin:0;padding:0}.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-progress{margin-top:14px}.ie-progress-track{height:6px;border-radius:999px;background:#e2e8f0;overflow:hidden;position:relative}.ie-progress-bar{position:absolute;inset:0 auto 0 0;width:35%;border-radius:999px;background:#2563eb;animation:ie-progress-slide 1.2s ease-in-out infinite}.ie-progress-text{margin:8px 0 0;font-size:.8125rem;color:#475569}@keyframes ie-progress-slide{0%{left:-35%}to{left:100%}}@media(prefers-reduced-motion:reduce){.ie-progress-bar{animation:none;width:100%;opacity:.5}}.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{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}.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"],
10004
10068
  dependencies: [
10005
10069
  {
10006
10070
  kind: "ngmodule",
@@ -10143,33 +10207,20 @@ i0.ɵɵngDeclareClassMetadata({
10143
10207
  </div>
10144
10208
 
10145
10209
  <!-- Import modal -->
10146
- <ui-modal [open]="importOpen" [title]="modalTitle" maxWidth="640px" (close)="closeImport()">
10210
+ <ui-modal [open]="importOpen" [title]="modalTitle" maxWidth="640px" [closable]="!importing" (close)="closeImport()">
10147
10211
 
10148
10212
  <!-- Step indicator -->
10149
10213
  <ol class="ie-steps" aria-label="Import progress">
10150
- @if (importSources()) {
10151
- <li class="ie-step" [class.active]="step === 'source'" [class.done]="stepIndex > 0">
10152
- <span class="ie-step-num" aria-hidden="true">1</span><span class="ie-step-label">Source</span>
10214
+ @for (st of stepItems; track st.key) {
10215
+ <li class="ie-step" [class.active]="st.current" [class.done]="st.done" [attr.aria-current]="st.current ? 'step' : null">
10216
+ <span class="ie-step-num" aria-hidden="true">{{ st.num }}</span><span class="ie-step-label">{{ st.label }}</span>@if (st.done) {<span class="ie-sr-only">, completed</span>}@if (st.current) {<span class="ie-sr-only">, current step</span>}
10153
10217
  </li>
10154
- <div class="ie-step-divider" aria-hidden="true"></div>
10155
10218
  }
10156
- <li class="ie-step" [class.active]="step === 'upload'" [class.done]="stepIndex > (importSources() ? 1 : 0)">
10157
- <span class="ie-step-num" aria-hidden="true">{{ importSources() ? 2 : 1 }}</span><span class="ie-step-label">Upload</span>
10158
- </li>
10159
- <div class="ie-step-divider" aria-hidden="true"></div>
10160
- <li class="ie-step" [class.active]="step === 'mapping'" [class.done]="stepIndex > (importSources() ? 2 : 1)">
10161
- <span class="ie-step-num" aria-hidden="true">{{ importSources() ? 3 : 2 }}</span><span class="ie-step-label">Map Columns</span>
10162
- </li>
10163
- <div class="ie-step-divider" aria-hidden="true"></div>
10164
- <li class="ie-step" [class.active]="step === 'preview'" [class.done]="stepIndex > (importSources() ? 3 : 2)">
10165
- <span class="ie-step-num" aria-hidden="true">{{ importSources() ? 4 : 3 }}</span><span class="ie-step-label">Preview</span>
10166
- </li>
10167
- <div class="ie-step-divider" aria-hidden="true"></div>
10168
- <li class="ie-step" [class.active]="step === 'result'">
10169
- <span class="ie-step-num" aria-hidden="true">{{ importSources() ? 5 : 4 }}</span><span class="ie-step-label">Done</span>
10170
- </li>
10171
10219
  </ol>
10172
10220
 
10221
+ <!-- Persistent live region: it exists from the moment the window opens, so the result text it receives later is announced reliably -->
10222
+ <div class="ie-sr-only" role="status" aria-live="polite" aria-atomic="true" data-testid="import-announcement">{{ resultAnnouncement }}</div>
10223
+
10173
10224
  <!-- Step 1: Source selection -->
10174
10225
  @if (step === 'source' && importSources()) {
10175
10226
  <div class="ie-source-step">
@@ -10187,12 +10238,12 @@ i0.ɵɵngDeclareClassMetadata({
10187
10238
  <ui-button variant="ghost" size="sm" data-testid="import-template-button" (click)="downloadTemplate()">{{ config.templateLabel || 'Download template' }}</ui-button>
10188
10239
  </div>
10189
10240
  <label class="ie-dropzone" [class.has-error]="!!fileError">
10190
- <input type="file" class="ie-file-hidden" accept=".csv,text/csv" aria-label="Choose CSV file to import" (change)="onFileChange($event)" />
10241
+ <input type="file" class="ie-file-hidden" accept=".csv,text/csv" aria-label="Choose CSV file to import" [attr.aria-invalid]="fileError ? 'true' : null" [attr.aria-describedby]="fileError ? uid + '-file-error' : null" (change)="onFileChange($event)" />
10191
10242
  <svg width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="#94a3b8" stroke-width="1.5" aria-hidden="true"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="17 8 12 3 7 8"/><line x1="12" y1="3" x2="12" y2="15"/></svg>
10192
10243
  <span class="ie-dropzone-text">Click to choose a CSV file</span>
10193
10244
  <span class="ie-dropzone-sub">Supported: .csv files</span>
10194
10245
  </label>
10195
- @if (fileError) { <p class="ie-error" role="alert">{{ fileError }}</p> }
10246
+ @if (fileError) { <p class="ie-error" role="alert" [id]="uid + '-file-error'">{{ fileError }}</p> }
10196
10247
  </div>
10197
10248
  }
10198
10249
 
@@ -10223,13 +10274,16 @@ i0.ɵɵngDeclareClassMetadata({
10223
10274
  <svg class="ie-match-icon" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" aria-hidden="true"><path d="m20 6-11 11-5-5"/></svg>
10224
10275
  }
10225
10276
  {{ field.label }}
10226
- @if (field.required) { <span class="ie-required" aria-label="required">*</span> }
10277
+ @if (field.required) { <span class="ie-required" aria-hidden="true">*</span> }
10227
10278
  </span>
10228
- <ui-select
10229
- [options]="csvHeaderOptions"
10230
- [(ngModel)]="columnMapping[field.key]"
10231
- [error]="field.required && !columnMapping[field.key] ? 'Required' : ''" />
10232
- <span class="ie-sample" aria-label="Sample value">{{ getSample(field.key) }}</span>
10279
+ <div role="cell">
10280
+ <ui-select
10281
+ [ariaLabel]="field.label + ' column' + (field.required ? ', required' : '')"
10282
+ [options]="csvHeaderOptions"
10283
+ [(ngModel)]="columnMapping[field.key]"
10284
+ [error]="field.required && !columnMapping[field.key] ? 'Required' : ''" />
10285
+ </div>
10286
+ <span class="ie-sample" role="cell">{{ getSample(field.key) }}</span>
10233
10287
  </div>
10234
10288
  }
10235
10289
  </div>
@@ -10247,7 +10301,7 @@ i0.ɵɵngDeclareClassMetadata({
10247
10301
  @if (step === 'preview') {
10248
10302
  <div class="ie-preview">
10249
10303
  <p class="ie-mapping-hint">Preview of the first {{ previewRows.length }} row(s) of {{ csvRows.length }} total. Review before importing.</p>
10250
- <div class="ie-preview-scroll">
10304
+ <div class="ie-preview-scroll" tabindex="0" role="region" aria-label="Import data preview">
10251
10305
  <table class="ie-preview-table" aria-label="Import data preview">
10252
10306
  <thead>
10253
10307
  <tr>@for (field of mappedFields; track field.key) { <th scope="col">{{ field.label }}</th> }</tr>
@@ -10270,7 +10324,7 @@ i0.ɵɵngDeclareClassMetadata({
10270
10324
 
10271
10325
  <!-- Step 5: Result -->
10272
10326
  @if (step === 'result') {
10273
- <div class="ie-result" aria-live="polite">
10327
+ <div class="ie-result" #resultBox tabindex="-1" role="region" aria-label="Import result">
10274
10328
  @if (importResult) {
10275
10329
  <div class="ie-result-summary">
10276
10330
  <div class="ie-result-stat success">
@@ -10292,24 +10346,28 @@ i0.ɵɵngDeclareClassMetadata({
10292
10346
  </div>
10293
10347
  @if (importResult.errors.length > 0) {
10294
10348
  <div class="ie-errors-list">
10295
- <p class="ie-errors-title">Errors:</p>
10296
- @for (err of importResult.errors; track $index) {
10297
- <div class="ie-error-row">
10298
- <span class="ie-error-row-num">Row {{ err.row }}</span>
10299
- <span>{{ err.message }}</span>
10300
- </div>
10301
- }
10349
+ <p class="ie-errors-title" [id]="uid + '-errors-title'">Errors:</p>
10350
+ <ul class="ie-result-list" [attr.aria-labelledby]="uid + '-errors-title'">
10351
+ @for (err of importResult.errors; track $index) {
10352
+ <li class="ie-error-row">
10353
+ <span class="ie-error-row-num">Row {{ err.row }}</span>
10354
+ <span>{{ err.message }}</span>
10355
+ </li>
10356
+ }
10357
+ </ul>
10302
10358
  </div>
10303
10359
  }
10304
10360
  @if (importResult.warnings.length > 0) {
10305
10361
  <div class="ie-warnings-list">
10306
- <p class="ie-warnings-title">Imported with changes:</p>
10307
- @for (w of importResult.warnings; track $index) {
10308
- <div class="ie-warning-row">
10309
- <span class="ie-warning-row-num">Row {{ w.row }}</span>
10310
- <span>{{ w.message }}</span>
10311
- </div>
10312
- }
10362
+ <p class="ie-warnings-title" [id]="uid + '-warnings-title'">Imported with changes:</p>
10363
+ <ul class="ie-result-list" [attr.aria-labelledby]="uid + '-warnings-title'">
10364
+ @for (w of importResult.warnings; track $index) {
10365
+ <li class="ie-warning-row">
10366
+ <span class="ie-warning-row-num">Row {{ w.row }}</span>
10367
+ <span>{{ w.message }}</span>
10368
+ </li>
10369
+ }
10370
+ </ul>
10313
10371
  </div>
10314
10372
  }
10315
10373
  }
@@ -10375,7 +10433,7 @@ i0.ɵɵngDeclareClassMetadata({
10375
10433
 
10376
10434
  </ui-modal>
10377
10435
  `,
10378
- 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:#64748b;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-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:#64748b}.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-progress{margin-top:14px}.ie-progress-track{height:6px;border-radius:999px;background:#e2e8f0;overflow:hidden;position:relative}.ie-progress-bar{position:absolute;inset:0 auto 0 0;width:35%;border-radius:999px;background:#2563eb;animation:ie-progress-slide 1.2s ease-in-out infinite}.ie-progress-text{margin:8px 0 0;font-size:.8125rem;color:#475569}@keyframes ie-progress-slide{0%{left:-35%}to{left:100%}}@media(prefers-reduced-motion:reduce){.ie-progress-bar{animation:none;width:100%;opacity:.5}}.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"]
10436
+ 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:#64748b;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:not(:last-child){flex:1 1 auto}.ie-step:not(:last-child):after{content:\"\";flex:1;height:1px;background:#e2e8f0;margin:0 8px;min-width:16px}.ie-sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;border:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}.ie-source-step{display:flex;flex-direction:column;gap:16px}.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{position:absolute;inset:0;width:100%;height:100%;margin:0;padding:0;opacity:0;overflow:hidden;cursor:pointer}.ie-dropzone{position:relative;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:focus-within{outline:2px solid #3b82f6;outline-offset:2px}.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:#64748b}.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-scroll:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.ie-result:focus{outline:none}.ie-result-list{list-style:none;margin:0;padding:0}.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-progress{margin-top:14px}.ie-progress-track{height:6px;border-radius:999px;background:#e2e8f0;overflow:hidden;position:relative}.ie-progress-bar{position:absolute;inset:0 auto 0 0;width:35%;border-radius:999px;background:#2563eb;animation:ie-progress-slide 1.2s ease-in-out infinite}.ie-progress-text{margin:8px 0 0;font-size:.8125rem;color:#475569}@keyframes ie-progress-slide{0%{left:-35%}to{left:100%}}@media(prefers-reduced-motion:reduce){.ie-progress-bar{animation:none;width:100%;opacity:.5}}.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{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}.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"]
10379
10437
  }]
10380
10438
  }],
10381
10439
  ctorParameters: () => [],
@@ -10435,6 +10493,10 @@ i0.ɵɵngDeclareClassMetadata({
10435
10493
  imported: [{
10436
10494
  type: i0.Output,
10437
10495
  args: ["imported"]
10496
+ }],
10497
+ resultBox: [{
10498
+ type: i0.ViewChild,
10499
+ args: ["resultBox", { isSignal: true }]
10438
10500
  }]
10439
10501
  }
10440
10502
  });
@@ -13449,7 +13511,7 @@ var DataTableComponent = class DataTableComponent {
13449
13511
  </div>
13450
13512
  `,
13451
13513
  isInline: true,
13452
- styles: [":host{display:flex;flex-direction:column;flex:1;min-height:0}.dt-host{display:flex;flex-direction:column;height:100%;min-height:0}.dt-header{display:flex;align-items:center;gap:12px;margin-bottom:16px;flex-wrap:wrap;justify-content:space-between;position:relative;z-index:10}.dt-header-left{display:flex;align-items:center;gap:10px;flex-wrap:wrap;flex:1;min-width:0}.dt-header-right{display:flex;align-items:center;gap:8px;flex-shrink:0;flex-wrap:wrap;justify-content:flex-end}.dt-title{margin:0;font-size:.8125rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:#64748b;overflow-wrap:anywhere}.dt-sk-shimmer{position:relative;overflow:hidden;background:#f1f5f9}.dt-sk-shimmer:after{content:\"\";position:absolute;inset:0;background:linear-gradient(90deg,transparent 25%,rgba(255,255,255,.65) 50%,transparent 75%);transform:translate(-100%);animation:dt-shimmer 1.4s ease-in-out infinite}@keyframes dt-shimmer{to{transform:translate(200%)}}.dt-sk-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:16px}.dt-sk-toolbar-left{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.dt-sk-toolbar-right{display:flex;align-items:center;gap:8px;flex-shrink:0}.dt-sk-search{display:flex;align-items:center;gap:10px;width:380px;height:36px;padding:0 12px;border:1px solid #e2e8f0;border-radius:6px;background:#f8fafc;box-sizing:border-box}.dt-sk-search-icon{width:16px;height:16px;border-radius:50%;flex-shrink:0}.dt-sk-search-text{flex:1;height:11px;border-radius:4px}.dt-sk-tab-strip{display:flex;gap:2px;padding:3px;background:#f1f5f9;border-radius:8px}.dt-sk-tab{height:28px;width:70px;border-radius:6px}.dt-sk-icon-btn{width:32px;height:32px;border-radius:6px}.dt-skeleton{border:1px solid #e2e8f0;border-radius:10px;overflow:hidden}.dt-sk-header{display:flex;gap:24px;padding:12px 16px;background:#f8fafc;border-bottom:1px solid #e2e8f0}.dt-sk-row{display:flex;gap:24px;padding:13px 16px;border-bottom:1px solid #f1f5f9}.dt-sk-row:last-child{border-bottom:none}.dt-sk-cell{flex:1;height:13px;border-radius:4px;position:relative;overflow:hidden;background:#f1f5f9}.dt-sk-cell:first-child{max-width:100px}.dt-sk-cell:after{content:\"\";position:absolute;inset:0;background:linear-gradient(90deg,transparent 25%,rgba(255,255,255,.65) 50%,transparent 75%);transform:translate(-100%);animation:dt-shimmer 1.4s ease-in-out infinite}.dt-sk-head{height:10px}.dt-table-wrap{flex:1;min-height:0;overflow:auto;border:1px solid #e2e8f0;border-radius:10px 10px 0 0}.dt-sk-reload-row td{padding:10px 14px;border-bottom:1px solid #f1f5f9}table{width:100%;border-collapse:collapse;font-size:.875rem}thead tr{background:#f8fafc;border-bottom:1px solid #e2e8f0}thead{position:sticky;top:0;z-index:2}th{padding:10px 14px;font-size:.75rem;font-weight:600;color:#64748b;text-transform:uppercase;letter-spacing:.04em;white-space:nowrap;border-right:1px solid #e2e8f0;text-align:center;background:#f8fafc}th:last-child{border-right:none}th.dt-th-sorted{background:#f1f5f9}th.dt-th-actions{width:48px}.dt-th-inner{display:flex;align-items:center;justify-content:center;gap:4px}.dt-sort-btn{display:inline-flex;align-items:center;gap:4px;background:none;border:none;cursor:pointer;font-size:inherit;font-weight:inherit;color:inherit;font-family:inherit;padding:0;text-transform:inherit;letter-spacing:inherit}.dt-sort-btn:hover{color:#1e293b}.dt-sort-btn:focus-visible{outline:2px solid #60a5fa;outline-offset:2px;border-radius:2px}@media(pointer:coarse){.dt-sort-btn{position:relative}.dt-sort-btn:after{content:\"\";position:absolute;left:-4px;right:-4px;top:50%;height:44px;transform:translateY(-50%)}}.dt-sort-icon{transition:transform .15s}.dt-sort-desc{transform:rotate(180deg)}.dt-sort-inactive{opacity:.4}tbody tr{border-bottom:1px solid #f1f5f9;background:#fff;transition:background .1s}tbody tr:last-child{border-bottom:none}tbody tr:hover{background:#f8fafc}.dt-row-clickable{cursor:pointer}.dt-row-clickable:focus-visible{outline:2px solid #3b82f6;outline-offset:-2px}td{padding:10px 14px;color:#334155;vertical-align:middle;white-space:nowrap;border-right:1px solid #f1f5f9}td:last-child{border-right:none}.dt-td-actions{text-align:center;padding:6px 8px}.dt-sticky-actions th.dt-th-actions,.dt-sticky-actions td.dt-td-actions{position:sticky;right:0;box-shadow:-1px 0 #e2e8f0}.dt-sticky-actions th.dt-th-actions{z-index:3;background:#f8fafc}.dt-sticky-actions td.dt-td-actions{z-index:1;background:#fff}.dt-sticky-actions tbody tr:hover td.dt-td-actions{background:#f8fafc}.dt-sticky-actions tbody tr.dt-row-selected td.dt-td-actions{background:#eff6ff}.dt-sticky-actions tbody tr.dt-row-selected:hover td.dt-td-actions{background:#dbeafe}.dt-td-width{overflow:hidden;text-overflow:ellipsis}.dt-img{display:inline-block;vertical-align:middle;object-fit:cover;border:1px solid #e2e8f0;background:#f1f5f9;flex-shrink:0}.dt-img-ph{display:inline-flex;align-items:center;justify-content:center;vertical-align:middle;color:#94a3b8;background:#f1f5f9;border:1px solid #e2e8f0;flex-shrink:0}.dt-img-ph svg{width:55%;height:55%}.dt-img-circle-md{width:40px;height:40px;border-radius:50%}.dt-img-circle-sm{width:28px;height:28px;border-radius:50%}.dt-img-rounded-md{width:48px;height:32px;border-radius:6px}.dt-img-rounded-sm{width:36px;height:24px;border-radius:5px}.dt-avatar-name{display:flex;align-items:center;gap:8px}.dt-name-text{color:#1e293b}.dt-overdue{color:#dc2626;font-weight:500}.dt-none{color:#94a3b8}.dt-link{position:relative;display:inline-block;max-width:100%;padding:1px 2px;vertical-align:bottom;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#2563eb;text-decoration:none;border-radius:3px;cursor:pointer}.dt-link:hover{text-decoration:underline;color:#1d4ed8}.dt-link:focus-visible{outline:2px solid #3b82f6;outline-offset:-2px;text-decoration:underline}.dt-card-detail-value .dt-link,.dt-card-name .dt-link{white-space:normal;overflow-wrap:anywhere}.dt-sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.dt-tags{display:flex;align-items:center;gap:4px}.dt-tags-more{font-size:.75rem;font-weight:600;color:#475569;background:#f1f5f9;border-radius:999px;padding:2px 7px;cursor:default;-webkit-user-select:none;user-select:none;border:1px solid #e2e8f0}.dt-tags-more:focus-visible{outline:2px solid #60a5fa;outline-offset:2px;border-radius:999px}.dt-tag-tooltip{position:fixed;z-index:9999;pointer-events:none;background:#1e293b;border-radius:10px;padding:8px 10px;display:flex;flex-direction:column;gap:5px;box-shadow:0 4px 6px #0000000f,0 10px 24px #00000024;transform:translate(-50%) translateY(-100%);animation:dt-tip-in .12s ease;max-width:220px}@keyframes dt-tip-in{0%{opacity:0;transform:translate(-50%) translateY(calc(-100% + 4px))}to{opacity:1;transform:translate(-50%) translateY(-100%)}}.dt-cell-star{margin-right:6px}.dt-actions-cell{display:flex;align-items:center;justify-content:center}.dt-bulk-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;align-self:flex-start;padding:10px 14px;margin-bottom:8px;background:#eff6ff;border:1px solid #bfdbfe;border-radius:8px}.dt-bulk-count{font-size:.875rem;font-weight:600;color:#1e40af;white-space:nowrap;flex-shrink:0}.dt-bulk-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;flex:1;min-width:0}.dt-bulk-actions ui-select{max-width:180px;min-width:120px}.dt-bulk-hint{font-size:.8125rem;line-height:1.35;color:#475569}.dt-card-cb{display:flex;align-items:center;padding:0 0 6px}.dt-card-selected{background:#eff6ff!important;border-color:#bfdbfe!important}.dt-th-cb{width:44px;padding:0 10px!important;text-align:center!important;border-right:1px solid #e2e8f0;background:#f8fafc}.dt-td-cb{width:44px;padding:0 10px!important;text-align:center!important;border-right:1px solid #f1f5f9}.dt-th-grip{width:36px;padding:0!important;border-right:1px solid #e2e8f0;background:#f8fafc}.dt-td-grip{width:36px;padding:0!important;text-align:center!important;border-right:1px solid #f1f5f9}.dt-grip{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:6px;color:#64748b;cursor:grab;-webkit-user-select:none;user-select:none;touch-action:none}.dt-grip:hover{background:#f1f5f9;color:#334155}.dt-grip:active{cursor:grabbing}.dt-grip:focus-visible{outline:2px solid #3b82f6;outline-offset:1px}.dt-grip-off{color:#cbd5e1;cursor:not-allowed}.dt-grip-off:hover{background:none;color:#cbd5e1}.dt-row-move{display:none}@media(pointer:coarse){.dt-grip{display:none}.dt-row-move{display:inline-flex;flex-direction:column;align-items:center}.dt-th-grip,.dt-td-grip{width:56px}}.dt-row-dragging{opacity:.45}.dt-row-over-before>td{box-shadow:inset 0 2px #3b82f6}.dt-row-over-after>td{box-shadow:inset 0 -2px #3b82f6}.dt-card-move{display:inline-flex;align-items:center;gap:2px;flex-shrink:0}@media(forced-colors:active){.dt-row-over-before>td{box-shadow:inset 0 2px 0 Highlight}.dt-row-over-after>td{box-shadow:inset 0 -2px 0 Highlight}.dt-grip:focus-visible{outline-color:Highlight}}.dt-row-selected{background:#eff6ff!important}.dt-row-selected:hover{background:#dbeafe!important}.dt-state-cell{padding:0!important;border:none!important;background:#fff!important}@media(max-width:1024px){th{padding:10px 12px}td{padding:11px 12px}.dt-sort-btn{padding:4px 0}.dt-td-actions{padding:6px}.dt-bulk-bar{align-self:stretch}}@media(max-width:820px){.dt-header-left{flex-basis:100%}.dt-header-right{flex-basis:100%;justify-content:flex-start}}@media(max-width:768px){th{padding:9px 10px;font-size:.8125rem}td{padding:10px;font-size:.8125rem}.dt-sk-search{width:100%}}@media(max-width:640px){.dt-header{flex-direction:column;flex-wrap:nowrap;flex-shrink:0;align-items:stretch}.dt-header-left,.dt-header-right{width:100%}.dt-table-wrap{display:none}.dt-sk-search{width:100%}.dt-sk-toolbar{flex-direction:column;align-items:stretch;gap:8px}.dt-sk-toolbar-right{align-self:flex-end}.dt-bulk-bar{align-self:stretch;padding:10px 12px;row-gap:8px}.dt-bulk-count{flex:1}.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;--ui-pagination-bg: #f8fafc}.dt-phone-controls{display:flex;flex-direction:column;gap:8px;margin-bottom:8px;flex-shrink:0}.dt-phone-sort{display:flex;align-items:center;gap:8px}.dt-phone-sort-label{font-size:.8125rem;font-weight:600;color:#64748b;flex-shrink:0}.dt-phone-sort-select{flex:1;min-width:0;min-height:44px;box-sizing:border-box;padding:0 36px 0 12px;font-family:inherit;font-size:1rem;color:#1e293b;border:1px solid #e2e8f0;border-radius:8px;-webkit-appearance:none;appearance:none;background:#fff url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8' fill='none' stroke='%2394a3b8' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M1 1.5l5 5 5-5'/%3E%3C/svg%3E\") no-repeat right 12px center}.dt-phone-filters{display:flex;flex-wrap:wrap;gap:8px}.dt-card-list{display:none;flex-direction:column;gap:8px;flex:1;min-height:0;overflow-y:auto}@media(max-width:640px){.dt-card-list{display:flex;padding-bottom:8px}}.dt-card{background:#fff;border:1px solid #e2e8f0;border-radius:10px;contain:layout style;padding:14px 16px;display:flex;flex-direction:column;gap:10px;transition:background .1s}.dt-card:has(.mm-dropdown){position:relative;z-index:1}.dt-card-clickable{cursor:pointer}.dt-card-clickable:active{background:#f8fafc}.dt-card-clickable:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.dt-card-header{display:flex;align-items:center;gap:10px}.dt-card-title{display:flex;align-items:center;gap:10px;flex:1;min-width:0}.dt-card-name{min-width:0;font-weight:600;color:#1e293b;font-size:.9375rem;overflow:hidden;text-overflow:ellipsis;overflow-wrap:anywhere;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;line-clamp:3}.dt-card-name-plain{flex:1}.dt-card-actions{margin-left:auto;flex-shrink:0}.dt-card-badges{display:flex;flex-wrap:wrap;gap:6px}.dt-card-tags{display:flex;flex-wrap:wrap;gap:4px}.dt-card-details{display:flex;flex-direction:column;gap:5px}.dt-card-detail-row{display:flex;justify-content:space-between;align-items:baseline;gap:8px;font-size:.8125rem}.dt-card-detail-label{color:#64748b;flex-shrink:0}.dt-card-detail-value{color:#334155;font-weight:500;text-align:right;min-width:0;overflow-wrap:anywhere;word-break:break-word}.dt-card-sk{gap:12px}.dt-card-sk-header{display:flex;align-items:center;gap:10px}.dt-card-sk-badges{display:flex;gap:6px}.dt-card-sk-rows{display:flex;flex-direction:column;gap:8px}@media(prefers-reduced-motion:reduce){.dt-sk-shimmer:after,.dt-sk-cell:after{animation:none;transform:none;opacity:0}.dt-tag-tooltip{animation:none}.dt-sort-icon{transition:none}}\n"],
13514
+ styles: [":host{display:flex;flex-direction:column;flex:1;min-height:0}.dt-host{display:flex;flex-direction:column;height:100%;min-height:0}.dt-header{display:flex;align-items:center;gap:12px;margin-bottom:16px;flex-wrap:wrap;justify-content:space-between;position:relative;z-index:10}.dt-header-left{display:flex;align-items:center;gap:10px;flex-wrap:wrap;flex:1;min-width:0}.dt-header-right{display:flex;align-items:center;gap:8px;flex-shrink:0;flex-wrap:wrap;justify-content:flex-end}.dt-title{margin:0;font-size:.8125rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:#64748b;overflow-wrap:anywhere}.dt-sk-shimmer{position:relative;overflow:hidden;background:#f1f5f9}.dt-sk-shimmer:after{content:\"\";position:absolute;inset:0;background:linear-gradient(90deg,transparent 25%,rgba(255,255,255,.65) 50%,transparent 75%);transform:translate(-100%);animation:dt-shimmer 1.4s ease-in-out infinite}@keyframes dt-shimmer{to{transform:translate(200%)}}.dt-sk-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:16px}.dt-sk-toolbar-left{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.dt-sk-toolbar-right{display:flex;align-items:center;gap:8px;flex-shrink:0}.dt-sk-search{display:flex;align-items:center;gap:10px;width:380px;height:36px;padding:0 12px;border:1px solid #e2e8f0;border-radius:6px;background:#f8fafc;box-sizing:border-box}.dt-sk-search-icon{width:16px;height:16px;border-radius:50%;flex-shrink:0}.dt-sk-search-text{flex:1;height:11px;border-radius:4px}.dt-sk-tab-strip{display:flex;gap:2px;padding:3px;background:#f1f5f9;border-radius:8px}.dt-sk-tab{height:28px;width:70px;border-radius:6px}.dt-sk-icon-btn{width:32px;height:32px;border-radius:6px}.dt-skeleton{border:1px solid #e2e8f0;border-radius:10px;overflow:hidden}.dt-sk-header{display:flex;gap:24px;padding:12px 16px;background:#f8fafc;border-bottom:1px solid #e2e8f0}.dt-sk-row{display:flex;gap:24px;padding:13px 16px;border-bottom:1px solid #f1f5f9}.dt-sk-row:last-child{border-bottom:none}.dt-sk-cell{flex:1;height:13px;border-radius:4px;position:relative;overflow:hidden;background:#f1f5f9}.dt-sk-cell:first-child{max-width:100px}.dt-sk-cell:after{content:\"\";position:absolute;inset:0;background:linear-gradient(90deg,transparent 25%,rgba(255,255,255,.65) 50%,transparent 75%);transform:translate(-100%);animation:dt-shimmer 1.4s ease-in-out infinite}.dt-sk-head{height:10px}.dt-table-wrap{flex:1;min-height:0;overflow:auto;border:1px solid #e2e8f0;border-radius:10px 10px 0 0}.dt-sk-reload-row td{padding:10px 14px;border-bottom:1px solid #f1f5f9}table{width:100%;border-collapse:collapse;font-size:.875rem}thead tr{background:#f8fafc;border-bottom:1px solid #e2e8f0}thead{position:sticky;top:0;z-index:2}th{padding:10px 14px;font-size:.75rem;font-weight:600;color:#64748b;text-transform:uppercase;letter-spacing:.04em;white-space:nowrap;border-right:1px solid #e2e8f0;text-align:center;background:#f8fafc}th:last-child{border-right:none}th.dt-th-sorted{background:#f1f5f9}th.dt-th-actions{width:48px}.dt-th-inner{display:flex;align-items:center;justify-content:center;gap:4px}.dt-sort-btn{display:inline-flex;align-items:center;gap:4px;background:none;border:none;cursor:pointer;font-size:inherit;font-weight:inherit;color:inherit;font-family:inherit;padding:0;text-transform:inherit;letter-spacing:inherit}.dt-sort-btn:hover{color:#1e293b}.dt-sort-btn:focus-visible{outline:2px solid #60a5fa;outline-offset:2px;border-radius:2px}@media(pointer:coarse){.dt-sort-btn{position:relative}.dt-sort-btn:after{content:\"\";position:absolute;left:-4px;right:-4px;top:50%;height:44px;transform:translateY(-50%)}}.dt-sort-icon{transition:transform .15s}.dt-sort-desc{transform:rotate(180deg)}.dt-sort-inactive{opacity:.4}tbody tr{border-bottom:1px solid #f1f5f9;background:#fff;transition:background .1s}tbody tr:last-child{border-bottom:none}tbody tr:hover{background:#f8fafc}.dt-row-clickable{cursor:pointer}.dt-row-clickable:focus-visible{outline:2px solid #3b82f6;outline-offset:-2px}td{padding:10px 14px;color:#334155;vertical-align:middle;white-space:nowrap;border-right:1px solid #f1f5f9}td:last-child{border-right:none}.dt-td-actions{text-align:center;padding:6px 8px}.dt-sticky-actions th.dt-th-actions,.dt-sticky-actions td.dt-td-actions{position:sticky;right:0;box-shadow:-1px 0 #e2e8f0}.dt-sticky-actions th.dt-th-actions{z-index:3;background:#f8fafc}.dt-sticky-actions td.dt-td-actions{z-index:1;background:#fff}.dt-sticky-actions td.dt-td-actions:focus-within,.dt-sticky-actions td.dt-td-actions:has(.mm-dropdown){z-index:2}.dt-sticky-actions tbody tr:hover td.dt-td-actions{background:#f8fafc}.dt-sticky-actions tbody tr.dt-row-selected td.dt-td-actions{background:#eff6ff}.dt-sticky-actions tbody tr.dt-row-selected:hover td.dt-td-actions{background:#dbeafe}.dt-td-width{overflow:hidden;text-overflow:ellipsis}.dt-img{display:inline-block;vertical-align:middle;object-fit:cover;border:1px solid #e2e8f0;background:#f1f5f9;flex-shrink:0}.dt-img-ph{display:inline-flex;align-items:center;justify-content:center;vertical-align:middle;color:#94a3b8;background:#f1f5f9;border:1px solid #e2e8f0;flex-shrink:0}.dt-img-ph svg{width:55%;height:55%}.dt-img-circle-md{width:40px;height:40px;border-radius:50%}.dt-img-circle-sm{width:28px;height:28px;border-radius:50%}.dt-img-rounded-md{width:48px;height:32px;border-radius:6px}.dt-img-rounded-sm{width:36px;height:24px;border-radius:5px}.dt-avatar-name{display:flex;align-items:center;gap:8px}.dt-name-text{color:#1e293b}.dt-overdue{color:#dc2626;font-weight:500}.dt-none{color:#94a3b8}.dt-link{position:relative;display:inline-block;max-width:100%;padding:1px 2px;vertical-align:bottom;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#2563eb;text-decoration:none;border-radius:3px;cursor:pointer}.dt-link:hover{text-decoration:underline;color:#1d4ed8}.dt-link:focus-visible{outline:2px solid #3b82f6;outline-offset:-2px;text-decoration:underline}.dt-card-detail-value .dt-link,.dt-card-name .dt-link{white-space:normal;overflow-wrap:anywhere}.dt-sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.dt-tags{display:flex;align-items:center;gap:4px}.dt-tags-more{font-size:.75rem;font-weight:600;color:#475569;background:#f1f5f9;border-radius:999px;padding:2px 7px;cursor:default;-webkit-user-select:none;user-select:none;border:1px solid #e2e8f0}.dt-tags-more:focus-visible{outline:2px solid #60a5fa;outline-offset:2px;border-radius:999px}.dt-tag-tooltip{position:fixed;z-index:9999;pointer-events:none;background:#1e293b;border-radius:10px;padding:8px 10px;display:flex;flex-direction:column;gap:5px;box-shadow:0 4px 6px #0000000f,0 10px 24px #00000024;transform:translate(-50%) translateY(-100%);animation:dt-tip-in .12s ease;max-width:220px}@keyframes dt-tip-in{0%{opacity:0;transform:translate(-50%) translateY(calc(-100% + 4px))}to{opacity:1;transform:translate(-50%) translateY(-100%)}}.dt-cell-star{margin-right:6px}.dt-actions-cell{display:flex;align-items:center;justify-content:center}.dt-bulk-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;align-self:flex-start;padding:10px 14px;margin-bottom:8px;background:#eff6ff;border:1px solid #bfdbfe;border-radius:8px}.dt-bulk-count{font-size:.875rem;font-weight:600;color:#1e40af;white-space:nowrap;flex-shrink:0}.dt-bulk-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;flex:1;min-width:0}.dt-bulk-actions ui-select{max-width:180px;min-width:120px}.dt-bulk-hint{font-size:.8125rem;line-height:1.35;color:#475569}.dt-card-cb{display:flex;align-items:center;padding:0 0 6px}.dt-card-selected{background:#eff6ff!important;border-color:#bfdbfe!important}.dt-th-cb{width:44px;padding:0 10px!important;text-align:center!important;border-right:1px solid #e2e8f0;background:#f8fafc}.dt-td-cb{width:44px;padding:0 10px!important;text-align:center!important;border-right:1px solid #f1f5f9}.dt-th-grip{width:36px;padding:0!important;border-right:1px solid #e2e8f0;background:#f8fafc}.dt-td-grip{width:36px;padding:0!important;text-align:center!important;border-right:1px solid #f1f5f9}.dt-grip{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:6px;color:#64748b;cursor:grab;-webkit-user-select:none;user-select:none;touch-action:none}.dt-grip:hover{background:#f1f5f9;color:#334155}.dt-grip:active{cursor:grabbing}.dt-grip:focus-visible{outline:2px solid #3b82f6;outline-offset:1px}.dt-grip-off{color:#cbd5e1;cursor:not-allowed}.dt-grip-off:hover{background:none;color:#cbd5e1}.dt-row-move{display:none}@media(pointer:coarse){.dt-grip{display:none}.dt-row-move{display:inline-flex;flex-direction:column;align-items:center}.dt-th-grip,.dt-td-grip{width:56px}}.dt-row-dragging{opacity:.45}.dt-row-over-before>td{box-shadow:inset 0 2px #3b82f6}.dt-row-over-after>td{box-shadow:inset 0 -2px #3b82f6}.dt-card-move{display:inline-flex;align-items:center;gap:2px;flex-shrink:0}@media(forced-colors:active){.dt-row-over-before>td{box-shadow:inset 0 2px 0 Highlight}.dt-row-over-after>td{box-shadow:inset 0 -2px 0 Highlight}.dt-grip:focus-visible{outline-color:Highlight}}.dt-row-selected{background:#eff6ff!important}.dt-row-selected:hover{background:#dbeafe!important}.dt-state-cell{padding:0!important;border:none!important;background:#fff!important}@media(max-width:1024px){th{padding:10px 12px}td{padding:11px 12px}.dt-sort-btn{padding:4px 0}.dt-td-actions{padding:6px}.dt-bulk-bar{align-self:stretch}}@media(max-width:820px){.dt-header-left{flex-basis:100%}.dt-header-right{flex-basis:100%;justify-content:flex-start}}@media(max-width:768px){th{padding:9px 10px;font-size:.8125rem}td{padding:10px;font-size:.8125rem}.dt-sk-search{width:100%}}@media(max-width:640px){.dt-header{flex-direction:column;flex-wrap:nowrap;flex-shrink:0;align-items:stretch}.dt-header-left,.dt-header-right{width:100%}.dt-table-wrap{display:none}.dt-sk-search{width:100%}.dt-sk-toolbar{flex-direction:column;align-items:stretch;gap:8px}.dt-sk-toolbar-right{align-self:flex-end}.dt-bulk-bar{align-self:stretch;padding:10px 12px;row-gap:8px}.dt-bulk-count{flex:1 1 100%}.dt-bulk-actions{flex:1 1 auto;width:auto}.dt-bulk-hint{flex-basis:100%}.dt-bulk-actions ui-select{max-width:100%;flex:1}}.dt-confirm-msg{margin:0;font-size:.9375rem;color:#334155;line-height:1.5;overflow-wrap:anywhere;word-break:break-word;white-space:pre-line}.dt-confirm-details{margin:10px 0 0;padding-left:20px;font-size:.875rem;color:#64748b;line-height:1.5;overflow-wrap:anywhere;word-break:break-word}.dt-confirm-details li+li{margin-top:4px}ui-pagination{flex-shrink:0;--ui-pagination-bg: #f8fafc}.dt-phone-controls{display:flex;flex-direction:column;gap:8px;margin-bottom:8px;flex-shrink:0}.dt-phone-sort{display:flex;align-items:center;gap:8px}.dt-phone-sort-label{font-size:.8125rem;font-weight:600;color:#64748b;flex-shrink:0}.dt-phone-sort-select{flex:1;min-width:0;min-height:44px;box-sizing:border-box;padding:0 36px 0 12px;font-family:inherit;font-size:1rem;color:#1e293b;border:1px solid #e2e8f0;border-radius:8px;-webkit-appearance:none;appearance:none;background:#fff url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8' fill='none' stroke='%2394a3b8' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M1 1.5l5 5 5-5'/%3E%3C/svg%3E\") no-repeat right 12px center}.dt-phone-filters{display:flex;flex-wrap:wrap;gap:8px}.dt-card-list{display:none;flex-direction:column;gap:8px;flex:1;min-height:0;overflow-y:auto}@media(max-width:640px){.dt-card-list{display:flex;padding-bottom:8px}}.dt-card{background:#fff;border:1px solid #e2e8f0;border-radius:10px;contain:layout style;padding:14px 16px;display:flex;flex-direction:column;gap:10px;transition:background .1s}.dt-card:has(.mm-dropdown){position:relative;z-index:1}.dt-card-clickable{cursor:pointer}.dt-card-clickable:active{background:#f8fafc}.dt-card-clickable:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.dt-card-header{display:flex;align-items:center;gap:10px}.dt-card-title{display:flex;align-items:center;gap:10px;flex:1;min-width:0}.dt-card-name{min-width:0;font-weight:600;color:#1e293b;font-size:.9375rem;overflow:hidden;text-overflow:ellipsis;overflow-wrap:anywhere;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;line-clamp:3}.dt-card-name-plain{flex:1}.dt-card-actions{margin-left:auto;flex-shrink:0}.dt-card-badges{display:flex;flex-wrap:wrap;gap:6px}.dt-card-tags{display:flex;flex-wrap:wrap;gap:4px}.dt-card-details{display:flex;flex-direction:column;gap:5px}.dt-card-detail-row{display:flex;justify-content:space-between;align-items:baseline;gap:8px;font-size:.8125rem}.dt-card-detail-label{color:#64748b;flex-shrink:0}.dt-card-detail-value{color:#334155;font-weight:500;text-align:right;min-width:0;overflow-wrap:anywhere;word-break:break-word}.dt-card-sk{gap:12px}.dt-card-sk-header{display:flex;align-items:center;gap:10px}.dt-card-sk-badges{display:flex;gap:6px}.dt-card-sk-rows{display:flex;flex-direction:column;gap:8px}@media(prefers-reduced-motion:reduce){.dt-sk-shimmer:after,.dt-sk-cell:after{animation:none;transform:none;opacity:0}.dt-tag-tooltip{animation:none}.dt-sort-icon{transition:none}}\n"],
13453
13515
  dependencies: [
13454
13516
  {
13455
13517
  kind: "directive",
@@ -14517,7 +14579,7 @@ i0.ɵɵngDeclareClassMetadata({
14517
14579
  }
14518
14580
  </div>
14519
14581
  `,
14520
- styles: [":host{display:flex;flex-direction:column;flex:1;min-height:0}.dt-host{display:flex;flex-direction:column;height:100%;min-height:0}.dt-header{display:flex;align-items:center;gap:12px;margin-bottom:16px;flex-wrap:wrap;justify-content:space-between;position:relative;z-index:10}.dt-header-left{display:flex;align-items:center;gap:10px;flex-wrap:wrap;flex:1;min-width:0}.dt-header-right{display:flex;align-items:center;gap:8px;flex-shrink:0;flex-wrap:wrap;justify-content:flex-end}.dt-title{margin:0;font-size:.8125rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:#64748b;overflow-wrap:anywhere}.dt-sk-shimmer{position:relative;overflow:hidden;background:#f1f5f9}.dt-sk-shimmer:after{content:\"\";position:absolute;inset:0;background:linear-gradient(90deg,transparent 25%,rgba(255,255,255,.65) 50%,transparent 75%);transform:translate(-100%);animation:dt-shimmer 1.4s ease-in-out infinite}@keyframes dt-shimmer{to{transform:translate(200%)}}.dt-sk-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:16px}.dt-sk-toolbar-left{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.dt-sk-toolbar-right{display:flex;align-items:center;gap:8px;flex-shrink:0}.dt-sk-search{display:flex;align-items:center;gap:10px;width:380px;height:36px;padding:0 12px;border:1px solid #e2e8f0;border-radius:6px;background:#f8fafc;box-sizing:border-box}.dt-sk-search-icon{width:16px;height:16px;border-radius:50%;flex-shrink:0}.dt-sk-search-text{flex:1;height:11px;border-radius:4px}.dt-sk-tab-strip{display:flex;gap:2px;padding:3px;background:#f1f5f9;border-radius:8px}.dt-sk-tab{height:28px;width:70px;border-radius:6px}.dt-sk-icon-btn{width:32px;height:32px;border-radius:6px}.dt-skeleton{border:1px solid #e2e8f0;border-radius:10px;overflow:hidden}.dt-sk-header{display:flex;gap:24px;padding:12px 16px;background:#f8fafc;border-bottom:1px solid #e2e8f0}.dt-sk-row{display:flex;gap:24px;padding:13px 16px;border-bottom:1px solid #f1f5f9}.dt-sk-row:last-child{border-bottom:none}.dt-sk-cell{flex:1;height:13px;border-radius:4px;position:relative;overflow:hidden;background:#f1f5f9}.dt-sk-cell:first-child{max-width:100px}.dt-sk-cell:after{content:\"\";position:absolute;inset:0;background:linear-gradient(90deg,transparent 25%,rgba(255,255,255,.65) 50%,transparent 75%);transform:translate(-100%);animation:dt-shimmer 1.4s ease-in-out infinite}.dt-sk-head{height:10px}.dt-table-wrap{flex:1;min-height:0;overflow:auto;border:1px solid #e2e8f0;border-radius:10px 10px 0 0}.dt-sk-reload-row td{padding:10px 14px;border-bottom:1px solid #f1f5f9}table{width:100%;border-collapse:collapse;font-size:.875rem}thead tr{background:#f8fafc;border-bottom:1px solid #e2e8f0}thead{position:sticky;top:0;z-index:2}th{padding:10px 14px;font-size:.75rem;font-weight:600;color:#64748b;text-transform:uppercase;letter-spacing:.04em;white-space:nowrap;border-right:1px solid #e2e8f0;text-align:center;background:#f8fafc}th:last-child{border-right:none}th.dt-th-sorted{background:#f1f5f9}th.dt-th-actions{width:48px}.dt-th-inner{display:flex;align-items:center;justify-content:center;gap:4px}.dt-sort-btn{display:inline-flex;align-items:center;gap:4px;background:none;border:none;cursor:pointer;font-size:inherit;font-weight:inherit;color:inherit;font-family:inherit;padding:0;text-transform:inherit;letter-spacing:inherit}.dt-sort-btn:hover{color:#1e293b}.dt-sort-btn:focus-visible{outline:2px solid #60a5fa;outline-offset:2px;border-radius:2px}@media(pointer:coarse){.dt-sort-btn{position:relative}.dt-sort-btn:after{content:\"\";position:absolute;left:-4px;right:-4px;top:50%;height:44px;transform:translateY(-50%)}}.dt-sort-icon{transition:transform .15s}.dt-sort-desc{transform:rotate(180deg)}.dt-sort-inactive{opacity:.4}tbody tr{border-bottom:1px solid #f1f5f9;background:#fff;transition:background .1s}tbody tr:last-child{border-bottom:none}tbody tr:hover{background:#f8fafc}.dt-row-clickable{cursor:pointer}.dt-row-clickable:focus-visible{outline:2px solid #3b82f6;outline-offset:-2px}td{padding:10px 14px;color:#334155;vertical-align:middle;white-space:nowrap;border-right:1px solid #f1f5f9}td:last-child{border-right:none}.dt-td-actions{text-align:center;padding:6px 8px}.dt-sticky-actions th.dt-th-actions,.dt-sticky-actions td.dt-td-actions{position:sticky;right:0;box-shadow:-1px 0 #e2e8f0}.dt-sticky-actions th.dt-th-actions{z-index:3;background:#f8fafc}.dt-sticky-actions td.dt-td-actions{z-index:1;background:#fff}.dt-sticky-actions tbody tr:hover td.dt-td-actions{background:#f8fafc}.dt-sticky-actions tbody tr.dt-row-selected td.dt-td-actions{background:#eff6ff}.dt-sticky-actions tbody tr.dt-row-selected:hover td.dt-td-actions{background:#dbeafe}.dt-td-width{overflow:hidden;text-overflow:ellipsis}.dt-img{display:inline-block;vertical-align:middle;object-fit:cover;border:1px solid #e2e8f0;background:#f1f5f9;flex-shrink:0}.dt-img-ph{display:inline-flex;align-items:center;justify-content:center;vertical-align:middle;color:#94a3b8;background:#f1f5f9;border:1px solid #e2e8f0;flex-shrink:0}.dt-img-ph svg{width:55%;height:55%}.dt-img-circle-md{width:40px;height:40px;border-radius:50%}.dt-img-circle-sm{width:28px;height:28px;border-radius:50%}.dt-img-rounded-md{width:48px;height:32px;border-radius:6px}.dt-img-rounded-sm{width:36px;height:24px;border-radius:5px}.dt-avatar-name{display:flex;align-items:center;gap:8px}.dt-name-text{color:#1e293b}.dt-overdue{color:#dc2626;font-weight:500}.dt-none{color:#94a3b8}.dt-link{position:relative;display:inline-block;max-width:100%;padding:1px 2px;vertical-align:bottom;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#2563eb;text-decoration:none;border-radius:3px;cursor:pointer}.dt-link:hover{text-decoration:underline;color:#1d4ed8}.dt-link:focus-visible{outline:2px solid #3b82f6;outline-offset:-2px;text-decoration:underline}.dt-card-detail-value .dt-link,.dt-card-name .dt-link{white-space:normal;overflow-wrap:anywhere}.dt-sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.dt-tags{display:flex;align-items:center;gap:4px}.dt-tags-more{font-size:.75rem;font-weight:600;color:#475569;background:#f1f5f9;border-radius:999px;padding:2px 7px;cursor:default;-webkit-user-select:none;user-select:none;border:1px solid #e2e8f0}.dt-tags-more:focus-visible{outline:2px solid #60a5fa;outline-offset:2px;border-radius:999px}.dt-tag-tooltip{position:fixed;z-index:9999;pointer-events:none;background:#1e293b;border-radius:10px;padding:8px 10px;display:flex;flex-direction:column;gap:5px;box-shadow:0 4px 6px #0000000f,0 10px 24px #00000024;transform:translate(-50%) translateY(-100%);animation:dt-tip-in .12s ease;max-width:220px}@keyframes dt-tip-in{0%{opacity:0;transform:translate(-50%) translateY(calc(-100% + 4px))}to{opacity:1;transform:translate(-50%) translateY(-100%)}}.dt-cell-star{margin-right:6px}.dt-actions-cell{display:flex;align-items:center;justify-content:center}.dt-bulk-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;align-self:flex-start;padding:10px 14px;margin-bottom:8px;background:#eff6ff;border:1px solid #bfdbfe;border-radius:8px}.dt-bulk-count{font-size:.875rem;font-weight:600;color:#1e40af;white-space:nowrap;flex-shrink:0}.dt-bulk-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;flex:1;min-width:0}.dt-bulk-actions ui-select{max-width:180px;min-width:120px}.dt-bulk-hint{font-size:.8125rem;line-height:1.35;color:#475569}.dt-card-cb{display:flex;align-items:center;padding:0 0 6px}.dt-card-selected{background:#eff6ff!important;border-color:#bfdbfe!important}.dt-th-cb{width:44px;padding:0 10px!important;text-align:center!important;border-right:1px solid #e2e8f0;background:#f8fafc}.dt-td-cb{width:44px;padding:0 10px!important;text-align:center!important;border-right:1px solid #f1f5f9}.dt-th-grip{width:36px;padding:0!important;border-right:1px solid #e2e8f0;background:#f8fafc}.dt-td-grip{width:36px;padding:0!important;text-align:center!important;border-right:1px solid #f1f5f9}.dt-grip{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:6px;color:#64748b;cursor:grab;-webkit-user-select:none;user-select:none;touch-action:none}.dt-grip:hover{background:#f1f5f9;color:#334155}.dt-grip:active{cursor:grabbing}.dt-grip:focus-visible{outline:2px solid #3b82f6;outline-offset:1px}.dt-grip-off{color:#cbd5e1;cursor:not-allowed}.dt-grip-off:hover{background:none;color:#cbd5e1}.dt-row-move{display:none}@media(pointer:coarse){.dt-grip{display:none}.dt-row-move{display:inline-flex;flex-direction:column;align-items:center}.dt-th-grip,.dt-td-grip{width:56px}}.dt-row-dragging{opacity:.45}.dt-row-over-before>td{box-shadow:inset 0 2px #3b82f6}.dt-row-over-after>td{box-shadow:inset 0 -2px #3b82f6}.dt-card-move{display:inline-flex;align-items:center;gap:2px;flex-shrink:0}@media(forced-colors:active){.dt-row-over-before>td{box-shadow:inset 0 2px 0 Highlight}.dt-row-over-after>td{box-shadow:inset 0 -2px 0 Highlight}.dt-grip:focus-visible{outline-color:Highlight}}.dt-row-selected{background:#eff6ff!important}.dt-row-selected:hover{background:#dbeafe!important}.dt-state-cell{padding:0!important;border:none!important;background:#fff!important}@media(max-width:1024px){th{padding:10px 12px}td{padding:11px 12px}.dt-sort-btn{padding:4px 0}.dt-td-actions{padding:6px}.dt-bulk-bar{align-self:stretch}}@media(max-width:820px){.dt-header-left{flex-basis:100%}.dt-header-right{flex-basis:100%;justify-content:flex-start}}@media(max-width:768px){th{padding:9px 10px;font-size:.8125rem}td{padding:10px;font-size:.8125rem}.dt-sk-search{width:100%}}@media(max-width:640px){.dt-header{flex-direction:column;flex-wrap:nowrap;flex-shrink:0;align-items:stretch}.dt-header-left,.dt-header-right{width:100%}.dt-table-wrap{display:none}.dt-sk-search{width:100%}.dt-sk-toolbar{flex-direction:column;align-items:stretch;gap:8px}.dt-sk-toolbar-right{align-self:flex-end}.dt-bulk-bar{align-self:stretch;padding:10px 12px;row-gap:8px}.dt-bulk-count{flex:1}.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;--ui-pagination-bg: #f8fafc}.dt-phone-controls{display:flex;flex-direction:column;gap:8px;margin-bottom:8px;flex-shrink:0}.dt-phone-sort{display:flex;align-items:center;gap:8px}.dt-phone-sort-label{font-size:.8125rem;font-weight:600;color:#64748b;flex-shrink:0}.dt-phone-sort-select{flex:1;min-width:0;min-height:44px;box-sizing:border-box;padding:0 36px 0 12px;font-family:inherit;font-size:1rem;color:#1e293b;border:1px solid #e2e8f0;border-radius:8px;-webkit-appearance:none;appearance:none;background:#fff url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8' fill='none' stroke='%2394a3b8' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M1 1.5l5 5 5-5'/%3E%3C/svg%3E\") no-repeat right 12px center}.dt-phone-filters{display:flex;flex-wrap:wrap;gap:8px}.dt-card-list{display:none;flex-direction:column;gap:8px;flex:1;min-height:0;overflow-y:auto}@media(max-width:640px){.dt-card-list{display:flex;padding-bottom:8px}}.dt-card{background:#fff;border:1px solid #e2e8f0;border-radius:10px;contain:layout style;padding:14px 16px;display:flex;flex-direction:column;gap:10px;transition:background .1s}.dt-card:has(.mm-dropdown){position:relative;z-index:1}.dt-card-clickable{cursor:pointer}.dt-card-clickable:active{background:#f8fafc}.dt-card-clickable:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.dt-card-header{display:flex;align-items:center;gap:10px}.dt-card-title{display:flex;align-items:center;gap:10px;flex:1;min-width:0}.dt-card-name{min-width:0;font-weight:600;color:#1e293b;font-size:.9375rem;overflow:hidden;text-overflow:ellipsis;overflow-wrap:anywhere;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;line-clamp:3}.dt-card-name-plain{flex:1}.dt-card-actions{margin-left:auto;flex-shrink:0}.dt-card-badges{display:flex;flex-wrap:wrap;gap:6px}.dt-card-tags{display:flex;flex-wrap:wrap;gap:4px}.dt-card-details{display:flex;flex-direction:column;gap:5px}.dt-card-detail-row{display:flex;justify-content:space-between;align-items:baseline;gap:8px;font-size:.8125rem}.dt-card-detail-label{color:#64748b;flex-shrink:0}.dt-card-detail-value{color:#334155;font-weight:500;text-align:right;min-width:0;overflow-wrap:anywhere;word-break:break-word}.dt-card-sk{gap:12px}.dt-card-sk-header{display:flex;align-items:center;gap:10px}.dt-card-sk-badges{display:flex;gap:6px}.dt-card-sk-rows{display:flex;flex-direction:column;gap:8px}@media(prefers-reduced-motion:reduce){.dt-sk-shimmer:after,.dt-sk-cell:after{animation:none;transform:none;opacity:0}.dt-tag-tooltip{animation:none}.dt-sort-icon{transition:none}}\n"]
14582
+ styles: [":host{display:flex;flex-direction:column;flex:1;min-height:0}.dt-host{display:flex;flex-direction:column;height:100%;min-height:0}.dt-header{display:flex;align-items:center;gap:12px;margin-bottom:16px;flex-wrap:wrap;justify-content:space-between;position:relative;z-index:10}.dt-header-left{display:flex;align-items:center;gap:10px;flex-wrap:wrap;flex:1;min-width:0}.dt-header-right{display:flex;align-items:center;gap:8px;flex-shrink:0;flex-wrap:wrap;justify-content:flex-end}.dt-title{margin:0;font-size:.8125rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:#64748b;overflow-wrap:anywhere}.dt-sk-shimmer{position:relative;overflow:hidden;background:#f1f5f9}.dt-sk-shimmer:after{content:\"\";position:absolute;inset:0;background:linear-gradient(90deg,transparent 25%,rgba(255,255,255,.65) 50%,transparent 75%);transform:translate(-100%);animation:dt-shimmer 1.4s ease-in-out infinite}@keyframes dt-shimmer{to{transform:translate(200%)}}.dt-sk-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:16px}.dt-sk-toolbar-left{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.dt-sk-toolbar-right{display:flex;align-items:center;gap:8px;flex-shrink:0}.dt-sk-search{display:flex;align-items:center;gap:10px;width:380px;height:36px;padding:0 12px;border:1px solid #e2e8f0;border-radius:6px;background:#f8fafc;box-sizing:border-box}.dt-sk-search-icon{width:16px;height:16px;border-radius:50%;flex-shrink:0}.dt-sk-search-text{flex:1;height:11px;border-radius:4px}.dt-sk-tab-strip{display:flex;gap:2px;padding:3px;background:#f1f5f9;border-radius:8px}.dt-sk-tab{height:28px;width:70px;border-radius:6px}.dt-sk-icon-btn{width:32px;height:32px;border-radius:6px}.dt-skeleton{border:1px solid #e2e8f0;border-radius:10px;overflow:hidden}.dt-sk-header{display:flex;gap:24px;padding:12px 16px;background:#f8fafc;border-bottom:1px solid #e2e8f0}.dt-sk-row{display:flex;gap:24px;padding:13px 16px;border-bottom:1px solid #f1f5f9}.dt-sk-row:last-child{border-bottom:none}.dt-sk-cell{flex:1;height:13px;border-radius:4px;position:relative;overflow:hidden;background:#f1f5f9}.dt-sk-cell:first-child{max-width:100px}.dt-sk-cell:after{content:\"\";position:absolute;inset:0;background:linear-gradient(90deg,transparent 25%,rgba(255,255,255,.65) 50%,transparent 75%);transform:translate(-100%);animation:dt-shimmer 1.4s ease-in-out infinite}.dt-sk-head{height:10px}.dt-table-wrap{flex:1;min-height:0;overflow:auto;border:1px solid #e2e8f0;border-radius:10px 10px 0 0}.dt-sk-reload-row td{padding:10px 14px;border-bottom:1px solid #f1f5f9}table{width:100%;border-collapse:collapse;font-size:.875rem}thead tr{background:#f8fafc;border-bottom:1px solid #e2e8f0}thead{position:sticky;top:0;z-index:2}th{padding:10px 14px;font-size:.75rem;font-weight:600;color:#64748b;text-transform:uppercase;letter-spacing:.04em;white-space:nowrap;border-right:1px solid #e2e8f0;text-align:center;background:#f8fafc}th:last-child{border-right:none}th.dt-th-sorted{background:#f1f5f9}th.dt-th-actions{width:48px}.dt-th-inner{display:flex;align-items:center;justify-content:center;gap:4px}.dt-sort-btn{display:inline-flex;align-items:center;gap:4px;background:none;border:none;cursor:pointer;font-size:inherit;font-weight:inherit;color:inherit;font-family:inherit;padding:0;text-transform:inherit;letter-spacing:inherit}.dt-sort-btn:hover{color:#1e293b}.dt-sort-btn:focus-visible{outline:2px solid #60a5fa;outline-offset:2px;border-radius:2px}@media(pointer:coarse){.dt-sort-btn{position:relative}.dt-sort-btn:after{content:\"\";position:absolute;left:-4px;right:-4px;top:50%;height:44px;transform:translateY(-50%)}}.dt-sort-icon{transition:transform .15s}.dt-sort-desc{transform:rotate(180deg)}.dt-sort-inactive{opacity:.4}tbody tr{border-bottom:1px solid #f1f5f9;background:#fff;transition:background .1s}tbody tr:last-child{border-bottom:none}tbody tr:hover{background:#f8fafc}.dt-row-clickable{cursor:pointer}.dt-row-clickable:focus-visible{outline:2px solid #3b82f6;outline-offset:-2px}td{padding:10px 14px;color:#334155;vertical-align:middle;white-space:nowrap;border-right:1px solid #f1f5f9}td:last-child{border-right:none}.dt-td-actions{text-align:center;padding:6px 8px}.dt-sticky-actions th.dt-th-actions,.dt-sticky-actions td.dt-td-actions{position:sticky;right:0;box-shadow:-1px 0 #e2e8f0}.dt-sticky-actions th.dt-th-actions{z-index:3;background:#f8fafc}.dt-sticky-actions td.dt-td-actions{z-index:1;background:#fff}.dt-sticky-actions td.dt-td-actions:focus-within,.dt-sticky-actions td.dt-td-actions:has(.mm-dropdown){z-index:2}.dt-sticky-actions tbody tr:hover td.dt-td-actions{background:#f8fafc}.dt-sticky-actions tbody tr.dt-row-selected td.dt-td-actions{background:#eff6ff}.dt-sticky-actions tbody tr.dt-row-selected:hover td.dt-td-actions{background:#dbeafe}.dt-td-width{overflow:hidden;text-overflow:ellipsis}.dt-img{display:inline-block;vertical-align:middle;object-fit:cover;border:1px solid #e2e8f0;background:#f1f5f9;flex-shrink:0}.dt-img-ph{display:inline-flex;align-items:center;justify-content:center;vertical-align:middle;color:#94a3b8;background:#f1f5f9;border:1px solid #e2e8f0;flex-shrink:0}.dt-img-ph svg{width:55%;height:55%}.dt-img-circle-md{width:40px;height:40px;border-radius:50%}.dt-img-circle-sm{width:28px;height:28px;border-radius:50%}.dt-img-rounded-md{width:48px;height:32px;border-radius:6px}.dt-img-rounded-sm{width:36px;height:24px;border-radius:5px}.dt-avatar-name{display:flex;align-items:center;gap:8px}.dt-name-text{color:#1e293b}.dt-overdue{color:#dc2626;font-weight:500}.dt-none{color:#94a3b8}.dt-link{position:relative;display:inline-block;max-width:100%;padding:1px 2px;vertical-align:bottom;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#2563eb;text-decoration:none;border-radius:3px;cursor:pointer}.dt-link:hover{text-decoration:underline;color:#1d4ed8}.dt-link:focus-visible{outline:2px solid #3b82f6;outline-offset:-2px;text-decoration:underline}.dt-card-detail-value .dt-link,.dt-card-name .dt-link{white-space:normal;overflow-wrap:anywhere}.dt-sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.dt-tags{display:flex;align-items:center;gap:4px}.dt-tags-more{font-size:.75rem;font-weight:600;color:#475569;background:#f1f5f9;border-radius:999px;padding:2px 7px;cursor:default;-webkit-user-select:none;user-select:none;border:1px solid #e2e8f0}.dt-tags-more:focus-visible{outline:2px solid #60a5fa;outline-offset:2px;border-radius:999px}.dt-tag-tooltip{position:fixed;z-index:9999;pointer-events:none;background:#1e293b;border-radius:10px;padding:8px 10px;display:flex;flex-direction:column;gap:5px;box-shadow:0 4px 6px #0000000f,0 10px 24px #00000024;transform:translate(-50%) translateY(-100%);animation:dt-tip-in .12s ease;max-width:220px}@keyframes dt-tip-in{0%{opacity:0;transform:translate(-50%) translateY(calc(-100% + 4px))}to{opacity:1;transform:translate(-50%) translateY(-100%)}}.dt-cell-star{margin-right:6px}.dt-actions-cell{display:flex;align-items:center;justify-content:center}.dt-bulk-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;align-self:flex-start;padding:10px 14px;margin-bottom:8px;background:#eff6ff;border:1px solid #bfdbfe;border-radius:8px}.dt-bulk-count{font-size:.875rem;font-weight:600;color:#1e40af;white-space:nowrap;flex-shrink:0}.dt-bulk-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;flex:1;min-width:0}.dt-bulk-actions ui-select{max-width:180px;min-width:120px}.dt-bulk-hint{font-size:.8125rem;line-height:1.35;color:#475569}.dt-card-cb{display:flex;align-items:center;padding:0 0 6px}.dt-card-selected{background:#eff6ff!important;border-color:#bfdbfe!important}.dt-th-cb{width:44px;padding:0 10px!important;text-align:center!important;border-right:1px solid #e2e8f0;background:#f8fafc}.dt-td-cb{width:44px;padding:0 10px!important;text-align:center!important;border-right:1px solid #f1f5f9}.dt-th-grip{width:36px;padding:0!important;border-right:1px solid #e2e8f0;background:#f8fafc}.dt-td-grip{width:36px;padding:0!important;text-align:center!important;border-right:1px solid #f1f5f9}.dt-grip{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:6px;color:#64748b;cursor:grab;-webkit-user-select:none;user-select:none;touch-action:none}.dt-grip:hover{background:#f1f5f9;color:#334155}.dt-grip:active{cursor:grabbing}.dt-grip:focus-visible{outline:2px solid #3b82f6;outline-offset:1px}.dt-grip-off{color:#cbd5e1;cursor:not-allowed}.dt-grip-off:hover{background:none;color:#cbd5e1}.dt-row-move{display:none}@media(pointer:coarse){.dt-grip{display:none}.dt-row-move{display:inline-flex;flex-direction:column;align-items:center}.dt-th-grip,.dt-td-grip{width:56px}}.dt-row-dragging{opacity:.45}.dt-row-over-before>td{box-shadow:inset 0 2px #3b82f6}.dt-row-over-after>td{box-shadow:inset 0 -2px #3b82f6}.dt-card-move{display:inline-flex;align-items:center;gap:2px;flex-shrink:0}@media(forced-colors:active){.dt-row-over-before>td{box-shadow:inset 0 2px 0 Highlight}.dt-row-over-after>td{box-shadow:inset 0 -2px 0 Highlight}.dt-grip:focus-visible{outline-color:Highlight}}.dt-row-selected{background:#eff6ff!important}.dt-row-selected:hover{background:#dbeafe!important}.dt-state-cell{padding:0!important;border:none!important;background:#fff!important}@media(max-width:1024px){th{padding:10px 12px}td{padding:11px 12px}.dt-sort-btn{padding:4px 0}.dt-td-actions{padding:6px}.dt-bulk-bar{align-self:stretch}}@media(max-width:820px){.dt-header-left{flex-basis:100%}.dt-header-right{flex-basis:100%;justify-content:flex-start}}@media(max-width:768px){th{padding:9px 10px;font-size:.8125rem}td{padding:10px;font-size:.8125rem}.dt-sk-search{width:100%}}@media(max-width:640px){.dt-header{flex-direction:column;flex-wrap:nowrap;flex-shrink:0;align-items:stretch}.dt-header-left,.dt-header-right{width:100%}.dt-table-wrap{display:none}.dt-sk-search{width:100%}.dt-sk-toolbar{flex-direction:column;align-items:stretch;gap:8px}.dt-sk-toolbar-right{align-self:flex-end}.dt-bulk-bar{align-self:stretch;padding:10px 12px;row-gap:8px}.dt-bulk-count{flex:1 1 100%}.dt-bulk-actions{flex:1 1 auto;width:auto}.dt-bulk-hint{flex-basis:100%}.dt-bulk-actions ui-select{max-width:100%;flex:1}}.dt-confirm-msg{margin:0;font-size:.9375rem;color:#334155;line-height:1.5;overflow-wrap:anywhere;word-break:break-word;white-space:pre-line}.dt-confirm-details{margin:10px 0 0;padding-left:20px;font-size:.875rem;color:#64748b;line-height:1.5;overflow-wrap:anywhere;word-break:break-word}.dt-confirm-details li+li{margin-top:4px}ui-pagination{flex-shrink:0;--ui-pagination-bg: #f8fafc}.dt-phone-controls{display:flex;flex-direction:column;gap:8px;margin-bottom:8px;flex-shrink:0}.dt-phone-sort{display:flex;align-items:center;gap:8px}.dt-phone-sort-label{font-size:.8125rem;font-weight:600;color:#64748b;flex-shrink:0}.dt-phone-sort-select{flex:1;min-width:0;min-height:44px;box-sizing:border-box;padding:0 36px 0 12px;font-family:inherit;font-size:1rem;color:#1e293b;border:1px solid #e2e8f0;border-radius:8px;-webkit-appearance:none;appearance:none;background:#fff url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8' fill='none' stroke='%2394a3b8' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M1 1.5l5 5 5-5'/%3E%3C/svg%3E\") no-repeat right 12px center}.dt-phone-filters{display:flex;flex-wrap:wrap;gap:8px}.dt-card-list{display:none;flex-direction:column;gap:8px;flex:1;min-height:0;overflow-y:auto}@media(max-width:640px){.dt-card-list{display:flex;padding-bottom:8px}}.dt-card{background:#fff;border:1px solid #e2e8f0;border-radius:10px;contain:layout style;padding:14px 16px;display:flex;flex-direction:column;gap:10px;transition:background .1s}.dt-card:has(.mm-dropdown){position:relative;z-index:1}.dt-card-clickable{cursor:pointer}.dt-card-clickable:active{background:#f8fafc}.dt-card-clickable:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.dt-card-header{display:flex;align-items:center;gap:10px}.dt-card-title{display:flex;align-items:center;gap:10px;flex:1;min-width:0}.dt-card-name{min-width:0;font-weight:600;color:#1e293b;font-size:.9375rem;overflow:hidden;text-overflow:ellipsis;overflow-wrap:anywhere;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;line-clamp:3}.dt-card-name-plain{flex:1}.dt-card-actions{margin-left:auto;flex-shrink:0}.dt-card-badges{display:flex;flex-wrap:wrap;gap:6px}.dt-card-tags{display:flex;flex-wrap:wrap;gap:4px}.dt-card-details{display:flex;flex-direction:column;gap:5px}.dt-card-detail-row{display:flex;justify-content:space-between;align-items:baseline;gap:8px;font-size:.8125rem}.dt-card-detail-label{color:#64748b;flex-shrink:0}.dt-card-detail-value{color:#334155;font-weight:500;text-align:right;min-width:0;overflow-wrap:anywhere;word-break:break-word}.dt-card-sk{gap:12px}.dt-card-sk-header{display:flex;align-items:center;gap:10px}.dt-card-sk-badges{display:flex;gap:6px}.dt-card-sk-rows{display:flex;flex-direction:column;gap:8px}@media(prefers-reduced-motion:reduce){.dt-sk-shimmer:after,.dt-sk-cell:after{animation:none;transform:none;opacity:0}.dt-tag-tooltip{animation:none}.dt-sort-icon{transition:none}}\n"]
14521
14583
  }]
14522
14584
  }],
14523
14585
  ctorParameters: () => [],
@@ -20793,7 +20855,7 @@ var TextareaInputComponent = class TextareaInputComponent {
20793
20855
  </div>
20794
20856
  `,
20795
20857
  isInline: true,
20796
- 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"],
20858
+ 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)and (pointer:fine){.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(pointer:coarse),(max-width:480px){.ta-input{font-size:1rem}}\n"],
20797
20859
  changeDetection: i0.ChangeDetectionStrategy.OnPush
20798
20860
  });
20799
20861
  }
@@ -20866,7 +20928,7 @@ i0.ɵɵngDeclareClassMetadata({
20866
20928
  }
20867
20929
  </div>
20868
20930
  `,
20869
- 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"]
20931
+ 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)and (pointer:fine){.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(pointer:coarse),(max-width:480px){.ta-input{font-size:1rem}}\n"]
20870
20932
  }]
20871
20933
  }],
20872
20934
  ctorParameters: () => [],
@@ -22899,7 +22961,7 @@ var DateInputComponent = class DateInputComponent {
22899
22961
  </div>
22900
22962
  `,
22901
22963
  isInline: true,
22902
- 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"],
22964
+ 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(pointer:coarse),(max-width:480px){.di-input{font-size:1rem}}@media(pointer:coarse),(max-width:480px){.di-input{min-height:44px}}\n"],
22903
22965
  changeDetection: i0.ChangeDetectionStrategy.OnPush
22904
22966
  });
22905
22967
  }
@@ -22960,7 +23022,7 @@ i0.ɵɵngDeclareClassMetadata({
22960
23022
  }
22961
23023
  </div>
22962
23024
  `,
22963
- 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"]
23025
+ 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(pointer:coarse),(max-width:480px){.di-input{font-size:1rem}}@media(pointer:coarse),(max-width:480px){.di-input{min-height:44px}}\n"]
22964
23026
  }]
22965
23027
  }],
22966
23028
  ctorParameters: () => [],
@@ -23253,7 +23315,7 @@ var DatetimeInputComponent = class DatetimeInputComponent {
23253
23315
  </div>
23254
23316
  `,
23255
23317
  isInline: true,
23256
- 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"],
23318
+ 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(pointer:coarse),(max-width:480px){.dti-input{font-size:1rem}}@media(pointer:coarse),(max-width:480px){.dti-input{min-height:44px}}\n"],
23257
23319
  changeDetection: i0.ChangeDetectionStrategy.OnPush
23258
23320
  });
23259
23321
  }
@@ -23314,7 +23376,7 @@ i0.ɵɵngDeclareClassMetadata({
23314
23376
  }
23315
23377
  </div>
23316
23378
  `,
23317
- 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"]
23379
+ 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(pointer:coarse),(max-width:480px){.dti-input{font-size:1rem}}@media(pointer:coarse),(max-width:480px){.dti-input{min-height:44px}}\n"]
23318
23380
  }]
23319
23381
  }],
23320
23382
  ctorParameters: () => [],
@@ -23617,7 +23679,7 @@ var TimeInputComponent = class TimeInputComponent {
23617
23679
  </div>
23618
23680
  `,
23619
23681
  isInline: true,
23620
- 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"],
23682
+ 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(pointer:coarse),(max-width:480px){.tmi-input{font-size:1rem}}@media(pointer:coarse),(max-width:480px){.tmi-input{min-height:44px}}\n"],
23621
23683
  changeDetection: i0.ChangeDetectionStrategy.OnPush
23622
23684
  });
23623
23685
  }
@@ -23680,7 +23742,7 @@ i0.ɵɵngDeclareClassMetadata({
23680
23742
  }
23681
23743
  </div>
23682
23744
  `,
23683
- 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"]
23745
+ 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(pointer:coarse),(max-width:480px){.tmi-input{font-size:1rem}}@media(pointer:coarse),(max-width:480px){.tmi-input{min-height:44px}}\n"]
23684
23746
  }]
23685
23747
  }],
23686
23748
  ctorParameters: () => [],
@@ -43376,6 +43438,7 @@ i0.ɵɵngDeclareClassMetadata({
43376
43438
  const DEFAULT_TEXTS = {
43377
43439
  brand: "Setup Wizard",
43378
43440
  stepperLabel: "Setup steps",
43441
+ asideLabel: "Setup steps",
43379
43442
  progress: (done, total) => `${done} of ${total} complete`,
43380
43443
  back: "Back",
43381
43444
  skip: "Skip for now",
@@ -43402,6 +43465,7 @@ const DEFAULT_TEXTS = {
43402
43465
  summarySkipped: "Skipped",
43403
43466
  summaryPending: "Pending",
43404
43467
  areaCode: "Area code",
43468
+ areaCodeHint: "Enter a 3-digit US area code",
43405
43469
  connectIntegrationFailed: (title) => `Failed to connect ${title}. Please try again from the Integrations page after setup.`
43406
43470
  };
43407
43471
  function splitIntro(description) {
@@ -43416,6 +43480,10 @@ function splitIntro(description) {
43416
43480
  }
43417
43481
  const SETUP_DONE_KEY = "done";
43418
43482
  var SetupWizardComponent = class SetupWizardComponent {
43483
+ customHintId() {
43484
+ const st = this.current();
43485
+ return st.kind === "custom" && st.continueHintId && st.canContinue && !st.canContinue() ? st.continueHintId : "";
43486
+ }
43419
43487
  constructor() {
43420
43488
  this.http = inject(HttpClient);
43421
43489
  this.apiBase = inject(FORGEROUTE_CONFIG, { optional: true })?.baseUrl ?? "/api";
@@ -43447,6 +43515,7 @@ var SetupWizardComponent = class SetupWizardComponent {
43447
43515
  this.stepTemplates = contentChildren(SetupWizardStepDirective, ...ngDevMode ? [{ debugName: "stepTemplates" }] : /* istanbul ignore next */ []);
43448
43516
  this.headerTemplates = contentChildren(SetupWizardStepHeaderDirective, ...ngDevMode ? [{ debugName: "headerTemplates" }] : /* istanbul ignore next */ []);
43449
43517
  this.injector = inject(Injector);
43518
+ this.host = inject(ElementRef);
43450
43519
  this.stepTitle = viewChild("stepTitle", ...ngDevMode ? [{ debugName: "stepTitle" }] : /* istanbul ignore next */ []);
43451
43520
  this.importers = viewChildren("importer", ...ngDevMode ? [{ debugName: "importers" }] : /* istanbul ignore next */ []);
43452
43521
  this.t = computed(() => ({
@@ -43592,7 +43661,12 @@ var SetupWizardComponent = class SetupWizardComponent {
43592
43661
  this.error.set("");
43593
43662
  try {
43594
43663
  await this.run(step.kind === "custom" ? step.save?.() : step.onContinue?.());
43595
- this.markCompleted(step.key);
43664
+ if (this.withholdsMark(step)) this.skipped.update((sk) => {
43665
+ const n = new Set(sk);
43666
+ n.delete(step.key);
43667
+ return n;
43668
+ });
43669
+ else this.markCompleted(step.key);
43596
43670
  this.advanceFrom(step.key);
43597
43671
  } catch (e) {
43598
43672
  this.error.set(this.messageOf(e, "Failed to save. Please try again."));
@@ -43600,6 +43674,13 @@ var SetupWizardComponent = class SetupWizardComponent {
43600
43674
  this.busy.set(false);
43601
43675
  }
43602
43676
  }
43677
+ withholdsMark(step) {
43678
+ try {
43679
+ return !!step.continueWithoutComplete?.();
43680
+ } catch {
43681
+ return false;
43682
+ }
43683
+ }
43603
43684
  async run(result) {
43604
43685
  if (isObservable(result)) await firstValueFrom(result, { defaultValue: void 0 });
43605
43686
  else await result;
@@ -43717,6 +43798,7 @@ var SetupWizardComponent = class SetupWizardComponent {
43717
43798
  startConnect(i) {
43718
43799
  if (i.connect.type === "area-code") {
43719
43800
  this.areaCodeOpen.set(i.key);
43801
+ afterNextRender(() => this.host.nativeElement.querySelector(`[data-testid="area-code-input-${i.key}"]`)?.focus(), { injector: this.injector });
43720
43802
  return;
43721
43803
  }
43722
43804
  this.connecting.set(i.key);
@@ -43780,6 +43862,10 @@ var SetupWizardComponent = class SetupWizardComponent {
43780
43862
  this.areaCodeOpen.set("");
43781
43863
  this.areaCode.set("");
43782
43864
  this.loadStatuses([i]);
43865
+ afterNextRender(() => {
43866
+ const pick = this.host.nativeElement.querySelector(`[data-testid="integration-pick-${i.key}"]`);
43867
+ (pick?.matches("button") ? pick : pick?.querySelector("button"))?.focus();
43868
+ }, { injector: this.injector });
43783
43869
  },
43784
43870
  error: (e) => {
43785
43871
  this.busy.set(false);
@@ -43856,7 +43942,7 @@ var SetupWizardComponent = class SetupWizardComponent {
43856
43942
  ngImport: i0,
43857
43943
  template: `
43858
43944
  <div class="sw-page" data-testid="setup-wizard-page">
43859
- <aside class="sw-sidebar" [attr.aria-label]="t().brand">
43945
+ <aside class="sw-sidebar" [attr.aria-label]="t().asideLabel">
43860
43946
  <div class="sw-sidebar-top">
43861
43947
  <div class="sw-brand">
43862
43948
  <ng-content select="[setup-wizard-logo]" />
@@ -43903,7 +43989,7 @@ var SetupWizardComponent = class SetupWizardComponent {
43903
43989
  }
43904
43990
  @if (current().kind === 'custom') {
43905
43991
  @if (!current().ownActions) {
43906
- <ui-button variant="primary" size="sm" [fullWidth]="narrow()" data-testid="wizard-save" [loading]="busy()" [disabled]="current().canContinue ? !current().canContinue!() : false" (click)="saveAndContinue()">
43992
+ <ui-button variant="primary" size="sm" [fullWidth]="narrow()" data-testid="wizard-save" [loading]="busy()" [disabled]="current().canContinue ? !current().canContinue!() : false" [ariaDescribedBy]="customHintId()" (click)="saveAndContinue()">
43907
43993
  {{ current().saveLabel ?? t().saveAndContinue }} <svg class="sw-ico" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path [attr.d]="iconD('arrow-right')" /></svg>
43908
43994
  </ui-button>
43909
43995
  }
@@ -43977,8 +44063,9 @@ var SetupWizardComponent = class SetupWizardComponent {
43977
44063
  [actionTestId]="'integration-pick-' + it.key" [actionLoading]="connecting() === it.key" [disabled]="!!connecting()" (action)="connect(it)">
43978
44064
  @if (areaCodeOpen() === it.key) {
43979
44065
  <div class="sw-area-code" [attr.data-testid]="'area-code-' + it.key">
43980
- <ui-text-input [label]="areaCodeLabelFor(it)" [maxlength]="3" inputmode="numeric" [ngModel]="areaCode()" (ngModelChange)="areaCode.set($event ?? '')" [inputTestId]="'area-code-input-' + it.key" />
43981
- <ui-button variant="primary" size="sm" [loading]="busy()" [disabled]="!validAreaCode()" (click)="submitAreaCode(it)"><svg class="sw-ico" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path [attr.d]="iconD('link')" /></svg> {{ t().connect }}</ui-button>
44066
+ <ui-text-input [label]="areaCodeLabelFor(it)" [hint]="t().areaCodeHint" [maxlength]="3" inputmode="numeric" [ngModel]="areaCode()" (ngModelChange)="areaCode.set($event ?? '')" [inputTestId]="'area-code-input-' + it.key" />
44067
+ <span class="sw-sr" [id]="'sw-area-code-why-' + it.key" data-testid="area-code-why">{{ validAreaCode() ? '' : t().areaCodeHint }}</span>
44068
+ <ui-button variant="primary" size="sm" [loading]="busy()" [disabled]="!validAreaCode()" [ariaDescribedBy]="validAreaCode() ? '' : 'sw-area-code-why-' + it.key" (click)="submitAreaCode(it)"><svg class="sw-ico" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path [attr.d]="iconD('link')" /></svg> {{ t().connect }}</ui-button>
43982
44069
  </div>
43983
44070
  }
43984
44071
  </ui-option-card>
@@ -44001,7 +44088,7 @@ var SetupWizardComponent = class SetupWizardComponent {
44001
44088
  </div>
44002
44089
  `,
44003
44090
  isInline: true,
44004
- styles: [".sw-page{display:flex;min-height:100vh;min-height:100dvh;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}.sw-sidebar{width:260px;min-width:260px;background:#faf9f7;border-right:1px solid #e5e2dc;display:flex;flex-direction:column;justify-content:space-between;padding:28px 20px}.sw-brand{display:flex;align-items:center;gap:10px;margin-bottom:28px}.sw-brand-text{font-size:1.125rem;font-weight:700;color:#1e293b}.sw-step-nav{display:block}.sw-sidebar-bottom{margin-top:24px}.sw-progress-text{display:block;margin-top:8px;font-size:.75rem;color:#64748b}.sw-content{flex:1;min-width:0;background:#fff;display:flex;flex-direction:column;overflow-y:auto}.sw-content-header{display:flex;justify-content:space-between;align-items:center;gap:16px;padding:20px 32px;border-bottom:1px solid #f1f5f9}.sw-step-title{font-size:1.25rem;font-weight:700;color:#111827;margin:0}.sw-step-content{max-width:780px;padding:16px 48px 60px}.sw-intro{margin-bottom:24px}.sw-step-number{font-size:1.25rem;font-weight:800;line-height:1}.sw-split-tabs{display:block;margin-bottom:16px}.sw-hint.sw-continue-hint{margin:14px 0 0}.sw-extra-status{font-size:.8125rem;color:#64748b;margin:12px 0 0}.sw-extra-status:empty{display:none}.sw-hint{font-size:.8125rem;line-height:1.5;color:#64748b;margin:0 0 16px}.sw-import-tags{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:28px}.sw-tag{font-size:.6875rem;font-weight:700;letter-spacing:1px;color:#6b7280}.sw-provider-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;margin-bottom:8px}.sw-provider-grid--single{grid-template-columns:1fr}@media(max-width:768px){.sw-provider-grid{grid-template-columns:1fr}}.sw-provider-grid .sw-integration{margin-bottom:0}.sw-area-code{display:flex;align-items:flex-end;gap:12px;margin-top:12px;max-width:320px}.sw-area-code ui-text-input{flex:1}.sw-content ui-alert{display:block;margin-bottom:16px}.sw-card{display:block}.sw-header-action{margin-left:auto;min-width:0;max-width:100%}.sw-step-actions{display:flex;justify-content:space-between;align-items:center}.sw-ico{flex-shrink:0;vertical-align:-2px}.sw-actions-right{display:flex;align-items:center;gap:16px;margin-left:auto}.sw-summary{display:block}.sw-done-hint{margin:16px 0 0}@media(max-width:768px){.sw-step-actions{flex-direction:column-reverse;align-items:stretch;gap:10px}.sw-actions-right{flex-direction:column-reverse;align-items:stretch;gap:10px;margin-left:0}.sw-page{flex-direction:column}.sw-sidebar{width:100%;min-width:unset;padding:16px}.sw-brand{margin-bottom:12px}.sw-sidebar-bottom{display:none}.sw-step-content{padding:12px 20px 40px}}\n"],
44091
+ styles: [".sw-page{display:flex;min-height:100vh;min-height:100dvh;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}.sw-sidebar{width:260px;min-width:260px;background:#faf9f7;border-right:1px solid #e5e2dc;display:flex;flex-direction:column;justify-content:space-between;padding:28px 20px;padding-left:max(20px,env(safe-area-inset-left))}.sw-brand{display:flex;align-items:center;gap:10px;margin-bottom:28px}.sw-brand-text{font-size:1.125rem;font-weight:700;color:#1e293b}.sw-step-nav{display:block}.sw-sidebar-bottom{margin-top:24px}.sw-progress-text{display:block;margin-top:8px;font-size:.75rem;color:#64748b}.sw-content{flex:1;min-width:0;background:#fff;display:flex;flex-direction:column;overflow-y:auto}.sw-content-header{display:flex;justify-content:space-between;align-items:center;gap:16px;padding:20px 32px;padding-right:max(32px,env(safe-area-inset-right));border-bottom:1px solid #f1f5f9}.sw-step-title{font-size:1.25rem;font-weight:700;color:#111827;margin:0}.sw-step-content{max-width:780px;padding:16px 48px 60px;padding-right:max(48px,env(safe-area-inset-right))}.sw-intro{margin-bottom:24px}.sw-step-number{font-size:1.25rem;font-weight:800;line-height:1}.sw-split-tabs{display:block;margin-bottom:16px}.sw-hint.sw-continue-hint{margin:14px 0 0}.sw-extra-status{font-size:.8125rem;color:#64748b;margin:12px 0 0}.sw-extra-status:empty{display:none}.sw-hint{font-size:.8125rem;line-height:1.5;color:#64748b;margin:0 0 16px}.sw-import-tags{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:28px}.sw-tag{font-size:.6875rem;font-weight:700;letter-spacing:1px;color:#6b7280}.sw-provider-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;margin-bottom:8px}.sw-provider-grid--single{grid-template-columns:1fr}@media(max-width:768px){.sw-provider-grid{grid-template-columns:1fr}}.sw-provider-grid .sw-integration{margin-bottom:0}.sw-area-code{display:flex;align-items:flex-end;gap:12px;margin-top:12px;max-width:320px}.sw-area-code ui-text-input{flex:1}.sw-sr{position:absolute;width:1px;height:1px;margin:-1px;padding:0;border:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}.sw-content ui-alert{display:block;margin-bottom:16px}.sw-card{display:block}.sw-header-action{margin-left:auto;min-width:0;max-width:100%}.sw-step-actions{display:flex;justify-content:space-between;align-items:center}.sw-ico{flex-shrink:0;vertical-align:-2px}.sw-actions-right{display:flex;align-items:center;gap:16px;margin-left:auto}.sw-summary{display:block}.sw-done-hint{margin:16px 0 0}@media(max-width:768px){.sw-step-actions{flex-direction:column-reverse;align-items:stretch;gap:10px}.sw-actions-right{flex-direction:column-reverse;align-items:stretch;gap:10px;margin-left:0}.sw-page{flex-direction:column}.sw-sidebar{width:100%;min-width:unset;padding:16px;padding-left:max(16px,env(safe-area-inset-left));padding-right:max(16px,env(safe-area-inset-right))}.sw-brand{margin-bottom:12px}.sw-sidebar-bottom{display:none}.sw-step-content{padding:12px 20px 40px;padding-left:max(20px,env(safe-area-inset-left));padding-right:max(20px,env(safe-area-inset-right))}}\n"],
44005
44092
  dependencies: [
44006
44093
  {
44007
44094
  kind: "directive",
@@ -44336,7 +44423,7 @@ i0.ɵɵngDeclareClassMetadata({
44336
44423
  ],
44337
44424
  template: `
44338
44425
  <div class="sw-page" data-testid="setup-wizard-page">
44339
- <aside class="sw-sidebar" [attr.aria-label]="t().brand">
44426
+ <aside class="sw-sidebar" [attr.aria-label]="t().asideLabel">
44340
44427
  <div class="sw-sidebar-top">
44341
44428
  <div class="sw-brand">
44342
44429
  <ng-content select="[setup-wizard-logo]" />
@@ -44383,7 +44470,7 @@ i0.ɵɵngDeclareClassMetadata({
44383
44470
  }
44384
44471
  @if (current().kind === 'custom') {
44385
44472
  @if (!current().ownActions) {
44386
- <ui-button variant="primary" size="sm" [fullWidth]="narrow()" data-testid="wizard-save" [loading]="busy()" [disabled]="current().canContinue ? !current().canContinue!() : false" (click)="saveAndContinue()">
44473
+ <ui-button variant="primary" size="sm" [fullWidth]="narrow()" data-testid="wizard-save" [loading]="busy()" [disabled]="current().canContinue ? !current().canContinue!() : false" [ariaDescribedBy]="customHintId()" (click)="saveAndContinue()">
44387
44474
  {{ current().saveLabel ?? t().saveAndContinue }} <svg class="sw-ico" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path [attr.d]="iconD('arrow-right')" /></svg>
44388
44475
  </ui-button>
44389
44476
  }
@@ -44457,8 +44544,9 @@ i0.ɵɵngDeclareClassMetadata({
44457
44544
  [actionTestId]="'integration-pick-' + it.key" [actionLoading]="connecting() === it.key" [disabled]="!!connecting()" (action)="connect(it)">
44458
44545
  @if (areaCodeOpen() === it.key) {
44459
44546
  <div class="sw-area-code" [attr.data-testid]="'area-code-' + it.key">
44460
- <ui-text-input [label]="areaCodeLabelFor(it)" [maxlength]="3" inputmode="numeric" [ngModel]="areaCode()" (ngModelChange)="areaCode.set($event ?? '')" [inputTestId]="'area-code-input-' + it.key" />
44461
- <ui-button variant="primary" size="sm" [loading]="busy()" [disabled]="!validAreaCode()" (click)="submitAreaCode(it)"><svg class="sw-ico" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path [attr.d]="iconD('link')" /></svg> {{ t().connect }}</ui-button>
44547
+ <ui-text-input [label]="areaCodeLabelFor(it)" [hint]="t().areaCodeHint" [maxlength]="3" inputmode="numeric" [ngModel]="areaCode()" (ngModelChange)="areaCode.set($event ?? '')" [inputTestId]="'area-code-input-' + it.key" />
44548
+ <span class="sw-sr" [id]="'sw-area-code-why-' + it.key" data-testid="area-code-why">{{ validAreaCode() ? '' : t().areaCodeHint }}</span>
44549
+ <ui-button variant="primary" size="sm" [loading]="busy()" [disabled]="!validAreaCode()" [ariaDescribedBy]="validAreaCode() ? '' : 'sw-area-code-why-' + it.key" (click)="submitAreaCode(it)"><svg class="sw-ico" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path [attr.d]="iconD('link')" /></svg> {{ t().connect }}</ui-button>
44462
44550
  </div>
44463
44551
  }
44464
44552
  </ui-option-card>
@@ -44480,7 +44568,7 @@ i0.ɵɵngDeclareClassMetadata({
44480
44568
  </main>
44481
44569
  </div>
44482
44570
  `,
44483
- styles: [".sw-page{display:flex;min-height:100vh;min-height:100dvh;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}.sw-sidebar{width:260px;min-width:260px;background:#faf9f7;border-right:1px solid #e5e2dc;display:flex;flex-direction:column;justify-content:space-between;padding:28px 20px}.sw-brand{display:flex;align-items:center;gap:10px;margin-bottom:28px}.sw-brand-text{font-size:1.125rem;font-weight:700;color:#1e293b}.sw-step-nav{display:block}.sw-sidebar-bottom{margin-top:24px}.sw-progress-text{display:block;margin-top:8px;font-size:.75rem;color:#64748b}.sw-content{flex:1;min-width:0;background:#fff;display:flex;flex-direction:column;overflow-y:auto}.sw-content-header{display:flex;justify-content:space-between;align-items:center;gap:16px;padding:20px 32px;border-bottom:1px solid #f1f5f9}.sw-step-title{font-size:1.25rem;font-weight:700;color:#111827;margin:0}.sw-step-content{max-width:780px;padding:16px 48px 60px}.sw-intro{margin-bottom:24px}.sw-step-number{font-size:1.25rem;font-weight:800;line-height:1}.sw-split-tabs{display:block;margin-bottom:16px}.sw-hint.sw-continue-hint{margin:14px 0 0}.sw-extra-status{font-size:.8125rem;color:#64748b;margin:12px 0 0}.sw-extra-status:empty{display:none}.sw-hint{font-size:.8125rem;line-height:1.5;color:#64748b;margin:0 0 16px}.sw-import-tags{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:28px}.sw-tag{font-size:.6875rem;font-weight:700;letter-spacing:1px;color:#6b7280}.sw-provider-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;margin-bottom:8px}.sw-provider-grid--single{grid-template-columns:1fr}@media(max-width:768px){.sw-provider-grid{grid-template-columns:1fr}}.sw-provider-grid .sw-integration{margin-bottom:0}.sw-area-code{display:flex;align-items:flex-end;gap:12px;margin-top:12px;max-width:320px}.sw-area-code ui-text-input{flex:1}.sw-content ui-alert{display:block;margin-bottom:16px}.sw-card{display:block}.sw-header-action{margin-left:auto;min-width:0;max-width:100%}.sw-step-actions{display:flex;justify-content:space-between;align-items:center}.sw-ico{flex-shrink:0;vertical-align:-2px}.sw-actions-right{display:flex;align-items:center;gap:16px;margin-left:auto}.sw-summary{display:block}.sw-done-hint{margin:16px 0 0}@media(max-width:768px){.sw-step-actions{flex-direction:column-reverse;align-items:stretch;gap:10px}.sw-actions-right{flex-direction:column-reverse;align-items:stretch;gap:10px;margin-left:0}.sw-page{flex-direction:column}.sw-sidebar{width:100%;min-width:unset;padding:16px}.sw-brand{margin-bottom:12px}.sw-sidebar-bottom{display:none}.sw-step-content{padding:12px 20px 40px}}\n"]
44571
+ styles: [".sw-page{display:flex;min-height:100vh;min-height:100dvh;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}.sw-sidebar{width:260px;min-width:260px;background:#faf9f7;border-right:1px solid #e5e2dc;display:flex;flex-direction:column;justify-content:space-between;padding:28px 20px;padding-left:max(20px,env(safe-area-inset-left))}.sw-brand{display:flex;align-items:center;gap:10px;margin-bottom:28px}.sw-brand-text{font-size:1.125rem;font-weight:700;color:#1e293b}.sw-step-nav{display:block}.sw-sidebar-bottom{margin-top:24px}.sw-progress-text{display:block;margin-top:8px;font-size:.75rem;color:#64748b}.sw-content{flex:1;min-width:0;background:#fff;display:flex;flex-direction:column;overflow-y:auto}.sw-content-header{display:flex;justify-content:space-between;align-items:center;gap:16px;padding:20px 32px;padding-right:max(32px,env(safe-area-inset-right));border-bottom:1px solid #f1f5f9}.sw-step-title{font-size:1.25rem;font-weight:700;color:#111827;margin:0}.sw-step-content{max-width:780px;padding:16px 48px 60px;padding-right:max(48px,env(safe-area-inset-right))}.sw-intro{margin-bottom:24px}.sw-step-number{font-size:1.25rem;font-weight:800;line-height:1}.sw-split-tabs{display:block;margin-bottom:16px}.sw-hint.sw-continue-hint{margin:14px 0 0}.sw-extra-status{font-size:.8125rem;color:#64748b;margin:12px 0 0}.sw-extra-status:empty{display:none}.sw-hint{font-size:.8125rem;line-height:1.5;color:#64748b;margin:0 0 16px}.sw-import-tags{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:28px}.sw-tag{font-size:.6875rem;font-weight:700;letter-spacing:1px;color:#6b7280}.sw-provider-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;margin-bottom:8px}.sw-provider-grid--single{grid-template-columns:1fr}@media(max-width:768px){.sw-provider-grid{grid-template-columns:1fr}}.sw-provider-grid .sw-integration{margin-bottom:0}.sw-area-code{display:flex;align-items:flex-end;gap:12px;margin-top:12px;max-width:320px}.sw-area-code ui-text-input{flex:1}.sw-sr{position:absolute;width:1px;height:1px;margin:-1px;padding:0;border:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}.sw-content ui-alert{display:block;margin-bottom:16px}.sw-card{display:block}.sw-header-action{margin-left:auto;min-width:0;max-width:100%}.sw-step-actions{display:flex;justify-content:space-between;align-items:center}.sw-ico{flex-shrink:0;vertical-align:-2px}.sw-actions-right{display:flex;align-items:center;gap:16px;margin-left:auto}.sw-summary{display:block}.sw-done-hint{margin:16px 0 0}@media(max-width:768px){.sw-step-actions{flex-direction:column-reverse;align-items:stretch;gap:10px}.sw-actions-right{flex-direction:column-reverse;align-items:stretch;gap:10px;margin-left:0}.sw-page{flex-direction:column}.sw-sidebar{width:100%;min-width:unset;padding:16px;padding-left:max(16px,env(safe-area-inset-left));padding-right:max(16px,env(safe-area-inset-right))}.sw-brand{margin-bottom:12px}.sw-sidebar-bottom{display:none}.sw-step-content{padding:12px 20px 40px;padding-left:max(20px,env(safe-area-inset-left));padding-right:max(20px,env(safe-area-inset-right))}}\n"]
44484
44572
  }]
44485
44573
  }],
44486
44574
  ctorParameters: () => [],