@forgeroute/ui 0.4.74 → 0.4.76

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.
@@ -4703,6 +4703,8 @@ const EXTRA_ICONS = {
4703
4703
  "refresh": "M23 4v6h-6 M1 20v-6h6 M3.51 9a9 9 0 0 1 14.85-3.36L23 10 M1 14l4.64 4.36A9 9 0 0 0 20.49 15",
4704
4704
  "search": "M11 3a8 8 0 1 0 0 16 8 8 0 0 0 0-16z M21 21l-4.35-4.35",
4705
4705
  "cup": "M18 8h1a4 4 0 0 1 0 8h-1 M2 8h16v9a4 4 0 0 1-4 4H6a4 4 0 0 1-4-4V8z M6 1v3 M10 1v3 M14 1v3",
4706
+ "cash": "M3 6h18a1 1 0 0 1 1 1v10a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1z M12 9a3 3 0 1 0 0 6 3 3 0 0 0 0-6z M6 12h.01 M18 12h.01",
4707
+ "dollar": "M12 1v22 M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6",
4706
4708
  "wrench": "M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z"
4707
4709
  };
4708
4710
  const ICON_NAMES = Object.freeze(Object.keys(EXTRA_ICONS));
@@ -5130,6 +5132,52 @@ var TextInputComponent = class TextInputComponent {
5130
5132
  focus(options) {
5131
5133
  this._fieldEl()?.nativeElement.focus(options);
5132
5134
  }
5135
+ getSelection() {
5136
+ const el = this._fieldEl()?.nativeElement;
5137
+ if (!el) return null;
5138
+ try {
5139
+ if (el.selectionStart === null || el.selectionEnd === null) return null;
5140
+ return {
5141
+ start: el.selectionStart,
5142
+ end: el.selectionEnd
5143
+ };
5144
+ } catch {
5145
+ return null;
5146
+ }
5147
+ }
5148
+ setSelection(start, end = start) {
5149
+ const el = this._fieldEl()?.nativeElement;
5150
+ if (!el) return;
5151
+ const max = el.value.length;
5152
+ const from = Math.min(Math.max(0, start), max);
5153
+ const to = Math.min(Math.max(from, end), max);
5154
+ try {
5155
+ el.setSelectionRange(from, to);
5156
+ } catch {}
5157
+ }
5158
+ insertAtCaret(text) {
5159
+ const el = this._fieldEl()?.nativeElement;
5160
+ if (!el || el.disabled || el.readOnly || !text) return;
5161
+ const value = el.value;
5162
+ let from = value.length;
5163
+ let to = value.length;
5164
+ try {
5165
+ if (el.selectionStart !== null && el.selectionEnd !== null) {
5166
+ from = el.selectionStart;
5167
+ to = el.selectionEnd;
5168
+ }
5169
+ } catch {}
5170
+ const max = this.maxlength();
5171
+ const room = max === void 0 ? text.length : max - (value.length - (to - from));
5172
+ const insert = text.slice(0, Math.max(0, room));
5173
+ if (!insert) return;
5174
+ el.value = value.slice(0, from) + insert + value.slice(to);
5175
+ const caret = from + insert.length;
5176
+ try {
5177
+ el.setSelectionRange(caret, caret);
5178
+ } catch {}
5179
+ el.dispatchEvent(new Event("input", { bubbles: true }));
5180
+ }
5133
5181
  constructor() {
5134
5182
  this.label = input("", ...ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []);
5135
5183
  this.ariaLabel = input("", ...ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []);
@@ -7339,7 +7387,7 @@ i0.ɵɵngDeclareClassMetadata({
7339
7387
  }]
7340
7388
  }
7341
7389
  });
