@forgeroute/ui 0.3.4 → 0.3.6

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, NgZone, 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, 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,7 +7,6 @@ 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";
11
10
  import { NavigationEnd, Router, RouterLink, RouterLinkActive } from "@angular/router";
12
11
  import { DomSanitizer } from "@angular/platform-browser";
13
12
  const FORGEROUTE_CONFIG = new InjectionToken("FORGEROUTE_CONFIG");
@@ -2719,6 +2718,8 @@ i0.ɵɵngDeclareClassMetadata({
2719
2718
  var ButtonComponent = class ButtonComponent {
2720
2719
  constructor() {
2721
2720
  this.variant = input("primary", ...ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []);
2721
+ this.routerLink = input(null, ...ngDevMode ? [{ debugName: "routerLink" }] : /* istanbul ignore next */ []);
2722
+ this.queryParams = input(null, ...ngDevMode ? [{ debugName: "queryParams" }] : /* istanbul ignore next */ []);
2722
2723
  this.color = input(void 0, ...ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []);
2723
2724
  this.active = input(false, ...ngDevMode ? [{ debugName: "active" }] : /* istanbul ignore next */ []);
2724
2725
  this.size = input("md", ...ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []);
@@ -2756,6 +2757,20 @@ var ButtonComponent = class ButtonComponent {
2756
2757
  isRequired: false,
2757
2758
  transformFunction: null
2758
2759
  },
2760
+ routerLink: {
2761
+ classPropertyName: "routerLink",
2762
+ publicName: "routerLink",
2763
+ isSignal: true,
2764
+ isRequired: false,
2765
+ transformFunction: null
2766
+ },
2767
+ queryParams: {
2768
+ classPropertyName: "queryParams",
2769
+ publicName: "queryParams",
2770
+ isSignal: true,
2771
+ isRequired: false,
2772
+ transformFunction: null
2773
+ },
2759
2774
  color: {
2760
2775
  classPropertyName: "color",
2761
2776
  publicName: "color",
@@ -2850,6 +2865,23 @@ var ButtonComponent = class ButtonComponent {
2850
2865
  },
2851
2866
  ngImport: i0,
2852
2867
  template: `
2868
+ <ng-template #content>
2869
+ @if (loading()) {
2870
+ <span class="spinner"></span>
2871
+ }
2872
+ <ng-content />
2873
+ </ng-template>
2874
+ @if (routerLink() !== null) {
2875
+ <!-- A real link (middle-click, open in new tab, screen readers say "link"): same look as the button of this variant, underlined. -->
2876
+ <a
2877
+ [routerLink]="routerLink()"
2878
+ [queryParams]="queryParams()"
2879
+ [class]="'btn btn-anchor btn-' + variant() + ' btn-' + size()"
2880
+ [class.btn-full]="fullWidth()"
2881
+ [attr.aria-label]="ariaLabel()"
2882
+ [attr.aria-describedby]="ariaDescribedBy() || null"
2883
+ ><ng-container [ngTemplateOutlet]="content" /></a>
2884
+ } @else {
2853
2885
  <button
2854
2886
  [type]="type()"
2855
2887
  [class]="'btn btn-' + variant() + ' btn-' + size()"
@@ -2862,15 +2894,39 @@ var ButtonComponent = class ButtonComponent {
2862
2894
  [attr.aria-describedby]="ariaDescribedBy() || null"
2863
2895
  [style.background]="color() || null"
2864
2896
  [style.border-color]="color() || null"
2865
- >
2866
- @if (loading()) {
2867
- <span class="spinner"></span>
2868
- }
2869
- <ng-content />
2870
- </button>
2897
+ ><ng-container [ngTemplateOutlet]="content" /></button>
2898
+ }
2871
2899
  `,
2872
2900
  isInline: true,
2873
- styles: [":host{display:inline-flex}.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-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-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"],
2901
+ styles: [":host{display:inline-flex}.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-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-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"],
2902
+ dependencies: [{
2903
+ kind: "directive",
2904
+ type: NgTemplateOutlet,
2905
+ selector: "[ngTemplateOutlet]",
2906
+ inputs: [
2907
+ "ngTemplateOutletContext",
2908
+ "ngTemplateOutlet",
2909
+ "ngTemplateOutletInjector"
2910
+ ]
2911
+ }, {
2912
+ kind: "directive",
2913
+ type: RouterLink,
2914
+ selector: "[routerLink]",
2915
+ inputs: [
2916
+ "target",
2917
+ "queryParams",
2918
+ "fragment",
2919
+ "queryParamsHandling",
2920
+ "state",
2921
+ "info",
2922
+ "relativeTo",
2923
+ "preserveFragment",
2924
+ "skipLocationChange",
2925
+ "replaceUrl",
2926
+ "browserUrl",
2927
+ "routerLink"
2928
+ ]
2929
+ }],
2874
2930
  changeDetection: i0.ChangeDetectionStrategy.OnPush
2875
2931
  });
2876
2932
  }
@@ -2885,8 +2941,26 @@ i0.ɵɵngDeclareClassMetadata({
2885
2941
  args: [{
2886
2942
  selector: "ui-button",
2887
2943
  standalone: true,
2944
+ imports: [NgTemplateOutlet, RouterLink],
2888
2945
  changeDetection: ChangeDetectionStrategy.OnPush,
2889
2946
  template: `
2947
+ <ng-template #content>
2948
+ @if (loading()) {
2949
+ <span class="spinner"></span>
2950
+ }
2951
+ <ng-content />
2952
+ </ng-template>
2953
+ @if (routerLink() !== null) {
2954
+ <!-- A real link (middle-click, open in new tab, screen readers say "link"): same look as the button of this variant, underlined. -->
2955
+ <a
2956
+ [routerLink]="routerLink()"
2957
+ [queryParams]="queryParams()"
2958
+ [class]="'btn btn-anchor btn-' + variant() + ' btn-' + size()"
2959
+ [class.btn-full]="fullWidth()"
2960
+ [attr.aria-label]="ariaLabel()"
2961
+ [attr.aria-describedby]="ariaDescribedBy() || null"
2962
+ ><ng-container [ngTemplateOutlet]="content" /></a>
2963
+ } @else {
2890
2964
  <button
2891
2965
  [type]="type()"
2892
2966
  [class]="'btn btn-' + variant() + ' btn-' + size()"
@@ -2899,14 +2973,10 @@ i0.ɵɵngDeclareClassMetadata({
2899
2973
  [attr.aria-describedby]="ariaDescribedBy() || null"
2900
2974
  [style.background]="color() || null"
2901
2975
  [style.border-color]="color() || null"
2902
- >
2903
- @if (loading()) {
2904
- <span class="spinner"></span>
2905
- }
2906
- <ng-content />
2907
- </button>
2976
+ ><ng-container [ngTemplateOutlet]="content" /></button>
2977
+ }
2908
2978
  `,
2909
- styles: [":host{display:inline-flex}.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-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-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"]
2979
+ styles: [":host{display:inline-flex}.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-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-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"]
2910
2980
  }]
2911
2981
  }],
2912
2982
  propDecorators: {
@@ -2918,6 +2988,22 @@ i0.ɵɵngDeclareClassMetadata({
2918
2988
  required: false
2919
2989
  }]
2920
2990
  }],
2991
+ routerLink: [{
2992
+ type: i0.Input,
2993
+ args: [{
2994
+ isSignal: true,
2995
+ alias: "routerLink",
2996
+ required: false
2997
+ }]
2998
+ }],
2999
+ queryParams: [{
3000
+ type: i0.Input,
3001
+ args: [{
3002
+ isSignal: true,
3003
+ alias: "queryParams",
3004
+ required: false
3005
+ }]
3006
+ }],
2921
3007
  color: [{
2922
3008
  type: i0.Input,
2923
3009
  args: [{
@@ -3967,6 +4053,8 @@ var TableToolbarComponent = class TableToolbarComponent {
3967
4053
  selector: "ui-button",
3968
4054
  inputs: [
3969
4055
  "variant",
4056
+ "routerLink",
4057
+ "queryParams",
3970
4058
  "color",
3971
4059
  "active",
3972
4060
  "size",
@@ -4303,6 +4391,30 @@ function decodeFilterValues(raw) {
4303
4391
  out.push(current);
4304
4392
  return out.map((v) => v.trim()).filter(Boolean);
4305
4393
  }
4394
+ var PlusSafeParamCodec = class {
4395
+ encode(v) {
4396
+ return encodeURIComponent(v).replace(/%40/gi, "@").replace(/%3A/gi, ":").replace(/%24/gi, "$").replace(/%2C/gi, ",").replace(/%3B/gi, ";").replace(/%3D/gi, "=").replace(/%3F/gi, "?").replace(/%2F/gi, "/");
4397
+ }
4398
+ encodeKey(key) {
4399
+ return this.encode(key);
4400
+ }
4401
+ encodeValue(value) {
4402
+ return this.encode(value);
4403
+ }
4404
+ decodeKey(key) {
4405
+ return decodeURIComponent(key);
4406
+ }
4407
+ decodeValue(value) {
4408
+ return decodeURIComponent(value);
4409
+ }
4410
+ };
4411
+ const CODEC = new PlusSafeParamCodec();
4412
+ function tableQueryParams(values = {}) {
4413
+ return new HttpParams({
4414
+ encoder: CODEC,
4415
+ fromObject: values
4416
+ });
4417
+ }
4306
4418
  function getEligibleOptions(options, selectedItems, field) {
4307
4419
  if (selectedItems.length === 0) return options;
4308
4420
  return options.filter((opt) => !selectedItems.every((item) => String(item[field] ?? "") === opt.value));
@@ -4716,6 +4828,7 @@ i0.ɵɵngDeclareClassMetadata({
4716
4828
  }]
4717
4829
  }
4718
4830
  });
4831
+ const MIN_VISIBLE_PERCENT = 2;
4719
4832
  var ProgressBarComponent = class ProgressBarComponent {
4720
4833
  constructor() {
4721
4834
  this.value = input(0, ...ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []);
@@ -4725,7 +4838,10 @@ var ProgressBarComponent = class ProgressBarComponent {
4725
4838
  this.tooltip = input("", ...ngDevMode ? [{ debugName: "tooltip" }] : /* istanbul ignore next */ []);
4726
4839
  this.ariaLabel = input("", ...ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []);
4727
4840
  this.clampedValue = computed(() => Math.min(Math.max(this.value(), 0), this.max()), ...ngDevMode ? [{ debugName: "clampedValue" }] : /* istanbul ignore next */ []);
4728
- this.percent = computed(() => this.max() > 0 ? Math.round(this.clampedValue() / this.max() * 100) : 0, ...ngDevMode ? [{ debugName: "percent" }] : /* istanbul ignore next */ []);
4841
+ this.percent = computed(() => {
4842
+ if (this.max() <= 0 || this.clampedValue() <= 0) return 0;
4843
+ return Math.max(Math.round(this.clampedValue() / this.max() * 100), MIN_VISIBLE_PERCENT);
4844
+ }, ...ngDevMode ? [{ debugName: "percent" }] : /* istanbul ignore next */ []);
4729
4845
  this.effectiveVariant = computed(() => {
4730
4846
  const fixed = this.variant();
4731
4847
  if (fixed) return fixed;
@@ -5607,7 +5723,7 @@ var ImportExportComponent = class ImportExportComponent {
5607
5723
  if (this.exporting) return;
5608
5724
  this.exporting = true;
5609
5725
  this.cdr.detectChanges();
5610
- let params = new HttpParams().set("size", "10000");
5726
+ let params = tableQueryParams().set("size", "10000");
5611
5727
  Object.entries(this.exportParams()).forEach(([k, v]) => {
5612
5728
  if (v) params = params.set(k, v);
5613
5729
  });
@@ -6161,6 +6277,8 @@ var ImportExportComponent = class ImportExportComponent {
6161
6277
  selector: "ui-button",
6162
6278
  inputs: [
6163
6279
  "variant",
6280
+ "routerLink",
6281
+ "queryParams",
6164
6282
  "color",
6165
6283
  "active",
6166
6284
  "size",
@@ -6648,6 +6766,8 @@ var ConfirmOutletComponent = class ConfirmOutletComponent {
6648
6766
  selector: "ui-button",
6649
6767
  inputs: [
6650
6768
  "variant",
6769
+ "routerLink",
6770
+ "queryParams",
6651
6771
  "color",
6652
6772
  "active",
6653
6773
  "size",
@@ -6993,6 +7113,8 @@ var ErrorStateComponent = class ErrorStateComponent {
6993
7113
  selector: "ui-button",
6994
7114
  inputs: [
6995
7115
  "variant",
7116
+ "routerLink",
7117
+ "queryParams",
6996
7118
  "color",
6997
7119
  "active",
6998
7120
  "size",
@@ -7747,7 +7869,7 @@ var DataTableComponent = class DataTableComponent {
7747
7869
  this._searchLoading.set(this._searchPending);
7748
7870
  this._searchPending = false;
7749
7871
  this._error.set(null);
7750
- let params = new HttpParams({ fromObject: this._extraParams() }).set("page", this._page() - 1).set("size", this.pageSize());
7872
+ let params = tableQueryParams(this._extraParams()).set("page", this._page() - 1).set("size", this.pageSize());
7751
7873
  if (this._search()) {
7752
7874
  params = params.set("search", this._searchParam());
7753
7875
  const searchFields = this._searchFields();
@@ -7792,7 +7914,7 @@ var DataTableComponent = class DataTableComponent {
7792
7914
  if (ep) {
7793
7915
  const params = this._countParams();
7794
7916
  this._tabCountsSub?.unsubscribe();
7795
- this._tabCountsSub = this.http.get(`${this.config.baseUrl}${ep}`, { params }).pipe(takeUntilDestroyed(this.destroyRef)).subscribe({
7917
+ this._tabCountsSub = this.http.get(`${this.config.baseUrl}${ep}`, { params: tableQueryParams(params) }).pipe(takeUntilDestroyed(this.destroyRef)).subscribe({
7796
7918
  next: (counts) => {
7797
7919
  const { all: allCount, ...tabCounts } = counts;
7798
7920
  const total = allCount ?? Object.values(tabCounts).reduce((a, b) => a + b, 0);
@@ -7808,7 +7930,7 @@ var DataTableComponent = class DataTableComponent {
7808
7930
  if (fep) {
7809
7931
  const params = this._countParams();
7810
7932
  this._filterCountsSub?.unsubscribe();
7811
- this._filterCountsSub = this.http.get(`${this.config.baseUrl}${fep}`, { params }).pipe(takeUntilDestroyed(this.destroyRef)).subscribe({
7933
+ this._filterCountsSub = this.http.get(`${this.config.baseUrl}${fep}`, { params: tableQueryParams(params) }).pipe(takeUntilDestroyed(this.destroyRef)).subscribe({
7812
7934
  next: (counts) => this._filterCounts.set(counts),
7813
7935
  error: () => {}
7814
7936
  });
@@ -9171,6 +9293,8 @@ var DataTableComponent = class DataTableComponent {
9171
9293
  selector: "ui-button",
9172
9294
  inputs: [
9173
9295
  "variant",
9296
+ "routerLink",
9297
+ "queryParams",
9174
9298
  "color",
9175
9299
  "active",
9176
9300
  "size",
@@ -10560,323 +10684,6 @@ i0.ɵɵngDeclareClassMetadata({
10560
10684
  }]
10561
10685
  }
10562
10686
  });
10563
- let registered = false;
10564
- function registerChartParts() {
10565
- if (registered) return;
10566
- Chart.register(BarController, BarElement, CategoryScale, LinearScale, Tooltip);
10567
- registered = true;
10568
- }
10569
- const VALUE_LABELS = {
10570
- id: "uiBarChartValueLabels",
10571
- afterDatasetsDraw(chart) {
10572
- if (chart.options.plugins["uiBarChartValueLabels"]?.enabled === false) return;
10573
- const ctx = chart.ctx;
10574
- ctx.save();
10575
- ctx.fillStyle = "#475569";
10576
- ctx.font = "600 11px sans-serif";
10577
- ctx.textAlign = "center";
10578
- ctx.textBaseline = "bottom";
10579
- chart.getDatasetMeta(0).data.forEach((bar, i) => {
10580
- const value = chart.data.datasets[0]?.data[i];
10581
- if (typeof value === "number" && value !== 0) ctx.fillText(String(value), bar.x, bar.y - 2);
10582
- });
10583
- ctx.restore();
10584
- }
10585
- };
10586
- var BarChartComponent = class BarChartComponent {
10587
- constructor() {
10588
- this.labels = input([], ...ngDevMode ? [{ debugName: "labels" }] : /* istanbul ignore next */ []);
10589
- this.values = input([], ...ngDevMode ? [{ debugName: "values" }] : /* istanbul ignore next */ []);
10590
- this.color = input("#3b82f6", ...ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []);
10591
- this.hoverColor = input("#2563eb", ...ngDevMode ? [{ debugName: "hoverColor" }] : /* istanbul ignore next */ []);
10592
- this.height = input(240, ...ngDevMode ? [{ debugName: "height" }] : /* istanbul ignore next */ []);
10593
- this.ariaLabel = input("", ...ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []);
10594
- this.showValues = input(true, ...ngDevMode ? [{ debugName: "showValues" }] : /* istanbul ignore next */ []);
10595
- this.unitSingular = input("", ...ngDevMode ? [{ debugName: "unitSingular" }] : /* istanbul ignore next */ []);
10596
- this.unitPlural = input("", ...ngDevMode ? [{ debugName: "unitPlural" }] : /* istanbul ignore next */ []);
10597
- this.canvas = viewChild.required("canvas", ...ngDevMode ? [{ debugName: "canvas" }] : /* istanbul ignore next */ []);
10598
- this.zone = inject(NgZone);
10599
- this.chart = null;
10600
- this.tooltipText = (value) => {
10601
- const unit = value === 1 ? this.unitSingular() : this.unitPlural();
10602
- return unit ? `${value} ${unit}` : String(value);
10603
- };
10604
- this.series = computed(() => ({
10605
- labels: this.labels(),
10606
- data: this.values(),
10607
- color: this.color(),
10608
- hoverColor: this.hoverColor(),
10609
- showValues: this.showValues()
10610
- }), ...ngDevMode ? [{ debugName: "series" }] : /* istanbul ignore next */ []);
10611
- effect(() => {
10612
- const s = this.series();
10613
- const canvas = this.canvas().nativeElement;
10614
- if (!this.chart) {
10615
- registerChartParts();
10616
- this.zone.runOutsideAngular(() => {
10617
- this.chart = new Chart(canvas, {
10618
- type: "bar",
10619
- data: {
10620
- labels: s.labels,
10621
- datasets: [{
10622
- data: s.data,
10623
- backgroundColor: s.color,
10624
- hoverBackgroundColor: s.hoverColor,
10625
- borderRadius: 3,
10626
- borderSkipped: false
10627
- }]
10628
- },
10629
- options: {
10630
- responsive: true,
10631
- maintainAspectRatio: false,
10632
- animation: false,
10633
- layout: { padding: { top: 20 } },
10634
- plugins: {
10635
- legend: { display: false },
10636
- tooltip: { callbacks: { label: (item) => this.tooltipText(Number(item.raw)) } }
10637
- },
10638
- scales: {
10639
- y: {
10640
- beginAtZero: true,
10641
- ticks: {
10642
- precision: 0,
10643
- color: "#94a3b8",
10644
- font: { size: 11 }
10645
- },
10646
- grid: { color: "#e2e8f0" },
10647
- border: { display: false }
10648
- },
10649
- x: {
10650
- grid: { display: false },
10651
- ticks: {
10652
- maxRotation: 0,
10653
- color: "#94a3b8",
10654
- font: { size: 10 }
10655
- },
10656
- border: { display: false }
10657
- }
10658
- }
10659
- },
10660
- plugins: [VALUE_LABELS]
10661
- });
10662
- });
10663
- }
10664
- const chart = this.chart;
10665
- chart.data.labels = s.labels;
10666
- const ds = chart.data.datasets[0];
10667
- ds.data = s.data;
10668
- ds.backgroundColor = s.color;
10669
- ds.hoverBackgroundColor = s.hoverColor;
10670
- chart.options.plugins["uiBarChartValueLabels"] = { enabled: s.showValues };
10671
- chart.update("none");
10672
- });
10673
- inject(DestroyRef).onDestroy(() => {
10674
- this.chart?.destroy();
10675
- this.chart = null;
10676
- });
10677
- }
10678
- static {
10679
- this.ɵfac = i0.ɵɵngDeclareFactory({
10680
- minVersion: "12.0.0",
10681
- version: "22.2.2",
10682
- ngImport: i0,
10683
- type: BarChartComponent,
10684
- deps: [],
10685
- target: i0.ɵɵFactoryTarget.Component
10686
- });
10687
- }
10688
- static {
10689
- this.ɵcmp = i0.ɵɵngDeclareComponent({
10690
- minVersion: "17.2.0",
10691
- version: "22.2.2",
10692
- type: BarChartComponent,
10693
- isStandalone: true,
10694
- selector: "ui-bar-chart",
10695
- inputs: {
10696
- labels: {
10697
- classPropertyName: "labels",
10698
- publicName: "labels",
10699
- isSignal: true,
10700
- isRequired: false,
10701
- transformFunction: null
10702
- },
10703
- values: {
10704
- classPropertyName: "values",
10705
- publicName: "values",
10706
- isSignal: true,
10707
- isRequired: false,
10708
- transformFunction: null
10709
- },
10710
- color: {
10711
- classPropertyName: "color",
10712
- publicName: "color",
10713
- isSignal: true,
10714
- isRequired: false,
10715
- transformFunction: null
10716
- },
10717
- hoverColor: {
10718
- classPropertyName: "hoverColor",
10719
- publicName: "hoverColor",
10720
- isSignal: true,
10721
- isRequired: false,
10722
- transformFunction: null
10723
- },
10724
- height: {
10725
- classPropertyName: "height",
10726
- publicName: "height",
10727
- isSignal: true,
10728
- isRequired: false,
10729
- transformFunction: null
10730
- },
10731
- ariaLabel: {
10732
- classPropertyName: "ariaLabel",
10733
- publicName: "ariaLabel",
10734
- isSignal: true,
10735
- isRequired: false,
10736
- transformFunction: null
10737
- },
10738
- showValues: {
10739
- classPropertyName: "showValues",
10740
- publicName: "showValues",
10741
- isSignal: true,
10742
- isRequired: false,
10743
- transformFunction: null
10744
- },
10745
- unitSingular: {
10746
- classPropertyName: "unitSingular",
10747
- publicName: "unitSingular",
10748
- isSignal: true,
10749
- isRequired: false,
10750
- transformFunction: null
10751
- },
10752
- unitPlural: {
10753
- classPropertyName: "unitPlural",
10754
- publicName: "unitPlural",
10755
- isSignal: true,
10756
- isRequired: false,
10757
- transformFunction: null
10758
- }
10759
- },
10760
- viewQueries: [{
10761
- propertyName: "canvas",
10762
- first: true,
10763
- predicate: ["canvas"],
10764
- descendants: true,
10765
- isSignal: true
10766
- }],
10767
- ngImport: i0,
10768
- template: `
10769
- <div class="bc-wrap" [class.bc-default-height]="height() === 240" [style.height.px]="height()"
10770
- role="img" [attr.aria-label]="ariaLabel() || null">
10771
- <canvas #canvas></canvas>
10772
- </div>
10773
- `,
10774
- isInline: true,
10775
- 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"],
10776
- changeDetection: i0.ChangeDetectionStrategy.OnPush
10777
- });
10778
- }
10779
- };
10780
- i0.ɵɵngDeclareClassMetadata({
10781
- minVersion: "12.0.0",
10782
- version: "22.2.2",
10783
- ngImport: i0,
10784
- type: BarChartComponent,
10785
- decorators: [{
10786
- type: Component,
10787
- args: [{
10788
- selector: "ui-bar-chart",
10789
- standalone: true,
10790
- changeDetection: ChangeDetectionStrategy.OnPush,
10791
- template: `
10792
- <div class="bc-wrap" [class.bc-default-height]="height() === 240" [style.height.px]="height()"
10793
- role="img" [attr.aria-label]="ariaLabel() || null">
10794
- <canvas #canvas></canvas>
10795
- </div>
10796
- `,
10797
- 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"]
10798
- }]
10799
- }],
10800
- ctorParameters: () => [],
10801
- propDecorators: {
10802
- labels: [{
10803
- type: i0.Input,
10804
- args: [{
10805
- isSignal: true,
10806
- alias: "labels",
10807
- required: false
10808
- }]
10809
- }],
10810
- values: [{
10811
- type: i0.Input,
10812
- args: [{
10813
- isSignal: true,
10814
- alias: "values",
10815
- required: false
10816
- }]
10817
- }],
10818
- color: [{
10819
- type: i0.Input,
10820
- args: [{
10821
- isSignal: true,
10822
- alias: "color",
10823
- required: false
10824
- }]
10825
- }],
10826
- hoverColor: [{
10827
- type: i0.Input,
10828
- args: [{
10829
- isSignal: true,
10830
- alias: "hoverColor",
10831
- required: false
10832
- }]
10833
- }],
10834
- height: [{
10835
- type: i0.Input,
10836
- args: [{
10837
- isSignal: true,
10838
- alias: "height",
10839
- required: false
10840
- }]
10841
- }],
10842
- ariaLabel: [{
10843
- type: i0.Input,
10844
- args: [{
10845
- isSignal: true,
10846
- alias: "ariaLabel",
10847
- required: false
10848
- }]
10849
- }],
10850
- showValues: [{
10851
- type: i0.Input,
10852
- args: [{
10853
- isSignal: true,
10854
- alias: "showValues",
10855
- required: false
10856
- }]
10857
- }],
10858
- unitSingular: [{
10859
- type: i0.Input,
10860
- args: [{
10861
- isSignal: true,
10862
- alias: "unitSingular",
10863
- required: false
10864
- }]
10865
- }],
10866
- unitPlural: [{
10867
- type: i0.Input,
10868
- args: [{
10869
- isSignal: true,
10870
- alias: "unitPlural",
10871
- required: false
10872
- }]
10873
- }],
10874
- canvas: [{
10875
- type: i0.ViewChild,
10876
- args: ["canvas", { isSignal: true }]
10877
- }]
10878
- }
10879
- });
10880
10687
  const KEY_STEP = 2;
10881
10688
  const KEY_STEP_BIG = 10;
10882
10689
  const clamp = (n) => Math.min(100, Math.max(0, Math.round(n)));
@@ -16717,6 +16524,8 @@ var SendEmailComponent = class SendEmailComponent {
16717
16524
  selector: "ui-button",
16718
16525
  inputs: [
16719
16526
  "variant",
16527
+ "routerLink",
16528
+ "queryParams",
16720
16529
  "color",
16721
16530
  "active",
16722
16531
  "size",
@@ -17937,6 +17746,8 @@ var SendTextComponent = class SendTextComponent {
17937
17746
  selector: "ui-button",
17938
17747
  inputs: [
17939
17748
  "variant",
17749
+ "routerLink",
17750
+ "queryParams",
17940
17751
  "color",
17941
17752
  "active",
17942
17753
  "size",
@@ -22970,6 +22781,8 @@ var QrCodeComponent = class QrCodeComponent {
22970
22781
  selector: "ui-button",
22971
22782
  inputs: [
22972
22783
  "variant",
22784
+ "routerLink",
22785
+ "queryParams",
22973
22786
  "color",
22974
22787
  "active",
22975
22788
  "size",
@@ -23238,6 +23051,8 @@ var PanelInfoListComponent = class PanelInfoListComponent {
23238
23051
  selector: "ui-button",
23239
23052
  inputs: [
23240
23053
  "variant",
23054
+ "routerLink",
23055
+ "queryParams",
23241
23056
  "color",
23242
23057
  "active",
23243
23058
  "size",
@@ -24989,6 +24804,7 @@ var DateRangePickerComponent = class DateRangePickerComponent {
24989
24804
  this.activePreset = input("ytd", ...ngDevMode ? [{ debugName: "activePreset" }] : /* istanbul ignore next */ []);
24990
24805
  this.showPresets = input(true, ...ngDevMode ? [{ debugName: "showPresets" }] : /* istanbul ignore next */ []);
24991
24806
  this.includeAllTime = input(false, ...ngDevMode ? [{ debugName: "includeAllTime" }] : /* istanbul ignore next */ []);
24807
+ this.ariaLabel = input("Date range", ...ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []);
24992
24808
  this.rangeChange = output();
24993
24809
  this.selectedPreset = linkedSignal(() => this.activePreset(), ...ngDevMode ? [{ debugName: "selectedPreset" }] : /* istanbul ignore next */ []);
24994
24810
  this.customStart = signal("", ...ngDevMode ? [{ debugName: "customStart" }] : /* istanbul ignore next */ []);
@@ -25061,6 +24877,13 @@ var DateRangePickerComponent = class DateRangePickerComponent {
25061
24877
  isSignal: true,
25062
24878
  isRequired: false,
25063
24879
  transformFunction: null
24880
+ },
24881
+ ariaLabel: {
24882
+ classPropertyName: "ariaLabel",
24883
+ publicName: "ariaLabel",
24884
+ isSignal: true,
24885
+ isRequired: false,
24886
+ transformFunction: null
25064
24887
  }
25065
24888
  },
25066
24889
  outputs: { rangeChange: "rangeChange" },
@@ -25068,7 +24891,7 @@ var DateRangePickerComponent = class DateRangePickerComponent {
25068
24891
  template: `
25069
24892
  <div class="date-range-picker">
25070
24893
  @if (showPresets()) {
25071
- <ui-pill-tabs [tabs]="presetTabs()" [activeKey]="selectedPreset()" (tabChange)="selectPreset($any($event))" />
24894
+ <ui-pill-tabs [tabs]="presetTabs()" [activeKey]="selectedPreset()" [ariaLabel]="ariaLabel()" (tabChange)="selectPreset($any($event))" />
25072
24895
  }
25073
24896
  @if (selectedPreset() === 'custom' || !showPresets()) {
25074
24897
  <div class="custom-range">
@@ -25139,6 +24962,8 @@ var DateRangePickerComponent = class DateRangePickerComponent {
25139
24962
  selector: "ui-button",
25140
24963
  inputs: [
25141
24964
  "variant",
24965
+ "routerLink",
24966
+ "queryParams",
25142
24967
  "color",
25143
24968
  "active",
25144
24969
  "size",
@@ -25179,7 +25004,7 @@ i0.ɵɵngDeclareClassMetadata({
25179
25004
  template: `
25180
25005
  <div class="date-range-picker">
25181
25006
  @if (showPresets()) {
25182
- <ui-pill-tabs [tabs]="presetTabs()" [activeKey]="selectedPreset()" (tabChange)="selectPreset($any($event))" />
25007
+ <ui-pill-tabs [tabs]="presetTabs()" [activeKey]="selectedPreset()" [ariaLabel]="ariaLabel()" (tabChange)="selectPreset($any($event))" />
25183
25008
  }
25184
25009
  @if (selectedPreset() === 'custom' || !showPresets()) {
25185
25010
  <div class="custom-range">
@@ -25219,6 +25044,14 @@ i0.ɵɵngDeclareClassMetadata({
25219
25044
  required: false
25220
25045
  }]
25221
25046
  }],
25047
+ ariaLabel: [{
25048
+ type: i0.Input,
25049
+ args: [{
25050
+ isSignal: true,
25051
+ alias: "ariaLabel",
25052
+ required: false
25053
+ }]
25054
+ }],
25222
25055
  rangeChange: [{
25223
25056
  type: i0.Output,
25224
25057
  args: ["rangeChange"]
@@ -27936,6 +27769,8 @@ var DetailCardComponent = class DetailCardComponent {
27936
27769
  selector: "ui-button",
27937
27770
  inputs: [
27938
27771
  "variant",
27772
+ "routerLink",
27773
+ "queryParams",
27939
27774
  "color",
27940
27775
  "active",
27941
27776
  "size",
@@ -28203,6 +28038,6 @@ i0.ɵɵngDeclareClassMetadata({
28203
28038
  }]
28204
28039
  }
28205
28040
  });
28206
- 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 };
28041
+ 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, 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 };
28207
28042
 
28208
28043
  //# sourceMappingURL=forgeroute-ui.mjs.map