@forgeroute/ui 0.4.51 → 0.4.53

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.
@@ -3403,7 +3403,7 @@ var CheckboxComponent = class CheckboxComponent {
3403
3403
  }
3404
3404
  `,
3405
3405
  isInline: true,
3406
- styles: [".cb-field{display:inline-flex;flex-direction:column;gap:4px;vertical-align:top}.cb-group{display:flex;flex-direction:column;gap:8px;margin:0;padding:0;border:0;min-width:0}.cb-legend{padding:0;margin:0 0 8px;font-size:.8125rem;font-weight:600;color:#374151;line-height:1.2}.cb-required{color:#dc2626;margin-left:2px}.cb-sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.cb-options{display:flex;flex-direction:column;gap:10px}.cb-options.cb-horizontal{flex-direction:row;flex-wrap:wrap;gap:8px 20px}.cb-field.cb-has-trailing{display:flex}.cb-row{display:flex;align-items:center;justify-content:space-between;gap:12px}.cb-trailing{display:inline-flex;align-items:center;flex-shrink:0}.cb-option{display:flex;flex-direction:column;gap:4px}.cb-group-desc{margin-left:0}.cb-indent{margin-left:29px}.cb-desc{margin:0 0 0 29px;font-size:.75rem;line-height:1.4;color:#64748b}.cb-desc-error{color:#dc2626}.cb-error .cb-box:not(.cb-checked){border-color:#ef4444}.cb-wrap{position:relative;vertical-align:top;display:inline-flex;align-items:center;gap:9px;cursor:pointer;-webkit-user-select:none;user-select:none}.cb-wrap.cb-disabled{cursor:not-allowed;opacity:.5}.cb-hidden{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.cb-wrap:has(.cb-hidden:focus-visible) .cb-box{outline:2px solid #3b82f6;outline-offset:2px}@media(pointer:coarse),(max-width:480px){.cb-wrap{position:relative}.cb-hidden{width:44px;height:44px;margin:0;clip:auto;overflow:visible;left:-12px;top:50%;transform:translateY(-50%);opacity:0;cursor:pointer;z-index:1}.cb-wrap.cb-disabled .cb-hidden{cursor:not-allowed}}.cb-box{flex-shrink:0;width:20px;height:20px;border:2px solid #7c8ba1;border-radius:5px;background:#fff;display:flex;align-items:center;justify-content:center;transition:background .12s,border-color .12s}.cb-box.cb-checked,.cb-box.cb-indeterminate{background:#3b82f6;border-color:#3b82f6}.cb-wrap:hover .cb-box:not(.cb-checked):not(.cb-disabled){border-color:#3b82f6}@media(max-width:640px),(pointer:coarse){.cb-box{position:relative}.cb-box:after{content:\"\";position:absolute;inset:-12px}}.cb-label{font-size:.875rem;color:#334155;line-height:1.4}\n"],
3406
+ styles: [".cb-field{display:inline-flex;flex-direction:column;gap:4px;vertical-align:top}.cb-group{display:flex;flex-direction:column;gap:8px;margin:0;padding:0;border:0;min-width:0}.cb-legend{padding:0;margin:0 0 8px;font-size:.8125rem;font-weight:600;color:#374151;line-height:1.2}.cb-required{color:#dc2626;margin-left:2px}.cb-sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.cb-options{display:flex;flex-direction:column;gap:10px}.cb-options.cb-horizontal{flex-direction:row;flex-wrap:wrap;gap:8px 20px}.cb-field.cb-has-trailing{display:flex}.cb-row{display:flex;align-items:center;justify-content:space-between;gap:12px}.cb-trailing{display:inline-flex;align-items:center;flex-shrink:0}.cb-option{display:flex;flex-direction:column;gap:4px}.cb-group-desc{margin-left:0}.cb-indent{margin-left:29px}.cb-desc{margin:0 0 0 29px;font-size:.75rem;line-height:1.4;color:#64748b}.cb-desc-error{color:#dc2626}.cb-error .cb-box:not(.cb-checked){border-color:#ef4444}.cb-wrap{position:relative;vertical-align:top;display:inline-flex;align-items:center;gap:9px;cursor:pointer;-webkit-user-select:none;user-select:none}.cb-wrap.cb-disabled{cursor:not-allowed;opacity:.5}.cb-hidden{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.cb-wrap:has(.cb-hidden:focus-visible) .cb-box{outline:2px solid #3b82f6;outline-offset:2px}@media(pointer:coarse),(max-width:480px){.cb-wrap{position:relative}.cb-hidden{width:44px;height:44px;margin:0;clip:auto;overflow:visible;left:-12px;top:50%;transform:translateY(-50%);opacity:0;cursor:pointer;z-index:1}.cb-wrap.cb-disabled .cb-hidden{cursor:not-allowed}}.cb-box{flex-shrink:0;box-sizing:border-box;width:20px;height:20px;border:2px solid #7c8ba1;border-radius:5px;background:#fff;display:flex;align-items:center;justify-content:center;transition:background .12s,border-color .12s}.cb-box.cb-checked,.cb-box.cb-indeterminate{background:#3b82f6;border-color:#3b82f6}.cb-wrap:hover .cb-box:not(.cb-checked):not(.cb-disabled){border-color:#3b82f6}@media(max-width:640px),(pointer:coarse){.cb-box{position:relative}.cb-box:after{content:\"\";position:absolute;inset:-12px}}.cb-label{font-size:.875rem;color:#334155;line-height:1.4}\n"],
3407
3407
  dependencies: [{
3408
3408
  kind: "directive",
3409
3409
  type: NgTemplateOutlet,
@@ -3543,7 +3543,7 @@ i0.ɵɵngDeclareClassMetadata({
3543
3543
  </div>
3544
3544
  }
3545
3545
  `,
3546
- styles: [".cb-field{display:inline-flex;flex-direction:column;gap:4px;vertical-align:top}.cb-group{display:flex;flex-direction:column;gap:8px;margin:0;padding:0;border:0;min-width:0}.cb-legend{padding:0;margin:0 0 8px;font-size:.8125rem;font-weight:600;color:#374151;line-height:1.2}.cb-required{color:#dc2626;margin-left:2px}.cb-sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.cb-options{display:flex;flex-direction:column;gap:10px}.cb-options.cb-horizontal{flex-direction:row;flex-wrap:wrap;gap:8px 20px}.cb-field.cb-has-trailing{display:flex}.cb-row{display:flex;align-items:center;justify-content:space-between;gap:12px}.cb-trailing{display:inline-flex;align-items:center;flex-shrink:0}.cb-option{display:flex;flex-direction:column;gap:4px}.cb-group-desc{margin-left:0}.cb-indent{margin-left:29px}.cb-desc{margin:0 0 0 29px;font-size:.75rem;line-height:1.4;color:#64748b}.cb-desc-error{color:#dc2626}.cb-error .cb-box:not(.cb-checked){border-color:#ef4444}.cb-wrap{position:relative;vertical-align:top;display:inline-flex;align-items:center;gap:9px;cursor:pointer;-webkit-user-select:none;user-select:none}.cb-wrap.cb-disabled{cursor:not-allowed;opacity:.5}.cb-hidden{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.cb-wrap:has(.cb-hidden:focus-visible) .cb-box{outline:2px solid #3b82f6;outline-offset:2px}@media(pointer:coarse),(max-width:480px){.cb-wrap{position:relative}.cb-hidden{width:44px;height:44px;margin:0;clip:auto;overflow:visible;left:-12px;top:50%;transform:translateY(-50%);opacity:0;cursor:pointer;z-index:1}.cb-wrap.cb-disabled .cb-hidden{cursor:not-allowed}}.cb-box{flex-shrink:0;width:20px;height:20px;border:2px solid #7c8ba1;border-radius:5px;background:#fff;display:flex;align-items:center;justify-content:center;transition:background .12s,border-color .12s}.cb-box.cb-checked,.cb-box.cb-indeterminate{background:#3b82f6;border-color:#3b82f6}.cb-wrap:hover .cb-box:not(.cb-checked):not(.cb-disabled){border-color:#3b82f6}@media(max-width:640px),(pointer:coarse){.cb-box{position:relative}.cb-box:after{content:\"\";position:absolute;inset:-12px}}.cb-label{font-size:.875rem;color:#334155;line-height:1.4}\n"]
3546
+ styles: [".cb-field{display:inline-flex;flex-direction:column;gap:4px;vertical-align:top}.cb-group{display:flex;flex-direction:column;gap:8px;margin:0;padding:0;border:0;min-width:0}.cb-legend{padding:0;margin:0 0 8px;font-size:.8125rem;font-weight:600;color:#374151;line-height:1.2}.cb-required{color:#dc2626;margin-left:2px}.cb-sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.cb-options{display:flex;flex-direction:column;gap:10px}.cb-options.cb-horizontal{flex-direction:row;flex-wrap:wrap;gap:8px 20px}.cb-field.cb-has-trailing{display:flex}.cb-row{display:flex;align-items:center;justify-content:space-between;gap:12px}.cb-trailing{display:inline-flex;align-items:center;flex-shrink:0}.cb-option{display:flex;flex-direction:column;gap:4px}.cb-group-desc{margin-left:0}.cb-indent{margin-left:29px}.cb-desc{margin:0 0 0 29px;font-size:.75rem;line-height:1.4;color:#64748b}.cb-desc-error{color:#dc2626}.cb-error .cb-box:not(.cb-checked){border-color:#ef4444}.cb-wrap{position:relative;vertical-align:top;display:inline-flex;align-items:center;gap:9px;cursor:pointer;-webkit-user-select:none;user-select:none}.cb-wrap.cb-disabled{cursor:not-allowed;opacity:.5}.cb-hidden{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.cb-wrap:has(.cb-hidden:focus-visible) .cb-box{outline:2px solid #3b82f6;outline-offset:2px}@media(pointer:coarse),(max-width:480px){.cb-wrap{position:relative}.cb-hidden{width:44px;height:44px;margin:0;clip:auto;overflow:visible;left:-12px;top:50%;transform:translateY(-50%);opacity:0;cursor:pointer;z-index:1}.cb-wrap.cb-disabled .cb-hidden{cursor:not-allowed}}.cb-box{flex-shrink:0;box-sizing:border-box;width:20px;height:20px;border:2px solid #7c8ba1;border-radius:5px;background:#fff;display:flex;align-items:center;justify-content:center;transition:background .12s,border-color .12s}.cb-box.cb-checked,.cb-box.cb-indeterminate{background:#3b82f6;border-color:#3b82f6}.cb-wrap:hover .cb-box:not(.cb-checked):not(.cb-disabled){border-color:#3b82f6}@media(max-width:640px),(pointer:coarse){.cb-box{position:relative}.cb-box:after{content:\"\";position:absolute;inset:-12px}}.cb-label{font-size:.875rem;color:#334155;line-height:1.4}\n"]
3547
3547
  }]
3548
3548
  }],
3549
3549
  ctorParameters: () => [],
@@ -5461,7 +5461,7 @@ var TextInputComponent = class TextInputComponent {
5461
5461
  </div>
5462
5462
  `,
5463
5463
  isInline: true,
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 #7c8ba1;border-radius:8px;outline:none;transition:border-color .15s,box-shadow .15s}.ti-input::placeholder{color:#64748b;opacity:1}.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"],
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{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 #7c8ba1;border-radius:8px;outline:none;transition:border-color .15s,box-shadow .15s}.ti-input::placeholder{color:#64748b;opacity:1}.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"],
5465
5465
  dependencies: [{
5466
5466
  kind: "component",
5467
5467
  type: PasswordRequirementsComponent,
@@ -5562,7 +5562,7 @@ i0.ɵɵngDeclareClassMetadata({
5562
5562
  }
5563
5563
  </div>
5564
5564
  `,
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 #7c8ba1;border-radius:8px;outline:none;transition:border-color .15s,box-shadow .15s}.ti-input::placeholder{color:#64748b;opacity:1}.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"]
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{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 #7c8ba1;border-radius:8px;outline:none;transition:border-color .15s,box-shadow .15s}.ti-input::placeholder{color:#64748b;opacity:1}.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"]
5566
5566
  }]
5567
5567
  }],
5568
5568
  ctorParameters: () => [],