7342
- const MIN_VISIBLE_PERCENT = 2;
7390
+ const MIN_VISIBLE_PERCENT$1 = 2;
7343
7391
  var ProgressBarComponent = class ProgressBarComponent {
7344
7392
  constructor() {
7345
7393
  this.value = input(0, ...ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []);
@@ -7361,7 +7409,7 @@ var ProgressBarComponent = class ProgressBarComponent {
7361
7409
  }, ...ngDevMode ? [{ debugName: "clampedValue" }] : /* istanbul ignore next */ []);
7362
7410
  this.percent = computed(() => {
7363
7411
  if (this.safeMax() <= 0 || this.clampedValue() <= 0) return 0;
7364
- return Math.max(Math.round(this.clampedValue() / this.safeMax() * 100), MIN_VISIBLE_PERCENT);
7412
+ return Math.max(Math.round(this.clampedValue() / this.safeMax() * 100), MIN_VISIBLE_PERCENT$1);
7365
7413
  }, ...ngDevMode ? [{ debugName: "percent" }] : /* istanbul ignore next */ []);
7366
7414
  this.effectiveVariant = computed(() => {
7367
7415
  const fixed = this.variant();
@@ -8111,12 +8159,15 @@ var ToastService = class ToastService {
8111
8159
  info(msg, durationOrOptions = 3e3) {
8112
8160
  this._enter("info", msg, 3e3, durationOrOptions);
8113
8161
  }
8162
+ warning(msg, durationOrOptions = 4e3) {
8163
+ this._enter("warning", msg, 4e3, durationOrOptions);
8164
+ }
8114
8165
  error(msg, durationOrOptions = 4e3) {
8115
8166
  this._enter("error", msg, 4e3, durationOrOptions);
8116
8167
  }
8117
8168
  notify(msg, options = {}) {
8118
8169
  const type = options.type ?? "success";
8119
- this._enter(type, msg, type === "error" ? 4e3 : 3e3, options);
8170
+ this._enter(type, msg, type === "error" || type === "warning" ? 4e3 : 3e3, options);
8120
8171
  }
8121
8172
  dismiss() {
8122
8173
  this._finish();
@@ -8492,6 +8543,7 @@ var ToastComponent = class ToastComponent {
8492
8543
  [class.t-rich]="isRich()"
8493
8544
  [class.t-error]="toast.type() === 'error'"
8494
8545
  [class.t-info]="toast.type() === 'info'"
8546
+ [class.t-warning]="toast.type() === 'warning'"
8495
8547
  [class.t-adopted]="adopted()"
8496
8548
  [attr.role]="adopted() || persistent() ? null : (toast.type() === 'error' ? 'alert' : 'status')"
8497
8549
  [attr.aria-live]="adopted() || persistent() ? null : (toast.type() === 'error' ? 'assertive' : 'polite')"
@@ -8502,6 +8554,10 @@ var ToastComponent = class ToastComponent {
8502
8554
  <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true">
8503
8555
  <circle cx="12" cy="12" r="10"/><line x1="15" y1="9" x2="9" y2="15"/><line x1="9" y1="9" x2="15" y2="15"/>
8504
8556
  </svg>
8557
+ } @else if (toast.type() === 'warning') {
8558
+ <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true">
8559
+ <path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"/><line x1="12" y1="9" x2="12" y2="13"/><line x1="12" y1="17" x2="12.01" y2="17"/>
8560
+ </svg>
8505
8561
  } @else if (toast.type() === 'info') {
8506
8562
  <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true">
8507
8563
  <circle cx="12" cy="12" r="10"/><line x1="12" y1="16" x2="12" y2="12"/><line x1="12" y1="8" x2="12.01" y2="8"/>
@@ -8551,7 +8607,7 @@ var ToastComponent = class ToastComponent {
8551
8607
  </ng-template>
8552
8608
  `,
8553
8609
  isInline: true,
8554
- 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}.t-rich{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:start;column-gap:8px;row-gap:10px;min-width:min(320px,calc(100vw - 32px))}.t-rich>svg:first-child{margin-top:2px}.t-content{display:flex;flex-direction:column;gap:2px;min-width:0}.t-title{font-weight:700}.t-queue{grid-column:1 / -1;justify-self:end;font-size:.75rem;font-weight:600;padding:1px 8px;border-radius:999px;background:#ffffff38}.t-actions{grid-column:1 / -1;display:flex;flex-wrap:wrap;gap:8px}.t-action{min-height:32px;padding:6px 14px;border-radius:8px;font:inherit;font-size:.8125rem;font-weight:600;cursor:pointer;color:#fff;background:#ffffff2e;border:1px solid rgba(255,255,255,.6)}.t-action:hover:not(:disabled){background:#ffffff4d}.t-action:focus-visible{outline:2px solid #fff;outline-offset:2px}.t-action:disabled{opacity:.5;cursor:not-allowed}.t-action-primary{background:#fff;color:#0f172a;border-color:#fff}.t-action-primary:hover:not(:disabled){background:#f1f5f9}.t-action-danger{background:#7f1d1d;border-color:#ffffffb3}.t-action-danger:hover:not(:disabled){background:#991b1b}.t-countdown{grid-column:1 / -1;display:flex;flex-direction:column;gap:4px}.t-countdown-bar{height:4px;border-radius:2px;background:#ffffff47;overflow:hidden}.t-countdown-fill{height:100%;background:#fff;transition:width .2s linear}.t-countdown-label{font-size:.75rem;opacity:.85;font-variant-numeric:tabular-nums}@media(prefers-reduced-motion:reduce){.t-countdown-fill{transition:none}}@media(pointer:coarse),(max-width:480px){.t-action{min-height:44px}}@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"],
8610
+ 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-warning{background:#b45309}.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}.t-rich{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:start;column-gap:8px;row-gap:10px;min-width:min(320px,calc(100vw - 32px))}.t-rich>svg:first-child{margin-top:2px}.t-content{display:flex;flex-direction:column;gap:2px;min-width:0}.t-title{font-weight:700}.t-queue{grid-column:1 / -1;justify-self:end;font-size:.75rem;font-weight:600;padding:1px 8px;border-radius:999px;background:#ffffff38}.t-actions{grid-column:1 / -1;display:flex;flex-wrap:wrap;gap:8px}.t-action{min-height:32px;padding:6px 14px;border-radius:8px;font:inherit;font-size:.8125rem;font-weight:600;cursor:pointer;color:#fff;background:#ffffff2e;border:1px solid rgba(255,255,255,.6)}.t-action:hover:not(:disabled){background:#ffffff4d}.t-action:focus-visible{outline:2px solid #fff;outline-offset:2px}.t-action:disabled{opacity:.5;cursor:not-allowed}.t-action-primary{background:#fff;color:#0f172a;border-color:#fff}.t-action-primary:hover:not(:disabled){background:#f1f5f9}.t-action-danger{background:#7f1d1d;border-color:#ffffffb3}.t-action-danger:hover:not(:disabled){background:#991b1b}.t-countdown{grid-column:1 / -1;display:flex;flex-direction:column;gap:4px}.t-countdown-bar{height:4px;border-radius:2px;background:#ffffff47;overflow:hidden}.t-countdown-fill{height:100%;background:#fff;transition:width .2s linear}.t-countdown-label{font-size:.75rem;opacity:.85;font-variant-numeric:tabular-nums}@media(prefers-reduced-motion:reduce){.t-countdown-fill{transition:none}}@media(pointer:coarse),(max-width:480px){.t-action{min-height:44px}}@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"],
8555
8611
  dependencies: [{
8556
8612
  kind: "directive",
8557
8613
  type: NgTemplateOutlet,
@@ -8598,6 +8654,7 @@ i0.ɵɵngDeclareClassMetadata({
8598
8654
  [class.t-rich]="isRich()"
8599
8655
  [class.t-error]="toast.type() === 'error'"
8600
8656
  [class.t-info]="toast.type() === 'info'"
8657
+ [class.t-warning]="toast.type() === 'warning'"
8601
8658
  [class.t-adopted]="adopted()"
8602
8659
  [attr.role]="adopted() || persistent() ? null : (toast.type() === 'error' ? 'alert' : 'status')"
8603
8660
  [attr.aria-live]="adopted() || persistent() ? null : (toast.type() === 'error' ? 'assertive' : 'polite')"
@@ -8608,6 +8665,10 @@ i0.ɵɵngDeclareClassMetadata({
8608
8665
  <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true">
8609
8666
  <circle cx="12" cy="12" r="10"/><line x1="15" y1="9" x2="9" y2="15"/><line x1="9" y1="9" x2="15" y2="15"/>
8610
8667
  </svg>
8668
+ } @else if (toast.type() === 'warning') {
8669
+ <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true">
8670
+ <path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"/><line x1="12" y1="9" x2="12" y2="13"/><line x1="12" y1="17" x2="12.01" y2="17"/>
8671
+ </svg>
8611
8672
  } @else if (toast.type() === 'info') {
8612
8673
  <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true">
8613
8674
  <circle cx="12" cy="12" r="10"/><line x1="12" y1="16" x2="12" y2="12"/><line x1="12" y1="8" x2="12.01" y2="8"/>
@@ -8656,7 +8717,7 @@ i0.ɵɵngDeclareClassMetadata({
8656
8717
  }
8657
8718
  </ng-template>
8658
8719
  `,
8659
- 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}.t-rich{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:start;column-gap:8px;row-gap:10px;min-width:min(320px,calc(100vw - 32px))}.t-rich>svg:first-child{margin-top:2px}.t-content{display:flex;flex-direction:column;gap:2px;min-width:0}.t-title{font-weight:700}.t-queue{grid-column:1 / -1;justify-self:end;font-size:.75rem;font-weight:600;padding:1px 8px;border-radius:999px;background:#ffffff38}.t-actions{grid-column:1 / -1;display:flex;flex-wrap:wrap;gap:8px}.t-action{min-height:32px;padding:6px 14px;border-radius:8px;font:inherit;font-size:.8125rem;font-weight:600;cursor:pointer;color:#fff;background:#ffffff2e;border:1px solid rgba(255,255,255,.6)}.t-action:hover:not(:disabled){background:#ffffff4d}.t-action:focus-visible{outline:2px solid #fff;outline-offset:2px}.t-action:disabled{opacity:.5;cursor:not-allowed}.t-action-primary{background:#fff;color:#0f172a;border-color:#fff}.t-action-primary:hover:not(:disabled){background:#f1f5f9}.t-action-danger{background:#7f1d1d;border-color:#ffffffb3}.t-action-danger:hover:not(:disabled){background:#991b1b}.t-countdown{grid-column:1 / -1;display:flex;flex-direction:column;gap:4px}.t-countdown-bar{height:4px;border-radius:2px;background:#ffffff47;overflow:hidden}.t-countdown-fill{height:100%;background:#fff;transition:width .2s linear}.t-countdown-label{font-size:.75rem;opacity:.85;font-variant-numeric:tabular-nums}@media(prefers-reduced-motion:reduce){.t-countdown-fill{transition:none}}@media(pointer:coarse),(max-width:480px){.t-action{min-height:44px}}@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"]
8720
+ 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-warning{background:#b45309}.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}.t-rich{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:start;column-gap:8px;row-gap:10px;min-width:min(320px,calc(100vw - 32px))}.t-rich>svg:first-child{margin-top:2px}.t-content{display:flex;flex-direction:column;gap:2px;min-width:0}.t-title{font-weight:700}.t-queue{grid-column:1 / -1;justify-self:end;font-size:.75rem;font-weight:600;padding:1px 8px;border-radius:999px;background:#ffffff38}.t-actions{grid-column:1 / -1;display:flex;flex-wrap:wrap;gap:8px}.t-action{min-height:32px;padding:6px 14px;border-radius:8px;font:inherit;font-size:.8125rem;font-weight:600;cursor:pointer;color:#fff;background:#ffffff2e;border:1px solid rgba(255,255,255,.6)}.t-action:hover:not(:disabled){background:#ffffff4d}.t-action:focus-visible{outline:2px solid #fff;outline-offset:2px}.t-action:disabled{opacity:.5;cursor:not-allowed}.t-action-primary{background:#fff;color:#0f172a;border-color:#fff}.t-action-primary:hover:not(:disabled){background:#f1f5f9}.t-action-danger{background:#7f1d1d;border-color:#ffffffb3}.t-action-danger:hover:not(:disabled){background:#991b1b}.t-countdown{grid-column:1 / -1;display:flex;flex-direction:column;gap:4px}.t-countdown-bar{height:4px;border-radius:2px;background:#ffffff47;overflow:hidden}.t-countdown-fill{height:100%;background:#fff;transition:width .2s linear}.t-countdown-label{font-size:.75rem;opacity:.85;font-variant-numeric:tabular-nums}@media(prefers-reduced-motion:reduce){.t-countdown-fill{transition:none}}@media(pointer:coarse),(max-width:480px){.t-action{min-height:44px}}@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"]
8660
8721
  }]
8661
8722
  }],
8662
8723
  ctorParameters: () => [],
@@ -12030,6 +12091,23 @@ var DataTableComponent = class DataTableComponent {
12030
12091
  });
12031
12092
  return true;
12032
12093
  }
12094
+ _totalsParams() {
12095
+ const { sort: _s, direction: _d, ...rest } = this._exportParams();
12096
+ return rest;
12097
+ }
12098
+ _fetchTotals(keepShown = false) {
12099
+ this._totalsSub?.unsubscribe();
12100
+ const ep = this.totalsEndpoint();
12101
+ if (!ep) {
12102
+ this._totals.set(null);
12103
+ return;
12104
+ }
12105
+ if (!keepShown) this._totals.set(null);
12106
+ this._totalsSub = this.http.get(`${this.config.baseUrl}${ep}`, { params: tableQueryParams(this._totalsParams()) }).pipe(takeUntilDestroyed(this.destroyRef)).subscribe({
12107
+ next: (totals) => this._totals.set(totals && typeof totals === "object" ? totals : null),
12108
+ error: () => this._totals.set(null)
12109
+ });
12110
+ }
12033
12111
  _actionKeyLabel(key) {
12034
12112
  const words = key.replace(/([a-z0-9])([A-Z])/g, "$1 $2").split(/[\s_-]+/).filter(Boolean).join(" ").toLowerCase();
12035
12113
  return words.charAt(0).toUpperCase() + words.slice(1);
@@ -12092,6 +12170,9 @@ var DataTableComponent = class DataTableComponent {
12092
12170
  this._selectedIds.set(current);
12093
12171
  this.selectionChange.emit(new Set(current));
12094
12172
  }
12173
+ currentQuery() {
12174
+ return { ...this._exportParams() };
12175
+ }
12095
12176
  clearSelection() {
12096
12177
  this._selectedIds.set(/* @__PURE__ */ new Set());
12097
12178
  this._activeBulkType.set(null);
@@ -12547,6 +12628,8 @@ var DataTableComponent = class DataTableComponent {
12547
12628
  this.tableTitle = input("", ...ngDevMode ? [{ debugName: "tableTitle" }] : /* istanbul ignore next */ []);
12548
12629
  this._showHeader = computed(() => !!this.tableTitle() || this.showSearch() || this.showToolbar() || this._effectiveTabs().length > 0, ...ngDevMode ? [{ debugName: "_showHeader" }] : /* istanbul ignore next */ []);
12549
12630
  this.countsEndpoint = input("", ...ngDevMode ? [{ debugName: "countsEndpoint" }] : /* istanbul ignore next */ []);
12631
+ this.totalsEndpoint = input("", ...ngDevMode ? [{ debugName: "totalsEndpoint" }] : /* istanbul ignore next */ []);
12632
+ this.totalsLabel = input("Total", ...ngDevMode ? [{ debugName: "totalsLabel" }] : /* istanbul ignore next */ []);
12550
12633
  this.params = input(null, ...ngDevMode ? [{ debugName: "params" }] : /* istanbul ignore next */ []);
12551
12634
  this.tableButtons = input([], ...ngDevMode ? [{ debugName: "tableButtons" }] : /* istanbul ignore next */ []);
12552
12635
  this.filterCountsEndpoint = input("", ...ngDevMode ? [{ debugName: "filterCountsEndpoint" }] : /* istanbul ignore next */ []);
@@ -12698,6 +12781,28 @@ var DataTableComponent = class DataTableComponent {
12698
12781
  equal: (a, b) => JSON.stringify(a) === JSON.stringify(b)
12699
12782
  });
12700
12783
  this._searchFields = computed(() => this.visibleCols().filter((c) => c.searchable).map((c) => c.key).join(","), ...ngDevMode ? [{ debugName: "_searchFields" }] : /* istanbul ignore next */ []);
12784
+ this._totals = signal(null, ...ngDevMode ? [{ debugName: "_totals" }] : /* istanbul ignore next */ []);
12785
+ this._totalsSkipNext = false;
12786
+ this._footerVisible = computed(() => !!this.totalsEndpoint() && this._totals() !== null && this._hasLoaded() && !this._loading() && !this._error() && this._items().length > 0, ...ngDevMode ? [{ debugName: "_footerVisible" }] : /* istanbul ignore next */ []);
12787
+ this._footerCells = computed(() => {
12788
+ const totals = this._totals();
12789
+ const out = {};
12790
+ if (!totals) return out;
12791
+ for (const col of this.visibleCols()) {
12792
+ if (col.cellType === "actions" || !col.footerFn) continue;
12793
+ const v = col.footerFn(totals);
12794
+ if (v != null && v !== "") out[col.key] = String(v);
12795
+ }
12796
+ return out;
12797
+ }, ...ngDevMode ? [{ debugName: "_footerCells" }] : /* istanbul ignore next */ []);
12798
+ this._footerPhoneLines = computed(() => {
12799
+ const cells = this._footerCells();
12800
+ return this.visibleCols().filter((c) => cells[c.key] !== void 0).map((c) => ({
12801
+ key: c.key,
12802
+ label: c.label,
12803
+ value: cells[c.key]
12804
+ }));
12805
+ }, ...ngDevMode ? [{ debugName: "_footerPhoneLines" }] : /* istanbul ignore next */ []);
12701
12806
  this._exportParams = computed(() => {
12702
12807
  const params = { ...this._extraParams() };
12703
12808
  if (this._search()) {
@@ -12905,11 +13010,14 @@ var DataTableComponent = class DataTableComponent {
12905
13010
  untracked(() => this.resetToFirstPage());
12906
13011
  });
12907
13012
  this.triggerLoad$.pipe(switchMap(() => {
12908
- if (!this._silentNext) this._loading.set(true);
13013
+ const silentLoad = this._silentNext;
13014
+ if (!silentLoad) this._loading.set(true);
12909
13015
  this._silentNext = false;
12910
13016
  this._searchLoading.set(this._searchPending);
12911
13017
  this._searchPending = false;
12912
13018
  this._error.set(null);
13019
+ if (this._totalsSkipNext) this._totalsSkipNext = false;
13020
+ else this._fetchTotals(silentLoad);
12913
13021
  let params = tableQueryParams(this._extraParams()).set("page", this._page() - 1).set("size", this.pageSize());
12914
13022
  if (this._search()) {
12915
13023
  params = params.set("search", this._searchParam());
@@ -13030,10 +13138,12 @@ var DataTableComponent = class DataTableComponent {
13030
13138
  this._sortDir.set("asc");
13031
13139
  }
13032
13140
  this._page.set(1);
13141
+ this._totalsSkipNext = true;
13033
13142
  this.load();
13034
13143
  }
13035
13144
  onPageChange(p) {
13036
13145
  this._page.set(p);
13146
+ this._totalsSkipNext = true;
13037
13147
  this.load();
13038
13148
  }
13039
13149
  onTabChange(value) {
@@ -13214,7 +13324,7 @@ var DataTableComponent = class DataTableComponent {
13214
13324
  e.preventDefault();
13215
13325
  this.rowClick.emit(item);
13216
13326
  }
13217
- onInternalButtonClick(type) {
13327
+ async onInternalButtonClick(type) {
13218
13328
  if (type === "import") {
13219
13329
  this._ieRef()?.openImport();
13220
13330
  return;
@@ -13223,6 +13333,18 @@ var DataTableComponent = class DataTableComponent {
13223
13333
  this._ieRef()?.exportAll();
13224
13334
  return;
13225
13335
  }
13336
+ const confirm = this._effectiveButtons().find((b) => b.type === type)?.confirm;
13337
+ if (confirm) {
13338
+ const message = typeof confirm.message === "function" ? confirm.message() : confirm.message;
13339
+ if (!await this._confirmSvc.confirm({
13340
+ title: confirm.title,
13341
+ message,
13342
+ confirmLabel: confirm.confirmLabel,
13343
+ cancelLabel: confirm.cancelLabel,
13344
+ variant: confirm.variant,
13345
+ ...confirm.details?.length ? { details: confirm.details } : {}
13346
+ })) return;
13347
+ }
13226
13348
  this.tableButtonClick.emit(type);
13227
13349
  }
13228
13350
  onImported() {
@@ -13619,6 +13741,20 @@ var DataTableComponent = class DataTableComponent {
13619
13741
  isRequired: false,
13620
13742
  transformFunction: null
13621
13743
  },
13744
+ totalsEndpoint: {
13745
+ classPropertyName: "totalsEndpoint",
13746
+ publicName: "totalsEndpoint",
13747
+ isSignal: true,
13748
+ isRequired: false,
13749
+ transformFunction: null
13750
+ },
13751
+ totalsLabel: {
13752
+ classPropertyName: "totalsLabel",
13753
+ publicName: "totalsLabel",
13754
+ isSignal: true,
13755
+ isRequired: false,
13756
+ transformFunction: null
13757
+ },
13622
13758
  params: {
13623
13759
  classPropertyName: "params",
13624
13760
  publicName: "params",
@@ -14108,6 +14244,7 @@ var DataTableComponent = class DataTableComponent {
14108
14244
  [label]="tags[0].name"
14109
14245
  [variant]="tags[0].variant ?? null"
14110
14246
  [color]="tags[0].color ?? null" />
14247
+ @if (tags[0].colorName) {<span class="dt-sr-only">, {{ tags[0].colorName }}</span>}
14111
14248
  @if (tags.length > 1) {
14112
14249
  <span
14113
14250
  class="dt-tags-more"
@@ -14116,7 +14253,7 @@ var DataTableComponent = class DataTableComponent {
14116
14253
  (focus)="showTagTooltip($event, tags.slice(1))"
14117
14254
  (blur)="hideTagTooltip()"
14118
14255
  tabindex="0"
14119
- [attr.aria-label]="tags.slice(1).map(t => t.name).join(', ')">
14256
+ [attr.aria-label]="tags.slice(1).map(t => t.colorName ? t.name + ' (' + t.colorName + ')' : t.name).join(', ')">
14120
14257
  +{{ tags.length - 1 }}
14121
14258
  </span>
14122
14259
  }
@@ -14164,6 +14301,35 @@ var DataTableComponent = class DataTableComponent {
14164
14301
  }
14165
14302
  }
14166
14303
  </tbody>
14304
+ @if (_footerVisible()) {
14305
+ <tfoot data-testid="dt-footer">
14306
+ <tr>
14307
+ @if (_reorderOn()) { <td class="dt-td-grip"></td> }
14308
+ @if (_isSelectable()) { <td class="dt-td-cb"></td> }
14309
+ @for (col of visibleCols(); track col.key; let first = $first) {
14310
+ @if (first) {
14311
+ <th scope="row" class="dt-foot-label"
14312
+ [style.text-align]="col.align ?? (col.cellType === 'number' ? 'right' : 'left')"
14313
+ [style.width]="col.width ?? null"
14314
+ [style.min-width]="col.width ?? null"
14315
+ [style.max-width]="col.width ?? null">
14316
+ @if (_footerCells()[col.key]; as ft) {
14317
+ <span class="dt-sr-only">{{ totalsLabel() }}: </span>{{ ft }}
14318
+ } @else {
14319
+ {{ totalsLabel() }}
14320
+ }
14321
+ </th>
14322
+ } @else {
14323
+ <td class="dt-foot-cell"
14324
+ [style.text-align]="col.align ?? (col.cellType === 'number' ? 'right' : 'left')"
14325
+ [style.width]="col.width ?? null"
14326
+ [style.min-width]="col.width ?? null"
14327
+ [style.max-width]="col.width ?? null">{{ _footerCells()[col.key] || '' }}</td>
14328
+ }
14329
+ }
14330
+ </tr>
14331
+ </tfoot>
14332
+ }
14167
14333
  </table>
14168
14334
  </div>
14169
14335
  }
@@ -14328,6 +14494,7 @@ var DataTableComponent = class DataTableComponent {
14328
14494
  <div class="dt-card-tags">
14329
14495
  @for (tag of tagItems; track tag.name) {
14330
14496
  <ui-badge [label]="tag.name" [variant]="tag.variant ?? 'gray'" size="sm" />
14497
+ @if (tag.colorName) {<span class="dt-sr-only">, {{ tag.colorName }}</span>}
14331
14498
  }
14332
14499
  </div>
14333
14500
  }
@@ -14359,6 +14526,18 @@ var DataTableComponent = class DataTableComponent {
14359
14526
  }
14360
14527
 
14361
14528
  </div>
14529
+ @if (_footerVisible()) {
14530
+ <div class="dt-card dt-card-totals" role="group" [attr.aria-label]="totalsLabel()" data-testid="dt-footer-card">
14531
+ <div class="dt-card-details">
14532
+ @for (fc of _footerPhoneLines(); track fc.key) {
14533
+ <div class="dt-card-detail-row">
14534
+ <span class="dt-card-detail-label">{{ fc.label }}</span>
14535
+ <span class="dt-card-detail-value">{{ fc.value }}</span>
14536
+ </div>
14537
+ }
14538
+ </div>
14539
+ </div>
14540
+ }
14362
14541
  }
14363
14542
 
14364
14543
  @if (_reorderOn()) {
@@ -14427,7 +14606,7 @@ var DataTableComponent = class DataTableComponent {
14427
14606
  </div>
14428
14607
  `,
14429
14608
  isInline: true,
14430
- styles: [":host{display:flex;flex-direction:column;flex:1;min-height:0}.dt-host{display:flex;flex-direction:column;height:100%;min-height:0}.dt-header{display:flex;align-items:center;gap:12px;margin-bottom:16px;flex-wrap:wrap;justify-content:space-between;position:relative;z-index:10}.dt-header-left{display:flex;align-items:center;gap:10px;flex-wrap:wrap;flex:1;min-width:0}.dt-header-right{display:flex;align-items:center;gap:8px;flex-shrink:0;flex-wrap:wrap;justify-content:flex-end}.dt-title{margin:0;font-size:.8125rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:#64748b;overflow-wrap:anywhere}.dt-sk-shimmer{position:relative;overflow:hidden;background:#f1f5f9}.dt-sk-shimmer:after{content:\"\";position:absolute;inset:0;background:linear-gradient(90deg,transparent 25%,rgba(255,255,255,.65) 50%,transparent 75%);transform:translate(-100%);animation:dt-shimmer 1.4s ease-in-out infinite}@keyframes dt-shimmer{to{transform:translate(200%)}}.dt-sk-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:16px}.dt-sk-toolbar-left{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.dt-sk-toolbar-right{display:flex;align-items:center;gap:8px;flex-shrink:0}.dt-sk-search{display:flex;align-items:center;gap:10px;width:380px;height:36px;padding:0 12px;border:1px solid #e2e8f0;border-radius:6px;background:#f8fafc;box-sizing:border-box}.dt-sk-search-icon{width:16px;height:16px;border-radius:50%;flex-shrink:0}.dt-sk-search-text{flex:1;height:11px;border-radius:4px}.dt-sk-tab-strip{display:flex;gap:2px;padding:3px;background:#f1f5f9;border-radius:8px}.dt-sk-tab{height:28px;width:70px;border-radius:6px}.dt-sk-icon-btn{width:32px;height:32px;border-radius:6px}.dt-skeleton{border:1px solid #e2e8f0;border-radius:10px;overflow:hidden}.dt-sk-header{display:flex;gap:24px;padding:12px 16px;background:#f8fafc;border-bottom:1px solid #e2e8f0}.dt-sk-row{display:flex;gap:24px;padding:13px 16px;border-bottom:1px solid #f1f5f9}.dt-sk-row:last-child{border-bottom:none}.dt-sk-cell{flex:1;height:13px;border-radius:4px;position:relative;overflow:hidden;background:#f1f5f9}.dt-sk-cell:first-child{max-width:100px}.dt-sk-cell:after{content:\"\";position:absolute;inset:0;background:linear-gradient(90deg,transparent 25%,rgba(255,255,255,.65) 50%,transparent 75%);transform:translate(-100%);animation:dt-shimmer 1.4s ease-in-out infinite}.dt-sk-head{height:10px}.dt-table-wrap{flex:1;min-height:0;overflow:auto;border:1px solid #e2e8f0;border-radius:10px 10px 0 0}.dt-sk-reload-row td{padding:10px 14px;border-bottom:1px solid #f1f5f9}table{width:100%;border-collapse:collapse;font-size:.875rem}thead tr{background:#f8fafc;border-bottom:1px solid #e2e8f0}thead{position:sticky;top:0;z-index:2}th{padding:10px 14px;font-size:.75rem;font-weight:600;color:#64748b;text-transform:uppercase;letter-spacing:.04em;white-space:nowrap;border-right:1px solid #e2e8f0;text-align:center;background:#f8fafc}th:last-child{border-right:none}th.dt-th-sorted{background:#f1f5f9}th.dt-th-actions{width:48px}.dt-th-inner{display:flex;align-items:center;justify-content:center;gap:4px}.dt-sort-btn{display:inline-flex;align-items:center;gap:4px;background:none;border:none;cursor:pointer;font-size:inherit;font-weight:inherit;color:inherit;font-family:inherit;padding:0;text-transform:inherit;letter-spacing:inherit}.dt-sort-btn:hover{color:#1e293b}.dt-sort-btn:focus-visible{outline:2px solid #60a5fa;outline-offset:2px;border-radius:2px}@media(pointer:coarse){.dt-sort-btn{position:relative}.dt-sort-btn:after{content:\"\";position:absolute;left:-4px;right:-4px;top:50%;height:44px;transform:translateY(-50%)}}.dt-sort-icon{transition:transform .15s}.dt-sort-desc{transform:rotate(180deg)}.dt-sort-inactive{opacity:.4}tbody tr{border-bottom:1px solid #f1f5f9;background:#fff;transition:background .1s}tbody tr:last-child{border-bottom:none}tbody tr:hover{background:#f8fafc}.dt-row-clickable{cursor:pointer}.dt-row-clickable:focus-visible{outline:2px solid #3b82f6;outline-offset:-2px}td{padding:10px 14px;color:#334155;vertical-align:middle;white-space:nowrap;border-right:1px solid #f1f5f9}td:last-child{border-right:none}.dt-td-actions{text-align:center;padding:6px 8px}.dt-sticky-actions th.dt-th-actions,.dt-sticky-actions td.dt-td-actions{position:sticky;right:0;box-shadow:-1px 0 #e2e8f0}.dt-sticky-actions th.dt-th-actions{z-index:3;background:#f8fafc}.dt-sticky-actions td.dt-td-actions{z-index:1;background:#fff}.dt-sticky-actions td.dt-td-actions:focus-within,.dt-sticky-actions td.dt-td-actions:has(.mm-dropdown){z-index:2}.dt-sticky-actions tbody tr:hover td.dt-td-actions{background:#f8fafc}.dt-sticky-actions tbody tr.dt-row-selected td.dt-td-actions{background:#eff6ff}.dt-sticky-actions tbody tr.dt-row-selected:hover td.dt-td-actions{background:#dbeafe}.dt-td-width{overflow:hidden;text-overflow:ellipsis}.dt-img{display:inline-block;vertical-align:middle;object-fit:cover;border:1px solid #e2e8f0;background:#f1f5f9;flex-shrink:0}.dt-img-ph{display:inline-flex;align-items:center;justify-content:center;vertical-align:middle;color:#94a3b8;background:#f1f5f9;border:1px solid #e2e8f0;flex-shrink:0}.dt-img-ph svg{width:55%;height:55%}.dt-img-circle-md{width:40px;height:40px;border-radius:50%}.dt-img-circle-sm{width:28px;height:28px;border-radius:50%}.dt-img-rounded-md{width:48px;height:32px;border-radius:6px}.dt-img-rounded-sm{width:36px;height:24px;border-radius:5px}.dt-avatar-name{display:flex;align-items:center;gap:8px}.dt-name-text{color:#1e293b}.dt-overdue{color:#dc2626;font-weight:500}.dt-none{color:#64748b}.dt-link{position:relative;display:inline-block;max-width:100%;padding:1px 2px;vertical-align:bottom;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#2563eb;text-decoration:none;border-radius:3px;cursor:pointer}.dt-link:hover{text-decoration:underline;color:#1d4ed8}.dt-link:focus-visible{outline:2px solid #3b82f6;outline-offset:-2px;text-decoration:underline}.dt-card-detail-value .dt-link,.dt-card-name .dt-link{white-space:normal;overflow-wrap:anywhere}.dt-sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.dt-tags{display:flex;align-items:center;gap:4px}.dt-tags-more{font-size:.75rem;font-weight:600;color:#475569;background:#f1f5f9;border-radius:999px;padding:2px 7px;cursor:default;-webkit-user-select:none;user-select:none;border:1px solid #e2e8f0}.dt-tags-more:focus-visible{outline:2px solid #60a5fa;outline-offset:2px;border-radius:999px}.dt-tag-tooltip{position:fixed;z-index:9999;pointer-events:none;background:#1e293b;border-radius:10px;padding:8px 10px;display:flex;flex-direction:column;gap:5px;box-shadow:0 4px 6px #0000000f,0 10px 24px #00000024;transform:translate(-50%) translateY(-100%);animation:dt-tip-in .12s ease;max-width:220px}@keyframes dt-tip-in{0%{opacity:0;transform:translate(-50%) translateY(calc(-100% + 4px))}to{opacity:1;transform:translate(-50%) translateY(-100%)}}.dt-cell-star{margin-right:6px}.dt-actions-cell{display:flex;align-items:center;justify-content:center}.dt-bulk-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;align-self:flex-start;padding:10px 14px;margin-bottom:8px;background:#eff6ff;border:1px solid #bfdbfe;border-radius:8px}.dt-bulk-count{font-size:.875rem;font-weight:600;color:#1e40af;white-space:nowrap;flex-shrink:0}.dt-bulk-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;flex:1;min-width:0}.dt-bulk-actions ui-select{max-width:180px;min-width:120px}.dt-bulk-hint{font-size:.8125rem;line-height:1.35;color:#475569}.dt-card-cb{display:flex;align-items:center;padding:0 0 6px}.dt-card-selected{background:#eff6ff!important;border-color:#bfdbfe!important}.dt-th-cb{width:44px;padding:0 10px!important;text-align:center!important;border-right:1px solid #e2e8f0;background:#f8fafc}.dt-td-cb{width:44px;padding:0 10px!important;text-align:center!important;border-right:1px solid #f1f5f9}.dt-th-grip{width:36px;padding:0!important;border-right:1px solid #e2e8f0;background:#f8fafc}.dt-td-grip{width:36px;padding:0!important;text-align:center!important;border-right:1px solid #f1f5f9}.dt-grip{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:6px;color:#64748b;cursor:grab;-webkit-user-select:none;user-select:none;touch-action:none}.dt-grip:hover{background:#f1f5f9;color:#334155}.dt-grip:active{cursor:grabbing}.dt-grip:focus-visible{outline:2px solid #3b82f6;outline-offset:1px}.dt-grip-off{color:#cbd5e1;cursor:not-allowed}.dt-grip-off:hover{background:none;color:#cbd5e1}.dt-row-move{display:none}@media(pointer:coarse){.dt-grip{display:none}.dt-row-move{display:inline-flex;flex-direction:column;align-items:center}.dt-th-grip,.dt-td-grip{width:56px}}.dt-row-dragging{opacity:.45}.dt-row-over-before>td{box-shadow:inset 0 2px #3b82f6}.dt-row-over-after>td{box-shadow:inset 0 -2px #3b82f6}.dt-card-move{display:inline-flex;align-items:center;gap:2px;flex-shrink:0}@media(forced-colors:active){.dt-row-over-before>td{box-shadow:inset 0 2px 0 Highlight}.dt-row-over-after>td{box-shadow:inset 0 -2px 0 Highlight}.dt-grip:focus-visible{outline-color:Highlight}}.dt-row-selected{background:#eff6ff!important}.dt-row-selected:hover{background:#dbeafe!important}.dt-state-cell{padding:0!important;border:none!important;background:#fff!important}@media(max-width:1024px){th{padding:10px 12px}td{padding:11px 12px}.dt-sort-btn{padding:4px 0}.dt-td-actions{padding:6px}.dt-bulk-bar{align-self:stretch}}@media(max-width:820px){.dt-header-left{flex-basis:100%}.dt-header-right{flex-basis:100%;justify-content:flex-start}}@media(max-width:768px){th{padding:9px 10px;font-size:.8125rem}td{padding:10px;font-size:.8125rem}.dt-sk-search{width:100%}}@media(max-width:640px){.dt-header{flex-direction:column;flex-wrap:nowrap;flex-shrink:0;align-items:stretch}.dt-header-left,.dt-header-right{width:100%;flex-basis:auto}.dt-table-wrap{display:none}.dt-sk-search{width:100%}.dt-sk-toolbar{flex-direction:column;align-items:stretch;gap:8px}.dt-sk-toolbar-right{align-self:flex-end}.dt-bulk-bar{align-self:stretch;padding:10px 12px;row-gap:8px}.dt-bulk-count{flex:1 1 100%}.dt-bulk-actions{flex:1 1 auto;width:auto}.dt-bulk-hint{flex-basis:100%}.dt-bulk-actions ui-select{max-width:100%;flex:1}}.dt-confirm-msg{margin:0;font-size:.9375rem;color:#334155;line-height:1.5;overflow-wrap:anywhere;word-break:break-word;white-space:pre-line}.dt-confirm-details{margin:10px 0 0;padding-left:20px;font-size:.875rem;color:#64748b;line-height:1.5;overflow-wrap:anywhere;word-break:break-word}.dt-confirm-details li+li{margin-top:4px}ui-pagination{flex-shrink:0;--ui-pagination-bg: #f8fafc}.dt-phone-controls{display:flex;flex-direction:column;gap:8px;margin-bottom:8px;flex-shrink:0}.dt-phone-sort{display:flex;align-items:center;gap:8px}.dt-phone-sort-label{font-size:.8125rem;font-weight:600;color:#475569;flex-shrink:0}.dt-phone-sort-select{flex:1;min-width:0;min-height:44px;box-sizing:border-box;padding:0 36px 0 12px;font-family:inherit;font-size:1rem;color:#1e293b;border:1px solid #7c8ba1;border-radius:8px;-webkit-appearance:none;appearance:none;background:#fff url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8' fill='none' stroke='%2394a3b8' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M1 1.5l5 5 5-5'/%3E%3C/svg%3E\") no-repeat right 12px center}.dt-phone-filters{display:flex;flex-wrap:wrap;gap:8px}.dt-card-list{display:none;flex-direction:column;gap:8px;flex:1;min-height:0;overflow-y:auto}@media(max-width:640px){.dt-card-list{display:flex;padding-bottom:8px}}.dt-card{background:#fff;border:1px solid #e2e8f0;border-radius:10px;contain:layout style;padding:14px 16px;display:flex;flex-direction:column;gap:10px;transition:background .1s}.dt-card:has(.mm-dropdown){position:relative;z-index:1}.dt-card-clickable{cursor:pointer}.dt-card-clickable:active{background:#f8fafc}.dt-card-clickable:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.dt-card-header{display:flex;align-items:center;gap:10px}.dt-card-title{display:flex;align-items:center;gap:10px;flex:1;min-width:0}.dt-card-name{min-width:0;font-weight:600;color:#1e293b;font-size:.9375rem;overflow:hidden;text-overflow:ellipsis;overflow-wrap:anywhere;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;line-clamp:3}.dt-card-name-plain{flex:1}.dt-card-actions{margin-left:auto;flex-shrink:0}.dt-card-badges{display:flex;flex-wrap:wrap;gap:6px}.dt-card-tags{display:flex;flex-wrap:wrap;gap:4px}.dt-card-details{display:flex;flex-direction:column;gap:5px}.dt-card-detail-row{display:flex;justify-content:space-between;align-items:baseline;gap:8px;font-size:.8125rem}.dt-card-detail-label{color:#64748b;flex-shrink:0}.dt-card-detail-value{color:#334155;font-weight:500;text-align:right;min-width:0;overflow-wrap:anywhere;word-break:break-word}.dt-card-sk{gap:12px}.dt-card-sk-header{display:flex;align-items:center;gap:10px}.dt-card-sk-badges{display:flex;gap:6px}.dt-card-sk-rows{display:flex;flex-direction:column;gap:8px}@media(prefers-reduced-motion:reduce){.dt-sk-shimmer:after,.dt-sk-cell:after{animation:none;transform:none;opacity:0}.dt-tag-tooltip{animation:none}.dt-sort-icon{transition:none}}\n"],
14609
+ styles: [":host{display:flex;flex-direction:column;flex:1;min-height:0}.dt-host{display:flex;flex-direction:column;height:100%;min-height:0}.dt-header{display:flex;align-items:center;gap:12px;margin-bottom:16px;flex-wrap:wrap;justify-content:space-between;position:relative;z-index:10}.dt-header-left{display:flex;align-items:center;gap:10px;flex-wrap:wrap;flex:1;min-width:0}.dt-header-right{display:flex;align-items:center;gap:8px;flex-shrink:0;flex-wrap:wrap;justify-content:flex-end}.dt-title{margin:0;font-size:.8125rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:#64748b;overflow-wrap:anywhere}.dt-sk-shimmer{position:relative;overflow:hidden;background:#f1f5f9}.dt-sk-shimmer:after{content:\"\";position:absolute;inset:0;background:linear-gradient(90deg,transparent 25%,rgba(255,255,255,.65) 50%,transparent 75%);transform:translate(-100%);animation:dt-shimmer 1.4s ease-in-out infinite}@keyframes dt-shimmer{to{transform:translate(200%)}}.dt-sk-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:16px}.dt-sk-toolbar-left{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.dt-sk-toolbar-right{display:flex;align-items:center;gap:8px;flex-shrink:0}.dt-sk-search{display:flex;align-items:center;gap:10px;width:380px;height:36px;padding:0 12px;border:1px solid #e2e8f0;border-radius:6px;background:#f8fafc;box-sizing:border-box}.dt-sk-search-icon{width:16px;height:16px;border-radius:50%;flex-shrink:0}.dt-sk-search-text{flex:1;height:11px;border-radius:4px}.dt-sk-tab-strip{display:flex;gap:2px;padding:3px;background:#f1f5f9;border-radius:8px}.dt-sk-tab{height:28px;width:70px;border-radius:6px}.dt-sk-icon-btn{width:32px;height:32px;border-radius:6px}.dt-skeleton{border:1px solid #e2e8f0;border-radius:10px;overflow:hidden}.dt-sk-header{display:flex;gap:24px;padding:12px 16px;background:#f8fafc;border-bottom:1px solid #e2e8f0}.dt-sk-row{display:flex;gap:24px;padding:13px 16px;border-bottom:1px solid #f1f5f9}.dt-sk-row:last-child{border-bottom:none}.dt-sk-cell{flex:1;height:13px;border-radius:4px;position:relative;overflow:hidden;background:#f1f5f9}.dt-sk-cell:first-child{max-width:100px}.dt-sk-cell:after{content:\"\";position:absolute;inset:0;background:linear-gradient(90deg,transparent 25%,rgba(255,255,255,.65) 50%,transparent 75%);transform:translate(-100%);animation:dt-shimmer 1.4s ease-in-out infinite}.dt-sk-head{height:10px}.dt-table-wrap{flex:1;min-height:0;overflow:auto;border:1px solid #e2e8f0;border-radius:10px 10px 0 0}.dt-sk-reload-row td{padding:10px 14px;border-bottom:1px solid #f1f5f9}table{width:100%;border-collapse:collapse;font-size:.875rem}thead tr{background:#f8fafc;border-bottom:1px solid #e2e8f0}thead{position:sticky;top:0;z-index:2}th{padding:10px 14px;font-size:.75rem;font-weight:600;color:#64748b;text-transform:uppercase;letter-spacing:.04em;white-space:nowrap;border-right:1px solid #e2e8f0;text-align:center;background:#f8fafc}th:last-child{border-right:none}th.dt-th-sorted{background:#f1f5f9}th.dt-th-actions{width:48px}.dt-th-inner{display:flex;align-items:center;justify-content:center;gap:4px}.dt-sort-btn{display:inline-flex;align-items:center;gap:4px;background:none;border:none;cursor:pointer;font-size:inherit;font-weight:inherit;color:inherit;font-family:inherit;padding:0;text-transform:inherit;letter-spacing:inherit}.dt-sort-btn:hover{color:#1e293b}.dt-sort-btn:focus-visible{outline:2px solid #60a5fa;outline-offset:2px;border-radius:2px}@media(pointer:coarse){.dt-sort-btn{position:relative}.dt-sort-btn:after{content:\"\";position:absolute;left:-4px;right:-4px;top:50%;height:44px;transform:translateY(-50%)}}.dt-sort-icon{transition:transform .15s}.dt-sort-desc{transform:rotate(180deg)}.dt-sort-inactive{opacity:.4}tbody tr{border-bottom:1px solid #f1f5f9;background:#fff;transition:background .1s}tbody tr:last-child{border-bottom:none}tbody tr:hover{background:#f8fafc}tfoot tr{background:#f8fafc;border-top:2px solid #e2e8f0}tfoot th.dt-foot-label{padding:10px 14px;font-size:.875rem;font-weight:700;color:#1e293b;text-transform:none;letter-spacing:normal;background:#f8fafc;border-right:1px solid #f1f5f9;white-space:nowrap}tfoot td{padding:10px 14px;font-weight:700;color:#1e293b;background:#f8fafc}.dt-card-totals{background:#f8fafc;font-weight:600}.dt-row-clickable{cursor:pointer}.dt-row-clickable:focus-visible{outline:2px solid #3b82f6;outline-offset:-2px}td{padding:10px 14px;color:#334155;vertical-align:middle;white-space:nowrap;border-right:1px solid #f1f5f9}td:last-child{border-right:none}.dt-td-actions{text-align:center;padding:6px 8px}.dt-sticky-actions th.dt-th-actions,.dt-sticky-actions td.dt-td-actions{position:sticky;right:0;box-shadow:-1px 0 #e2e8f0}.dt-sticky-actions th.dt-th-actions{z-index:3;background:#f8fafc}.dt-sticky-actions td.dt-td-actions{z-index:1;background:#fff}.dt-sticky-actions td.dt-td-actions:focus-within,.dt-sticky-actions td.dt-td-actions:has(.mm-dropdown){z-index:2}.dt-sticky-actions tbody tr:hover td.dt-td-actions{background:#f8fafc}.dt-sticky-actions tbody tr.dt-row-selected td.dt-td-actions{background:#eff6ff}.dt-sticky-actions tbody tr.dt-row-selected:hover td.dt-td-actions{background:#dbeafe}.dt-td-width{overflow:hidden;text-overflow:ellipsis}.dt-img{display:inline-block;vertical-align:middle;object-fit:cover;border:1px solid #e2e8f0;background:#f1f5f9;flex-shrink:0}.dt-img-ph{display:inline-flex;align-items:center;justify-content:center;vertical-align:middle;color:#94a3b8;background:#f1f5f9;border:1px solid #e2e8f0;flex-shrink:0}.dt-img-ph svg{width:55%;height:55%}.dt-img-circle-md{width:40px;height:40px;border-radius:50%}.dt-img-circle-sm{width:28px;height:28px;border-radius:50%}.dt-img-rounded-md{width:48px;height:32px;border-radius:6px}.dt-img-rounded-sm{width:36px;height:24px;border-radius:5px}.dt-avatar-name{display:flex;align-items:center;gap:8px}.dt-name-text{color:#1e293b}.dt-overdue{color:#dc2626;font-weight:500}.dt-none{color:#64748b}.dt-link{position:relative;display:inline-block;max-width:100%;padding:1px 2px;vertical-align:bottom;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#2563eb;text-decoration:none;border-radius:3px;cursor:pointer}.dt-link:hover{text-decoration:underline;color:#1d4ed8}.dt-link:focus-visible{outline:2px solid #3b82f6;outline-offset:-2px;text-decoration:underline}.dt-card-detail-value .dt-link,.dt-card-name .dt-link{white-space:normal;overflow-wrap:anywhere}.dt-sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.dt-tags{display:flex;align-items:center;gap:4px}.dt-tags-more{font-size:.75rem;font-weight:600;color:#475569;background:#f1f5f9;border-radius:999px;padding:2px 7px;cursor:default;-webkit-user-select:none;user-select:none;border:1px solid #e2e8f0}.dt-tags-more:focus-visible{outline:2px solid #60a5fa;outline-offset:2px;border-radius:999px}.dt-tag-tooltip{position:fixed;z-index:9999;pointer-events:none;background:#1e293b;border-radius:10px;padding:8px 10px;display:flex;flex-direction:column;gap:5px;box-shadow:0 4px 6px #0000000f,0 10px 24px #00000024;transform:translate(-50%) translateY(-100%);animation:dt-tip-in .12s ease;max-width:220px}@keyframes dt-tip-in{0%{opacity:0;transform:translate(-50%) translateY(calc(-100% + 4px))}to{opacity:1;transform:translate(-50%) translateY(-100%)}}.dt-cell-star{margin-right:6px}.dt-actions-cell{display:flex;align-items:center;justify-content:center}.dt-bulk-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;align-self:flex-start;padding:10px 14px;margin-bottom:8px;background:#eff6ff;border:1px solid #bfdbfe;border-radius:8px}.dt-bulk-count{font-size:.875rem;font-weight:600;color:#1e40af;white-space:nowrap;flex-shrink:0}.dt-bulk-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;flex:1;min-width:0}.dt-bulk-actions ui-select{max-width:180px;min-width:120px}.dt-bulk-hint{font-size:.8125rem;line-height:1.35;color:#475569}.dt-card-cb{display:flex;align-items:center;padding:0 0 6px}.dt-card-selected{background:#eff6ff!important;border-color:#bfdbfe!important}.dt-th-cb{width:44px;padding:0 10px!important;text-align:center!important;border-right:1px solid #e2e8f0;background:#f8fafc}.dt-td-cb{width:44px;padding:0 10px!important;text-align:center!important;border-right:1px solid #f1f5f9}.dt-th-grip{width:36px;padding:0!important;border-right:1px solid #e2e8f0;background:#f8fafc}.dt-td-grip{width:36px;padding:0!important;text-align:center!important;border-right:1px solid #f1f5f9}.dt-grip{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:6px;color:#64748b;cursor:grab;-webkit-user-select:none;user-select:none;touch-action:none}.dt-grip:hover{background:#f1f5f9;color:#334155}.dt-grip:active{cursor:grabbing}.dt-grip:focus-visible{outline:2px solid #3b82f6;outline-offset:1px}.dt-grip-off{color:#cbd5e1;cursor:not-allowed}.dt-grip-off:hover{background:none;color:#cbd5e1}.dt-row-move{display:none}@media(pointer:coarse){.dt-grip{display:none}.dt-row-move{display:inline-flex;flex-direction:column;align-items:center}.dt-th-grip,.dt-td-grip{width:56px}}.dt-row-dragging{opacity:.45}.dt-row-over-before>td{box-shadow:inset 0 2px #3b82f6}.dt-row-over-after>td{box-shadow:inset 0 -2px #3b82f6}.dt-card-move{display:inline-flex;align-items:center;gap:2px;flex-shrink:0}@media(forced-colors:active){.dt-row-over-before>td{box-shadow:inset 0 2px 0 Highlight}.dt-row-over-after>td{box-shadow:inset 0 -2px 0 Highlight}.dt-grip:focus-visible{outline-color:Highlight}}.dt-row-selected{background:#eff6ff!important}.dt-row-selected:hover{background:#dbeafe!important}.dt-state-cell{padding:0!important;border:none!important;background:#fff!important}@media(max-width:1024px){th{padding:10px 12px}td{padding:11px 12px}.dt-sort-btn{padding:4px 0}.dt-td-actions{padding:6px}.dt-bulk-bar{align-self:stretch}}@media(max-width:820px){.dt-header-left{flex-basis:100%}.dt-header-right{flex-basis:100%;justify-content:flex-start}}@media(max-width:768px){th{padding:9px 10px;font-size:.8125rem}td{padding:10px;font-size:.8125rem}.dt-sk-search{width:100%}}@media(max-width:640px){.dt-header{flex-direction:column;flex-wrap:nowrap;flex-shrink:0;align-items:stretch}.dt-header-left,.dt-header-right{width:100%;flex-basis:auto}.dt-table-wrap{display:none}.dt-sk-search{width:100%}.dt-sk-toolbar{flex-direction:column;align-items:stretch;gap:8px}.dt-sk-toolbar-right{align-self:flex-end}.dt-bulk-bar{align-self:stretch;padding:10px 12px;row-gap:8px}.dt-bulk-count{flex:1 1 100%}.dt-bulk-actions{flex:1 1 auto;width:auto}.dt-bulk-hint{flex-basis:100%}.dt-bulk-actions ui-select{max-width:100%;flex:1}}.dt-confirm-msg{margin:0;font-size:.9375rem;color:#334155;line-height:1.5;overflow-wrap:anywhere;word-break:break-word;white-space:pre-line}.dt-confirm-details{margin:10px 0 0;padding-left:20px;font-size:.875rem;color:#64748b;line-height:1.5;overflow-wrap:anywhere;word-break:break-word}.dt-confirm-details li+li{margin-top:4px}ui-pagination{flex-shrink:0;--ui-pagination-bg: #f8fafc}.dt-phone-controls{display:flex;flex-direction:column;gap:8px;margin-bottom:8px;flex-shrink:0}.dt-phone-sort{display:flex;align-items:center;gap:8px}.dt-phone-sort-label{font-size:.8125rem;font-weight:600;color:#475569;flex-shrink:0}.dt-phone-sort-select{flex:1;min-width:0;min-height:44px;box-sizing:border-box;padding:0 36px 0 12px;font-family:inherit;font-size:1rem;color:#1e293b;border:1px solid #7c8ba1;border-radius:8px;-webkit-appearance:none;appearance:none;background:#fff url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8' fill='none' stroke='%2394a3b8' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M1 1.5l5 5 5-5'/%3E%3C/svg%3E\") no-repeat right 12px center}.dt-phone-filters{display:flex;flex-wrap:wrap;gap:8px}.dt-card-list{display:none;flex-direction:column;gap:8px;flex:1;min-height:0;overflow-y:auto}@media(max-width:640px){.dt-card-list{display:flex;padding-bottom:8px}}.dt-card{background:#fff;border:1px solid #e2e8f0;border-radius:10px;contain:layout style;padding:14px 16px;display:flex;flex-direction:column;gap:10px;transition:background .1s}.dt-card:has(.mm-dropdown){position:relative;z-index:1}.dt-card-clickable{cursor:pointer}.dt-card-clickable:active{background:#f8fafc}.dt-card-clickable:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.dt-card-header{display:flex;align-items:center;gap:10px}.dt-card-title{display:flex;align-items:center;gap:10px;flex:1;min-width:0}.dt-card-name{min-width:0;font-weight:600;color:#1e293b;font-size:.9375rem;overflow:hidden;text-overflow:ellipsis;overflow-wrap:anywhere;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;line-clamp:3}.dt-card-name-plain{flex:1}.dt-card-actions{margin-left:auto;flex-shrink:0}.dt-card-badges{display:flex;flex-wrap:wrap;gap:6px}.dt-card-tags{display:flex;flex-wrap:wrap;gap:4px}.dt-card-details{display:flex;flex-direction:column;gap:5px}.dt-card-detail-row{display:flex;justify-content:space-between;align-items:baseline;gap:8px;font-size:.8125rem}.dt-card-detail-label{color:#64748b;flex-shrink:0}.dt-card-detail-value{color:#334155;font-weight:500;text-align:right;min-width:0;overflow-wrap:anywhere;word-break:break-word}.dt-card-sk{gap:12px}.dt-card-sk-header{display:flex;align-items:center;gap:10px}.dt-card-sk-badges{display:flex;gap:6px}.dt-card-sk-rows{display:flex;flex-direction:column;gap:8px}@media(prefers-reduced-motion:reduce){.dt-sk-shimmer:after,.dt-sk-cell:after{animation:none;transform:none;opacity:0}.dt-tag-tooltip{animation:none}.dt-sort-icon{transition:none}}\n"],
14431
14610
  dependencies: [
14432
14611
  {
14433
14612
  kind: "directive",
@@ -15203,6 +15382,7 @@ i0.ɵɵngDeclareClassMetadata({
15203
15382
  [label]="tags[0].name"
15204
15383
  [variant]="tags[0].variant ?? null"
15205
15384
  [color]="tags[0].color ?? null" />
15385
+ @if (tags[0].colorName) {<span class="dt-sr-only">, {{ tags[0].colorName }}</span>}
15206
15386
  @if (tags.length > 1) {
15207
15387
  <span
15208
15388
  class="dt-tags-more"
@@ -15211,7 +15391,7 @@ i0.ɵɵngDeclareClassMetadata({
15211
15391
  (focus)="showTagTooltip($event, tags.slice(1))"
15212
15392
  (blur)="hideTagTooltip()"
15213
15393
  tabindex="0"
15214
- [attr.aria-label]="tags.slice(1).map(t => t.name).join(', ')">
15394
+ [attr.aria-label]="tags.slice(1).map(t => t.colorName ? t.name + ' (' + t.colorName + ')' : t.name).join(', ')">
15215
15395
  +{{ tags.length - 1 }}
15216
15396
  </span>
15217
15397
  }
@@ -15259,6 +15439,35 @@ i0.ɵɵngDeclareClassMetadata({
15259
15439
  }
15260
15440
  }
15261
15441
  </tbody>
15442
+ @if (_footerVisible()) {
15443
+ <tfoot data-testid="dt-footer">
15444
+ <tr>
15445
+ @if (_reorderOn()) { <td class="dt-td-grip"></td> }
15446
+ @if (_isSelectable()) { <td class="dt-td-cb"></td> }
15447
+ @for (col of visibleCols(); track col.key; let first = $first) {
15448
+ @if (first) {
15449
+ <th scope="row" class="dt-foot-label"
15450
+ [style.text-align]="col.align ?? (col.cellType === 'number' ? 'right' : 'left')"
15451
+ [style.width]="col.width ?? null"
15452
+ [style.min-width]="col.width ?? null"
15453
+ [style.max-width]="col.width ?? null">
15454
+ @if (_footerCells()[col.key]; as ft) {
15455
+ <span class="dt-sr-only">{{ totalsLabel() }}: </span>{{ ft }}
15456
+ } @else {
15457
+ {{ totalsLabel() }}
15458
+ }
15459
+ </th>
15460
+ } @else {
15461
+ <td class="dt-foot-cell"
15462
+ [style.text-align]="col.align ?? (col.cellType === 'number' ? 'right' : 'left')"
15463
+ [style.width]="col.width ?? null"
15464
+ [style.min-width]="col.width ?? null"
15465
+ [style.max-width]="col.width ?? null">{{ _footerCells()[col.key] || '' }}</td>
15466
+ }
15467
+ }
15468
+ </tr>
15469
+ </tfoot>
15470
+ }
15262
15471
  </table>
15263
15472
  </div>
15264
15473
  }
@@ -15423,6 +15632,7 @@ i0.ɵɵngDeclareClassMetadata({
15423
15632
  <div class="dt-card-tags">
15424
15633
  @for (tag of tagItems; track tag.name) {
15425
15634
  <ui-badge [label]="tag.name" [variant]="tag.variant ?? 'gray'" size="sm" />
15635
+ @if (tag.colorName) {<span class="dt-sr-only">, {{ tag.colorName }}</span>}
15426
15636
  }
15427
15637
  </div>
15428
15638
  }
@@ -15454,6 +15664,18 @@ i0.ɵɵngDeclareClassMetadata({
15454
15664
  }
15455
15665
 
15456
15666
  </div>
15667
+ @if (_footerVisible()) {
15668
+ <div class="dt-card dt-card-totals" role="group" [attr.aria-label]="totalsLabel()" data-testid="dt-footer-card">
15669
+ <div class="dt-card-details">
15670
+ @for (fc of _footerPhoneLines(); track fc.key) {
15671
+ <div class="dt-card-detail-row">
15672
+ <span class="dt-card-detail-label">{{ fc.label }}</span>
15673
+ <span class="dt-card-detail-value">{{ fc.value }}</span>
15674
+ </div>
15675
+ }
15676
+ </div>
15677
+ </div>
15678
+ }
15457
15679
  }
15458
15680
 
15459
15681
  @if (_reorderOn()) {
@@ -15521,7 +15743,7 @@ i0.ɵɵngDeclareClassMetadata({
15521
15743
  }
15522
15744
  </div>
15523
15745
  `,
15524
- styles: [":host{display:flex;flex-direction:column;flex:1;min-height:0}.dt-host{display:flex;flex-direction:column;height:100%;min-height:0}.dt-header{display:flex;align-items:center;gap:12px;margin-bottom:16px;flex-wrap:wrap;justify-content:space-between;position:relative;z-index:10}.dt-header-left{display:flex;align-items:center;gap:10px;flex-wrap:wrap;flex:1;min-width:0}.dt-header-right{display:flex;align-items:center;gap:8px;flex-shrink:0;flex-wrap:wrap;justify-content:flex-end}.dt-title{margin:0;font-size:.8125rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:#64748b;overflow-wrap:anywhere}.dt-sk-shimmer{position:relative;overflow:hidden;background:#f1f5f9}.dt-sk-shimmer:after{content:\"\";position:absolute;inset:0;background:linear-gradient(90deg,transparent 25%,rgba(255,255,255,.65) 50%,transparent 75%);transform:translate(-100%);animation:dt-shimmer 1.4s ease-in-out infinite}@keyframes dt-shimmer{to{transform:translate(200%)}}.dt-sk-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:16px}.dt-sk-toolbar-left{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.dt-sk-toolbar-right{display:flex;align-items:center;gap:8px;flex-shrink:0}.dt-sk-search{display:flex;align-items:center;gap:10px;width:380px;height:36px;padding:0 12px;border:1px solid #e2e8f0;border-radius:6px;background:#f8fafc;box-sizing:border-box}.dt-sk-search-icon{width:16px;height:16px;border-radius:50%;flex-shrink:0}.dt-sk-search-text{flex:1;height:11px;border-radius:4px}.dt-sk-tab-strip{display:flex;gap:2px;padding:3px;background:#f1f5f9;border-radius:8px}.dt-sk-tab{height:28px;width:70px;border-radius:6px}.dt-sk-icon-btn{width:32px;height:32px;border-radius:6px}.dt-skeleton{border:1px solid #e2e8f0;border-radius:10px;overflow:hidden}.dt-sk-header{display:flex;gap:24px;padding:12px 16px;background:#f8fafc;border-bottom:1px solid #e2e8f0}.dt-sk-row{display:flex;gap:24px;padding:13px 16px;border-bottom:1px solid #f1f5f9}.dt-sk-row:last-child{border-bottom:none}.dt-sk-cell{flex:1;height:13px;border-radius:4px;position:relative;overflow:hidden;background:#f1f5f9}.dt-sk-cell:first-child{max-width:100px}.dt-sk-cell:after{content:\"\";position:absolute;inset:0;background:linear-gradient(90deg,transparent 25%,rgba(255,255,255,.65) 50%,transparent 75%);transform:translate(-100%);animation:dt-shimmer 1.4s ease-in-out infinite}.dt-sk-head{height:10px}.dt-table-wrap{flex:1;min-height:0;overflow:auto;border:1px solid #e2e8f0;border-radius:10px 10px 0 0}.dt-sk-reload-row td{padding:10px 14px;border-bottom:1px solid #f1f5f9}table{width:100%;border-collapse:collapse;font-size:.875rem}thead tr{background:#f8fafc;border-bottom:1px solid #e2e8f0}thead{position:sticky;top:0;z-index:2}th{padding:10px 14px;font-size:.75rem;font-weight:600;color:#64748b;text-transform:uppercase;letter-spacing:.04em;white-space:nowrap;border-right:1px solid #e2e8f0;text-align:center;background:#f8fafc}th:last-child{border-right:none}th.dt-th-sorted{background:#f1f5f9}th.dt-th-actions{width:48px}.dt-th-inner{display:flex;align-items:center;justify-content:center;gap:4px}.dt-sort-btn{display:inline-flex;align-items:center;gap:4px;background:none;border:none;cursor:pointer;font-size:inherit;font-weight:inherit;color:inherit;font-family:inherit;padding:0;text-transform:inherit;letter-spacing:inherit}.dt-sort-btn:hover{color:#1e293b}.dt-sort-btn:focus-visible{outline:2px solid #60a5fa;outline-offset:2px;border-radius:2px}@media(pointer:coarse){.dt-sort-btn{position:relative}.dt-sort-btn:after{content:\"\";position:absolute;left:-4px;right:-4px;top:50%;height:44px;transform:translateY(-50%)}}.dt-sort-icon{transition:transform .15s}.dt-sort-desc{transform:rotate(180deg)}.dt-sort-inactive{opacity:.4}tbody tr{border-bottom:1px solid #f1f5f9;background:#fff;transition:background .1s}tbody tr:last-child{border-bottom:none}tbody tr:hover{background:#f8fafc}.dt-row-clickable{cursor:pointer}.dt-row-clickable:focus-visible{outline:2px solid #3b82f6;outline-offset:-2px}td{padding:10px 14px;color:#334155;vertical-align:middle;white-space:nowrap;border-right:1px solid #f1f5f9}td:last-child{border-right:none}.dt-td-actions{text-align:center;padding:6px 8px}.dt-sticky-actions th.dt-th-actions,.dt-sticky-actions td.dt-td-actions{position:sticky;right:0;box-shadow:-1px 0 #e2e8f0}.dt-sticky-actions th.dt-th-actions{z-index:3;background:#f8fafc}.dt-sticky-actions td.dt-td-actions{z-index:1;background:#fff}.dt-sticky-actions td.dt-td-actions:focus-within,.dt-sticky-actions td.dt-td-actions:has(.mm-dropdown){z-index:2}.dt-sticky-actions tbody tr:hover td.dt-td-actions{background:#f8fafc}.dt-sticky-actions tbody tr.dt-row-selected td.dt-td-actions{background:#eff6ff}.dt-sticky-actions tbody tr.dt-row-selected:hover td.dt-td-actions{background:#dbeafe}.dt-td-width{overflow:hidden;text-overflow:ellipsis}.dt-img{display:inline-block;vertical-align:middle;object-fit:cover;border:1px solid #e2e8f0;background:#f1f5f9;flex-shrink:0}.dt-img-ph{display:inline-flex;align-items:center;justify-content:center;vertical-align:middle;color:#94a3b8;background:#f1f5f9;border:1px solid #e2e8f0;flex-shrink:0}.dt-img-ph svg{width:55%;height:55%}.dt-img-circle-md{width:40px;height:40px;border-radius:50%}.dt-img-circle-sm{width:28px;height:28px;border-radius:50%}.dt-img-rounded-md{width:48px;height:32px;border-radius:6px}.dt-img-rounded-sm{width:36px;height:24px;border-radius:5px}.dt-avatar-name{display:flex;align-items:center;gap:8px}.dt-name-text{color:#1e293b}.dt-overdue{color:#dc2626;font-weight:500}.dt-none{color:#64748b}.dt-link{position:relative;display:inline-block;max-width:100%;padding:1px 2px;vertical-align:bottom;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#2563eb;text-decoration:none;border-radius:3px;cursor:pointer}.dt-link:hover{text-decoration:underline;color:#1d4ed8}.dt-link:focus-visible{outline:2px solid #3b82f6;outline-offset:-2px;text-decoration:underline}.dt-card-detail-value .dt-link,.dt-card-name .dt-link{white-space:normal;overflow-wrap:anywhere}.dt-sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.dt-tags{display:flex;align-items:center;gap:4px}.dt-tags-more{font-size:.75rem;font-weight:600;color:#475569;background:#f1f5f9;border-radius:999px;padding:2px 7px;cursor:default;-webkit-user-select:none;user-select:none;border:1px solid #e2e8f0}.dt-tags-more:focus-visible{outline:2px solid #60a5fa;outline-offset:2px;border-radius:999px}.dt-tag-tooltip{position:fixed;z-index:9999;pointer-events:none;background:#1e293b;border-radius:10px;padding:8px 10px;display:flex;flex-direction:column;gap:5px;box-shadow:0 4px 6px #0000000f,0 10px 24px #00000024;transform:translate(-50%) translateY(-100%);animation:dt-tip-in .12s ease;max-width:220px}@keyframes dt-tip-in{0%{opacity:0;transform:translate(-50%) translateY(calc(-100% + 4px))}to{opacity:1;transform:translate(-50%) translateY(-100%)}}.dt-cell-star{margin-right:6px}.dt-actions-cell{display:flex;align-items:center;justify-content:center}.dt-bulk-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;align-self:flex-start;padding:10px 14px;margin-bottom:8px;background:#eff6ff;border:1px solid #bfdbfe;border-radius:8px}.dt-bulk-count{font-size:.875rem;font-weight:600;color:#1e40af;white-space:nowrap;flex-shrink:0}.dt-bulk-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;flex:1;min-width:0}.dt-bulk-actions ui-select{max-width:180px;min-width:120px}.dt-bulk-hint{font-size:.8125rem;line-height:1.35;color:#475569}.dt-card-cb{display:flex;align-items:center;padding:0 0 6px}.dt-card-selected{background:#eff6ff!important;border-color:#bfdbfe!important}.dt-th-cb{width:44px;padding:0 10px!important;text-align:center!important;border-right:1px solid #e2e8f0;background:#f8fafc}.dt-td-cb{width:44px;padding:0 10px!important;text-align:center!important;border-right:1px solid #f1f5f9}.dt-th-grip{width:36px;padding:0!important;border-right:1px solid #e2e8f0;background:#f8fafc}.dt-td-grip{width:36px;padding:0!important;text-align:center!important;border-right:1px solid #f1f5f9}.dt-grip{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:6px;color:#64748b;cursor:grab;-webkit-user-select:none;user-select:none;touch-action:none}.dt-grip:hover{background:#f1f5f9;color:#334155}.dt-grip:active{cursor:grabbing}.dt-grip:focus-visible{outline:2px solid #3b82f6;outline-offset:1px}.dt-grip-off{color:#cbd5e1;cursor:not-allowed}.dt-grip-off:hover{background:none;color:#cbd5e1}.dt-row-move{display:none}@media(pointer:coarse){.dt-grip{display:none}.dt-row-move{display:inline-flex;flex-direction:column;align-items:center}.dt-th-grip,.dt-td-grip{width:56px}}.dt-row-dragging{opacity:.45}.dt-row-over-before>td{box-shadow:inset 0 2px #3b82f6}.dt-row-over-after>td{box-shadow:inset 0 -2px #3b82f6}.dt-card-move{display:inline-flex;align-items:center;gap:2px;flex-shrink:0}@media(forced-colors:active){.dt-row-over-before>td{box-shadow:inset 0 2px 0 Highlight}.dt-row-over-after>td{box-shadow:inset 0 -2px 0 Highlight}.dt-grip:focus-visible{outline-color:Highlight}}.dt-row-selected{background:#eff6ff!important}.dt-row-selected:hover{background:#dbeafe!important}.dt-state-cell{padding:0!important;border:none!important;background:#fff!important}@media(max-width:1024px){th{padding:10px 12px}td{padding:11px 12px}.dt-sort-btn{padding:4px 0}.dt-td-actions{padding:6px}.dt-bulk-bar{align-self:stretch}}@media(max-width:820px){.dt-header-left{flex-basis:100%}.dt-header-right{flex-basis:100%;justify-content:flex-start}}@media(max-width:768px){th{padding:9px 10px;font-size:.8125rem}td{padding:10px;font-size:.8125rem}.dt-sk-search{width:100%}}@media(max-width:640px){.dt-header{flex-direction:column;flex-wrap:nowrap;flex-shrink:0;align-items:stretch}.dt-header-left,.dt-header-right{width:100%;flex-basis:auto}.dt-table-wrap{display:none}.dt-sk-search{width:100%}.dt-sk-toolbar{flex-direction:column;align-items:stretch;gap:8px}.dt-sk-toolbar-right{align-self:flex-end}.dt-bulk-bar{align-self:stretch;padding:10px 12px;row-gap:8px}.dt-bulk-count{flex:1 1 100%}.dt-bulk-actions{flex:1 1 auto;width:auto}.dt-bulk-hint{flex-basis:100%}.dt-bulk-actions ui-select{max-width:100%;flex:1}}.dt-confirm-msg{margin:0;font-size:.9375rem;color:#334155;line-height:1.5;overflow-wrap:anywhere;word-break:break-word;white-space:pre-line}.dt-confirm-details{margin:10px 0 0;padding-left:20px;font-size:.875rem;color:#64748b;line-height:1.5;overflow-wrap:anywhere;word-break:break-word}.dt-confirm-details li+li{margin-top:4px}ui-pagination{flex-shrink:0;--ui-pagination-bg: #f8fafc}.dt-phone-controls{display:flex;flex-direction:column;gap:8px;margin-bottom:8px;flex-shrink:0}.dt-phone-sort{display:flex;align-items:center;gap:8px}.dt-phone-sort-label{font-size:.8125rem;font-weight:600;color:#475569;flex-shrink:0}.dt-phone-sort-select{flex:1;min-width:0;min-height:44px;box-sizing:border-box;padding:0 36px 0 12px;font-family:inherit;font-size:1rem;color:#1e293b;border:1px solid #7c8ba1;border-radius:8px;-webkit-appearance:none;appearance:none;background:#fff url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8' fill='none' stroke='%2394a3b8' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M1 1.5l5 5 5-5'/%3E%3C/svg%3E\") no-repeat right 12px center}.dt-phone-filters{display:flex;flex-wrap:wrap;gap:8px}.dt-card-list{display:none;flex-direction:column;gap:8px;flex:1;min-height:0;overflow-y:auto}@media(max-width:640px){.dt-card-list{display:flex;padding-bottom:8px}}.dt-card{background:#fff;border:1px solid #e2e8f0;border-radius:10px;contain:layout style;padding:14px 16px;display:flex;flex-direction:column;gap:10px;transition:background .1s}.dt-card:has(.mm-dropdown){position:relative;z-index:1}.dt-card-clickable{cursor:pointer}.dt-card-clickable:active{background:#f8fafc}.dt-card-clickable:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.dt-card-header{display:flex;align-items:center;gap:10px}.dt-card-title{display:flex;align-items:center;gap:10px;flex:1;min-width:0}.dt-card-name{min-width:0;font-weight:600;color:#1e293b;font-size:.9375rem;overflow:hidden;text-overflow:ellipsis;overflow-wrap:anywhere;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;line-clamp:3}.dt-card-name-plain{flex:1}.dt-card-actions{margin-left:auto;flex-shrink:0}.dt-card-badges{display:flex;flex-wrap:wrap;gap:6px}.dt-card-tags{display:flex;flex-wrap:wrap;gap:4px}.dt-card-details{display:flex;flex-direction:column;gap:5px}.dt-card-detail-row{display:flex;justify-content:space-between;align-items:baseline;gap:8px;font-size:.8125rem}.dt-card-detail-label{color:#64748b;flex-shrink:0}.dt-card-detail-value{color:#334155;font-weight:500;text-align:right;min-width:0;overflow-wrap:anywhere;word-break:break-word}.dt-card-sk{gap:12px}.dt-card-sk-header{display:flex;align-items:center;gap:10px}.dt-card-sk-badges{display:flex;gap:6px}.dt-card-sk-rows{display:flex;flex-direction:column;gap:8px}@media(prefers-reduced-motion:reduce){.dt-sk-shimmer:after,.dt-sk-cell:after{animation:none;transform:none;opacity:0}.dt-tag-tooltip{animation:none}.dt-sort-icon{transition:none}}\n"]
15746
+ styles: [":host{display:flex;flex-direction:column;flex:1;min-height:0}.dt-host{display:flex;flex-direction:column;height:100%;min-height:0}.dt-header{display:flex;align-items:center;gap:12px;margin-bottom:16px;flex-wrap:wrap;justify-content:space-between;position:relative;z-index:10}.dt-header-left{display:flex;align-items:center;gap:10px;flex-wrap:wrap;flex:1;min-width:0}.dt-header-right{display:flex;align-items:center;gap:8px;flex-shrink:0;flex-wrap:wrap;justify-content:flex-end}.dt-title{margin:0;font-size:.8125rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:#64748b;overflow-wrap:anywhere}.dt-sk-shimmer{position:relative;overflow:hidden;background:#f1f5f9}.dt-sk-shimmer:after{content:\"\";position:absolute;inset:0;background:linear-gradient(90deg,transparent 25%,rgba(255,255,255,.65) 50%,transparent 75%);transform:translate(-100%);animation:dt-shimmer 1.4s ease-in-out infinite}@keyframes dt-shimmer{to{transform:translate(200%)}}.dt-sk-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:16px}.dt-sk-toolbar-left{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.dt-sk-toolbar-right{display:flex;align-items:center;gap:8px;flex-shrink:0}.dt-sk-search{display:flex;align-items:center;gap:10px;width:380px;height:36px;padding:0 12px;border:1px solid #e2e8f0;border-radius:6px;background:#f8fafc;box-sizing:border-box}.dt-sk-search-icon{width:16px;height:16px;border-radius:50%;flex-shrink:0}.dt-sk-search-text{flex:1;height:11px;border-radius:4px}.dt-sk-tab-strip{display:flex;gap:2px;padding:3px;background:#f1f5f9;border-radius:8px}.dt-sk-tab{height:28px;width:70px;border-radius:6px}.dt-sk-icon-btn{width:32px;height:32px;border-radius:6px}.dt-skeleton{border:1px solid #e2e8f0;border-radius:10px;overflow:hidden}.dt-sk-header{display:flex;gap:24px;padding:12px 16px;background:#f8fafc;border-bottom:1px solid #e2e8f0}.dt-sk-row{display:flex;gap:24px;padding:13px 16px;border-bottom:1px solid #f1f5f9}.dt-sk-row:last-child{border-bottom:none}.dt-sk-cell{flex:1;height:13px;border-radius:4px;position:relative;overflow:hidden;background:#f1f5f9}.dt-sk-cell:first-child{max-width:100px}.dt-sk-cell:after{content:\"\";position:absolute;inset:0;background:linear-gradient(90deg,transparent 25%,rgba(255,255,255,.65) 50%,transparent 75%);transform:translate(-100%);animation:dt-shimmer 1.4s ease-in-out infinite}.dt-sk-head{height:10px}.dt-table-wrap{flex:1;min-height:0;overflow:auto;border:1px solid #e2e8f0;border-radius:10px 10px 0 0}.dt-sk-reload-row td{padding:10px 14px;border-bottom:1px solid #f1f5f9}table{width:100%;border-collapse:collapse;font-size:.875rem}thead tr{background:#f8fafc;border-bottom:1px solid #e2e8f0}thead{position:sticky;top:0;z-index:2}th{padding:10px 14px;font-size:.75rem;font-weight:600;color:#64748b;text-transform:uppercase;letter-spacing:.04em;white-space:nowrap;border-right:1px solid #e2e8f0;text-align:center;background:#f8fafc}th:last-child{border-right:none}th.dt-th-sorted{background:#f1f5f9}th.dt-th-actions{width:48px}.dt-th-inner{display:flex;align-items:center;justify-content:center;gap:4px}.dt-sort-btn{display:inline-flex;align-items:center;gap:4px;background:none;border:none;cursor:pointer;font-size:inherit;font-weight:inherit;color:inherit;font-family:inherit;padding:0;text-transform:inherit;letter-spacing:inherit}.dt-sort-btn:hover{color:#1e293b}.dt-sort-btn:focus-visible{outline:2px solid #60a5fa;outline-offset:2px;border-radius:2px}@media(pointer:coarse){.dt-sort-btn{position:relative}.dt-sort-btn:after{content:\"\";position:absolute;left:-4px;right:-4px;top:50%;height:44px;transform:translateY(-50%)}}.dt-sort-icon{transition:transform .15s}.dt-sort-desc{transform:rotate(180deg)}.dt-sort-inactive{opacity:.4}tbody tr{border-bottom:1px solid #f1f5f9;background:#fff;transition:background .1s}tbody tr:last-child{border-bottom:none}tbody tr:hover{background:#f8fafc}tfoot tr{background:#f8fafc;border-top:2px solid #e2e8f0}tfoot th.dt-foot-label{padding:10px 14px;font-size:.875rem;font-weight:700;color:#1e293b;text-transform:none;letter-spacing:normal;background:#f8fafc;border-right:1px solid #f1f5f9;white-space:nowrap}tfoot td{padding:10px 14px;font-weight:700;color:#1e293b;background:#f8fafc}.dt-card-totals{background:#f8fafc;font-weight:600}.dt-row-clickable{cursor:pointer}.dt-row-clickable:focus-visible{outline:2px solid #3b82f6;outline-offset:-2px}td{padding:10px 14px;color:#334155;vertical-align:middle;white-space:nowrap;border-right:1px solid #f1f5f9}td:last-child{border-right:none}.dt-td-actions{text-align:center;padding:6px 8px}.dt-sticky-actions th.dt-th-actions,.dt-sticky-actions td.dt-td-actions{position:sticky;right:0;box-shadow:-1px 0 #e2e8f0}.dt-sticky-actions th.dt-th-actions{z-index:3;background:#f8fafc}.dt-sticky-actions td.dt-td-actions{z-index:1;background:#fff}.dt-sticky-actions td.dt-td-actions:focus-within,.dt-sticky-actions td.dt-td-actions:has(.mm-dropdown){z-index:2}.dt-sticky-actions tbody tr:hover td.dt-td-actions{background:#f8fafc}.dt-sticky-actions tbody tr.dt-row-selected td.dt-td-actions{background:#eff6ff}.dt-sticky-actions tbody tr.dt-row-selected:hover td.dt-td-actions{background:#dbeafe}.dt-td-width{overflow:hidden;text-overflow:ellipsis}.dt-img{display:inline-block;vertical-align:middle;object-fit:cover;border:1px solid #e2e8f0;background:#f1f5f9;flex-shrink:0}.dt-img-ph{display:inline-flex;align-items:center;justify-content:center;vertical-align:middle;color:#94a3b8;background:#f1f5f9;border:1px solid #e2e8f0;flex-shrink:0}.dt-img-ph svg{width:55%;height:55%}.dt-img-circle-md{width:40px;height:40px;border-radius:50%}.dt-img-circle-sm{width:28px;height:28px;border-radius:50%}.dt-img-rounded-md{width:48px;height:32px;border-radius:6px}.dt-img-rounded-sm{width:36px;height:24px;border-radius:5px}.dt-avatar-name{display:flex;align-items:center;gap:8px}.dt-name-text{color:#1e293b}.dt-overdue{color:#dc2626;font-weight:500}.dt-none{color:#64748b}.dt-link{position:relative;display:inline-block;max-width:100%;padding:1px 2px;vertical-align:bottom;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#2563eb;text-decoration:none;border-radius:3px;cursor:pointer}.dt-link:hover{text-decoration:underline;color:#1d4ed8}.dt-link:focus-visible{outline:2px solid #3b82f6;outline-offset:-2px;text-decoration:underline}.dt-card-detail-value .dt-link,.dt-card-name .dt-link{white-space:normal;overflow-wrap:anywhere}.dt-sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.dt-tags{display:flex;align-items:center;gap:4px}.dt-tags-more{font-size:.75rem;font-weight:600;color:#475569;background:#f1f5f9;border-radius:999px;padding:2px 7px;cursor:default;-webkit-user-select:none;user-select:none;border:1px solid #e2e8f0}.dt-tags-more:focus-visible{outline:2px solid #60a5fa;outline-offset:2px;border-radius:999px}.dt-tag-tooltip{position:fixed;z-index:9999;pointer-events:none;background:#1e293b;border-radius:10px;padding:8px 10px;display:flex;flex-direction:column;gap:5px;box-shadow:0 4px 6px #0000000f,0 10px 24px #00000024;transform:translate(-50%) translateY(-100%);animation:dt-tip-in .12s ease;max-width:220px}@keyframes dt-tip-in{0%{opacity:0;transform:translate(-50%) translateY(calc(-100% + 4px))}to{opacity:1;transform:translate(-50%) translateY(-100%)}}.dt-cell-star{margin-right:6px}.dt-actions-cell{display:flex;align-items:center;justify-content:center}.dt-bulk-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;align-self:flex-start;padding:10px 14px;margin-bottom:8px;background:#eff6ff;border:1px solid #bfdbfe;border-radius:8px}.dt-bulk-count{font-size:.875rem;font-weight:600;color:#1e40af;white-space:nowrap;flex-shrink:0}.dt-bulk-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;flex:1;min-width:0}.dt-bulk-actions ui-select{max-width:180px;min-width:120px}.dt-bulk-hint{font-size:.8125rem;line-height:1.35;color:#475569}.dt-card-cb{display:flex;align-items:center;padding:0 0 6px}.dt-card-selected{background:#eff6ff!important;border-color:#bfdbfe!important}.dt-th-cb{width:44px;padding:0 10px!important;text-align:center!important;border-right:1px solid #e2e8f0;background:#f8fafc}.dt-td-cb{width:44px;padding:0 10px!important;text-align:center!important;border-right:1px solid #f1f5f9}.dt-th-grip{width:36px;padding:0!important;border-right:1px solid #e2e8f0;background:#f8fafc}.dt-td-grip{width:36px;padding:0!important;text-align:center!important;border-right:1px solid #f1f5f9}.dt-grip{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:6px;color:#64748b;cursor:grab;-webkit-user-select:none;user-select:none;touch-action:none}.dt-grip:hover{background:#f1f5f9;color:#334155}.dt-grip:active{cursor:grabbing}.dt-grip:focus-visible{outline:2px solid #3b82f6;outline-offset:1px}.dt-grip-off{color:#cbd5e1;cursor:not-allowed}.dt-grip-off:hover{background:none;color:#cbd5e1}.dt-row-move{display:none}@media(pointer:coarse){.dt-grip{display:none}.dt-row-move{display:inline-flex;flex-direction:column;align-items:center}.dt-th-grip,.dt-td-grip{width:56px}}.dt-row-dragging{opacity:.45}.dt-row-over-before>td{box-shadow:inset 0 2px #3b82f6}.dt-row-over-after>td{box-shadow:inset 0 -2px #3b82f6}.dt-card-move{display:inline-flex;align-items:center;gap:2px;flex-shrink:0}@media(forced-colors:active){.dt-row-over-before>td{box-shadow:inset 0 2px 0 Highlight}.dt-row-over-after>td{box-shadow:inset 0 -2px 0 Highlight}.dt-grip:focus-visible{outline-color:Highlight}}.dt-row-selected{background:#eff6ff!important}.dt-row-selected:hover{background:#dbeafe!important}.dt-state-cell{padding:0!important;border:none!important;background:#fff!important}@media(max-width:1024px){th{padding:10px 12px}td{padding:11px 12px}.dt-sort-btn{padding:4px 0}.dt-td-actions{padding:6px}.dt-bulk-bar{align-self:stretch}}@media(max-width:820px){.dt-header-left{flex-basis:100%}.dt-header-right{flex-basis:100%;justify-content:flex-start}}@media(max-width:768px){th{padding:9px 10px;font-size:.8125rem}td{padding:10px;font-size:.8125rem}.dt-sk-search{width:100%}}@media(max-width:640px){.dt-header{flex-direction:column;flex-wrap:nowrap;flex-shrink:0;align-items:stretch}.dt-header-left,.dt-header-right{width:100%;flex-basis:auto}.dt-table-wrap{display:none}.dt-sk-search{width:100%}.dt-sk-toolbar{flex-direction:column;align-items:stretch;gap:8px}.dt-sk-toolbar-right{align-self:flex-end}.dt-bulk-bar{align-self:stretch;padding:10px 12px;row-gap:8px}.dt-bulk-count{flex:1 1 100%}.dt-bulk-actions{flex:1 1 auto;width:auto}.dt-bulk-hint{flex-basis:100%}.dt-bulk-actions ui-select{max-width:100%;flex:1}}.dt-confirm-msg{margin:0;font-size:.9375rem;color:#334155;line-height:1.5;overflow-wrap:anywhere;word-break:break-word;white-space:pre-line}.dt-confirm-details{margin:10px 0 0;padding-left:20px;font-size:.875rem;color:#64748b;line-height:1.5;overflow-wrap:anywhere;word-break:break-word}.dt-confirm-details li+li{margin-top:4px}ui-pagination{flex-shrink:0;--ui-pagination-bg: #f8fafc}.dt-phone-controls{display:flex;flex-direction:column;gap:8px;margin-bottom:8px;flex-shrink:0}.dt-phone-sort{display:flex;align-items:center;gap:8px}.dt-phone-sort-label{font-size:.8125rem;font-weight:600;color:#475569;flex-shrink:0}.dt-phone-sort-select{flex:1;min-width:0;min-height:44px;box-sizing:border-box;padding:0 36px 0 12px;font-family:inherit;font-size:1rem;color:#1e293b;border:1px solid #7c8ba1;border-radius:8px;-webkit-appearance:none;appearance:none;background:#fff url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8' fill='none' stroke='%2394a3b8' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M1 1.5l5 5 5-5'/%3E%3C/svg%3E\") no-repeat right 12px center}.dt-phone-filters{display:flex;flex-wrap:wrap;gap:8px}.dt-card-list{display:none;flex-direction:column;gap:8px;flex:1;min-height:0;overflow-y:auto}@media(max-width:640px){.dt-card-list{display:flex;padding-bottom:8px}}.dt-card{background:#fff;border:1px solid #e2e8f0;border-radius:10px;contain:layout style;padding:14px 16px;display:flex;flex-direction:column;gap:10px;transition:background .1s}.dt-card:has(.mm-dropdown){position:relative;z-index:1}.dt-card-clickable{cursor:pointer}.dt-card-clickable:active{background:#f8fafc}.dt-card-clickable:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.dt-card-header{display:flex;align-items:center;gap:10px}.dt-card-title{display:flex;align-items:center;gap:10px;flex:1;min-width:0}.dt-card-name{min-width:0;font-weight:600;color:#1e293b;font-size:.9375rem;overflow:hidden;text-overflow:ellipsis;overflow-wrap:anywhere;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;line-clamp:3}.dt-card-name-plain{flex:1}.dt-card-actions{margin-left:auto;flex-shrink:0}.dt-card-badges{display:flex;flex-wrap:wrap;gap:6px}.dt-card-tags{display:flex;flex-wrap:wrap;gap:4px}.dt-card-details{display:flex;flex-direction:column;gap:5px}.dt-card-detail-row{display:flex;justify-content:space-between;align-items:baseline;gap:8px;font-size:.8125rem}.dt-card-detail-label{color:#64748b;flex-shrink:0}.dt-card-detail-value{color:#334155;font-weight:500;text-align:right;min-width:0;overflow-wrap:anywhere;word-break:break-word}.dt-card-sk{gap:12px}.dt-card-sk-header{display:flex;align-items:center;gap:10px}.dt-card-sk-badges{display:flex;gap:6px}.dt-card-sk-rows{display:flex;flex-direction:column;gap:8px}@media(prefers-reduced-motion:reduce){.dt-sk-shimmer:after,.dt-sk-cell:after{animation:none;transform:none;opacity:0}.dt-tag-tooltip{animation:none}.dt-sort-icon{transition:none}}\n"]
15525
15747
  }]
15526
15748
  }],
15527
15749
  ctorParameters: () => [],
@@ -15670,6 +15892,22 @@ i0.ɵɵngDeclareClassMetadata({
15670
15892
  required: false
15671
15893
  }]
15672
15894
  }],
15895
+ totalsEndpoint: [{
15896
+ type: i0.Input,
15897
+ args: [{
15898
+ isSignal: true,
15899
+ alias: "totalsEndpoint",
15900
+ required: false
15901
+ }]
15902
+ }],
15903
+ totalsLabel: [{
15904
+ type: i0.Input,
15905
+ args: [{
15906
+ isSignal: true,
15907
+ alias: "totalsLabel",
15908
+ required: false
15909
+ }]
15910
+ }],
15673
15911
  params: [{
15674
15912
  type: i0.Input,
15675
15913
  args: [{
@@ -16396,6 +16634,201 @@ i0.ɵɵngDeclareClassMetadata({
16396
16634
  }]
16397
16635
  }
16398
16636
  });
16637
+ const MIN_VISIBLE_PERCENT = 2;
16638
+ const ROTATION = [
16639
+ "blue",
16640
+ "green",
16641
+ "amber",
16642
+ "orange",
16643
+ "red",
16644
+ "slate"
16645
+ ];
16646
+ var StackedBarComponent = class StackedBarComponent {
16647
+ constructor() {
16648
+ this.segments = input([], ...ngDevMode ? [{ debugName: "segments" }] : /* istanbul ignore next */ []);
16649
+ this.ariaLabel = input("", ...ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []);
16650
+ this.height = input(14, ...ngDevMode ? [{ debugName: "height" }] : /* istanbul ignore next */ []);
16651
+ this.showLegend = input(true, ...ngDevMode ? [{ debugName: "showLegend" }] : /* istanbul ignore next */ []);
16652
+ this.formatValue = input((v) => v.toLocaleString("en-US"), ...ngDevMode ? [{ debugName: "formatValue" }] : /* istanbul ignore next */ []);
16653
+ this.rows = computed(() => {
16654
+ const segs = this.segments().map((s, i) => ({
16655
+ key: `${i}-${s.label}`,
16656
+ label: s.label,
16657
+ color: s.color ?? "",
16658
+ variant: s.variant ?? ROTATION[i % ROTATION.length],
16659
+ value: Number.isFinite(s.value) && s.value > 0 ? s.value : 0
16660
+ }));
16661
+ const total = segs.reduce((n, s) => n + s.value, 0);
16662
+ const format = this.formatValue();
16663
+ return segs.map((s) => {
16664
+ const exact = total > 0 ? s.value / total * 100 : 0;
16665
+ const percent = s.value > 0 ? Math.max(Math.round(exact), MIN_VISIBLE_PERCENT) : 0;
16666
+ const share = Math.round(exact);
16667
+ const text = `${format(s.value)} (${share}%)`;
16668
+ return {
16669
+ ...s,
16670
+ percent,
16671
+ text,
16672
+ title: `${s.label}: ${text}`
16673
+ };
16674
+ });
16675
+ }, ...ngDevMode ? [{ debugName: "rows" }] : /* istanbul ignore next */ []);
16676
+ this.drawn = computed(() => this.rows().filter((r) => r.percent > 0), ...ngDevMode ? [{ debugName: "drawn" }] : /* istanbul ignore next */ []);
16677
+ }
16678
+ static {
16679
+ this.ɵfac = i0.ɵɵngDeclareFactory({
16680
+ minVersion: "12.0.0",
16681
+ version: "22.2.2",
16682
+ ngImport: i0,
16683
+ type: StackedBarComponent,
16684
+ deps: [],
16685
+ target: i0.ɵɵFactoryTarget.Component
16686
+ });
16687
+ }
16688
+ static {
16689
+ this.ɵcmp = i0.ɵɵngDeclareComponent({
16690
+ minVersion: "17.0.0",
16691
+ version: "22.2.2",
16692
+ type: StackedBarComponent,
16693
+ isStandalone: true,
16694
+ selector: "ui-stacked-bar",
16695
+ inputs: {
16696
+ segments: {
16697
+ classPropertyName: "segments",
16698
+ publicName: "segments",
16699
+ isSignal: true,
16700
+ isRequired: false,
16701
+ transformFunction: null
16702
+ },
16703
+ ariaLabel: {
16704
+ classPropertyName: "ariaLabel",
16705
+ publicName: "ariaLabel",
16706
+ isSignal: true,
16707
+ isRequired: false,
16708
+ transformFunction: null
16709
+ },
16710
+ height: {
16711
+ classPropertyName: "height",
16712
+ publicName: "height",
16713
+ isSignal: true,
16714
+ isRequired: false,
16715
+ transformFunction: null
16716
+ },
16717
+ showLegend: {
16718
+ classPropertyName: "showLegend",
16719
+ publicName: "showLegend",
16720
+ isSignal: true,
16721
+ isRequired: false,
16722
+ transformFunction: null
16723
+ },
16724
+ formatValue: {
16725
+ classPropertyName: "formatValue",
16726
+ publicName: "formatValue",
16727
+ isSignal: true,
16728
+ isRequired: false,
16729
+ transformFunction: null
16730
+ }
16731
+ },
16732
+ ngImport: i0,
16733
+ template: `
16734
+ <div class="sb" role="group" [attr.aria-label]="ariaLabel() || null">
16735
+ <div class="sb-track" aria-hidden="true" [style.height.px]="height()">
16736
+ @for (s of drawn(); track s.key) {
16737
+ <span [class]="'sb-seg sb-' + s.variant" [style.width.%]="s.percent" [style.background]="s.color || null" [attr.title]="s.title"></span>
16738
+ }
16739
+ </div>
16740
+ <ul class="sb-legend" role="list" [class.sb-sr]="!showLegend()">
16741
+ @for (s of rows(); track s.key) {
16742
+ <li class="sb-item">
16743
+ <span [class]="'sb-dot sb-' + s.variant" [style.background]="s.color || null" aria-hidden="true"></span>
16744
+ <span class="sb-name">{{ s.label }}</span>
16745
+ <span class="sb-val">{{ s.text }}</span>
16746
+ </li>
16747
+ }
16748
+ </ul>
16749
+ </div>
16750
+ `,
16751
+ isInline: true,
16752
+ styles: [":host{display:block}.sb{position:relative}.sb-track{display:flex;width:100%;background:#e2e8f0;border-radius:7px;overflow:hidden}.sb-seg{display:block;height:100%;min-width:0}.sb-seg+.sb-seg{border-left:1px solid #fff}.sb-blue{background:var(--ui-progress-fill, var(--ui-accent, #3b82f6))}.sb-green{background:#16a34a}.sb-amber{background:#f59e0b}.sb-orange{background:#f97316}.sb-red{background:#ef4444}.sb-slate{background:#94a3b8}.sb-legend{list-style:none;margin:10px 0 0;padding:0;display:flex;flex-wrap:wrap;gap:6px 18px}.sb-item{display:inline-flex;align-items:center;gap:6px;font-size:.8125rem;color:#334155}.sb-dot{width:10px;height:10px;border-radius:50%;flex:none}.sb-val{font-weight:600;color:#0f172a}.sb-sr{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media(forced-colors:active){.sb-track{background:Canvas;border:1px solid CanvasText}.sb-seg{background:Highlight;forced-color-adjust:none;border-left:1px solid CanvasText}}\n"],
16753
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
16754
+ });
16755
+ }
16756
+ };
16757
+ i0.ɵɵngDeclareClassMetadata({
16758
+ minVersion: "12.0.0",
16759
+ version: "22.2.2",
16760
+ ngImport: i0,
16761
+ type: StackedBarComponent,
16762
+ decorators: [{
16763
+ type: Component,
16764
+ args: [{
16765
+ selector: "ui-stacked-bar",
16766
+ standalone: true,
16767
+ changeDetection: ChangeDetectionStrategy.OnPush,
16768
+ template: `
16769
+ <div class="sb" role="group" [attr.aria-label]="ariaLabel() || null">
16770
+ <div class="sb-track" aria-hidden="true" [style.height.px]="height()">
16771
+ @for (s of drawn(); track s.key) {
16772
+ <span [class]="'sb-seg sb-' + s.variant" [style.width.%]="s.percent" [style.background]="s.color || null" [attr.title]="s.title"></span>
16773
+ }
16774
+ </div>
16775
+ <ul class="sb-legend" role="list" [class.sb-sr]="!showLegend()">
16776
+ @for (s of rows(); track s.key) {
16777
+ <li class="sb-item">
16778
+ <span [class]="'sb-dot sb-' + s.variant" [style.background]="s.color || null" aria-hidden="true"></span>
16779
+ <span class="sb-name">{{ s.label }}</span>
16780
+ <span class="sb-val">{{ s.text }}</span>
16781
+ </li>
16782
+ }
16783
+ </ul>
16784
+ </div>
16785
+ `,
16786
+ styles: [":host{display:block}.sb{position:relative}.sb-track{display:flex;width:100%;background:#e2e8f0;border-radius:7px;overflow:hidden}.sb-seg{display:block;height:100%;min-width:0}.sb-seg+.sb-seg{border-left:1px solid #fff}.sb-blue{background:var(--ui-progress-fill, var(--ui-accent, #3b82f6))}.sb-green{background:#16a34a}.sb-amber{background:#f59e0b}.sb-orange{background:#f97316}.sb-red{background:#ef4444}.sb-slate{background:#94a3b8}.sb-legend{list-style:none;margin:10px 0 0;padding:0;display:flex;flex-wrap:wrap;gap:6px 18px}.sb-item{display:inline-flex;align-items:center;gap:6px;font-size:.8125rem;color:#334155}.sb-dot{width:10px;height:10px;border-radius:50%;flex:none}.sb-val{font-weight:600;color:#0f172a}.sb-sr{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media(forced-colors:active){.sb-track{background:Canvas;border:1px solid CanvasText}.sb-seg{background:Highlight;forced-color-adjust:none;border-left:1px solid CanvasText}}\n"]
16787
+ }]
16788
+ }],
16789
+ propDecorators: {
16790
+ segments: [{
16791
+ type: i0.Input,
16792
+ args: [{
16793
+ isSignal: true,
16794
+ alias: "segments",
16795
+ required: false
16796
+ }]
16797
+ }],
16798
+ ariaLabel: [{
16799
+ type: i0.Input,
16800
+ args: [{
16801
+ isSignal: true,
16802
+ alias: "ariaLabel",
16803
+ required: false
16804
+ }]
16805
+ }],
16806
+ height: [{
16807
+ type: i0.Input,
16808
+ args: [{
16809
+ isSignal: true,
16810
+ alias: "height",
16811
+ required: false
16812
+ }]
16813
+ }],
16814
+ showLegend: [{
16815
+ type: i0.Input,
16816
+ args: [{
16817
+ isSignal: true,
16818
+ alias: "showLegend",
16819
+ required: false
16820
+ }]
16821
+ }],
16822
+ formatValue: [{
16823
+ type: i0.Input,
16824
+ args: [{
16825
+ isSignal: true,
16826
+ alias: "formatValue",
16827
+ required: false
16828
+ }]
16829
+ }]
16830
+ }
16831
+ });
16399
16832
  var ProgressRingComponent = class ProgressRingComponent {
16400
16833
  constructor() {
16401
16834
  this.value = input(0, ...ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []);
@@ -22054,6 +22487,55 @@ var TextareaInputComponent = class TextareaInputComponent {
22054
22487
  focus(options) {
22055
22488
  this._hostEl.nativeElement.querySelector("textarea")?.focus(options);
22056
22489
  }
22490
+ getSelection() {
22491
+ const el = this._textarea();
22492
+ if (!el) return null;
22493
+ try {
22494
+ if (el.selectionStart === null || el.selectionEnd === null) return null;
22495
+ return {
22496
+ start: el.selectionStart,
22497
+ end: el.selectionEnd
22498
+ };
22499
+ } catch {
22500
+ return null;
22501
+ }
22502
+ }
22503
+ setSelection(start, end = start) {
22504
+ const el = this._textarea();
22505
+ if (!el) return;
22506
+ const max = el.value.length;
22507
+ const from = Math.min(Math.max(0, start), max);
22508
+ const to = Math.min(Math.max(from, end), max);
22509
+ try {
22510
+ el.setSelectionRange(from, to);
22511
+ } catch {}
22512
+ }
22513
+ insertAtCaret(text) {
22514
+ const el = this._textarea();
22515
+ if (!el || el.disabled || el.readOnly || !text) return;
22516
+ const value = el.value;
22517
+ let from = value.length;
22518
+ let to = value.length;
22519
+ try {
22520
+ if (el.selectionStart !== null && el.selectionEnd !== null) {
22521
+ from = el.selectionStart;
22522
+ to = el.selectionEnd;
22523
+ }
22524
+ } catch {}
22525
+ const max = this.maxlength();
22526
+ const room = max === void 0 ? text.length : max - (value.length - (to - from));
22527
+ const insert = text.slice(0, Math.max(0, room));
22528
+ if (!insert) return;
22529
+ el.value = value.slice(0, from) + insert + value.slice(to);
22530
+ const caret = from + insert.length;
22531
+ try {
22532
+ el.setSelectionRange(caret, caret);
22533
+ } catch {}
22534
+ el.dispatchEvent(new Event("input", { bubbles: true }));
22535
+ }
22536
+ _textarea() {
22537
+ return this._hostEl.nativeElement.querySelector("textarea");
22538
+ }
22057
22539
  writeValue(val) {
22058
22540
  this._value.set(val ?? "");
22059
22541
  }
@@ -24297,6 +24779,8 @@ var FileInputComponent = class FileInputComponent {
24297
24779
  this.showField = input(true, ...ngDevMode ? [{ debugName: "showField" }] : /* istanbul ignore next */ []);
24298
24780
  this.showErrors = input(false, ...ngDevMode ? [{ debugName: "showErrors" }] : /* istanbul ignore next */ []);
24299
24781
  this.toastOnReject = input(false, ...ngDevMode ? [{ debugName: "toastOnReject" }] : /* istanbul ignore next */ []);
24782
+ this.listRejections = input(false, ...ngDevMode ? [{ debugName: "listRejections" }] : /* istanbul ignore next */ []);
24783
+ this.ariaDescribedBy = input("", ...ngDevMode ? [{ debugName: "ariaDescribedBy" }] : /* istanbul ignore next */ []);
24300
24784
  this.clearable = input(false, ...ngDevMode ? [{ debugName: "clearable" }] : /* istanbul ignore next */ []);
24301
24785
  this.removeLabel = input("Remove", ...ngDevMode ? [{ debugName: "removeLabel" }] : /* istanbul ignore next */ []);
24302
24786
  this.maxSize = input(null, ...ngDevMode ? [{ debugName: "maxSize" }] : /* istanbul ignore next */ []);
@@ -24314,6 +24798,7 @@ var FileInputComponent = class FileInputComponent {
24314
24798
  this.loadingText = input("", ...ngDevMode ? [{ debugName: "loadingText" }] : /* istanbul ignore next */ []);
24315
24799
  this.filesSelected = output();
24316
24800
  this.fileRejected = output();
24801
+ this.filesRejected = output();
24317
24802
  this.fileRemoved = output();
24318
24803
  this.invalidChange = output();
24319
24804
  this._disabledInput = input(false, {
@@ -24328,10 +24813,15 @@ var FileInputComponent = class FileInputComponent {
24328
24813
  this._dragging = signal(false, ...ngDevMode ? [{ debugName: "_dragging" }] : /* istanbul ignore next */ []);
24329
24814
  this._toast = inject(ToastService);
24330
24815
  this._rejection = signal("", ...ngDevMode ? [{ debugName: "_rejection" }] : /* istanbul ignore next */ []);
24816
+ this._describedBy = computed(() => mergeDescribedBy(this._shownError() ? this._inputId + "-desc" : "", this.ariaDescribedBy()), ...ngDevMode ? [{ debugName: "_describedBy" }] : /* istanbul ignore next */ []);
24817
+ this._rejected = signal([], ...ngDevMode ? [{ debugName: "_rejected" }] : /* istanbul ignore next */ []);
24818
+ this.rejections = this._rejected.asReadonly();
24819
+ this.rejectionLines = computed(() => this._rejected().map((r) => `"${r.file.name}" was not added. ${r.message}`), ...ngDevMode ? [{ debugName: "rejectionLines" }] : /* istanbul ignore next */ []);
24820
+ this._showRejectList = computed(() => this.listRejections() && this._rejected().length > 0 && !(this.showField() && this.error()), ...ngDevMode ? [{ debugName: "_showRejectList" }] : /* istanbul ignore next */ []);
24331
24821
  this._reveal = createFieldReveal(this.showErrors);
24332
24822
  this._issue = computed(() => this.disabled() || !this.required() || this._files().length > 0 ? null : requiredIssue(this.label() || "File"), ...ngDevMode ? [{ debugName: "_issue" }] : /* istanbul ignore next */ []);
24333
24823
  this.invalid = computed(() => !!this.error() || !!this._rejection() || !!this._issue(), ...ngDevMode ? [{ debugName: "invalid" }] : /* istanbul ignore next */ []);
24334
- this.errorMessage = computed(() => this._rejection() || this._issue()?.message || "", ...ngDevMode ? [{ debugName: "errorMessage" }] : /* istanbul ignore next */ []);
24824
+ this.errorMessage = computed(() => (this.listRejections() && this._rejected().length > 0 ? this.rejectionLines().join(" ") : this._rejection()) || this._issue()?.message || "", ...ngDevMode ? [{ debugName: "errorMessage" }] : /* istanbul ignore next */ []);
24335
24825
  this._shownError = computed(() => (this.showField() ? this.error() : "") || this._rejection() || (this._reveal.revealed() ? this._issue()?.message ?? "" : ""), ...ngDevMode ? [{ debugName: "_shownError" }] : /* istanbul ignore next */ []);
24336
24826
  this.summary = computed(() => {
24337
24827
  const f = this._files();
@@ -24380,7 +24870,7 @@ var FileInputComponent = class FileInputComponent {
24380
24870
  const el = this.fileEl()?.nativeElement;
24381
24871
  if (el) el.value = "";
24382
24872
  this._files.set([]);
24383
- this._rejection.set("");
24873
+ this.setRejections([]);
24384
24874
  this._onChange(this.multiple() ? [] : null);
24385
24875
  }
24386
24876
  remove() {
@@ -24391,7 +24881,7 @@ var FileInputComponent = class FileInputComponent {
24391
24881
  writeValue(val) {
24392
24882
  const files = Array.isArray(val) ? val : val ? [val] : [];
24393
24883
  this._files.set(files);
24394
- if (files.length > 0) this._rejection.set("");
24884
+ if (files.length > 0) this.setRejections([]);
24395
24885
  const el = this.fileEl()?.nativeElement;
24396
24886
  if (files.length === 0 && el) el.value = "";
24397
24887
  }
@@ -24434,6 +24924,10 @@ var FileInputComponent = class FileInputComponent {
24434
24924
  if (dropped.length === 0) return;
24435
24925
  this.accept$(this.multiple() ? dropped : dropped.slice(0, 1), this.fileEl()?.nativeElement ?? null);
24436
24926
  }
24927
+ setRejections(list) {
24928
+ this._rejected.set(list);
24929
+ this._rejection.set(list[0]?.message ?? "");
24930
+ }
24437
24931
  rejectionFor(file) {
24438
24932
  const accept = this.accept();
24439
24933
  if (this.enforceAccept() && accept && !fileMatchesAccept(file, accept)) return {
@@ -24463,7 +24957,7 @@ var FileInputComponent = class FileInputComponent {
24463
24957
  accept$(files, native) {
24464
24958
  if (files.length === 0) {
24465
24959
  this._files.set([]);
24466
- this._rejection.set("");
24960
+ this.setRejections([]);
24467
24961
  this._onChange(this.multiple() ? [] : null);
24468
24962
  this._onTouched();
24469
24963
  return;
@@ -24475,8 +24969,9 @@ var FileInputComponent = class FileInputComponent {
24475
24969
  if (r) rejected.push(r);
24476
24970
  else ok.push(f);
24477
24971
  }
24478
- this._rejection.set(rejected[0]?.message ?? "");
24972
+ this.setRejections(rejected);
24479
24973
  rejected.forEach((r) => this.fileRejected.emit(r));
24974
+ if (rejected.length > 0) this.filesRejected.emit(rejected);
24480
24975
  if (this.toastOnReject() && rejected.length > 0) this._toast.error(rejected.map((r) => `"${r.file.name}" was not added. ${r.message}`).join(" "));
24481
24976
  if (ok.length === 0) {
24482
24977
  if (native) native.value = "";
@@ -24592,6 +25087,20 @@ var FileInputComponent = class FileInputComponent {
24592
25087
  isRequired: false,
24593
25088
  transformFunction: null
24594
25089
  },
25090
+ listRejections: {
25091
+ classPropertyName: "listRejections",
25092
+ publicName: "listRejections",
25093
+ isSignal: true,
25094
+ isRequired: false,
25095
+ transformFunction: null
25096
+ },
25097
+ ariaDescribedBy: {
25098
+ classPropertyName: "ariaDescribedBy",
25099
+ publicName: "ariaDescribedBy",
25100
+ isSignal: true,
25101
+ isRequired: false,
25102
+ transformFunction: null
25103
+ },
24595
25104
  clearable: {
24596
25105
  classPropertyName: "clearable",
24597
25106
  publicName: "clearable",
@@ -24708,6 +25217,7 @@ var FileInputComponent = class FileInputComponent {
24708
25217
  outputs: {
24709
25218
  filesSelected: "filesSelected",
24710
25219
  fileRejected: "fileRejected",
25220
+ filesRejected: "filesRejected",
24711
25221
  fileRemoved: "fileRemoved",
24712
25222
  invalidChange: "invalidChange"
24713
25223
  },
@@ -24756,14 +25266,14 @@ var FileInputComponent = class FileInputComponent {
24756
25266
  [attr.required]="required() || null"
24757
25267
  [attr.aria-label]="ariaLabel() || null"
24758
25268
  [attr.aria-invalid]="_shownError() ? 'true' : null"
24759
- [attr.aria-describedby]="_shownError() ? _inputId + '-desc' : null"
25269
+ [attr.aria-describedby]="_describedBy()"
24760
25270
  [attr.tabindex]="showField() ? -1 : null"
24761
25271
  (change)="onChange($event)"
24762
25272
  (blur)="_onTouched()" />
24763
25273
  @if (showField()) {
24764
25274
  <div class="fi-row">
24765
25275
  <button type="button" class="fi-control" [disabled]="disabled() || loading()" [attr.aria-busy]="loading() ? 'true' : null"
24766
- [attr.aria-describedby]="_shownError() ? _inputId + '-desc' : null"
25276
+ [attr.aria-describedby]="_describedBy()"
24767
25277
  (click)="open()" (blur)="_touch()"
24768
25278
  (dragenter)="onDragOver($event)" (dragover)="onDragOver($event)" (dragleave)="onDragLeave($event)" (drop)="onDrop($event)">
24769
25279
  @if (_previewUrl(); as src) {
@@ -24783,12 +25293,18 @@ var FileInputComponent = class FileInputComponent {
24783
25293
  </div>
24784
25294
  }
24785
25295
  @if (_shownError()) {
24786
- <p class="fi-desc fi-desc-error" [id]="_inputId + '-desc'" role="alert">{{ _shownError() }}</p>
25296
+ @if (_showRejectList()) {
25297
+ <ul class="fi-desc fi-desc-error fi-reject-list" [id]="_inputId + '-desc'" role="alert">
25298
+ @for (line of rejectionLines(); track $index) { <li>{{ line }}</li> }
25299
+ </ul>
25300
+ } @else {
25301
+ <p class="fi-desc fi-desc-error" [id]="_inputId + '-desc'" role="alert">{{ _shownError() }}</p>
25302
+ }
24787
25303
  }
24788
25304
  </div>
24789
25305
  `,
24790
25306
  isInline: true,
24791
- styles: [":host{display:block}:host(:has(.fi-hidden)){display:contents}.fi-field{display:flex;flex-direction:column;gap:6px}.fi-hidden{display:contents}.fi-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.fi-required{color:#dc2626;margin-left:2px}.fi-hint-inline{font-size:.75rem;color:#94a3b8;font-weight:400;margin-left:4px}.fi-native{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}.fi-row{display:flex;align-items:stretch;gap:8px}.fi-control{display:flex;align-items:center;justify-content:space-between;gap:12px;flex:1 1 auto;min-width:0;box-sizing:border-box;text-align:left;padding:9px 12px;font-size:.875rem;font-family:inherit;color:#1e293b;background:#fff;border:1px solid #7c8ba1;border-radius:8px;outline:none;cursor:pointer;transition:border-color .15s,box-shadow .15s}.fi-control:focus-visible{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.fi-control:has(ui-image-preview){padding-top:6px;padding-bottom:6px}.fi-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fi-loading{overflow:visible}.fi-placeholder{color:#64748b}.fi-browse{flex-shrink:0;font-size:.75rem;font-weight:600;color:#374151;padding:3px 10px;border:1px solid #e2e8f0;border-radius:6px;background:#f8fafc}.fi-remove{flex-shrink:0;align-self:center;font-family:inherit;font-size:.75rem;font-weight:600;color:#b91c1c;padding:6px 10px;border:1px solid #fecaca;border-radius:6px;background:#fff;cursor:pointer;-webkit-appearance:none;appearance:none}.fi-remove:hover{background:#fef2f2}.fi-remove:focus-visible{outline:2px solid #ef4444;outline-offset:2px}.fi-sr{position:absolute;width:1px;height:1px;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.fi-error .fi-control{border-color:#ef4444}.fi-error .fi-control:focus-visible{box-shadow:0 0 0 3px #ef44441f}.fi-drag .fi-control{border-color:#3b82f6;border-style:dashed;background:#eff6ff}.fi-disabled .fi-control{opacity:.5;cursor:not-allowed}.fi-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.fi-desc-error{color:#dc2626}@media(max-width:480px){.fi-control{font-size:1rem}.fi-remove{padding:10px 12px}}@media(pointer:coarse){.fi-control,.fi-remove{min-height:44px}}\n"],
25307
+ styles: [":host{display:block}:host(:has(.fi-hidden)){display:contents}.fi-field{display:flex;flex-direction:column;gap:6px}.fi-hidden{display:contents}.fi-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.fi-required{color:#dc2626;margin-left:2px}.fi-hint-inline{font-size:.75rem;color:#94a3b8;font-weight:400;margin-left:4px}.fi-native{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}.fi-row{display:flex;align-items:stretch;gap:8px}.fi-control{display:flex;align-items:center;justify-content:space-between;gap:12px;flex:1 1 auto;min-width:0;box-sizing:border-box;text-align:left;padding:9px 12px;font-size:.875rem;font-family:inherit;color:#1e293b;background:#fff;border:1px solid #7c8ba1;border-radius:8px;outline:none;cursor:pointer;transition:border-color .15s,box-shadow .15s}.fi-control:focus-visible{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.fi-control:has(ui-image-preview){padding-top:6px;padding-bottom:6px}.fi-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fi-loading{overflow:visible}.fi-placeholder{color:#64748b}.fi-browse{flex-shrink:0;font-size:.75rem;font-weight:600;color:#374151;padding:3px 10px;border:1px solid #e2e8f0;border-radius:6px;background:#f8fafc}.fi-remove{flex-shrink:0;align-self:center;font-family:inherit;font-size:.75rem;font-weight:600;color:#b91c1c;padding:6px 10px;border:1px solid #fecaca;border-radius:6px;background:#fff;cursor:pointer;-webkit-appearance:none;appearance:none}.fi-remove:hover{background:#fef2f2}.fi-remove:focus-visible{outline:2px solid #ef4444;outline-offset:2px}.fi-sr{position:absolute;width:1px;height:1px;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.fi-error .fi-control{border-color:#ef4444}.fi-error .fi-control:focus-visible{box-shadow:0 0 0 3px #ef44441f}.fi-drag .fi-control{border-color:#3b82f6;border-style:dashed;background:#eff6ff}.fi-disabled .fi-control{opacity:.5;cursor:not-allowed}.fi-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.fi-desc-error{color:#dc2626}.fi-reject-list{margin:4px 0 0;padding-left:18px}.fi-reject-list li{margin:0 0 2px}@media(max-width:480px){.fi-control{font-size:1rem}.fi-remove{padding:10px 12px}}@media(pointer:coarse){.fi-control,.fi-remove{min-height:44px}}\n"],
24792
25308
  dependencies: [{
24793
25309
  kind: "component",
24794
25310
  type: ImagePreviewComponent,
@@ -24868,14 +25384,14 @@ i0.ɵɵngDeclareClassMetadata({
24868
25384
  [attr.required]="required() || null"
24869
25385
  [attr.aria-label]="ariaLabel() || null"
24870
25386
  [attr.aria-invalid]="_shownError() ? 'true' : null"
24871
- [attr.aria-describedby]="_shownError() ? _inputId + '-desc' : null"
25387
+ [attr.aria-describedby]="_describedBy()"
24872
25388
  [attr.tabindex]="showField() ? -1 : null"
24873
25389
  (change)="onChange($event)"
24874
25390
  (blur)="_onTouched()" />
24875
25391
  @if (showField()) {
24876
25392
  <div class="fi-row">
24877
25393
  <button type="button" class="fi-control" [disabled]="disabled() || loading()" [attr.aria-busy]="loading() ? 'true' : null"
24878
- [attr.aria-describedby]="_shownError() ? _inputId + '-desc' : null"
25394
+ [attr.aria-describedby]="_describedBy()"
24879
25395
  (click)="open()" (blur)="_touch()"
24880
25396
  (dragenter)="onDragOver($event)" (dragover)="onDragOver($event)" (dragleave)="onDragLeave($event)" (drop)="onDrop($event)">
24881
25397
  @if (_previewUrl(); as src) {
@@ -24895,11 +25411,17 @@ i0.ɵɵngDeclareClassMetadata({
24895
25411
  </div>
24896
25412
  }
24897
25413
  @if (_shownError()) {
24898
- <p class="fi-desc fi-desc-error" [id]="_inputId + '-desc'" role="alert">{{ _shownError() }}</p>
25414
+ @if (_showRejectList()) {
25415
+ <ul class="fi-desc fi-desc-error fi-reject-list" [id]="_inputId + '-desc'" role="alert">
25416
+ @for (line of rejectionLines(); track $index) { <li>{{ line }}</li> }
25417
+ </ul>
25418
+ } @else {
25419
+ <p class="fi-desc fi-desc-error" [id]="_inputId + '-desc'" role="alert">{{ _shownError() }}</p>
25420
+ }
24899
25421
  }
24900
25422
  </div>
24901
25423
  `,
24902
- styles: [":host{display:block}:host(:has(.fi-hidden)){display:contents}.fi-field{display:flex;flex-direction:column;gap:6px}.fi-hidden{display:contents}.fi-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.fi-required{color:#dc2626;margin-left:2px}.fi-hint-inline{font-size:.75rem;color:#94a3b8;font-weight:400;margin-left:4px}.fi-native{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}.fi-row{display:flex;align-items:stretch;gap:8px}.fi-control{display:flex;align-items:center;justify-content:space-between;gap:12px;flex:1 1 auto;min-width:0;box-sizing:border-box;text-align:left;padding:9px 12px;font-size:.875rem;font-family:inherit;color:#1e293b;background:#fff;border:1px solid #7c8ba1;border-radius:8px;outline:none;cursor:pointer;transition:border-color .15s,box-shadow .15s}.fi-control:focus-visible{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.fi-control:has(ui-image-preview){padding-top:6px;padding-bottom:6px}.fi-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fi-loading{overflow:visible}.fi-placeholder{color:#64748b}.fi-browse{flex-shrink:0;font-size:.75rem;font-weight:600;color:#374151;padding:3px 10px;border:1px solid #e2e8f0;border-radius:6px;background:#f8fafc}.fi-remove{flex-shrink:0;align-self:center;font-family:inherit;font-size:.75rem;font-weight:600;color:#b91c1c;padding:6px 10px;border:1px solid #fecaca;border-radius:6px;background:#fff;cursor:pointer;-webkit-appearance:none;appearance:none}.fi-remove:hover{background:#fef2f2}.fi-remove:focus-visible{outline:2px solid #ef4444;outline-offset:2px}.fi-sr{position:absolute;width:1px;height:1px;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.fi-error .fi-control{border-color:#ef4444}.fi-error .fi-control:focus-visible{box-shadow:0 0 0 3px #ef44441f}.fi-drag .fi-control{border-color:#3b82f6;border-style:dashed;background:#eff6ff}.fi-disabled .fi-control{opacity:.5;cursor:not-allowed}.fi-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.fi-desc-error{color:#dc2626}@media(max-width:480px){.fi-control{font-size:1rem}.fi-remove{padding:10px 12px}}@media(pointer:coarse){.fi-control,.fi-remove{min-height:44px}}\n"]
25424
+ styles: [":host{display:block}:host(:has(.fi-hidden)){display:contents}.fi-field{display:flex;flex-direction:column;gap:6px}.fi-hidden{display:contents}.fi-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.fi-required{color:#dc2626;margin-left:2px}.fi-hint-inline{font-size:.75rem;color:#94a3b8;font-weight:400;margin-left:4px}.fi-native{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}.fi-row{display:flex;align-items:stretch;gap:8px}.fi-control{display:flex;align-items:center;justify-content:space-between;gap:12px;flex:1 1 auto;min-width:0;box-sizing:border-box;text-align:left;padding:9px 12px;font-size:.875rem;font-family:inherit;color:#1e293b;background:#fff;border:1px solid #7c8ba1;border-radius:8px;outline:none;cursor:pointer;transition:border-color .15s,box-shadow .15s}.fi-control:focus-visible{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.fi-control:has(ui-image-preview){padding-top:6px;padding-bottom:6px}.fi-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fi-loading{overflow:visible}.fi-placeholder{color:#64748b}.fi-browse{flex-shrink:0;font-size:.75rem;font-weight:600;color:#374151;padding:3px 10px;border:1px solid #e2e8f0;border-radius:6px;background:#f8fafc}.fi-remove{flex-shrink:0;align-self:center;font-family:inherit;font-size:.75rem;font-weight:600;color:#b91c1c;padding:6px 10px;border:1px solid #fecaca;border-radius:6px;background:#fff;cursor:pointer;-webkit-appearance:none;appearance:none}.fi-remove:hover{background:#fef2f2}.fi-remove:focus-visible{outline:2px solid #ef4444;outline-offset:2px}.fi-sr{position:absolute;width:1px;height:1px;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.fi-error .fi-control{border-color:#ef4444}.fi-error .fi-control:focus-visible{box-shadow:0 0 0 3px #ef44441f}.fi-drag .fi-control{border-color:#3b82f6;border-style:dashed;background:#eff6ff}.fi-disabled .fi-control{opacity:.5;cursor:not-allowed}.fi-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.fi-desc-error{color:#dc2626}.fi-reject-list{margin:4px 0 0;padding-left:18px}.fi-reject-list li{margin:0 0 2px}@media(max-width:480px){.fi-control{font-size:1rem}.fi-remove{padding:10px 12px}}@media(pointer:coarse){.fi-control,.fi-remove{min-height:44px}}\n"]
24903
25425
  }]
24904
25426
  }],
24905
25427
  ctorParameters: () => [],
@@ -25000,6 +25522,22 @@ i0.ɵɵngDeclareClassMetadata({
25000
25522
  required: false
25001
25523
  }]
25002
25524
  }],
25525
+ listRejections: [{
25526
+ type: i0.Input,
25527
+ args: [{
25528
+ isSignal: true,
25529
+ alias: "listRejections",
25530
+ required: false
25531
+ }]
25532
+ }],
25533
+ ariaDescribedBy: [{
25534
+ type: i0.Input,
25535
+ args: [{
25536
+ isSignal: true,
25537
+ alias: "ariaDescribedBy",
25538
+ required: false
25539
+ }]
25540
+ }],
25003
25541
  clearable: [{
25004
25542
  type: i0.Input,
25005
25543
  args: [{
@@ -25128,6 +25666,10 @@ i0.ɵɵngDeclareClassMetadata({
25128
25666
  type: i0.Output,
25129
25667
  args: ["fileRejected"]
25130
25668
  }],
25669
+ filesRejected: [{
25670
+ type: i0.Output,
25671
+ args: ["filesRejected"]
25672
+ }],
25131
25673
  fileRemoved: [{
25132
25674
  type: i0.Output,
25133
25675
  args: ["fileRemoved"]
@@ -25150,6 +25692,361 @@ i0.ɵɵngDeclareClassMetadata({
25150
25692
  }]
25151
25693
  }
25152
25694
  });
25695
+ var CopyFieldComponent = class CopyFieldComponent {
25696
+ constructor() {
25697
+ this.value = input("", ...ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []);
25698
+ this.label = input("", ...ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []);
25699
+ this.copyLabel = input("Copy", ...ngDevMode ? [{ debugName: "copyLabel" }] : /* istanbul ignore next */ []);
25700
+ this.copiedLabel = input("Copied", ...ngDevMode ? [{ debugName: "copiedLabel" }] : /* istanbul ignore next */ []);
25701
+ this.buttonAriaLabel = input("", ...ngDevMode ? [{ debugName: "buttonAriaLabel" }] : /* istanbul ignore next */ []);
25702
+ this.copiedMessage = input("Copied to clipboard", ...ngDevMode ? [{ debugName: "copiedMessage" }] : /* istanbul ignore next */ []);
25703
+ this.failedMessage = input("Could not copy automatically. The text is selected: press Ctrl+C (Cmd+C on a Mac) to copy it.", ...ngDevMode ? [{ debugName: "failedMessage" }] : /* istanbul ignore next */ []);
25704
+ this.hint = input("", ...ngDevMode ? [{ debugName: "hint" }] : /* istanbul ignore next */ []);
25705
+ this.disabled = input(false, ...ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []);
25706
+ this.ariaDescribedBy = input("", ...ngDevMode ? [{ debugName: "ariaDescribedBy" }] : /* istanbul ignore next */ []);
25707
+ this.inputTestId = input("", ...ngDevMode ? [{ debugName: "inputTestId" }] : /* istanbul ignore next */ []);
25708
+ this.buttonTestId = input("", ...ngDevMode ? [{ debugName: "buttonTestId" }] : /* istanbul ignore next */ []);
25709
+ this.copied = output();
25710
+ this.copyFailed = output();
25711
+ this._id = `cf-${Math.random().toString(36).slice(2, 8)}`;
25712
+ this._state = signal("idle", ...ngDevMode ? [{ debugName: "_state" }] : /* istanbul ignore next */ []);
25713
+ this._announcement = computed(() => this._state() === "copied" ? this.copiedMessage() : this._state() === "failed" ? this.failedMessage() : "", ...ngDevMode ? [{ debugName: "_announcement" }] : /* istanbul ignore next */ []);
25714
+ this._buttonName = computed(() => this.buttonAriaLabel() || [this.copyLabel(), this.label()].filter(Boolean).join(" "), ...ngDevMode ? [{ debugName: "_buttonName" }] : /* istanbul ignore next */ []);
25715
+ this._describedBy = computed(() => {
25716
+ const ids = `${this.hint() ? this._id + "-hint" : ""} ${this._state() === "failed" ? this._id + "-fail" : ""} ${this.ariaDescribedBy()}`.split(/\s+/).filter(Boolean);
25717
+ const unique = ids.filter((id, i) => ids.indexOf(id) === i);
25718
+ return unique.length ? unique.join(" ") : null;
25719
+ }, ...ngDevMode ? [{ debugName: "_describedBy" }] : /* istanbul ignore next */ []);
25720
+ this.fieldEl = viewChild("field", ...ngDevMode ? [{ debugName: "fieldEl" }] : /* istanbul ignore next */ []);
25721
+ this._timer = null;
25722
+ }
25723
+ ngOnDestroy() {
25724
+ if (this._timer) clearTimeout(this._timer);
25725
+ }
25726
+ selectAll() {
25727
+ this.fieldEl()?.nativeElement.select();
25728
+ }
25729
+ async copy() {
25730
+ const text = this.value();
25731
+ if (!text || this.disabled()) return false;
25732
+ let ok = false;
25733
+ try {
25734
+ if (typeof navigator !== "undefined" && navigator.clipboard?.writeText) {
25735
+ await navigator.clipboard.writeText(text);
25736
+ ok = true;
25737
+ }
25738
+ } catch {
25739
+ ok = false;
25740
+ }
25741
+ if (!ok) ok = this.legacyCopy();
25742
+ if (this._timer) {
25743
+ clearTimeout(this._timer);
25744
+ this._timer = null;
25745
+ }
25746
+ if (ok) {
25747
+ this._state.set("copied");
25748
+ this.copied.emit(text);
25749
+ this._timer = setTimeout(() => {
25750
+ this._state.set("idle");
25751
+ this._timer = null;
25752
+ }, 2e3);
25753
+ } else {
25754
+ this.selectAll();
25755
+ this._state.set("failed");
25756
+ this.copyFailed.emit();
25757
+ }
25758
+ return ok;
25759
+ }
25760
+ legacyCopy() {
25761
+ const el = this.fieldEl()?.nativeElement;
25762
+ if (!el || typeof document === "undefined" || typeof document.execCommand !== "function") return false;
25763
+ try {
25764
+ el.focus();
25765
+ el.select();
25766
+ el.setSelectionRange(0, el.value.length);
25767
+ return document.execCommand("copy");
25768
+ } catch {
25769
+ return false;
25770
+ }
25771
+ }
25772
+ static {
25773
+ this.ɵfac = i0.ɵɵngDeclareFactory({
25774
+ minVersion: "12.0.0",
25775
+ version: "22.2.2",
25776
+ ngImport: i0,
25777
+ type: CopyFieldComponent,
25778
+ deps: [],
25779
+ target: i0.ɵɵFactoryTarget.Component
25780
+ });
25781
+ }
25782
+ static {
25783
+ this.ɵcmp = i0.ɵɵngDeclareComponent({
25784
+ minVersion: "17.0.0",
25785
+ version: "22.2.2",
25786
+ type: CopyFieldComponent,
25787
+ isStandalone: true,
25788
+ selector: "ui-copy-field",
25789
+ inputs: {
25790
+ value: {
25791
+ classPropertyName: "value",
25792
+ publicName: "value",
25793
+ isSignal: true,
25794
+ isRequired: false,
25795
+ transformFunction: null
25796
+ },
25797
+ label: {
25798
+ classPropertyName: "label",
25799
+ publicName: "label",
25800
+ isSignal: true,
25801
+ isRequired: false,
25802
+ transformFunction: null
25803
+ },
25804
+ copyLabel: {
25805
+ classPropertyName: "copyLabel",
25806
+ publicName: "copyLabel",
25807
+ isSignal: true,
25808
+ isRequired: false,
25809
+ transformFunction: null
25810
+ },
25811
+ copiedLabel: {
25812
+ classPropertyName: "copiedLabel",
25813
+ publicName: "copiedLabel",
25814
+ isSignal: true,
25815
+ isRequired: false,
25816
+ transformFunction: null
25817
+ },
25818
+ buttonAriaLabel: {
25819
+ classPropertyName: "buttonAriaLabel",
25820
+ publicName: "buttonAriaLabel",
25821
+ isSignal: true,
25822
+ isRequired: false,
25823
+ transformFunction: null
25824
+ },
25825
+ copiedMessage: {
25826
+ classPropertyName: "copiedMessage",
25827
+ publicName: "copiedMessage",
25828
+ isSignal: true,
25829
+ isRequired: false,
25830
+ transformFunction: null
25831
+ },
25832
+ failedMessage: {
25833
+ classPropertyName: "failedMessage",
25834
+ publicName: "failedMessage",
25835
+ isSignal: true,
25836
+ isRequired: false,
25837
+ transformFunction: null
25838
+ },
25839
+ hint: {
25840
+ classPropertyName: "hint",
25841
+ publicName: "hint",
25842
+ isSignal: true,
25843
+ isRequired: false,
25844
+ transformFunction: null
25845
+ },
25846
+ disabled: {
25847
+ classPropertyName: "disabled",
25848
+ publicName: "disabled",
25849
+ isSignal: true,
25850
+ isRequired: false,
25851
+ transformFunction: null
25852
+ },
25853
+ ariaDescribedBy: {
25854
+ classPropertyName: "ariaDescribedBy",
25855
+ publicName: "ariaDescribedBy",
25856
+ isSignal: true,
25857
+ isRequired: false,
25858
+ transformFunction: null
25859
+ },
25860
+ inputTestId: {
25861
+ classPropertyName: "inputTestId",
25862
+ publicName: "inputTestId",
25863
+ isSignal: true,
25864
+ isRequired: false,
25865
+ transformFunction: null
25866
+ },
25867
+ buttonTestId: {
25868
+ classPropertyName: "buttonTestId",
25869
+ publicName: "buttonTestId",
25870
+ isSignal: true,
25871
+ isRequired: false,
25872
+ transformFunction: null
25873
+ }
25874
+ },
25875
+ outputs: {
25876
+ copied: "copied",
25877
+ copyFailed: "copyFailed"
25878
+ },
25879
+ viewQueries: [{
25880
+ propertyName: "fieldEl",
25881
+ first: true,
25882
+ predicate: ["field"],
25883
+ descendants: true,
25884
+ isSignal: true
25885
+ }],
25886
+ ngImport: i0,
25887
+ template: `
25888
+ <div class="cf-field">
25889
+ @if (label()) { <label class="cf-label" [for]="_id">{{ label() }}</label> }
25890
+ <div class="cf-row">
25891
+ <input #field class="cf-input" type="text" readonly [id]="_id" [value]="value()" [attr.aria-describedby]="_describedBy()"
25892
+ [attr.data-testid]="inputTestId() || null" (focus)="selectAll()" />
25893
+ <button type="button" class="cf-btn" [disabled]="disabled() || !value()" [attr.aria-label]="_buttonName()"
25894
+ [attr.data-testid]="buttonTestId() || null" (click)="copy()">
25895
+ {{ _state() === 'copied' ? copiedLabel() : copyLabel() }}
25896
+ </button>
25897
+ </div>
25898
+ @if (hint()) { <p class="cf-hint" [id]="_id + '-hint'">{{ hint() }}</p> }
25899
+ <span class="cf-sr" role="status" aria-live="polite" aria-atomic="true">{{ _announcement() }}</span>
25900
+ @if (_state() === 'failed') { <p class="cf-fail" [id]="_id + '-fail'">{{ failedMessage() }}</p> }
25901
+ </div>
25902
+ `,
25903
+ isInline: true,
25904
+ styles: [":host{display:block}.cf-field{display:flex;flex-direction:column;gap:4px}.cf-label{font-size:.8125rem;font-weight:500;color:#334155}.cf-row{display:flex;gap:8px;align-items:stretch}.cf-input{flex:1 1 auto;min-width:0;box-sizing:border-box;min-height:40px;padding:8px 12px;font:inherit;font-size:.875rem;color:#0f172a;background:#f8fafc;border:1px solid #94a3b8;border-radius:8px;text-overflow:ellipsis}.cf-input:focus-visible{outline:2px solid #1d4ed8;outline-offset:1px}.cf-btn{flex:0 0 auto;min-height:40px;padding:0 16px;font:inherit;font-size:.875rem;font-weight:600;color:#0f172a;background:#fff;border:1px solid #94a3b8;border-radius:8px;cursor:pointer}.cf-btn:hover:not(:disabled){background:#f1f5f9}.cf-btn:focus-visible{outline:2px solid #1d4ed8;outline-offset:1px}.cf-btn:disabled{opacity:.55;cursor:not-allowed}.cf-hint{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.cf-fail{margin:0;font-size:.75rem;line-height:1.4;color:#b91c1c}.cf-sr{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media(pointer:coarse),(max-width:480px){.cf-input,.cf-btn{min-height:44px}}\n"],
25905
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
25906
+ });
25907
+ }
25908
+ };
25909
+ i0.ɵɵngDeclareClassMetadata({
25910
+ minVersion: "12.0.0",
25911
+ version: "22.2.2",
25912
+ ngImport: i0,
25913
+ type: CopyFieldComponent,
25914
+ decorators: [{
25915
+ type: Component,
25916
+ args: [{
25917
+ selector: "ui-copy-field",
25918
+ standalone: true,
25919
+ changeDetection: ChangeDetectionStrategy.OnPush,
25920
+ template: `
25921
+ <div class="cf-field">
25922
+ @if (label()) { <label class="cf-label" [for]="_id">{{ label() }}</label> }
25923
+ <div class="cf-row">
25924
+ <input #field class="cf-input" type="text" readonly [id]="_id" [value]="value()" [attr.aria-describedby]="_describedBy()"
25925
+ [attr.data-testid]="inputTestId() || null" (focus)="selectAll()" />
25926
+ <button type="button" class="cf-btn" [disabled]="disabled() || !value()" [attr.aria-label]="_buttonName()"
25927
+ [attr.data-testid]="buttonTestId() || null" (click)="copy()">
25928
+ {{ _state() === 'copied' ? copiedLabel() : copyLabel() }}
25929
+ </button>
25930
+ </div>
25931
+ @if (hint()) { <p class="cf-hint" [id]="_id + '-hint'">{{ hint() }}</p> }
25932
+ <span class="cf-sr" role="status" aria-live="polite" aria-atomic="true">{{ _announcement() }}</span>
25933
+ @if (_state() === 'failed') { <p class="cf-fail" [id]="_id + '-fail'">{{ failedMessage() }}</p> }
25934
+ </div>
25935
+ `,
25936
+ styles: [":host{display:block}.cf-field{display:flex;flex-direction:column;gap:4px}.cf-label{font-size:.8125rem;font-weight:500;color:#334155}.cf-row{display:flex;gap:8px;align-items:stretch}.cf-input{flex:1 1 auto;min-width:0;box-sizing:border-box;min-height:40px;padding:8px 12px;font:inherit;font-size:.875rem;color:#0f172a;background:#f8fafc;border:1px solid #94a3b8;border-radius:8px;text-overflow:ellipsis}.cf-input:focus-visible{outline:2px solid #1d4ed8;outline-offset:1px}.cf-btn{flex:0 0 auto;min-height:40px;padding:0 16px;font:inherit;font-size:.875rem;font-weight:600;color:#0f172a;background:#fff;border:1px solid #94a3b8;border-radius:8px;cursor:pointer}.cf-btn:hover:not(:disabled){background:#f1f5f9}.cf-btn:focus-visible{outline:2px solid #1d4ed8;outline-offset:1px}.cf-btn:disabled{opacity:.55;cursor:not-allowed}.cf-hint{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.cf-fail{margin:0;font-size:.75rem;line-height:1.4;color:#b91c1c}.cf-sr{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media(pointer:coarse),(max-width:480px){.cf-input,.cf-btn{min-height:44px}}\n"]
25937
+ }]
25938
+ }],
25939
+ propDecorators: {
25940
+ value: [{
25941
+ type: i0.Input,
25942
+ args: [{
25943
+ isSignal: true,
25944
+ alias: "value",
25945
+ required: false
25946
+ }]
25947
+ }],
25948
+ label: [{
25949
+ type: i0.Input,
25950
+ args: [{
25951
+ isSignal: true,
25952
+ alias: "label",
25953
+ required: false
25954
+ }]
25955
+ }],
25956
+ copyLabel: [{
25957
+ type: i0.Input,
25958
+ args: [{
25959
+ isSignal: true,
25960
+ alias: "copyLabel",
25961
+ required: false
25962
+ }]
25963
+ }],
25964
+ copiedLabel: [{
25965
+ type: i0.Input,
25966
+ args: [{
25967
+ isSignal: true,
25968
+ alias: "copiedLabel",
25969
+ required: false
25970
+ }]
25971
+ }],
25972
+ buttonAriaLabel: [{
25973
+ type: i0.Input,
25974
+ args: [{
25975
+ isSignal: true,
25976
+ alias: "buttonAriaLabel",
25977
+ required: false
25978
+ }]
25979
+ }],
25980
+ copiedMessage: [{
25981
+ type: i0.Input,
25982
+ args: [{
25983
+ isSignal: true,
25984
+ alias: "copiedMessage",
25985
+ required: false
25986
+ }]
25987
+ }],
25988
+ failedMessage: [{
25989
+ type: i0.Input,
25990
+ args: [{
25991
+ isSignal: true,
25992
+ alias: "failedMessage",
25993
+ required: false
25994
+ }]
25995
+ }],
25996
+ hint: [{
25997
+ type: i0.Input,
25998
+ args: [{
25999
+ isSignal: true,
26000
+ alias: "hint",
26001
+ required: false
26002
+ }]
26003
+ }],
26004
+ disabled: [{
26005
+ type: i0.Input,
26006
+ args: [{
26007
+ isSignal: true,
26008
+ alias: "disabled",
26009
+ required: false
26010
+ }]
26011
+ }],
26012
+ ariaDescribedBy: [{
26013
+ type: i0.Input,
26014
+ args: [{
26015
+ isSignal: true,
26016
+ alias: "ariaDescribedBy",
26017
+ required: false
26018
+ }]
26019
+ }],
26020
+ inputTestId: [{
26021
+ type: i0.Input,
26022
+ args: [{
26023
+ isSignal: true,
26024
+ alias: "inputTestId",
26025
+ required: false
26026
+ }]
26027
+ }],
26028
+ buttonTestId: [{
26029
+ type: i0.Input,
26030
+ args: [{
26031
+ isSignal: true,
26032
+ alias: "buttonTestId",
26033
+ required: false
26034
+ }]
26035
+ }],
26036
+ copied: [{
26037
+ type: i0.Output,
26038
+ args: ["copied"]
26039
+ }],
26040
+ copyFailed: [{
26041
+ type: i0.Output,
26042
+ args: ["copyFailed"]
26043
+ }],
26044
+ fieldEl: [{
26045
+ type: i0.ViewChild,
26046
+ args: ["field", { isSignal: true }]
26047
+ }]
26048
+ }
26049
+ });
25153
26050
  var DateInputComponent = class DateInputComponent {
25154
26051
  constructor() {
25155
26052
  this.label = input("", ...ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []);
@@ -29091,15 +29988,30 @@ var ListItemComponent = class ListItemComponent {
29091
29988
  this.select = output();
29092
29989
  this.pressable = () => this.interactive() && this.leading() === "none";
29093
29990
  this.hasImage = signal(false, ...ngDevMode ? [{ debugName: "hasImage" }] : /* istanbul ignore next */ []);
29094
- this.visibleDetails = () => this.details().map((d) => typeof d === "string" ? {
29095
- text: d,
29096
- d: null,
29097
- tone: "default"
29098
- } : d ? {
29099
- text: d.text,
29100
- d: d.icon ? iconPath(d.icon) ?? null : null,
29101
- tone: d.tone ?? "default"
29102
- } : null).filter((d) => !!d && !!d.text);
29991
+ this.visibleDetails = () => this.details().map((d) => {
29992
+ if (typeof d === "string") return {
29993
+ text: d,
29994
+ segs: null,
29995
+ d: null,
29996
+ tone: "default"
29997
+ };
29998
+ if (!d) return null;
29999
+ const segs = d.segments?.length ? d.segments.map((g) => typeof g === "string" ? {
30000
+ text: g,
30001
+ bold: false,
30002
+ code: false
30003
+ } : {
30004
+ text: g.text,
30005
+ bold: !!g.bold,
30006
+ code: !!g.code
30007
+ }) : null;
30008
+ return {
30009
+ text: segs ? segs.map((g) => g.text).join("") : d.text ?? "",
30010
+ segs,
30011
+ d: d.icon ? iconPath(d.icon) ?? null : null,
30012
+ tone: d.tone ?? "default"
30013
+ };
30014
+ }).filter((d) => !!d && !!d.text);
29103
30015
  }
29104
30016
  get _borderedClass() {
29105
30017
  return this.bordered();
@@ -29309,7 +30221,16 @@ var ListItemComponent = class ListItemComponent {
29309
30221
  @if (detail.d) {
29310
30222
  <svg class="li-detail-icon" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path [attr.d]="detail.d" /></svg>
29311
30223
  }
29312
- <span class="li-detail-text" data-testid="list-item-detail">{{ detail.text }}</span>
30224
+ <span class="li-detail-text" data-testid="list-item-detail">
30225
+ @if (detail.segs; as segs) {
30226
+ @for (seg of segs; track $index) {
30227
+ @if (seg.bold && seg.code) { <strong><code class="li-code">{{ seg.text }}</code></strong> }
30228
+ @else if (seg.bold) { <strong>{{ seg.text }}</strong> }
30229
+ @else if (seg.code) { <code class="li-code">{{ seg.text }}</code> }
30230
+ @else { <ng-container>{{ seg.text }}</ng-container> }
30231
+ }
30232
+ } @else { <ng-container>{{ detail.text }}</ng-container> }
30233
+ </span>
29313
30234
  </span>
29314
30235
  }
29315
30236
  </div>
@@ -29368,7 +30289,7 @@ var ListItemComponent = class ListItemComponent {
29368
30289
  </div>
29369
30290
  `,
29370
30291
  isInline: true,
29371
- styles: ["ui-list-item{display:block}ui-list-item.li-bordered{border:1px solid var(--border, #e2e8f0);border-radius:12px;overflow:hidden;background:var(--surface, #fff);box-shadow:0 1px 2px #0f172a0a;margin-bottom:8px;transition:border-color .15s ease,box-shadow .15s ease}ui-list-item.li-bordered:last-child{margin-bottom:0}ui-list-item.li-bordered:hover{border-color:#cbd5e1;box-shadow:0 2px 6px #0f172a12}@media(prefers-reduced-motion:reduce){ui-list-item.li-bordered{transition:none}}.li-row{display:flex;align-items:flex-start;gap:14px;padding:12px 16px;border-bottom:1px solid var(--border, #e2e8f0);transition:background .12s}.li-row:last-child{border-bottom:none}.li-row:hover{background:var(--surface-hover, #f8fafc)}ui-list-item.li-bordered .li-row{border-bottom:none;padding:14px 16px}.li-row.li-row--highlighted{background:#f0fdf4}.li-row.li-row--highlighted:hover{background:#dcfce7}.li-row.li-row--static:hover{background:transparent}.li-row.li-row--static.li-row--highlighted,.li-row.li-row--static.li-row--highlighted:hover{background:#f0fdf4}.li-row.li-row--pressable{cursor:pointer}.li-row.li-row--pressable:focus-visible{outline:2px solid var(--primary, #2563eb);outline-offset:-2px}.li-body.li-body--static{cursor:default}.li-row [list-item-action],.li-row [li-action]{flex-shrink:0;align-self:center}.li-row>[list-item-image]{flex:0 0 auto;align-self:center}.li-row.li-row--disabled,.li-row.li-row--disabled:hover{opacity:.72;cursor:not-allowed;background-color:var(--surface-muted, #f8fafc);background-image:repeating-linear-gradient(135deg,transparent 0,transparent 6px,rgba(100,116,139,.1) 6px,rgba(100,116,139,.1) 12px)}.li-row.li-row--disabled .li-body,.li-row.li-row--disabled .li-input,.li-row.li-row--disabled.li-row--pressable{cursor:not-allowed}ui-list-item.li-disabled.li-bordered,ui-list-item.li-disabled.li-bordered:hover{border-style:dashed;box-shadow:none}.li-row.li-row--busy,.li-row.li-row--busy .li-body{cursor:progress}.li-spinner{flex:0 0 auto;align-self:center;box-sizing:border-box;width:16px;height:16px;border:2px solid rgba(100,116,139,.3);border-top-color:var(--text-secondary, #475569);border-radius:50%;animation:li-spin .6s linear infinite}@keyframes li-spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){.li-spinner{animation-duration:2s}}.li-input{margin-top:3px;flex-shrink:0;accent-color:#16a34a;width:1rem;height:1rem;cursor:pointer}.li-icon{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:12px}.li-icon--slate{background:#f1f5f9;color:#475569}.li-icon--amber{background:#fef3c7;color:#b45309}.li-icon--orange{background:#ffedd5;color:#c2410c}.li-icon--red{background:#fee2e2;color:#b91c1c}.li-icon--blue{background:#dbeafe;color:#1d4ed8}.li-icon--green{background:#dcfce7;color:#15803d}.li-icon--purple{background:#f3e8ff;color:#7e22ce}.li-icon--teal{background:#ccfbf1;color:#0f766e}.li-body{flex:1;min-width:0;cursor:pointer;display:flex;flex-direction:column;gap:6px}.li-title-row{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.li-title{font-size:.9375rem;font-weight:600;line-height:1.4;letter-spacing:-.005em;color:var(--text-primary, #0f172a)}.li-row--wrap .li-title{min-width:0;word-break:break-word;overflow-wrap:anywhere}.li-details{display:flex;flex-direction:column;gap:3px;font-size:.8125rem;line-height:1.4;color:var(--text-secondary, #64748b)}.li-detail{display:flex;align-items:center;gap:6px;min-width:0}.li-detail-icon{flex:0 0 auto;color:#94a3b8}.li-detail--warning,.li-detail--warning .li-detail-icon{color:#b45309}.li-detail--danger,.li-detail--danger .li-detail-icon{color:#b91c1c}.li-row--wrap .li-detail-text{min-width:0;word-break:break-word;overflow-wrap:anywhere}\n"],
30292
+ styles: ["ui-list-item{display:block}ui-list-item.li-bordered{border:1px solid var(--border, #e2e8f0);border-radius:12px;overflow:hidden;background:var(--surface, #fff);box-shadow:0 1px 2px #0f172a0a;margin-bottom:8px;transition:border-color .15s ease,box-shadow .15s ease}ui-list-item.li-bordered:last-child{margin-bottom:0}ui-list-item.li-bordered:hover{border-color:#cbd5e1;box-shadow:0 2px 6px #0f172a12}@media(prefers-reduced-motion:reduce){ui-list-item.li-bordered{transition:none}}.li-row{display:flex;align-items:flex-start;gap:14px;padding:12px 16px;border-bottom:1px solid var(--border, #e2e8f0);transition:background .12s}.li-row:last-child{border-bottom:none}.li-row:hover{background:var(--surface-hover, #f8fafc)}ui-list-item.li-bordered .li-row{border-bottom:none;padding:14px 16px}.li-row.li-row--highlighted{background:#f0fdf4}.li-row.li-row--highlighted:hover{background:#dcfce7}.li-row.li-row--static:hover{background:transparent}.li-row.li-row--static.li-row--highlighted,.li-row.li-row--static.li-row--highlighted:hover{background:#f0fdf4}.li-row.li-row--pressable{cursor:pointer}.li-row.li-row--pressable:focus-visible{outline:2px solid var(--primary, #2563eb);outline-offset:-2px}.li-body.li-body--static{cursor:default}.li-row [list-item-action],.li-row [li-action]{flex-shrink:0;align-self:center}.li-row>[list-item-image]{flex:0 0 auto;align-self:center}.li-row.li-row--disabled,.li-row.li-row--disabled:hover{opacity:.72;cursor:not-allowed;background-color:var(--surface-muted, #f8fafc);background-image:repeating-linear-gradient(135deg,transparent 0,transparent 6px,rgba(100,116,139,.1) 6px,rgba(100,116,139,.1) 12px)}.li-row.li-row--disabled .li-body,.li-row.li-row--disabled .li-input,.li-row.li-row--disabled.li-row--pressable{cursor:not-allowed}ui-list-item.li-disabled.li-bordered,ui-list-item.li-disabled.li-bordered:hover{border-style:dashed;box-shadow:none}.li-row.li-row--busy,.li-row.li-row--busy .li-body{cursor:progress}.li-spinner{flex:0 0 auto;align-self:center;box-sizing:border-box;width:16px;height:16px;border:2px solid rgba(100,116,139,.3);border-top-color:var(--text-secondary, #475569);border-radius:50%;animation:li-spin .6s linear infinite}@keyframes li-spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){.li-spinner{animation-duration:2s}}.li-input{margin-top:3px;flex-shrink:0;accent-color:#16a34a;width:1rem;height:1rem;cursor:pointer}.li-icon{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:12px}.li-icon--slate{background:#f1f5f9;color:#475569}.li-icon--amber{background:#fef3c7;color:#b45309}.li-icon--orange{background:#ffedd5;color:#c2410c}.li-icon--red{background:#fee2e2;color:#b91c1c}.li-icon--blue{background:#dbeafe;color:#1d4ed8}.li-icon--green{background:#dcfce7;color:#15803d}.li-icon--purple{background:#f3e8ff;color:#7e22ce}.li-icon--teal{background:#ccfbf1;color:#0f766e}.li-body{flex:1;min-width:0;cursor:pointer;display:flex;flex-direction:column;gap:6px}.li-title-row{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.li-title{font-size:.9375rem;font-weight:600;line-height:1.4;letter-spacing:-.005em;color:var(--text-primary, #0f172a)}.li-row--wrap .li-title{min-width:0;word-break:break-word;overflow-wrap:anywhere}.li-details{display:flex;flex-direction:column;gap:3px;font-size:.8125rem;line-height:1.4;color:var(--text-secondary, #64748b)}.li-detail{display:flex;align-items:center;gap:6px;min-width:0}.li-detail-icon{flex:0 0 auto;color:#94a3b8}.li-code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.92em;background:#f1f5f9;border-radius:4px;padding:1px 4px}.li-detail--warning,.li-detail--warning .li-detail-icon{color:#b45309}.li-detail--danger,.li-detail--danger .li-detail-icon{color:#b91c1c}.li-row--wrap .li-detail-text{min-width:0;word-break:break-word;overflow-wrap:anywhere}\n"],
29372
30293
  dependencies: [{
29373
30294
  kind: "component",
29374
30295
  type: BadgeComponent,
@@ -29428,7 +30349,16 @@ i0.ɵɵngDeclareClassMetadata({
29428
30349
  @if (detail.d) {
29429
30350
  <svg class="li-detail-icon" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path [attr.d]="detail.d" /></svg>
29430
30351
  }
29431
- <span class="li-detail-text" data-testid="list-item-detail">{{ detail.text }}</span>
30352
+ <span class="li-detail-text" data-testid="list-item-detail">
30353
+ @if (detail.segs; as segs) {
30354
+ @for (seg of segs; track $index) {
30355
+ @if (seg.bold && seg.code) { <strong><code class="li-code">{{ seg.text }}</code></strong> }
30356
+ @else if (seg.bold) { <strong>{{ seg.text }}</strong> }
30357
+ @else if (seg.code) { <code class="li-code">{{ seg.text }}</code> }
30358
+ @else { <ng-container>{{ seg.text }}</ng-container> }
30359
+ }
30360
+ } @else { <ng-container>{{ detail.text }}</ng-container> }
30361
+ </span>
29432
30362
  </span>
29433
30363
  }
29434
30364
  </div>
@@ -29486,7 +30416,7 @@ i0.ɵɵngDeclareClassMetadata({
29486
30416
 
29487
30417
  </div>
29488
30418
  `,
29489
- styles: ["ui-list-item{display:block}ui-list-item.li-bordered{border:1px solid var(--border, #e2e8f0);border-radius:12px;overflow:hidden;background:var(--surface, #fff);box-shadow:0 1px 2px #0f172a0a;margin-bottom:8px;transition:border-color .15s ease,box-shadow .15s ease}ui-list-item.li-bordered:last-child{margin-bottom:0}ui-list-item.li-bordered:hover{border-color:#cbd5e1;box-shadow:0 2px 6px #0f172a12}@media(prefers-reduced-motion:reduce){ui-list-item.li-bordered{transition:none}}.li-row{display:flex;align-items:flex-start;gap:14px;padding:12px 16px;border-bottom:1px solid var(--border, #e2e8f0);transition:background .12s}.li-row:last-child{border-bottom:none}.li-row:hover{background:var(--surface-hover, #f8fafc)}ui-list-item.li-bordered .li-row{border-bottom:none;padding:14px 16px}.li-row.li-row--highlighted{background:#f0fdf4}.li-row.li-row--highlighted:hover{background:#dcfce7}.li-row.li-row--static:hover{background:transparent}.li-row.li-row--static.li-row--highlighted,.li-row.li-row--static.li-row--highlighted:hover{background:#f0fdf4}.li-row.li-row--pressable{cursor:pointer}.li-row.li-row--pressable:focus-visible{outline:2px solid var(--primary, #2563eb);outline-offset:-2px}.li-body.li-body--static{cursor:default}.li-row [list-item-action],.li-row [li-action]{flex-shrink:0;align-self:center}.li-row>[list-item-image]{flex:0 0 auto;align-self:center}.li-row.li-row--disabled,.li-row.li-row--disabled:hover{opacity:.72;cursor:not-allowed;background-color:var(--surface-muted, #f8fafc);background-image:repeating-linear-gradient(135deg,transparent 0,transparent 6px,rgba(100,116,139,.1) 6px,rgba(100,116,139,.1) 12px)}.li-row.li-row--disabled .li-body,.li-row.li-row--disabled .li-input,.li-row.li-row--disabled.li-row--pressable{cursor:not-allowed}ui-list-item.li-disabled.li-bordered,ui-list-item.li-disabled.li-bordered:hover{border-style:dashed;box-shadow:none}.li-row.li-row--busy,.li-row.li-row--busy .li-body{cursor:progress}.li-spinner{flex:0 0 auto;align-self:center;box-sizing:border-box;width:16px;height:16px;border:2px solid rgba(100,116,139,.3);border-top-color:var(--text-secondary, #475569);border-radius:50%;animation:li-spin .6s linear infinite}@keyframes li-spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){.li-spinner{animation-duration:2s}}.li-input{margin-top:3px;flex-shrink:0;accent-color:#16a34a;width:1rem;height:1rem;cursor:pointer}.li-icon{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:12px}.li-icon--slate{background:#f1f5f9;color:#475569}.li-icon--amber{background:#fef3c7;color:#b45309}.li-icon--orange{background:#ffedd5;color:#c2410c}.li-icon--red{background:#fee2e2;color:#b91c1c}.li-icon--blue{background:#dbeafe;color:#1d4ed8}.li-icon--green{background:#dcfce7;color:#15803d}.li-icon--purple{background:#f3e8ff;color:#7e22ce}.li-icon--teal{background:#ccfbf1;color:#0f766e}.li-body{flex:1;min-width:0;cursor:pointer;display:flex;flex-direction:column;gap:6px}.li-title-row{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.li-title{font-size:.9375rem;font-weight:600;line-height:1.4;letter-spacing:-.005em;color:var(--text-primary, #0f172a)}.li-row--wrap .li-title{min-width:0;word-break:break-word;overflow-wrap:anywhere}.li-details{display:flex;flex-direction:column;gap:3px;font-size:.8125rem;line-height:1.4;color:var(--text-secondary, #64748b)}.li-detail{display:flex;align-items:center;gap:6px;min-width:0}.li-detail-icon{flex:0 0 auto;color:#94a3b8}.li-detail--warning,.li-detail--warning .li-detail-icon{color:#b45309}.li-detail--danger,.li-detail--danger .li-detail-icon{color:#b91c1c}.li-row--wrap .li-detail-text{min-width:0;word-break:break-word;overflow-wrap:anywhere}\n"]
30419
+ styles: ["ui-list-item{display:block}ui-list-item.li-bordered{border:1px solid var(--border, #e2e8f0);border-radius:12px;overflow:hidden;background:var(--surface, #fff);box-shadow:0 1px 2px #0f172a0a;margin-bottom:8px;transition:border-color .15s ease,box-shadow .15s ease}ui-list-item.li-bordered:last-child{margin-bottom:0}ui-list-item.li-bordered:hover{border-color:#cbd5e1;box-shadow:0 2px 6px #0f172a12}@media(prefers-reduced-motion:reduce){ui-list-item.li-bordered{transition:none}}.li-row{display:flex;align-items:flex-start;gap:14px;padding:12px 16px;border-bottom:1px solid var(--border, #e2e8f0);transition:background .12s}.li-row:last-child{border-bottom:none}.li-row:hover{background:var(--surface-hover, #f8fafc)}ui-list-item.li-bordered .li-row{border-bottom:none;padding:14px 16px}.li-row.li-row--highlighted{background:#f0fdf4}.li-row.li-row--highlighted:hover{background:#dcfce7}.li-row.li-row--static:hover{background:transparent}.li-row.li-row--static.li-row--highlighted,.li-row.li-row--static.li-row--highlighted:hover{background:#f0fdf4}.li-row.li-row--pressable{cursor:pointer}.li-row.li-row--pressable:focus-visible{outline:2px solid var(--primary, #2563eb);outline-offset:-2px}.li-body.li-body--static{cursor:default}.li-row [list-item-action],.li-row [li-action]{flex-shrink:0;align-self:center}.li-row>[list-item-image]{flex:0 0 auto;align-self:center}.li-row.li-row--disabled,.li-row.li-row--disabled:hover{opacity:.72;cursor:not-allowed;background-color:var(--surface-muted, #f8fafc);background-image:repeating-linear-gradient(135deg,transparent 0,transparent 6px,rgba(100,116,139,.1) 6px,rgba(100,116,139,.1) 12px)}.li-row.li-row--disabled .li-body,.li-row.li-row--disabled .li-input,.li-row.li-row--disabled.li-row--pressable{cursor:not-allowed}ui-list-item.li-disabled.li-bordered,ui-list-item.li-disabled.li-bordered:hover{border-style:dashed;box-shadow:none}.li-row.li-row--busy,.li-row.li-row--busy .li-body{cursor:progress}.li-spinner{flex:0 0 auto;align-self:center;box-sizing:border-box;width:16px;height:16px;border:2px solid rgba(100,116,139,.3);border-top-color:var(--text-secondary, #475569);border-radius:50%;animation:li-spin .6s linear infinite}@keyframes li-spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){.li-spinner{animation-duration:2s}}.li-input{margin-top:3px;flex-shrink:0;accent-color:#16a34a;width:1rem;height:1rem;cursor:pointer}.li-icon{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:12px}.li-icon--slate{background:#f1f5f9;color:#475569}.li-icon--amber{background:#fef3c7;color:#b45309}.li-icon--orange{background:#ffedd5;color:#c2410c}.li-icon--red{background:#fee2e2;color:#b91c1c}.li-icon--blue{background:#dbeafe;color:#1d4ed8}.li-icon--green{background:#dcfce7;color:#15803d}.li-icon--purple{background:#f3e8ff;color:#7e22ce}.li-icon--teal{background:#ccfbf1;color:#0f766e}.li-body{flex:1;min-width:0;cursor:pointer;display:flex;flex-direction:column;gap:6px}.li-title-row{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.li-title{font-size:.9375rem;font-weight:600;line-height:1.4;letter-spacing:-.005em;color:var(--text-primary, #0f172a)}.li-row--wrap .li-title{min-width:0;word-break:break-word;overflow-wrap:anywhere}.li-details{display:flex;flex-direction:column;gap:3px;font-size:.8125rem;line-height:1.4;color:var(--text-secondary, #64748b)}.li-detail{display:flex;align-items:center;gap:6px;min-width:0}.li-detail-icon{flex:0 0 auto;color:#94a3b8}.li-code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.92em;background:#f1f5f9;border-radius:4px;padding:1px 4px}.li-detail--warning,.li-detail--warning .li-detail-icon{color:#b45309}.li-detail--danger,.li-detail--danger .li-detail-icon{color:#b91c1c}.li-row--wrap .li-detail-text{min-width:0;word-break:break-word;overflow-wrap:anywhere}\n"]
29490
30420
  }]
29491
30421
  }],
29492
30422
  propDecorators: {
@@ -56899,6 +57829,8 @@ var ConversationsComponent = class ConversationsComponent {
56899
57829
  "showField",
56900
57830
  "showErrors",
56901
57831
  "toastOnReject",
57832
+ "listRejections",
57833
+ "ariaDescribedBy",
56902
57834
  "clearable",
56903
57835
  "removeLabel",
56904
57836
  "maxSize",
@@ -56919,6 +57851,7 @@ var ConversationsComponent = class ConversationsComponent {
56919
57851
  outputs: [
56920
57852
  "filesSelected",
56921
57853
  "fileRejected",
57854
+ "filesRejected",
56922
57855
  "fileRemoved",
56923
57856
  "invalidChange"
56924
57857
  ]
@@ -60474,6 +61407,6 @@ i0.ɵɵngDeclareClassMetadata({
60474
61407
  }]
60475
61408
  }
60476
61409
  });
60477
- export { ALLOCATION_CUSTOM, ASCII_SPECIAL_PASSWORD_RULES, ActionBarComponent, AddressInputComponent, AlertComponent, AppShellComponent, AudioPlayerComponent, AvatarComponent, BADGE_VARIANT_STYLES, BadgeComponent, BankAccountFormComponent, BarRowComponent, BoardCardDirective, BoardComponent, BulkMessagePanelComponent, BusinessHoursComponent, ButtonComponent, COMMON_DETAIL_GROUP_STYLES, CalendarComponent, CardListItemComponent, CheckboxComponent, CheckboxTrailingDirective, ChipComponent, ChipGroupComponent, ColorInputComponent, ColumnFilterComponent, ColumnsComponent, ComboboxComponent, ConfirmOutletComponent, ConfirmService, ContactPickerComponent, ConversationRichBodyComponent, ConversationsComponent, DEFAULT_ALLOCATION_MODES, DEFAULT_BANK_ACCOUNT_TYPE_OPTIONS, DEFAULT_BANK_HOLDER_TYPE_OPTIONS, DEFAULT_BANK_MANDATE_TEXT, DEFAULT_EMAIL_TEMPLATE_BLOCK_GROUPS, DEFAULT_EMAIL_TEMPLATE_VARIABLE_GROUPS, DEFAULT_PASSWORD_RULES, DEFAULT_PAYMENT_METHODS, DETAIL_CARD_HEADER_BG, DETAIL_GROUP_HEADER_BG, DROPDOWN_GROUP, DataTableComponent, DateInputComponent, DateRangePickerComponent, DatetimeInputComponent, DetailCardComponent, DiscountSelectorComponent, DividerComponent, DropdownComponent, EMAIL_BLOCK_DRAG_TYPE, EMAIL_TEMPLATE_MAX_BODY, EMAIL_TEMPLATE_MAX_TEXT, EMAIL_TEMPLATE_START_TEXT, EmailTemplateEditorComponent, EmptyStateComponent, ErrorComponent, ErrorStateComponent, FORGEROUTE_CONFIG, FadeComponent, FileInputComponent, FillViewportDirective, FixedFooterComponent, FormColSpanDirective, FormComponent, FormRowComponent, FormSectionComponent, HintComponent, ICON_NAMES, IDX_BEHAVIOR_SIGNALS, INTEGRATION_CATALOG, INTEGRATION_FIELD_DEFS, INTEGRATION_GROUP_ORDER, INTEGRATION_OPTION_DEFS, IconComponent, IconPickerComponent, ImageComponent, ImageGalleryComponent, ImageGalleryDialogComponent, ImagePreviewComponent, ImageRepositionComponent, ImportExportComponent, ImportSourceGridComponent, KeypadComponent, KpiCardComponent, LAYOUT_GAP_PX, LISTED_SPECIAL_PASSWORD_RULES, ListComponent, ListItemComponent, LiveRegionComponent, MAX_EMAIL_ADDRESS_LENGTH, MAX_PAYMENT_AMOUNT, MIN_PAYMENT_AMOUNT, ModalComponent, MoreMenuComponent, MultiSelectComponent, NOTES_MAX_LENGTH, NotesComponent, OfflineBannerComponent, OptionCardComponent, PASSWORD_MAX_LENGTH, PAYMENT_METHOD, PAYMENT_METHOD_PLUGIN, PHONE_NUMBER_AREA_CODE_LENGTH, PHONE_NUMBER_ZIP_LENGTH, PageComponent, PaginationComponent, PanelInfoListComponent, PasswordRequirementsComponent, PaymentCustomMethodComponent, PaymentMethodPlugin, PaymentSidePanelComponent, PdfHotspotComponent, PhoneNumberPickerComponent, PillTabPanelDirective, PillTabsComponent, ProgressBarComponent, ProgressRingComponent, QrCodeComponent, QuickFilterTabsComponent, RICH_TEXT_OPTIONS, RadioComponent, RadioGroupComponent, RadioMatrixComponent, RadioOptionContentDirective, ReadonlyFieldsetComponent, ReminderAlertsComponent, RichTextEditorComponent, SEMANTIC_BADGE_MAP, SETUP_DONE_KEY, SETUP_INTEGRATIONS, SearchInputComponent, SectionHeaderComponent, SelectComponent, SetupWizardComponent, SetupWizardStepDirective, SetupWizardStepHeaderDirective, ShareMenuComponent, ShowComponent, SidePanelComponent, SidebarLayoutComponent, SignaturePadComponent, SkeletonComponent, SnackbarComponent, SnackbarService, StackComponent, StarComponent, StepperComponent, SwatchPickerComponent, TableToolbarComponent, TextComponent, TextInputComponent, TextTemplatePickerComponent, TextareaInputComponent, TimeInputComponent, TimelineComponent, ToastComponent, ToastService, ToggleBadgeComponent, ToggleComponent, TooltipDirective, US_LOCATIONS, US_STATES, US_STATE_OPTIONS, US_ZIP_PATTERN, UiFieldValidity, acceptLabel, appShellGroupsStorageKey, autoVariant, blockHasContent, buildDefaultSchedule, buildPreviewDocument, buildVideoBlockHtml, builtInActionIcon, businessTimeOptions, callHost, conversationDateLabel, conversationHtmlToText, conversationInitial, conversationMessageStatusLabel, conversationMessageStatusMark, createFieldReveal, createPasswordPolicyValidator, decodeFilterValues, digitsOnly, downloadBlob, emailShareUrl, emptyAddress, encodeFilterValue, encodeFilterValues, errorContextInterceptor, escapeHtml, facebookShareUrl, fileMatchesAccept, fileNameFromContentDisposition, formatAddress, formatAddressValue, formatAddressValueOneLine, formatCategoryLabel, formatConversationPhone, formatConversationTime, formatCurrency, formatDuration, formatFileSize, formatIsoDate, formatIsoDateTime, formatMessageTime, formatPhone, formatPhoneDisplay, formatShortDate, formatTime, formatVideoDuration, getEligibleIds, getEligibleOptions, getErrorMessage, getInitials, gmailShareUrl, groupMessagesByDay, hostErrorMessage, humanReadableMessage, iconPath, insideEditorBlock, integrationPlainText, integrationsForApp, integrationsOnlyFor, isBlockDrag, isEmptyAddress, isValidAmount, isValidEmailAddress, isValidZip, isWebUrl, isoKey, issueToErrors, last4Error, linkedInShareUrl, maxLengthIssue, mergeDescribedBy, normalizeAddress, normalizeHexColor, outlookShareUrl, parseAddressOneLine, parseAddressValue, parseBizHours, parseIso, parseTime, passwordMeetsRules, periodGroup, pillTabDescriptionId, pillTabId, pillTabPanelId, pillTabTitleId, pluralize, provideForgerouteToast, reorderItems, requiredIssue, resolveLayoutGap, resolvePreset, serializeBizHours, serializedTextLength, setupIntegrations, splitIntro, terminalTimeoutText, terminalVerdict, todayInTimezone, truncateConversationText, xShareUrl };
61410
+ export { ALLOCATION_CUSTOM, ASCII_SPECIAL_PASSWORD_RULES, ActionBarComponent, AddressInputComponent, AlertComponent, AppShellComponent, AudioPlayerComponent, AvatarComponent, BADGE_VARIANT_STYLES, BadgeComponent, BankAccountFormComponent, BarRowComponent, BoardCardDirective, BoardComponent, BulkMessagePanelComponent, BusinessHoursComponent, ButtonComponent, COMMON_DETAIL_GROUP_STYLES, CalendarComponent, CardListItemComponent, CheckboxComponent, CheckboxTrailingDirective, ChipComponent, ChipGroupComponent, ColorInputComponent, ColumnFilterComponent, ColumnsComponent, ComboboxComponent, ConfirmOutletComponent, ConfirmService, ContactPickerComponent, ConversationRichBodyComponent, ConversationsComponent, CopyFieldComponent, DEFAULT_ALLOCATION_MODES, DEFAULT_BANK_ACCOUNT_TYPE_OPTIONS, DEFAULT_BANK_HOLDER_TYPE_OPTIONS, DEFAULT_BANK_MANDATE_TEXT, DEFAULT_EMAIL_TEMPLATE_BLOCK_GROUPS, DEFAULT_EMAIL_TEMPLATE_VARIABLE_GROUPS, DEFAULT_PASSWORD_RULES, DEFAULT_PAYMENT_METHODS, DETAIL_CARD_HEADER_BG, DETAIL_GROUP_HEADER_BG, DROPDOWN_GROUP, DataTableComponent, DateInputComponent, DateRangePickerComponent, DatetimeInputComponent, DetailCardComponent, DiscountSelectorComponent, DividerComponent, DropdownComponent, EMAIL_BLOCK_DRAG_TYPE, EMAIL_TEMPLATE_MAX_BODY, EMAIL_TEMPLATE_MAX_TEXT, EMAIL_TEMPLATE_START_TEXT, EmailTemplateEditorComponent, EmptyStateComponent, ErrorComponent, ErrorStateComponent, FORGEROUTE_CONFIG, FadeComponent, FileInputComponent, FillViewportDirective, FixedFooterComponent, FormColSpanDirective, FormComponent, FormRowComponent, FormSectionComponent, HintComponent, ICON_NAMES, IDX_BEHAVIOR_SIGNALS, INTEGRATION_CATALOG, INTEGRATION_FIELD_DEFS, INTEGRATION_GROUP_ORDER, INTEGRATION_OPTION_DEFS, IconComponent, IconPickerComponent, ImageComponent, ImageGalleryComponent, ImageGalleryDialogComponent, ImagePreviewComponent, ImageRepositionComponent, ImportExportComponent, ImportSourceGridComponent, KeypadComponent, KpiCardComponent, LAYOUT_GAP_PX, LISTED_SPECIAL_PASSWORD_RULES, ListComponent, ListItemComponent, LiveRegionComponent, MAX_EMAIL_ADDRESS_LENGTH, MAX_PAYMENT_AMOUNT, MIN_PAYMENT_AMOUNT, ModalComponent, MoreMenuComponent, MultiSelectComponent, NOTES_MAX_LENGTH, NotesComponent, OfflineBannerComponent, OptionCardComponent, PASSWORD_MAX_LENGTH, PAYMENT_METHOD, PAYMENT_METHOD_PLUGIN, PHONE_NUMBER_AREA_CODE_LENGTH, PHONE_NUMBER_ZIP_LENGTH, PageComponent, PaginationComponent, PanelInfoListComponent, PasswordRequirementsComponent, PaymentCustomMethodComponent, PaymentMethodPlugin, PaymentSidePanelComponent, PdfHotspotComponent, PhoneNumberPickerComponent, PillTabPanelDirective, PillTabsComponent, ProgressBarComponent, ProgressRingComponent, QrCodeComponent, QuickFilterTabsComponent, RICH_TEXT_OPTIONS, RadioComponent, RadioGroupComponent, RadioMatrixComponent, RadioOptionContentDirective, ReadonlyFieldsetComponent, ReminderAlertsComponent, RichTextEditorComponent, SEMANTIC_BADGE_MAP, SETUP_DONE_KEY, SETUP_INTEGRATIONS, SearchInputComponent, SectionHeaderComponent, SelectComponent, SetupWizardComponent, SetupWizardStepDirective, SetupWizardStepHeaderDirective, ShareMenuComponent, ShowComponent, SidePanelComponent, SidebarLayoutComponent, SignaturePadComponent, SkeletonComponent, SnackbarComponent, SnackbarService, StackComponent, StackedBarComponent, StarComponent, StepperComponent, SwatchPickerComponent, TableToolbarComponent, TextComponent, TextInputComponent, TextTemplatePickerComponent, TextareaInputComponent, TimeInputComponent, TimelineComponent, ToastComponent, ToastService, ToggleBadgeComponent, ToggleComponent, TooltipDirective, US_LOCATIONS, US_STATES, US_STATE_OPTIONS, US_ZIP_PATTERN, UiFieldValidity, acceptLabel, appShellGroupsStorageKey, autoVariant, blockHasContent, buildDefaultSchedule, buildPreviewDocument, buildVideoBlockHtml, builtInActionIcon, businessTimeOptions, callHost, conversationDateLabel, conversationHtmlToText, conversationInitial, conversationMessageStatusLabel, conversationMessageStatusMark, createFieldReveal, createPasswordPolicyValidator, decodeFilterValues, digitsOnly, downloadBlob, emailShareUrl, emptyAddress, encodeFilterValue, encodeFilterValues, errorContextInterceptor, escapeHtml, facebookShareUrl, fileMatchesAccept, fileNameFromContentDisposition, formatAddress, formatAddressValue, formatAddressValueOneLine, formatCategoryLabel, formatConversationPhone, formatConversationTime, formatCurrency, formatDuration, formatFileSize, formatIsoDate, formatIsoDateTime, formatMessageTime, formatPhone, formatPhoneDisplay, formatShortDate, formatTime, formatVideoDuration, getEligibleIds, getEligibleOptions, getErrorMessage, getInitials, gmailShareUrl, groupMessagesByDay, hostErrorMessage, humanReadableMessage, iconPath, insideEditorBlock, integrationPlainText, integrationsForApp, integrationsOnlyFor, isBlockDrag, isEmptyAddress, isValidAmount, isValidEmailAddress, isValidZip, isWebUrl, isoKey, issueToErrors, last4Error, linkedInShareUrl, maxLengthIssue, mergeDescribedBy, normalizeAddress, normalizeHexColor, outlookShareUrl, parseAddressOneLine, parseAddressValue, parseBizHours, parseIso, parseTime, passwordMeetsRules, periodGroup, pillTabDescriptionId, pillTabId, pillTabPanelId, pillTabTitleId, pluralize, provideForgerouteToast, reorderItems, requiredIssue, resolveLayoutGap, resolvePreset, serializeBizHours, serializedTextLength, setupIntegrations, splitIntro, terminalTimeoutText, terminalVerdict, todayInTimezone, truncateConversationText, xShareUrl };
60478
61411
 
60479
61412
  //# sourceMappingURL=forgeroute-ui.mjs.map