@forgeroute/ui 0.3.1 → 0.3.3

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.
@@ -1,5 +1,5 @@
1
1
  import * as i0 from "@angular/core";
2
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, DestroyRef, Directive, ElementRef, HostBinding, HostListener, Injectable, InjectionToken, Injector, Input, Renderer2, afterNextRender, computed, effect, forwardRef, inject, input, linkedSignal, model, output, signal, untracked, viewChild } from "@angular/core";
2
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, DestroyRef, Directive, ElementRef, HostBinding, HostListener, Injectable, InjectionToken, Injector, Input, NgZone, Renderer2, afterNextRender, computed, effect, forwardRef, inject, input, linkedSignal, model, output, signal, untracked, viewChild } from "@angular/core";
3
3
  import { HttpClient, HttpErrorResponse, HttpParams } from "@angular/common/http";
4
4
  import { takeUntilDestroyed, toObservable } from "@angular/core/rxjs-interop";
5
5
  import { catchError, debounceTime, distinctUntilChanged, skip, switchMap } from "rxjs/operators";
@@ -7,6 +7,7 @@ import { Subject, catchError as catchError$1, debounceTime as debounceTime$1, fi
7
7
  import { DOCUMENT, DatePipe, DecimalPipe, NgTemplateOutlet } from "@angular/common";
8
8
  import * as i1 from "@angular/forms";
9
9
  import { FormsModule, NG_VALIDATORS, NG_VALUE_ACCESSOR } from "@angular/forms";
10
+ import { BarController, BarElement, CategoryScale, Chart, LinearScale, Tooltip } from "chart.js";
10
11
  import { NavigationEnd, Router, RouterLink, RouterLinkActive } from "@angular/router";
11
12
  import { DomSanitizer } from "@angular/platform-browser";
12
13
  const FORGEROUTE_CONFIG = new InjectionToken("FORGEROUTE_CONFIG");
@@ -2728,6 +2729,7 @@ var ButtonComponent = class ButtonComponent {
2728
2729
  this.ariaLabel = input(void 0, ...ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []);
2729
2730
  this.ariaExpanded = input(void 0, ...ngDevMode ? [{ debugName: "ariaExpanded" }] : /* istanbul ignore next */ []);
2730
2731
  this.ariaPressed = input(void 0, ...ngDevMode ? [{ debugName: "ariaPressed" }] : /* istanbul ignore next */ []);
2732
+ this.ariaDescribedBy = input(void 0, ...ngDevMode ? [{ debugName: "ariaDescribedBy" }] : /* istanbul ignore next */ []);
2731
2733
  }
2732
2734
  static {
2733
2735
  this.ɵfac = i0.ɵɵngDeclareFactory({
@@ -2824,6 +2826,13 @@ var ButtonComponent = class ButtonComponent {
2824
2826
  isRequired: false,
2825
2827
  transformFunction: null
2826
2828
  },
2829
+ ariaDescribedBy: {
2830
+ classPropertyName: "ariaDescribedBy",
2831
+ publicName: "ariaDescribedBy",
2832
+ isSignal: true,
2833
+ isRequired: false,
2834
+ transformFunction: null
2835
+ },
2827
2836
  _footerLeft: {
2828
2837
  classPropertyName: "_footerLeft",
2829
2838
  publicName: "modal-footer-left",
@@ -2850,6 +2859,7 @@ var ButtonComponent = class ButtonComponent {
2850
2859
  [attr.aria-label]="ariaLabel()"
2851
2860
  [attr.aria-expanded]="ariaExpanded()"
2852
2861
  [attr.aria-pressed]="ariaPressed()"
2862
+ [attr.aria-describedby]="ariaDescribedBy() || null"
2853
2863
  [style.background]="color() || null"
2854
2864
  [style.border-color]="color() || null"
2855
2865
  >
@@ -2886,6 +2896,7 @@ i0.ɵɵngDeclareClassMetadata({
2886
2896
  [attr.aria-label]="ariaLabel()"
2887
2897
  [attr.aria-expanded]="ariaExpanded()"
2888
2898
  [attr.aria-pressed]="ariaPressed()"
2899
+ [attr.aria-describedby]="ariaDescribedBy() || null"
2889
2900
  [style.background]="color() || null"
2890
2901
  [style.border-color]="color() || null"
2891
2902
  >
@@ -2987,6 +2998,14 @@ i0.ɵɵngDeclareClassMetadata({
2987
2998
  required: false
2988
2999
  }]
2989
3000
  }],
3001
+ ariaDescribedBy: [{
3002
+ type: i0.Input,
3003
+ args: [{
3004
+ isSignal: true,
3005
+ alias: "ariaDescribedBy",
3006
+ required: false
3007
+ }]
3008
+ }],
2990
3009
  _footerLeft: [{
2991
3010
  type: Input,
2992
3011
  args: ["modal-footer-left"]
@@ -3958,6 +3977,7 @@ var TableToolbarComponent = class TableToolbarComponent {
3958
3977
  "ariaLabel",
3959
3978
  "ariaExpanded",
3960
3979
  "ariaPressed",
3980
+ "ariaDescribedBy",
3961
3981
  "modal-footer-left",
3962
3982
  "modal-footer-right"
3963
3983
  ]
@@ -4696,42 +4716,21 @@ i0.ɵɵngDeclareClassMetadata({
4696
4716
  }]
4697
4717
  }
4698
4718
  });
4699
- const PROGRESS_STEP_THRESHOLDS = [
4700
- {
4701
- at: 25,
4702
- variant: "amber"
4703
- },
4704
- {
4705
- at: 50,
4706
- variant: "blue"
4707
- },
4708
- {
4709
- at: 75,
4710
- variant: "lime"
4711
- },
4712
- {
4713
- at: 100,
4714
- variant: "green"
4715
- }
4716
- ];
4717
4719
  var ProgressBarComponent = class ProgressBarComponent {
4718
4720
  constructor() {
4719
4721
  this.value = input(0, ...ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []);
4720
4722
  this.max = input(100, ...ngDevMode ? [{ debugName: "max" }] : /* istanbul ignore next */ []);
4721
4723
  this.label = input("", ...ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []);
4722
- this.variant = input("blue", ...ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []);
4723
- this.thresholds = input(null, ...ngDevMode ? [{ debugName: "thresholds" }] : /* istanbul ignore next */ []);
4724
- this.autoColor = input(false, ...ngDevMode ? [{ debugName: "autoColor" }] : /* istanbul ignore next */ []);
4724
+ this.variant = input(null, ...ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []);
4725
4725
  this.tooltip = input("", ...ngDevMode ? [{ debugName: "tooltip" }] : /* istanbul ignore next */ []);
4726
4726
  this.ariaLabel = input("", ...ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []);
4727
4727
  this.clampedValue = computed(() => Math.min(Math.max(this.value(), 0), this.max()), ...ngDevMode ? [{ debugName: "clampedValue" }] : /* istanbul ignore next */ []);
4728
4728
  this.percent = computed(() => this.max() > 0 ? Math.round(this.clampedValue() / this.max() * 100) : 0, ...ngDevMode ? [{ debugName: "percent" }] : /* istanbul ignore next */ []);
4729
4729
  this.effectiveVariant = computed(() => {
4730
- const list = this.thresholds() ?? (this.autoColor() ? PROGRESS_STEP_THRESHOLDS : null);
4731
- if (!list?.length || this.max() <= 0) return this.variant();
4732
- const exact = this.clampedValue() / this.max() * 100;
4733
- const hit = list.filter((t) => t.at <= exact).sort((a, b) => b.at - a.at)[0];
4734
- return hit ? hit.variant : this.variant();
4730
+ const fixed = this.variant();
4731
+ if (fixed) return fixed;
4732
+ const exact = this.max() > 0 ? this.clampedValue() / this.max() * 100 : 0;
4733
+ return exact <= 25 ? "red" : exact <= 50 ? "amber" : exact <= 75 ? "blue" : "green";
4735
4734
  }, ...ngDevMode ? [{ debugName: "effectiveVariant" }] : /* istanbul ignore next */ []);
4736
4735
  }
4737
4736
  static {
@@ -4780,20 +4779,6 @@ var ProgressBarComponent = class ProgressBarComponent {
4780
4779
  isRequired: false,
4781
4780
  transformFunction: null
4782
4781
  },
4783
- thresholds: {
4784
- classPropertyName: "thresholds",
4785
- publicName: "thresholds",
4786
- isSignal: true,
4787
- isRequired: false,
4788
- transformFunction: null
4789
- },
4790
- autoColor: {
4791
- classPropertyName: "autoColor",
4792
- publicName: "autoColor",
4793
- isSignal: true,
4794
- isRequired: false,
4795
- transformFunction: null
4796
- },
4797
4782
  tooltip: {
4798
4783
  classPropertyName: "tooltip",
4799
4784
  publicName: "tooltip",
@@ -4824,7 +4809,7 @@ var ProgressBarComponent = class ProgressBarComponent {
4824
4809
  </div>
4825
4810
  `,
4826
4811
  isInline: true,
4827
- 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}.pb-blue{background:#3b82f6}.pb-green{background:#16a34a}.pb-amber{background:#f59e0b}.pb-red{background:#ef4444}.pb-slate{background:#94a3b8}.pb-lime{background:#84cc16}.pb-label{font-size:.75rem;font-weight:500;color:#64748b;white-space:nowrap}\n"],
4812
+ 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}.pb-blue{background:#3b82f6}.pb-green{background:#16a34a}.pb-amber{background:#f59e0b}.pb-red{background:#ef4444}.pb-slate{background:#94a3b8}.pb-label{font-size:.75rem;font-weight:500;color:#64748b;white-space:nowrap}\n"],
4828
4813
  dependencies: [{
4829
4814
  kind: "directive",
4830
4815
  type: TooltipDirective,
@@ -4860,7 +4845,7 @@ i0.ɵɵngDeclareClassMetadata({
4860
4845
  @if (label()) { <span class="pb-label">{{ label() }}</span> }
4861
4846
  </div>
4862
4847
  `,
4863
- 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}.pb-blue{background:#3b82f6}.pb-green{background:#16a34a}.pb-amber{background:#f59e0b}.pb-red{background:#ef4444}.pb-slate{background:#94a3b8}.pb-lime{background:#84cc16}.pb-label{font-size:.75rem;font-weight:500;color:#64748b;white-space:nowrap}\n"]
4848
+ 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}.pb-blue{background:#3b82f6}.pb-green{background:#16a34a}.pb-amber{background:#f59e0b}.pb-red{background:#ef4444}.pb-slate{background:#94a3b8}.pb-label{font-size:.75rem;font-weight:500;color:#64748b;white-space:nowrap}\n"]
4864
4849
  }]
4865
4850
  }],
4866
4851
  propDecorators: {
@@ -4896,22 +4881,6 @@ i0.ɵɵngDeclareClassMetadata({
4896
4881
  required: false
4897
4882
  }]
4898
4883
  }],
4899
- thresholds: [{
4900
- type: i0.Input,
4901
- args: [{
4902
- isSignal: true,
4903
- alias: "thresholds",
4904
- required: false
4905
- }]
4906
- }],
4907
- autoColor: [{
4908
- type: i0.Input,
4909
- args: [{
4910
- isSignal: true,
4911
- alias: "autoColor",
4912
- required: false
4913
- }]
4914
- }],
4915
4884
  tooltip: [{
4916
4885
  type: i0.Input,
4917
4886
  args: [{
@@ -6202,6 +6171,7 @@ var ImportExportComponent = class ImportExportComponent {
6202
6171
  "ariaLabel",
6203
6172
  "ariaExpanded",
6204
6173
  "ariaPressed",
6174
+ "ariaDescribedBy",
6205
6175
  "modal-footer-left",
6206
6176
  "modal-footer-right"
6207
6177
  ]
@@ -6688,6 +6658,7 @@ var ConfirmOutletComponent = class ConfirmOutletComponent {
6688
6658
  "ariaLabel",
6689
6659
  "ariaExpanded",
6690
6660
  "ariaPressed",
6661
+ "ariaDescribedBy",
6691
6662
  "modal-footer-left",
6692
6663
  "modal-footer-right"
6693
6664
  ]
@@ -7032,6 +7003,7 @@ var ErrorStateComponent = class ErrorStateComponent {
7032
7003
  "ariaLabel",
7033
7004
  "ariaExpanded",
7034
7005
  "ariaPressed",
7006
+ "ariaDescribedBy",
7035
7007
  "modal-footer-left",
7036
7008
  "modal-footer-right"
7037
7009
  ]
@@ -7120,6 +7092,9 @@ var DataTableComponent = class DataTableComponent {
7120
7092
  _countLabel(count) {
7121
7093
  return count === 1 ? this.itemLabel() : this.itemLabelPlural() || pluralize(this.itemLabel());
7122
7094
  }
7095
+ _deleteTitle() {
7096
+ return `Delete ${(this.itemLabelPlural() || pluralize(this.itemLabel())).replace(/(^|\s)(\S)/g, (_m, sp, ch) => sp + ch.toUpperCase())}`;
7097
+ }
7123
7098
  _presentKeys(counts) {
7124
7099
  return Object.keys(counts).filter((k) => k !== "" && k !== "all" && (counts[k] ?? 0) > 0);
7125
7100
  }
@@ -7245,7 +7220,7 @@ var DataTableComponent = class DataTableComponent {
7245
7220
  const blockedCount = split.blocked.length;
7246
7221
  const skippedNote = blockedCount === 0 ? "" : blockedCount === 1 ? " 1 selected row can't be deleted and will be skipped." : ` ${blockedCount} selected rows can't be deleted and will be skipped.`;
7247
7222
  const deleteDefault = {
7248
- title: "Delete Selected",
7223
+ title: this._deleteTitle(),
7249
7224
  message: `Delete ${count} ${this._countLabel(count)}? This cannot be undone.${skippedNote}`,
7250
7225
  confirmLabel: "Delete",
7251
7226
  variant: "danger"
@@ -8730,7 +8705,7 @@ var DataTableComponent = class DataTableComponent {
8730
8705
  @let pCfg = col.progressFn ? col.progressFn(item) : null;
8731
8706
  @if (pCfg) {
8732
8707
  <ui-progress-bar [value]="pCfg.value" [max]="pCfg.max" [label]="pCfg.label ?? ''"
8733
- [variant]="pCfg.variant ?? 'blue'" [thresholds]="pCfg.thresholds ?? null" [autoColor]="pCfg.autoColor ?? false" [tooltip]="pCfg.tooltip ?? ''" />
8708
+ [variant]="pCfg.variant ?? null" [tooltip]="pCfg.tooltip ?? ''" />
8734
8709
  } @else { <span class="dt-none">—</span> }
8735
8710
  }
8736
8711
 
@@ -9186,8 +9161,6 @@ var DataTableComponent = class DataTableComponent {
9186
9161
  "max",
9187
9162
  "label",
9188
9163
  "variant",
9189
- "thresholds",
9190
- "autoColor",
9191
9164
  "tooltip",
9192
9165
  "ariaLabel"
9193
9166
  ]
@@ -9208,6 +9181,7 @@ var DataTableComponent = class DataTableComponent {
9208
9181
  "ariaLabel",
9209
9182
  "ariaExpanded",
9210
9183
  "ariaPressed",
9184
+ "ariaDescribedBy",
9211
9185
  "modal-footer-left",
9212
9186
  "modal-footer-right"
9213
9187
  ]
@@ -9640,7 +9614,7 @@ i0.ɵɵngDeclareClassMetadata({
9640
9614
  @let pCfg = col.progressFn ? col.progressFn(item) : null;
9641
9615
  @if (pCfg) {
9642
9616
  <ui-progress-bar [value]="pCfg.value" [max]="pCfg.max" [label]="pCfg.label ?? ''"
9643
- [variant]="pCfg.variant ?? 'blue'" [thresholds]="pCfg.thresholds ?? null" [autoColor]="pCfg.autoColor ?? false" [tooltip]="pCfg.tooltip ?? ''" />
9617
+ [variant]="pCfg.variant ?? null" [tooltip]="pCfg.tooltip ?? ''" />
9644
9618
  } @else { <span class="dt-none">—</span> }
9645
9619
  }
9646
9620
 
@@ -10586,6 +10560,315 @@ i0.ɵɵngDeclareClassMetadata({
10586
10560
  }]
10587
10561
  }
10588
10562
  });
10563
+ Chart.register(BarController, BarElement, CategoryScale, LinearScale, Tooltip);
10564
+ const VALUE_LABELS = {
10565
+ id: "uiBarChartValueLabels",
10566
+ afterDatasetsDraw(chart) {
10567
+ if (chart.options.plugins["uiBarChartValueLabels"]?.enabled === false) return;
10568
+ const ctx = chart.ctx;
10569
+ ctx.save();
10570
+ ctx.fillStyle = "#475569";
10571
+ ctx.font = "600 11px sans-serif";
10572
+ ctx.textAlign = "center";
10573
+ ctx.textBaseline = "bottom";
10574
+ chart.getDatasetMeta(0).data.forEach((bar, i) => {
10575
+ const value = chart.data.datasets[0]?.data[i];
10576
+ if (typeof value === "number" && value !== 0) ctx.fillText(String(value), bar.x, bar.y - 2);
10577
+ });
10578
+ ctx.restore();
10579
+ }
10580
+ };
10581
+ var BarChartComponent = class BarChartComponent {
10582
+ constructor() {
10583
+ this.labels = input([], ...ngDevMode ? [{ debugName: "labels" }] : /* istanbul ignore next */ []);
10584
+ this.values = input([], ...ngDevMode ? [{ debugName: "values" }] : /* istanbul ignore next */ []);
10585
+ this.color = input("#3b82f6", ...ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []);
10586
+ this.hoverColor = input("#2563eb", ...ngDevMode ? [{ debugName: "hoverColor" }] : /* istanbul ignore next */ []);
10587
+ this.height = input(240, ...ngDevMode ? [{ debugName: "height" }] : /* istanbul ignore next */ []);
10588
+ this.ariaLabel = input("", ...ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []);
10589
+ this.showValues = input(true, ...ngDevMode ? [{ debugName: "showValues" }] : /* istanbul ignore next */ []);
10590
+ this.unitSingular = input("", ...ngDevMode ? [{ debugName: "unitSingular" }] : /* istanbul ignore next */ []);
10591
+ this.unitPlural = input("", ...ngDevMode ? [{ debugName: "unitPlural" }] : /* istanbul ignore next */ []);
10592
+ this.canvas = viewChild.required("canvas", ...ngDevMode ? [{ debugName: "canvas" }] : /* istanbul ignore next */ []);
10593
+ this.zone = inject(NgZone);
10594
+ this.chart = null;
10595
+ this.tooltipText = (value) => {
10596
+ const unit = value === 1 ? this.unitSingular() : this.unitPlural();
10597
+ return unit ? `${value} ${unit}` : String(value);
10598
+ };
10599
+ this.series = computed(() => ({
10600
+ labels: this.labels(),
10601
+ data: this.values(),
10602
+ color: this.color(),
10603
+ hoverColor: this.hoverColor(),
10604
+ showValues: this.showValues()
10605
+ }), ...ngDevMode ? [{ debugName: "series" }] : /* istanbul ignore next */ []);
10606
+ effect(() => {
10607
+ const s = this.series();
10608
+ const canvas = this.canvas().nativeElement;
10609
+ if (!this.chart) this.zone.runOutsideAngular(() => {
10610
+ this.chart = new Chart(canvas, {
10611
+ type: "bar",
10612
+ data: {
10613
+ labels: s.labels,
10614
+ datasets: [{
10615
+ data: s.data,
10616
+ backgroundColor: s.color,
10617
+ hoverBackgroundColor: s.hoverColor,
10618
+ borderRadius: 3,
10619
+ borderSkipped: false
10620
+ }]
10621
+ },
10622
+ options: {
10623
+ responsive: true,
10624
+ maintainAspectRatio: false,
10625
+ animation: false,
10626
+ layout: { padding: { top: 20 } },
10627
+ plugins: {
10628
+ legend: { display: false },
10629
+ tooltip: { callbacks: { label: (item) => this.tooltipText(Number(item.raw)) } }
10630
+ },
10631
+ scales: {
10632
+ y: {
10633
+ beginAtZero: true,
10634
+ ticks: {
10635
+ precision: 0,
10636
+ color: "#94a3b8",
10637
+ font: { size: 11 }
10638
+ },
10639
+ grid: { color: "#e2e8f0" },
10640
+ border: { display: false }
10641
+ },
10642
+ x: {
10643
+ grid: { display: false },
10644
+ ticks: {
10645
+ maxRotation: 0,
10646
+ color: "#94a3b8",
10647
+ font: { size: 10 }
10648
+ },
10649
+ border: { display: false }
10650
+ }
10651
+ }
10652
+ },
10653
+ plugins: [VALUE_LABELS]
10654
+ });
10655
+ });
10656
+ const chart = this.chart;
10657
+ chart.data.labels = s.labels;
10658
+ const ds = chart.data.datasets[0];
10659
+ ds.data = s.data;
10660
+ ds.backgroundColor = s.color;
10661
+ ds.hoverBackgroundColor = s.hoverColor;
10662
+ chart.options.plugins["uiBarChartValueLabels"] = { enabled: s.showValues };
10663
+ chart.update("none");
10664
+ });
10665
+ inject(DestroyRef).onDestroy(() => {
10666
+ this.chart?.destroy();
10667
+ this.chart = null;
10668
+ });
10669
+ }
10670
+ static {
10671
+ this.ɵfac = i0.ɵɵngDeclareFactory({
10672
+ minVersion: "12.0.0",
10673
+ version: "22.2.2",
10674
+ ngImport: i0,
10675
+ type: BarChartComponent,
10676
+ deps: [],
10677
+ target: i0.ɵɵFactoryTarget.Component
10678
+ });
10679
+ }
10680
+ static {
10681
+ this.ɵcmp = i0.ɵɵngDeclareComponent({
10682
+ minVersion: "17.2.0",
10683
+ version: "22.2.2",
10684
+ type: BarChartComponent,
10685
+ isStandalone: true,
10686
+ selector: "ui-bar-chart",
10687
+ inputs: {
10688
+ labels: {
10689
+ classPropertyName: "labels",
10690
+ publicName: "labels",
10691
+ isSignal: true,
10692
+ isRequired: false,
10693
+ transformFunction: null
10694
+ },
10695
+ values: {
10696
+ classPropertyName: "values",
10697
+ publicName: "values",
10698
+ isSignal: true,
10699
+ isRequired: false,
10700
+ transformFunction: null
10701
+ },
10702
+ color: {
10703
+ classPropertyName: "color",
10704
+ publicName: "color",
10705
+ isSignal: true,
10706
+ isRequired: false,
10707
+ transformFunction: null
10708
+ },
10709
+ hoverColor: {
10710
+ classPropertyName: "hoverColor",
10711
+ publicName: "hoverColor",
10712
+ isSignal: true,
10713
+ isRequired: false,
10714
+ transformFunction: null
10715
+ },
10716
+ height: {
10717
+ classPropertyName: "height",
10718
+ publicName: "height",
10719
+ isSignal: true,
10720
+ isRequired: false,
10721
+ transformFunction: null
10722
+ },
10723
+ ariaLabel: {
10724
+ classPropertyName: "ariaLabel",
10725
+ publicName: "ariaLabel",
10726
+ isSignal: true,
10727
+ isRequired: false,
10728
+ transformFunction: null
10729
+ },
10730
+ showValues: {
10731
+ classPropertyName: "showValues",
10732
+ publicName: "showValues",
10733
+ isSignal: true,
10734
+ isRequired: false,
10735
+ transformFunction: null
10736
+ },
10737
+ unitSingular: {
10738
+ classPropertyName: "unitSingular",
10739
+ publicName: "unitSingular",
10740
+ isSignal: true,
10741
+ isRequired: false,
10742
+ transformFunction: null
10743
+ },
10744
+ unitPlural: {
10745
+ classPropertyName: "unitPlural",
10746
+ publicName: "unitPlural",
10747
+ isSignal: true,
10748
+ isRequired: false,
10749
+ transformFunction: null
10750
+ }
10751
+ },
10752
+ viewQueries: [{
10753
+ propertyName: "canvas",
10754
+ first: true,
10755
+ predicate: ["canvas"],
10756
+ descendants: true,
10757
+ isSignal: true
10758
+ }],
10759
+ ngImport: i0,
10760
+ template: `
10761
+ <div class="bc-wrap" [class.bc-default-height]="height() === 240" [style.height.px]="height()"
10762
+ role="img" [attr.aria-label]="ariaLabel() || null">
10763
+ <canvas #canvas></canvas>
10764
+ </div>
10765
+ `,
10766
+ isInline: true,
10767
+ styles: [":host{display:block}.bc-wrap{position:relative}@media(max-width:768px){.bc-wrap.bc-default-height{height:200px!important}}@media(max-width:480px){.bc-wrap.bc-default-height{height:160px!important}}\n"],
10768
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
10769
+ });
10770
+ }
10771
+ };
10772
+ i0.ɵɵngDeclareClassMetadata({
10773
+ minVersion: "12.0.0",
10774
+ version: "22.2.2",
10775
+ ngImport: i0,
10776
+ type: BarChartComponent,
10777
+ decorators: [{
10778
+ type: Component,
10779
+ args: [{
10780
+ selector: "ui-bar-chart",
10781
+ standalone: true,
10782
+ changeDetection: ChangeDetectionStrategy.OnPush,
10783
+ template: `
10784
+ <div class="bc-wrap" [class.bc-default-height]="height() === 240" [style.height.px]="height()"
10785
+ role="img" [attr.aria-label]="ariaLabel() || null">
10786
+ <canvas #canvas></canvas>
10787
+ </div>
10788
+ `,
10789
+ styles: [":host{display:block}.bc-wrap{position:relative}@media(max-width:768px){.bc-wrap.bc-default-height{height:200px!important}}@media(max-width:480px){.bc-wrap.bc-default-height{height:160px!important}}\n"]
10790
+ }]
10791
+ }],
10792
+ ctorParameters: () => [],
10793
+ propDecorators: {
10794
+ labels: [{
10795
+ type: i0.Input,
10796
+ args: [{
10797
+ isSignal: true,
10798
+ alias: "labels",
10799
+ required: false
10800
+ }]
10801
+ }],
10802
+ values: [{
10803
+ type: i0.Input,
10804
+ args: [{
10805
+ isSignal: true,
10806
+ alias: "values",
10807
+ required: false
10808
+ }]
10809
+ }],
10810
+ color: [{
10811
+ type: i0.Input,
10812
+ args: [{
10813
+ isSignal: true,
10814
+ alias: "color",
10815
+ required: false
10816
+ }]
10817
+ }],
10818
+ hoverColor: [{
10819
+ type: i0.Input,
10820
+ args: [{
10821
+ isSignal: true,
10822
+ alias: "hoverColor",
10823
+ required: false
10824
+ }]
10825
+ }],
10826
+ height: [{
10827
+ type: i0.Input,
10828
+ args: [{
10829
+ isSignal: true,
10830
+ alias: "height",
10831
+ required: false
10832
+ }]
10833
+ }],
10834
+ ariaLabel: [{
10835
+ type: i0.Input,
10836
+ args: [{
10837
+ isSignal: true,
10838
+ alias: "ariaLabel",
10839
+ required: false
10840
+ }]
10841
+ }],
10842
+ showValues: [{
10843
+ type: i0.Input,
10844
+ args: [{
10845
+ isSignal: true,
10846
+ alias: "showValues",
10847
+ required: false
10848
+ }]
10849
+ }],
10850
+ unitSingular: [{
10851
+ type: i0.Input,
10852
+ args: [{
10853
+ isSignal: true,
10854
+ alias: "unitSingular",
10855
+ required: false
10856
+ }]
10857
+ }],
10858
+ unitPlural: [{
10859
+ type: i0.Input,
10860
+ args: [{
10861
+ isSignal: true,
10862
+ alias: "unitPlural",
10863
+ required: false
10864
+ }]
10865
+ }],
10866
+ canvas: [{
10867
+ type: i0.ViewChild,
10868
+ args: ["canvas", { isSignal: true }]
10869
+ }]
10870
+ }
10871
+ });
10589
10872
  const KEY_STEP = 2;
10590
10873
  const KEY_STEP_BIG = 10;
10591
10874
  const clamp = (n) => Math.min(100, Math.max(0, Math.round(n)));
@@ -16436,6 +16719,7 @@ var SendEmailComponent = class SendEmailComponent {
16436
16719
  "ariaLabel",
16437
16720
  "ariaExpanded",
16438
16721
  "ariaPressed",
16722
+ "ariaDescribedBy",
16439
16723
  "modal-footer-left",
16440
16724
  "modal-footer-right"
16441
16725
  ]
@@ -17655,6 +17939,7 @@ var SendTextComponent = class SendTextComponent {
17655
17939
  "ariaLabel",
17656
17940
  "ariaExpanded",
17657
17941
  "ariaPressed",
17942
+ "ariaDescribedBy",
17658
17943
  "modal-footer-left",
17659
17944
  "modal-footer-right"
17660
17945
  ]
@@ -22687,6 +22972,7 @@ var QrCodeComponent = class QrCodeComponent {
22687
22972
  "ariaLabel",
22688
22973
  "ariaExpanded",
22689
22974
  "ariaPressed",
22975
+ "ariaDescribedBy",
22690
22976
  "modal-footer-left",
22691
22977
  "modal-footer-right"
22692
22978
  ]
@@ -22954,6 +23240,7 @@ var PanelInfoListComponent = class PanelInfoListComponent {
22954
23240
  "ariaLabel",
22955
23241
  "ariaExpanded",
22956
23242
  "ariaPressed",
23243
+ "ariaDescribedBy",
22957
23244
  "modal-footer-left",
22958
23245
  "modal-footer-right"
22959
23246
  ]
@@ -24854,6 +25141,7 @@ var DateRangePickerComponent = class DateRangePickerComponent {
24854
25141
  "ariaLabel",
24855
25142
  "ariaExpanded",
24856
25143
  "ariaPressed",
25144
+ "ariaDescribedBy",
24857
25145
  "modal-footer-left",
24858
25146
  "modal-footer-right"
24859
25147
  ]
@@ -27018,6 +27306,462 @@ i0.ɵɵngDeclareClassMetadata({
27018
27306
  }]
27019
27307
  }
27020
27308
  });
27309
+ var RadioMatrixComponent = class RadioMatrixComponent {
27310
+ get _name() {
27311
+ return this.name() || this._generatedName;
27312
+ }
27313
+ constructor() {
27314
+ this.label = input("", ...ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []);
27315
+ this.rowHeader = input("", ...ngDevMode ? [{ debugName: "rowHeader" }] : /* istanbul ignore next */ []);
27316
+ this.rows = input([], ...ngDevMode ? [{ debugName: "rows" }] : /* istanbul ignore next */ []);
27317
+ this.columns = input([], ...ngDevMode ? [{ debugName: "columns" }] : /* istanbul ignore next */ []);
27318
+ this.required = input(false, ...ngDevMode ? [{ debugName: "required" }] : /* istanbul ignore next */ []);
27319
+ this.hint = input("", ...ngDevMode ? [{ debugName: "hint" }] : /* istanbul ignore next */ []);
27320
+ this.error = input("", ...ngDevMode ? [{ debugName: "error" }] : /* istanbul ignore next */ []);
27321
+ this.showErrors = input(false, ...ngDevMode ? [{ debugName: "showErrors" }] : /* istanbul ignore next */ []);
27322
+ this.name = input("", ...ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []);
27323
+ this._disabledInput = input(false, {
27324
+ ...ngDevMode ? { debugName: "_disabledInput" } : /* istanbul ignore next */ {},
27325
+ alias: "disabled"
27326
+ });
27327
+ this._cvaDisabled = signal(false, ...ngDevMode ? [{ debugName: "_cvaDisabled" }] : /* istanbul ignore next */ []);
27328
+ this.disabled = computed(() => this._disabledInput() || this._cvaDisabled(), ...ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []);
27329
+ this._generatedName = `rm-${Math.random().toString(36).slice(2, 8)}`;
27330
+ this._descId = `${this._generatedName}-desc`;
27331
+ this._value = signal({}, ...ngDevMode ? [{ debugName: "_value" }] : /* istanbul ignore next */ []);
27332
+ this._reveal = createFieldReveal(this.showErrors);
27333
+ this._issue = computed(() => this._check(this._value()), ...ngDevMode ? [{ debugName: "_issue" }] : /* istanbul ignore next */ []);
27334
+ this.invalid = computed(() => !!this.error() || !!this._issue(), ...ngDevMode ? [{ debugName: "invalid" }] : /* istanbul ignore next */ []);
27335
+ this.errorMessage = computed(() => this._issue()?.message ?? "", ...ngDevMode ? [{ debugName: "errorMessage" }] : /* istanbul ignore next */ []);
27336
+ this.invalidChange = output();
27337
+ this._activeError = computed(() => this.error() || (this._reveal.revealed() ? this.errorMessage() : ""), ...ngDevMode ? [{ debugName: "_activeError" }] : /* istanbul ignore next */ []);
27338
+ this._onValidatorChange = () => {};
27339
+ this._onChange = (_) => {};
27340
+ this._onTouched = () => {};
27341
+ effect(() => {
27342
+ this.invalidChange.emit(this.invalid());
27343
+ });
27344
+ }
27345
+ ngOnChanges() {
27346
+ this._onValidatorChange();
27347
+ }
27348
+ validate(control) {
27349
+ return issueToErrors(this._check(this._toRecord(control.value)));
27350
+ }
27351
+ registerOnValidatorChange(fn) {
27352
+ this._onValidatorChange = fn;
27353
+ }
27354
+ writeValue(val) {
27355
+ this._value.set(this._toRecord(val));
27356
+ }
27357
+ registerOnChange(fn) {
27358
+ this._onChange = fn;
27359
+ }
27360
+ registerOnTouched(fn) {
27361
+ this._onTouched = fn;
27362
+ }
27363
+ setDisabledState(d) {
27364
+ this._cvaDisabled.set(d);
27365
+ }
27366
+ onSelect(row, column) {
27367
+ const next = {
27368
+ ...this._value(),
27369
+ [row]: column
27370
+ };
27371
+ this._value.set(next);
27372
+ this._onChange(next);
27373
+ }
27374
+ _rowInvalid(row) {
27375
+ if (this.disabled() || row.disabled || !this._reveal.revealed()) return false;
27376
+ const v = this._value()[row.value] ?? "";
27377
+ return v ? !this.columns().some((c) => c.value === v) : this.required();
27378
+ }
27379
+ onFocusOut(event) {
27380
+ const next = event.relatedTarget;
27381
+ if (next && event.currentTarget.contains(next)) return;
27382
+ this._onTouched();
27383
+ this._reveal.touched.set(true);
27384
+ }
27385
+ _toRecord(val) {
27386
+ return val && typeof val === "object" ? { ...val } : {};
27387
+ }
27388
+ _check(value) {
27389
+ if (this.disabled()) return null;
27390
+ const cols = this.columns();
27391
+ const rows = this.rows().filter((r) => !r.disabled);
27392
+ if (cols.length > 0 && rows.some((r) => value[r.value] && !cols.some((c) => c.value === value[r.value]))) return {
27393
+ key: "option",
27394
+ message: "Select a valid option."
27395
+ };
27396
+ if (this.required() && rows.some((r) => !value[r.value])) {
27397
+ const label = this.label().trim();
27398
+ return {
27399
+ key: "required",
27400
+ message: label ? `${label}: choose an option in every row.` : "Choose an option in every row."
27401
+ };
27402
+ }
27403
+ return null;
27404
+ }
27405
+ static {
27406
+ this.ɵfac = i0.ɵɵngDeclareFactory({
27407
+ minVersion: "12.0.0",
27408
+ version: "22.2.2",
27409
+ ngImport: i0,
27410
+ type: RadioMatrixComponent,
27411
+ deps: [],
27412
+ target: i0.ɵɵFactoryTarget.Component
27413
+ });
27414
+ }
27415
+ static {
27416
+ this.ɵcmp = i0.ɵɵngDeclareComponent({
27417
+ minVersion: "17.0.0",
27418
+ version: "22.2.2",
27419
+ type: RadioMatrixComponent,
27420
+ isStandalone: true,
27421
+ selector: "ui-radio-matrix",
27422
+ inputs: {
27423
+ label: {
27424
+ classPropertyName: "label",
27425
+ publicName: "label",
27426
+ isSignal: true,
27427
+ isRequired: false,
27428
+ transformFunction: null
27429
+ },
27430
+ rowHeader: {
27431
+ classPropertyName: "rowHeader",
27432
+ publicName: "rowHeader",
27433
+ isSignal: true,
27434
+ isRequired: false,
27435
+ transformFunction: null
27436
+ },
27437
+ rows: {
27438
+ classPropertyName: "rows",
27439
+ publicName: "rows",
27440
+ isSignal: true,
27441
+ isRequired: false,
27442
+ transformFunction: null
27443
+ },
27444
+ columns: {
27445
+ classPropertyName: "columns",
27446
+ publicName: "columns",
27447
+ isSignal: true,
27448
+ isRequired: false,
27449
+ transformFunction: null
27450
+ },
27451
+ required: {
27452
+ classPropertyName: "required",
27453
+ publicName: "required",
27454
+ isSignal: true,
27455
+ isRequired: false,
27456
+ transformFunction: null
27457
+ },
27458
+ hint: {
27459
+ classPropertyName: "hint",
27460
+ publicName: "hint",
27461
+ isSignal: true,
27462
+ isRequired: false,
27463
+ transformFunction: null
27464
+ },
27465
+ error: {
27466
+ classPropertyName: "error",
27467
+ publicName: "error",
27468
+ isSignal: true,
27469
+ isRequired: false,
27470
+ transformFunction: null
27471
+ },
27472
+ showErrors: {
27473
+ classPropertyName: "showErrors",
27474
+ publicName: "showErrors",
27475
+ isSignal: true,
27476
+ isRequired: false,
27477
+ transformFunction: null
27478
+ },
27479
+ name: {
27480
+ classPropertyName: "name",
27481
+ publicName: "name",
27482
+ isSignal: true,
27483
+ isRequired: false,
27484
+ transformFunction: null
27485
+ },
27486
+ _disabledInput: {
27487
+ classPropertyName: "_disabledInput",
27488
+ publicName: "disabled",
27489
+ isSignal: true,
27490
+ isRequired: false,
27491
+ transformFunction: null
27492
+ }
27493
+ },
27494
+ outputs: { invalidChange: "invalidChange" },
27495
+ providers: [
27496
+ {
27497
+ provide: NG_VALUE_ACCESSOR,
27498
+ useExisting: forwardRef(() => RadioMatrixComponent),
27499
+ multi: true
27500
+ },
27501
+ {
27502
+ provide: NG_VALIDATORS,
27503
+ useExisting: forwardRef(() => RadioMatrixComponent),
27504
+ multi: true
27505
+ },
27506
+ {
27507
+ provide: UiFieldValidity,
27508
+ useExisting: forwardRef(() => RadioMatrixComponent)
27509
+ }
27510
+ ],
27511
+ usesOnChanges: true,
27512
+ ngImport: i0,
27513
+ template: `
27514
+ <fieldset
27515
+ class="rm-field"
27516
+ [class.rm-error]="_activeError()"
27517
+ [class.rm-disabled]="disabled()"
27518
+ [disabled]="disabled()"
27519
+ [attr.aria-required]="required() ? 'true' : null"
27520
+ [attr.aria-invalid]="_activeError() ? 'true' : null"
27521
+ [attr.aria-describedby]="(_activeError() || hint()) ? _descId : null"
27522
+ (focusout)="onFocusOut($event)">
27523
+ @if (label()) {
27524
+ <legend class="rm-label">
27525
+ {{ label() }}
27526
+ @if (required()) { <span class="rm-required" aria-hidden="true">*</span> }
27527
+ </legend>
27528
+ }
27529
+ <div class="rm-scroll">
27530
+ <table class="rm-table">
27531
+ <thead>
27532
+ <tr>
27533
+ <th scope="col" class="rm-corner">{{ rowHeader() }}</th>
27534
+ @for (col of columns(); track col.value) {
27535
+ <th scope="col" class="rm-col">{{ col.label }}</th>
27536
+ }
27537
+ </tr>
27538
+ </thead>
27539
+ <tbody>
27540
+ @for (row of rows(); track row.value) {
27541
+ <tr class="rm-row" [class.rm-row-missing]="_rowInvalid(row)">
27542
+ <th scope="row" class="rm-row-label">{{ row.label }}</th>
27543
+ @for (col of columns(); track col.value) {
27544
+ <td class="rm-cell">
27545
+ <ui-radio
27546
+ [name]="_name + '-' + row.value"
27547
+ [value]="col.value"
27548
+ [ariaLabel]="row.label + ': ' + col.label"
27549
+ [checked]="_value()[row.value] === col.value"
27550
+ [disabled]="disabled() || !!row.disabled || !!col.disabled"
27551
+ [invalid]="_rowInvalid(row)"
27552
+ [describedBy]="(_activeError() || hint()) ? _descId : ''"
27553
+ (selected)="onSelect(row.value, $event)" />
27554
+ </td>
27555
+ }
27556
+ </tr>
27557
+ }
27558
+ </tbody>
27559
+ </table>
27560
+ </div>
27561
+ @if (_activeError()) {
27562
+ <p class="rm-desc rm-desc-error" [id]="_descId" role="alert">{{ _activeError() }}</p>
27563
+ } @else if (hint()) {
27564
+ <p class="rm-desc" [id]="_descId">{{ hint() }}</p>
27565
+ }
27566
+ </fieldset>
27567
+ `,
27568
+ isInline: true,
27569
+ styles: [":host{display:block}.rm-field{display:flex;flex-direction:column;gap:6px;border:0;margin:0;padding:0;min-width:0}.rm-label{padding:0;margin-bottom:6px;font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.rm-required{color:#ef4444;margin-left:2px}.rm-scroll{overflow-x:auto;border:1px solid #e2e8f0;border-radius:8px}.rm-table{width:100%;border-collapse:collapse;font-size:.875rem}.rm-table th,.rm-table td{padding:8px 12px;border-bottom:1px solid #f1f5f9;text-align:left}.rm-table tbody tr:last-child th,.rm-table tbody tr:last-child td{border-bottom:0}.rm-table thead th{position:sticky;top:0;background:#f8fafc;font-size:.75rem;font-weight:600;color:#475569;text-transform:uppercase;letter-spacing:.03em;white-space:nowrap}.rm-col,.rm-cell{text-align:center!important;width:1%;white-space:nowrap}.rm-cell ui-radio{display:inline-block}.rm-row-label{font-weight:500;color:#1e293b}.rm-row:hover{background:#f8fafc}.rm-row-missing .rm-row-label{color:#b91c1c}.rm-disabled .rm-scroll{opacity:.6}.rm-error .rm-scroll{border-color:#ef4444}.rm-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.rm-desc-error{color:#ef4444}@media(max-width:480px){.rm-table th,.rm-table td{padding:6px 8px}.rm-table thead th{font-size:.6875rem}}\n"],
27570
+ dependencies: [{
27571
+ kind: "component",
27572
+ type: RadioComponent,
27573
+ selector: "ui-radio",
27574
+ inputs: [
27575
+ "label",
27576
+ "description",
27577
+ "ariaLabel",
27578
+ "value",
27579
+ "name",
27580
+ "checked",
27581
+ "invalid",
27582
+ "describedBy",
27583
+ "disabled"
27584
+ ],
27585
+ outputs: ["selected"]
27586
+ }],
27587
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
27588
+ });
27589
+ }
27590
+ };
27591
+ i0.ɵɵngDeclareClassMetadata({
27592
+ minVersion: "12.0.0",
27593
+ version: "22.2.2",
27594
+ ngImport: i0,
27595
+ type: RadioMatrixComponent,
27596
+ decorators: [{
27597
+ type: Component,
27598
+ args: [{
27599
+ selector: "ui-radio-matrix",
27600
+ standalone: true,
27601
+ imports: [RadioComponent],
27602
+ changeDetection: ChangeDetectionStrategy.OnPush,
27603
+ providers: [
27604
+ {
27605
+ provide: NG_VALUE_ACCESSOR,
27606
+ useExisting: forwardRef(() => RadioMatrixComponent),
27607
+ multi: true
27608
+ },
27609
+ {
27610
+ provide: NG_VALIDATORS,
27611
+ useExisting: forwardRef(() => RadioMatrixComponent),
27612
+ multi: true
27613
+ },
27614
+ {
27615
+ provide: UiFieldValidity,
27616
+ useExisting: forwardRef(() => RadioMatrixComponent)
27617
+ }
27618
+ ],
27619
+ template: `
27620
+ <fieldset
27621
+ class="rm-field"
27622
+ [class.rm-error]="_activeError()"
27623
+ [class.rm-disabled]="disabled()"
27624
+ [disabled]="disabled()"
27625
+ [attr.aria-required]="required() ? 'true' : null"
27626
+ [attr.aria-invalid]="_activeError() ? 'true' : null"
27627
+ [attr.aria-describedby]="(_activeError() || hint()) ? _descId : null"
27628
+ (focusout)="onFocusOut($event)">
27629
+ @if (label()) {
27630
+ <legend class="rm-label">
27631
+ {{ label() }}
27632
+ @if (required()) { <span class="rm-required" aria-hidden="true">*</span> }
27633
+ </legend>
27634
+ }
27635
+ <div class="rm-scroll">
27636
+ <table class="rm-table">
27637
+ <thead>
27638
+ <tr>
27639
+ <th scope="col" class="rm-corner">{{ rowHeader() }}</th>
27640
+ @for (col of columns(); track col.value) {
27641
+ <th scope="col" class="rm-col">{{ col.label }}</th>
27642
+ }
27643
+ </tr>
27644
+ </thead>
27645
+ <tbody>
27646
+ @for (row of rows(); track row.value) {
27647
+ <tr class="rm-row" [class.rm-row-missing]="_rowInvalid(row)">
27648
+ <th scope="row" class="rm-row-label">{{ row.label }}</th>
27649
+ @for (col of columns(); track col.value) {
27650
+ <td class="rm-cell">
27651
+ <ui-radio
27652
+ [name]="_name + '-' + row.value"
27653
+ [value]="col.value"
27654
+ [ariaLabel]="row.label + ': ' + col.label"
27655
+ [checked]="_value()[row.value] === col.value"
27656
+ [disabled]="disabled() || !!row.disabled || !!col.disabled"
27657
+ [invalid]="_rowInvalid(row)"
27658
+ [describedBy]="(_activeError() || hint()) ? _descId : ''"
27659
+ (selected)="onSelect(row.value, $event)" />
27660
+ </td>
27661
+ }
27662
+ </tr>
27663
+ }
27664
+ </tbody>
27665
+ </table>
27666
+ </div>
27667
+ @if (_activeError()) {
27668
+ <p class="rm-desc rm-desc-error" [id]="_descId" role="alert">{{ _activeError() }}</p>
27669
+ } @else if (hint()) {
27670
+ <p class="rm-desc" [id]="_descId">{{ hint() }}</p>
27671
+ }
27672
+ </fieldset>
27673
+ `,
27674
+ styles: [":host{display:block}.rm-field{display:flex;flex-direction:column;gap:6px;border:0;margin:0;padding:0;min-width:0}.rm-label{padding:0;margin-bottom:6px;font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.rm-required{color:#ef4444;margin-left:2px}.rm-scroll{overflow-x:auto;border:1px solid #e2e8f0;border-radius:8px}.rm-table{width:100%;border-collapse:collapse;font-size:.875rem}.rm-table th,.rm-table td{padding:8px 12px;border-bottom:1px solid #f1f5f9;text-align:left}.rm-table tbody tr:last-child th,.rm-table tbody tr:last-child td{border-bottom:0}.rm-table thead th{position:sticky;top:0;background:#f8fafc;font-size:.75rem;font-weight:600;color:#475569;text-transform:uppercase;letter-spacing:.03em;white-space:nowrap}.rm-col,.rm-cell{text-align:center!important;width:1%;white-space:nowrap}.rm-cell ui-radio{display:inline-block}.rm-row-label{font-weight:500;color:#1e293b}.rm-row:hover{background:#f8fafc}.rm-row-missing .rm-row-label{color:#b91c1c}.rm-disabled .rm-scroll{opacity:.6}.rm-error .rm-scroll{border-color:#ef4444}.rm-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.rm-desc-error{color:#ef4444}@media(max-width:480px){.rm-table th,.rm-table td{padding:6px 8px}.rm-table thead th{font-size:.6875rem}}\n"]
27675
+ }]
27676
+ }],
27677
+ ctorParameters: () => [],
27678
+ propDecorators: {
27679
+ label: [{
27680
+ type: i0.Input,
27681
+ args: [{
27682
+ isSignal: true,
27683
+ alias: "label",
27684
+ required: false
27685
+ }]
27686
+ }],
27687
+ rowHeader: [{
27688
+ type: i0.Input,
27689
+ args: [{
27690
+ isSignal: true,
27691
+ alias: "rowHeader",
27692
+ required: false
27693
+ }]
27694
+ }],
27695
+ rows: [{
27696
+ type: i0.Input,
27697
+ args: [{
27698
+ isSignal: true,
27699
+ alias: "rows",
27700
+ required: false
27701
+ }]
27702
+ }],
27703
+ columns: [{
27704
+ type: i0.Input,
27705
+ args: [{
27706
+ isSignal: true,
27707
+ alias: "columns",
27708
+ required: false
27709
+ }]
27710
+ }],
27711
+ required: [{
27712
+ type: i0.Input,
27713
+ args: [{
27714
+ isSignal: true,
27715
+ alias: "required",
27716
+ required: false
27717
+ }]
27718
+ }],
27719
+ hint: [{
27720
+ type: i0.Input,
27721
+ args: [{
27722
+ isSignal: true,
27723
+ alias: "hint",
27724
+ required: false
27725
+ }]
27726
+ }],
27727
+ error: [{
27728
+ type: i0.Input,
27729
+ args: [{
27730
+ isSignal: true,
27731
+ alias: "error",
27732
+ required: false
27733
+ }]
27734
+ }],
27735
+ showErrors: [{
27736
+ type: i0.Input,
27737
+ args: [{
27738
+ isSignal: true,
27739
+ alias: "showErrors",
27740
+ required: false
27741
+ }]
27742
+ }],
27743
+ name: [{
27744
+ type: i0.Input,
27745
+ args: [{
27746
+ isSignal: true,
27747
+ alias: "name",
27748
+ required: false
27749
+ }]
27750
+ }],
27751
+ _disabledInput: [{
27752
+ type: i0.Input,
27753
+ args: [{
27754
+ isSignal: true,
27755
+ alias: "disabled",
27756
+ required: false
27757
+ }]
27758
+ }],
27759
+ invalidChange: [{
27760
+ type: i0.Output,
27761
+ args: ["invalidChange"]
27762
+ }]
27763
+ }
27764
+ });
27021
27765
  var DetailCardComponent = class DetailCardComponent {
27022
27766
  constructor() {
27023
27767
  this.title = input("", ...ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []);
@@ -27194,6 +27938,7 @@ var DetailCardComponent = class DetailCardComponent {
27194
27938
  "ariaLabel",
27195
27939
  "ariaExpanded",
27196
27940
  "ariaPressed",
27941
+ "ariaDescribedBy",
27197
27942
  "modal-footer-left",
27198
27943
  "modal-footer-right"
27199
27944
  ]
@@ -27450,6 +28195,6 @@ i0.ɵɵngDeclareClassMetadata({
27450
28195
  }]
27451
28196
  }
27452
28197
  });
27453
- export { AlertComponent, AppShellComponent, AvatarComponent, BADGE_VARIANT_STYLES, BadgeComponent, BulkMessagePanelComponent, ButtonComponent, CheckboxComponent, ChipComponent, ChipGroupComponent, ColumnFilterComponent, ComboboxComponent, ConfirmOutletComponent, ConfirmService, ContactPickerComponent, DEFAULT_DOCUMENT_SUBJECT, DOCUMENT_PURPOSE_OPTIONS, DROPDOWN_GROUP, DataTableComponent, DateInputComponent, DateRangePickerComponent, DatetimeInputComponent, DetailCardComponent, DiscountSelectorComponent, DividerComponent, DocumentSendOptionsComponent, DropdownComponent, EmptyStateComponent, ErrorComponent, ErrorStateComponent, FORGEROUTE_CONFIG, FileInputComponent, FormRowComponent, FormSectionComponent, HintComponent, ImagePreviewComponent, ImageRepositionComponent, ImportExportComponent, KpiCardComponent, ListItemComponent, MAX_CC, ModalComponent, MoreMenuComponent, MultiSelectComponent, PROGRESS_STEP_THRESHOLDS, PaginationComponent, PanelInfoListComponent, PillTabsComponent, ProgressBarComponent, QrCodeComponent, QuickFilterTabsComponent, RICH_TEXT_OPTIONS, RadioComponent, RadioGroupComponent, RichTextEditorComponent, SEMANTIC_BADGE_MAP, SearchInputComponent, SelectComponent, SendMessagePanelComponent, SidePanelComponent, SkeletonComponent, TableToolbarComponent, TemplatePickerComponent, TextInputComponent, TextareaInputComponent, TimeInputComponent, ToastComponent, ToastService, ToggleBadgeComponent, TooltipDirective, US_STATES, UiFieldValidity, VideoPickerComponent, appShellGroupsStorageKey, autoVariant, builtInActionIcon, createFieldReveal, decodeFilterValues, encodeFilterValue, encodeFilterValues, errorContextInterceptor, formatIsoDate, formatIsoDateTime, formatTime, getEligibleIds, getEligibleOptions, getErrorMessage, humanReadableMessage, isoKey, issueToErrors, maxLengthIssue, messagePreviewHtml, parseCcList, parseIso, parseTime, pluralize, requiredIssue, resolvePreset, suggestDocumentSubject };
28198
+ export { AlertComponent, AppShellComponent, AvatarComponent, BADGE_VARIANT_STYLES, BadgeComponent, BarChartComponent, BulkMessagePanelComponent, ButtonComponent, CheckboxComponent, ChipComponent, ChipGroupComponent, ColumnFilterComponent, ComboboxComponent, ConfirmOutletComponent, ConfirmService, ContactPickerComponent, DEFAULT_DOCUMENT_SUBJECT, DOCUMENT_PURPOSE_OPTIONS, DROPDOWN_GROUP, DataTableComponent, DateInputComponent, DateRangePickerComponent, DatetimeInputComponent, DetailCardComponent, DiscountSelectorComponent, DividerComponent, DocumentSendOptionsComponent, DropdownComponent, EmptyStateComponent, ErrorComponent, ErrorStateComponent, FORGEROUTE_CONFIG, FileInputComponent, FormRowComponent, FormSectionComponent, HintComponent, ImagePreviewComponent, ImageRepositionComponent, ImportExportComponent, KpiCardComponent, ListItemComponent, MAX_CC, ModalComponent, MoreMenuComponent, MultiSelectComponent, PaginationComponent, PanelInfoListComponent, PillTabsComponent, ProgressBarComponent, QrCodeComponent, QuickFilterTabsComponent, RICH_TEXT_OPTIONS, RadioComponent, RadioGroupComponent, RadioMatrixComponent, RichTextEditorComponent, SEMANTIC_BADGE_MAP, SearchInputComponent, SelectComponent, SendMessagePanelComponent, SidePanelComponent, SkeletonComponent, TableToolbarComponent, TemplatePickerComponent, TextInputComponent, TextareaInputComponent, TimeInputComponent, ToastComponent, ToastService, ToggleBadgeComponent, TooltipDirective, US_STATES, UiFieldValidity, VideoPickerComponent, appShellGroupsStorageKey, autoVariant, builtInActionIcon, createFieldReveal, decodeFilterValues, encodeFilterValue, encodeFilterValues, errorContextInterceptor, formatIsoDate, formatIsoDateTime, formatTime, getEligibleIds, getEligibleOptions, getErrorMessage, humanReadableMessage, isoKey, issueToErrors, maxLengthIssue, messagePreviewHtml, parseCcList, parseIso, parseTime, pluralize, requiredIssue, resolvePreset, suggestDocumentSubject };
27454
28199
 
27455
28200
  //# sourceMappingURL=forgeroute-ui.mjs.map