@@ -8462,7 +8462,7 @@ var DetailCardComponent = class DetailCardComponent {
8462
8462
  </div>
8463
8463
  `,
8464
8464
  isInline: true,
8465
- styles: [":host{display:block;margin-bottom:16px}:host(:last-child){margin-bottom:0}:host(.dc-fill-host){height:100%;margin-bottom:0}.dc.dc-fill{height:100%;box-sizing:border-box;display:flex;flex-direction:column}.dc.dc-fill .dc-body-wrap{flex:1 1 auto;min-height:0}.dc.dc-fill .dc-body{display:flex;flex-direction:column}.dc-selectable{cursor:pointer}.dc-selected{outline:2px solid #3b82f6;outline-offset:-1px}.dc{background:#fff;border:1px solid #e2e8f0;border-radius:10px;overflow:hidden}.dc-header{display:flex;align-items:center;flex-wrap:wrap;gap:8px 10px;padding:14px 18px}.dc-header.open{border-bottom:1px solid #f1f5f9}.dc-has-bg .dc-header.open{border-bottom-color:#94a3b859}.dc-header.collapsible{cursor:pointer;-webkit-user-select:none;user-select:none}@media(hover:hover){.dc-header.collapsible:hover{background:#f8fafc}}.dc-chevron{flex-shrink:0;color:var(--dc-text, #64748b)}.dc-chevron svg{transition:transform .2s}.dc-chevron svg.rotated{transform:rotate(-90deg)}.dc-header-text{display:flex;flex-direction:column;gap:2px;flex:1 1 160px;min-width:0;word-break:break-word;overflow-wrap:anywhere}.dc-title{font-size:.8125rem;font-weight:800;letter-spacing:.07em;color:var(--dc-text, #1e293b);line-height:1.3;text-transform:uppercase}.dc-title--as-written{text-transform:none}.dc-subtitle{font-size:.8125rem;color:var(--dc-text, #475569)}.dc-has-text-color .dc-subtitle{opacity:.8}.dc-has-text-color .dc-header.open{border-bottom-color:#94a3b859}.dc-edit{flex-shrink:0;margin-left:auto}.dc-edit-action{display:inline-flex;align-items:center;justify-content:center;gap:5px;font-family:inherit;font-size:.8rem;font-weight:500;line-height:1.4;color:#64748b;background:none;border:1px solid #e2e8f0;border-radius:6px;padding:4px 10px;cursor:pointer;white-space:nowrap;transition:background-color .15s ease,color .15s ease}.dc-edit-action:hover{background:#f1f5f9;color:#1e293b}.dc-edit-action:focus-visible{outline:2px solid var(--ui-focus, #3b82f6);outline-offset:2px}@media(pointer:coarse),(max-width:480px){.dc-edit-action{min-height:44px}}.dc-body-wrap{display:grid;grid-template-rows:1fr;transition:grid-template-rows .25s ease}.dc-body-wrap.collapsed{grid-template-rows:0fr}.dc-body{padding:16px 18px;min-height:0;overflow-x:hidden;overflow-y:auto;max-height:var(--dc-body-max-height, none)}.dc-footer{padding:10px 18px;border-top:1px solid #f1f5f9}.dc-footer:empty,.dc-footer.dc-footer--hidden{display:none}.dc-has-bg .dc-footer{border-top-color:#94a3b859}@media(max-width:480px){.dc-footer{padding:10px 14px}.dc-header{padding:12px 14px}.dc-body{padding:14px}.dc-edit{margin-left:0}}@media(prefers-reduced-motion:reduce){.dc-body-wrap,.dc-chevron svg{transition:none}}\n"],
8465
+ styles: [":host{display:block;margin-bottom:16px}:host(:last-child){margin-bottom:0}:host(.dc-fill-host){height:100%;margin-bottom:0}.dc.dc-fill{height:100%;box-sizing:border-box;display:flex;flex-direction:column}.dc.dc-fill .dc-body-wrap{flex:1 1 auto;min-height:0}.dc.dc-fill .dc-body{display:flex;flex-direction:column}.dc-selectable{cursor:pointer}.dc-selected{outline:2px solid #3b82f6;outline-offset:-1px}.dc{background:#fff;border:1px solid #e2e8f0;border-radius:10px;overflow:hidden}.dc-header{display:flex;align-items:center;flex-wrap:wrap;gap:8px 10px;padding:14px 18px}.dc-header.open{border-bottom:1px solid #f1f5f9}.dc-has-bg .dc-header.open{border-bottom-color:#94a3b859}.dc-header.collapsible{cursor:pointer;-webkit-user-select:none;user-select:none}@media(hover:hover){.dc-header.collapsible:hover{background:#f8fafc}}.dc-chevron{flex-shrink:0;color:var(--dc-text, #64748b)}.dc-chevron svg{transition:transform .2s}.dc-chevron svg.rotated{transform:rotate(-90deg)}.dc-header-text{display:flex;flex-direction:column;gap:2px;flex:1 1 160px;min-width:0;word-break:break-word;overflow-wrap:anywhere}.dc-title{font-size:.8125rem;font-weight:800;letter-spacing:.07em;color:var(--dc-text, #1e293b);line-height:1.3;text-transform:uppercase}.dc-title--as-written{text-transform:none}.dc-subtitle{font-size:.8125rem;color:var(--dc-text, #475569)}.dc-has-text-color .dc-subtitle{opacity:.8}.dc-has-text-color .dc-header.open{border-bottom-color:#94a3b859}.dc-edit{flex-shrink:0;margin-left:auto}.dc-edit-action{display:inline-flex;align-items:center;justify-content:center;gap:5px;font-family:inherit;font-size:.8rem;font-weight:500;line-height:1.4;color:#64748b;background:none;border:1px solid #e2e8f0;border-radius:6px;padding:4px 10px;cursor:pointer;white-space:nowrap;transition:background-color .15s ease,color .15s ease}.dc-edit-action:hover{background:#f1f5f9;color:#1e293b}.dc-edit-action:focus-visible{outline:2px solid var(--ui-focus, #3b82f6);outline-offset:2px}@media(pointer:coarse),(max-width:480px){.dc-edit-action{min-height:44px}}.dc-body-wrap{display:grid;grid-template-rows:1fr;transition:grid-template-rows .25s ease}.dc-body-wrap.collapsed{grid-template-rows:0fr}.dc-body{box-sizing:border-box;padding:16px 18px;min-height:0;overflow-x:hidden;overflow-y:auto;max-height:var(--dc-body-max-height, none)}.dc-footer{padding:10px 18px;border-top:1px solid #f1f5f9}.dc-footer:empty,.dc-footer.dc-footer--hidden{display:none}.dc-has-bg .dc-footer{border-top-color:#94a3b859}@media(max-width:480px){.dc-footer{padding:10px 14px}.dc-header{padding:12px 14px}.dc-body{padding:14px}.dc-edit{margin-left:0}}@media(prefers-reduced-motion:reduce){.dc-body-wrap,.dc-chevron svg{transition:none}}\n"],
8466
8466
  dependencies: [{
8467
8467
  kind: "component",
8468
8468
  type: ButtonComponent,
@@ -8562,7 +8562,7 @@ i0.ɵɵngDeclareClassMetadata({
8562
8562
  <div class="dc-footer" [class.dc-footer--hidden]="!isOpen()" [style.background]="footerBackground() || null"><ng-content select="[card-footer]" /></div>
8563
8563
  </div>
8564
8564
  `,
8565
- styles: [":host{display:block;margin-bottom:16px}:host(:last-child){margin-bottom:0}:host(.dc-fill-host){height:100%;margin-bottom:0}.dc.dc-fill{height:100%;box-sizing:border-box;display:flex;flex-direction:column}.dc.dc-fill .dc-body-wrap{flex:1 1 auto;min-height:0}.dc.dc-fill .dc-body{display:flex;flex-direction:column}.dc-selectable{cursor:pointer}.dc-selected{outline:2px solid #3b82f6;outline-offset:-1px}.dc{background:#fff;border:1px solid #e2e8f0;border-radius:10px;overflow:hidden}.dc-header{display:flex;align-items:center;flex-wrap:wrap;gap:8px 10px;padding:14px 18px}.dc-header.open{border-bottom:1px solid #f1f5f9}.dc-has-bg .dc-header.open{border-bottom-color:#94a3b859}.dc-header.collapsible{cursor:pointer;-webkit-user-select:none;user-select:none}@media(hover:hover){.dc-header.collapsible:hover{background:#f8fafc}}.dc-chevron{flex-shrink:0;color:var(--dc-text, #64748b)}.dc-chevron svg{transition:transform .2s}.dc-chevron svg.rotated{transform:rotate(-90deg)}.dc-header-text{display:flex;flex-direction:column;gap:2px;flex:1 1 160px;min-width:0;word-break:break-word;overflow-wrap:anywhere}.dc-title{font-size:.8125rem;font-weight:800;letter-spacing:.07em;color:var(--dc-text, #1e293b);line-height:1.3;text-transform:uppercase}.dc-title--as-written{text-transform:none}.dc-subtitle{font-size:.8125rem;color:var(--dc-text, #475569)}.dc-has-text-color .dc-subtitle{opacity:.8}.dc-has-text-color .dc-header.open{border-bottom-color:#94a3b859}.dc-edit{flex-shrink:0;margin-left:auto}.dc-edit-action{display:inline-flex;align-items:center;justify-content:center;gap:5px;font-family:inherit;font-size:.8rem;font-weight:500;line-height:1.4;color:#64748b;background:none;border:1px solid #e2e8f0;border-radius:6px;padding:4px 10px;cursor:pointer;white-space:nowrap;transition:background-color .15s ease,color .15s ease}.dc-edit-action:hover{background:#f1f5f9;color:#1e293b}.dc-edit-action:focus-visible{outline:2px solid var(--ui-focus, #3b82f6);outline-offset:2px}@media(pointer:coarse),(max-width:480px){.dc-edit-action{min-height:44px}}.dc-body-wrap{display:grid;grid-template-rows:1fr;transition:grid-template-rows .25s ease}.dc-body-wrap.collapsed{grid-template-rows:0fr}.dc-body{padding:16px 18px;min-height:0;overflow-x:hidden;overflow-y:auto;max-height:var(--dc-body-max-height, none)}.dc-footer{padding:10px 18px;border-top:1px solid #f1f5f9}.dc-footer:empty,.dc-footer.dc-footer--hidden{display:none}.dc-has-bg .dc-footer{border-top-color:#94a3b859}@media(max-width:480px){.dc-footer{padding:10px 14px}.dc-header{padding:12px 14px}.dc-body{padding:14px}.dc-edit{margin-left:0}}@media(prefers-reduced-motion:reduce){.dc-body-wrap,.dc-chevron svg{transition:none}}\n"]
8565
+ styles: [":host{display:block;margin-bottom:16px}:host(:last-child){margin-bottom:0}:host(.dc-fill-host){height:100%;margin-bottom:0}.dc.dc-fill{height:100%;box-sizing:border-box;display:flex;flex-direction:column}.dc.dc-fill .dc-body-wrap{flex:1 1 auto;min-height:0}.dc.dc-fill .dc-body{display:flex;flex-direction:column}.dc-selectable{cursor:pointer}.dc-selected{outline:2px solid #3b82f6;outline-offset:-1px}.dc{background:#fff;border:1px solid #e2e8f0;border-radius:10px;overflow:hidden}.dc-header{display:flex;align-items:center;flex-wrap:wrap;gap:8px 10px;padding:14px 18px}.dc-header.open{border-bottom:1px solid #f1f5f9}.dc-has-bg .dc-header.open{border-bottom-color:#94a3b859}.dc-header.collapsible{cursor:pointer;-webkit-user-select:none;user-select:none}@media(hover:hover){.dc-header.collapsible:hover{background:#f8fafc}}.dc-chevron{flex-shrink:0;color:var(--dc-text, #64748b)}.dc-chevron svg{transition:transform .2s}.dc-chevron svg.rotated{transform:rotate(-90deg)}.dc-header-text{display:flex;flex-direction:column;gap:2px;flex:1 1 160px;min-width:0;word-break:break-word;overflow-wrap:anywhere}.dc-title{font-size:.8125rem;font-weight:800;letter-spacing:.07em;color:var(--dc-text, #1e293b);line-height:1.3;text-transform:uppercase}.dc-title--as-written{text-transform:none}.dc-subtitle{font-size:.8125rem;color:var(--dc-text, #475569)}.dc-has-text-color .dc-subtitle{opacity:.8}.dc-has-text-color .dc-header.open{border-bottom-color:#94a3b859}.dc-edit{flex-shrink:0;margin-left:auto}.dc-edit-action{display:inline-flex;align-items:center;justify-content:center;gap:5px;font-family:inherit;font-size:.8rem;font-weight:500;line-height:1.4;color:#64748b;background:none;border:1px solid #e2e8f0;border-radius:6px;padding:4px 10px;cursor:pointer;white-space:nowrap;transition:background-color .15s ease,color .15s ease}.dc-edit-action:hover{background:#f1f5f9;color:#1e293b}.dc-edit-action:focus-visible{outline:2px solid var(--ui-focus, #3b82f6);outline-offset:2px}@media(pointer:coarse),(max-width:480px){.dc-edit-action{min-height:44px}}.dc-body-wrap{display:grid;grid-template-rows:1fr;transition:grid-template-rows .25s ease}.dc-body-wrap.collapsed{grid-template-rows:0fr}.dc-body{box-sizing:border-box;padding:16px 18px;min-height:0;overflow-x:hidden;overflow-y:auto;max-height:var(--dc-body-max-height, none)}.dc-footer{padding:10px 18px;border-top:1px solid #f1f5f9}.dc-footer:empty,.dc-footer.dc-footer--hidden{display:none}.dc-has-bg .dc-footer{border-top-color:#94a3b859}@media(max-width:480px){.dc-footer{padding:10px 14px}.dc-header{padding:12px 14px}.dc-body{padding:14px}.dc-edit{margin-left:0}}@media(prefers-reduced-motion:reduce){.dc-body-wrap,.dc-chevron svg{transition:none}}\n"]
8566
8566
  }]
8567
8567
  }],
