@forgeroute/ui 0.4.7 → 0.4.8

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.
@@ -2552,6 +2552,8 @@ var CheckboxComponent = class CheckboxComponent {
2552
2552
  constructor() {
2553
2553
  this.label = input("", ...ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []);
2554
2554
  this.ariaLabel = input("", ...ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []);
2555
+ this.testId = input("", ...ngDevMode ? [{ debugName: "testId" }] : /* istanbul ignore next */ []);
2556
+ this.headingLevel = input(null, ...ngDevMode ? [{ debugName: "headingLevel" }] : /* istanbul ignore next */ []);
2555
2557
  this.indeterminate = input(false, ...ngDevMode ? [{ debugName: "indeterminate" }] : /* istanbul ignore next */ []);
2556
2558
  this.checked = model(false, ...ngDevMode ? [{ debugName: "checked" }] : /* istanbul ignore next */ []);
2557
2559
  this.options = input([], ...ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []);
@@ -2707,6 +2709,20 @@ var CheckboxComponent = class CheckboxComponent {
2707
2709
  isRequired: false,
2708
2710
  transformFunction: null
2709
2711
  },
2712
+ testId: {
2713
+ classPropertyName: "testId",
2714
+ publicName: "testId",
2715
+ isSignal: true,
2716
+ isRequired: false,
2717
+ transformFunction: null
2718
+ },
2719
+ headingLevel: {
2720
+ classPropertyName: "headingLevel",
2721
+ publicName: "headingLevel",
2722
+ isSignal: true,
2723
+ isRequired: false,
2724
+ transformFunction: null
2725
+ },
2710
2726
  indeterminate: {
2711
2727
  classPropertyName: "indeterminate",
2712
2728
  publicName: "indeterminate",
@@ -2899,6 +2915,7 @@ var CheckboxComponent = class CheckboxComponent {
2899
2915
  class="cb-hidden"
2900
2916
  [checked]="checked()"
2901
2917
  [disabled]="disabled()"
2918
+ [attr.data-testid]="testId() || null"
2902
2919
  [attr.aria-label]="ariaLabel() || null"
2903
2920
  [attr.aria-checked]="indeterminate() && !checked() ? 'mixed' : null"
2904
2921
  [attr.aria-required]="required() ? 'true' : null"
@@ -2907,7 +2924,7 @@ var CheckboxComponent = class CheckboxComponent {
2907
2924
  (change)="onToggle($event)"
2908
2925
  />
2909
2926
  @if (label()) {
2910
- <span class="cb-label">{{ label() }}</span>
2927
+ <span class="cb-label" [attr.role]="headingLevel() ? 'heading' : null" [attr.aria-level]="headingLevel() || null">{{ label() }}</span>
2911
2928
  }
2912
2929
  <ng-content />
2913
2930
  </label>
@@ -3038,6 +3055,7 @@ i0.ɵɵngDeclareClassMetadata({
3038
3055
  class="cb-hidden"
3039
3056
  [checked]="checked()"
3040
3057
  [disabled]="disabled()"
3058
+ [attr.data-testid]="testId() || null"
3041
3059
  [attr.aria-label]="ariaLabel() || null"
3042
3060
  [attr.aria-checked]="indeterminate() && !checked() ? 'mixed' : null"
3043
3061
  [attr.aria-required]="required() ? 'true' : null"
@@ -3046,7 +3064,7 @@ i0.ɵɵngDeclareClassMetadata({
3046
3064
  (change)="onToggle($event)"
3047
3065
  />
3048
3066
  @if (label()) {
3049
- <span class="cb-label">{{ label() }}</span>
3067
+ <span class="cb-label" [attr.role]="headingLevel() ? 'heading' : null" [attr.aria-level]="headingLevel() || null">{{ label() }}</span>
3050
3068
  }
3051
3069
  <ng-content />
3052
3070
  </label>
@@ -3091,6 +3109,22 @@ i0.ɵɵngDeclareClassMetadata({
3091
3109
  required: false
3092
3110
  }]
3093
3111
  }],
3112
+ testId: [{
3113
+ type: i0.Input,
3114
+ args: [{
3115
+ isSignal: true,
3116
+ alias: "testId",
3117
+ required: false
3118
+ }]
3119
+ }],
3120
+ headingLevel: [{
3121
+ type: i0.Input,
3122
+ args: [{
3123
+ isSignal: true,
3124
+ alias: "headingLevel",
3125
+ required: false
3126
+ }]
3127
+ }],
3094
3128
  indeterminate: [{
3095
3129
  type: i0.Input,
3096
3130
  args: [{
@@ -3440,6 +3474,7 @@ var ButtonComponent = class ButtonComponent {
3440
3474
  [class]="'btn btn-anchor btn-' + variant() + ' btn-' + size()"
3441
3475
  [class.btn-full]="fullWidth()"
3442
3476
  [attr.aria-label]="ariaLabel()"
3477
+ [attr.aria-busy]="loading() ? 'true' : null"
3443
3478
  [attr.aria-describedby]="ariaDescribedBy() || null"
3444
3479
  ><ng-container [ngTemplateOutlet]="content" /></span>
3445
3480
  } @else {
@@ -3450,6 +3485,7 @@ var ButtonComponent = class ButtonComponent {
3450
3485
  [class]="'btn btn-anchor btn-' + variant() + ' btn-' + size()"
3451
3486
  [class.btn-full]="fullWidth()"
3452
3487
  [attr.aria-label]="ariaLabel()"
3488
+ [attr.aria-busy]="loading() ? 'true' : null"
3453
3489
  [attr.aria-describedby]="ariaDescribedBy() || null"
3454
3490
  ><ng-container [ngTemplateOutlet]="content" /></a>
3455
3491
  }
@@ -3461,6 +3497,7 @@ var ButtonComponent = class ButtonComponent {
3461
3497
  [class]="'btn btn-anchor btn-' + variant() + ' btn-' + size()"
3462
3498
  [class.btn-full]="fullWidth()"
3463
3499
  [attr.aria-label]="ariaLabel()"
3500
+ [attr.aria-busy]="loading() ? 'true' : null"
3464
3501
  [attr.aria-describedby]="ariaDescribedBy() || null"
3465
3502
  ><ng-container [ngTemplateOutlet]="content" /></span>
3466
3503
  } @else {
@@ -3471,6 +3508,7 @@ var ButtonComponent = class ButtonComponent {
3471
3508
  [class]="'btn btn-anchor btn-' + variant() + ' btn-' + size()"
3472
3509
  [class.btn-full]="fullWidth()"
3473
3510
  [attr.aria-label]="ariaLabel()"
3511
+ [attr.aria-busy]="loading() ? 'true' : null"
3474
3512
  [attr.aria-describedby]="ariaDescribedBy() || null"
3475
3513
  ><ng-container [ngTemplateOutlet]="content" /></a>
3476
3514
  }
@@ -3482,6 +3520,7 @@ var ButtonComponent = class ButtonComponent {
3482
3520
  [class.active]="active()"
3483
3521
  [disabled]="disabled() || loading()"
3484
3522
  [attr.aria-label]="ariaLabel()"
3523
+ [attr.aria-busy]="loading() ? 'true' : null"
3485
3524
  [attr.aria-expanded]="ariaExpanded()"
3486
3525
  [attr.aria-pressed]="ariaPressed()"
3487
3526
  [attr.aria-describedby]="ariaDescribedBy() || null"
@@ -3491,7 +3530,7 @@ var ButtonComponent = class ButtonComponent {
3491
3530
  }
3492
3531
  `,
3493
3532
  isInline: true,
3494
- styles: [":host{display:inline-flex}:host(.ui-btn-block){display:flex;width:100%}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;border:none;border-radius:8px;font-weight:600;cursor:pointer;font-family:inherit;transition:all .15s ease;white-space:nowrap}.btn:disabled{opacity:.5;cursor:not-allowed}.btn:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.btn-full{width:100%}.btn-primary{background:#3b82f6;color:#fff;border:1px solid #3B82F6}.btn-primary:hover:not(:disabled){background:#2563eb;border-color:#2563eb}.btn-secondary{background:#fff;color:#334155;border:1px solid #e2e8f0}.btn-secondary:hover:not(:disabled){background:#f8fafc;border-color:#cbd5e1}.btn-ghost{background:transparent;color:#64748b;border:1px solid transparent}.btn-ghost:hover:not(:disabled){background:#f8fafc;color:#334155}.btn-ghost-start{display:flex;width:100%;justify-content:flex-start;text-align:start;white-space:normal;background:transparent;color:#334155;border:1px solid transparent}.btn-ghost-start:hover:not(:disabled){background:#f1f5f9;color:#1e293b}.btn-danger{background:#dc2626;color:#fff;border:1px solid #dc2626}.btn-danger:hover:not(:disabled){background:#b91c1c;border-color:#b91c1c}.btn-link{background:none;color:#3b82f6;border:none;padding:0;font-weight:500}.btn-link:hover:not(:disabled){color:#60a5fa}.btn-link.btn-xs,.btn-link.btn-sm,.btn-link.btn-md,.btn-link.btn-lg{padding:0}.btn-anchor{text-decoration:none}.btn[aria-disabled=true]{opacity:.5;cursor:not-allowed;pointer-events:none}.btn-anchor.btn-link{text-decoration:underline;text-underline-offset:2px}.btn-warning{background:#f97316;color:#fff;border:1px solid #f97316}.btn-warning:hover:not(:disabled){background:#ea6c0a;border-color:#ea6c0a}.btn-tab{background:none;color:#64748b;border:none;border-bottom:2px solid transparent;border-radius:0;font-weight:600;font-size:.875rem;transition:all .15s}.btn-tab:hover:not(:disabled){background:none;color:#1e293b}.btn-tab.active{color:#3b82f6;border-bottom-color:#3b82f6}.btn-tab.btn-xs,.btn-tab.btn-sm,.btn-tab.btn-md,.btn-tab.btn-lg{padding:10px 20px;border-radius:0}.btn-icon{width:28px;height:28px;padding:0;border-radius:6px;background:transparent;border:none;color:#94a3b8}.btn-icon:hover:not(:disabled){background:#f1f5f9;color:#334155}.btn-icon-danger{width:28px;height:28px;padding:0;border-radius:6px;background:transparent;border:none;color:#94a3b8}.btn-icon-danger:hover:not(:disabled){background:#fee2e2;color:#dc2626}.btn-xs{padding:3px 8px;font-size:.75rem;border-radius:5px;gap:4px}.btn-sm{padding:6px 12px;font-size:.8125rem;border-radius:6px}.btn-md{padding:10px 16px;font-size:.875rem}.btn-lg{padding:14px 20px;font-size:1rem}@media(pointer:coarse),(max-width:480px){.btn-xs,.btn-sm,.btn-md,.btn-lg,.btn-tab{min-height:44px}.btn-link.btn-xs,.btn-link.btn-sm,.btn-link.btn-md,.btn-link.btn-lg{min-height:0}.btn-icon,.btn-icon-danger{position:relative}.btn-icon:after,.btn-icon-danger:after{content:\"\";position:absolute;inset:-8px}}.spinner{width:16px;height:16px;border:2px solid rgba(255,255,255,.3);border-top-color:currentColor;border-radius:50%;animation:spin .6s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}\n"],
3533
+ styles: [":host{display:inline-flex}:host(.ui-btn-block){display:flex;width:100%}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;border:none;border-radius:8px;font-weight:600;cursor:pointer;font-family:inherit;transition:all .15s ease;white-space:nowrap}.btn:disabled{opacity:.5;cursor:not-allowed}.btn:focus-visible{outline:2px solid var(--ui-focus, #3b82f6);outline-offset:2px}.btn-full{width:100%}.btn-primary{background:var(--ui-accent, #3B82F6);color:var(--ui-on-accent, #fff);border:1px solid var(--ui-accent, #3B82F6)}.btn-primary:hover:not(:disabled){background:var(--ui-accent-hover, #2563EB);border-color:var(--ui-accent-hover, #2563EB)}.btn-secondary{background:#fff;color:#334155;border:1px solid #e2e8f0}.btn-secondary:hover:not(:disabled){background:#f8fafc;border-color:#cbd5e1}.btn-ghost{background:transparent;color:#64748b;border:1px solid transparent}.btn-ghost:hover:not(:disabled){background:#f8fafc;color:#334155}.btn-ghost-start{display:flex;width:100%;justify-content:flex-start;text-align:start;white-space:normal;background:transparent;color:#334155;border:1px solid transparent}.btn-ghost-start:hover:not(:disabled){background:#f1f5f9;color:#1e293b}.btn-danger{background:#dc2626;color:#fff;border:1px solid #dc2626}.btn-danger:hover:not(:disabled){background:#b91c1c;border-color:#b91c1c}.btn-link{background:none;color:var(--ui-accent, #3b82f6);border:none;padding:0;font-weight:500}.btn-link:hover:not(:disabled){color:var(--ui-accent-hover, #60a5fa)}.btn-link.btn-xs,.btn-link.btn-sm,.btn-link.btn-md,.btn-link.btn-lg{padding:0}.btn-anchor{text-decoration:none}.btn[aria-disabled=true]{opacity:.5;cursor:not-allowed;pointer-events:none}.btn-anchor.btn-link{text-decoration:underline;text-underline-offset:2px}.btn-warning{background:#f97316;color:#fff;border:1px solid #f97316}.btn-warning:hover:not(:disabled){background:#ea6c0a;border-color:#ea6c0a}.btn-tab{background:none;color:#64748b;border:none;border-bottom:2px solid transparent;border-radius:0;font-weight:600;font-size:.875rem;transition:all .15s}.btn-tab:hover:not(:disabled){background:none;color:#1e293b}.btn-tab.active{color:var(--ui-accent, #3b82f6);border-bottom-color:var(--ui-accent, #3b82f6)}.btn-tab.btn-xs,.btn-tab.btn-sm,.btn-tab.btn-md,.btn-tab.btn-lg{padding:10px 20px;border-radius:0}.btn-icon{width:28px;height:28px;padding:0;border-radius:6px;background:transparent;border:none;color:#94a3b8}.btn-icon:hover:not(:disabled){background:#f1f5f9;color:#334155}.btn-icon-danger{width:28px;height:28px;padding:0;border-radius:6px;background:transparent;border:none;color:#94a3b8}.btn-icon-danger:hover:not(:disabled){background:#fee2e2;color:#dc2626}.btn-xs{padding:3px 8px;font-size:.75rem;border-radius:5px;gap:4px}.btn-sm{padding:6px 12px;font-size:.8125rem;border-radius:6px}.btn-md{padding:10px 16px;font-size:.875rem}.btn-lg{padding:14px 20px;font-size:1rem}@media(pointer:coarse),(max-width:480px){.btn-xs,.btn-sm,.btn-md,.btn-lg,.btn-tab{min-height:44px}.btn-link.btn-xs,.btn-link.btn-sm,.btn-link.btn-md,.btn-link.btn-lg{min-height:0}.btn-icon,.btn-icon-danger{position:relative}.btn-icon:after,.btn-icon-danger:after{content:\"\";position:absolute;inset:-8px}}.spinner{width:16px;height:16px;border:2px solid rgba(255,255,255,.3);border-top-color:currentColor;border-radius:50%;animation:spin .6s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}\n"],
3495
3534
  dependencies: [{
3496
3535
  kind: "directive",
3497
3536
  type: NgTemplateOutlet,
@@ -3553,6 +3592,7 @@ i0.ɵɵngDeclareClassMetadata({
3553
3592
  [class]="'btn btn-anchor btn-' + variant() + ' btn-' + size()"
3554
3593
  [class.btn-full]="fullWidth()"
3555
3594
  [attr.aria-label]="ariaLabel()"
3595
+ [attr.aria-busy]="loading() ? 'true' : null"
3556
3596
  [attr.aria-describedby]="ariaDescribedBy() || null"
3557
3597
  ><ng-container [ngTemplateOutlet]="content" /></span>
3558
3598
  } @else {
@@ -3563,6 +3603,7 @@ i0.ɵɵngDeclareClassMetadata({
3563
3603
  [class]="'btn btn-anchor btn-' + variant() + ' btn-' + size()"
3564
3604
  [class.btn-full]="fullWidth()"
3565
3605
  [attr.aria-label]="ariaLabel()"
3606
+ [attr.aria-busy]="loading() ? 'true' : null"
3566
3607
  [attr.aria-describedby]="ariaDescribedBy() || null"
3567
3608
  ><ng-container [ngTemplateOutlet]="content" /></a>
3568
3609
  }
@@ -3574,6 +3615,7 @@ i0.ɵɵngDeclareClassMetadata({
3574
3615
  [class]="'btn btn-anchor btn-' + variant() + ' btn-' + size()"
3575
3616
  [class.btn-full]="fullWidth()"
3576
3617
  [attr.aria-label]="ariaLabel()"
3618
+ [attr.aria-busy]="loading() ? 'true' : null"
3577
3619
  [attr.aria-describedby]="ariaDescribedBy() || null"
3578
3620
  ><ng-container [ngTemplateOutlet]="content" /></span>
3579
3621
  } @else {
@@ -3584,6 +3626,7 @@ i0.ɵɵngDeclareClassMetadata({
3584
3626
  [class]="'btn btn-anchor btn-' + variant() + ' btn-' + size()"
3585
3627
  [class.btn-full]="fullWidth()"
3586
3628
  [attr.aria-label]="ariaLabel()"
3629
+ [attr.aria-busy]="loading() ? 'true' : null"
3587
3630
  [attr.aria-describedby]="ariaDescribedBy() || null"
3588
3631
  ><ng-container [ngTemplateOutlet]="content" /></a>
3589
3632
  }
@@ -3595,6 +3638,7 @@ i0.ɵɵngDeclareClassMetadata({
3595
3638
  [class.active]="active()"
3596
3639
  [disabled]="disabled() || loading()"
3597
3640
  [attr.aria-label]="ariaLabel()"
3641
+ [attr.aria-busy]="loading() ? 'true' : null"
3598
3642
  [attr.aria-expanded]="ariaExpanded()"
3599
3643
  [attr.aria-pressed]="ariaPressed()"
3600
3644
  [attr.aria-describedby]="ariaDescribedBy() || null"
@@ -3603,7 +3647,7 @@ i0.ɵɵngDeclareClassMetadata({
3603
3647
  ><ng-container [ngTemplateOutlet]="content" /></button>
3604
3648
  }
3605
3649
  `,
3606
- styles: [":host{display:inline-flex}:host(.ui-btn-block){display:flex;width:100%}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;border:none;border-radius:8px;font-weight:600;cursor:pointer;font-family:inherit;transition:all .15s ease;white-space:nowrap}.btn:disabled{opacity:.5;cursor:not-allowed}.btn:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.btn-full{width:100%}.btn-primary{background:#3b82f6;color:#fff;border:1px solid #3B82F6}.btn-primary:hover:not(:disabled){background:#2563eb;border-color:#2563eb}.btn-secondary{background:#fff;color:#334155;border:1px solid #e2e8f0}.btn-secondary:hover:not(:disabled){background:#f8fafc;border-color:#cbd5e1}.btn-ghost{background:transparent;color:#64748b;border:1px solid transparent}.btn-ghost:hover:not(:disabled){background:#f8fafc;color:#334155}.btn-ghost-start{display:flex;width:100%;justify-content:flex-start;text-align:start;white-space:normal;background:transparent;color:#334155;border:1px solid transparent}.btn-ghost-start:hover:not(:disabled){background:#f1f5f9;color:#1e293b}.btn-danger{background:#dc2626;color:#fff;border:1px solid #dc2626}.btn-danger:hover:not(:disabled){background:#b91c1c;border-color:#b91c1c}.btn-link{background:none;color:#3b82f6;border:none;padding:0;font-weight:500}.btn-link:hover:not(:disabled){color:#60a5fa}.btn-link.btn-xs,.btn-link.btn-sm,.btn-link.btn-md,.btn-link.btn-lg{padding:0}.btn-anchor{text-decoration:none}.btn[aria-disabled=true]{opacity:.5;cursor:not-allowed;pointer-events:none}.btn-anchor.btn-link{text-decoration:underline;text-underline-offset:2px}.btn-warning{background:#f97316;color:#fff;border:1px solid #f97316}.btn-warning:hover:not(:disabled){background:#ea6c0a;border-color:#ea6c0a}.btn-tab{background:none;color:#64748b;border:none;border-bottom:2px solid transparent;border-radius:0;font-weight:600;font-size:.875rem;transition:all .15s}.btn-tab:hover:not(:disabled){background:none;color:#1e293b}.btn-tab.active{color:#3b82f6;border-bottom-color:#3b82f6}.btn-tab.btn-xs,.btn-tab.btn-sm,.btn-tab.btn-md,.btn-tab.btn-lg{padding:10px 20px;border-radius:0}.btn-icon{width:28px;height:28px;padding:0;border-radius:6px;background:transparent;border:none;color:#94a3b8}.btn-icon:hover:not(:disabled){background:#f1f5f9;color:#334155}.btn-icon-danger{width:28px;height:28px;padding:0;border-radius:6px;background:transparent;border:none;color:#94a3b8}.btn-icon-danger:hover:not(:disabled){background:#fee2e2;color:#dc2626}.btn-xs{padding:3px 8px;font-size:.75rem;border-radius:5px;gap:4px}.btn-sm{padding:6px 12px;font-size:.8125rem;border-radius:6px}.btn-md{padding:10px 16px;font-size:.875rem}.btn-lg{padding:14px 20px;font-size:1rem}@media(pointer:coarse),(max-width:480px){.btn-xs,.btn-sm,.btn-md,.btn-lg,.btn-tab{min-height:44px}.btn-link.btn-xs,.btn-link.btn-sm,.btn-link.btn-md,.btn-link.btn-lg{min-height:0}.btn-icon,.btn-icon-danger{position:relative}.btn-icon:after,.btn-icon-danger:after{content:\"\";position:absolute;inset:-8px}}.spinner{width:16px;height:16px;border:2px solid rgba(255,255,255,.3);border-top-color:currentColor;border-radius:50%;animation:spin .6s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}\n"]
3650
+ styles: [":host{display:inline-flex}:host(.ui-btn-block){display:flex;width:100%}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;border:none;border-radius:8px;font-weight:600;cursor:pointer;font-family:inherit;transition:all .15s ease;white-space:nowrap}.btn:disabled{opacity:.5;cursor:not-allowed}.btn:focus-visible{outline:2px solid var(--ui-focus, #3b82f6);outline-offset:2px}.btn-full{width:100%}.btn-primary{background:var(--ui-accent, #3B82F6);color:var(--ui-on-accent, #fff);border:1px solid var(--ui-accent, #3B82F6)}.btn-primary:hover:not(:disabled){background:var(--ui-accent-hover, #2563EB);border-color:var(--ui-accent-hover, #2563EB)}.btn-secondary{background:#fff;color:#334155;border:1px solid #e2e8f0}.btn-secondary:hover:not(:disabled){background:#f8fafc;border-color:#cbd5e1}.btn-ghost{background:transparent;color:#64748b;border:1px solid transparent}.btn-ghost:hover:not(:disabled){background:#f8fafc;color:#334155}.btn-ghost-start{display:flex;width:100%;justify-content:flex-start;text-align:start;white-space:normal;background:transparent;color:#334155;border:1px solid transparent}.btn-ghost-start:hover:not(:disabled){background:#f1f5f9;color:#1e293b}.btn-danger{background:#dc2626;color:#fff;border:1px solid #dc2626}.btn-danger:hover:not(:disabled){background:#b91c1c;border-color:#b91c1c}.btn-link{background:none;color:var(--ui-accent, #3b82f6);border:none;padding:0;font-weight:500}.btn-link:hover:not(:disabled){color:var(--ui-accent-hover, #60a5fa)}.btn-link.btn-xs,.btn-link.btn-sm,.btn-link.btn-md,.btn-link.btn-lg{padding:0}.btn-anchor{text-decoration:none}.btn[aria-disabled=true]{opacity:.5;cursor:not-allowed;pointer-events:none}.btn-anchor.btn-link{text-decoration:underline;text-underline-offset:2px}.btn-warning{background:#f97316;color:#fff;border:1px solid #f97316}.btn-warning:hover:not(:disabled){background:#ea6c0a;border-color:#ea6c0a}.btn-tab{background:none;color:#64748b;border:none;border-bottom:2px solid transparent;border-radius:0;font-weight:600;font-size:.875rem;transition:all .15s}.btn-tab:hover:not(:disabled){background:none;color:#1e293b}.btn-tab.active{color:var(--ui-accent, #3b82f6);border-bottom-color:var(--ui-accent, #3b82f6)}.btn-tab.btn-xs,.btn-tab.btn-sm,.btn-tab.btn-md,.btn-tab.btn-lg{padding:10px 20px;border-radius:0}.btn-icon{width:28px;height:28px;padding:0;border-radius:6px;background:transparent;border:none;color:#94a3b8}.btn-icon:hover:not(:disabled){background:#f1f5f9;color:#334155}.btn-icon-danger{width:28px;height:28px;padding:0;border-radius:6px;background:transparent;border:none;color:#94a3b8}.btn-icon-danger:hover:not(:disabled){background:#fee2e2;color:#dc2626}.btn-xs{padding:3px 8px;font-size:.75rem;border-radius:5px;gap:4px}.btn-sm{padding:6px 12px;font-size:.8125rem;border-radius:6px}.btn-md{padding:10px 16px;font-size:.875rem}.btn-lg{padding:14px 20px;font-size:1rem}@media(pointer:coarse),(max-width:480px){.btn-xs,.btn-sm,.btn-md,.btn-lg,.btn-tab{min-height:44px}.btn-link.btn-xs,.btn-link.btn-sm,.btn-link.btn-md,.btn-link.btn-lg{min-height:0}.btn-icon,.btn-icon-danger{position:relative}.btn-icon:after,.btn-icon-danger:after{content:\"\";position:absolute;inset:-8px}}.spinner{width:16px;height:16px;border:2px solid rgba(255,255,255,.3);border-top-color:currentColor;border-radius:50%;animation:spin .6s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}\n"]
3607
3651
  }]
3608
3652
  }],
3609
3653
  propDecorators: {
@@ -3786,6 +3830,7 @@ var TextInputComponent = class TextInputComponent {
3786
3830
  this.valueType = input("string", ...ngDevMode ? [{ debugName: "valueType" }] : /* istanbul ignore next */ []);
3787
3831
  this.formatter = input(void 0, ...ngDevMode ? [{ debugName: "formatter" }] : /* istanbul ignore next */ []);
3788
3832
  this.showErrors = input(false, ...ngDevMode ? [{ debugName: "showErrors" }] : /* istanbul ignore next */ []);
3833
+ this.valueChange = output();
3789
3834
  this.focused = output();
3790
3835
  this.blurred = output();
3791
3836
  this.invalidChange = output();
@@ -3858,7 +3903,9 @@ var TextInputComponent = class TextInputComponent {
3858
3903
  const format = this.formatter();
3859
3904
  if (format) val = format(val);
3860
3905
  this._value.set(val);
3861
- this._onChange(this._numeric() ? TextInputComponent._parse(val) : val);
3906
+ const emitted = this._numeric() ? TextInputComponent._parse(val) : val;
3907
+ this._onChange(emitted);
3908
+ this.valueChange.emit(emitted);
3862
3909
  const shown = this._value();
3863
3910
  if (input.value !== shown) {
3864
3911
  input.value = shown;
@@ -4111,6 +4158,7 @@ var TextInputComponent = class TextInputComponent {
4111
4158
  }
4112
4159
  },
4113
4160
  outputs: {
4161
+ valueChange: "valueChange",
4114
4162
  focused: "focused",
4115
4163
  blurred: "blurred",
4116
4164
  invalidChange: "invalidChange"
@@ -4413,6 +4461,10 @@ i0.ɵɵngDeclareClassMetadata({
4413
4461
  required: false
4414
4462
  }]
4415
4463
  }],
4464
+ valueChange: [{
4465
+ type: i0.Output,
4466
+ args: ["valueChange"]
4467
+ }],
4416
4468
  focused: [{
4417
4469
  type: i0.Output,
4418
4470
  args: ["focused"]
@@ -4826,6 +4878,8 @@ var TableToolbarComponent = class TableToolbarComponent {
4826
4878
  inputs: [
4827
4879
  "label",
4828
4880
  "ariaLabel",
4881
+ "testId",
4882
+ "headingLevel",
4829
4883
  "indeterminate",
4830
4884
  "checked",
4831
4885
  "options",
@@ -4902,6 +4956,7 @@ var TableToolbarComponent = class TableToolbarComponent {
4902
4956
  "disabled"
4903
4957
  ],
4904
4958
  outputs: [
4959
+ "valueChange",
4905
4960
  "focused",
4906
4961
  "blurred",
4907
4962
  "invalidChange"
@@ -5781,6 +5836,7 @@ var ProgressBarComponent = class ProgressBarComponent {
5781
5836
  this.max = input(100, ...ngDevMode ? [{ debugName: "max" }] : /* istanbul ignore next */ []);
5782
5837
  this.label = input("", ...ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []);
5783
5838
  this.variant = input(null, ...ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []);
5839
+ this.color = input("", ...ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []);
5784
5840
  this.tooltip = input("", ...ngDevMode ? [{ debugName: "tooltip" }] : /* istanbul ignore next */ []);
5785
5841
  this.ariaLabel = input("", ...ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []);
5786
5842
  this.ariaLabelledby = input("", ...ngDevMode ? [{ debugName: "ariaLabelledby" }] : /* istanbul ignore next */ []);
@@ -5850,6 +5906,13 @@ var ProgressBarComponent = class ProgressBarComponent {
5850
5906
  isRequired: false,
5851
5907
  transformFunction: null
5852
5908
  },
5909
+ color: {
5910
+ classPropertyName: "color",
5911
+ publicName: "color",
5912
+ isSignal: true,
5913
+ isRequired: false,
5914
+ transformFunction: null
5915
+ },
5853
5916
  tooltip: {
5854
5917
  classPropertyName: "tooltip",
5855
5918
  publicName: "tooltip",
@@ -5891,12 +5954,12 @@ var ProgressBarComponent = class ProgressBarComponent {
5891
5954
  [attr.aria-label]="ariaLabelledby() ? null : (ariaLabel() || label() || null)"
5892
5955
  [uiTooltip]="tooltip()"
5893
5956
  [attr.tabindex]="tooltip() ? 0 : null">
5894
- <div class="pb-track"><div class="pb-fill" [class]="'pb-fill pb-' + effectiveVariant()" [style.width.%]="percent()"></div></div>
5957
+ <div class="pb-track"><div class="pb-fill" [class]="'pb-fill pb-' + effectiveVariant()" [style.width.%]="percent()" [style.background]="color() || null"></div></div>
5895
5958
  @if (label()) { <span class="pb-label">{{ label() }}</span> }
5896
5959
  </div>
5897
5960
  `,
5898
5961
  isInline: true,
5899
- styles: [":host{display:block}.pb{display:flex;align-items:center;gap:8px;min-width:100px}.pb-track{flex:1;height:6px;background:#e2e8f0;border-radius:3px;overflow:hidden}.pb-fill{height:100%;border-radius:3px;transition:width .3s}@media(prefers-reduced-motion:reduce){.pb-fill{transition:none}}.pb-blue{background:#3b82f6}.pb-green{background:#16a34a}.pb-amber{background:#f59e0b}.pb-red{background:#ef4444}.pb-slate{background:#94a3b8}@media(forced-colors:active){.pb-track{background:Canvas;border:1px solid CanvasText}.pb-fill{background:Highlight;forced-color-adjust:none}}.pb-label{font-size:.75rem;font-weight:500;color:#64748b;white-space:nowrap}\n"],
5962
+ styles: [":host{display:block}.pb{display:flex;align-items:center;gap:8px;min-width:100px}.pb-track{flex:1;height:6px;background:#e2e8f0;border-radius:3px;overflow:hidden}.pb-fill{height:100%;border-radius:3px;transition:width .3s}@media(prefers-reduced-motion:reduce){.pb-fill{transition:none}}.pb-blue{background:var(--ui-progress-fill, var(--ui-accent, #3b82f6))}.pb-green{background:#16a34a}.pb-amber{background:#f59e0b}.pb-red{background:#ef4444}.pb-slate{background:#94a3b8}@media(forced-colors:active){.pb-track{background:Canvas;border:1px solid CanvasText}.pb-fill{background:Highlight;forced-color-adjust:none}}.pb-label{font-size:.75rem;font-weight:500;color:#64748b;white-space:nowrap}\n"],
5900
5963
  dependencies: [{
5901
5964
  kind: "directive",
5902
5965
  type: TooltipDirective,
@@ -5930,11 +5993,11 @@ i0.ɵɵngDeclareClassMetadata({
5930
5993
  [attr.aria-label]="ariaLabelledby() ? null : (ariaLabel() || label() || null)"
5931
5994
  [uiTooltip]="tooltip()"
5932
5995
  [attr.tabindex]="tooltip() ? 0 : null">
5933
- <div class="pb-track"><div class="pb-fill" [class]="'pb-fill pb-' + effectiveVariant()" [style.width.%]="percent()"></div></div>
5996
+ <div class="pb-track"><div class="pb-fill" [class]="'pb-fill pb-' + effectiveVariant()" [style.width.%]="percent()" [style.background]="color() || null"></div></div>
5934
5997
  @if (label()) { <span class="pb-label">{{ label() }}</span> }
5935
5998
  </div>
5936
5999
  `,
5937
- styles: [":host{display:block}.pb{display:flex;align-items:center;gap:8px;min-width:100px}.pb-track{flex:1;height:6px;background:#e2e8f0;border-radius:3px;overflow:hidden}.pb-fill{height:100%;border-radius:3px;transition:width .3s}@media(prefers-reduced-motion:reduce){.pb-fill{transition:none}}.pb-blue{background:#3b82f6}.pb-green{background:#16a34a}.pb-amber{background:#f59e0b}.pb-red{background:#ef4444}.pb-slate{background:#94a3b8}@media(forced-colors:active){.pb-track{background:Canvas;border:1px solid CanvasText}.pb-fill{background:Highlight;forced-color-adjust:none}}.pb-label{font-size:.75rem;font-weight:500;color:#64748b;white-space:nowrap}\n"]
6000
+ styles: [":host{display:block}.pb{display:flex;align-items:center;gap:8px;min-width:100px}.pb-track{flex:1;height:6px;background:#e2e8f0;border-radius:3px;overflow:hidden}.pb-fill{height:100%;border-radius:3px;transition:width .3s}@media(prefers-reduced-motion:reduce){.pb-fill{transition:none}}.pb-blue{background:var(--ui-progress-fill, var(--ui-accent, #3b82f6))}.pb-green{background:#16a34a}.pb-amber{background:#f59e0b}.pb-red{background:#ef4444}.pb-slate{background:#94a3b8}@media(forced-colors:active){.pb-track{background:Canvas;border:1px solid CanvasText}.pb-fill{background:Highlight;forced-color-adjust:none}}.pb-label{font-size:.75rem;font-weight:500;color:#64748b;white-space:nowrap}\n"]
5938
6001
  }]
5939
6002
  }],
5940
6003
  propDecorators: {
@@ -5970,6 +6033,14 @@ i0.ɵɵngDeclareClassMetadata({
5970
6033
  required: false
5971
6034
  }]
5972
6035
  }],
6036
+ color: [{
6037
+ type: i0.Input,
6038
+ args: [{
6039
+ isSignal: true,
6040
+ alias: "color",
6041
+ required: false
6042
+ }]
6043
+ }],
5973
6044
  tooltip: [{
5974
6045
  type: i0.Input,
5975
6046
  args: [{
@@ -6034,6 +6105,7 @@ var SelectComponent = class SelectComponent {
6034
6105
  this.invalid = computed(() => !!this.error() || !!this._issue(), ...ngDevMode ? [{ debugName: "invalid" }] : /* istanbul ignore next */ []);
6035
6106
  this.errorMessage = computed(() => this._issue()?.message ?? "", ...ngDevMode ? [{ debugName: "errorMessage" }] : /* istanbul ignore next */ []);
6036
6107
  this.invalidChange = output();
6108
+ this.valueChange = output();
6037
6109
  this._activeError = computed(() => this.error() || (this._reveal.revealed() ? this.errorMessage() : ""), ...ngDevMode ? [{ debugName: "_activeError" }] : /* istanbul ignore next */ []);
6038
6110
  this._onValidatorChange = () => {};
6039
6111
  this._selectId = `sl-${Math.random().toString(36).slice(2, 8)}`;
@@ -6080,7 +6152,9 @@ var SelectComponent = class SelectComponent {
6080
6152
  onChange(event) {
6081
6153
  const val = event.target.value;
6082
6154
  this._value.set(val);
6083
- this._onChange(this._emitted(val));
6155
+ const emitted = this._emitted(val);
6156
+ this._onChange(emitted);
6157
+ this.valueChange.emit(emitted);
6084
6158
  }
6085
6159
  _emitted(key) {
6086
6160
  if (this.valueType() !== "number") return key;
@@ -6203,7 +6277,10 @@ var SelectComponent = class SelectComponent {
6203
6277
  transformFunction: null
6204
6278
  }
6205
6279
  },
6206
- outputs: { invalidChange: "invalidChange" },
6280
+ outputs: {
6281
+ invalidChange: "invalidChange",
6282
+ valueChange: "valueChange"
6283
+ },
6207
6284
  providers: [
6208
6285
  {
6209
6286
  provide: NG_VALUE_ACCESSOR,
@@ -6427,6 +6504,10 @@ i0.ɵɵngDeclareClassMetadata({
6427
6504
  invalidChange: [{
6428
6505
  type: i0.Output,
6429
6506
  args: ["invalidChange"]
6507
+ }],
6508
+ valueChange: [{
6509
+ type: i0.Output,
6510
+ args: ["valueChange"]
6430
6511
  }]
6431
6512
  }
6432
6513
  });
@@ -6436,6 +6517,7 @@ var ToastService = class ToastService {
6436
6517
  this.message = signal(null, ...ngDevMode ? [{ debugName: "message" }] : /* istanbul ignore next */ []);
6437
6518
  this.type = signal("success", ...ngDevMode ? [{ debugName: "type" }] : /* istanbul ignore next */ []);
6438
6519
  this.dismissible = signal(false, ...ngDevMode ? [{ debugName: "dismissible" }] : /* istanbul ignore next */ []);
6520
+ this.persistentLiveRegion = signal(false, ...ngDevMode ? [{ debugName: "persistentLiveRegion" }] : /* istanbul ignore next */ []);
6439
6521
  this._timer = null;
6440
6522
  this._deadline = 0;
6441
6523
  this._remaining = 0;
@@ -6588,6 +6670,8 @@ var ToastComponent = class ToastComponent {
6588
6670
  this.isHost = computed(() => this._registry.host() === this._id, ...ngDevMode ? [{ debugName: "isHost" }] : /* istanbul ignore next */ []);
6589
6671
  this.dismissible = input(null, ...ngDevMode ? [{ debugName: "dismissible" }] : /* istanbul ignore next */ []);
6590
6672
  this.showClose = computed(() => this.dismissible() ?? this.toast.dismissible(), ...ngDevMode ? [{ debugName: "showClose" }] : /* istanbul ignore next */ []);
6673
+ this.persistentLiveRegion = input(null, ...ngDevMode ? [{ debugName: "persistentLiveRegion" }] : /* istanbul ignore next */ []);
6674
+ this.persistent = computed(() => this.persistentLiveRegion() ?? this.toast.persistentLiveRegion(), ...ngDevMode ? [{ debugName: "persistent" }] : /* istanbul ignore next */ []);
6591
6675
  this._adoptedMessage = signal(null, ...ngDevMode ? [{ debugName: "_adoptedMessage" }] : /* istanbul ignore next */ []);
6592
6676
  this.adopted = computed(() => {
6593
6677
  const m = this._adoptedMessage();
@@ -6634,23 +6718,44 @@ var ToastComponent = class ToastComponent {
6634
6718
  type: ToastComponent,
6635
6719
  isStandalone: true,
6636
6720
  selector: "ui-toast",
6637
- inputs: { dismissible: {
6638
- classPropertyName: "dismissible",
6639
- publicName: "dismissible",
6640
- isSignal: true,
6641
- isRequired: false,
6642
- transformFunction: null
6643
- } },
6721
+ inputs: {
6722
+ dismissible: {
6723
+ classPropertyName: "dismissible",
6724
+ publicName: "dismissible",
6725
+ isSignal: true,
6726
+ isRequired: false,
6727
+ transformFunction: null
6728
+ },
6729
+ persistentLiveRegion: {
6730
+ classPropertyName: "persistentLiveRegion",
6731
+ publicName: "persistentLiveRegion",
6732
+ isSignal: true,
6733
+ isRequired: false,
6734
+ transformFunction: null
6735
+ }
6736
+ },
6644
6737
  ngImport: i0,
6645
6738
  template: `
6646
- @if (isHost() && toast.message()) {
6739
+ @if (isHost() && persistent()) {
6740
+ <!-- Opt-in: the live regions are in the DOM before any message, so a screen reader (VoiceOver / Safari included) announces the text when it is added. -->
6741
+ <div class="t-live" role="status" [attr.aria-live]="adopted() ? 'off' : 'polite'" aria-atomic="true" data-testid="toast-live-polite">
6742
+ @if (toast.message() && toast.type() !== 'error') { <ng-container [ngTemplateOutlet]="card" /> }
6743
+ </div>
6744
+ <div class="t-live" role="alert" [attr.aria-live]="adopted() ? 'off' : 'assertive'" aria-atomic="true" data-testid="toast-live-assertive">
6745
+ @if (toast.message() && toast.type() === 'error') { <ng-container [ngTemplateOutlet]="card" /> }
6746
+ </div>
6747
+ } @else if (isHost() && toast.message()) {
6748
+ <ng-container [ngTemplateOutlet]="card" />
6749
+ }
6750
+
6751
+ <ng-template #card>
6647
6752
  <div
6648
6753
  class="t-toast"
6649
6754
  [class.t-error]="toast.type() === 'error'"
6650
6755
  [class.t-info]="toast.type() === 'info'"
6651
6756
  [class.t-adopted]="adopted()"
6652
- [attr.role]="adopted() ? null : (toast.type() === 'error' ? 'alert' : 'status')"
6653
- [attr.aria-live]="adopted() ? null : (toast.type() === 'error' ? 'assertive' : 'polite')"
6757
+ [attr.role]="adopted() || persistent() ? null : (toast.type() === 'error' ? 'alert' : 'status')"
6758
+ [attr.aria-live]="adopted() || persistent() ? null : (toast.type() === 'error' ? 'assertive' : 'polite')"
6654
6759
  (mouseenter)="setHover(true)" (mouseleave)="setHover(false)"
6655
6760
  (focusin)="setFocus(true)" (focusout)="onFocusOut($event)"
6656
6761
  (keydown.escape)="onEscape($event)">
@@ -6676,10 +6781,20 @@ var ToastComponent = class ToastComponent {
6676
6781
  </button>
6677
6782
  }
6678
6783
  </div>
6679
- }
6784
+ </ng-template>
6680
6785
  `,
6681
6786
  isInline: true,
6682
- styles: [".t-toast{position:fixed;bottom:max(24px,env(safe-area-inset-bottom,0px));left:50%;transform:translate(-50%);background:#047857;color:#fff;padding:11px 20px;border-radius:12px;font-size:.875rem;font-weight:500;z-index:9999;box-shadow:0 4px 16px #0000002e;animation:t-in .28s cubic-bezier(.16,1,.3,1);display:flex;align-items:center;gap:8px;max-width:calc(100vw - 32px - env(safe-area-inset-left,0px) - env(safe-area-inset-right,0px));overflow-wrap:anywhere;word-break:break-word}.t-error{background:#dc2626}.t-info{background:#2563eb}.t-adopted{animation:none}.t-text{min-width:0}.t-close{position:relative;flex:none;display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;margin:-4px -10px -4px 0;padding:0;border:0;border-radius:50%;background:transparent;color:inherit;cursor:pointer}.t-close:after{content:\"\";position:absolute;inset:-8px}.t-close:hover{background:#fff3}.t-close:focus-visible{outline:2px solid #fff;outline-offset:1px}@keyframes t-in{0%{opacity:0;transform:translate(-50%) translateY(10px)}to{opacity:1;transform:translate(-50%) translateY(0)}}@media(prefers-reduced-motion:reduce){.t-toast{animation:none}}@media(max-width:480px){.t-toast{bottom:max(16px,env(safe-area-inset-bottom,16px));font-size:.8125rem;padding:10px 16px}}\n"],
6787
+ styles: [".t-live{position:absolute;width:0;height:0;margin:0;padding:0;overflow:visible}.t-toast{position:fixed;bottom:max(24px,env(safe-area-inset-bottom,0px));left:50%;transform:translate(-50%);background:#047857;color:#fff;padding:11px 20px;border-radius:12px;font-size:.875rem;font-weight:500;z-index:9999;box-shadow:0 4px 16px #0000002e;animation:t-in .28s cubic-bezier(.16,1,.3,1);display:flex;align-items:center;gap:8px;max-width:calc(100vw - 32px - env(safe-area-inset-left,0px) - env(safe-area-inset-right,0px));overflow-wrap:anywhere;word-break:break-word}.t-error{background:#dc2626}.t-info{background:#2563eb}.t-adopted{animation:none}.t-text{min-width:0}.t-close{position:relative;flex:none;display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;margin:-4px -10px -4px 0;padding:0;border:0;border-radius:50%;background:transparent;color:inherit;cursor:pointer}.t-close:after{content:\"\";position:absolute;inset:-8px}.t-close:hover{background:#fff3}.t-close:focus-visible{outline:2px solid #fff;outline-offset:1px}@keyframes t-in{0%{opacity:0;transform:translate(-50%) translateY(10px)}to{opacity:1;transform:translate(-50%) translateY(0)}}@media(prefers-reduced-motion:reduce){.t-toast{animation:none}}@media(max-width:480px){.t-toast{bottom:max(16px,env(safe-area-inset-bottom,16px));font-size:.8125rem;padding:10px 16px}}\n"],
6788
+ dependencies: [{
6789
+ kind: "directive",
6790
+ type: NgTemplateOutlet,
6791
+ selector: "[ngTemplateOutlet]",
6792
+ inputs: [
6793
+ "ngTemplateOutletContext",
6794
+ "ngTemplateOutlet",
6795
+ "ngTemplateOutletInjector"
6796
+ ]
6797
+ }],
6683
6798
  changeDetection: i0.ChangeDetectionStrategy.OnPush
6684
6799
  });
6685
6800
  }
@@ -6694,16 +6809,29 @@ i0.ɵɵngDeclareClassMetadata({
6694
6809
  args: [{
6695
6810
  selector: "ui-toast",
6696
6811
  standalone: true,
6812
+ imports: [NgTemplateOutlet],
6697
6813
  changeDetection: ChangeDetectionStrategy.OnPush,
6698
6814
  template: `
6699
- @if (isHost() && toast.message()) {
6815
+ @if (isHost() && persistent()) {
6816
+ <!-- Opt-in: the live regions are in the DOM before any message, so a screen reader (VoiceOver / Safari included) announces the text when it is added. -->
6817
+ <div class="t-live" role="status" [attr.aria-live]="adopted() ? 'off' : 'polite'" aria-atomic="true" data-testid="toast-live-polite">
6818
+ @if (toast.message() && toast.type() !== 'error') { <ng-container [ngTemplateOutlet]="card" /> }
6819
+ </div>
6820
+ <div class="t-live" role="alert" [attr.aria-live]="adopted() ? 'off' : 'assertive'" aria-atomic="true" data-testid="toast-live-assertive">
6821
+ @if (toast.message() && toast.type() === 'error') { <ng-container [ngTemplateOutlet]="card" /> }
6822
+ </div>
6823
+ } @else if (isHost() && toast.message()) {
6824
+ <ng-container [ngTemplateOutlet]="card" />
6825
+ }
6826
+
6827
+ <ng-template #card>
6700
6828
  <div
6701
6829
  class="t-toast"
6702
6830
  [class.t-error]="toast.type() === 'error'"
6703
6831
  [class.t-info]="toast.type() === 'info'"
6704
6832
  [class.t-adopted]="adopted()"
6705
- [attr.role]="adopted() ? null : (toast.type() === 'error' ? 'alert' : 'status')"
6706
- [attr.aria-live]="adopted() ? null : (toast.type() === 'error' ? 'assertive' : 'polite')"
6833
+ [attr.role]="adopted() || persistent() ? null : (toast.type() === 'error' ? 'alert' : 'status')"
6834
+ [attr.aria-live]="adopted() || persistent() ? null : (toast.type() === 'error' ? 'assertive' : 'polite')"
6707
6835
  (mouseenter)="setHover(true)" (mouseleave)="setHover(false)"
6708
6836
  (focusin)="setFocus(true)" (focusout)="onFocusOut($event)"
6709
6837
  (keydown.escape)="onEscape($event)">
@@ -6729,20 +6857,30 @@ i0.ɵɵngDeclareClassMetadata({
6729
6857
  </button>
6730
6858
  }
6731
6859
  </div>
6732
- }
6860
+ </ng-template>
6733
6861
  `,
6734
- styles: [".t-toast{position:fixed;bottom:max(24px,env(safe-area-inset-bottom,0px));left:50%;transform:translate(-50%);background:#047857;color:#fff;padding:11px 20px;border-radius:12px;font-size:.875rem;font-weight:500;z-index:9999;box-shadow:0 4px 16px #0000002e;animation:t-in .28s cubic-bezier(.16,1,.3,1);display:flex;align-items:center;gap:8px;max-width:calc(100vw - 32px - env(safe-area-inset-left,0px) - env(safe-area-inset-right,0px));overflow-wrap:anywhere;word-break:break-word}.t-error{background:#dc2626}.t-info{background:#2563eb}.t-adopted{animation:none}.t-text{min-width:0}.t-close{position:relative;flex:none;display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;margin:-4px -10px -4px 0;padding:0;border:0;border-radius:50%;background:transparent;color:inherit;cursor:pointer}.t-close:after{content:\"\";position:absolute;inset:-8px}.t-close:hover{background:#fff3}.t-close:focus-visible{outline:2px solid #fff;outline-offset:1px}@keyframes t-in{0%{opacity:0;transform:translate(-50%) translateY(10px)}to{opacity:1;transform:translate(-50%) translateY(0)}}@media(prefers-reduced-motion:reduce){.t-toast{animation:none}}@media(max-width:480px){.t-toast{bottom:max(16px,env(safe-area-inset-bottom,16px));font-size:.8125rem;padding:10px 16px}}\n"]
6862
+ styles: [".t-live{position:absolute;width:0;height:0;margin:0;padding:0;overflow:visible}.t-toast{position:fixed;bottom:max(24px,env(safe-area-inset-bottom,0px));left:50%;transform:translate(-50%);background:#047857;color:#fff;padding:11px 20px;border-radius:12px;font-size:.875rem;font-weight:500;z-index:9999;box-shadow:0 4px 16px #0000002e;animation:t-in .28s cubic-bezier(.16,1,.3,1);display:flex;align-items:center;gap:8px;max-width:calc(100vw - 32px - env(safe-area-inset-left,0px) - env(safe-area-inset-right,0px));overflow-wrap:anywhere;word-break:break-word}.t-error{background:#dc2626}.t-info{background:#2563eb}.t-adopted{animation:none}.t-text{min-width:0}.t-close{position:relative;flex:none;display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;margin:-4px -10px -4px 0;padding:0;border:0;border-radius:50%;background:transparent;color:inherit;cursor:pointer}.t-close:after{content:\"\";position:absolute;inset:-8px}.t-close:hover{background:#fff3}.t-close:focus-visible{outline:2px solid #fff;outline-offset:1px}@keyframes t-in{0%{opacity:0;transform:translate(-50%) translateY(10px)}to{opacity:1;transform:translate(-50%) translateY(0)}}@media(prefers-reduced-motion:reduce){.t-toast{animation:none}}@media(max-width:480px){.t-toast{bottom:max(16px,env(safe-area-inset-bottom,16px));font-size:.8125rem;padding:10px 16px}}\n"]
6735
6863
  }]
6736
6864
  }],
6737
6865
  ctorParameters: () => [],
6738
- propDecorators: { dismissible: [{
6739
- type: i0.Input,
6740
- args: [{
6741
- isSignal: true,
6742
- alias: "dismissible",
6743
- required: false
6866
+ propDecorators: {
6867
+ dismissible: [{
6868
+ type: i0.Input,
6869
+ args: [{
6870
+ isSignal: true,
6871
+ alias: "dismissible",
6872
+ required: false
6873
+ }]
6874
+ }],
6875
+ persistentLiveRegion: [{
6876
+ type: i0.Input,
6877
+ args: [{
6878
+ isSignal: true,
6879
+ alias: "persistentLiveRegion",
6880
+ required: false
6881
+ }]
6744
6882
  }]
6745
- }] }
6883
+ }
6746
6884
  });
6747
6885
  const MAX_LENGTH = 300;
6748
6886
  const TECHNICAL = [
@@ -7456,7 +7594,7 @@ var ImportExportComponent = class ImportExportComponent {
7456
7594
  "size",
7457
7595
  "disabled"
7458
7596
  ],
7459
- outputs: ["invalidChange"]
7597
+ outputs: ["invalidChange", "valueChange"]
7460
7598
  }
7461
7599
  ],
7462
7600
  changeDetection: i0.ChangeDetectionStrategy.OnPush
@@ -10593,6 +10731,7 @@ var DataTableComponent = class DataTableComponent {
10593
10731
  "max",
10594
10732
  "label",
10595
10733
  "variant",
10734
+ "color",
10596
10735
  "tooltip",
10597
10736
  "ariaLabel",
10598
10737
  "ariaLabelledby",
@@ -10633,6 +10772,8 @@ var DataTableComponent = class DataTableComponent {
10633
10772
  inputs: [
10634
10773
  "label",
10635
10774
  "ariaLabel",
10775
+ "testId",
10776
+ "headingLevel",
10636
10777
  "indeterminate",
10637
10778
  "checked",
10638
10779
  "options",
@@ -10671,13 +10812,13 @@ var DataTableComponent = class DataTableComponent {
10671
10812
  "size",
10672
10813
  "disabled"
10673
10814
  ],
10674
- outputs: ["invalidChange"]
10815
+ outputs: ["invalidChange", "valueChange"]
10675
10816
  },
10676
10817
  {
10677
10818
  kind: "component",
10678
10819
  type: ToastComponent,
10679
10820
  selector: "ui-toast",
10680
- inputs: ["dismissible"]
10821
+ inputs: ["dismissible", "persistentLiveRegion"]
10681
10822
  },
10682
10823
  {
10683
10824
  kind: "component",
@@ -12997,6 +13138,8 @@ var StepperComponent = class StepperComponent {
12997
13138
  this.clickable = input(false, ...ngDevMode ? [{ debugName: "clickable" }] : /* istanbul ignore next */ []);
12998
13139
  this.linear = input(true, ...ngDevMode ? [{ debugName: "linear" }] : /* istanbul ignore next */ []);
12999
13140
  this.size = input("md", ...ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []);
13141
+ this.accentColor = input("", ...ngDevMode ? [{ debugName: "accentColor" }] : /* istanbul ignore next */ []);
13142
+ this.completeColor = input("", ...ngDevMode ? [{ debugName: "completeColor" }] : /* istanbul ignore next */ []);
13000
13143
  this.ariaLabel = input("Progress", ...ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []);
13001
13144
  this.labelsOnSmallScreens = input("current", ...ngDevMode ? [{ debugName: "labelsOnSmallScreens" }] : /* istanbul ignore next */ []);
13002
13145
  this.stepClick = output();
@@ -13007,10 +13150,11 @@ var StepperComponent = class StepperComponent {
13007
13150
  const clickable = this.clickable();
13008
13151
  const linear = this.linear();
13009
13152
  return steps.map((step, i) => {
13010
- const state = cur < 0 ? "upcoming" : i < cur ? "complete" : i === cur ? "current" : "upcoming";
13153
+ const derived = cur >= 0 && i < cur ? "complete" : "upcoming";
13154
+ const state = i === cur ? "current" : step.complete === void 0 ? derived : step.complete ? "complete" : "upcoming";
13011
13155
  const errorMessage = typeof step.error === "string" ? step.error : "";
13012
13156
  const error = step.error === true || errorMessage !== "";
13013
- const selectable = clickable && !step.disabled && (linear ? cur >= 0 && i <= cur : true);
13157
+ const selectable = clickable && !step.disabled && state !== "current" && (linear ? state === "complete" : true);
13014
13158
  const status = state === "complete" ? "completed" : state === "current" ? "current step" : "not started";
13015
13159
  return {
13016
13160
  step,
@@ -13091,6 +13235,20 @@ var StepperComponent = class StepperComponent {
13091
13235
  isRequired: false,
13092
13236
  transformFunction: null
13093
13237
  },
13238
+ accentColor: {
13239
+ classPropertyName: "accentColor",
13240
+ publicName: "accentColor",
13241
+ isSignal: true,
13242
+ isRequired: false,
13243
+ transformFunction: null
13244
+ },
13245
+ completeColor: {
13246
+ classPropertyName: "completeColor",
13247
+ publicName: "completeColor",
13248
+ isSignal: true,
13249
+ isRequired: false,
13250
+ transformFunction: null
13251
+ },
13094
13252
  ariaLabel: {
13095
13253
  classPropertyName: "ariaLabel",
13096
13254
  publicName: "ariaLabel",
@@ -13110,6 +13268,10 @@ var StepperComponent = class StepperComponent {
13110
13268
  current: "currentChange",
13111
13269
  stepClick: "stepClick"
13112
13270
  },
13271
+ host: { properties: {
13272
+ "style.--st-accent": "accentColor() || null",
13273
+ "style.--st-complete": "completeColor() || null"
13274
+ } },
13113
13275
  ngImport: i0,
13114
13276
  template: `
13115
13277
  <ol class="st"
@@ -13117,6 +13279,7 @@ var StepperComponent = class StepperComponent {
13117
13279
  [class.st-vertical]="orientation() === 'vertical'"
13118
13280
  [class.st-sm]="size() === 'sm'"
13119
13281
  [class.st-labels-current]="labelsOnSmallScreens() === 'current'"
13282
+ [class.st-themed]="!!accentColor()"
13120
13283
  [attr.aria-label]="ariaLabel() || null">
13121
13284
  @for (r of rows(); track r.step.key) {
13122
13285
  <li class="st-step"
@@ -13157,7 +13320,7 @@ var StepperComponent = class StepperComponent {
13157
13320
  </ng-template>
13158
13321
  `,
13159
13322
  isInline: true,
13160
- styles: [":host{display:block}.st{list-style:none;margin:0;padding:0;display:flex;--st-ind: 28px}.st-sm{--st-ind: 22px}.st-horizontal{flex-direction:row;align-items:flex-start}.st-vertical{flex-direction:column}.st-step{position:relative;display:flex;min-width:0}.st-horizontal .st-step{flex:1 1 0;align-items:flex-start}.st-horizontal .st-step:last-child{flex:0 1 auto}.st-vertical .st-step{flex-direction:column;padding-bottom:20px}.st-vertical .st-step:last-child{padding-bottom:0}.st-item{display:flex;flex-direction:column;min-width:0;gap:2px}.st-horizontal .st-item{flex:0 1 auto}.st-btn{display:inline-flex;align-items:flex-start;gap:8px;min-width:0;margin:0;padding:2px 4px;border:0;border-radius:8px;background:none;font:inherit;color:inherit;text-align:left;-webkit-appearance:none;appearance:none}button.st-btn{cursor:pointer}.st-btn:focus{outline:2px solid #3b82f6;outline-offset:2px}.st-btn:focus:not(:focus-visible){outline:none}@media(hover:hover){button.st-btn:hover .st-label{text-decoration:underline}}.st-ind{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;width:var(--st-ind);height:var(--st-ind);border-radius:50%;font-size:.8125rem;font-weight:600;line-height:1;background:#fff;border:2px solid #cbd5e1;color:#64748b}.st-sm .st-ind{font-size:.6875rem}.st-sm .st-check{width:11px;height:11px}.st-step[data-state=complete] .st-ind{background:#1d4ed8;border-color:#1d4ed8;color:#fff}.st-step[data-state=current] .st-ind{background:#1d4ed8;border-color:#1d4ed8;color:#fff;box-shadow:0 0 0 3px #bfdbfe}.st-step[data-error=true] .st-ind{background:#dc2626;border-color:#dc2626;color:#fff;box-shadow:none}.st-label{font-size:.875rem;font-weight:500;line-height:var(--st-ind);color:#64748b;min-width:0;overflow-wrap:anywhere}.st-sm .st-label{font-size:.8125rem}.st-step[data-state=complete] .st-label{color:#1e293b}.st-step[data-state=current] .st-label{color:#0f172a;font-weight:600}.st-step[data-error=true] .st-label{color:#b91c1c}.st-opt{font-size:.75rem;line-height:var(--st-ind);color:#64748b;white-space:nowrap}.st-desc{font-size:.8125rem;line-height:1.4;color:#64748b;padding-left:calc(var(--st-ind) + 12px);overflow-wrap:anywhere}.st-errmsg{font-size:.8125rem;line-height:1.4;color:#b91c1c;padding-left:calc(var(--st-ind) + 12px);overflow-wrap:anywhere}.st-step[data-disabled=true] .st-item{opacity:.5}.st-sr,.st-hidden{position:absolute;width:1px;height:1px;margin:-1px;padding:0;border:0;overflow:hidden;clip:rect(0 0 0 0);-webkit-clip-path:inset(50%);clip-path:inset(50%);white-space:nowrap}.st-conn{position:relative;display:block;background:#e2e8f0;border-radius:1px}.st-conn:after{content:\"\";position:absolute;inset:0;background:#1d4ed8;border-radius:1px;transform-origin:top left;transform:scale(0);transition:transform .3s ease}.st-step[data-state=complete] .st-conn:after{transform:scale(1)}.st-horizontal .st-conn{flex:1 1 12px;min-width:12px;height:2px;margin:calc(var(--st-ind) / 2 + 1px) 8px 0}.st-vertical .st-conn{position:absolute;left:calc(var(--st-ind) / 2 + 3px);top:calc(var(--st-ind) + 8px);bottom:4px;width:2px}@media(pointer:coarse),(max-width:480px){.st-btn{min-height:44px;align-items:center}button.st-btn{min-width:44px}.st-horizontal .st-conn{margin-top:21px}.st-vertical .st-conn{top:calc(26px + var(--st-ind) / 2)}}@media(max-width:480px){.st-horizontal.st-labels-current .st-step:not([data-state=current]) .st-label,.st-horizontal.st-labels-current .st-step:not([data-state=current]) .st-opt,.st-horizontal.st-labels-current .st-step:not([data-state=current]) .st-desc,.st-horizontal.st-labels-current .st-step:not([data-state=current]) .st-errmsg{position:absolute;width:1px;height:1px;margin:-1px;padding:0;border:0;overflow:hidden;clip:rect(0 0 0 0);-webkit-clip-path:inset(50%);clip-path:inset(50%);white-space:nowrap}.st-horizontal .st-conn{margin-left:4px;margin-right:4px;min-width:8px;flex-basis:8px}}@media(prefers-reduced-motion:reduce){.st-conn:after{transition:none}}\n"],
13323
+ styles: [":host{display:block}.st{list-style:none;margin:0;padding:0;display:flex;--st-ind: 28px}.st-sm{--st-ind: 22px}.st-horizontal{flex-direction:row;align-items:flex-start}.st-vertical{flex-direction:column}.st-step{position:relative;display:flex;min-width:0}.st-horizontal .st-step{flex:1 1 0;align-items:flex-start}.st-horizontal .st-step:last-child{flex:0 1 auto}.st-vertical .st-step{flex-direction:column;padding-bottom:20px}.st-vertical .st-step:last-child{padding-bottom:0}.st-item{display:flex;flex-direction:column;min-width:0;gap:2px}.st-horizontal .st-item{flex:0 1 auto}.st-btn{display:inline-flex;align-items:flex-start;gap:8px;min-width:0;margin:0;padding:2px 4px;border:0;border-radius:8px;background:none;font:inherit;color:inherit;text-align:left;-webkit-appearance:none;appearance:none}button.st-btn{cursor:pointer}.st-btn:focus{outline:2px solid #3b82f6;outline-offset:2px}.st-btn:focus:not(:focus-visible){outline:none}@media(hover:hover){button.st-btn:hover .st-label{text-decoration:underline}}.st-ind{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;width:var(--st-ind);height:var(--st-ind);border-radius:50%;font-size:.8125rem;font-weight:600;line-height:1;background:#fff;border:2px solid #cbd5e1;color:#64748b}.st-sm .st-ind{font-size:.6875rem}.st-sm .st-check{width:11px;height:11px}.st-step[data-state=complete] .st-ind{background:var(--st-complete, var(--st-accent, var(--ui-accent, #1d4ed8)));border-color:var(--st-complete, var(--st-accent, var(--ui-accent, #1d4ed8)));color:#fff}.st-step[data-state=current] .st-ind{background:var(--st-accent, var(--ui-accent, #1d4ed8));border-color:var(--st-accent, var(--ui-accent, #1d4ed8));color:#fff;box-shadow:0 0 0 3px var(--ui-accent-soft, #bfdbfe)}@supports (color: color-mix(in srgb,red 30%,white)){.st-themed .st-step[data-state=current] .st-ind{box-shadow:0 0 0 3px color-mix(in srgb,var(--st-accent) 30%,white)}}.st-step[data-error=true] .st-ind{background:#dc2626;border-color:#dc2626;color:#fff;box-shadow:none}.st-label{font-size:.875rem;font-weight:500;line-height:var(--st-ind);color:#64748b;min-width:0;overflow-wrap:anywhere}.st-sm .st-label{font-size:.8125rem}.st-step[data-state=complete] .st-label{color:#1e293b}.st-step[data-state=current] .st-label{color:#0f172a;font-weight:600}.st-step[data-error=true] .st-label{color:#b91c1c}.st-opt{font-size:.75rem;line-height:var(--st-ind);color:#64748b;white-space:nowrap}.st-desc{font-size:.8125rem;line-height:1.4;color:#64748b;padding-left:calc(var(--st-ind) + 12px);overflow-wrap:anywhere}.st-errmsg{font-size:.8125rem;line-height:1.4;color:#b91c1c;padding-left:calc(var(--st-ind) + 12px);overflow-wrap:anywhere}.st-step[data-disabled=true] .st-item{opacity:.5}.st-sr,.st-hidden{position:absolute;width:1px;height:1px;margin:-1px;padding:0;border:0;overflow:hidden;clip:rect(0 0 0 0);-webkit-clip-path:inset(50%);clip-path:inset(50%);white-space:nowrap}.st-conn{position:relative;display:block;background:#e2e8f0;border-radius:1px}.st-conn:after{content:\"\";position:absolute;inset:0;background:var(--st-complete, var(--st-accent, var(--ui-accent, #1d4ed8)));border-radius:1px;transform-origin:top left;transform:scale(0);transition:transform .3s ease}.st-step[data-state=complete] .st-conn:after{transform:scale(1)}.st-horizontal .st-conn{flex:1 1 12px;min-width:12px;height:2px;margin:calc(var(--st-ind) / 2 + 1px) 8px 0}.st-vertical .st-conn{position:absolute;left:calc(var(--st-ind) / 2 + 3px);top:calc(var(--st-ind) + 8px);bottom:4px;width:2px}@media(pointer:coarse),(max-width:480px){.st-btn{min-height:44px;align-items:center}button.st-btn{min-width:44px}.st-horizontal .st-conn{margin-top:21px}.st-vertical .st-conn{top:calc(26px + var(--st-ind) / 2)}}@media(max-width:480px){.st-horizontal.st-labels-current .st-step:not([data-state=current]) .st-label,.st-horizontal.st-labels-current .st-step:not([data-state=current]) .st-opt,.st-horizontal.st-labels-current .st-step:not([data-state=current]) .st-desc,.st-horizontal.st-labels-current .st-step:not([data-state=current]) .st-errmsg{position:absolute;width:1px;height:1px;margin:-1px;padding:0;border:0;overflow:hidden;clip:rect(0 0 0 0);-webkit-clip-path:inset(50%);clip-path:inset(50%);white-space:nowrap}.st-horizontal .st-conn{margin-left:4px;margin-right:4px;min-width:8px;flex-basis:8px}}@media(prefers-reduced-motion:reduce){.st-conn:after{transition:none}}\n"],
13161
13324
  dependencies: [{
13162
13325
  kind: "directive",
13163
13326
  type: NgTemplateOutlet,
@@ -13184,12 +13347,17 @@ i0.ɵɵngDeclareClassMetadata({
13184
13347
  standalone: true,
13185
13348
  imports: [NgTemplateOutlet],
13186
13349
  changeDetection: ChangeDetectionStrategy.OnPush,
13350
+ host: {
13351
+ "[style.--st-accent]": "accentColor() || null",
13352
+ "[style.--st-complete]": "completeColor() || null"
13353
+ },
13187
13354
  template: `
13188
13355
  <ol class="st"
13189
13356
  [class.st-horizontal]="orientation() === 'horizontal'"
13190
13357
  [class.st-vertical]="orientation() === 'vertical'"
13191
13358
  [class.st-sm]="size() === 'sm'"
13192
13359
  [class.st-labels-current]="labelsOnSmallScreens() === 'current'"
13360
+ [class.st-themed]="!!accentColor()"
13193
13361
  [attr.aria-label]="ariaLabel() || null">
13194
13362
  @for (r of rows(); track r.step.key) {
13195
13363
  <li class="st-step"
@@ -13229,7 +13397,7 @@ i0.ɵɵngDeclareClassMetadata({
13229
13397
  <span class="st-sr">{{ r.srText }}</span>
13230
13398
  </ng-template>
13231
13399
  `,
13232
- styles: [":host{display:block}.st{list-style:none;margin:0;padding:0;display:flex;--st-ind: 28px}.st-sm{--st-ind: 22px}.st-horizontal{flex-direction:row;align-items:flex-start}.st-vertical{flex-direction:column}.st-step{position:relative;display:flex;min-width:0}.st-horizontal .st-step{flex:1 1 0;align-items:flex-start}.st-horizontal .st-step:last-child{flex:0 1 auto}.st-vertical .st-step{flex-direction:column;padding-bottom:20px}.st-vertical .st-step:last-child{padding-bottom:0}.st-item{display:flex;flex-direction:column;min-width:0;gap:2px}.st-horizontal .st-item{flex:0 1 auto}.st-btn{display:inline-flex;align-items:flex-start;gap:8px;min-width:0;margin:0;padding:2px 4px;border:0;border-radius:8px;background:none;font:inherit;color:inherit;text-align:left;-webkit-appearance:none;appearance:none}button.st-btn{cursor:pointer}.st-btn:focus{outline:2px solid #3b82f6;outline-offset:2px}.st-btn:focus:not(:focus-visible){outline:none}@media(hover:hover){button.st-btn:hover .st-label{text-decoration:underline}}.st-ind{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;width:var(--st-ind);height:var(--st-ind);border-radius:50%;font-size:.8125rem;font-weight:600;line-height:1;background:#fff;border:2px solid #cbd5e1;color:#64748b}.st-sm .st-ind{font-size:.6875rem}.st-sm .st-check{width:11px;height:11px}.st-step[data-state=complete] .st-ind{background:#1d4ed8;border-color:#1d4ed8;color:#fff}.st-step[data-state=current] .st-ind{background:#1d4ed8;border-color:#1d4ed8;color:#fff;box-shadow:0 0 0 3px #bfdbfe}.st-step[data-error=true] .st-ind{background:#dc2626;border-color:#dc2626;color:#fff;box-shadow:none}.st-label{font-size:.875rem;font-weight:500;line-height:var(--st-ind);color:#64748b;min-width:0;overflow-wrap:anywhere}.st-sm .st-label{font-size:.8125rem}.st-step[data-state=complete] .st-label{color:#1e293b}.st-step[data-state=current] .st-label{color:#0f172a;font-weight:600}.st-step[data-error=true] .st-label{color:#b91c1c}.st-opt{font-size:.75rem;line-height:var(--st-ind);color:#64748b;white-space:nowrap}.st-desc{font-size:.8125rem;line-height:1.4;color:#64748b;padding-left:calc(var(--st-ind) + 12px);overflow-wrap:anywhere}.st-errmsg{font-size:.8125rem;line-height:1.4;color:#b91c1c;padding-left:calc(var(--st-ind) + 12px);overflow-wrap:anywhere}.st-step[data-disabled=true] .st-item{opacity:.5}.st-sr,.st-hidden{position:absolute;width:1px;height:1px;margin:-1px;padding:0;border:0;overflow:hidden;clip:rect(0 0 0 0);-webkit-clip-path:inset(50%);clip-path:inset(50%);white-space:nowrap}.st-conn{position:relative;display:block;background:#e2e8f0;border-radius:1px}.st-conn:after{content:\"\";position:absolute;inset:0;background:#1d4ed8;border-radius:1px;transform-origin:top left;transform:scale(0);transition:transform .3s ease}.st-step[data-state=complete] .st-conn:after{transform:scale(1)}.st-horizontal .st-conn{flex:1 1 12px;min-width:12px;height:2px;margin:calc(var(--st-ind) / 2 + 1px) 8px 0}.st-vertical .st-conn{position:absolute;left:calc(var(--st-ind) / 2 + 3px);top:calc(var(--st-ind) + 8px);bottom:4px;width:2px}@media(pointer:coarse),(max-width:480px){.st-btn{min-height:44px;align-items:center}button.st-btn{min-width:44px}.st-horizontal .st-conn{margin-top:21px}.st-vertical .st-conn{top:calc(26px + var(--st-ind) / 2)}}@media(max-width:480px){.st-horizontal.st-labels-current .st-step:not([data-state=current]) .st-label,.st-horizontal.st-labels-current .st-step:not([data-state=current]) .st-opt,.st-horizontal.st-labels-current .st-step:not([data-state=current]) .st-desc,.st-horizontal.st-labels-current .st-step:not([data-state=current]) .st-errmsg{position:absolute;width:1px;height:1px;margin:-1px;padding:0;border:0;overflow:hidden;clip:rect(0 0 0 0);-webkit-clip-path:inset(50%);clip-path:inset(50%);white-space:nowrap}.st-horizontal .st-conn{margin-left:4px;margin-right:4px;min-width:8px;flex-basis:8px}}@media(prefers-reduced-motion:reduce){.st-conn:after{transition:none}}\n"]
13400
+ styles: [":host{display:block}.st{list-style:none;margin:0;padding:0;display:flex;--st-ind: 28px}.st-sm{--st-ind: 22px}.st-horizontal{flex-direction:row;align-items:flex-start}.st-vertical{flex-direction:column}.st-step{position:relative;display:flex;min-width:0}.st-horizontal .st-step{flex:1 1 0;align-items:flex-start}.st-horizontal .st-step:last-child{flex:0 1 auto}.st-vertical .st-step{flex-direction:column;padding-bottom:20px}.st-vertical .st-step:last-child{padding-bottom:0}.st-item{display:flex;flex-direction:column;min-width:0;gap:2px}.st-horizontal .st-item{flex:0 1 auto}.st-btn{display:inline-flex;align-items:flex-start;gap:8px;min-width:0;margin:0;padding:2px 4px;border:0;border-radius:8px;background:none;font:inherit;color:inherit;text-align:left;-webkit-appearance:none;appearance:none}button.st-btn{cursor:pointer}.st-btn:focus{outline:2px solid #3b82f6;outline-offset:2px}.st-btn:focus:not(:focus-visible){outline:none}@media(hover:hover){button.st-btn:hover .st-label{text-decoration:underline}}.st-ind{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;width:var(--st-ind);height:var(--st-ind);border-radius:50%;font-size:.8125rem;font-weight:600;line-height:1;background:#fff;border:2px solid #cbd5e1;color:#64748b}.st-sm .st-ind{font-size:.6875rem}.st-sm .st-check{width:11px;height:11px}.st-step[data-state=complete] .st-ind{background:var(--st-complete, var(--st-accent, var(--ui-accent, #1d4ed8)));border-color:var(--st-complete, var(--st-accent, var(--ui-accent, #1d4ed8)));color:#fff}.st-step[data-state=current] .st-ind{background:var(--st-accent, var(--ui-accent, #1d4ed8));border-color:var(--st-accent, var(--ui-accent, #1d4ed8));color:#fff;box-shadow:0 0 0 3px var(--ui-accent-soft, #bfdbfe)}@supports (color: color-mix(in srgb,red 30%,white)){.st-themed .st-step[data-state=current] .st-ind{box-shadow:0 0 0 3px color-mix(in srgb,var(--st-accent) 30%,white)}}.st-step[data-error=true] .st-ind{background:#dc2626;border-color:#dc2626;color:#fff;box-shadow:none}.st-label{font-size:.875rem;font-weight:500;line-height:var(--st-ind);color:#64748b;min-width:0;overflow-wrap:anywhere}.st-sm .st-label{font-size:.8125rem}.st-step[data-state=complete] .st-label{color:#1e293b}.st-step[data-state=current] .st-label{color:#0f172a;font-weight:600}.st-step[data-error=true] .st-label{color:#b91c1c}.st-opt{font-size:.75rem;line-height:var(--st-ind);color:#64748b;white-space:nowrap}.st-desc{font-size:.8125rem;line-height:1.4;color:#64748b;padding-left:calc(var(--st-ind) + 12px);overflow-wrap:anywhere}.st-errmsg{font-size:.8125rem;line-height:1.4;color:#b91c1c;padding-left:calc(var(--st-ind) + 12px);overflow-wrap:anywhere}.st-step[data-disabled=true] .st-item{opacity:.5}.st-sr,.st-hidden{position:absolute;width:1px;height:1px;margin:-1px;padding:0;border:0;overflow:hidden;clip:rect(0 0 0 0);-webkit-clip-path:inset(50%);clip-path:inset(50%);white-space:nowrap}.st-conn{position:relative;display:block;background:#e2e8f0;border-radius:1px}.st-conn:after{content:\"\";position:absolute;inset:0;background:var(--st-complete, var(--st-accent, var(--ui-accent, #1d4ed8)));border-radius:1px;transform-origin:top left;transform:scale(0);transition:transform .3s ease}.st-step[data-state=complete] .st-conn:after{transform:scale(1)}.st-horizontal .st-conn{flex:1 1 12px;min-width:12px;height:2px;margin:calc(var(--st-ind) / 2 + 1px) 8px 0}.st-vertical .st-conn{position:absolute;left:calc(var(--st-ind) / 2 + 3px);top:calc(var(--st-ind) + 8px);bottom:4px;width:2px}@media(pointer:coarse),(max-width:480px){.st-btn{min-height:44px;align-items:center}button.st-btn{min-width:44px}.st-horizontal .st-conn{margin-top:21px}.st-vertical .st-conn{top:calc(26px + var(--st-ind) / 2)}}@media(max-width:480px){.st-horizontal.st-labels-current .st-step:not([data-state=current]) .st-label,.st-horizontal.st-labels-current .st-step:not([data-state=current]) .st-opt,.st-horizontal.st-labels-current .st-step:not([data-state=current]) .st-desc,.st-horizontal.st-labels-current .st-step:not([data-state=current]) .st-errmsg{position:absolute;width:1px;height:1px;margin:-1px;padding:0;border:0;overflow:hidden;clip:rect(0 0 0 0);-webkit-clip-path:inset(50%);clip-path:inset(50%);white-space:nowrap}.st-horizontal .st-conn{margin-left:4px;margin-right:4px;min-width:8px;flex-basis:8px}}@media(prefers-reduced-motion:reduce){.st-conn:after{transition:none}}\n"]
13233
13401
  }]
13234
13402
  }],
13235
13403
  propDecorators: {
@@ -13284,6 +13452,22 @@ i0.ɵɵngDeclareClassMetadata({
13284
13452
  required: false
13285
13453
  }]
13286
13454
  }],
13455
+ accentColor: [{
13456
+ type: i0.Input,
13457
+ args: [{
13458
+ isSignal: true,
13459
+ alias: "accentColor",
13460
+ required: false
13461
+ }]
13462
+ }],
13463
+ completeColor: [{
13464
+ type: i0.Input,
13465
+ args: [{
13466
+ isSignal: true,
13467
+ alias: "completeColor",
13468
+ required: false
13469
+ }]
13470
+ }],
13287
13471
  ariaLabel: [{
13288
13472
  type: i0.Input,
13289
13473
  args: [{
@@ -13790,6 +13974,8 @@ var BusinessHoursComponent = class BusinessHoursComponent {
13790
13974
  inputs: [
13791
13975
  "label",
13792
13976
  "ariaLabel",
13977
+ "testId",
13978
+ "headingLevel",
13793
13979
  "indeterminate",
13794
13980
  "checked",
13795
13981
  "options",
@@ -13828,7 +14014,7 @@ var BusinessHoursComponent = class BusinessHoursComponent {
13828
14014
  "size",
13829
14015
  "disabled"
13830
14016
  ],
13831
- outputs: ["invalidChange"]
14017
+ outputs: ["invalidChange", "valueChange"]
13832
14018
  }
13833
14019
  ],
13834
14020
  changeDetection: i0.ChangeDetectionStrategy.OnPush
@@ -14019,6 +14205,7 @@ var RadioComponent = class RadioComponent {
14019
14205
  this.label = input("", ...ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []);
14020
14206
  this.description = input("", ...ngDevMode ? [{ debugName: "description" }] : /* istanbul ignore next */ []);
14021
14207
  this.ariaLabel = input("", ...ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []);
14208
+ this.testId = input("", ...ngDevMode ? [{ debugName: "testId" }] : /* istanbul ignore next */ []);
14022
14209
  this.value = input("", ...ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []);
14023
14210
  this.name = input("", ...ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []);
14024
14211
  this.checked = input(false, ...ngDevMode ? [{ debugName: "checked" }] : /* istanbul ignore next */ []);
@@ -14082,6 +14269,13 @@ var RadioComponent = class RadioComponent {
14082
14269
  isRequired: false,
14083
14270
  transformFunction: null
14084
14271
  },
14272
+ testId: {
14273
+ classPropertyName: "testId",
14274
+ publicName: "testId",
14275
+ isSignal: true,
14276
+ isRequired: false,
14277
+ transformFunction: null
14278
+ },
14085
14279
  value: {
14086
14280
  classPropertyName: "value",
14087
14281
  publicName: "value",
@@ -14153,6 +14347,7 @@ var RadioComponent = class RadioComponent {
14153
14347
  [value]="value()"
14154
14348
  [checked]="checked()"
14155
14349
  [disabled]="disabled()"
14350
+ [attr.data-testid]="testId() || null"
14156
14351
  [attr.aria-label]="ariaLabel() || null"
14157
14352
  [attr.aria-labelledby]="_labelledBy()"
14158
14353
  [attr.aria-invalid]="invalid() ? 'true' : null"
@@ -14196,6 +14391,7 @@ i0.ɵɵngDeclareClassMetadata({
14196
14391
  [value]="value()"
14197
14392
  [checked]="checked()"
14198
14393
  [disabled]="disabled()"
14394
+ [attr.data-testid]="testId() || null"
14199
14395
  [attr.aria-label]="ariaLabel() || null"
14200
14396
  [attr.aria-labelledby]="_labelledBy()"
14201
14397
  [attr.aria-invalid]="invalid() ? 'true' : null"
@@ -14238,6 +14434,14 @@ i0.ɵɵngDeclareClassMetadata({
14238
14434
  required: false
14239
14435
  }]
14240
14436
  }],
14437
+ testId: [{
14438
+ type: i0.Input,
14439
+ args: [{
14440
+ isSignal: true,
14441
+ alias: "testId",
14442
+ required: false
14443
+ }]
14444
+ }],
14241
14445
  value: [{
14242
14446
  type: i0.Input,
14243
14447
  args: [{
@@ -14588,6 +14792,7 @@ var RadioGroupComponent = class RadioGroupComponent {
14588
14792
  [describedBy]="(_activeError() || hint()) ? _descId : ''"
14589
14793
  [controls]="(_value() === opt.value && _nestedContent().has(opt.value)) ? _nestedId : ''"
14590
14794
  [labelId]="_nestedContent().has(opt.value) ? _optionLabelId($index) : ''"
14795
+ [testId]="opt.testId ?? ''"
14591
14796
  (selected)="onSelect($event)" />
14592
14797
  @if (_value() === opt.value && _nestedContent().get(opt.value); as nested) {
14593
14798
  <div class="rg-nested" role="group" [id]="_nestedId" [attr.aria-labelledby]="opt.label ? _optionLabelId($index) : null"><ng-container [ngTemplateOutlet]="nested" /></div>
@@ -14611,6 +14816,7 @@ var RadioGroupComponent = class RadioGroupComponent {
14611
14816
  "label",
14612
14817
  "description",
14613
14818
  "ariaLabel",
14819
+ "testId",
14614
14820
  "value",
14615
14821
  "name",
14616
14822
  "checked",
@@ -14693,6 +14899,7 @@ i0.ɵɵngDeclareClassMetadata({
14693
14899
  [describedBy]="(_activeError() || hint()) ? _descId : ''"
14694
14900
  [controls]="(_value() === opt.value && _nestedContent().has(opt.value)) ? _nestedId : ''"
14695
14901
  [labelId]="_nestedContent().has(opt.value) ? _optionLabelId($index) : ''"
14902
+ [testId]="opt.testId ?? ''"
14696
14903
  (selected)="onSelect($event)" />
14697
14904
  @if (_value() === opt.value && _nestedContent().get(opt.value); as nested) {
14698
14905
  <div class="rg-nested" role="group" [id]="_nestedId" [attr.aria-labelledby]="opt.label ? _optionLabelId($index) : null"><ng-container [ngTemplateOutlet]="nested" /></div>
@@ -14800,6 +15007,7 @@ var AlertComponent = class AlertComponent {
14800
15007
  this.dismissible = input(false, ...ngDevMode ? [{ debugName: "dismissible" }] : /* istanbul ignore next */ []);
14801
15008
  this.quiet = input(false, ...ngDevMode ? [{ debugName: "quiet" }] : /* istanbul ignore next */ []);
14802
15009
  this.compact = input(false, ...ngDevMode ? [{ debugName: "compact" }] : /* istanbul ignore next */ []);
15010
+ this.inline = input(false, ...ngDevMode ? [{ debugName: "inline" }] : /* istanbul ignore next */ []);
14803
15011
  this.dismissed = output();
14804
15012
  }
14805
15013
  static {
@@ -14854,6 +15062,13 @@ var AlertComponent = class AlertComponent {
14854
15062
  isSignal: true,
14855
15063
  isRequired: false,
14856
15064
  transformFunction: null
15065
+ },
15066
+ inline: {
15067
+ classPropertyName: "inline",
15068
+ publicName: "inline",
15069
+ isSignal: true,
15070
+ isRequired: false,
15071
+ transformFunction: null
14857
15072
  }
14858
15073
  },
14859
15074
  outputs: { dismissed: "dismissed" },
@@ -14862,7 +15077,7 @@ var AlertComponent = class AlertComponent {
14862
15077
  <div class="alert" [class]="'alert alert--' + variant()" [class.alert--compact]="compact()" [attr.role]="quiet() ? null : (variant() === 'danger' ? 'alert' : 'status')">
14863
15078
  <div class="alert-content">
14864
15079
  @if (title()) { <div class="alert-title">{{ title() }}</div> }
14865
- <div class="alert-body"><ng-content /></div>
15080
+ <div class="alert-body" [class.alert-body--inline]="inline()"><ng-content /></div>
14866
15081
  </div>
14867
15082
  @if (dismissible()) {
14868
15083
  <button class="alert-dismiss" type="button" aria-label="Dismiss" (click)="dismissed.emit()">
@@ -14874,7 +15089,7 @@ var AlertComponent = class AlertComponent {
14874
15089
  </div>
14875
15090
  `,
14876
15091
  isInline: true,
14877
- styles: [":host{display:block}.alert{display:flex;align-items:flex-start;gap:12px;padding:12px 14px;border-radius:8px;border-left:4px solid transparent;font-size:13px;line-height:1.5}.alert--info{background:#dbeafe;border-color:#3b82f6;color:#1e3a8a}.alert--success{background:#dcfce7;border-color:#22c55e;color:#14532d}.alert--warning{background:#ffedd5;border-color:#f97316;color:#7c2d12}.alert--danger{background:#fee2e2;border-color:#ef4444;color:#7f1d1d}.alert--neutral{background:#f1f5f9;border-color:#64748b;color:#334155}.alert--compact{padding:8px 12px;gap:8px;font-size:12.5px;line-height:1.4}.alert-content{flex:1;display:flex;flex-direction:column;gap:2px}.alert-title{font-weight:700}.alert-body{opacity:.9;display:flex;align-items:center;flex-wrap:wrap;gap:8px}.alert-dismiss{flex-shrink:0;background:none;border:none;cursor:pointer;padding:2px;border-radius:4px;color:inherit;opacity:.6;display:flex;align-items:center;transition:opacity .15s}.alert-dismiss:hover{opacity:1}\n"],
15092
+ styles: [":host{display:block}.alert{display:flex;align-items:flex-start;gap:12px;padding:12px 14px;border-radius:8px;border-left:4px solid transparent;font-size:13px;line-height:1.5}.alert--info{background:#dbeafe;border-color:#3b82f6;color:#1e3a8a}.alert--success{background:#dcfce7;border-color:#22c55e;color:#14532d}.alert--warning{background:#ffedd5;border-color:#f97316;color:#7c2d12}.alert--danger{background:#fee2e2;border-color:#ef4444;color:#7f1d1d}.alert--neutral{background:#f1f5f9;border-color:#64748b;color:#334155}.alert--compact{padding:8px 12px;gap:8px;font-size:12.5px;line-height:1.4}.alert-content{flex:1;display:flex;flex-direction:column;gap:2px}.alert-title{font-weight:700}.alert-body{opacity:.9;display:flex;align-items:center;flex-wrap:wrap;gap:8px}.alert-body--inline{display:block}.alert-body--inline>*{vertical-align:middle}.alert-dismiss{flex-shrink:0;background:none;border:none;cursor:pointer;padding:2px;border-radius:4px;color:inherit;opacity:.6;display:flex;align-items:center;transition:opacity .15s}.alert-dismiss:hover{opacity:1}\n"],
14878
15093
  changeDetection: i0.ChangeDetectionStrategy.OnPush
14879
15094
  });
14880
15095
  }
@@ -14894,7 +15109,7 @@ i0.ɵɵngDeclareClassMetadata({
14894
15109
  <div class="alert" [class]="'alert alert--' + variant()" [class.alert--compact]="compact()" [attr.role]="quiet() ? null : (variant() === 'danger' ? 'alert' : 'status')">
14895
15110
  <div class="alert-content">
14896
15111
  @if (title()) { <div class="alert-title">{{ title() }}</div> }
14897
- <div class="alert-body"><ng-content /></div>
15112
+ <div class="alert-body" [class.alert-body--inline]="inline()"><ng-content /></div>
14898
15113
  </div>
14899
15114
  @if (dismissible()) {
14900
15115
  <button class="alert-dismiss" type="button" aria-label="Dismiss" (click)="dismissed.emit()">
@@ -14905,7 +15120,7 @@ i0.ɵɵngDeclareClassMetadata({
14905
15120
  }
14906
15121
  </div>
14907
15122
  `,
14908
- styles: [":host{display:block}.alert{display:flex;align-items:flex-start;gap:12px;padding:12px 14px;border-radius:8px;border-left:4px solid transparent;font-size:13px;line-height:1.5}.alert--info{background:#dbeafe;border-color:#3b82f6;color:#1e3a8a}.alert--success{background:#dcfce7;border-color:#22c55e;color:#14532d}.alert--warning{background:#ffedd5;border-color:#f97316;color:#7c2d12}.alert--danger{background:#fee2e2;border-color:#ef4444;color:#7f1d1d}.alert--neutral{background:#f1f5f9;border-color:#64748b;color:#334155}.alert--compact{padding:8px 12px;gap:8px;font-size:12.5px;line-height:1.4}.alert-content{flex:1;display:flex;flex-direction:column;gap:2px}.alert-title{font-weight:700}.alert-body{opacity:.9;display:flex;align-items:center;flex-wrap:wrap;gap:8px}.alert-dismiss{flex-shrink:0;background:none;border:none;cursor:pointer;padding:2px;border-radius:4px;color:inherit;opacity:.6;display:flex;align-items:center;transition:opacity .15s}.alert-dismiss:hover{opacity:1}\n"]
15123
+ styles: [":host{display:block}.alert{display:flex;align-items:flex-start;gap:12px;padding:12px 14px;border-radius:8px;border-left:4px solid transparent;font-size:13px;line-height:1.5}.alert--info{background:#dbeafe;border-color:#3b82f6;color:#1e3a8a}.alert--success{background:#dcfce7;border-color:#22c55e;color:#14532d}.alert--warning{background:#ffedd5;border-color:#f97316;color:#7c2d12}.alert--danger{background:#fee2e2;border-color:#ef4444;color:#7f1d1d}.alert--neutral{background:#f1f5f9;border-color:#64748b;color:#334155}.alert--compact{padding:8px 12px;gap:8px;font-size:12.5px;line-height:1.4}.alert-content{flex:1;display:flex;flex-direction:column;gap:2px}.alert-title{font-weight:700}.alert-body{opacity:.9;display:flex;align-items:center;flex-wrap:wrap;gap:8px}.alert-body--inline{display:block}.alert-body--inline>*{vertical-align:middle}.alert-dismiss{flex-shrink:0;background:none;border:none;cursor:pointer;padding:2px;border-radius:4px;color:inherit;opacity:.6;display:flex;align-items:center;transition:opacity .15s}.alert-dismiss:hover{opacity:1}\n"]
14909
15124
  }]
14910
15125
  }],
14911
15126
  propDecorators: {
@@ -14949,6 +15164,14 @@ i0.ɵɵngDeclareClassMetadata({
14949
15164
  required: false
14950
15165
  }]
14951
15166
  }],
15167
+ inline: [{
15168
+ type: i0.Input,
15169
+ args: [{
15170
+ isSignal: true,
15171
+ alias: "inline",
15172
+ required: false
15173
+ }]
15174
+ }],
14952
15175
  dismissed: [{
14953
15176
  type: i0.Output,
14954
15177
  args: ["dismissed"]
@@ -15452,6 +15675,7 @@ var PhoneNumberPickerComponent = class PhoneNumberPickerComponent {
15452
15675
  "disabled"
15453
15676
  ],
15454
15677
  outputs: [
15678
+ "valueChange",
15455
15679
  "focused",
15456
15680
  "blurred",
15457
15681
  "invalidChange"
@@ -15510,7 +15734,8 @@ var PhoneNumberPickerComponent = class PhoneNumberPickerComponent {
15510
15734
  "title",
15511
15735
  "dismissible",
15512
15736
  "quiet",
15513
- "compact"
15737
+ "compact",
15738
+ "inline"
15514
15739
  ],
15515
15740
  outputs: ["dismissed"]
15516
15741
  },
@@ -16601,6 +16826,8 @@ var ContactPickerComponent = class ContactPickerComponent {
16601
16826
  inputs: [
16602
16827
  "label",
16603
16828
  "ariaLabel",
16829
+ "testId",
16830
+ "headingLevel",
16604
16831
  "indeterminate",
16605
16832
  "checked",
16606
16833
  "options",
@@ -17583,6 +17810,7 @@ var BulkMessagePanelComponent = class BulkMessagePanelComponent {
17583
17810
  "disabled"
17584
17811
  ],
17585
17812
  outputs: [
17813
+ "valueChange",
17586
17814
  "focused",
17587
17815
  "blurred",
17588
17816
  "invalidChange"
@@ -17725,11 +17953,53 @@ const SIZE_REM = {
17725
17953
  md: "0.875rem",
17726
17954
  lg: "1rem"
17727
17955
  };
17956
+ const WEIGHT = {
17957
+ normal: null,
17958
+ medium: "500",
17959
+ semibold: "600",
17960
+ bold: "700"
17961
+ };
17728
17962
  var TextComponent = class TextComponent {
17729
17963
  constructor() {
17730
17964
  this.text = input("", ...ngDevMode ? [{ debugName: "text" }] : /* istanbul ignore next */ []);
17731
17965
  this.size = input("md", ...ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []);
17732
17966
  this.tone = input("default", ...ngDevMode ? [{ debugName: "tone" }] : /* istanbul ignore next */ []);
17967
+ this.strong = input(null, ...ngDevMode ? [{ debugName: "strong" }] : /* istanbul ignore next */ []);
17968
+ this.segments = computed(() => {
17969
+ const text = this.text() ?? "";
17970
+ const raw = this.strong();
17971
+ const needles = (Array.isArray(raw) ? raw : raw ? [raw] : []).filter((n) => typeof n === "string" && n !== "").sort((a, b) => b.length - a.length);
17972
+ if (!text || !needles.length) return [];
17973
+ const out = [];
17974
+ let i = 0, plain = "";
17975
+ while (i < text.length) {
17976
+ const hit = needles.find((n) => text.startsWith(n, i));
17977
+ if (hit) {
17978
+ if (plain) {
17979
+ out.push({
17980
+ text: plain,
17981
+ strong: false
17982
+ });
17983
+ plain = "";
17984
+ }
17985
+ out.push({
17986
+ text: hit,
17987
+ strong: true
17988
+ });
17989
+ i += hit.length;
17990
+ } else {
17991
+ plain += text[i];
17992
+ i++;
17993
+ }
17994
+ }
17995
+ if (plain) out.push({
17996
+ text: plain,
17997
+ strong: false
17998
+ });
17999
+ return out.some((s) => s.strong) ? out : [];
18000
+ }, ...ngDevMode ? [{ debugName: "segments" }] : /* istanbul ignore next */ []);
18001
+ this.weight = input("normal", ...ngDevMode ? [{ debugName: "weight" }] : /* istanbul ignore next */ []);
18002
+ this.fontWeight = computed(() => WEIGHT[this.weight()] ?? null, ...ngDevMode ? [{ debugName: "fontWeight" }] : /* istanbul ignore next */ []);
17733
18003
  this.fontSize = computed(() => SIZE_REM[this.size()] ?? SIZE_REM.md, ...ngDevMode ? [{ debugName: "fontSize" }] : /* istanbul ignore next */ []);
17734
18004
  }
17735
18005
  static {
@@ -17744,7 +18014,7 @@ var TextComponent = class TextComponent {
17744
18014
  }
17745
18015
  static {
17746
18016
  this.ɵcmp = i0.ɵɵngDeclareComponent({
17747
- minVersion: "17.1.0",
18017
+ minVersion: "17.0.0",
17748
18018
  version: "22.2.2",
17749
18019
  type: TextComponent,
17750
18020
  isStandalone: true,
@@ -17770,12 +18040,26 @@ var TextComponent = class TextComponent {
17770
18040
  isSignal: true,
17771
18041
  isRequired: false,
17772
18042
  transformFunction: null
18043
+ },
18044
+ strong: {
18045
+ classPropertyName: "strong",
18046
+ publicName: "strong",
18047
+ isSignal: true,
18048
+ isRequired: false,
18049
+ transformFunction: null
18050
+ },
18051
+ weight: {
18052
+ classPropertyName: "weight",
18053
+ publicName: "weight",
18054
+ isSignal: true,
18055
+ isRequired: false,
18056
+ transformFunction: null
17773
18057
  }
17774
18058
  },
17775
18059
  ngImport: i0,
17776
- template: `<div class="tx" [class.tx-muted]="tone() === 'muted'" [style.font-size]="fontSize()">{{ text() }}</div>`,
18060
+ template: `<div class="tx" [class.tx-muted]="tone() === 'muted'" [style.font-size]="fontSize()" [style.font-weight]="fontWeight()">{{ segments().length ? '' : text() }}@for (s of segments(); track $index) {@if (s.strong) {<strong>{{ s.text }}</strong>} @else {<ng-container>{{ s.text }}</ng-container>}}</div>`,
17777
18061
  isInline: true,
17778
- styles: [":host{display:block;min-width:0}.tx{margin:0;line-height:1.5;color:#1f2937;white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-word;-webkit-user-select:text;user-select:text}.tx-muted{color:#64748b}\n"],
18062
+ styles: [":host{display:block;min-width:0}.tx{margin:0;line-height:1.5;color:#1f2937;white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-word;-webkit-user-select:text;user-select:text}.tx-muted{color:#64748b}.tx strong{font-weight:700}\n"],
17779
18063
  changeDetection: i0.ChangeDetectionStrategy.OnPush
17780
18064
  });
17781
18065
  }
@@ -17791,8 +18075,8 @@ i0.ɵɵngDeclareClassMetadata({
17791
18075
  selector: "ui-text",
17792
18076
  standalone: true,
17793
18077
  changeDetection: ChangeDetectionStrategy.OnPush,
17794
- template: `<div class="tx" [class.tx-muted]="tone() === 'muted'" [style.font-size]="fontSize()">{{ text() }}</div>`,
17795
- styles: [":host{display:block;min-width:0}.tx{margin:0;line-height:1.5;color:#1f2937;white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-word;-webkit-user-select:text;user-select:text}.tx-muted{color:#64748b}\n"]
18078
+ template: `<div class="tx" [class.tx-muted]="tone() === 'muted'" [style.font-size]="fontSize()" [style.font-weight]="fontWeight()">{{ segments().length ? '' : text() }}@for (s of segments(); track $index) {@if (s.strong) {<strong>{{ s.text }}</strong>} @else {<ng-container>{{ s.text }}</ng-container>}}</div>`,
18079
+ styles: [":host{display:block;min-width:0}.tx{margin:0;line-height:1.5;color:#1f2937;white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-word;-webkit-user-select:text;user-select:text}.tx-muted{color:#64748b}.tx strong{font-weight:700}\n"]
17796
18080
  }]
17797
18081
  }],
17798
18082
  propDecorators: {
@@ -17819,6 +18103,22 @@ i0.ɵɵngDeclareClassMetadata({
17819
18103
  alias: "tone",
17820
18104
  required: false
17821
18105
  }]
18106
+ }],
18107
+ strong: [{
18108
+ type: i0.Input,
18109
+ args: [{
18110
+ isSignal: true,
18111
+ alias: "strong",
18112
+ required: false
18113
+ }]
18114
+ }],
18115
+ weight: [{
18116
+ type: i0.Input,
18117
+ args: [{
18118
+ isSignal: true,
18119
+ alias: "weight",
18120
+ required: false
18121
+ }]
17822
18122
  }]
17823
18123
  }
17824
18124
  });
@@ -18969,6 +19269,7 @@ var DateInputComponent = class DateInputComponent {
18969
19269
  this.invalid = computed(() => !!this.error() || !!this._issue(), ...ngDevMode ? [{ debugName: "invalid" }] : /* istanbul ignore next */ []);
18970
19270
  this.errorMessage = computed(() => this._issue()?.message ?? "", ...ngDevMode ? [{ debugName: "errorMessage" }] : /* istanbul ignore next */ []);
18971
19271
  this.invalidChange = output();
19272
+ this.valueChange = output();
18972
19273
  this._activeError = computed(() => this.error() || (this._reveal.revealed() ? this.errorMessage() : ""), ...ngDevMode ? [{ debugName: "_activeError" }] : /* istanbul ignore next */ []);
18973
19274
  this._onValidatorChange = () => {};
18974
19275
  this._inputId = `di-${Math.random().toString(36).slice(2, 8)}`;
@@ -19004,6 +19305,7 @@ var DateInputComponent = class DateInputComponent {
19004
19305
  const val = event.target.value;
19005
19306
  this._value.set(val);
19006
19307
  this._onChange(val);
19308
+ this.valueChange.emit(val);
19007
19309
  }
19008
19310
  onBlur() {
19009
19311
  this._onTouched();
@@ -19113,7 +19415,10 @@ var DateInputComponent = class DateInputComponent {
19113
19415
  transformFunction: null
19114
19416
  }
19115
19417
  },
19116
- outputs: { invalidChange: "invalidChange" },
19418
+ outputs: {
19419
+ invalidChange: "invalidChange",
19420
+ valueChange: "valueChange"
19421
+ },
19117
19422
  providers: [
19118
19423
  {
19119
19424
  provide: NG_VALUE_ACCESSOR,
@@ -19295,6 +19600,10 @@ i0.ɵɵngDeclareClassMetadata({
19295
19600
  invalidChange: [{
19296
19601
  type: i0.Output,
19297
19602
  args: ["invalidChange"]
19603
+ }],
19604
+ valueChange: [{
19605
+ type: i0.Output,
19606
+ args: ["valueChange"]
19298
19607
  }]
19299
19608
  }
19300
19609
  });
@@ -21245,6 +21554,8 @@ var MultiSelectComponent = class MultiSelectComponent {
21245
21554
  inputs: [
21246
21555
  "label",
21247
21556
  "ariaLabel",
21557
+ "testId",
21558
+ "headingLevel",
21248
21559
  "indeterminate",
21249
21560
  "checked",
21250
21561
  "options",
@@ -21571,6 +21882,8 @@ var DiscountSelectorComponent = class DiscountSelectorComponent {
21571
21882
  inputs: [
21572
21883
  "label",
21573
21884
  "ariaLabel",
21885
+ "testId",
21886
+ "headingLevel",
21574
21887
  "indeterminate",
21575
21888
  "checked",
21576
21889
  "options",
@@ -22099,52 +22412,63 @@ i0.ɵɵngDeclareClassMetadata({
22099
22412
  }]
22100
22413
  }
22101
22414
  });
22102
- var FormSectionComponent = class FormSectionComponent {
22415
+ var FormComponent = class FormComponent {
22103
22416
  constructor() {
22104
- this.label = input("", ...ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []);
22105
- this.divider = input(false, ...ngDevMode ? [{ debugName: "divider" }] : /* istanbul ignore next */ []);
22417
+ this.ariaLabel = input("", ...ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []);
22418
+ this.ariaLabelledby = input("", ...ngDevMode ? [{ debugName: "ariaLabelledby" }] : /* istanbul ignore next */ []);
22419
+ this.autocomplete = input("", ...ngDevMode ? [{ debugName: "autocomplete" }] : /* istanbul ignore next */ []);
22420
+ this.submitted = output();
22421
+ }
22422
+ onSubmit(event) {
22423
+ event.preventDefault();
22424
+ this.submitted.emit(event);
22106
22425
  }
22107
22426
  static {
22108
22427
  this.ɵfac = i0.ɵɵngDeclareFactory({
22109
22428
  minVersion: "12.0.0",
22110
22429
  version: "22.2.2",
22111
22430
  ngImport: i0,
22112
- type: FormSectionComponent,
22431
+ type: FormComponent,
22113
22432
  deps: [],
22114
22433
  target: i0.ɵɵFactoryTarget.Component
22115
22434
  });
22116
22435
  }
22117
22436
  static {
22118
22437
  this.ɵcmp = i0.ɵɵngDeclareComponent({
22119
- minVersion: "17.0.0",
22438
+ minVersion: "17.1.0",
22120
22439
  version: "22.2.2",
22121
- type: FormSectionComponent,
22440
+ type: FormComponent,
22122
22441
  isStandalone: true,
22123
- selector: "ui-form-section",
22442
+ selector: "ui-form",
22124
22443
  inputs: {
22125
- label: {
22126
- classPropertyName: "label",
22127
- publicName: "label",
22444
+ ariaLabel: {
22445
+ classPropertyName: "ariaLabel",
22446
+ publicName: "ariaLabel",
22128
22447
  isSignal: true,
22129
22448
  isRequired: false,
22130
22449
  transformFunction: null
22131
22450
  },
22132
- divider: {
22133
- classPropertyName: "divider",
22134
- publicName: "divider",
22451
+ ariaLabelledby: {
22452
+ classPropertyName: "ariaLabelledby",
22453
+ publicName: "ariaLabelledby",
22454
+ isSignal: true,
22455
+ isRequired: false,
22456
+ transformFunction: null
22457
+ },
22458
+ autocomplete: {
22459
+ classPropertyName: "autocomplete",
22460
+ publicName: "autocomplete",
22135
22461
  isSignal: true,
22136
22462
  isRequired: false,
22137
22463
  transformFunction: null
22138
22464
  }
22139
22465
  },
22466
+ outputs: { submitted: "submitted" },
22140
22467
  ngImport: i0,
22141
- template: `
22142
- @if (divider()) { <div class="fs-divider"></div> }
22143
- @if (label()) { <p class="fs-label">{{ label() }}</p> }
22144
- <div class="fs-fields"><ng-content /></div>
22145
- `,
22468
+ template: `<form class="uf" novalidate [attr.aria-label]="ariaLabel() || null" [attr.aria-labelledby]="ariaLabelledby() || null"
22469
+ [attr.autocomplete]="autocomplete() || null" (submit)="onSubmit($event)"><ng-content /></form>`,
22146
22470
  isInline: true,
22147
- styles: [":host{display:block}.fs-divider{height:1px;background:#f1f5f9;margin:8px -24px 16px}.fs-label{font-size:.6875rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:#94a3b8;margin:0 0 12px}.fs-fields{display:flex;flex-direction:column;gap:14px}\n"],
22471
+ styles: [":host{display:block}.uf{display:block;margin:0;padding:0}\n"],
22148
22472
  changeDetection: i0.ChangeDetectionStrategy.OnPush
22149
22473
  });
22150
22474
  }
@@ -22153,27 +22477,124 @@ i0.ɵɵngDeclareClassMetadata({
22153
22477
  minVersion: "12.0.0",
22154
22478
  version: "22.2.2",
22155
22479
  ngImport: i0,
22156
- type: FormSectionComponent,
22480
+ type: FormComponent,
22157
22481
  decorators: [{
22158
22482
  type: Component,
22159
22483
  args: [{
22160
- selector: "ui-form-section",
22484
+ selector: "ui-form",
22161
22485
  standalone: true,
22162
22486
  changeDetection: ChangeDetectionStrategy.OnPush,
22163
- template: `
22164
- @if (divider()) { <div class="fs-divider"></div> }
22165
- @if (label()) { <p class="fs-label">{{ label() }}</p> }
22166
- <div class="fs-fields"><ng-content /></div>
22167
- `,
22168
- styles: [":host{display:block}.fs-divider{height:1px;background:#f1f5f9;margin:8px -24px 16px}.fs-label{font-size:.6875rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:#94a3b8;margin:0 0 12px}.fs-fields{display:flex;flex-direction:column;gap:14px}\n"]
22487
+ template: `<form class="uf" novalidate [attr.aria-label]="ariaLabel() || null" [attr.aria-labelledby]="ariaLabelledby() || null"
22488
+ [attr.autocomplete]="autocomplete() || null" (submit)="onSubmit($event)"><ng-content /></form>`,
22489
+ styles: [":host{display:block}.uf{display:block;margin:0;padding:0}\n"]
22169
22490
  }]
22170
22491
  }],
22171
22492
  propDecorators: {
22172
- label: [{
22493
+ ariaLabel: [{
22173
22494
  type: i0.Input,
22174
22495
  args: [{
22175
22496
  isSignal: true,
22176
- alias: "label",
22497
+ alias: "ariaLabel",
22498
+ required: false
22499
+ }]
22500
+ }],
22501
+ ariaLabelledby: [{
22502
+ type: i0.Input,
22503
+ args: [{
22504
+ isSignal: true,
22505
+ alias: "ariaLabelledby",
22506
+ required: false
22507
+ }]
22508
+ }],
22509
+ autocomplete: [{
22510
+ type: i0.Input,
22511
+ args: [{
22512
+ isSignal: true,
22513
+ alias: "autocomplete",
22514
+ required: false
22515
+ }]
22516
+ }],
22517
+ submitted: [{
22518
+ type: i0.Output,
22519
+ args: ["submitted"]
22520
+ }]
22521
+ }
22522
+ });
22523
+ var FormSectionComponent = class FormSectionComponent {
22524
+ constructor() {
22525
+ this.label = input("", ...ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []);
22526
+ this.divider = input(false, ...ngDevMode ? [{ debugName: "divider" }] : /* istanbul ignore next */ []);
22527
+ }
22528
+ static {
22529
+ this.ɵfac = i0.ɵɵngDeclareFactory({
22530
+ minVersion: "12.0.0",
22531
+ version: "22.2.2",
22532
+ ngImport: i0,
22533
+ type: FormSectionComponent,
22534
+ deps: [],
22535
+ target: i0.ɵɵFactoryTarget.Component
22536
+ });
22537
+ }
22538
+ static {
22539
+ this.ɵcmp = i0.ɵɵngDeclareComponent({
22540
+ minVersion: "17.0.0",
22541
+ version: "22.2.2",
22542
+ type: FormSectionComponent,
22543
+ isStandalone: true,
22544
+ selector: "ui-form-section",
22545
+ inputs: {
22546
+ label: {
22547
+ classPropertyName: "label",
22548
+ publicName: "label",
22549
+ isSignal: true,
22550
+ isRequired: false,
22551
+ transformFunction: null
22552
+ },
22553
+ divider: {
22554
+ classPropertyName: "divider",
22555
+ publicName: "divider",
22556
+ isSignal: true,
22557
+ isRequired: false,
22558
+ transformFunction: null
22559
+ }
22560
+ },
22561
+ ngImport: i0,
22562
+ template: `
22563
+ @if (divider()) { <div class="fs-divider"></div> }
22564
+ @if (label()) { <p class="fs-label">{{ label() }}</p> }
22565
+ <div class="fs-fields"><ng-content /></div>
22566
+ `,
22567
+ isInline: true,
22568
+ styles: [":host{display:block}.fs-divider{height:1px;background:#f1f5f9;margin:8px -24px 16px}.fs-label{font-size:.6875rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:#94a3b8;margin:0 0 12px}.fs-fields{display:flex;flex-direction:column;gap:14px}\n"],
22569
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
22570
+ });
22571
+ }
22572
+ };
22573
+ i0.ɵɵngDeclareClassMetadata({
22574
+ minVersion: "12.0.0",
22575
+ version: "22.2.2",
22576
+ ngImport: i0,
22577
+ type: FormSectionComponent,
22578
+ decorators: [{
22579
+ type: Component,
22580
+ args: [{
22581
+ selector: "ui-form-section",
22582
+ standalone: true,
22583
+ changeDetection: ChangeDetectionStrategy.OnPush,
22584
+ template: `
22585
+ @if (divider()) { <div class="fs-divider"></div> }
22586
+ @if (label()) { <p class="fs-label">{{ label() }}</p> }
22587
+ <div class="fs-fields"><ng-content /></div>
22588
+ `,
22589
+ styles: [":host{display:block}.fs-divider{height:1px;background:#f1f5f9;margin:8px -24px 16px}.fs-label{font-size:.6875rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:#94a3b8;margin:0 0 12px}.fs-fields{display:flex;flex-direction:column;gap:14px}\n"]
22590
+ }]
22591
+ }],
22592
+ propDecorators: {
22593
+ label: [{
22594
+ type: i0.Input,
22595
+ args: [{
22596
+ isSignal: true,
22597
+ alias: "label",
22177
22598
  required: false
22178
22599
  }]
22179
22600
  }],
@@ -22705,6 +23126,7 @@ i0.ɵɵngDeclareClassMetadata({
22705
23126
  function provideForgerouteToast(options = {}) {
22706
23127
  return makeEnvironmentProviders([provideEnvironmentInitializer(() => {
22707
23128
  if (options.dismissible) inject(ToastService).dismissible.set(true);
23129
+ if (options.persistentLiveRegion) inject(ToastService).persistentLiveRegion.set(true);
22708
23130
  if (!isPlatformBrowser(inject(PLATFORM_ID))) return;
22709
23131
  const doc = inject(DOCUMENT);
22710
23132
  const appRef = inject(ApplicationRef);
@@ -23637,6 +24059,7 @@ var BarRowComponent = class BarRowComponent {
23637
24059
  "max",
23638
24060
  "label",
23639
24061
  "variant",
24062
+ "color",
23640
24063
  "tooltip",
23641
24064
  "ariaLabel",
23642
24065
  "ariaLabelledby",
@@ -24756,7 +25179,7 @@ var PanelInfoListComponent = class PanelInfoListComponent {
24756
25179
  } @else if (section.columns === 2) {
24757
25180
  <div class="pil-grid-2">
24758
25181
  @for (item of visibleItems(section); track item.label) {
24759
- <div class="pil-grid-cell">
25182
+ <div class="pil-grid-cell" [class.pil-strong]="item.emphasis">
24760
25183
  <span class="pil-label">{{ item.label }}{{ labelColon() ? ':' : '' }}</span>{{ labelColon() ? ' ' : '' }}
24761
25184
  <span class="pil-value pil-value--block">
24762
25185
  @if (item.badge) {
@@ -24764,7 +25187,7 @@ var PanelInfoListComponent = class PanelInfoListComponent {
24764
25187
  } @else if (hrefOf(item); as h) {
24765
25188
  <a class="pil-link pil-link--href" [attr.href]="h" [attr.target]="isWeb(h) ? '_blank' : null" [attr.rel]="isWeb(h) ? 'noopener noreferrer' : null">{{ textOf(item) }}</a>
24766
25189
  } @else {
24767
- <span [class.pil-muted]="item.muted" [class.pil-danger]="item.danger">{{ item.value || '—' }}</span>
25190
+ <span [class.pil-muted]="item.muted" [class.pil-danger]="item.danger" [class.pil-multiline]="item.multiline">{{ item.value || '—' }}</span>
24768
25191
  }
24769
25192
  </span>
24770
25193
  </div>
@@ -24772,7 +25195,7 @@ var PanelInfoListComponent = class PanelInfoListComponent {
24772
25195
  </div>
24773
25196
  } @else {
24774
25197
  @for (item of visibleItems(section); track item.label) {
24775
- <div class="pil-row" [class.pil-row--inline]="labelColon()">
25198
+ <div class="pil-row" [class.pil-row--inline]="labelColon()" [class.pil-strong]="item.emphasis">
24776
25199
  <span class="pil-label">{{ item.label }}{{ labelColon() ? ':' : '' }}</span>{{ labelColon() ? ' ' : '' }}
24777
25200
  <span class="pil-value">
24778
25201
  @if (item.badges) {
@@ -24793,7 +25216,7 @@ var PanelInfoListComponent = class PanelInfoListComponent {
24793
25216
  } @else if (item.link && item.value) {
24794
25217
  <a class="pil-link" [routerLink]="item.link">{{ item.value }}</a>
24795
25218
  } @else {
24796
- <span [class.pil-muted]="item.muted" [class.pil-danger]="item.danger">{{ item.value || '—' }}</span>
25219
+ <span [class.pil-muted]="item.muted" [class.pil-danger]="item.danger" [class.pil-multiline]="item.multiline">{{ item.value || '—' }}</span>
24797
25220
  }
24798
25221
  @if (item.editAction) {
24799
25222
  <ui-button class="pil-edit-btn" variant="icon" size="xs"
@@ -24810,7 +25233,7 @@ var PanelInfoListComponent = class PanelInfoListComponent {
24810
25233
  }
24811
25234
  `,
24812
25235
  isInline: true,
24813
- styles: [":host{display:flex;flex-direction:column;gap:12px}.pil-section{border:1px solid #e2e8f0;border-radius:8px;overflow:hidden}.pil-section-label{display:flex;justify-content:space-between;align-items:center;font-size:.6875rem;font-weight:700;letter-spacing:.07em;color:#94a3b8;text-transform:uppercase;padding:8px 14px;background:#f8fafc;border-bottom:1px solid #e2e8f0}.pil-header-link{font-size:.75rem;font-weight:500;color:#2563eb;text-decoration:none;text-transform:none;letter-spacing:0}.pil-header-link:hover{text-decoration:underline}.pil-row{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:9px 14px;border-bottom:1px solid #f1f5f9}.pil-row:last-child{border-bottom:none}.pil-row--inline{justify-content:flex-start}.pil-row--inline .pil-value{text-align:left;justify-content:flex-start;flex-wrap:wrap;min-width:0;overflow-wrap:anywhere;word-break:break-word}.pil-label{font-size:.8125rem;color:#64748b;flex-shrink:0}.pil-value{font-size:.875rem;font-weight:500;color:#1e293b;text-align:right;display:flex;align-items:center;justify-content:flex-end}.pil-badges{display:flex;align-items:center;gap:4px;flex-wrap:wrap;justify-content:flex-end}.pil-edit-btn{margin-left:4px;flex-shrink:0}ui-empty-state{padding:12px 0}.pil-muted{color:#1e293b;font-weight:400}.pil-danger{color:#ef4444;font-weight:600}.pil-link{font-size:.875rem;font-weight:500;color:#2563eb;text-decoration:none}.pil-link:hover{text-decoration:underline}.pil-link--href{overflow-wrap:anywhere;word-break:break-word}.pil-link:focus-visible,.pil-header-link:focus-visible{outline:2px solid #3b82f6;outline-offset:2px;border-radius:2px}.pil-link-icon{display:inline-flex;align-items:center;gap:5px;font-size:.875rem;font-weight:500;color:#1e293b;text-decoration:none}.pil-link-icon svg{color:#94a3b8;flex-shrink:0}.pil-grid-2{display:grid;grid-template-columns:1fr 1fr}.pil-grid-cell{display:flex;flex-direction:column;gap:3px;padding:10px 14px;border-right:1px solid #f1f5f9}.pil-grid-cell:last-child{border-right:none}.pil-value--block{text-align:left;justify-content:flex-start}\n"],
25236
+ styles: [":host{display:flex;flex-direction:column;gap:12px}.pil-section{border:1px solid #e2e8f0;border-radius:8px;overflow:hidden}.pil-section-label{display:flex;justify-content:space-between;align-items:center;font-size:.6875rem;font-weight:700;letter-spacing:.07em;color:#94a3b8;text-transform:uppercase;padding:8px 14px;background:#f8fafc;border-bottom:1px solid #e2e8f0}.pil-header-link{font-size:.75rem;font-weight:500;color:#2563eb;text-decoration:none;text-transform:none;letter-spacing:0}.pil-header-link:hover{text-decoration:underline}.pil-row{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:9px 14px;border-bottom:1px solid #f1f5f9}.pil-row:last-child{border-bottom:none}.pil-row--inline{justify-content:flex-start}.pil-row--inline .pil-value{text-align:left;justify-content:flex-start;flex-wrap:wrap;min-width:0;overflow-wrap:anywhere;word-break:break-word}.pil-label{font-size:.8125rem;color:#64748b;flex-shrink:0}.pil-value{font-size:.875rem;font-weight:500;color:#1e293b;text-align:right;display:flex;align-items:center;justify-content:flex-end}.pil-multiline{white-space:pre-line;overflow-wrap:anywhere;word-break:break-word}.pil-strong .pil-label,.pil-strong .pil-value,.pil-strong .pil-muted{font-weight:700;color:#0f172a}.pil-badges{display:flex;align-items:center;gap:4px;flex-wrap:wrap;justify-content:flex-end}.pil-edit-btn{margin-left:4px;flex-shrink:0}ui-empty-state{padding:12px 0}.pil-muted{color:#1e293b;font-weight:400}.pil-danger{color:#ef4444;font-weight:600}.pil-link{font-size:.875rem;font-weight:500;color:#2563eb;text-decoration:none}.pil-link:hover{text-decoration:underline}.pil-link--href{overflow-wrap:anywhere;word-break:break-word}.pil-link:focus-visible,.pil-header-link:focus-visible{outline:2px solid #3b82f6;outline-offset:2px;border-radius:2px}.pil-link-icon{display:inline-flex;align-items:center;gap:5px;font-size:.875rem;font-weight:500;color:#1e293b;text-decoration:none}.pil-link-icon svg{color:#94a3b8;flex-shrink:0}.pil-grid-2{display:grid;grid-template-columns:1fr 1fr}.pil-grid-cell{display:flex;flex-direction:column;gap:3px;padding:10px 14px;border-right:1px solid #f1f5f9}.pil-grid-cell:last-child{border-right:none}.pil-value--block{text-align:left;justify-content:flex-start}\n"],
24814
25237
  dependencies: [
24815
25238
  {
24816
25239
  kind: "component",
@@ -24912,7 +25335,7 @@ i0.ɵɵngDeclareClassMetadata({
24912
25335
  } @else if (section.columns === 2) {
24913
25336
  <div class="pil-grid-2">
24914
25337
  @for (item of visibleItems(section); track item.label) {
24915
- <div class="pil-grid-cell">
25338
+ <div class="pil-grid-cell" [class.pil-strong]="item.emphasis">
24916
25339
  <span class="pil-label">{{ item.label }}{{ labelColon() ? ':' : '' }}</span>{{ labelColon() ? ' ' : '' }}
24917
25340
  <span class="pil-value pil-value--block">
24918
25341
  @if (item.badge) {
@@ -24920,7 +25343,7 @@ i0.ɵɵngDeclareClassMetadata({
24920
25343
  } @else if (hrefOf(item); as h) {
24921
25344
  <a class="pil-link pil-link--href" [attr.href]="h" [attr.target]="isWeb(h) ? '_blank' : null" [attr.rel]="isWeb(h) ? 'noopener noreferrer' : null">{{ textOf(item) }}</a>
24922
25345
  } @else {
24923
- <span [class.pil-muted]="item.muted" [class.pil-danger]="item.danger">{{ item.value || '—' }}</span>
25346
+ <span [class.pil-muted]="item.muted" [class.pil-danger]="item.danger" [class.pil-multiline]="item.multiline">{{ item.value || '—' }}</span>
24924
25347
  }
24925
25348
  </span>
24926
25349
  </div>
@@ -24928,7 +25351,7 @@ i0.ɵɵngDeclareClassMetadata({
24928
25351
  </div>
24929
25352
  } @else {
24930
25353
  @for (item of visibleItems(section); track item.label) {
24931
- <div class="pil-row" [class.pil-row--inline]="labelColon()">
25354
+ <div class="pil-row" [class.pil-row--inline]="labelColon()" [class.pil-strong]="item.emphasis">
24932
25355
  <span class="pil-label">{{ item.label }}{{ labelColon() ? ':' : '' }}</span>{{ labelColon() ? ' ' : '' }}
24933
25356
  <span class="pil-value">
24934
25357
  @if (item.badges) {
@@ -24949,7 +25372,7 @@ i0.ɵɵngDeclareClassMetadata({
24949
25372
  } @else if (item.link && item.value) {
24950
25373
  <a class="pil-link" [routerLink]="item.link">{{ item.value }}</a>
24951
25374
  } @else {
24952
- <span [class.pil-muted]="item.muted" [class.pil-danger]="item.danger">{{ item.value || '—' }}</span>
25375
+ <span [class.pil-muted]="item.muted" [class.pil-danger]="item.danger" [class.pil-multiline]="item.multiline">{{ item.value || '—' }}</span>
24953
25376
  }
24954
25377
  @if (item.editAction) {
24955
25378
  <ui-button class="pil-edit-btn" variant="icon" size="xs"
@@ -24965,7 +25388,7 @@ i0.ɵɵngDeclareClassMetadata({
24965
25388
  </div>
24966
25389
  }
24967
25390
  `,
24968
- styles: [":host{display:flex;flex-direction:column;gap:12px}.pil-section{border:1px solid #e2e8f0;border-radius:8px;overflow:hidden}.pil-section-label{display:flex;justify-content:space-between;align-items:center;font-size:.6875rem;font-weight:700;letter-spacing:.07em;color:#94a3b8;text-transform:uppercase;padding:8px 14px;background:#f8fafc;border-bottom:1px solid #e2e8f0}.pil-header-link{font-size:.75rem;font-weight:500;color:#2563eb;text-decoration:none;text-transform:none;letter-spacing:0}.pil-header-link:hover{text-decoration:underline}.pil-row{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:9px 14px;border-bottom:1px solid #f1f5f9}.pil-row:last-child{border-bottom:none}.pil-row--inline{justify-content:flex-start}.pil-row--inline .pil-value{text-align:left;justify-content:flex-start;flex-wrap:wrap;min-width:0;overflow-wrap:anywhere;word-break:break-word}.pil-label{font-size:.8125rem;color:#64748b;flex-shrink:0}.pil-value{font-size:.875rem;font-weight:500;color:#1e293b;text-align:right;display:flex;align-items:center;justify-content:flex-end}.pil-badges{display:flex;align-items:center;gap:4px;flex-wrap:wrap;justify-content:flex-end}.pil-edit-btn{margin-left:4px;flex-shrink:0}ui-empty-state{padding:12px 0}.pil-muted{color:#1e293b;font-weight:400}.pil-danger{color:#ef4444;font-weight:600}.pil-link{font-size:.875rem;font-weight:500;color:#2563eb;text-decoration:none}.pil-link:hover{text-decoration:underline}.pil-link--href{overflow-wrap:anywhere;word-break:break-word}.pil-link:focus-visible,.pil-header-link:focus-visible{outline:2px solid #3b82f6;outline-offset:2px;border-radius:2px}.pil-link-icon{display:inline-flex;align-items:center;gap:5px;font-size:.875rem;font-weight:500;color:#1e293b;text-decoration:none}.pil-link-icon svg{color:#94a3b8;flex-shrink:0}.pil-grid-2{display:grid;grid-template-columns:1fr 1fr}.pil-grid-cell{display:flex;flex-direction:column;gap:3px;padding:10px 14px;border-right:1px solid #f1f5f9}.pil-grid-cell:last-child{border-right:none}.pil-value--block{text-align:left;justify-content:flex-start}\n"]
25391
+ styles: [":host{display:flex;flex-direction:column;gap:12px}.pil-section{border:1px solid #e2e8f0;border-radius:8px;overflow:hidden}.pil-section-label{display:flex;justify-content:space-between;align-items:center;font-size:.6875rem;font-weight:700;letter-spacing:.07em;color:#94a3b8;text-transform:uppercase;padding:8px 14px;background:#f8fafc;border-bottom:1px solid #e2e8f0}.pil-header-link{font-size:.75rem;font-weight:500;color:#2563eb;text-decoration:none;text-transform:none;letter-spacing:0}.pil-header-link:hover{text-decoration:underline}.pil-row{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:9px 14px;border-bottom:1px solid #f1f5f9}.pil-row:last-child{border-bottom:none}.pil-row--inline{justify-content:flex-start}.pil-row--inline .pil-value{text-align:left;justify-content:flex-start;flex-wrap:wrap;min-width:0;overflow-wrap:anywhere;word-break:break-word}.pil-label{font-size:.8125rem;color:#64748b;flex-shrink:0}.pil-value{font-size:.875rem;font-weight:500;color:#1e293b;text-align:right;display:flex;align-items:center;justify-content:flex-end}.pil-multiline{white-space:pre-line;overflow-wrap:anywhere;word-break:break-word}.pil-strong .pil-label,.pil-strong .pil-value,.pil-strong .pil-muted{font-weight:700;color:#0f172a}.pil-badges{display:flex;align-items:center;gap:4px;flex-wrap:wrap;justify-content:flex-end}.pil-edit-btn{margin-left:4px;flex-shrink:0}ui-empty-state{padding:12px 0}.pil-muted{color:#1e293b;font-weight:400}.pil-danger{color:#ef4444;font-weight:600}.pil-link{font-size:.875rem;font-weight:500;color:#2563eb;text-decoration:none}.pil-link:hover{text-decoration:underline}.pil-link--href{overflow-wrap:anywhere;word-break:break-word}.pil-link:focus-visible,.pil-header-link:focus-visible{outline:2px solid #3b82f6;outline-offset:2px;border-radius:2px}.pil-link-icon{display:inline-flex;align-items:center;gap:5px;font-size:.875rem;font-weight:500;color:#1e293b;text-decoration:none}.pil-link-icon svg{color:#94a3b8;flex-shrink:0}.pil-grid-2{display:grid;grid-template-columns:1fr 1fr}.pil-grid-cell{display:flex;flex-direction:column;gap:3px;padding:10px 14px;border-right:1px solid #f1f5f9}.pil-grid-cell:last-child{border-right:none}.pil-value--block{text-align:left;justify-content:flex-start}\n"]
24969
25392
  }]
24970
25393
  }],
24971
25394
  propDecorators: {
@@ -26193,6 +26616,7 @@ const EXTRA_ICONS = {
26193
26616
  "arrow-left": "M19 12H5 M12 19l-7-7 7-7",
26194
26617
  "bell": "M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9 M13.73 21a2 2 0 0 1-3.46 0",
26195
26618
  "print": "M6 9V2h12v7 M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2 M6 14h12v8H6z",
26619
+ "shield": "M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z",
26196
26620
  "lock": "M5 11h14a2 2 0 0 1 2 2v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-7a2 2 0 0 1 2-2z M7 11V7a5 5 0 0 1 10 0v4",
26197
26621
  "arrow-up": "M12 19V5 M5 12l7-7 7 7",
26198
26622
  "arrow-down": "M12 5v14 M19 12l-7 7-7-7",
@@ -26522,95 +26946,898 @@ var TimelineComponent = class TimelineComponent {
26522
26946
  },
26523
26947
  ngImport: i0,
26524
26948
  template: `
26525
- @if (items().length) {
26526
- @if (maxHeight()) {
26527
- <div class="tl-scroll" role="region" tabindex="0" [attr.aria-label]="ariaLabel() || 'Timeline'" [style.max-height]="maxHeight()">
26528
- <ng-container [ngTemplateOutlet]="listTpl" />
26949
+ @if (items().length) {
26950
+ @if (maxHeight()) {
26951
+ <div class="tl-scroll" role="region" tabindex="0" [attr.aria-label]="ariaLabel() || 'Timeline'" [style.max-height]="maxHeight()">
26952
+ <ng-container [ngTemplateOutlet]="listTpl" />
26953
+ </div>
26954
+ } @else {
26955
+ <ng-container [ngTemplateOutlet]="listTpl" />
26956
+ }
26957
+ } @else if (emptyMessage()) {
26958
+ <ui-hint class="tl-empty">{{ emptyMessage() }}</ui-hint>
26959
+ }
26960
+ <ng-template #listTpl>
26961
+ <ol class="tl" [attr.aria-label]="ariaLabel() || null">
26962
+ @for (item of items(); track item.id ?? $index) {
26963
+ <li [attr.data-testid]="item.testId || null" class="tl-item" [class]="'tl-item tl-item--' + (item.tone ?? 'default')" [class.tl-item--icon]="!!item.icon" [style.--tl-color]="dotColor(item)">
26964
+ <span class="tl-marker" aria-hidden="true">
26965
+ @if (item.icon) { <ui-icon [name]="item.icon" [interactive]="false" [size]="12" /> }
26966
+ </span>
26967
+ <div class="tl-content">
26968
+ <div class="tl-head">
26969
+ <span class="tl-title">{{ item.title }}</span>
26970
+ @if (item.badge) { <ng-container [ngTemplateOutlet]="badgeTpl" [ngTemplateOutletContext]="{ $implicit: item.badge }" /> }
26971
+ @for (b of item.badges ?? []; track $index) { <ng-container [ngTemplateOutlet]="badgeTpl" [ngTemplateOutletContext]="{ $implicit: b }" /> }
26972
+ @if (timePosition() === 'end' && (item.time || item.dateTime)) {
26973
+ <time class="tl-time tl-time--end" [attr.datetime]="item.dateTime || null">{{ item.time || item.dateTime }}</time>
26974
+ }
26975
+ </div>
26976
+ @if (item.description) { <p class="tl-description">{{ item.description }}</p> }
26977
+ @if (timePosition() !== 'end' && (item.time || item.dateTime)) {
26978
+ <time class="tl-time" [attr.datetime]="item.dateTime || null">{{ item.time || item.dateTime }}</time>
26979
+ }
26980
+ </div>
26981
+ </li>
26982
+ }
26983
+ </ol>
26984
+ </ng-template>
26985
+ <ng-template #badgeTpl let-b>
26986
+ @if (b.tooltip) {
26987
+ <span class="tl-badge-tip" tabindex="0" [uiTooltip]="b.tooltip" [attr.data-testid]="b.testId || null"><ui-badge [label]="b.label" [variant]="b.variant" /></span>
26988
+ } @else {
26989
+ <ui-badge [label]="b.label" [variant]="b.variant" [attr.data-testid]="b.testId || null" />
26990
+ }
26991
+ </ng-template>
26992
+ `,
26993
+ isInline: true,
26994
+ styles: [":host{display:block}.tl{list-style:none;margin:0;padding:0}.tl-item{position:relative;display:flex;gap:12px;padding-bottom:16px;--tl-color: #475569}.tl-item:last-child{padding-bottom:0}.tl-item:before{content:\"\";position:absolute;left:7px;top:18px;bottom:-2px;width:2px;background:#e2e8f0}.tl-item:last-child:before{display:none}.tl-item--success{--tl-color: #15803d}.tl-item--warning{--tl-color: #b45309}.tl-item--danger{--tl-color: #b91c1c}.tl-marker{flex-shrink:0;box-sizing:border-box;width:16px;height:16px;margin-top:2px;border-radius:50%;background:var(--tl-color);border:3px solid #fff;box-shadow:0 0 0 1px var(--tl-color);display:inline-flex;align-items:center;justify-content:center;position:relative;z-index:1}.tl-item--icon .tl-marker{border:none;box-shadow:none;color:#fff}.tl-content{flex:1;min-width:0;overflow-wrap:anywhere;word-break:break-word}.tl-head{display:flex;align-items:center;flex-wrap:wrap;gap:4px 8px}.tl-badge-tip{display:inline-flex;border-radius:999px}.tl-badge-tip:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.tl-time--end{display:inline;margin:0 0 0 auto;padding-left:8px;white-space:nowrap}.tl-scroll{overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain;padding-right:8px}.tl-scroll:focus-visible{outline:2px solid #3b82f6;outline-offset:2px;border-radius:4px}.tl-title{font-size:.875rem;font-weight:600;color:#1e293b;line-height:1.4}.tl-description{margin:2px 0 0;font-size:.8125rem;line-height:1.5;color:#475569}.tl-time{display:block;margin-top:2px;font-size:.75rem;color:#64748b}\n"],
26995
+ dependencies: [
26996
+ {
26997
+ kind: "component",
26998
+ type: BadgeComponent,
26999
+ selector: "ui-badge",
27000
+ inputs: ["label", "variant"]
27001
+ },
27002
+ {
27003
+ kind: "component",
27004
+ type: HintComponent,
27005
+ selector: "ui-hint"
27006
+ },
27007
+ {
27008
+ kind: "component",
27009
+ type: IconComponent,
27010
+ selector: "ui-icon",
27011
+ inputs: [
27012
+ "name",
27013
+ "tooltip",
27014
+ "ariaLabel",
27015
+ "size",
27016
+ "variant",
27017
+ "disabled",
27018
+ "loading",
27019
+ "interactive"
27020
+ ],
27021
+ outputs: ["iconClick"]
27022
+ },
27023
+ {
27024
+ kind: "directive",
27025
+ type: NgTemplateOutlet,
27026
+ selector: "[ngTemplateOutlet]",
27027
+ inputs: [
27028
+ "ngTemplateOutletContext",
27029
+ "ngTemplateOutlet",
27030
+ "ngTemplateOutletInjector"
27031
+ ]
27032
+ },
27033
+ {
27034
+ kind: "directive",
27035
+ type: TooltipDirective,
27036
+ selector: "[uiTooltip]",
27037
+ inputs: ["uiTooltip", "tooltipPosition"]
27038
+ }
27039
+ ],
27040
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
27041
+ });
27042
+ }
27043
+ };
27044
+ i0.ɵɵngDeclareClassMetadata({
27045
+ minVersion: "12.0.0",
27046
+ version: "22.2.2",
27047
+ ngImport: i0,
27048
+ type: TimelineComponent,
27049
+ decorators: [{
27050
+ type: Component,
27051
+ args: [{
27052
+ selector: "ui-timeline",
27053
+ standalone: true,
27054
+ changeDetection: ChangeDetectionStrategy.OnPush,
27055
+ imports: [
27056
+ BadgeComponent,
27057
+ HintComponent,
27058
+ IconComponent,
27059
+ NgTemplateOutlet,
27060
+ TooltipDirective
27061
+ ],
27062
+ template: `
27063
+ @if (items().length) {
27064
+ @if (maxHeight()) {
27065
+ <div class="tl-scroll" role="region" tabindex="0" [attr.aria-label]="ariaLabel() || 'Timeline'" [style.max-height]="maxHeight()">
27066
+ <ng-container [ngTemplateOutlet]="listTpl" />
27067
+ </div>
27068
+ } @else {
27069
+ <ng-container [ngTemplateOutlet]="listTpl" />
27070
+ }
27071
+ } @else if (emptyMessage()) {
27072
+ <ui-hint class="tl-empty">{{ emptyMessage() }}</ui-hint>
27073
+ }
27074
+ <ng-template #listTpl>
27075
+ <ol class="tl" [attr.aria-label]="ariaLabel() || null">
27076
+ @for (item of items(); track item.id ?? $index) {
27077
+ <li [attr.data-testid]="item.testId || null" class="tl-item" [class]="'tl-item tl-item--' + (item.tone ?? 'default')" [class.tl-item--icon]="!!item.icon" [style.--tl-color]="dotColor(item)">
27078
+ <span class="tl-marker" aria-hidden="true">
27079
+ @if (item.icon) { <ui-icon [name]="item.icon" [interactive]="false" [size]="12" /> }
27080
+ </span>
27081
+ <div class="tl-content">
27082
+ <div class="tl-head">
27083
+ <span class="tl-title">{{ item.title }}</span>
27084
+ @if (item.badge) { <ng-container [ngTemplateOutlet]="badgeTpl" [ngTemplateOutletContext]="{ $implicit: item.badge }" /> }
27085
+ @for (b of item.badges ?? []; track $index) { <ng-container [ngTemplateOutlet]="badgeTpl" [ngTemplateOutletContext]="{ $implicit: b }" /> }
27086
+ @if (timePosition() === 'end' && (item.time || item.dateTime)) {
27087
+ <time class="tl-time tl-time--end" [attr.datetime]="item.dateTime || null">{{ item.time || item.dateTime }}</time>
27088
+ }
27089
+ </div>
27090
+ @if (item.description) { <p class="tl-description">{{ item.description }}</p> }
27091
+ @if (timePosition() !== 'end' && (item.time || item.dateTime)) {
27092
+ <time class="tl-time" [attr.datetime]="item.dateTime || null">{{ item.time || item.dateTime }}</time>
27093
+ }
27094
+ </div>
27095
+ </li>
27096
+ }
27097
+ </ol>
27098
+ </ng-template>
27099
+ <ng-template #badgeTpl let-b>
27100
+ @if (b.tooltip) {
27101
+ <span class="tl-badge-tip" tabindex="0" [uiTooltip]="b.tooltip" [attr.data-testid]="b.testId || null"><ui-badge [label]="b.label" [variant]="b.variant" /></span>
27102
+ } @else {
27103
+ <ui-badge [label]="b.label" [variant]="b.variant" [attr.data-testid]="b.testId || null" />
27104
+ }
27105
+ </ng-template>
27106
+ `,
27107
+ styles: [":host{display:block}.tl{list-style:none;margin:0;padding:0}.tl-item{position:relative;display:flex;gap:12px;padding-bottom:16px;--tl-color: #475569}.tl-item:last-child{padding-bottom:0}.tl-item:before{content:\"\";position:absolute;left:7px;top:18px;bottom:-2px;width:2px;background:#e2e8f0}.tl-item:last-child:before{display:none}.tl-item--success{--tl-color: #15803d}.tl-item--warning{--tl-color: #b45309}.tl-item--danger{--tl-color: #b91c1c}.tl-marker{flex-shrink:0;box-sizing:border-box;width:16px;height:16px;margin-top:2px;border-radius:50%;background:var(--tl-color);border:3px solid #fff;box-shadow:0 0 0 1px var(--tl-color);display:inline-flex;align-items:center;justify-content:center;position:relative;z-index:1}.tl-item--icon .tl-marker{border:none;box-shadow:none;color:#fff}.tl-content{flex:1;min-width:0;overflow-wrap:anywhere;word-break:break-word}.tl-head{display:flex;align-items:center;flex-wrap:wrap;gap:4px 8px}.tl-badge-tip{display:inline-flex;border-radius:999px}.tl-badge-tip:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.tl-time--end{display:inline;margin:0 0 0 auto;padding-left:8px;white-space:nowrap}.tl-scroll{overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain;padding-right:8px}.tl-scroll:focus-visible{outline:2px solid #3b82f6;outline-offset:2px;border-radius:4px}.tl-title{font-size:.875rem;font-weight:600;color:#1e293b;line-height:1.4}.tl-description{margin:2px 0 0;font-size:.8125rem;line-height:1.5;color:#475569}.tl-time{display:block;margin-top:2px;font-size:.75rem;color:#64748b}\n"]
27108
+ }]
27109
+ }],
27110
+ propDecorators: {
27111
+ items: [{
27112
+ type: i0.Input,
27113
+ args: [{
27114
+ isSignal: true,
27115
+ alias: "items",
27116
+ required: false
27117
+ }]
27118
+ }],
27119
+ ariaLabel: [{
27120
+ type: i0.Input,
27121
+ args: [{
27122
+ isSignal: true,
27123
+ alias: "ariaLabel",
27124
+ required: false
27125
+ }]
27126
+ }],
27127
+ emptyMessage: [{
27128
+ type: i0.Input,
27129
+ args: [{
27130
+ isSignal: true,
27131
+ alias: "emptyMessage",
27132
+ required: false
27133
+ }]
27134
+ }],
27135
+ maxHeight: [{
27136
+ type: i0.Input,
27137
+ args: [{
27138
+ isSignal: true,
27139
+ alias: "maxHeight",
27140
+ required: false
27141
+ }]
27142
+ }],
27143
+ timePosition: [{
27144
+ type: i0.Input,
27145
+ args: [{
27146
+ isSignal: true,
27147
+ alias: "timePosition",
27148
+ required: false
27149
+ }]
27150
+ }]
27151
+ }
27152
+ });
27153
+ const RADIUS_PX = {
27154
+ none: "0",
27155
+ sm: "4px",
27156
+ md: "8px",
27157
+ lg: "12px",
27158
+ full: "9999px"
27159
+ };
27160
+ var ImageComponent = class ImageComponent {
27161
+ constructor() {
27162
+ this.src = input(null, ...ngDevMode ? [{ debugName: "src" }] : /* istanbul ignore next */ []);
27163
+ this.alt = input("", ...ngDevMode ? [{ debugName: "alt" }] : /* istanbul ignore next */ []);
27164
+ this.fit = input("contain", ...ngDevMode ? [{ debugName: "fit" }] : /* istanbul ignore next */ []);
27165
+ this.width = input("", ...ngDevMode ? [{ debugName: "width" }] : /* istanbul ignore next */ []);
27166
+ this.height = input("", ...ngDevMode ? [{ debugName: "height" }] : /* istanbul ignore next */ []);
27167
+ this.maxWidth = input("100%", ...ngDevMode ? [{ debugName: "maxWidth" }] : /* istanbul ignore next */ []);
27168
+ this.maxHeight = input("", ...ngDevMode ? [{ debugName: "maxHeight" }] : /* istanbul ignore next */ []);
27169
+ this.aspectRatio = input("", ...ngDevMode ? [{ debugName: "aspectRatio" }] : /* istanbul ignore next */ []);
27170
+ this.radius = input("none", ...ngDevMode ? [{ debugName: "radius" }] : /* istanbul ignore next */ []);
27171
+ this.bordered = input(false, ...ngDevMode ? [{ debugName: "bordered" }] : /* istanbul ignore next */ []);
27172
+ this.align = input("start", ...ngDevMode ? [{ debugName: "align" }] : /* istanbul ignore next */ []);
27173
+ this.placeholder = input(true, ...ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []);
27174
+ this.priority = input(false, ...ngDevMode ? [{ debugName: "priority" }] : /* istanbul ignore next */ []);
27175
+ this.retryKey = input(null, ...ngDevMode ? [{ debugName: "retryKey" }] : /* istanbul ignore next */ []);
27176
+ this.loaded = output();
27177
+ this.failed = output();
27178
+ this._failed = signal(false, ...ngDevMode ? [{ debugName: "_failed" }] : /* istanbul ignore next */ []);
27179
+ this._url = computed(() => this.src()?.trim() || null, ...ngDevMode ? [{ debugName: "_url" }] : /* istanbul ignore next */ []);
27180
+ this.radiusCss = computed(() => RADIUS_PX[this.radius()] ?? "0", ...ngDevMode ? [{ debugName: "radiusCss" }] : /* istanbul ignore next */ []);
27181
+ this.imgWidth = computed(() => this.width() || null, ...ngDevMode ? [{ debugName: "imgWidth" }] : /* istanbul ignore next */ []);
27182
+ this.imgHeight = computed(() => this.height() || null, ...ngDevMode ? [{ debugName: "imgHeight" }] : /* istanbul ignore next */ []);
27183
+ this.boxWidth = computed(() => this.width() || null, ...ngDevMode ? [{ debugName: "boxWidth" }] : /* istanbul ignore next */ []);
27184
+ this.boxHeight = computed(() => this.height() || null, ...ngDevMode ? [{ debugName: "boxHeight" }] : /* istanbul ignore next */ []);
27185
+ this.isBlock = computed(() => this.width() === "100%", ...ngDevMode ? [{ debugName: "isBlock" }] : /* istanbul ignore next */ []);
27186
+ effect(() => {
27187
+ this.src();
27188
+ this.retryKey();
27189
+ untracked(() => this._failed.set(false));
27190
+ });
27191
+ }
27192
+ _onError() {
27193
+ this._failed.set(true);
27194
+ this.failed.emit();
27195
+ }
27196
+ static {
27197
+ this.ɵfac = i0.ɵɵngDeclareFactory({
27198
+ minVersion: "12.0.0",
27199
+ version: "22.2.2",
27200
+ ngImport: i0,
27201
+ type: ImageComponent,
27202
+ deps: [],
27203
+ target: i0.ɵɵFactoryTarget.Component
27204
+ });
27205
+ }
27206
+ static {
27207
+ this.ɵcmp = i0.ɵɵngDeclareComponent({
27208
+ minVersion: "17.0.0",
27209
+ version: "22.2.2",
27210
+ type: ImageComponent,
27211
+ isStandalone: true,
27212
+ selector: "ui-image",
27213
+ inputs: {
27214
+ src: {
27215
+ classPropertyName: "src",
27216
+ publicName: "src",
27217
+ isSignal: true,
27218
+ isRequired: false,
27219
+ transformFunction: null
27220
+ },
27221
+ alt: {
27222
+ classPropertyName: "alt",
27223
+ publicName: "alt",
27224
+ isSignal: true,
27225
+ isRequired: false,
27226
+ transformFunction: null
27227
+ },
27228
+ fit: {
27229
+ classPropertyName: "fit",
27230
+ publicName: "fit",
27231
+ isSignal: true,
27232
+ isRequired: false,
27233
+ transformFunction: null
27234
+ },
27235
+ width: {
27236
+ classPropertyName: "width",
27237
+ publicName: "width",
27238
+ isSignal: true,
27239
+ isRequired: false,
27240
+ transformFunction: null
27241
+ },
27242
+ height: {
27243
+ classPropertyName: "height",
27244
+ publicName: "height",
27245
+ isSignal: true,
27246
+ isRequired: false,
27247
+ transformFunction: null
27248
+ },
27249
+ maxWidth: {
27250
+ classPropertyName: "maxWidth",
27251
+ publicName: "maxWidth",
27252
+ isSignal: true,
27253
+ isRequired: false,
27254
+ transformFunction: null
27255
+ },
27256
+ maxHeight: {
27257
+ classPropertyName: "maxHeight",
27258
+ publicName: "maxHeight",
27259
+ isSignal: true,
27260
+ isRequired: false,
27261
+ transformFunction: null
27262
+ },
27263
+ aspectRatio: {
27264
+ classPropertyName: "aspectRatio",
27265
+ publicName: "aspectRatio",
27266
+ isSignal: true,
27267
+ isRequired: false,
27268
+ transformFunction: null
27269
+ },
27270
+ radius: {
27271
+ classPropertyName: "radius",
27272
+ publicName: "radius",
27273
+ isSignal: true,
27274
+ isRequired: false,
27275
+ transformFunction: null
27276
+ },
27277
+ bordered: {
27278
+ classPropertyName: "bordered",
27279
+ publicName: "bordered",
27280
+ isSignal: true,
27281
+ isRequired: false,
27282
+ transformFunction: null
27283
+ },
27284
+ align: {
27285
+ classPropertyName: "align",
27286
+ publicName: "align",
27287
+ isSignal: true,
27288
+ isRequired: false,
27289
+ transformFunction: null
27290
+ },
27291
+ placeholder: {
27292
+ classPropertyName: "placeholder",
27293
+ publicName: "placeholder",
27294
+ isSignal: true,
27295
+ isRequired: false,
27296
+ transformFunction: null
27297
+ },
27298
+ priority: {
27299
+ classPropertyName: "priority",
27300
+ publicName: "priority",
27301
+ isSignal: true,
27302
+ isRequired: false,
27303
+ transformFunction: null
27304
+ },
27305
+ retryKey: {
27306
+ classPropertyName: "retryKey",
27307
+ publicName: "retryKey",
27308
+ isSignal: true,
27309
+ isRequired: false,
27310
+ transformFunction: null
27311
+ }
27312
+ },
27313
+ outputs: {
27314
+ loaded: "loaded",
27315
+ failed: "failed"
27316
+ },
27317
+ host: { properties: {
27318
+ "style.text-align": "align()",
27319
+ "class.im-block": "isBlock()"
27320
+ } },
27321
+ ngImport: i0,
27322
+ template: `
27323
+ @if (_url() && !_failed()) {
27324
+ <img class="im-img" [src]="_url()" [attr.alt]="alt()" [attr.loading]="priority() ? 'eager' : 'lazy'"
27325
+ [attr.fetchpriority]="priority() ? 'high' : null" decoding="async"
27326
+ [style.width]="imgWidth()" [style.height]="imgHeight()" [style.max-width]="maxWidth()" [style.max-height]="maxHeight() || null"
27327
+ [style.aspect-ratio]="aspectRatio() || null" [style.object-fit]="fit()" [style.border-radius]="radiusCss()"
27328
+ [class.im-bordered]="bordered()" (load)="loaded.emit()" (error)="_onError()" />
27329
+ } @else if (placeholder()) {
27330
+ <span class="im-ph" [class.im-bordered]="bordered()" [attr.role]="alt() ? 'img' : null" [attr.aria-label]="alt() || null" [attr.aria-hidden]="alt() ? null : 'true'"
27331
+ [style.width]="boxWidth()" [style.height]="boxHeight()" [style.max-width]="maxWidth()" [style.max-height]="maxHeight() || null"
27332
+ [style.aspect-ratio]="aspectRatio() || null" [style.border-radius]="radiusCss()">
27333
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="4" width="18" height="16" rx="2"/><circle cx="9" cy="10" r="1.8"/><path d="M21 16l-5-5-8 9"/></svg>
27334
+ </span>
27335
+ }
27336
+ `,
27337
+ isInline: true,
27338
+ styles: [":host{display:inline-block;max-width:100%;line-height:0}:host(.im-block){display:block}.im-img{display:inline-block;max-width:100%;height:auto;vertical-align:top}.im-bordered{border:1px solid #e2e8f0;box-sizing:border-box}.im-ph{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;min-width:48px;min-height:48px;background:#f1f5f9;color:#94a3b8;vertical-align:top}.im-ph svg{width:32px;height:32px;max-width:55%;max-height:55%}\n"],
27339
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
27340
+ });
27341
+ }
27342
+ };
27343
+ i0.ɵɵngDeclareClassMetadata({
27344
+ minVersion: "12.0.0",
27345
+ version: "22.2.2",
27346
+ ngImport: i0,
27347
+ type: ImageComponent,
27348
+ decorators: [{
27349
+ type: Component,
27350
+ args: [{
27351
+ selector: "ui-image",
27352
+ standalone: true,
27353
+ changeDetection: ChangeDetectionStrategy.OnPush,
27354
+ host: {
27355
+ "[style.text-align]": "align()",
27356
+ "[class.im-block]": "isBlock()"
27357
+ },
27358
+ template: `
27359
+ @if (_url() && !_failed()) {
27360
+ <img class="im-img" [src]="_url()" [attr.alt]="alt()" [attr.loading]="priority() ? 'eager' : 'lazy'"
27361
+ [attr.fetchpriority]="priority() ? 'high' : null" decoding="async"
27362
+ [style.width]="imgWidth()" [style.height]="imgHeight()" [style.max-width]="maxWidth()" [style.max-height]="maxHeight() || null"
27363
+ [style.aspect-ratio]="aspectRatio() || null" [style.object-fit]="fit()" [style.border-radius]="radiusCss()"
27364
+ [class.im-bordered]="bordered()" (load)="loaded.emit()" (error)="_onError()" />
27365
+ } @else if (placeholder()) {
27366
+ <span class="im-ph" [class.im-bordered]="bordered()" [attr.role]="alt() ? 'img' : null" [attr.aria-label]="alt() || null" [attr.aria-hidden]="alt() ? null : 'true'"
27367
+ [style.width]="boxWidth()" [style.height]="boxHeight()" [style.max-width]="maxWidth()" [style.max-height]="maxHeight() || null"
27368
+ [style.aspect-ratio]="aspectRatio() || null" [style.border-radius]="radiusCss()">
27369
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="4" width="18" height="16" rx="2"/><circle cx="9" cy="10" r="1.8"/><path d="M21 16l-5-5-8 9"/></svg>
27370
+ </span>
27371
+ }
27372
+ `,
27373
+ styles: [":host{display:inline-block;max-width:100%;line-height:0}:host(.im-block){display:block}.im-img{display:inline-block;max-width:100%;height:auto;vertical-align:top}.im-bordered{border:1px solid #e2e8f0;box-sizing:border-box}.im-ph{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;min-width:48px;min-height:48px;background:#f1f5f9;color:#94a3b8;vertical-align:top}.im-ph svg{width:32px;height:32px;max-width:55%;max-height:55%}\n"]
27374
+ }]
27375
+ }],
27376
+ ctorParameters: () => [],
27377
+ propDecorators: {
27378
+ src: [{
27379
+ type: i0.Input,
27380
+ args: [{
27381
+ isSignal: true,
27382
+ alias: "src",
27383
+ required: false
27384
+ }]
27385
+ }],
27386
+ alt: [{
27387
+ type: i0.Input,
27388
+ args: [{
27389
+ isSignal: true,
27390
+ alias: "alt",
27391
+ required: false
27392
+ }]
27393
+ }],
27394
+ fit: [{
27395
+ type: i0.Input,
27396
+ args: [{
27397
+ isSignal: true,
27398
+ alias: "fit",
27399
+ required: false
27400
+ }]
27401
+ }],
27402
+ width: [{
27403
+ type: i0.Input,
27404
+ args: [{
27405
+ isSignal: true,
27406
+ alias: "width",
27407
+ required: false
27408
+ }]
27409
+ }],
27410
+ height: [{
27411
+ type: i0.Input,
27412
+ args: [{
27413
+ isSignal: true,
27414
+ alias: "height",
27415
+ required: false
27416
+ }]
27417
+ }],
27418
+ maxWidth: [{
27419
+ type: i0.Input,
27420
+ args: [{
27421
+ isSignal: true,
27422
+ alias: "maxWidth",
27423
+ required: false
27424
+ }]
27425
+ }],
27426
+ maxHeight: [{
27427
+ type: i0.Input,
27428
+ args: [{
27429
+ isSignal: true,
27430
+ alias: "maxHeight",
27431
+ required: false
27432
+ }]
27433
+ }],
27434
+ aspectRatio: [{
27435
+ type: i0.Input,
27436
+ args: [{
27437
+ isSignal: true,
27438
+ alias: "aspectRatio",
27439
+ required: false
27440
+ }]
27441
+ }],
27442
+ radius: [{
27443
+ type: i0.Input,
27444
+ args: [{
27445
+ isSignal: true,
27446
+ alias: "radius",
27447
+ required: false
27448
+ }]
27449
+ }],
27450
+ bordered: [{
27451
+ type: i0.Input,
27452
+ args: [{
27453
+ isSignal: true,
27454
+ alias: "bordered",
27455
+ required: false
27456
+ }]
27457
+ }],
27458
+ align: [{
27459
+ type: i0.Input,
27460
+ args: [{
27461
+ isSignal: true,
27462
+ alias: "align",
27463
+ required: false
27464
+ }]
27465
+ }],
27466
+ placeholder: [{
27467
+ type: i0.Input,
27468
+ args: [{
27469
+ isSignal: true,
27470
+ alias: "placeholder",
27471
+ required: false
27472
+ }]
27473
+ }],
27474
+ priority: [{
27475
+ type: i0.Input,
27476
+ args: [{
27477
+ isSignal: true,
27478
+ alias: "priority",
27479
+ required: false
27480
+ }]
27481
+ }],
27482
+ retryKey: [{
27483
+ type: i0.Input,
27484
+ args: [{
27485
+ isSignal: true,
27486
+ alias: "retryKey",
27487
+ required: false
27488
+ }]
27489
+ }],
27490
+ loaded: [{
27491
+ type: i0.Output,
27492
+ args: ["loaded"]
27493
+ }],
27494
+ failed: [{
27495
+ type: i0.Output,
27496
+ args: ["failed"]
27497
+ }]
27498
+ }
27499
+ });
27500
+ var LiveRegionComponent = class LiveRegionComponent {
27501
+ constructor() {
27502
+ this.message = input("", ...ngDevMode ? [{ debugName: "message" }] : /* istanbul ignore next */ []);
27503
+ this.politeness = input("polite", ...ngDevMode ? [{ debugName: "politeness" }] : /* istanbul ignore next */ []);
27504
+ this.atomic = input(true, ...ngDevMode ? [{ debugName: "atomic" }] : /* istanbul ignore next */ []);
27505
+ this.visible = input(false, ...ngDevMode ? [{ debugName: "visible" }] : /* istanbul ignore next */ []);
27506
+ this.role = computed(() => this.politeness() === "assertive" ? "alert" : "status", ...ngDevMode ? [{ debugName: "role" }] : /* istanbul ignore next */ []);
27507
+ }
27508
+ static {
27509
+ this.ɵfac = i0.ɵɵngDeclareFactory({
27510
+ minVersion: "12.0.0",
27511
+ version: "22.2.2",
27512
+ ngImport: i0,
27513
+ type: LiveRegionComponent,
27514
+ deps: [],
27515
+ target: i0.ɵɵFactoryTarget.Component
27516
+ });
27517
+ }
27518
+ static {
27519
+ this.ɵcmp = i0.ɵɵngDeclareComponent({
27520
+ minVersion: "17.1.0",
27521
+ version: "22.2.2",
27522
+ type: LiveRegionComponent,
27523
+ isStandalone: true,
27524
+ selector: "ui-live-region",
27525
+ inputs: {
27526
+ message: {
27527
+ classPropertyName: "message",
27528
+ publicName: "message",
27529
+ isSignal: true,
27530
+ isRequired: false,
27531
+ transformFunction: null
27532
+ },
27533
+ politeness: {
27534
+ classPropertyName: "politeness",
27535
+ publicName: "politeness",
27536
+ isSignal: true,
27537
+ isRequired: false,
27538
+ transformFunction: null
27539
+ },
27540
+ atomic: {
27541
+ classPropertyName: "atomic",
27542
+ publicName: "atomic",
27543
+ isSignal: true,
27544
+ isRequired: false,
27545
+ transformFunction: null
27546
+ },
27547
+ visible: {
27548
+ classPropertyName: "visible",
27549
+ publicName: "visible",
27550
+ isSignal: true,
27551
+ isRequired: false,
27552
+ transformFunction: null
27553
+ }
27554
+ },
27555
+ ngImport: i0,
27556
+ template: `<div class="lr" [class.lr-hidden]="!visible()" [attr.role]="role()" [attr.aria-live]="politeness()" [attr.aria-atomic]="atomic() ? 'true' : 'false'">{{ message() }}</div>`,
27557
+ isInline: true,
27558
+ styles: [":host{display:block}.lr-hidden{position:absolute;width:1px;height:1px;margin:-1px;padding:0;border:0;overflow:hidden;clip:rect(0 0 0 0);-webkit-clip-path:inset(50%);clip-path:inset(50%);white-space:nowrap}\n"],
27559
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
27560
+ });
27561
+ }
27562
+ };
27563
+ i0.ɵɵngDeclareClassMetadata({
27564
+ minVersion: "12.0.0",
27565
+ version: "22.2.2",
27566
+ ngImport: i0,
27567
+ type: LiveRegionComponent,
27568
+ decorators: [{
27569
+ type: Component,
27570
+ args: [{
27571
+ selector: "ui-live-region",
27572
+ standalone: true,
27573
+ changeDetection: ChangeDetectionStrategy.OnPush,
27574
+ template: `<div class="lr" [class.lr-hidden]="!visible()" [attr.role]="role()" [attr.aria-live]="politeness()" [attr.aria-atomic]="atomic() ? 'true' : 'false'">{{ message() }}</div>`,
27575
+ styles: [":host{display:block}.lr-hidden{position:absolute;width:1px;height:1px;margin:-1px;padding:0;border:0;overflow:hidden;clip:rect(0 0 0 0);-webkit-clip-path:inset(50%);clip-path:inset(50%);white-space:nowrap}\n"]
27576
+ }]
27577
+ }],
27578
+ propDecorators: {
27579
+ message: [{
27580
+ type: i0.Input,
27581
+ args: [{
27582
+ isSignal: true,
27583
+ alias: "message",
27584
+ required: false
27585
+ }]
27586
+ }],
27587
+ politeness: [{
27588
+ type: i0.Input,
27589
+ args: [{
27590
+ isSignal: true,
27591
+ alias: "politeness",
27592
+ required: false
27593
+ }]
27594
+ }],
27595
+ atomic: [{
27596
+ type: i0.Input,
27597
+ args: [{
27598
+ isSignal: true,
27599
+ alias: "atomic",
27600
+ required: false
27601
+ }]
27602
+ }],
27603
+ visible: [{
27604
+ type: i0.Input,
27605
+ args: [{
27606
+ isSignal: true,
27607
+ alias: "visible",
27608
+ required: false
27609
+ }]
27610
+ }]
27611
+ }
27612
+ });
27613
+ var ImageGalleryComponent = class ImageGalleryComponent {
27614
+ constructor() {
27615
+ this.images = input([], ...ngDevMode ? [{ debugName: "images" }] : /* istanbul ignore next */ []);
27616
+ this.index = model(0, ...ngDevMode ? [{ debugName: "index" }] : /* istanbul ignore next */ []);
27617
+ this.loop = input(true, ...ngDevMode ? [{ debugName: "loop" }] : /* istanbul ignore next */ []);
27618
+ this.showDots = input(true, ...ngDevMode ? [{ debugName: "showDots" }] : /* istanbul ignore next */ []);
27619
+ this.showCounter = input(true, ...ngDevMode ? [{ debugName: "showCounter" }] : /* istanbul ignore next */ []);
27620
+ this.aspectRatio = input("4 / 3", ...ngDevMode ? [{ debugName: "aspectRatio" }] : /* istanbul ignore next */ []);
27621
+ this.maxHeight = input("70vh", ...ngDevMode ? [{ debugName: "maxHeight" }] : /* istanbul ignore next */ []);
27622
+ this.fit = input("contain", ...ngDevMode ? [{ debugName: "fit" }] : /* istanbul ignore next */ []);
27623
+ this.ariaLabel = input("Image gallery", ...ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []);
27624
+ this.count = computed(() => this.images().length, ...ngDevMode ? [{ debugName: "count" }] : /* istanbul ignore next */ []);
27625
+ this.position = computed(() => {
27626
+ const n = this.count();
27627
+ const i = Math.trunc(Number(this.index()));
27628
+ return n === 0 || !Number.isFinite(i) ? 0 : Math.min(n - 1, Math.max(0, i));
27629
+ }, ...ngDevMode ? [{ debugName: "position" }] : /* istanbul ignore next */ []);
27630
+ this.current = computed(() => this.images()[this.position()] ?? { src: "" }, ...ngDevMode ? [{ debugName: "current" }] : /* istanbul ignore next */ []);
27631
+ this.currentAlt = computed(() => this.current().alt ?? `Image ${this.position() + 1} of ${this.count()}`, ...ngDevMode ? [{ debugName: "currentAlt" }] : /* istanbul ignore next */ []);
27632
+ this.canPrev = computed(() => this.count() > 1 && (this.loop() || this.position() > 0), ...ngDevMode ? [{ debugName: "canPrev" }] : /* istanbul ignore next */ []);
27633
+ this.canNext = computed(() => this.count() > 1 && (this.loop() || this.position() < this.count() - 1), ...ngDevMode ? [{ debugName: "canNext" }] : /* istanbul ignore next */ []);
27634
+ this.announcement = computed(() => this.count() > 1 ? `Image ${this.position() + 1} of ${this.count()}${this.current().alt ? ": " + this.current().alt : ""}` : "", ...ngDevMode ? [{ debugName: "announcement" }] : /* istanbul ignore next */ []);
27635
+ }
27636
+ prev() {
27637
+ if (this.canPrev()) this.index.set((this.position() - 1 + this.count()) % this.count());
27638
+ }
27639
+ next() {
27640
+ if (this.canNext()) this.index.set((this.position() + 1) % this.count());
27641
+ }
27642
+ go(i) {
27643
+ if (i >= 0 && i < this.count()) this.index.set(i);
27644
+ }
27645
+ onKey(e) {
27646
+ if (this.count() < 2 || e.altKey || e.ctrlKey || e.metaKey) return;
27647
+ if (e.target?.closest("input, textarea, select, [contenteditable=\"true\"], [role=\"slider\"]")) return;
27648
+ if (e.key === "ArrowLeft") {
27649
+ this.prev();
27650
+ e.preventDefault();
27651
+ } else if (e.key === "ArrowRight") {
27652
+ this.next();
27653
+ e.preventDefault();
27654
+ } else if (e.key === "Home") {
27655
+ this.go(0);
27656
+ e.preventDefault();
27657
+ } else if (e.key === "End") {
27658
+ this.go(this.count() - 1);
27659
+ e.preventDefault();
27660
+ }
27661
+ }
27662
+ static {
27663
+ this.ɵfac = i0.ɵɵngDeclareFactory({
27664
+ minVersion: "12.0.0",
27665
+ version: "22.2.2",
27666
+ ngImport: i0,
27667
+ type: ImageGalleryComponent,
27668
+ deps: [],
27669
+ target: i0.ɵɵFactoryTarget.Component
27670
+ });
27671
+ }
27672
+ static {
27673
+ this.ɵcmp = i0.ɵɵngDeclareComponent({
27674
+ minVersion: "17.0.0",
27675
+ version: "22.2.2",
27676
+ type: ImageGalleryComponent,
27677
+ isStandalone: true,
27678
+ selector: "ui-image-gallery",
27679
+ inputs: {
27680
+ images: {
27681
+ classPropertyName: "images",
27682
+ publicName: "images",
27683
+ isSignal: true,
27684
+ isRequired: false,
27685
+ transformFunction: null
27686
+ },
27687
+ index: {
27688
+ classPropertyName: "index",
27689
+ publicName: "index",
27690
+ isSignal: true,
27691
+ isRequired: false,
27692
+ transformFunction: null
27693
+ },
27694
+ loop: {
27695
+ classPropertyName: "loop",
27696
+ publicName: "loop",
27697
+ isSignal: true,
27698
+ isRequired: false,
27699
+ transformFunction: null
27700
+ },
27701
+ showDots: {
27702
+ classPropertyName: "showDots",
27703
+ publicName: "showDots",
27704
+ isSignal: true,
27705
+ isRequired: false,
27706
+ transformFunction: null
27707
+ },
27708
+ showCounter: {
27709
+ classPropertyName: "showCounter",
27710
+ publicName: "showCounter",
27711
+ isSignal: true,
27712
+ isRequired: false,
27713
+ transformFunction: null
27714
+ },
27715
+ aspectRatio: {
27716
+ classPropertyName: "aspectRatio",
27717
+ publicName: "aspectRatio",
27718
+ isSignal: true,
27719
+ isRequired: false,
27720
+ transformFunction: null
27721
+ },
27722
+ maxHeight: {
27723
+ classPropertyName: "maxHeight",
27724
+ publicName: "maxHeight",
27725
+ isSignal: true,
27726
+ isRequired: false,
27727
+ transformFunction: null
27728
+ },
27729
+ fit: {
27730
+ classPropertyName: "fit",
27731
+ publicName: "fit",
27732
+ isSignal: true,
27733
+ isRequired: false,
27734
+ transformFunction: null
27735
+ },
27736
+ ariaLabel: {
27737
+ classPropertyName: "ariaLabel",
27738
+ publicName: "ariaLabel",
27739
+ isSignal: true,
27740
+ isRequired: false,
27741
+ transformFunction: null
27742
+ }
27743
+ },
27744
+ outputs: { index: "indexChange" },
27745
+ ngImport: i0,
27746
+ template: `
27747
+ @if (count() > 0) {
27748
+ <div class="ig" role="group" aria-roledescription="carousel" [attr.aria-label]="ariaLabel()" (keydown)="onKey($event)">
27749
+ <div class="ig-stage">
27750
+ @if (count() > 1) {
27751
+ <ui-button class="ig-nav ig-prev" variant="secondary" size="sm" ariaLabel="Previous image" [disabled]="!canPrev()" (click)="prev()" data-testid="gallery-prev">
27752
+ <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M15 18l-6-6 6-6"/></svg>
27753
+ </ui-button>
27754
+ }
27755
+ <ui-image class="ig-img" [src]="current().src" [alt]="currentAlt()" [fit]="fit()" width="100%" [maxHeight]="maxHeight()" [aspectRatio]="aspectRatio()" data-testid="gallery-image" />
27756
+ @if (count() > 1) {
27757
+ <ui-button class="ig-nav ig-next" variant="secondary" size="sm" ariaLabel="Next image" [disabled]="!canNext()" (click)="next()" data-testid="gallery-next">
27758
+ <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9 18l6-6-6-6"/></svg>
27759
+ </ui-button>
27760
+ }
26529
27761
  </div>
26530
- } @else {
26531
- <ng-container [ngTemplateOutlet]="listTpl" />
26532
- }
26533
- } @else if (emptyMessage()) {
26534
- <ui-hint class="tl-empty">{{ emptyMessage() }}</ui-hint>
26535
- }
26536
- <ng-template #listTpl>
26537
- <ol class="tl" [attr.aria-label]="ariaLabel() || null">
26538
- @for (item of items(); track item.id ?? $index) {
26539
- <li [attr.data-testid]="item.testId || null" class="tl-item" [class]="'tl-item tl-item--' + (item.tone ?? 'default')" [class.tl-item--icon]="!!item.icon" [style.--tl-color]="dotColor(item)">
26540
- <span class="tl-marker" aria-hidden="true">
26541
- @if (item.icon) { <ui-icon [name]="item.icon" [interactive]="false" [size]="12" /> }
26542
- </span>
26543
- <div class="tl-content">
26544
- <div class="tl-head">
26545
- <span class="tl-title">{{ item.title }}</span>
26546
- @if (item.badge) { <ng-container [ngTemplateOutlet]="badgeTpl" [ngTemplateOutletContext]="{ $implicit: item.badge }" /> }
26547
- @for (b of item.badges ?? []; track $index) { <ng-container [ngTemplateOutlet]="badgeTpl" [ngTemplateOutletContext]="{ $implicit: b }" /> }
26548
- @if (timePosition() === 'end' && (item.time || item.dateTime)) {
26549
- <time class="tl-time tl-time--end" [attr.datetime]="item.dateTime || null">{{ item.time || item.dateTime }}</time>
27762
+ @if (count() > 1) {
27763
+ <div class="ig-meta">
27764
+ @if (showCounter()) { <span class="ig-counter" aria-hidden="true" data-testid="gallery-counter">{{ position() + 1 }} / {{ count() }}</span> }
27765
+ @if (showDots()) {
27766
+ <div class="ig-dots">
27767
+ @for (img of images(); track $index) {
27768
+ <button type="button" class="ig-dot" [class.ig-dot-on]="$index === position()" [attr.aria-label]="'Show image ' + ($index + 1) + ' of ' + count()"
27769
+ [attr.aria-current]="$index === position() ? 'true' : null" [attr.data-testid]="'gallery-dot-' + $index" (click)="go($index)"></button>
26550
27770
  }
26551
27771
  </div>
26552
- @if (item.description) { <p class="tl-description">{{ item.description }}</p> }
26553
- @if (timePosition() !== 'end' && (item.time || item.dateTime)) {
26554
- <time class="tl-time" [attr.datetime]="item.dateTime || null">{{ item.time || item.dateTime }}</time>
26555
- }
26556
- </div>
26557
- </li>
27772
+ }
27773
+ </div>
26558
27774
  }
26559
- </ol>
26560
- </ng-template>
26561
- <ng-template #badgeTpl let-b>
26562
- @if (b.tooltip) {
26563
- <span class="tl-badge-tip" tabindex="0" [uiTooltip]="b.tooltip" [attr.data-testid]="b.testId || null"><ui-badge [label]="b.label" [variant]="b.variant" /></span>
26564
- } @else {
26565
- <ui-badge [label]="b.label" [variant]="b.variant" [attr.data-testid]="b.testId || null" />
26566
- }
26567
- </ng-template>
27775
+ <ui-live-region [message]="announcement()" />
27776
+ </div>
27777
+ }
26568
27778
  `,
26569
27779
  isInline: true,
26570
- styles: [":host{display:block}.tl{list-style:none;margin:0;padding:0}.tl-item{position:relative;display:flex;gap:12px;padding-bottom:16px;--tl-color: #475569}.tl-item:last-child{padding-bottom:0}.tl-item:before{content:\"\";position:absolute;left:7px;top:18px;bottom:-2px;width:2px;background:#e2e8f0}.tl-item:last-child:before{display:none}.tl-item--success{--tl-color: #15803d}.tl-item--warning{--tl-color: #b45309}.tl-item--danger{--tl-color: #b91c1c}.tl-marker{flex-shrink:0;box-sizing:border-box;width:16px;height:16px;margin-top:2px;border-radius:50%;background:var(--tl-color);border:3px solid #fff;box-shadow:0 0 0 1px var(--tl-color);display:inline-flex;align-items:center;justify-content:center;position:relative;z-index:1}.tl-item--icon .tl-marker{border:none;box-shadow:none;color:#fff}.tl-content{flex:1;min-width:0;overflow-wrap:anywhere;word-break:break-word}.tl-head{display:flex;align-items:center;flex-wrap:wrap;gap:4px 8px}.tl-badge-tip{display:inline-flex;border-radius:999px}.tl-badge-tip:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.tl-time--end{display:inline;margin:0 0 0 auto;padding-left:8px;white-space:nowrap}.tl-scroll{overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain;padding-right:8px}.tl-scroll:focus-visible{outline:2px solid #3b82f6;outline-offset:2px;border-radius:4px}.tl-title{font-size:.875rem;font-weight:600;color:#1e293b;line-height:1.4}.tl-description{margin:2px 0 0;font-size:.8125rem;line-height:1.5;color:#475569}.tl-time{display:block;margin-top:2px;font-size:.75rem;color:#64748b}\n"],
27780
+ styles: [":host{display:block}.ig{display:flex;flex-direction:column;gap:10px}.ig-stage{position:relative;display:flex;align-items:center;justify-content:center}.ig-img{flex:1 1 auto;min-width:0}.ig-nav{position:absolute;top:50%;transform:translateY(-50%);z-index:1}.ig-prev{left:8px}.ig-next{right:8px}.ig-meta{display:flex;align-items:center;justify-content:center;gap:12px;flex-wrap:wrap}.ig-counter{font-size:.8125rem;color:#64748b}.ig-dots{display:flex;align-items:center;gap:4px;flex-wrap:wrap;justify-content:center}.ig-dot{box-sizing:content-box;width:8px;height:8px;padding:18px;margin:-14px;border:0;border-radius:50%;background:#cbd5e1;background-clip:content-box;cursor:pointer;-webkit-appearance:none;appearance:none}.ig-dot-on{background:var(--ui-accent, #3b82f6);background-clip:content-box}.ig-dot:focus-visible{outline:2px solid var(--ui-focus, #3b82f6);outline-offset:-4px}\n"],
26571
27781
  dependencies: [
26572
27782
  {
26573
27783
  kind: "component",
26574
- type: BadgeComponent,
26575
- selector: "ui-badge",
26576
- inputs: ["label", "variant"]
26577
- },
26578
- {
26579
- kind: "component",
26580
- type: HintComponent,
26581
- selector: "ui-hint"
26582
- },
26583
- {
26584
- kind: "component",
26585
- type: IconComponent,
26586
- selector: "ui-icon",
27784
+ type: ButtonComponent,
27785
+ selector: "ui-button",
26587
27786
  inputs: [
26588
- "name",
26589
- "tooltip",
26590
- "ariaLabel",
26591
- "size",
26592
27787
  "variant",
27788
+ "routerLink",
27789
+ "queryParams",
27790
+ "fragment",
27791
+ "href",
27792
+ "target",
27793
+ "rel",
27794
+ "color",
27795
+ "active",
27796
+ "size",
27797
+ "type",
26593
27798
  "disabled",
26594
27799
  "loading",
26595
- "interactive"
26596
- ],
26597
- outputs: ["iconClick"]
27800
+ "fullWidth",
27801
+ "ariaLabel",
27802
+ "ariaExpanded",
27803
+ "ariaPressed",
27804
+ "ariaDescribedBy",
27805
+ "modal-footer-left",
27806
+ "modal-footer-right"
27807
+ ]
26598
27808
  },
26599
27809
  {
26600
- kind: "directive",
26601
- type: NgTemplateOutlet,
26602
- selector: "[ngTemplateOutlet]",
27810
+ kind: "component",
27811
+ type: ImageComponent,
27812
+ selector: "ui-image",
26603
27813
  inputs: [
26604
- "ngTemplateOutletContext",
26605
- "ngTemplateOutlet",
26606
- "ngTemplateOutletInjector"
26607
- ]
27814
+ "src",
27815
+ "alt",
27816
+ "fit",
27817
+ "width",
27818
+ "height",
27819
+ "maxWidth",
27820
+ "maxHeight",
27821
+ "aspectRatio",
27822
+ "radius",
27823
+ "bordered",
27824
+ "align",
27825
+ "placeholder",
27826
+ "priority",
27827
+ "retryKey"
27828
+ ],
27829
+ outputs: ["loaded", "failed"]
26608
27830
  },
26609
27831
  {
26610
- kind: "directive",
26611
- type: TooltipDirective,
26612
- selector: "[uiTooltip]",
26613
- inputs: ["uiTooltip", "tooltipPosition"]
27832
+ kind: "component",
27833
+ type: LiveRegionComponent,
27834
+ selector: "ui-live-region",
27835
+ inputs: [
27836
+ "message",
27837
+ "politeness",
27838
+ "atomic",
27839
+ "visible"
27840
+ ]
26614
27841
  }
26615
27842
  ],
26616
27843
  changeDetection: i0.ChangeDetectionStrategy.OnPush
@@ -26621,90 +27848,103 @@ i0.ɵɵngDeclareClassMetadata({
26621
27848
  minVersion: "12.0.0",
26622
27849
  version: "22.2.2",
26623
27850
  ngImport: i0,
26624
- type: TimelineComponent,
27851
+ type: ImageGalleryComponent,
26625
27852
  decorators: [{
26626
27853
  type: Component,
26627
27854
  args: [{
26628
- selector: "ui-timeline",
27855
+ selector: "ui-image-gallery",
26629
27856
  standalone: true,
26630
27857
  changeDetection: ChangeDetectionStrategy.OnPush,
26631
27858
  imports: [
26632
- BadgeComponent,
26633
- HintComponent,
26634
- IconComponent,
26635
- NgTemplateOutlet,
26636
- TooltipDirective
27859
+ ButtonComponent,
27860
+ ImageComponent,
27861
+ LiveRegionComponent
26637
27862
  ],
26638
27863
  template: `
26639
- @if (items().length) {
26640
- @if (maxHeight()) {
26641
- <div class="tl-scroll" role="region" tabindex="0" [attr.aria-label]="ariaLabel() || 'Timeline'" [style.max-height]="maxHeight()">
26642
- <ng-container [ngTemplateOutlet]="listTpl" />
27864
+ @if (count() > 0) {
27865
+ <div class="ig" role="group" aria-roledescription="carousel" [attr.aria-label]="ariaLabel()" (keydown)="onKey($event)">
27866
+ <div class="ig-stage">
27867
+ @if (count() > 1) {
27868
+ <ui-button class="ig-nav ig-prev" variant="secondary" size="sm" ariaLabel="Previous image" [disabled]="!canPrev()" (click)="prev()" data-testid="gallery-prev">
27869
+ <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M15 18l-6-6 6-6"/></svg>
27870
+ </ui-button>
27871
+ }
27872
+ <ui-image class="ig-img" [src]="current().src" [alt]="currentAlt()" [fit]="fit()" width="100%" [maxHeight]="maxHeight()" [aspectRatio]="aspectRatio()" data-testid="gallery-image" />
27873
+ @if (count() > 1) {
27874
+ <ui-button class="ig-nav ig-next" variant="secondary" size="sm" ariaLabel="Next image" [disabled]="!canNext()" (click)="next()" data-testid="gallery-next">
27875
+ <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9 18l6-6-6-6"/></svg>
27876
+ </ui-button>
27877
+ }
26643
27878
  </div>
26644
- } @else {
26645
- <ng-container [ngTemplateOutlet]="listTpl" />
26646
- }
26647
- } @else if (emptyMessage()) {
26648
- <ui-hint class="tl-empty">{{ emptyMessage() }}</ui-hint>
26649
- }
26650
- <ng-template #listTpl>
26651
- <ol class="tl" [attr.aria-label]="ariaLabel() || null">
26652
- @for (item of items(); track item.id ?? $index) {
26653
- <li [attr.data-testid]="item.testId || null" class="tl-item" [class]="'tl-item tl-item--' + (item.tone ?? 'default')" [class.tl-item--icon]="!!item.icon" [style.--tl-color]="dotColor(item)">
26654
- <span class="tl-marker" aria-hidden="true">
26655
- @if (item.icon) { <ui-icon [name]="item.icon" [interactive]="false" [size]="12" /> }
26656
- </span>
26657
- <div class="tl-content">
26658
- <div class="tl-head">
26659
- <span class="tl-title">{{ item.title }}</span>
26660
- @if (item.badge) { <ng-container [ngTemplateOutlet]="badgeTpl" [ngTemplateOutletContext]="{ $implicit: item.badge }" /> }
26661
- @for (b of item.badges ?? []; track $index) { <ng-container [ngTemplateOutlet]="badgeTpl" [ngTemplateOutletContext]="{ $implicit: b }" /> }
26662
- @if (timePosition() === 'end' && (item.time || item.dateTime)) {
26663
- <time class="tl-time tl-time--end" [attr.datetime]="item.dateTime || null">{{ item.time || item.dateTime }}</time>
27879
+ @if (count() > 1) {
27880
+ <div class="ig-meta">
27881
+ @if (showCounter()) { <span class="ig-counter" aria-hidden="true" data-testid="gallery-counter">{{ position() + 1 }} / {{ count() }}</span> }
27882
+ @if (showDots()) {
27883
+ <div class="ig-dots">
27884
+ @for (img of images(); track $index) {
27885
+ <button type="button" class="ig-dot" [class.ig-dot-on]="$index === position()" [attr.aria-label]="'Show image ' + ($index + 1) + ' of ' + count()"
27886
+ [attr.aria-current]="$index === position() ? 'true' : null" [attr.data-testid]="'gallery-dot-' + $index" (click)="go($index)"></button>
26664
27887
  }
26665
27888
  </div>
26666
- @if (item.description) { <p class="tl-description">{{ item.description }}</p> }
26667
- @if (timePosition() !== 'end' && (item.time || item.dateTime)) {
26668
- <time class="tl-time" [attr.datetime]="item.dateTime || null">{{ item.time || item.dateTime }}</time>
26669
- }
26670
- </div>
26671
- </li>
27889
+ }
27890
+ </div>
26672
27891
  }
26673
- </ol>
26674
- </ng-template>
26675
- <ng-template #badgeTpl let-b>
26676
- @if (b.tooltip) {
26677
- <span class="tl-badge-tip" tabindex="0" [uiTooltip]="b.tooltip" [attr.data-testid]="b.testId || null"><ui-badge [label]="b.label" [variant]="b.variant" /></span>
26678
- } @else {
26679
- <ui-badge [label]="b.label" [variant]="b.variant" [attr.data-testid]="b.testId || null" />
26680
- }
26681
- </ng-template>
27892
+ <ui-live-region [message]="announcement()" />
27893
+ </div>
27894
+ }
26682
27895
  `,
26683
- styles: [":host{display:block}.tl{list-style:none;margin:0;padding:0}.tl-item{position:relative;display:flex;gap:12px;padding-bottom:16px;--tl-color: #475569}.tl-item:last-child{padding-bottom:0}.tl-item:before{content:\"\";position:absolute;left:7px;top:18px;bottom:-2px;width:2px;background:#e2e8f0}.tl-item:last-child:before{display:none}.tl-item--success{--tl-color: #15803d}.tl-item--warning{--tl-color: #b45309}.tl-item--danger{--tl-color: #b91c1c}.tl-marker{flex-shrink:0;box-sizing:border-box;width:16px;height:16px;margin-top:2px;border-radius:50%;background:var(--tl-color);border:3px solid #fff;box-shadow:0 0 0 1px var(--tl-color);display:inline-flex;align-items:center;justify-content:center;position:relative;z-index:1}.tl-item--icon .tl-marker{border:none;box-shadow:none;color:#fff}.tl-content{flex:1;min-width:0;overflow-wrap:anywhere;word-break:break-word}.tl-head{display:flex;align-items:center;flex-wrap:wrap;gap:4px 8px}.tl-badge-tip{display:inline-flex;border-radius:999px}.tl-badge-tip:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.tl-time--end{display:inline;margin:0 0 0 auto;padding-left:8px;white-space:nowrap}.tl-scroll{overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain;padding-right:8px}.tl-scroll:focus-visible{outline:2px solid #3b82f6;outline-offset:2px;border-radius:4px}.tl-title{font-size:.875rem;font-weight:600;color:#1e293b;line-height:1.4}.tl-description{margin:2px 0 0;font-size:.8125rem;line-height:1.5;color:#475569}.tl-time{display:block;margin-top:2px;font-size:.75rem;color:#64748b}\n"]
27896
+ styles: [":host{display:block}.ig{display:flex;flex-direction:column;gap:10px}.ig-stage{position:relative;display:flex;align-items:center;justify-content:center}.ig-img{flex:1 1 auto;min-width:0}.ig-nav{position:absolute;top:50%;transform:translateY(-50%);z-index:1}.ig-prev{left:8px}.ig-next{right:8px}.ig-meta{display:flex;align-items:center;justify-content:center;gap:12px;flex-wrap:wrap}.ig-counter{font-size:.8125rem;color:#64748b}.ig-dots{display:flex;align-items:center;gap:4px;flex-wrap:wrap;justify-content:center}.ig-dot{box-sizing:content-box;width:8px;height:8px;padding:18px;margin:-14px;border:0;border-radius:50%;background:#cbd5e1;background-clip:content-box;cursor:pointer;-webkit-appearance:none;appearance:none}.ig-dot-on{background:var(--ui-accent, #3b82f6);background-clip:content-box}.ig-dot:focus-visible{outline:2px solid var(--ui-focus, #3b82f6);outline-offset:-4px}\n"]
26684
27897
  }]
26685
27898
  }],
26686
27899
  propDecorators: {
26687
- items: [{
27900
+ images: [{
26688
27901
  type: i0.Input,
26689
27902
  args: [{
26690
27903
  isSignal: true,
26691
- alias: "items",
27904
+ alias: "images",
26692
27905
  required: false
26693
27906
  }]
26694
27907
  }],
26695
- ariaLabel: [{
27908
+ index: [{
26696
27909
  type: i0.Input,
26697
27910
  args: [{
26698
27911
  isSignal: true,
26699
- alias: "ariaLabel",
27912
+ alias: "index",
26700
27913
  required: false
26701
27914
  }]
27915
+ }, {
27916
+ type: i0.Output,
27917
+ args: ["indexChange"]
26702
27918
  }],
26703
- emptyMessage: [{
27919
+ loop: [{
26704
27920
  type: i0.Input,
26705
27921
  args: [{
26706
27922
  isSignal: true,
26707
- alias: "emptyMessage",
27923
+ alias: "loop",
27924
+ required: false
27925
+ }]
27926
+ }],
27927
+ showDots: [{
27928
+ type: i0.Input,
27929
+ args: [{
27930
+ isSignal: true,
27931
+ alias: "showDots",
27932
+ required: false
27933
+ }]
27934
+ }],
27935
+ showCounter: [{
27936
+ type: i0.Input,
27937
+ args: [{
27938
+ isSignal: true,
27939
+ alias: "showCounter",
27940
+ required: false
27941
+ }]
27942
+ }],
27943
+ aspectRatio: [{
27944
+ type: i0.Input,
27945
+ args: [{
27946
+ isSignal: true,
27947
+ alias: "aspectRatio",
26708
27948
  required: false
26709
27949
  }]
26710
27950
  }],
@@ -26716,11 +27956,19 @@ i0.ɵɵngDeclareClassMetadata({
26716
27956
  required: false
26717
27957
  }]
26718
27958
  }],
26719
- timePosition: [{
27959
+ fit: [{
26720
27960
  type: i0.Input,
26721
27961
  args: [{
26722
27962
  isSignal: true,
26723
- alias: "timePosition",
27963
+ alias: "fit",
27964
+ required: false
27965
+ }]
27966
+ }],
27967
+ ariaLabel: [{
27968
+ type: i0.Input,
27969
+ args: [{
27970
+ isSignal: true,
27971
+ alias: "ariaLabel",
26724
27972
  required: false
26725
27973
  }]
26726
27974
  }]
@@ -27406,7 +28654,7 @@ var DateRangePickerComponent = class DateRangePickerComponent {
27406
28654
  "showErrors",
27407
28655
  "disabled"
27408
28656
  ],
27409
- outputs: ["invalidChange"]
28657
+ outputs: ["invalidChange", "valueChange"]
27410
28658
  },
27411
28659
  {
27412
28660
  kind: "component",
@@ -29225,6 +30473,7 @@ var RadioMatrixComponent = class RadioMatrixComponent {
29225
30473
  "label",
29226
30474
  "description",
29227
30475
  "ariaLabel",
30476
+ "testId",
29228
30477
  "value",
29229
30478
  "name",
29230
30479
  "checked",
@@ -30410,6 +31659,8 @@ var DetailCardComponent = class DetailCardComponent {
30410
31659
  this.showEdit = input(false, ...ngDevMode ? [{ debugName: "showEdit" }] : /* istanbul ignore next */ []);
30411
31660
  this.editLabel = input("Edit", ...ngDevMode ? [{ debugName: "editLabel" }] : /* istanbul ignore next */ []);
30412
31661
  this.editClick = output();
31662
+ this.editAriaLabel = input("", ...ngDevMode ? [{ debugName: "editAriaLabel" }] : /* istanbul ignore next */ []);
31663
+ this.fill = input(false, ...ngDevMode ? [{ debugName: "fill" }] : /* istanbul ignore next */ []);
30413
31664
  }
30414
31665
  groupLabel() {
30415
31666
  if (this.showHeader() && this.title()) return this.titleId() ? null : this.title();
@@ -30534,6 +31785,20 @@ var DetailCardComponent = class DetailCardComponent {
30534
31785
  isSignal: true,
30535
31786
  isRequired: false,
30536
31787
  transformFunction: null
31788
+ },
31789
+ editAriaLabel: {
31790
+ classPropertyName: "editAriaLabel",
31791
+ publicName: "editAriaLabel",
31792
+ isSignal: true,
31793
+ isRequired: false,
31794
+ transformFunction: null
31795
+ },
31796
+ fill: {
31797
+ classPropertyName: "fill",
31798
+ publicName: "fill",
31799
+ isSignal: true,
31800
+ isRequired: false,
31801
+ transformFunction: null
30537
31802
  }
30538
31803
  },
30539
31804
  outputs: {
@@ -30543,13 +31808,14 @@ var DetailCardComponent = class DetailCardComponent {
30543
31808
  host: {
30544
31809
  attributes: { "role": "group" },
30545
31810
  properties: {
31811
+ "class.dc-fill-host": "fill()",
30546
31812
  "attr.aria-labelledby": "showHeader() && title() && titleId() ? titleId() : null",
30547
31813
  "attr.aria-label": "groupLabel()"
30548
31814
  }
30549
31815
  },
30550
31816
  ngImport: i0,
30551
31817
  template: `
30552
- <div class="dc" [class.dc-has-text-color]="!!textColor()" [style.background]="background() || null" [style.color]="textColor() || null" [style.--dc-text]="textColor() || null">
31818
+ <div class="dc" [class.dc-fill]="fill()" [class.dc-has-text-color]="!!textColor()" [style.background]="background() || null" [style.color]="textColor() || null" [style.--dc-text]="textColor() || null">
30553
31819
  @if (showHeader()) {
30554
31820
  <div class="dc-header" [class.collapsible]="collapsible()" [class.open]="isOpen()" (click)="onHeaderClick($event)">
30555
31821
  @if (collapsible()) {
@@ -30570,7 +31836,7 @@ var DetailCardComponent = class DetailCardComponent {
30570
31836
  <ng-content select="[card-header]" />
30571
31837
  </div>
30572
31838
  @if (showEdit()) {
30573
- <ui-button class="dc-edit" variant="secondary" size="xs" (click)="$event.stopPropagation(); editClick.emit()">
31839
+ <ui-button class="dc-edit" variant="secondary" size="xs" [ariaLabel]="editAriaLabel() || undefined" (click)="$event.stopPropagation(); editClick.emit()">
30574
31840
  <svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true">
30575
31841
  <path d="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"/>
30576
31842
  <path d="M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"/>
@@ -30589,7 +31855,7 @@ var DetailCardComponent = class DetailCardComponent {
30589
31855
  </div>
30590
31856
  `,
30591
31857
  isInline: true,
30592
- styles: [":host{display:block;margin-bottom:16px}:host(:last-child){margin-bottom:0}.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-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, #94a3b8)}.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:.75rem;color:var(--dc-text, #94a3b8)}.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 ::ng-deep button{font-size:.8rem;font-weight:500;color:#64748b;background:none;border:1px solid #e2e8f0;border-radius:6px;padding:4px 10px;gap:5px}.dc-edit ::ng-deep button:hover{background:#f1f5f9;color:#1e293b}.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:hidden}@media(max-width:480px){.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"],
31858
+ styles: [":host{display:block;margin-bottom:16px}:host(:last-child){margin-bottom:0}:host(.dc-fill-host){height:100%}.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{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-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, #94a3b8)}.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:.75rem;color:var(--dc-text, #94a3b8)}.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 ::ng-deep button{font-size:.8rem;font-weight:500;color:#64748b;background:none;border:1px solid #e2e8f0;border-radius:6px;padding:4px 10px;gap:5px}.dc-edit ::ng-deep button:hover{background:#f1f5f9;color:#1e293b}.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:hidden}@media(max-width:480px){.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"],
30593
31859
  dependencies: [{
30594
31860
  kind: "component",
30595
31861
  type: ButtonComponent,
@@ -30635,11 +31901,12 @@ i0.ɵɵngDeclareClassMetadata({
30635
31901
  imports: [ButtonComponent],
30636
31902
  host: {
30637
31903
  "role": "group",
31904
+ "[class.dc-fill-host]": "fill()",
30638
31905
  "[attr.aria-labelledby]": "showHeader() && title() && titleId() ? titleId() : null",
30639
31906
  "[attr.aria-label]": "groupLabel()"
30640
31907
  },
30641
31908
  template: `
30642
- <div class="dc" [class.dc-has-text-color]="!!textColor()" [style.background]="background() || null" [style.color]="textColor() || null" [style.--dc-text]="textColor() || null">
31909
+ <div class="dc" [class.dc-fill]="fill()" [class.dc-has-text-color]="!!textColor()" [style.background]="background() || null" [style.color]="textColor() || null" [style.--dc-text]="textColor() || null">
30643
31910
  @if (showHeader()) {
30644
31911
  <div class="dc-header" [class.collapsible]="collapsible()" [class.open]="isOpen()" (click)="onHeaderClick($event)">
30645
31912
  @if (collapsible()) {
@@ -30660,7 +31927,7 @@ i0.ɵɵngDeclareClassMetadata({
30660
31927
  <ng-content select="[card-header]" />
30661
31928
  </div>
30662
31929
  @if (showEdit()) {
30663
- <ui-button class="dc-edit" variant="secondary" size="xs" (click)="$event.stopPropagation(); editClick.emit()">
31930
+ <ui-button class="dc-edit" variant="secondary" size="xs" [ariaLabel]="editAriaLabel() || undefined" (click)="$event.stopPropagation(); editClick.emit()">
30664
31931
  <svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true">
30665
31932
  <path d="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"/>
30666
31933
  <path d="M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"/>
@@ -30678,7 +31945,7 @@ i0.ɵɵngDeclareClassMetadata({
30678
31945
  </div>
30679
31946
  </div>
30680
31947
  `,
30681
- styles: [":host{display:block;margin-bottom:16px}:host(:last-child){margin-bottom:0}.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-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, #94a3b8)}.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:.75rem;color:var(--dc-text, #94a3b8)}.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 ::ng-deep button{font-size:.8rem;font-weight:500;color:#64748b;background:none;border:1px solid #e2e8f0;border-radius:6px;padding:4px 10px;gap:5px}.dc-edit ::ng-deep button:hover{background:#f1f5f9;color:#1e293b}.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:hidden}@media(max-width:480px){.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"]
31948
+ styles: [":host{display:block;margin-bottom:16px}:host(:last-child){margin-bottom:0}:host(.dc-fill-host){height:100%}.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{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-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, #94a3b8)}.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:.75rem;color:var(--dc-text, #94a3b8)}.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 ::ng-deep button{font-size:.8rem;font-weight:500;color:#64748b;background:none;border:1px solid #e2e8f0;border-radius:6px;padding:4px 10px;gap:5px}.dc-edit ::ng-deep button:hover{background:#f1f5f9;color:#1e293b}.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:hidden}@media(max-width:480px){.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"]
30682
31949
  }]
30683
31950
  }],
30684
31951
  propDecorators: {
@@ -30792,6 +32059,22 @@ i0.ɵɵngDeclareClassMetadata({
30792
32059
  editClick: [{
30793
32060
  type: i0.Output,
30794
32061
  args: ["editClick"]
32062
+ }],
32063
+ editAriaLabel: [{
32064
+ type: i0.Input,
32065
+ args: [{
32066
+ isSignal: true,
32067
+ alias: "editAriaLabel",
32068
+ required: false
32069
+ }]
32070
+ }],
32071
+ fill: [{
32072
+ type: i0.Input,
32073
+ args: [{
32074
+ isSignal: true,
32075
+ alias: "fill",
32076
+ required: false
32077
+ }]
30795
32078
  }]
30796
32079
  }
30797
32080
  });
@@ -31770,17 +33053,28 @@ var ColumnsComponent = class ColumnsComponent {
31770
33053
  this.gap = input("lg", ...ngDevMode ? [{ debugName: "gap" }] : /* istanbul ignore next */ []);
31771
33054
  this.collapseAt = input("md", ...ngDevMode ? [{ debugName: "collapseAt" }] : /* istanbul ignore next */ []);
31772
33055
  this.align = input("start", ...ngDevMode ? [{ debugName: "align" }] : /* istanbul ignore next */ []);
33056
+ this.countBelowLg = input(null, ...ngDevMode ? [{ debugName: "countBelowLg" }] : /* istanbul ignore next */ []);
33057
+ this.countBelowMd = input(null, ...ngDevMode ? [{ debugName: "countBelowMd" }] : /* istanbul ignore next */ []);
33058
+ this.countBelowSm = input(null, ...ngDevMode ? [{ debugName: "countBelowSm" }] : /* istanbul ignore next */ []);
31773
33059
  this.cols = computed(() => {
31774
33060
  const n = Math.trunc(Number(this.count()));
31775
33061
  if (!Number.isFinite(n)) return 2;
31776
33062
  return Math.min(4, Math.max(1, n));
31777
33063
  }, ...ngDevMode ? [{ debugName: "cols" }] : /* istanbul ignore next */ []);
33064
+ this.colsLg = computed(() => ColumnsComponent.clampTier(this.countBelowLg()), ...ngDevMode ? [{ debugName: "colsLg" }] : /* istanbul ignore next */ []);
33065
+ this.colsMd = computed(() => ColumnsComponent.clampTier(this.countBelowMd()), ...ngDevMode ? [{ debugName: "colsMd" }] : /* istanbul ignore next */ []);
33066
+ this.colsSm = computed(() => ColumnsComponent.clampTier(this.countBelowSm()), ...ngDevMode ? [{ debugName: "colsSm" }] : /* istanbul ignore next */ []);
31778
33067
  this.gapCss = computed(() => resolveLayoutGap(this.gap(), "lg"), ...ngDevMode ? [{ debugName: "gapCss" }] : /* istanbul ignore next */ []);
31779
33068
  this.collapseClass = computed(() => {
31780
33069
  const c = this.collapseAt();
31781
33070
  return c === "never" ? "cl" : `cl cl-${c}`;
31782
33071
  }, ...ngDevMode ? [{ debugName: "collapseClass" }] : /* istanbul ignore next */ []);
31783
33072
  }
33073
+ static clampTier(v) {
33074
+ if (v === null || v === void 0) return null;
33075
+ const n = Math.trunc(Number(v));
33076
+ return Number.isFinite(n) ? Math.min(4, Math.max(1, n)) : null;
33077
+ }
31784
33078
  static {
31785
33079
  this.ɵfac = i0.ɵɵngDeclareFactory({
31786
33080
  minVersion: "12.0.0",
@@ -31826,13 +33120,34 @@ var ColumnsComponent = class ColumnsComponent {
31826
33120
  isSignal: true,
31827
33121
  isRequired: false,
31828
33122
  transformFunction: null
33123
+ },
33124
+ countBelowLg: {
33125
+ classPropertyName: "countBelowLg",
33126
+ publicName: "countBelowLg",
33127
+ isSignal: true,
33128
+ isRequired: false,
33129
+ transformFunction: null
33130
+ },
33131
+ countBelowMd: {
33132
+ classPropertyName: "countBelowMd",
33133
+ publicName: "countBelowMd",
33134
+ isSignal: true,
33135
+ isRequired: false,
33136
+ transformFunction: null
33137
+ },
33138
+ countBelowSm: {
33139
+ classPropertyName: "countBelowSm",
33140
+ publicName: "countBelowSm",
33141
+ isSignal: true,
33142
+ isRequired: false,
33143
+ transformFunction: null
31829
33144
  }
31830
33145
  },
31831
33146
  host: { properties: { "attr.data-columns": "cols()" } },
31832
33147
  ngImport: i0,
31833
- template: `<div class="cl" [class]="collapseClass()" [style.--cl-cols]="cols()" [style.gap]="gapCss()" [style.align-items]="align()"><ng-content /></div>`,
33148
+ template: `<div class="cl" [class]="collapseClass()" [style.--cl-cols]="cols()" [style.--cl-cols-lg]="colsLg()" [style.--cl-cols-md]="colsMd()" [style.--cl-cols-sm]="colsSm()" [style.gap]="gapCss()" [style.align-items]="align()"><ng-content /></div>`,
31834
33149
  isInline: true,
31835
- styles: [":host{display:block}.cl{display:grid;grid-template-columns:repeat(var(--cl-cols, 2),minmax(0,1fr))}@media(max-width:480px){.cl.cl-sm{grid-template-columns:minmax(0,1fr)}}@media(max-width:768px){.cl.cl-md{grid-template-columns:minmax(0,1fr)}}@media(max-width:1024px){.cl.cl-lg{grid-template-columns:minmax(0,1fr)}}\n"],
33150
+ styles: [":host{display:block}.cl{display:grid;grid-template-columns:repeat(var(--cl-cols, 2),minmax(0,1fr))}@media(max-width:1024px){.cl{grid-template-columns:repeat(var(--cl-cols-lg, var(--cl-cols, 2)),minmax(0,1fr))}}@media(max-width:768px){.cl{grid-template-columns:repeat(var(--cl-cols-md, var(--cl-cols-lg, var(--cl-cols, 2))),minmax(0,1fr))}}@media(max-width:480px){.cl{grid-template-columns:repeat(var(--cl-cols-sm, var(--cl-cols-md, var(--cl-cols-lg, var(--cl-cols, 2)))),minmax(0,1fr))}}@media(max-width:480px){.cl.cl-sm{grid-template-columns:minmax(0,1fr)}}@media(max-width:768px){.cl.cl-md{grid-template-columns:minmax(0,1fr)}}@media(max-width:1024px){.cl.cl-lg{grid-template-columns:minmax(0,1fr)}}\n"],
31836
33151
  changeDetection: i0.ChangeDetectionStrategy.OnPush
31837
33152
  });
31838
33153
  }
@@ -31849,8 +33164,8 @@ i0.ɵɵngDeclareClassMetadata({
31849
33164
  standalone: true,
31850
33165
  changeDetection: ChangeDetectionStrategy.OnPush,
31851
33166
  host: { "[attr.data-columns]": "cols()" },
31852
- template: `<div class="cl" [class]="collapseClass()" [style.--cl-cols]="cols()" [style.gap]="gapCss()" [style.align-items]="align()"><ng-content /></div>`,
31853
- styles: [":host{display:block}.cl{display:grid;grid-template-columns:repeat(var(--cl-cols, 2),minmax(0,1fr))}@media(max-width:480px){.cl.cl-sm{grid-template-columns:minmax(0,1fr)}}@media(max-width:768px){.cl.cl-md{grid-template-columns:minmax(0,1fr)}}@media(max-width:1024px){.cl.cl-lg{grid-template-columns:minmax(0,1fr)}}\n"]
33167
+ template: `<div class="cl" [class]="collapseClass()" [style.--cl-cols]="cols()" [style.--cl-cols-lg]="colsLg()" [style.--cl-cols-md]="colsMd()" [style.--cl-cols-sm]="colsSm()" [style.gap]="gapCss()" [style.align-items]="align()"><ng-content /></div>`,
33168
+ styles: [":host{display:block}.cl{display:grid;grid-template-columns:repeat(var(--cl-cols, 2),minmax(0,1fr))}@media(max-width:1024px){.cl{grid-template-columns:repeat(var(--cl-cols-lg, var(--cl-cols, 2)),minmax(0,1fr))}}@media(max-width:768px){.cl{grid-template-columns:repeat(var(--cl-cols-md, var(--cl-cols-lg, var(--cl-cols, 2))),minmax(0,1fr))}}@media(max-width:480px){.cl{grid-template-columns:repeat(var(--cl-cols-sm, var(--cl-cols-md, var(--cl-cols-lg, var(--cl-cols, 2)))),minmax(0,1fr))}}@media(max-width:480px){.cl.cl-sm{grid-template-columns:minmax(0,1fr)}}@media(max-width:768px){.cl.cl-md{grid-template-columns:minmax(0,1fr)}}@media(max-width:1024px){.cl.cl-lg{grid-template-columns:minmax(0,1fr)}}\n"]
31854
33169
  }]
31855
33170
  }],
31856
33171
  propDecorators: {
@@ -31885,6 +33200,30 @@ i0.ɵɵngDeclareClassMetadata({
31885
33200
  alias: "align",
31886
33201
  required: false
31887
33202
  }]
33203
+ }],
33204
+ countBelowLg: [{
33205
+ type: i0.Input,
33206
+ args: [{
33207
+ isSignal: true,
33208
+ alias: "countBelowLg",
33209
+ required: false
33210
+ }]
33211
+ }],
33212
+ countBelowMd: [{
33213
+ type: i0.Input,
33214
+ args: [{
33215
+ isSignal: true,
33216
+ alias: "countBelowMd",
33217
+ required: false
33218
+ }]
33219
+ }],
33220
+ countBelowSm: [{
33221
+ type: i0.Input,
33222
+ args: [{
33223
+ isSignal: true,
33224
+ alias: "countBelowSm",
33225
+ required: false
33226
+ }]
31888
33227
  }]
31889
33228
  }
31890
33229
  });
@@ -32217,6 +33556,6 @@ i0.ɵɵngDeclareClassMetadata({
32217
33556
  }]
32218
33557
  }
32219
33558
  });
32220
- export { ActionBarComponent, AlertComponent, AppShellComponent, AudioPlayerComponent, AvatarComponent, BADGE_VARIANT_STYLES, BadgeComponent, BarRowComponent, BulkMessagePanelComponent, BusinessHoursComponent, ButtonComponent, CheckboxComponent, CheckboxTrailingDirective, ChipComponent, ChipGroupComponent, ColorInputComponent, ColumnFilterComponent, ColumnsComponent, ComboboxComponent, ConfirmOutletComponent, ConfirmService, ContactPickerComponent, DROPDOWN_GROUP, DataTableComponent, DateInputComponent, DateRangePickerComponent, DatetimeInputComponent, DetailCardComponent, DiscountSelectorComponent, DividerComponent, DropdownComponent, EmptyStateComponent, ErrorComponent, ErrorStateComponent, FORGEROUTE_CONFIG, FileInputComponent, FormColSpanDirective, FormRowComponent, FormSectionComponent, HintComponent, IconComponent, ImagePreviewComponent, ImageRepositionComponent, ImportExportComponent, KpiCardComponent, LAYOUT_GAP_PX, ListComponent, ListItemComponent, ModalComponent, MoreMenuComponent, MultiSelectComponent, PHONE_NUMBER_AREA_CODE_LENGTH, PHONE_NUMBER_ZIP_LENGTH, PaginationComponent, PanelInfoListComponent, PdfHotspotComponent, PhoneNumberPickerComponent, PillTabsComponent, ProgressBarComponent, ProgressRingComponent, QrCodeComponent, QuickFilterTabsComponent, RICH_TEXT_OPTIONS, RadioComponent, RadioGroupComponent, RadioMatrixComponent, RadioOptionContentDirective, ReadonlyFieldsetComponent, RichTextEditorComponent, SEMANTIC_BADGE_MAP, SearchInputComponent, SectionHeaderComponent, SelectComponent, SidePanelComponent, SignaturePadComponent, SkeletonComponent, StackComponent, StarComponent, StepperComponent, TableToolbarComponent, TextComponent, TextInputComponent, TextareaInputComponent, TimeInputComponent, TimelineComponent, ToastComponent, ToastService, ToggleBadgeComponent, ToggleComponent, TooltipDirective, US_STATES, UiFieldValidity, acceptLabel, appShellGroupsStorageKey, autoVariant, buildDefaultSchedule, builtInActionIcon, businessTimeOptions, createFieldReveal, decodeFilterValues, digitsOnly, encodeFilterValue, encodeFilterValues, errorContextInterceptor, fileMatchesAccept, formatFileSize, formatIsoDate, formatIsoDateTime, formatTime, getEligibleIds, getEligibleOptions, getErrorMessage, humanReadableMessage, iconPath, isoKey, issueToErrors, maxLengthIssue, normalizeHexColor, parseBizHours, parseIso, parseTime, pluralize, provideForgerouteToast, reorderItems, requiredIssue, resolveLayoutGap, resolvePreset, serializeBizHours };
33559
+ export { ActionBarComponent, AlertComponent, AppShellComponent, AudioPlayerComponent, AvatarComponent, BADGE_VARIANT_STYLES, BadgeComponent, BarRowComponent, BulkMessagePanelComponent, BusinessHoursComponent, ButtonComponent, CheckboxComponent, CheckboxTrailingDirective, ChipComponent, ChipGroupComponent, ColorInputComponent, ColumnFilterComponent, ColumnsComponent, ComboboxComponent, ConfirmOutletComponent, ConfirmService, ContactPickerComponent, DROPDOWN_GROUP, DataTableComponent, DateInputComponent, DateRangePickerComponent, DatetimeInputComponent, DetailCardComponent, DiscountSelectorComponent, DividerComponent, DropdownComponent, EmptyStateComponent, ErrorComponent, ErrorStateComponent, FORGEROUTE_CONFIG, FileInputComponent, FormColSpanDirective, FormComponent, FormRowComponent, FormSectionComponent, HintComponent, IconComponent, ImageComponent, ImageGalleryComponent, ImagePreviewComponent, ImageRepositionComponent, ImportExportComponent, KpiCardComponent, LAYOUT_GAP_PX, ListComponent, ListItemComponent, LiveRegionComponent, ModalComponent, MoreMenuComponent, MultiSelectComponent, PHONE_NUMBER_AREA_CODE_LENGTH, PHONE_NUMBER_ZIP_LENGTH, PaginationComponent, PanelInfoListComponent, PdfHotspotComponent, PhoneNumberPickerComponent, PillTabsComponent, ProgressBarComponent, ProgressRingComponent, QrCodeComponent, QuickFilterTabsComponent, RICH_TEXT_OPTIONS, RadioComponent, RadioGroupComponent, RadioMatrixComponent, RadioOptionContentDirective, ReadonlyFieldsetComponent, RichTextEditorComponent, SEMANTIC_BADGE_MAP, SearchInputComponent, SectionHeaderComponent, SelectComponent, SidePanelComponent, SignaturePadComponent, SkeletonComponent, StackComponent, StarComponent, StepperComponent, TableToolbarComponent, TextComponent, TextInputComponent, TextareaInputComponent, TimeInputComponent, TimelineComponent, ToastComponent, ToastService, ToggleBadgeComponent, ToggleComponent, TooltipDirective, US_STATES, UiFieldValidity, acceptLabel, appShellGroupsStorageKey, autoVariant, buildDefaultSchedule, builtInActionIcon, businessTimeOptions, createFieldReveal, decodeFilterValues, digitsOnly, encodeFilterValue, encodeFilterValues, errorContextInterceptor, fileMatchesAccept, formatFileSize, formatIsoDate, formatIsoDateTime, formatTime, getEligibleIds, getEligibleOptions, getErrorMessage, humanReadableMessage, iconPath, isoKey, issueToErrors, maxLengthIssue, normalizeHexColor, parseBizHours, parseIso, parseTime, pluralize, provideForgerouteToast, reorderItems, requiredIssue, resolveLayoutGap, resolvePreset, serializeBizHours };
32221
33560
 
32222
33561
  //# sourceMappingURL=forgeroute-ui.mjs.map