8568
8568
  propDecorators: {
@@ -11752,7 +11752,7 @@ var DataTableComponent = class DataTableComponent {
11752
11752
  const active = this._activeTab();
11753
11753
  const keys = Object.keys(counts).length > 0 && active && !present.includes(active) ? [...present, active] : present;
11754
11754
  if (!keys.length) return [];
11755
- const toLabel = (s) => this._columnBadgeLabel(s) ?? s.replace(/([a-z])([A-Z])/g, "$1 $2").replace(/-/g, " ").replace(/\b\w/g, (c) => c.toUpperCase());
11755
+ const toLabel = (s) => this._columnBadgeLabel(s) ?? (/[a-z]/.test(s) ? s : s.toLowerCase()).replace(/([a-z])([A-Z])/g, "$1 $2").replace(/-/g, " ").replace(/\b\w/g, (c) => c.toUpperCase());
11756
11756
  const singleValue = keys.length === 1;
11757
11757
  return [{
11758
11758
  value: "",
@@ -15722,7 +15722,7 @@ var AudioPlayerComponent = class AudioPlayerComponent {
15722
15722
  @if (failed()) {
15723
15723
  <p class="ap-error" role="alert">Audio could not be played.</p>
15724
15724
  } @else {
15725
- <audio class="ap-audio" controls [attr.preload]="preload()" [src]="src() || null" [attr.aria-label]="ariaLabel() || null"
15725
+ <audio class="ap-audio" controls [attr.preload]="preload()" [attr.src]="src() || null" [attr.aria-label]="ariaLabel() || null"
15726
15726
  (error)="onError()">
15727
15727
  Your browser does not support the audio element.
15728
15728
  </audio>
@@ -15749,7 +15749,7 @@ i0.ɵɵngDeclareClassMetadata({
15749
15749
  @if (failed()) {
15750
15750
  <p class="ap-error" role="alert">Audio could not be played.</p>
15751
15751
  } @else {
15752
- <audio class="ap-audio" controls [attr.preload]="preload()" [src]="src() || null" [attr.aria-label]="ariaLabel() || null"
15752
+ <audio class="ap-audio" controls [attr.preload]="preload()" [attr.src]="src() || null" [attr.aria-label]="ariaLabel() || null"
15753
15753
  (error)="onError()">
15754
15754
  Your browser does not support the audio element.
15755
15755
  </audio>
@@ -18468,8 +18468,9 @@ var AlertComponent = class AlertComponent {
18468
18468
  </div>
18469
18469
  `,
18470
18470
  isInline: true,
18471
- styles: [":host{display:block}.alert{display:flex;align-items:flex-start;gap:12px;padding:12px 14px;border-radius:8px;border-left:4px solid transparent;font-size:13px;line-height:1.5}.alert--info{background:#dbeafe;border-color:#3b82f6;color:#1e3a8a}.alert--success{background:#dcfce7;border-color:#22c55e;color:#14532d}.alert--warning{background:#ffedd5;border-color:#f97316;color:#7c2d12}.alert--danger{background:#fee2e2;border-color:#ef4444;color:#7f1d1d}.alert--neutral{background:#f1f5f9;border-color:#64748b;color:#334155}.alert--fill{height:100%;box-sizing:border-box}.alert--compact{padding:8px 12px;gap:8px;font-size:12.5px;line-height:1.4}.alert-content{flex:1;display:flex;flex-direction:column;gap:2px}.alert-title{font-weight:700}.alert-body{opacity:.9;display:flex;align-items:center;flex-wrap:wrap;gap:8px}.alert-body--inline{display:block}.alert-body--inline>*{vertical-align:middle}.alert-dismiss{flex-shrink:0;background:none;border:none;cursor:pointer;padding:2px;border-radius:4px;color:inherit;opacity:.6;display:flex;align-items:center;transition:opacity .15s}.alert-dismiss:hover{opacity:1}.alert-dismiss:focus-visible{outline:2px solid currentColor;outline-offset:2px}@media(pointer:coarse),(max-width:480px){.alert-dismiss{position:relative}.alert-dismiss:after{content:\"\";position:absolute;inset:-13px}}\n"],
18472
- changeDetection: i0.ChangeDetectionStrategy.OnPush
18471
+ styles: ["ui-alert{display:block}ui-alert .alert{display:flex;align-items:flex-start;gap:12px;padding:12px 14px;border-radius:8px;border-left:4px solid transparent;font-size:13px;line-height:1.5}ui-alert .alert--info{background:#dbeafe;border-color:#3b82f6;color:#1e3a8a}ui-alert .alert--success{background:#dcfce7;border-color:#22c55e;color:#14532d}ui-alert .alert--warning{background:#ffedd5;border-color:#f97316;color:#7c2d12}ui-alert .alert--danger{background:#fee2e2;border-color:#ef4444;color:#7f1d1d}ui-alert .alert--neutral{background:#f1f5f9;border-color:#64748b;color:#334155}ui-alert .alert--fill{height:100%;box-sizing:border-box}ui-alert .alert--compact{padding:8px 12px;gap:8px;font-size:12.5px;line-height:1.4}ui-alert .alert-content{flex:1;display:flex;flex-direction:column;gap:2px}ui-alert .alert-title{font-weight:700}ui-alert .alert-body{opacity:.9;display:flex;align-items:center;flex-wrap:wrap;gap:8px}ui-alert .alert-body--inline{display:block}ui-alert .alert-body--inline>*{vertical-align:middle}ui-alert .alert-dismiss{flex-shrink:0;background:none;border:none;cursor:pointer;padding:2px;border-radius:4px;color:inherit;opacity:.6;display:flex;align-items:center;transition:opacity .15s}ui-alert .alert-dismiss:hover{opacity:1}ui-alert .alert-dismiss:focus-visible{outline:2px solid currentColor;outline-offset:2px}@media(pointer:coarse),(max-width:480px){ui-alert .alert-dismiss{position:relative}ui-alert .alert-dismiss:after{content:\"\";position:absolute;inset:-13px}}\n"],
18472
+ changeDetection: i0.ChangeDetectionStrategy.OnPush,
18473
+ encapsulation: i0.ViewEncapsulation.None
18473
18474
  });
18474
18475
  }
18475
18476
  };
@@ -18484,6 +18485,7 @@ i0.ɵɵngDeclareClassMetadata({
18484
18485
  selector: "ui-alert",
18485
18486
  standalone: true,
18486
18487
  changeDetection: ChangeDetectionStrategy.OnPush,
18488
+ encapsulation: ViewEncapsulation.None,
18487
18489
  template: `
18488
18490
  <div class="alert" [class]="'alert alert--' + variant()" [class.alert--compact]="compact()" [class.alert--fill]="fill()" [attr.role]="quiet() ? null : (variant() === 'danger' ? 'alert' : 'status')">
18489
18491
  <div class="alert-content">
@@ -18499,7 +18501,7 @@ i0.ɵɵngDeclareClassMetadata({
18499
18501
  }
18500
18502
  </div>
18501
18503
  `,
18502
- styles: [":host{display:block}.alert{display:flex;align-items:flex-start;gap:12px;padding:12px 14px;border-radius:8px;border-left:4px solid transparent;font-size:13px;line-height:1.5}.alert--info{background:#dbeafe;border-color:#3b82f6;color:#1e3a8a}.alert--success{background:#dcfce7;border-color:#22c55e;color:#14532d}.alert--warning{background:#ffedd5;border-color:#f97316;color:#7c2d12}.alert--danger{background:#fee2e2;border-color:#ef4444;color:#7f1d1d}.alert--neutral{background:#f1f5f9;border-color:#64748b;color:#334155}.alert--fill{height:100%;box-sizing:border-box}.alert--compact{padding:8px 12px;gap:8px;font-size:12.5px;line-height:1.4}.alert-content{flex:1;display:flex;flex-direction:column;gap:2px}.alert-title{font-weight:700}.alert-body{opacity:.9;display:flex;align-items:center;flex-wrap:wrap;gap:8px}.alert-body--inline{display:block}.alert-body--inline>*{vertical-align:middle}.alert-dismiss{flex-shrink:0;background:none;border:none;cursor:pointer;padding:2px;border-radius:4px;color:inherit;opacity:.6;display:flex;align-items:center;transition:opacity .15s}.alert-dismiss:hover{opacity:1}.alert-dismiss:focus-visible{outline:2px solid currentColor;outline-offset:2px}@media(pointer:coarse),(max-width:480px){.alert-dismiss{position:relative}.alert-dismiss:after{content:\"\";position:absolute;inset:-13px}}\n"]
18504
+ styles: ["ui-alert{display:block}ui-alert .alert{display:flex;align-items:flex-start;gap:12px;padding:12px 14px;border-radius:8px;border-left:4px solid transparent;font-size:13px;line-height:1.5}ui-alert .alert--info{background:#dbeafe;border-color:#3b82f6;color:#1e3a8a}ui-alert .alert--success{background:#dcfce7;border-color:#22c55e;color:#14532d}ui-alert .alert--warning{background:#ffedd5;border-color:#f97316;color:#7c2d12}ui-alert .alert--danger{background:#fee2e2;border-color:#ef4444;color:#7f1d1d}ui-alert .alert--neutral{background:#f1f5f9;border-color:#64748b;color:#334155}ui-alert .alert--fill{height:100%;box-sizing:border-box}ui-alert .alert--compact{padding:8px 12px;gap:8px;font-size:12.5px;line-height:1.4}ui-alert .alert-content{flex:1;display:flex;flex-direction:column;gap:2px}ui-alert .alert-title{font-weight:700}ui-alert .alert-body{opacity:.9;display:flex;align-items:center;flex-wrap:wrap;gap:8px}ui-alert .alert-body--inline{display:block}ui-alert .alert-body--inline>*{vertical-align:middle}ui-alert .alert-dismiss{flex-shrink:0;background:none;border:none;cursor:pointer;padding:2px;border-radius:4px;color:inherit;opacity:.6;display:flex;align-items:center;transition:opacity .15s}ui-alert .alert-dismiss:hover{opacity:1}ui-alert .alert-dismiss:focus-visible{outline:2px solid currentColor;outline-offset:2px}@media(pointer:coarse),(max-width:480px){ui-alert .alert-dismiss{position:relative}ui-alert .alert-dismiss:after{content:\"\";position:absolute;inset:-13px}}\n"]
18503
18505
  }]
18504
18506
  }],
18505
18507
  propDecorators: {
@@ -18660,7 +18662,7 @@ var PhoneNumberPickerComponent = class PhoneNumberPickerComponent {
18660
18662
  this._el = inject(ElementRef);
18661
18663
  this._searchSub = null;
18662
18664
  this.zipCtl.valueChanges.pipe(takeUntilDestroyed()).subscribe((v) => {
18663
- this._zipEdited.set(true);
18665
+ if (v !== this._zip()) this._zipEdited.set(true);
18664
18666
  this._typed(this.zipCtl, this._zip, v, 5);
18665
18667
  });
18666
18668
  this.areaCtl.valueChanges.pipe(takeUntilDestroyed()).subscribe((v) => this._typed(this.areaCtl, this._area, v, 3));
@@ -18692,6 +18694,9 @@ var PhoneNumberPickerComponent = class PhoneNumberPickerComponent {
18692
18694
  event.preventDefault();
18693
18695
  this.submit();
18694
18696
  }
18697
+ onFieldBlur(from) {
18698
+ if (this.mode() === from) this.touched.set(true);
18699
+ }
18695
18700
  onBeforeInput(event) {
18696
18701
  const e = event;
18697
18702
  if (e.inputType?.startsWith("insertText") && e.data && /\D/.test(e.data)) e.preventDefault();
@@ -18928,13 +18933,13 @@ var PhoneNumberPickerComponent = class PhoneNumberPickerComponent {
18928
18933
  label="ZIP code" [required]="true" [maxlength]="5" type="text" inputmode="numeric" autocomplete="postal-code"
18929
18934
  placeholder="78701" [formControl]="zipCtl" [error]="fieldError()" [showErrors]="touched()"
18930
18935
  hint="We'll look for numbers near this ZIP code. Edit it if you want a different area."
18931
- (blurred)="touched.set(true)" data-testid="pn-zip" />
18936
+ (blurred)="onFieldBlur('zip')" data-testid="pn-zip" />
18932
18937
  } @else {
18933
18938
  <ui-text-input
18934
18939
  label="Area code" [required]="true" [maxlength]="3" type="text" inputmode="numeric" autocomplete="off"
18935
18940
  placeholder="512" [formControl]="areaCtl" [error]="fieldError()" [showErrors]="touched()"
18936
18941
  hint="We'll look for numbers in this area code."
18937
- (blurred)="touched.set(true)" data-testid="pn-area" />
18942
+ (blurred)="onFieldBlur('area-code')" data-testid="pn-area" />
18938
18943
  }
18939
18944
  </div>
18940
18945
  </div>
@@ -19226,13 +19231,13 @@ i0.ɵɵngDeclareClassMetadata({
19226
19231
  label="ZIP code" [required]="true" [maxlength]="5" type="text" inputmode="numeric" autocomplete="postal-code"
19227
19232
  placeholder="78701" [formControl]="zipCtl" [error]="fieldError()" [showErrors]="touched()"
19228
19233
  hint="We'll look for numbers near this ZIP code. Edit it if you want a different area."
19229
- (blurred)="touched.set(true)" data-testid="pn-zip" />
19234
+ (blurred)="onFieldBlur('zip')" data-testid="pn-zip" />
19230
19235
  } @else {
19231
19236
  <ui-text-input
19232
19237
  label="Area code" [required]="true" [maxlength]="3" type="text" inputmode="numeric" autocomplete="off"
19233
19238
  placeholder="512" [formControl]="areaCtl" [error]="fieldError()" [showErrors]="touched()"
19234
19239
  hint="We'll look for numbers in this area code."
19235
- (blurred)="touched.set(true)" data-testid="pn-area" />
19240
+ (blurred)="onFieldBlur('area-code')" data-testid="pn-area" />
19236
19241
  }
19237
19242
  </div>
19238
19243
  </div>
@@ -19556,6 +19561,8 @@ var PillTabsComponent = class PillTabsComponent {
19556
19561
  this.ariaLabel = input(null, ...ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []);
19557
19562
  this.name = input("pill-tabs-" + Math.random().toString(36).slice(2), ...ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []);
19558
19563
  this.noWrap = input(false, ...ngDevMode ? [{ debugName: "noWrap" }] : /* istanbul ignore next */ []);
19564
+ this.orientation = input("horizontal", ...ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []);
19565
+ this.vertical = () => this.orientation() === "vertical";
19559
19566
  this.tabChange = output();
19560
19567
  this.canScrollStart = signal(false, ...ngDevMode ? [{ debugName: "canScrollStart" }] : /* istanbul ignore next */ []);
19561
19568
  this.canScrollEnd = signal(false, ...ngDevMode ? [{ debugName: "canScrollEnd" }] : /* istanbul ignore next */ []);
@@ -19592,14 +19599,15 @@ var PillTabsComponent = class PillTabsComponent {
19592
19599
  }
19593
19600
  onKeydown(e) {
19594
19601
  const enabled = this.tabs().filter((t) => !t.disabled);
19602
+ const [nextKey, prevKey] = this.vertical() ? ["ArrowDown", "ArrowUp"] : ["ArrowRight", "ArrowLeft"];
19595
19603
  if (!enabled.length || ![
19596
- "ArrowRight",
19597
- "ArrowLeft",
19604
+ nextKey,
19605
+ prevKey,
19598
19606
  "Home",
19599
19607
  "End"
19600
19608
  ].includes(e.key)) return;
19601
19609
  const current = Math.max(0, enabled.findIndex((t) => t.key === this.activeKey()));
19602
- const next = e.key === "Home" ? 0 : e.key === "End" ? enabled.length - 1 : (current + (e.key === "ArrowRight" ? 1 : -1) + enabled.length) % enabled.length;
19610
+ const next = e.key === "Home" ? 0 : e.key === "End" ? enabled.length - 1 : (current + (e.key === nextKey ? 1 : -1) + enabled.length) % enabled.length;
19603
19611
  e.preventDefault();
19604
19612
  const key = enabled[next].key;
19605
19613
  this.select(key);
@@ -19657,13 +19665,20 @@ var PillTabsComponent = class PillTabsComponent {
19657
19665
  isSignal: true,
19658
19666
  isRequired: false,
19659
19667
  transformFunction: null
19668
+ },
19669
+ orientation: {
19670
+ classPropertyName: "orientation",
19671
+ publicName: "orientation",
19672
+ isSignal: true,
19673
+ isRequired: false,
19674
+ transformFunction: null
19660
19675
  }
19661
19676
  },
19662
19677
  outputs: { tabChange: "tabChange" },
19663
19678
  ngImport: i0,
19664
19679
  template: `
19665
- <div class="pill-wrap">
19666
- <div class="pill-tabs" [class.pill-tabs--nowrap]="noWrap()" role="tablist" [attr.aria-label]="ariaLabel()" (keydown)="onKeydown($event)" (scroll)="updateOverflow()">
19680
+ <div class="pill-wrap" [class.pill-wrap--vertical]="vertical()">
19681
+ <div class="pill-tabs" [class.pill-tabs--nowrap]="noWrap()" [class.pill-tabs--vertical]="vertical()" role="tablist" [attr.aria-label]="ariaLabel()" [attr.aria-orientation]="vertical() ? 'vertical' : null" (keydown)="onKeydown($event)" (scroll)="updateOverflow()">
19667
19682
  @for (tab of tabs(); track tab.key) {
19668
19683
  <button type="button" class="pill-tab" role="tab"
19669
19684
  [id]="name() + '-' + tab.key"
@@ -19692,7 +19707,7 @@ var PillTabsComponent = class PillTabsComponent {
19692
19707
  </div>
19693
19708
  `,
19694
19709
  isInline: true,
19695
- styles: [".pill-wrap{position:relative}.pill-fade{position:absolute;top:0;bottom:0;width:28px;pointer-events:none;opacity:0;transition:opacity .15s}.pill-fade.visible{opacity:1}.pill-fade--start{left:0;background:linear-gradient(to right,var(--ui-pill-tabs-fade, #fff),transparent)}.pill-fade--end{right:0;background:linear-gradient(to left,var(--ui-pill-tabs-fade, #fff),transparent)}.pill-tabs{display:flex;gap:8px;flex-wrap:wrap}@media(max-width:768px){.pill-tabs{flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch;padding-bottom:2px;scrollbar-width:none}.pill-tabs::-webkit-scrollbar{display:none}}.pill-tabs--nowrap .pill-tab{flex:0 0 auto;white-space:nowrap}.pill-tab{position:relative;display:inline-flex;align-items:center;gap:6px;padding:7px 16px;border-radius:999px;border:1px solid #e2e8f0;background:#fff;font-size:.8125rem;font-weight:500;color:#64748b;cursor:pointer;transition:all .15s;font-family:inherit}.pill-tab:hover:not(.disabled):not(.active){background:#f8fafc;border-color:#94a3b8}.pill-tab:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.pill-tab .pill-count{background:#e2e8f0;color:#475569;font-size:.7rem;font-weight:600;padding:1px 6px;border-radius:999px;line-height:1.4}.pill-tab.active{background:#1e293b;color:#fff;border-color:#1e293b}.pill-tab.active .pill-count{background:#fff3;color:#fff}.pill-tab.active:hover{background:#1e293b;color:#fff}.pill-tab.disabled{opacity:.4;cursor:not-allowed;pointer-events:none}.pill-tab .pill-info-icon{flex-shrink:0;opacity:.7}.pill-tab:hover .pill-info-icon,.pill-tab:focus-visible .pill-info-icon{opacity:1}.pill-tab .pill-info-tip{position:absolute;left:0;top:calc(100% + 8px);z-index:20;width:max-content;max-width:280px;padding:8px 12px;border-radius:8px;background:#1e293b;color:#fff;font-size:.75rem;font-weight:400;line-height:1.45;text-align:left;white-space:normal;box-shadow:0 4px 12px #0f172a40;opacity:0;visibility:hidden;pointer-events:none;transition:opacity .12s,visibility .12s}.pill-tab:hover .pill-info-tip,.pill-tab:focus-visible .pill-info-tip{opacity:1;visibility:visible}.pill-tab:last-child .pill-info-tip{left:auto;right:0}@media(pointer:coarse),(max-width:480px){.pill-tab{min-height:44px}}\n"],
19710
+ styles: [".pill-wrap{position:relative}.pill-fade{position:absolute;top:0;bottom:0;width:28px;pointer-events:none;opacity:0;transition:opacity .15s}.pill-fade.visible{opacity:1}.pill-fade--start{left:0;background:linear-gradient(to right,var(--ui-pill-tabs-fade, #fff),transparent)}.pill-fade--end{right:0;background:linear-gradient(to left,var(--ui-pill-tabs-fade, #fff),transparent)}.pill-tabs{display:flex;gap:8px;flex-wrap:wrap}@media(max-width:768px){.pill-tabs{flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch;padding-bottom:2px;scrollbar-width:none}.pill-tabs::-webkit-scrollbar{display:none}}.pill-tabs--nowrap .pill-tab{flex:0 0 auto;white-space:nowrap}.pill-tab{position:relative;display:inline-flex;align-items:center;gap:6px;padding:7px 16px;border-radius:999px;border:1px solid #e2e8f0;background:#fff;font-size:.8125rem;font-weight:500;color:#64748b;cursor:pointer;transition:all .15s;font-family:inherit}.pill-tab:hover:not(.disabled):not(.active){background:#f8fafc;border-color:#94a3b8}.pill-tab:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.pill-tab .pill-count{background:#e2e8f0;color:#475569;font-size:.7rem;font-weight:600;padding:1px 6px;border-radius:999px;line-height:1.4}.pill-tab.active{background:#1e293b;color:#fff;border-color:#1e293b}.pill-tab.active .pill-count{background:#fff3;color:#fff}.pill-tab.active:hover{background:#1e293b;color:#fff}.pill-tab.disabled{opacity:.4;cursor:not-allowed;pointer-events:none}.pill-tab .pill-info-icon{flex-shrink:0;opacity:.7}.pill-tab:hover .pill-info-icon,.pill-tab:focus-visible .pill-info-icon{opacity:1}.pill-tab .pill-info-tip{position:absolute;left:0;top:calc(100% + 8px);z-index:20;width:max-content;max-width:280px;padding:8px 12px;border-radius:8px;background:#1e293b;color:#fff;font-size:.75rem;font-weight:400;line-height:1.45;text-align:left;white-space:normal;box-shadow:0 4px 12px #0f172a40;opacity:0;visibility:hidden;pointer-events:none;transition:opacity .12s,visibility .12s}.pill-tab:hover .pill-info-tip,.pill-tab:focus-visible .pill-info-tip{opacity:1;visibility:visible}.pill-tab:last-child .pill-info-tip{left:auto;right:0}.pill-wrap--vertical .pill-fade{display:none}.pill-tabs.pill-tabs--vertical{flex-direction:column;flex-wrap:nowrap;overflow:visible;gap:4px;padding-bottom:0}.pill-tabs--vertical .pill-tab{width:100%;justify-content:flex-start;border-radius:10px;text-align:left}.pill-tabs--vertical .pill-tab .pill-count{margin-left:auto}.pill-tabs--vertical .pill-tab .pill-info-tip{left:calc(100% + 8px);top:50%;transform:translateY(-50%)}.pill-tabs--vertical .pill-tab:last-child .pill-info-tip{left:calc(100% + 8px);right:auto}@media(pointer:coarse),(max-width:480px){.pill-tab{min-height:44px}}\n"],
19696
19711
  changeDetection: i0.ChangeDetectionStrategy.OnPush
19697
19712
  });
19698
19713
  }
@@ -19709,8 +19724,8 @@ i0.ɵɵngDeclareClassMetadata({
19709
19724
  standalone: true,
19710
19725
  changeDetection: ChangeDetectionStrategy.OnPush,
19711
19726
  template: `
19712
- <div class="pill-wrap">
19713
- <div class="pill-tabs" [class.pill-tabs--nowrap]="noWrap()" role="tablist" [attr.aria-label]="ariaLabel()" (keydown)="onKeydown($event)" (scroll)="updateOverflow()">
19727
+ <div class="pill-wrap" [class.pill-wrap--vertical]="vertical()">
19728
+ <div class="pill-tabs" [class.pill-tabs--nowrap]="noWrap()" [class.pill-tabs--vertical]="vertical()" role="tablist" [attr.aria-label]="ariaLabel()" [attr.aria-orientation]="vertical() ? 'vertical' : null" (keydown)="onKeydown($event)" (scroll)="updateOverflow()">
19714
19729
  @for (tab of tabs(); track tab.key) {
19715
19730
  <button type="button" class="pill-tab" role="tab"
19716
19731
  [id]="name() + '-' + tab.key"
@@ -19738,7 +19753,7 @@ i0.ɵɵngDeclareClassMetadata({
19738
19753
  <span class="pill-fade pill-fade--end" [class.visible]="canScrollEnd()" aria-hidden="true" data-testid="pill-fade-end"></span>
19739
19754
  </div>
19740
19755
  `,
19741
- styles: [".pill-wrap{position:relative}.pill-fade{position:absolute;top:0;bottom:0;width:28px;pointer-events:none;opacity:0;transition:opacity .15s}.pill-fade.visible{opacity:1}.pill-fade--start{left:0;background:linear-gradient(to right,var(--ui-pill-tabs-fade, #fff),transparent)}.pill-fade--end{right:0;background:linear-gradient(to left,var(--ui-pill-tabs-fade, #fff),transparent)}.pill-tabs{display:flex;gap:8px;flex-wrap:wrap}@media(max-width:768px){.pill-tabs{flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch;padding-bottom:2px;scrollbar-width:none}.pill-tabs::-webkit-scrollbar{display:none}}.pill-tabs--nowrap .pill-tab{flex:0 0 auto;white-space:nowrap}.pill-tab{position:relative;display:inline-flex;align-items:center;gap:6px;padding:7px 16px;border-radius:999px;border:1px solid #e2e8f0;background:#fff;font-size:.8125rem;font-weight:500;color:#64748b;cursor:pointer;transition:all .15s;font-family:inherit}.pill-tab:hover:not(.disabled):not(.active){background:#f8fafc;border-color:#94a3b8}.pill-tab:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.pill-tab .pill-count{background:#e2e8f0;color:#475569;font-size:.7rem;font-weight:600;padding:1px 6px;border-radius:999px;line-height:1.4}.pill-tab.active{background:#1e293b;color:#fff;border-color:#1e293b}.pill-tab.active .pill-count{background:#fff3;color:#fff}.pill-tab.active:hover{background:#1e293b;color:#fff}.pill-tab.disabled{opacity:.4;cursor:not-allowed;pointer-events:none}.pill-tab .pill-info-icon{flex-shrink:0;opacity:.7}.pill-tab:hover .pill-info-icon,.pill-tab:focus-visible .pill-info-icon{opacity:1}.pill-tab .pill-info-tip{position:absolute;left:0;top:calc(100% + 8px);z-index:20;width:max-content;max-width:280px;padding:8px 12px;border-radius:8px;background:#1e293b;color:#fff;font-size:.75rem;font-weight:400;line-height:1.45;text-align:left;white-space:normal;box-shadow:0 4px 12px #0f172a40;opacity:0;visibility:hidden;pointer-events:none;transition:opacity .12s,visibility .12s}.pill-tab:hover .pill-info-tip,.pill-tab:focus-visible .pill-info-tip{opacity:1;visibility:visible}.pill-tab:last-child .pill-info-tip{left:auto;right:0}@media(pointer:coarse),(max-width:480px){.pill-tab{min-height:44px}}\n"]
19756
+ styles: [".pill-wrap{position:relative}.pill-fade{position:absolute;top:0;bottom:0;width:28px;pointer-events:none;opacity:0;transition:opacity .15s}.pill-fade.visible{opacity:1}.pill-fade--start{left:0;background:linear-gradient(to right,var(--ui-pill-tabs-fade, #fff),transparent)}.pill-fade--end{right:0;background:linear-gradient(to left,var(--ui-pill-tabs-fade, #fff),transparent)}.pill-tabs{display:flex;gap:8px;flex-wrap:wrap}@media(max-width:768px){.pill-tabs{flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch;padding-bottom:2px;scrollbar-width:none}.pill-tabs::-webkit-scrollbar{display:none}}.pill-tabs--nowrap .pill-tab{flex:0 0 auto;white-space:nowrap}.pill-tab{position:relative;display:inline-flex;align-items:center;gap:6px;padding:7px 16px;border-radius:999px;border:1px solid #e2e8f0;background:#fff;font-size:.8125rem;font-weight:500;color:#64748b;cursor:pointer;transition:all .15s;font-family:inherit}.pill-tab:hover:not(.disabled):not(.active){background:#f8fafc;border-color:#94a3b8}.pill-tab:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.pill-tab .pill-count{background:#e2e8f0;color:#475569;font-size:.7rem;font-weight:600;padding:1px 6px;border-radius:999px;line-height:1.4}.pill-tab.active{background:#1e293b;color:#fff;border-color:#1e293b}.pill-tab.active .pill-count{background:#fff3;color:#fff}.pill-tab.active:hover{background:#1e293b;color:#fff}.pill-tab.disabled{opacity:.4;cursor:not-allowed;pointer-events:none}.pill-tab .pill-info-icon{flex-shrink:0;opacity:.7}.pill-tab:hover .pill-info-icon,.pill-tab:focus-visible .pill-info-icon{opacity:1}.pill-tab .pill-info-tip{position:absolute;left:0;top:calc(100% + 8px);z-index:20;width:max-content;max-width:280px;padding:8px 12px;border-radius:8px;background:#1e293b;color:#fff;font-size:.75rem;font-weight:400;line-height:1.45;text-align:left;white-space:normal;box-shadow:0 4px 12px #0f172a40;opacity:0;visibility:hidden;pointer-events:none;transition:opacity .12s,visibility .12s}.pill-tab:hover .pill-info-tip,.pill-tab:focus-visible .pill-info-tip{opacity:1;visibility:visible}.pill-tab:last-child .pill-info-tip{left:auto;right:0}.pill-wrap--vertical .pill-fade{display:none}.pill-tabs.pill-tabs--vertical{flex-direction:column;flex-wrap:nowrap;overflow:visible;gap:4px;padding-bottom:0}.pill-tabs--vertical .pill-tab{width:100%;justify-content:flex-start;border-radius:10px;text-align:left}.pill-tabs--vertical .pill-tab .pill-count{margin-left:auto}.pill-tabs--vertical .pill-tab .pill-info-tip{left:calc(100% + 8px);top:50%;transform:translateY(-50%)}.pill-tabs--vertical .pill-tab:last-child .pill-info-tip{left:calc(100% + 8px);right:auto}@media(pointer:coarse),(max-width:480px){.pill-tab{min-height:44px}}\n"]
19742
19757
  }]
19743
19758
  }],
19744
19759
  ctorParameters: () => [],
@@ -19783,6 +19798,14 @@ i0.ɵɵngDeclareClassMetadata({
19783
19798
  required: false
19784
19799
  }]
19785
19800
  }],
19801
+ orientation: [{
19802
+ type: i0.Input,
19803
+ args: [{
19804
+ isSignal: true,
19805
+ alias: "orientation",
19806
+ required: false
19807
+ }]
19808
+ }],
19786
19809
  tabChange: [{
19787
19810
  type: i0.Output,
19788
19811
  args: ["tabChange"]
@@ -20845,18 +20868,21 @@ var TextareaInputComponent = class TextareaInputComponent {
20845
20868
  template: `
20846
20869
  <div class="ta-field" [class.ta-error]="_activeError()" [class.ta-disabled]="disabled()">
20847
20870
  @if (label()) {
20848
- @if (hintAsDescription()) {
20849
- <div class="ta-head">
20850
- <label class="ta-label" [for]="_inputId">{{ label() }}@if (required()) { <span class="ta-required" aria-hidden="true">*</span> }</label>
20851
- @if (hint()) { <span class="ta-hint-inline" [id]="_inputId + '-hint'">({{ hint() }})</span> }
20852
- </div>
20853
- } @else {
20854
- <label class="ta-label" [for]="_inputId">
20855
- {{ label() }}
20856
- @if (required()) { <span class="ta-required" aria-hidden="true">*</span> }
20857
- @if (hint()) { <span class="ta-hint-inline">({{ hint() }})</span> }
20858
- </label>
20859
- }
20871
+ <div class="ta-label-row">
20872
+ @if (hintAsDescription()) {
20873
+ <div class="ta-head">
20874
+ <label class="ta-label" [for]="_inputId">{{ label() }}@if (required()) { <span class="ta-required" aria-hidden="true">*</span> }</label>
20875
+ @if (hint()) { <span class="ta-hint-inline" [id]="_inputId + '-hint'">({{ hint() }})</span> }
20876
+ </div>
20877
+ } @else {
20878
+ <label class="ta-label" [for]="_inputId">
20879
+ {{ label() }}
20880
+ @if (required()) { <span class="ta-required" aria-hidden="true">*</span> }
20881
+ @if (hint()) { <span class="ta-hint-inline">({{ hint() }})</span> }
20882
+ </label>
20883
+ }
20884
+ <ng-content select="[uiLabelEnd]" />
20885
+ </div>
20860
20886
  }
20861
20887
  <textarea
20862
20888
  class="ta-input"
@@ -20884,7 +20910,7 @@ var TextareaInputComponent = class TextareaInputComponent {
20884
20910
  </div>
20885
20911
  `,
20886
20912
  isInline: true,
20887
- 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 #7c8ba1;border-radius:8px;outline:none;resize:vertical;transition:border-color .15s,box-shadow .15s}.ta-input::placeholder{color:#64748b;opacity:1}.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"],
20913
+ styles: [":host{display:block}.ta-field{display:flex;flex-direction:column;gap:6px}.ta-label-row{display:flex;align-items:center;justify-content:space-between;gap:8px}.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 #7c8ba1;border-radius:8px;outline:none;resize:vertical;transition:border-color .15s,box-shadow .15s}.ta-input::placeholder{color:#64748b;opacity:1}.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"],
20888
20914
  changeDetection: i0.ChangeDetectionStrategy.OnPush
20889
20915
  });
20890
20916
  }
@@ -20919,18 +20945,21 @@ i0.ɵɵngDeclareClassMetadata({
20919
20945
  template: `
20920
20946
  <div class="ta-field" [class.ta-error]="_activeError()" [class.ta-disabled]="disabled()">
20921
20947
  @if (label()) {
20922
- @if (hintAsDescription()) {
20923
- <div class="ta-head">
20924
- <label class="ta-label" [for]="_inputId">{{ label() }}@if (required()) { <span class="ta-required" aria-hidden="true">*</span> }</label>
20925
- @if (hint()) { <span class="ta-hint-inline" [id]="_inputId + '-hint'">({{ hint() }})</span> }
20926
- </div>
20927
- } @else {
20928
- <label class="ta-label" [for]="_inputId">
20929
- {{ label() }}
20930
- @if (required()) { <span class="ta-required" aria-hidden="true">*</span> }
20931
- @if (hint()) { <span class="ta-hint-inline">({{ hint() }})</span> }
20932
- </label>
20933
- }
20948
+ <div class="ta-label-row">
20949
+ @if (hintAsDescription()) {
20950
+ <div class="ta-head">
20951
+ <label class="ta-label" [for]="_inputId">{{ label() }}@if (required()) { <span class="ta-required" aria-hidden="true">*</span> }</label>
20952
+ @if (hint()) { <span class="ta-hint-inline" [id]="_inputId + '-hint'">({{ hint() }})</span> }
20953
+ </div>
20954
+ } @else {
20955
+ <label class="ta-label" [for]="_inputId">
20956
+ {{ label() }}
20957
+ @if (required()) { <span class="ta-required" aria-hidden="true">*</span> }
20958
+ @if (hint()) { <span class="ta-hint-inline">({{ hint() }})</span> }
20959
+ </label>
20960
+ }
20961
+ <ng-content select="[uiLabelEnd]" />
20962
+ </div>
20934
20963
  }
20935
20964
  <textarea
20936
20965
  class="ta-input"
@@ -20957,7 +20986,7 @@ i0.ɵɵngDeclareClassMetadata({
20957
20986
  }
20958
20987
  </div>
20959
20988
  `,
20960
- 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 #7c8ba1;border-radius:8px;outline:none;resize:vertical;transition:border-color .15s,box-shadow .15s}.ta-input::placeholder{color:#64748b;opacity:1}.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"]
20989
+ styles: [":host{display:block}.ta-field{display:flex;flex-direction:column;gap:6px}.ta-label-row{display:flex;align-items:center;justify-content:space-between;gap:8px}.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 #7c8ba1;border-radius:8px;outline:none;resize:vertical;transition:border-color .15s,box-shadow .15s}.ta-input::placeholder{color:#64748b;opacity:1}.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"]
20961
20990
  }]
20962
20991
  }],
20963
20992
  ctorParameters: () => [],
@@ -24869,8 +24898,9 @@ var MultiSelectComponent = class MultiSelectComponent {
24869
24898
  this._selectedSet = computed(() => new Set(this.selected()), ...ngDevMode ? [{ debugName: "_selectedSet" }] : /* istanbul ignore next */ []);
24870
24899
  this._selectedOptions = computed(() => this.options().filter((o) => this._selectedSet().has(o.value)), ...ngDevMode ? [{ debugName: "_selectedOptions" }] : /* istanbul ignore next */ []);
24871
24900
  this._filteredOptions = computed(() => {
24872
- const q = this._query().trim().toLowerCase();
24873
- return q ? this.options().filter((o) => o.label.toLowerCase().includes(q)) : this.options();
24901
+ const fold = (v) => v.normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase();
24902
+ const q = fold(this._query().trim());
24903
+ return q ? this.options().filter((o) => fold(o.label).includes(q)) : this.options();
24874
24904
  }, ...ngDevMode ? [{ debugName: "_filteredOptions" }] : /* istanbul ignore next */ []);
24875
24905
  this._onChange = (_) => {};
24876
24906
  this._onTouched = () => {};
@@ -24890,6 +24920,13 @@ var MultiSelectComponent = class MultiSelectComponent {
24890
24920
  onDocumentClick(event) {
24891
24921
  if (this._open() && !this.el.nativeElement.contains(event.target)) this.close();
24892
24922
  }
24923
+ onEscape(event) {
24924
+ if (!this._open()) return;
24925
+ event.preventDefault();
24926
+ event.stopPropagation();
24927
+ this.close();
24928
+ this.el.nativeElement.querySelector(".ms-trigger")?.focus();
24929
+ }
24893
24930
  toggleOpen() {
24894
24931
  if (this.disabled()) return;
24895
24932
  if (this._open()) this.close();
@@ -25033,31 +25070,39 @@ var MultiSelectComponent = class MultiSelectComponent {
25033
25070
  class="ms-trigger"
25034
25071
  [class.ms-open]="_open()"
25035
25072
  [disabled]="disabled()"
25073
+ aria-haspopup="true"
25036
25074
  [attr.aria-expanded]="_open()"
25075
+ [attr.aria-controls]="_open() ? _id + '-options' : null"
25037
25076
  [attr.aria-labelledby]="label() ? _id + '-label' : null"
25038
- (click)="toggleOpen()">
25077
+ [attr.aria-describedby]="error() ? _id + '-error' : (hint() ? _id + '-hint' : null)"
25078
+ [attr.aria-invalid]="error() ? 'true' : null"
25079
+ [attr.aria-required]="required() ? 'true' : null"
25080
+ (click)="toggleOpen()"
25081
+ (keydown.escape)="onEscape($event)">
25039
25082
  <span class="ms-placeholder">{{ _selectedSet().size ? _selectedSet().size + ' selected' : placeholder() }}</span>
25040
25083
  <svg class="ms-chevron" [class.ms-chevron-open]="_open()" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" aria-hidden="true"><polyline points="6 9 12 15 18 9"/></svg>
25041
25084
  </button>
25042
25085
 
25043
25086
  @if (_open()) {
25044
- <div class="ms-dropdown" role="listbox" aria-multiselectable="true">
25087
+ <div class="ms-dropdown" [id]="_id + '-list'" (keydown.escape)="onEscape($event)">
25045
25088
  @if (searchable()) {
25046
25089
  <div class="ms-search-wrap">
25047
25090
  <input
25048
25091
  class="ms-search"
25049
25092
  type="text"
25050
25093
  [placeholder]="searchPlaceholder()"
25094
+ [attr.aria-label]="searchPlaceholder()"
25051
25095
  [value]="_query()"
25052
25096
  (input)="_query.set($any($event.target).value)" />
25053
25097
  </div>
25054
25098
  }
25055
- <div class="ms-options">
25099
+ <div class="ms-options" role="group" [id]="_id + '-options'" [attr.aria-labelledby]="label() ? _id + '-label' : null">
25056
25100
  @for (opt of _filteredOptions(); track opt.value) {
25057
25101
  <div class="ms-option" [class.ms-option-selected]="_selectedSet().has(opt.value)">
25058
25102
  <ui-checkbox
25059
25103
  [label]="opt.label"
25060
25104
  [checked]="_selectedSet().has(opt.value)"
25105
+ [description]="opt.description ?? ''"
25061
25106
  (checkedChange)="toggleValue(opt.value)" />
25062
25107
  </div>
25063
25108
  } @empty {
@@ -25069,9 +25114,9 @@ var MultiSelectComponent = class MultiSelectComponent {
25069
25114
  </div>
25070
25115
 
25071
25116
  @if (error()) {
25072
- <p class="ms-desc ms-desc-error" role="alert">{{ error() }}</p>
25117
+ <p class="ms-desc ms-desc-error" [id]="_id + '-error'" role="alert">{{ error() }}</p>
25073
25118
  } @else if (hint()) {
25074
- <p class="ms-desc">{{ hint() }}</p>
25119
+ <p class="ms-desc" [id]="_id + '-hint'">{{ hint() }}</p>
25075
25120
  }
25076
25121
  </div>
25077
25122
  `,
@@ -25163,31 +25208,39 @@ i0.ɵɵngDeclareClassMetadata({
25163
25208
  class="ms-trigger"
25164
25209
  [class.ms-open]="_open()"
25165
25210
  [disabled]="disabled()"
25211
+ aria-haspopup="true"
25166
25212
  [attr.aria-expanded]="_open()"
25213
+ [attr.aria-controls]="_open() ? _id + '-options' : null"
25167
25214
  [attr.aria-labelledby]="label() ? _id + '-label' : null"
25168
- (click)="toggleOpen()">
25215
+ [attr.aria-describedby]="error() ? _id + '-error' : (hint() ? _id + '-hint' : null)"
25216
+ [attr.aria-invalid]="error() ? 'true' : null"
25217
+ [attr.aria-required]="required() ? 'true' : null"
25218
+ (click)="toggleOpen()"
25219
+ (keydown.escape)="onEscape($event)">
25169
25220
  <span class="ms-placeholder">{{ _selectedSet().size ? _selectedSet().size + ' selected' : placeholder() }}</span>
25170
25221
  <svg class="ms-chevron" [class.ms-chevron-open]="_open()" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" aria-hidden="true"><polyline points="6 9 12 15 18 9"/></svg>
25171
25222
  </button>
25172
25223
 
25173
25224
  @if (_open()) {
25174
- <div class="ms-dropdown" role="listbox" aria-multiselectable="true">
25225
+ <div class="ms-dropdown" [id]="_id + '-list'" (keydown.escape)="onEscape($event)">
25175
25226
  @if (searchable()) {
25176
25227
  <div class="ms-search-wrap">
25177
25228
  <input
25178
25229
  class="ms-search"
25179
25230
  type="text"
25180
25231
  [placeholder]="searchPlaceholder()"
25232
+ [attr.aria-label]="searchPlaceholder()"
25181
25233
  [value]="_query()"
25182
25234
  (input)="_query.set($any($event.target).value)" />
25183
25235
  </div>
25184
25236
  }
25185
- <div class="ms-options">
25237
+ <div class="ms-options" role="group" [id]="_id + '-options'" [attr.aria-labelledby]="label() ? _id + '-label' : null">
25186
25238
  @for (opt of _filteredOptions(); track opt.value) {
25187
25239
  <div class="ms-option" [class.ms-option-selected]="_selectedSet().has(opt.value)">
25188
25240
  <ui-checkbox
25189
25241
  [label]="opt.label"
25190
25242
  [checked]="_selectedSet().has(opt.value)"
25243
+ [description]="opt.description ?? ''"
25191
25244
  (checkedChange)="toggleValue(opt.value)" />
25192
25245
  </div>
25193
25246
  } @empty {
@@ -25199,9 +25252,9 @@ i0.ɵɵngDeclareClassMetadata({
25199
25252
  </div>
25200
25253
 
25201
25254
  @if (error()) {
25202
- <p class="ms-desc ms-desc-error" role="alert">{{ error() }}</p>
25255
+ <p class="ms-desc ms-desc-error" [id]="_id + '-error'" role="alert">{{ error() }}</p>
25203
25256
  } @else if (hint()) {
25204
- <p class="ms-desc">{{ hint() }}</p>
25257
+ <p class="ms-desc" [id]="_id + '-hint'">{{ hint() }}</p>
25205
25258
  }
25206
25259
  </div>
25207
25260
  `,
@@ -26037,6 +26090,347 @@ i0.ɵɵngDeclareClassMetadata({
26037
26090
  }]
26038
26091
  }
26039
26092
  });
26093
+ var TextTemplatePickerComponent = class TextTemplatePickerComponent {
26094
+ constructor() {
26095
+ this.variables = input([], ...ngDevMode ? [{ debugName: "variables" }] : /* istanbul ignore next */ []);
26096
+ this.label = input("Insert variable", ...ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []);
26097
+ this.searchPlaceholder = input("Search variables...", ...ngDevMode ? [{ debugName: "searchPlaceholder" }] : /* istanbul ignore next */ []);
26098
+ this.disabled = input(false, ...ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []);
26099
+ this.picked = output();
26100
+ this._id = `ttp-${Math.random().toString(36).slice(2, 8)}`;
26101
+ this._open = signal(false, ...ngDevMode ? [{ debugName: "_open" }] : /* istanbul ignore next */ []);
26102
+ this._query = signal("", ...ngDevMode ? [{ debugName: "_query" }] : /* istanbul ignore next */ []);
26103
+ this._active = signal(0, ...ngDevMode ? [{ debugName: "_active" }] : /* istanbul ignore next */ []);
26104
+ this._top = signal(null, ...ngDevMode ? [{ debugName: "_top" }] : /* istanbul ignore next */ []);
26105
+ this._bottom = signal(null, ...ngDevMode ? [{ debugName: "_bottom" }] : /* istanbul ignore next */ []);
26106
+ this._left = signal(0, ...ngDevMode ? [{ debugName: "_left" }] : /* istanbul ignore next */ []);
26107
+ this._width = signal(320, ...ngDevMode ? [{ debugName: "_width" }] : /* istanbul ignore next */ []);
26108
+ this._maxHeight = signal(360, ...ngDevMode ? [{ debugName: "_maxHeight" }] : /* istanbul ignore next */ []);
26109
+ this.host = inject(ElementRef);
26110
+ this.injector = inject(Injector);
26111
+ this._matches = computed(() => {
26112
+ const q = TextTemplatePickerComponent.fold(this._query().trim());
26113
+ return q ? this.variables().filter((v) => TextTemplatePickerComponent.fold(v.label).includes(q)) : this.variables();
26114
+ }, ...ngDevMode ? [{ debugName: "_matches" }] : /* istanbul ignore next */ []);
26115
+ this._rows = computed(() => {
26116
+ const rows = [];
26117
+ let last;
26118
+ this._matches().forEach((v, index) => {
26119
+ if (v.group && v.group !== last) rows.push({
26120
+ kind: "group",
26121
+ key: "g:" + rows.length + ":" + v.group,
26122
+ text: v.group
26123
+ });
26124
+ last = v.group;
26125
+ rows.push({
26126
+ kind: "option",
26127
+ key: "o:" + v.value,
26128
+ text: v.label,
26129
+ variable: v,
26130
+ index
26131
+ });
26132
+ });
26133
+ return rows;
26134
+ }, ...ngDevMode ? [{ debugName: "_rows" }] : /* istanbul ignore next */ []);
26135
+ this._activeIndex = computed(() => Math.min(this._active(), Math.max(0, this._matches().length - 1)), ...ngDevMode ? [{ debugName: "_activeIndex" }] : /* istanbul ignore next */ []);
26136
+ this._activeId = computed(() => this._matches().length ? `${this._id}-o${this._activeIndex()}` : null, ...ngDevMode ? [{ debugName: "_activeId" }] : /* istanbul ignore next */ []);
26137
+ this._status = computed(() => {
26138
+ const n = this._matches().length;
26139
+ return n === 0 ? "No variables found" : n === 1 ? "1 variable" : `${n} variables`;
26140
+ }, ...ngDevMode ? [{ debugName: "_status" }] : /* istanbul ignore next */ []);
26141
+ this.onAnyScroll = (event) => {
26142
+ if (!(event.target instanceof Node && this.host.nativeElement.contains(event.target))) this.follow();
26143
+ };
26144
+ this.onViewport = () => this.follow();
26145
+ inject(DestroyRef).onDestroy(() => this.unlisten());
26146
+ }
26147
+ static fold(s) {
26148
+ return s.normalize("NFD").replace(/[̀-ͯ]/g, "").toLowerCase();
26149
+ }
26150
+ toggle() {
26151
+ if (this.disabled()) return;
26152
+ if (this._open()) this.close(false);
26153
+ else this.openList();
26154
+ }
26155
+ openFromKey(event) {
26156
+ event.preventDefault();
26157
+ if (!this._open() && !this.disabled()) this.openList();
26158
+ }
26159
+ openList() {
26160
+ this._query.set("");
26161
+ this._active.set(0);
26162
+ this.place();
26163
+ this._open.set(true);
26164
+ window.addEventListener("scroll", this.onAnyScroll, true);
26165
+ window.visualViewport?.addEventListener("resize", this.onViewport);
26166
+ window.visualViewport?.addEventListener("scroll", this.onViewport);
26167
+ afterNextRender(() => this.host.nativeElement.querySelector(".ttp-search")?.focus(), { injector: this.injector });
26168
+ }
26169
+ place() {
26170
+ const r = this.host.nativeElement.querySelector(".ttp-trigger").getBoundingClientRect();
26171
+ const vw = window.innerWidth, vh = window.innerHeight, gap = 6, margin = 8;
26172
+ const below = vh - r.bottom - gap - margin, above = r.top - gap - margin;
26173
+ const up = below < 260 && above > below;
26174
+ const room = Math.max(160, up ? above : below);
26175
+ const width = Math.min(Math.max(r.width, 320), vw - 16);
26176
+ this._width.set(width);
26177
+ this._left.set(Math.min(Math.max(margin, r.left), vw - width - margin));
26178
+ this._maxHeight.set(Math.min(360, room));
26179
+ this._top.set(up ? null : r.bottom + gap);
26180
+ this._bottom.set(up ? vh - r.top + gap : null);
26181
+ }
26182
+ onPanelMouseDown(event) {
26183
+ if (!(event.target instanceof HTMLInputElement)) event.preventDefault();
26184
+ }
26185
+ onQuery(value) {
26186
+ this._query.set(value);
26187
+ this._active.set(0);
26188
+ this.scrollActive();
26189
+ }
26190
+ onSearchKey(event) {
26191
+ const n = this._matches().length;
26192
+ if (event.key === "ArrowDown" || event.key === "ArrowUp") {
26193
+ event.preventDefault();
26194
+ if (n) this._active.set((this._activeIndex() + (event.key === "ArrowDown" ? 1 : -1) + n) % n);
26195
+ this.scrollActive();
26196
+ } else if (event.key === "Home" || event.key === "End") {
26197
+ if (n) {
26198
+ event.preventDefault();
26199
+ this._active.set(event.key === "Home" ? 0 : n - 1);
26200
+ this.scrollActive();
26201
+ }
26202
+ } else if (event.key === "Enter") {
26203
+ event.preventDefault();
26204
+ const v = this._matches()[this._activeIndex()];
26205
+ if (v) this.pick(v);
26206
+ } else if (event.key === "Tab") this.close(true);
26207
+ }
26208
+ pick(variable) {
26209
+ this.picked.emit(variable.value);
26210
+ this.close(true);
26211
+ }
26212
+ onEscape(event) {
26213
+ event.preventDefault();
26214
+ event.stopPropagation();
26215
+ this.close(true);
26216
+ }
26217
+ close(refocus) {
26218
+ this._open.set(false);
26219
+ this._query.set("");
26220
+ this.unlisten();
26221
+ if (refocus) this.host.nativeElement.querySelector(".ttp-trigger")?.focus();
26222
+ }
26223
+ scrollActive() {
26224
+ afterNextRender(() => this.host.nativeElement.querySelector(".ttp-active")?.scrollIntoView({ block: "nearest" }), { injector: this.injector });
26225
+ }
26226
+ onDocumentClick(event) {
26227
+ if (this._open() && !this.host.nativeElement.contains(event.target)) this.close(false);
26228
+ }
26229
+ onResize() {
26230
+ this.follow();
26231
+ }
26232
+ unlisten() {
26233
+ window.removeEventListener("scroll", this.onAnyScroll, true);
26234
+ window.visualViewport?.removeEventListener("resize", this.onViewport);
26235
+ window.visualViewport?.removeEventListener("scroll", this.onViewport);
26236
+ }
26237
+ follow() {
26238
+ if (!this._open()) return;
26239
+ const r = this.host.nativeElement.querySelector(".ttp-trigger").getBoundingClientRect();
26240
+ if (r.bottom < 0 || r.top > window.innerHeight || r.right < 0 || r.left > window.innerWidth) this.close(false);
26241
+ else this.place();
26242
+ }
26243
+ static {
26244
+ this.ɵfac = i0.ɵɵngDeclareFactory({
26245
+ minVersion: "12.0.0",
26246
+ version: "22.2.2",
26247
+ ngImport: i0,
26248
+ type: TextTemplatePickerComponent,
26249
+ deps: [],
26250
+ target: i0.ɵɵFactoryTarget.Component
26251
+ });
26252
+ }
26253
+ static {
26254
+ this.ɵcmp = i0.ɵɵngDeclareComponent({
26255
+ minVersion: "17.0.0",
26256
+ version: "22.2.2",
26257
+ type: TextTemplatePickerComponent,
26258
+ isStandalone: true,
26259
+ selector: "ui-text-template-picker",
26260
+ inputs: {
26261
+ variables: {
26262
+ classPropertyName: "variables",
26263
+ publicName: "variables",
26264
+ isSignal: true,
26265
+ isRequired: false,
26266
+ transformFunction: null
26267
+ },
26268
+ label: {
26269
+ classPropertyName: "label",
26270
+ publicName: "label",
26271
+ isSignal: true,
26272
+ isRequired: false,
26273
+ transformFunction: null
26274
+ },
26275
+ searchPlaceholder: {
26276
+ classPropertyName: "searchPlaceholder",
26277
+ publicName: "searchPlaceholder",
26278
+ isSignal: true,
26279
+ isRequired: false,
26280
+ transformFunction: null
26281
+ },
26282
+ disabled: {
26283
+ classPropertyName: "disabled",
26284
+ publicName: "disabled",
26285
+ isSignal: true,
26286
+ isRequired: false,
26287
+ transformFunction: null
26288
+ }
26289
+ },
26290
+ outputs: { picked: "picked" },
26291
+ host: { listeners: {
26292
+ "document:click": "onDocumentClick($event)",
26293
+ "window:resize": "onResize()"
26294
+ } },
26295
+ ngImport: i0,
26296
+ template: `
26297
+ <button type="button" class="ttp-trigger" [class.ttp-open]="_open()" [disabled]="disabled()"
26298
+ aria-haspopup="listbox" [attr.aria-expanded]="_open()" [attr.aria-controls]="_open() ? _id + '-list' : null"
26299
+ (click)="toggle()" (keydown.arrowDown)="openFromKey($event)">
26300
+ <span>{{ label() }}</span>
26301
+ <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" aria-hidden="true"><polyline points="6 9 12 15 18 9"/></svg>
26302
+ </button>
26303
+
26304
+ @if (_open()) {
26305
+ <div class="ttp-panel" [style.top.px]="_top()" [style.bottom.px]="_bottom()" [style.left.px]="_left()" [style.width.px]="_width()"
26306
+ [style.max-height.px]="_maxHeight()" (keydown.escape)="onEscape($event)" (mousedown)="onPanelMouseDown($event)">
26307
+ <div class="ttp-search-wrap">
26308
+ <input #search class="ttp-search" type="text" role="combobox" autocomplete="off" aria-autocomplete="list" aria-expanded="true"
26309
+ [attr.aria-controls]="_id + '-list'" [attr.aria-activedescendant]="_activeId()" [attr.aria-label]="searchPlaceholder()"
26310
+ [placeholder]="searchPlaceholder()" [value]="_query()"
26311
+ (input)="onQuery($any($event.target).value)" (keydown)="onSearchKey($event)" />
26312
+ </div>
26313
+ <div class="ttp-list" role="listbox" [id]="_id + '-list'" [attr.aria-label]="label()">
26314
+ @for (row of _rows(); track row.key) {
26315
+ @if (row.kind === 'group') {
26316
+ <div class="ttp-group" role="presentation" [id]="_id + '-g' + $index">{{ row.text }}</div>
26317
+ } @else {
26318
+ <div class="ttp-option" role="option" [id]="_id + '-o' + row.index" [class.ttp-active]="_activeIndex() === row.index"
26319
+ [attr.aria-selected]="_activeIndex() === row.index" (mousedown)="$event.preventDefault()" (click)="pick(row.variable!)" (mouseenter)="_active.set(row.index!)">
26320
+ {{ row.text }}
26321
+ </div>
26322
+ }
26323
+ } @empty {
26324
+ <div class="ttp-empty">No variables match "{{ _query().trim() }}"</div>
26325
+ }
26326
+ </div>
26327
+ <div class="ttp-status" role="status" aria-live="polite">{{ _status() }}</div>
26328
+ </div>
26329
+ }
26330
+ `,
26331
+ isInline: true,
26332
+ styles: [":host{display:inline-block}.ttp-trigger{display:inline-flex;align-items:center;gap:6px;padding:8px 12px;min-height:36px;box-sizing:border-box;font:inherit;font-size:.875rem;font-weight:500;color:#1e293b;background:#fff;border:1px solid #7c8ba1;border-radius:8px;cursor:pointer;transition:border-color .15s,box-shadow .15s}.ttp-trigger:hover{background:#f8fafc}.ttp-trigger:focus-visible,.ttp-trigger.ttp-open{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.ttp-trigger:disabled{opacity:.5;cursor:not-allowed}.ttp-trigger svg{flex-shrink:0;color:#64748b}.ttp-panel{position:fixed;z-index:10000;display:flex;flex-direction:column;box-sizing:border-box;background:#fff;border:1px solid #e2e8f0;border-radius:10px;box-shadow:0 4px 6px #0000000a,0 12px 28px #0000001a;max-width:calc(100vw - 16px)}.ttp-search-wrap{padding:8px;border-bottom:1px solid #e2e8f0;flex-shrink:0}.ttp-search{width:100%;box-sizing:border-box;padding:8px 10px;font:inherit;font-size:.875rem;color:#1e293b;border:1px solid #7c8ba1;border-radius:6px;outline:none}.ttp-search::placeholder{color:#64748b;opacity:1}.ttp-search:focus{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.ttp-list{overflow-y:auto;overscroll-behavior:contain;min-height:0;flex:1 1 auto}.ttp-group{position:sticky;top:0;padding:6px 14px;font-size:.6875rem;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:#64748b;background:#f8fafc;border-bottom:1px solid #f1f5f9}.ttp-option{padding:10px 14px;font-size:.875rem;color:#1e293b;cursor:pointer;border-bottom:1px solid #f1f5f9}.ttp-option.ttp-active{background:#eff6ff;color:#2563eb}.ttp-empty{padding:16px;text-align:center;font-size:.8125rem;color:#64748b}.ttp-status{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}@media(pointer:coarse),(max-width:768px){.ttp-trigger{min-height:44px}.ttp-option{padding:13px 14px}.ttp-search{font-size:1rem;min-height:44px}}\n"],
26333
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
26334
+ });
26335
+ }
26336
+ };
26337
+ i0.ɵɵngDeclareClassMetadata({
26338
+ minVersion: "12.0.0",
26339
+ version: "22.2.2",
26340
+ ngImport: i0,
26341
+ type: TextTemplatePickerComponent,
26342
+ decorators: [{
26343
+ type: Component,
26344
+ args: [{
26345
+ selector: "ui-text-template-picker",
26346
+ standalone: true,
26347
+ changeDetection: ChangeDetectionStrategy.OnPush,
26348
+ template: `
26349
+ <button type="button" class="ttp-trigger" [class.ttp-open]="_open()" [disabled]="disabled()"
26350
+ aria-haspopup="listbox" [attr.aria-expanded]="_open()" [attr.aria-controls]="_open() ? _id + '-list' : null"
26351
+ (click)="toggle()" (keydown.arrowDown)="openFromKey($event)">
26352
+ <span>{{ label() }}</span>
26353
+ <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" aria-hidden="true"><polyline points="6 9 12 15 18 9"/></svg>
26354
+ </button>
26355
+
26356
+ @if (_open()) {
26357
+ <div class="ttp-panel" [style.top.px]="_top()" [style.bottom.px]="_bottom()" [style.left.px]="_left()" [style.width.px]="_width()"
26358
+ [style.max-height.px]="_maxHeight()" (keydown.escape)="onEscape($event)" (mousedown)="onPanelMouseDown($event)">
26359
+ <div class="ttp-search-wrap">
26360
+ <input #search class="ttp-search" type="text" role="combobox" autocomplete="off" aria-autocomplete="list" aria-expanded="true"
26361
+ [attr.aria-controls]="_id + '-list'" [attr.aria-activedescendant]="_activeId()" [attr.aria-label]="searchPlaceholder()"
26362
+ [placeholder]="searchPlaceholder()" [value]="_query()"
26363
+ (input)="onQuery($any($event.target).value)" (keydown)="onSearchKey($event)" />
26364
+ </div>
26365
+ <div class="ttp-list" role="listbox" [id]="_id + '-list'" [attr.aria-label]="label()">
26366
+ @for (row of _rows(); track row.key) {
26367
+ @if (row.kind === 'group') {
26368
+ <div class="ttp-group" role="presentation" [id]="_id + '-g' + $index">{{ row.text }}</div>
26369
+ } @else {
26370
+ <div class="ttp-option" role="option" [id]="_id + '-o' + row.index" [class.ttp-active]="_activeIndex() === row.index"
26371
+ [attr.aria-selected]="_activeIndex() === row.index" (mousedown)="$event.preventDefault()" (click)="pick(row.variable!)" (mouseenter)="_active.set(row.index!)">
26372
+ {{ row.text }}
26373
+ </div>
26374
+ }
26375
+ } @empty {
26376
+ <div class="ttp-empty">No variables match "{{ _query().trim() }}"</div>
26377
+ }
26378
+ </div>
26379
+ <div class="ttp-status" role="status" aria-live="polite">{{ _status() }}</div>
26380
+ </div>
26381
+ }
26382
+ `,
26383
+ styles: [":host{display:inline-block}.ttp-trigger{display:inline-flex;align-items:center;gap:6px;padding:8px 12px;min-height:36px;box-sizing:border-box;font:inherit;font-size:.875rem;font-weight:500;color:#1e293b;background:#fff;border:1px solid #7c8ba1;border-radius:8px;cursor:pointer;transition:border-color .15s,box-shadow .15s}.ttp-trigger:hover{background:#f8fafc}.ttp-trigger:focus-visible,.ttp-trigger.ttp-open{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.ttp-trigger:disabled{opacity:.5;cursor:not-allowed}.ttp-trigger svg{flex-shrink:0;color:#64748b}.ttp-panel{position:fixed;z-index:10000;display:flex;flex-direction:column;box-sizing:border-box;background:#fff;border:1px solid #e2e8f0;border-radius:10px;box-shadow:0 4px 6px #0000000a,0 12px 28px #0000001a;max-width:calc(100vw - 16px)}.ttp-search-wrap{padding:8px;border-bottom:1px solid #e2e8f0;flex-shrink:0}.ttp-search{width:100%;box-sizing:border-box;padding:8px 10px;font:inherit;font-size:.875rem;color:#1e293b;border:1px solid #7c8ba1;border-radius:6px;outline:none}.ttp-search::placeholder{color:#64748b;opacity:1}.ttp-search:focus{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.ttp-list{overflow-y:auto;overscroll-behavior:contain;min-height:0;flex:1 1 auto}.ttp-group{position:sticky;top:0;padding:6px 14px;font-size:.6875rem;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:#64748b;background:#f8fafc;border-bottom:1px solid #f1f5f9}.ttp-option{padding:10px 14px;font-size:.875rem;color:#1e293b;cursor:pointer;border-bottom:1px solid #f1f5f9}.ttp-option.ttp-active{background:#eff6ff;color:#2563eb}.ttp-empty{padding:16px;text-align:center;font-size:.8125rem;color:#64748b}.ttp-status{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}@media(pointer:coarse),(max-width:768px){.ttp-trigger{min-height:44px}.ttp-option{padding:13px 14px}.ttp-search{font-size:1rem;min-height:44px}}\n"]
26384
+ }]
26385
+ }],
26386
+ ctorParameters: () => [],
26387
+ propDecorators: {
26388
+ variables: [{
26389
+ type: i0.Input,
26390
+ args: [{
26391
+ isSignal: true,
26392
+ alias: "variables",
26393
+ required: false
26394
+ }]
26395
+ }],
26396
+ label: [{
26397
+ type: i0.Input,
26398
+ args: [{
26399
+ isSignal: true,
26400
+ alias: "label",
26401
+ required: false
26402
+ }]
26403
+ }],
26404
+ searchPlaceholder: [{
26405
+ type: i0.Input,
26406
+ args: [{
26407
+ isSignal: true,
26408
+ alias: "searchPlaceholder",
26409
+ required: false
26410
+ }]
26411
+ }],
26412
+ disabled: [{
26413
+ type: i0.Input,
26414
+ args: [{
26415
+ isSignal: true,
26416
+ alias: "disabled",
26417
+ required: false
26418
+ }]
26419
+ }],
26420
+ picked: [{
26421
+ type: i0.Output,
26422
+ args: ["picked"]
26423
+ }],
26424
+ onDocumentClick: [{
26425
+ type: HostListener,
26426
+ args: ["document:click", ["$event"]]
26427
+ }],
26428
+ onResize: [{
26429
+ type: HostListener,
26430
+ args: ["window:resize"]
26431
+ }]
26432
+ }
26433
+ });
26040
26434
  const FOCUSABLE = "input:not([type=\"hidden\"]), select, textarea, button, [tabindex]:not([tabindex=\"-1\"]), [contenteditable=\"true\"]";
26041
26435
  var FormComponent = class FormComponent {
26042
26436
  constructor() {
@@ -26058,7 +26452,8 @@ var FormComponent = class FormComponent {
26058
26452
  let target;
26059
26453
  if (marked.matches(FOCUSABLE)) target = FormComponent._usable(marked) ? marked : void 0;
26060
26454
  else target = Array.from(marked.querySelectorAll(FOCUSABLE)).find((c) => FormComponent._usable(c));
26061
- if (target && !found.includes(target)) found.push(target);
26455
+ const sameGroup = (t) => target instanceof HTMLInputElement && target.type === "radio" && t instanceof HTMLInputElement && t.type === "radio" && t.name === target.name && t.form === target.form;
26456
+ if (target && !found.some((t) => t === target || sameGroup(t))) found.push(target);
26062
26457
  }
26063
26458
  return found;
26064
26459
  }
@@ -26398,6 +26793,7 @@ var ListItemComponent = class ListItemComponent {
26398
26793
  this.iconColor = input("slate", ...ngDevMode ? [{ debugName: "iconColor" }] : /* istanbul ignore next */ []);
26399
26794
  this.iconD = () => this.icon() ? iconPath(this.icon()) ?? null : null;
26400
26795
  this.select = output();
26796
+ this.pressable = () => this.interactive() && this.leading() === "none";
26401
26797
  this.visibleDetails = () => this.details().map((d) => typeof d === "string" ? {
26402
26798
  text: d,
26403
26799
  d: null,
@@ -26411,6 +26807,16 @@ var ListItemComponent = class ListItemComponent {
26411
26807
  get _borderedClass() {
26412
26808
  return this.bordered();
26413
26809
  }
26810
+ onRowClick(e) {
26811
+ if (!this.pressable()) return;
26812
+ if (e.target.closest("[list-item-action], [li-action]")) return;
26813
+ this.select.emit();
26814
+ }
26815
+ onRowKey(e) {
26816
+ if (!this.pressable() || e.target !== e.currentTarget) return;
26817
+ e.preventDefault();
26818
+ this.select.emit();
26819
+ }
26414
26820
  static {
26415
26821
  this.ɵfac = i0.ɵɵngDeclareFactory({
26416
26822
  minVersion: "12.0.0",
@@ -26567,7 +26973,9 @@ var ListItemComponent = class ListItemComponent {
26567
26973
  }
26568
26974
  </ng-template>
26569
26975
 
26570
- <div class="li-row" [class.li-row--highlighted]="highlighted()" [class.li-row--static]="!interactive()" [class.li-row--wrap]="wrapText() || !interactive()">
26976
+ <div class="li-row" [class.li-row--highlighted]="highlighted()" [class.li-row--pressable]="pressable()"
26977
+ [attr.role]="pressable() ? 'button' : null" [attr.tabindex]="pressable() ? 0 : null"
26978
+ (click)="onRowClick($event)" (keydown.enter)="onRowKey($event)" (keydown.space)="onRowKey($event)" [class.li-row--static]="!interactive()" [class.li-row--wrap]="wrapText() || !interactive()">
26571
26979
 
26572
26980
  @if (!interactive()) {
26573
26981
  <ng-container [ngTemplateOutlet]="tile" />
@@ -26605,7 +27013,7 @@ var ListItemComponent = class ListItemComponent {
26605
27013
  </div>
26606
27014
  `,
26607
27015
  isInline: true,
26608
- styles: ["ui-list-item{display:block}ui-list-item.li-bordered{border:1px solid var(--border, #e2e8f0);border-radius:12px;overflow:hidden;background:var(--surface, #fff);box-shadow:0 1px 2px #0f172a0a;margin-bottom:8px;transition:border-color .15s ease,box-shadow .15s ease}ui-list-item.li-bordered:last-child{margin-bottom:0}ui-list-item.li-bordered:hover{border-color:#cbd5e1;box-shadow:0 2px 6px #0f172a12}@media(prefers-reduced-motion:reduce){ui-list-item.li-bordered{transition:none}}.li-row{display:flex;align-items:flex-start;gap:14px;padding:12px 16px;border-bottom:1px solid var(--border, #e2e8f0);transition:background .12s}.li-row:last-child{border-bottom:none}.li-row:hover{background:var(--surface-hover, #f8fafc)}ui-list-item.li-bordered .li-row{border-bottom:none;padding:14px 16px}.li-row.li-row--highlighted{background:#f0fdf4}.li-row.li-row--highlighted:hover{background:#dcfce7}.li-row.li-row--static:hover{background:transparent}.li-row.li-row--static.li-row--highlighted,.li-row.li-row--static.li-row--highlighted:hover{background:#f0fdf4}.li-body.li-body--static{cursor:default}.li-row [list-item-action],.li-row [li-action]{flex-shrink:0;align-self:center}.li-input{margin-top:3px;flex-shrink:0;accent-color:#16a34a;width:1rem;height:1rem;cursor:pointer}.li-icon{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:12px}.li-icon--slate{background:#f1f5f9;color:#475569}.li-icon--amber{background:#fef3c7;color:#b45309}.li-icon--orange{background:#ffedd5;color:#c2410c}.li-icon--red{background:#fee2e2;color:#b91c1c}.li-icon--blue{background:#dbeafe;color:#1d4ed8}.li-icon--green{background:#dcfce7;color:#15803d}.li-icon--purple{background:#f3e8ff;color:#7e22ce}.li-icon--teal{background:#ccfbf1;color:#0f766e}.li-body{flex:1;min-width:0;cursor:pointer;display:flex;flex-direction:column;gap:6px}.li-title-row{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.li-title{font-size:.9375rem;font-weight:600;line-height:1.4;letter-spacing:-.005em;color:var(--text-primary, #0f172a)}.li-row--wrap .li-title{min-width:0;word-break:break-word;overflow-wrap:anywhere}.li-details{display:flex;flex-direction:column;gap:3px;font-size:.8125rem;line-height:1.4;color:var(--text-secondary, #64748b)}.li-detail{display:flex;align-items:center;gap:6px;min-width:0}.li-detail-icon{flex:0 0 auto;color:#94a3b8}.li-detail--warning,.li-detail--warning .li-detail-icon{color:#b45309}.li-detail--danger,.li-detail--danger .li-detail-icon{color:#b91c1c}.li-row--wrap .li-detail-text{min-width:0;word-break:break-word;overflow-wrap:anywhere}\n"],
27016
+ styles: ["ui-list-item{display:block}ui-list-item.li-bordered{border:1px solid var(--border, #e2e8f0);border-radius:12px;overflow:hidden;background:var(--surface, #fff);box-shadow:0 1px 2px #0f172a0a;margin-bottom:8px;transition:border-color .15s ease,box-shadow .15s ease}ui-list-item.li-bordered:last-child{margin-bottom:0}ui-list-item.li-bordered:hover{border-color:#cbd5e1;box-shadow:0 2px 6px #0f172a12}@media(prefers-reduced-motion:reduce){ui-list-item.li-bordered{transition:none}}.li-row{display:flex;align-items:flex-start;gap:14px;padding:12px 16px;border-bottom:1px solid var(--border, #e2e8f0);transition:background .12s}.li-row:last-child{border-bottom:none}.li-row:hover{background:var(--surface-hover, #f8fafc)}ui-list-item.li-bordered .li-row{border-bottom:none;padding:14px 16px}.li-row.li-row--highlighted{background:#f0fdf4}.li-row.li-row--highlighted:hover{background:#dcfce7}.li-row.li-row--static:hover{background:transparent}.li-row.li-row--static.li-row--highlighted,.li-row.li-row--static.li-row--highlighted:hover{background:#f0fdf4}.li-row.li-row--pressable{cursor:pointer}.li-row.li-row--pressable:focus-visible{outline:2px solid var(--primary, #2563eb);outline-offset:-2px}.li-body.li-body--static{cursor:default}.li-row [list-item-action],.li-row [li-action]{flex-shrink:0;align-self:center}.li-input{margin-top:3px;flex-shrink:0;accent-color:#16a34a;width:1rem;height:1rem;cursor:pointer}.li-icon{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:12px}.li-icon--slate{background:#f1f5f9;color:#475569}.li-icon--amber{background:#fef3c7;color:#b45309}.li-icon--orange{background:#ffedd5;color:#c2410c}.li-icon--red{background:#fee2e2;color:#b91c1c}.li-icon--blue{background:#dbeafe;color:#1d4ed8}.li-icon--green{background:#dcfce7;color:#15803d}.li-icon--purple{background:#f3e8ff;color:#7e22ce}.li-icon--teal{background:#ccfbf1;color:#0f766e}.li-body{flex:1;min-width:0;cursor:pointer;display:flex;flex-direction:column;gap:6px}.li-title-row{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.li-title{font-size:.9375rem;font-weight:600;line-height:1.4;letter-spacing:-.005em;color:var(--text-primary, #0f172a)}.li-row--wrap .li-title{min-width:0;word-break:break-word;overflow-wrap:anywhere}.li-details{display:flex;flex-direction:column;gap:3px;font-size:.8125rem;line-height:1.4;color:var(--text-secondary, #64748b)}.li-detail{display:flex;align-items:center;gap:6px;min-width:0}.li-detail-icon{flex:0 0 auto;color:#94a3b8}.li-detail--warning,.li-detail--warning .li-detail-icon{color:#b45309}.li-detail--danger,.li-detail--danger .li-detail-icon{color:#b91c1c}.li-row--wrap .li-detail-text{min-width:0;word-break:break-word;overflow-wrap:anywhere}\n"],
26609
27017
  dependencies: [{
26610
27018
  kind: "component",
26611
27019
  type: BadgeComponent,
@@ -26668,7 +27076,9 @@ i0.ɵɵngDeclareClassMetadata({
26668
27076
  }
26669
27077
  </ng-template>
26670
27078
 
26671
- <div class="li-row" [class.li-row--highlighted]="highlighted()" [class.li-row--static]="!interactive()" [class.li-row--wrap]="wrapText() || !interactive()">
27079
+ <div class="li-row" [class.li-row--highlighted]="highlighted()" [class.li-row--pressable]="pressable()"
27080
+ [attr.role]="pressable() ? 'button' : null" [attr.tabindex]="pressable() ? 0 : null"
27081
+ (click)="onRowClick($event)" (keydown.enter)="onRowKey($event)" (keydown.space)="onRowKey($event)" [class.li-row--static]="!interactive()" [class.li-row--wrap]="wrapText() || !interactive()">
26672
27082
 
26673
27083
  @if (!interactive()) {
26674
27084
  <ng-container [ngTemplateOutlet]="tile" />
@@ -26705,7 +27115,7 @@ i0.ɵɵngDeclareClassMetadata({
26705
27115
 
26706
27116
  </div>
26707
27117
  `,
26708
- styles: ["ui-list-item{display:block}ui-list-item.li-bordered{border:1px solid var(--border, #e2e8f0);border-radius:12px;overflow:hidden;background:var(--surface, #fff);box-shadow:0 1px 2px #0f172a0a;margin-bottom:8px;transition:border-color .15s ease,box-shadow .15s ease}ui-list-item.li-bordered:last-child{margin-bottom:0}ui-list-item.li-bordered:hover{border-color:#cbd5e1;box-shadow:0 2px 6px #0f172a12}@media(prefers-reduced-motion:reduce){ui-list-item.li-bordered{transition:none}}.li-row{display:flex;align-items:flex-start;gap:14px;padding:12px 16px;border-bottom:1px solid var(--border, #e2e8f0);transition:background .12s}.li-row:last-child{border-bottom:none}.li-row:hover{background:var(--surface-hover, #f8fafc)}ui-list-item.li-bordered .li-row{border-bottom:none;padding:14px 16px}.li-row.li-row--highlighted{background:#f0fdf4}.li-row.li-row--highlighted:hover{background:#dcfce7}.li-row.li-row--static:hover{background:transparent}.li-row.li-row--static.li-row--highlighted,.li-row.li-row--static.li-row--highlighted:hover{background:#f0fdf4}.li-body.li-body--static{cursor:default}.li-row [list-item-action],.li-row [li-action]{flex-shrink:0;align-self:center}.li-input{margin-top:3px;flex-shrink:0;accent-color:#16a34a;width:1rem;height:1rem;cursor:pointer}.li-icon{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:12px}.li-icon--slate{background:#f1f5f9;color:#475569}.li-icon--amber{background:#fef3c7;color:#b45309}.li-icon--orange{background:#ffedd5;color:#c2410c}.li-icon--red{background:#fee2e2;color:#b91c1c}.li-icon--blue{background:#dbeafe;color:#1d4ed8}.li-icon--green{background:#dcfce7;color:#15803d}.li-icon--purple{background:#f3e8ff;color:#7e22ce}.li-icon--teal{background:#ccfbf1;color:#0f766e}.li-body{flex:1;min-width:0;cursor:pointer;display:flex;flex-direction:column;gap:6px}.li-title-row{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.li-title{font-size:.9375rem;font-weight:600;line-height:1.4;letter-spacing:-.005em;color:var(--text-primary, #0f172a)}.li-row--wrap .li-title{min-width:0;word-break:break-word;overflow-wrap:anywhere}.li-details{display:flex;flex-direction:column;gap:3px;font-size:.8125rem;line-height:1.4;color:var(--text-secondary, #64748b)}.li-detail{display:flex;align-items:center;gap:6px;min-width:0}.li-detail-icon{flex:0 0 auto;color:#94a3b8}.li-detail--warning,.li-detail--warning .li-detail-icon{color:#b45309}.li-detail--danger,.li-detail--danger .li-detail-icon{color:#b91c1c}.li-row--wrap .li-detail-text{min-width:0;word-break:break-word;overflow-wrap:anywhere}\n"]
27118
+ styles: ["ui-list-item{display:block}ui-list-item.li-bordered{border:1px solid var(--border, #e2e8f0);border-radius:12px;overflow:hidden;background:var(--surface, #fff);box-shadow:0 1px 2px #0f172a0a;margin-bottom:8px;transition:border-color .15s ease,box-shadow .15s ease}ui-list-item.li-bordered:last-child{margin-bottom:0}ui-list-item.li-bordered:hover{border-color:#cbd5e1;box-shadow:0 2px 6px #0f172a12}@media(prefers-reduced-motion:reduce){ui-list-item.li-bordered{transition:none}}.li-row{display:flex;align-items:flex-start;gap:14px;padding:12px 16px;border-bottom:1px solid var(--border, #e2e8f0);transition:background .12s}.li-row:last-child{border-bottom:none}.li-row:hover{background:var(--surface-hover, #f8fafc)}ui-list-item.li-bordered .li-row{border-bottom:none;padding:14px 16px}.li-row.li-row--highlighted{background:#f0fdf4}.li-row.li-row--highlighted:hover{background:#dcfce7}.li-row.li-row--static:hover{background:transparent}.li-row.li-row--static.li-row--highlighted,.li-row.li-row--static.li-row--highlighted:hover{background:#f0fdf4}.li-row.li-row--pressable{cursor:pointer}.li-row.li-row--pressable:focus-visible{outline:2px solid var(--primary, #2563eb);outline-offset:-2px}.li-body.li-body--static{cursor:default}.li-row [list-item-action],.li-row [li-action]{flex-shrink:0;align-self:center}.li-input{margin-top:3px;flex-shrink:0;accent-color:#16a34a;width:1rem;height:1rem;cursor:pointer}.li-icon{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:12px}.li-icon--slate{background:#f1f5f9;color:#475569}.li-icon--amber{background:#fef3c7;color:#b45309}.li-icon--orange{background:#ffedd5;color:#c2410c}.li-icon--red{background:#fee2e2;color:#b91c1c}.li-icon--blue{background:#dbeafe;color:#1d4ed8}.li-icon--green{background:#dcfce7;color:#15803d}.li-icon--purple{background:#f3e8ff;color:#7e22ce}.li-icon--teal{background:#ccfbf1;color:#0f766e}.li-body{flex:1;min-width:0;cursor:pointer;display:flex;flex-direction:column;gap:6px}.li-title-row{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.li-title{font-size:.9375rem;font-weight:600;line-height:1.4;letter-spacing:-.005em;color:var(--text-primary, #0f172a)}.li-row--wrap .li-title{min-width:0;word-break:break-word;overflow-wrap:anywhere}.li-details{display:flex;flex-direction:column;gap:3px;font-size:.8125rem;line-height:1.4;color:var(--text-secondary, #64748b)}.li-detail{display:flex;align-items:center;gap:6px;min-width:0}.li-detail-icon{flex:0 0 auto;color:#94a3b8}.li-detail--warning,.li-detail--warning .li-detail-icon{color:#b45309}.li-detail--danger,.li-detail--danger .li-detail-icon{color:#b91c1c}.li-row--wrap .li-detail-text{min-width:0;word-break:break-word;overflow-wrap:anywhere}\n"]
26709
27119
  }]
26710
27120
  }],
26711
27121
  propDecorators: {
@@ -33231,7 +33641,10 @@ var DateRangePickerComponent = class DateRangePickerComponent {
33231
33641
  source: this.selectedPreset,
33232
33642
  computation: (_, previous) => previous === void 0
33233
33643
  });
33234
- this.popoverVisible = computed(() => this.showPresets() && this.selectedPreset() === "custom" && !this.popoverDismissed(), ...ngDevMode ? [{ debugName: "popoverVisible" }] : /* istanbul ignore next */ []);
33644
+ this.popoverVisible = computed(() => {
33645
+ const dismissed = this.popoverDismissed();
33646
+ return this.showPresets() && this.selectedPreset() === "custom" && !dismissed;
33647
+ }, ...ngDevMode ? [{ debugName: "popoverVisible" }] : /* istanbul ignore next */ []);
33235
33648
  this.popTop = signal(0, ...ngDevMode ? [{ debugName: "popTop" }] : /* istanbul ignore next */ []);
33236
33649
  this.popRight = signal(16, ...ngDevMode ? [{ debugName: "popRight" }] : /* istanbul ignore next */ []);
33237
33650
  this.host = inject(ElementRef);
@@ -33424,7 +33837,8 @@ var DateRangePickerComponent = class DateRangePickerComponent {
33424
33837
  "activeKey",
33425
33838
  "ariaLabel",
33426
33839
  "name",
33427
- "noWrap"
33840
+ "noWrap",
33841
+ "orientation"
33428
33842
  ],
33429
33843
  outputs: ["tabChange"]
33430
33844
  },
@@ -40421,7 +40835,8 @@ var CalendarComponent = class CalendarComponent {
40421
40835
  "activeKey",
40422
40836
  "ariaLabel",
40423
40837
  "name",
40424
- "noWrap"
40838
+ "noWrap",
40839
+ "orientation"
40425
40840
  ],
40426
40841
  outputs: ["tabChange"]
40427
40842
  },
@@ -43740,11 +44155,12 @@ var SetupWizardComponent = class SetupWizardComponent {
43740
44155
  }, ...ngDevMode ? [{ debugName: "intro" }] : /* istanbul ignore next */ []);
43741
44156
  this.isDone = computed(() => this.current().key === SETUP_DONE_KEY, ...ngDevMode ? [{ debugName: "isDone" }] : /* istanbul ignore next */ []);
43742
44157
  this.completedCount = computed(() => this.allSteps().filter((s) => this.completed().has(s.key) || this.skipped().has(s.key)).length, ...ngDevMode ? [{ debugName: "completedCount" }] : /* istanbul ignore next */ []);
43743
- this.stepperSteps = computed(() => this.allSteps().map((s) => ({
44158
+ this.stepperSteps = computed(() => this.allSteps().map((s, i) => ({
43744
44159
  key: s.key,
43745
44160
  label: s.label,
43746
44161
  complete: this.completed().has(s.key),
43747
- disabled: this.busy()
44162
+ disabled: this.busy(),
44163
+ selectable: i < this.index()
43748
44164
  })), ...ngDevMode ? [{ debugName: "stepperSteps" }] : /* istanbul ignore next */ []);
43749
44165
  this.summarySections = computed(() => [{ items: this.steps().map((s) => ({
43750
44166
  label: s.label,
@@ -43790,6 +44206,9 @@ var SetupWizardComponent = class SetupWizardComponent {
43790
44206
  templateFor(key) {
43791
44207
  return this.stepTemplates().find((d) => d.key() === key)?.template ?? null;
43792
44208
  }
44209
+ goToPast(key) {
44210
+ if (this.allSteps().findIndex((s) => s.key === key) < this.index()) this.goTo(key);
44211
+ }
43793
44212
  goTo(key) {
43794
44213
  if (!this.busy() && this.allSteps().some((s) => s.key === key)) this.enter(key);
43795
44214
  }
@@ -43924,6 +44343,7 @@ var SetupWizardComponent = class SetupWizardComponent {
43924
44343
  return imp?.resultTitle ? imp.resultTitle(n) : `${n} ${(imp?.config.entityNamePlural ?? "records").toLowerCase()} imported successfully.`;
43925
44344
  }
43926
44345
  continueFromImport() {
44346
+ if (this.importBlocked()) return;
43927
44347
  this.advanceFrom(this.current().key);
43928
44348
  }
43929
44349
  loadStatuses(list) {
@@ -44133,7 +44553,7 @@ var SetupWizardComponent = class SetupWizardComponent {
44133
44553
  <span class="sw-brand-text" data-testid="setup-wizard-brand">{{ t().brand }}</span>
44134
44554
  </div>
44135
44555
  <ui-stepper class="sw-step-nav" [ariaLabel]="t().stepperLabel" orientation="vertical" size="sm" compact="md"
44136
- [steps]="stepperSteps()" [current]="currentKey()" [clickable]="true" [linear]="false" (stepClick)="goTo($event)" />
44556
+ [steps]="stepperSteps()" [current]="currentKey()" [clickable]="true" [linear]="false" (stepClick)="goToPast($event)" />
44137
44557
  </div>
44138
44558
  <div class="sw-sidebar-bottom">
44139
44559
  <ui-progress-bar [value]="completedCount()" [max]="allSteps().length" ariaLabel="Setup progress" />
@@ -44457,7 +44877,8 @@ var SetupWizardComponent = class SetupWizardComponent {
44457
44877
  "activeKey",
44458
44878
  "ariaLabel",
44459
44879
  "name",
44460
- "noWrap"
44880
+ "noWrap",
44881
+ "orientation"
44461
44882
  ],
44462
44883
  outputs: ["tabChange"]
44463
44884
  },
@@ -44616,7 +45037,7 @@ i0.ɵɵngDeclareClassMetadata({
44616
45037
  <span class="sw-brand-text" data-testid="setup-wizard-brand">{{ t().brand }}</span>
44617
45038
  </div>
44618
45039
  <ui-stepper class="sw-step-nav" [ariaLabel]="t().stepperLabel" orientation="vertical" size="sm" compact="md"
44619
- [steps]="stepperSteps()" [current]="currentKey()" [clickable]="true" [linear]="false" (stepClick)="goTo($event)" />
45040
+ [steps]="stepperSteps()" [current]="currentKey()" [clickable]="true" [linear]="false" (stepClick)="goToPast($event)" />
44620
45041
  </div>
44621
45042
  <div class="sw-sidebar-bottom">
44622
45043
  <ui-progress-bar [value]="completedCount()" [max]="allSteps().length" ariaLabel="Setup progress" />
@@ -46081,12 +46502,12 @@ var EmailTemplateEditorComponent = class EmailTemplateEditorComponent {
46081
46502
 
46082
46503
  <div class="form-field">
46083
46504
  <ui-text-input label="Name" [required]="true" [(ngModel)]="name" [readonly]="!canWrite()" [maxlength]="maxTextLength()"
46084
- [placeholder]="namePlaceholder()" [error]="nameErrorShown()" (blurred)="nameTouched.set(true)" />
46505
+ [placeholder]="namePlaceholder()" [error]="nameErrorShown()" [showErrors]="nameTouched() || submitAttempted()" (blurred)="nameTouched.set(true)" />
46085
46506
  </div>
46086
46507
 
46087
46508
  <div class="form-field">
46088
46509
  <ui-text-input label="Subject" [required]="true" [(ngModel)]="subject" [readonly]="!canWrite()" [maxlength]="maxTextLength()"
46089
- [placeholder]="subjectPlaceholder()" [error]="subjectErrorShown()" (blurred)="subjectTouched.set(true)">
46510
+ [placeholder]="subjectPlaceholder()" [error]="subjectErrorShown()" [showErrors]="subjectTouched() || submitAttempted()" (blurred)="subjectTouched.set(true)">
46090
46511
  </ui-text-input>
46091
46512
  </div>
46092
46513
 
@@ -46333,12 +46754,12 @@ var EmailTemplateEditorComponent = class EmailTemplateEditorComponent {
46333
46754
  }
46334
46755
  </section>
46335
46756
 
46336
- <!-- RIGHT PANEL: Blocks, Variables, Video -->
46337
- <aside class="panel-right" aria-label="Blocks, variables and video">
46757
+ <!-- RIGHT PANEL: Blocks, Variables, Video (the word video appears only while the Video tab is on) -->
46758
+ <aside class="panel-right" [attr.aria-label]="videosEnabled() ? 'Blocks, variables and video' : 'Blocks and variables'">
46338
46759
  @if (!canWrite()) {
46339
46760
  <div class="right-panel-body" data-testid="tpl-readonly-tools-note">
46340
46761
  <h4 class="right-section-title">Read only</h4>
46341
- <p class="right-section-hint">Blocks, variables and videos can only be added to a template you can edit.</p>
46762
+ <p class="right-section-hint">{{ videosEnabled() ? 'Blocks, variables and videos can only be added to a template you can edit.' : 'Blocks and variables can only be added to a template you can edit.' }}</p>
46342
46763
  </div>
46343
46764
  } @else {
46344
46765
  <div class="right-tabs" role="tablist" aria-label="Right panel sections">
@@ -46653,7 +47074,8 @@ var EmailTemplateEditorComponent = class EmailTemplateEditorComponent {
46653
47074
  "activeKey",
46654
47075
  "ariaLabel",
46655
47076
  "name",
46656
- "noWrap"
47077
+ "noWrap",
47078
+ "orientation"
46657
47079
  ],
46658
47080
  outputs: ["tabChange"]
46659
47081
  },
@@ -46865,12 +47287,12 @@ i0.ɵɵngDeclareClassMetadata({
46865
47287
 
46866
47288
  <div class="form-field">
46867
47289
  <ui-text-input label="Name" [required]="true" [(ngModel)]="name" [readonly]="!canWrite()" [maxlength]="maxTextLength()"
46868
- [placeholder]="namePlaceholder()" [error]="nameErrorShown()" (blurred)="nameTouched.set(true)" />
47290
+ [placeholder]="namePlaceholder()" [error]="nameErrorShown()" [showErrors]="nameTouched() || submitAttempted()" (blurred)="nameTouched.set(true)" />
46869
47291
  </div>
46870
47292
 
46871
47293
  <div class="form-field">
46872
47294
  <ui-text-input label="Subject" [required]="true" [(ngModel)]="subject" [readonly]="!canWrite()" [maxlength]="maxTextLength()"
46873
- [placeholder]="subjectPlaceholder()" [error]="subjectErrorShown()" (blurred)="subjectTouched.set(true)">
47295
+ [placeholder]="subjectPlaceholder()" [error]="subjectErrorShown()" [showErrors]="subjectTouched() || submitAttempted()" (blurred)="subjectTouched.set(true)">
46874
47296
  </ui-text-input>
46875
47297
  </div>
46876
47298
 
@@ -47117,12 +47539,12 @@ i0.ɵɵngDeclareClassMetadata({
47117
47539
  }
47118
47540
  </section>
47119
47541
 
47120
- <!-- RIGHT PANEL: Blocks, Variables, Video -->
47121
- <aside class="panel-right" aria-label="Blocks, variables and video">
47542
+ <!-- RIGHT PANEL: Blocks, Variables, Video (the word video appears only while the Video tab is on) -->
47543
+ <aside class="panel-right" [attr.aria-label]="videosEnabled() ? 'Blocks, variables and video' : 'Blocks and variables'">
47122
47544
  @if (!canWrite()) {
47123
47545
  <div class="right-panel-body" data-testid="tpl-readonly-tools-note">
47124
47546
  <h4 class="right-section-title">Read only</h4>
47125
- <p class="right-section-hint">Blocks, variables and videos can only be added to a template you can edit.</p>
47547
+ <p class="right-section-hint">{{ videosEnabled() ? 'Blocks, variables and videos can only be added to a template you can edit.' : 'Blocks and variables can only be added to a template you can edit.' }}</p>
47126
47548
  </div>
47127
47549
  } @else {
47128
47550
  <div class="right-tabs" role="tablist" aria-label="Right panel sections">
@@ -47535,6 +47957,6 @@ i0.ɵɵngDeclareClassMetadata({
47535
47957
  }]
47536
47958
  }
47537
47959
  });
47538
- export { ActionBarComponent, AlertComponent, AppShellComponent, AudioPlayerComponent, AvatarComponent, BADGE_VARIANT_STYLES, BadgeComponent, BarRowComponent, BoardCardDirective, BoardComponent, BulkMessagePanelComponent, BusinessHoursComponent, ButtonComponent, CalendarComponent, CardListItemComponent, CheckboxComponent, CheckboxTrailingDirective, ChipComponent, ChipGroupComponent, ColorInputComponent, ColumnFilterComponent, ColumnsComponent, ComboboxComponent, ConfirmOutletComponent, ConfirmService, ContactPickerComponent, DEFAULT_EMAIL_TEMPLATE_BLOCK_GROUPS, DEFAULT_EMAIL_TEMPLATE_VARIABLE_GROUPS, DEFAULT_PASSWORD_RULES, DROPDOWN_GROUP, DataTableComponent, DateInputComponent, DateRangePickerComponent, DatetimeInputComponent, DetailCardComponent, DiscountSelectorComponent, DividerComponent, DropdownComponent, EMAIL_BLOCK_DRAG_TYPE, EMAIL_TEMPLATE_MAX_BODY, EMAIL_TEMPLATE_MAX_TEXT, EMAIL_TEMPLATE_START_TEXT, EmailTemplateEditorComponent, EmptyStateComponent, ErrorComponent, ErrorStateComponent, FORGEROUTE_CONFIG, FadeComponent, FileInputComponent, FixedFooterComponent, FormColSpanDirective, FormComponent, FormRowComponent, FormSectionComponent, HintComponent, IDX_BEHAVIOR_SIGNALS, INTEGRATION_CATALOG, INTEGRATION_FIELD_DEFS, INTEGRATION_GROUP_ORDER, INTEGRATION_OPTION_DEFS, IconComponent, ImageComponent, ImageGalleryComponent, ImageGalleryDialogComponent, ImagePreviewComponent, ImageRepositionComponent, ImportExportComponent, ImportSourceGridComponent, KpiCardComponent, LAYOUT_GAP_PX, ListComponent, ListItemComponent, LiveRegionComponent, MAX_EMAIL_ADDRESS_LENGTH, ModalComponent, MoreMenuComponent, MultiSelectComponent, NOTES_MAX_LENGTH, NotesComponent, OptionCardComponent, PHONE_NUMBER_AREA_CODE_LENGTH, PHONE_NUMBER_ZIP_LENGTH, PageComponent, PaginationComponent, PanelInfoListComponent, PasswordRequirementsComponent, PdfHotspotComponent, PhoneNumberPickerComponent, PillTabsComponent, ProgressBarComponent, ProgressRingComponent, QrCodeComponent, QuickFilterTabsComponent, RICH_TEXT_OPTIONS, RadioComponent, RadioGroupComponent, RadioMatrixComponent, RadioOptionContentDirective, ReadonlyFieldsetComponent, RichTextEditorComponent, SEMANTIC_BADGE_MAP, SETUP_DONE_KEY, SETUP_INTEGRATIONS, SearchInputComponent, SectionHeaderComponent, SelectComponent, SetupWizardComponent, SetupWizardStepDirective, SetupWizardStepHeaderDirective, ShowComponent, SidePanelComponent, SidebarLayoutComponent, SignaturePadComponent, SkeletonComponent, StackComponent, StarComponent, StepperComponent, TableToolbarComponent, TextComponent, TextInputComponent, TextareaInputComponent, TimeInputComponent, TimelineComponent, ToastComponent, ToastService, ToggleBadgeComponent, ToggleComponent, TooltipDirective, US_STATES, UiFieldValidity, acceptLabel, appShellGroupsStorageKey, autoVariant, blockHasContent, buildDefaultSchedule, buildPreviewDocument, buildVideoBlockHtml, builtInActionIcon, businessTimeOptions, createFieldReveal, decodeFilterValues, digitsOnly, downloadBlob, encodeFilterValue, encodeFilterValues, errorContextInterceptor, escapeHtml, fileMatchesAccept, formatAddress, formatCategoryLabel, formatCurrency, formatFileSize, formatIsoDate, formatIsoDateTime, formatTime, formatVideoDuration, getEligibleIds, getEligibleOptions, getErrorMessage, humanReadableMessage, iconPath, insideEditorBlock, integrationPlainText, integrationsForApp, integrationsOnlyFor, isBlockDrag, isValidEmailAddress, isWebUrl, isoKey, issueToErrors, maxLengthIssue, normalizeHexColor, parseBizHours, parseIso, parseTime, passwordMeetsRules, pluralize, provideForgerouteToast, reorderItems, requiredIssue, resolveLayoutGap, resolvePreset, serializeBizHours, serializedTextLength, setupIntegrations, splitIntro };
47960
+ export { ActionBarComponent, AlertComponent, AppShellComponent, AudioPlayerComponent, AvatarComponent, BADGE_VARIANT_STYLES, BadgeComponent, BarRowComponent, BoardCardDirective, BoardComponent, BulkMessagePanelComponent, BusinessHoursComponent, ButtonComponent, CalendarComponent, CardListItemComponent, CheckboxComponent, CheckboxTrailingDirective, ChipComponent, ChipGroupComponent, ColorInputComponent, ColumnFilterComponent, ColumnsComponent, ComboboxComponent, ConfirmOutletComponent, ConfirmService, ContactPickerComponent, DEFAULT_EMAIL_TEMPLATE_BLOCK_GROUPS, DEFAULT_EMAIL_TEMPLATE_VARIABLE_GROUPS, DEFAULT_PASSWORD_RULES, DROPDOWN_GROUP, DataTableComponent, DateInputComponent, DateRangePickerComponent, DatetimeInputComponent, DetailCardComponent, DiscountSelectorComponent, DividerComponent, DropdownComponent, EMAIL_BLOCK_DRAG_TYPE, EMAIL_TEMPLATE_MAX_BODY, EMAIL_TEMPLATE_MAX_TEXT, EMAIL_TEMPLATE_START_TEXT, EmailTemplateEditorComponent, EmptyStateComponent, ErrorComponent, ErrorStateComponent, FORGEROUTE_CONFIG, FadeComponent, FileInputComponent, FixedFooterComponent, FormColSpanDirective, FormComponent, FormRowComponent, FormSectionComponent, HintComponent, IDX_BEHAVIOR_SIGNALS, INTEGRATION_CATALOG, INTEGRATION_FIELD_DEFS, INTEGRATION_GROUP_ORDER, INTEGRATION_OPTION_DEFS, IconComponent, ImageComponent, ImageGalleryComponent, ImageGalleryDialogComponent, ImagePreviewComponent, ImageRepositionComponent, ImportExportComponent, ImportSourceGridComponent, KpiCardComponent, LAYOUT_GAP_PX, ListComponent, ListItemComponent, LiveRegionComponent, MAX_EMAIL_ADDRESS_LENGTH, ModalComponent, MoreMenuComponent, MultiSelectComponent, NOTES_MAX_LENGTH, NotesComponent, OptionCardComponent, PHONE_NUMBER_AREA_CODE_LENGTH, PHONE_NUMBER_ZIP_LENGTH, PageComponent, PaginationComponent, PanelInfoListComponent, PasswordRequirementsComponent, PdfHotspotComponent, PhoneNumberPickerComponent, PillTabsComponent, ProgressBarComponent, ProgressRingComponent, QrCodeComponent, QuickFilterTabsComponent, RICH_TEXT_OPTIONS, RadioComponent, RadioGroupComponent, RadioMatrixComponent, RadioOptionContentDirective, ReadonlyFieldsetComponent, RichTextEditorComponent, SEMANTIC_BADGE_MAP, SETUP_DONE_KEY, SETUP_INTEGRATIONS, SearchInputComponent, SectionHeaderComponent, SelectComponent, SetupWizardComponent, SetupWizardStepDirective, SetupWizardStepHeaderDirective, ShowComponent, SidePanelComponent, SidebarLayoutComponent, SignaturePadComponent, SkeletonComponent, StackComponent, StarComponent, StepperComponent, TableToolbarComponent, TextComponent, TextInputComponent, TextTemplatePickerComponent, TextareaInputComponent, TimeInputComponent, TimelineComponent, ToastComponent, ToastService, ToggleBadgeComponent, ToggleComponent, TooltipDirective, US_STATES, UiFieldValidity, acceptLabel, appShellGroupsStorageKey, autoVariant, blockHasContent, buildDefaultSchedule, buildPreviewDocument, buildVideoBlockHtml, builtInActionIcon, businessTimeOptions, createFieldReveal, decodeFilterValues, digitsOnly, downloadBlob, encodeFilterValue, encodeFilterValues, errorContextInterceptor, escapeHtml, fileMatchesAccept, formatAddress, formatCategoryLabel, formatCurrency, formatFileSize, formatIsoDate, formatIsoDateTime, formatTime, formatVideoDuration, getEligibleIds, getEligibleOptions, getErrorMessage, humanReadableMessage, iconPath, insideEditorBlock, integrationPlainText, integrationsForApp, integrationsOnlyFor, isBlockDrag, isValidEmailAddress, isWebUrl, isoKey, issueToErrors, maxLengthIssue, normalizeHexColor, parseBizHours, parseIso, parseTime, passwordMeetsRules, pluralize, provideForgerouteToast, reorderItems, requiredIssue, resolveLayoutGap, resolvePreset, serializeBizHours, serializedTextLength, setupIntegrations, splitIntro };
47539
47961
 
47540
47962
  //# sourceMappingURL=forgeroute-ui.mjs.map