@forgeroute/ui 0.4.52 → 0.4.54

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.
@@ -5461,7 +5461,7 @@ var TextInputComponent = class TextInputComponent {
5461
5461
  </div>
5462
5462
  `,
5463
5463
  isInline: true,
5464
- styles: [":host{display:block}.ti-field{display:flex;flex-direction:column;gap:6px}.ti-label-row{display:flex;align-items:baseline;justify-content:space-between;gap:8px}.ti-label-row>[uiLabelEnd]{margin-left:auto}.ti-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.ti-required{color:#dc2626;margin-left:2px}.ti-prefixed{display:grid;grid-template-columns:minmax(0,1fr)}.ti-prefixed .ti-input{grid-row:var(--ti-input-row);grid-column:1}.ti-prefix{grid-row:var(--ti-input-row);grid-column:1;justify-self:start;align-self:center;margin-left:12px;font-size:.875rem;line-height:1;color:#64748b;pointer-events:none}@media(pointer:coarse),(max-width:480px){.ti-prefix{font-size:1rem}}.ti-disabled .ti-prefix{opacity:.5}.ti-reveal{grid-row:var(--ti-input-row);grid-column:1;justify-self:end;align-self:center;margin-right:6px;position:relative;display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;border:0;border-radius:6px;background:transparent;color:#64748b;cursor:pointer}.ti-reveal:hover:not(:disabled){color:#1e293b;background:#f1f5f9}.ti-reveal:focus-visible{outline:2px solid #3b82f6;outline-offset:0}.ti-reveal:disabled{opacity:.5;cursor:not-allowed}@media(pointer:coarse),(max-width:480px){.ti-reveal{width:44px;height:44px;margin-right:0}}.ti-input{width:100%;box-sizing:border-box;padding:9px 12px;font-size:.875rem;font-family:inherit;color:#1e293b;background:#fff;border:1px solid #7c8ba1;border-radius:8px;outline:none;transition:border-color .15s,box-shadow .15s}.ti-input::placeholder{color:#64748b;opacity:1}.ti-input:focus{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.ti-input:read-only{background:#f8fafc;cursor:default}.ti-error .ti-input{border-color:#ef4444}.ti-error .ti-input:focus{box-shadow:0 0 0 3px #ef44441f}.ti-disabled .ti-input{opacity:.5;cursor:not-allowed}.ti-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.ti-desc-error{color:#dc2626}@media(pointer:coarse),(max-width:480px){.ti-input{font-size:1rem}}@media(pointer:coarse),(max-width:480px){.ti-input{min-height:44px}}\n"],
5464
+ styles: [":host{display:block}.ti-field{display:flex;flex-direction:column;gap:6px}.ti-label-row{display:flex;align-items:baseline;justify-content:space-between;gap:8px}.ti-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.ti-required{color:#dc2626;margin-left:2px}.ti-prefixed{display:grid;grid-template-columns:minmax(0,1fr)}.ti-prefixed .ti-input{grid-row:var(--ti-input-row);grid-column:1}.ti-prefix{grid-row:var(--ti-input-row);grid-column:1;justify-self:start;align-self:center;margin-left:12px;font-size:.875rem;line-height:1;color:#64748b;pointer-events:none}@media(pointer:coarse),(max-width:480px){.ti-prefix{font-size:1rem}}.ti-disabled .ti-prefix{opacity:.5}.ti-reveal{grid-row:var(--ti-input-row);grid-column:1;justify-self:end;align-self:center;margin-right:6px;position:relative;display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;border:0;border-radius:6px;background:transparent;color:#64748b;cursor:pointer}.ti-reveal:hover:not(:disabled){color:#1e293b;background:#f1f5f9}.ti-reveal:focus-visible{outline:2px solid #3b82f6;outline-offset:0}.ti-reveal:disabled{opacity:.5;cursor:not-allowed}@media(pointer:coarse),(max-width:480px){.ti-reveal{width:44px;height:44px;margin-right:0}}.ti-input{width:100%;box-sizing:border-box;padding:9px 12px;font-size:.875rem;font-family:inherit;color:#1e293b;background:#fff;border:1px solid #7c8ba1;border-radius:8px;outline:none;transition:border-color .15s,box-shadow .15s}.ti-input::placeholder{color:#64748b;opacity:1}.ti-input:focus{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.ti-input:read-only{background:#f8fafc;cursor:default}.ti-error .ti-input{border-color:#ef4444}.ti-error .ti-input:focus{box-shadow:0 0 0 3px #ef44441f}.ti-disabled .ti-input{opacity:.5;cursor:not-allowed}.ti-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.ti-desc-error{color:#dc2626}@media(pointer:coarse),(max-width:480px){.ti-input{font-size:1rem}}@media(pointer:coarse),(max-width:480px){.ti-input{min-height:44px}}\n"],
5465
5465
  dependencies: [{
5466
5466
  kind: "component",
5467
5467
  type: PasswordRequirementsComponent,
@@ -5562,7 +5562,7 @@ i0.ɵɵngDeclareClassMetadata({
5562
5562
  }
5563
5563
  </div>
5564
5564
  `,
5565
- styles: [":host{display:block}.ti-field{display:flex;flex-direction:column;gap:6px}.ti-label-row{display:flex;align-items:baseline;justify-content:space-between;gap:8px}.ti-label-row>[uiLabelEnd]{margin-left:auto}.ti-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.ti-required{color:#dc2626;margin-left:2px}.ti-prefixed{display:grid;grid-template-columns:minmax(0,1fr)}.ti-prefixed .ti-input{grid-row:var(--ti-input-row);grid-column:1}.ti-prefix{grid-row:var(--ti-input-row);grid-column:1;justify-self:start;align-self:center;margin-left:12px;font-size:.875rem;line-height:1;color:#64748b;pointer-events:none}@media(pointer:coarse),(max-width:480px){.ti-prefix{font-size:1rem}}.ti-disabled .ti-prefix{opacity:.5}.ti-reveal{grid-row:var(--ti-input-row);grid-column:1;justify-self:end;align-self:center;margin-right:6px;position:relative;display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;border:0;border-radius:6px;background:transparent;color:#64748b;cursor:pointer}.ti-reveal:hover:not(:disabled){color:#1e293b;background:#f1f5f9}.ti-reveal:focus-visible{outline:2px solid #3b82f6;outline-offset:0}.ti-reveal:disabled{opacity:.5;cursor:not-allowed}@media(pointer:coarse),(max-width:480px){.ti-reveal{width:44px;height:44px;margin-right:0}}.ti-input{width:100%;box-sizing:border-box;padding:9px 12px;font-size:.875rem;font-family:inherit;color:#1e293b;background:#fff;border:1px solid #7c8ba1;border-radius:8px;outline:none;transition:border-color .15s,box-shadow .15s}.ti-input::placeholder{color:#64748b;opacity:1}.ti-input:focus{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.ti-input:read-only{background:#f8fafc;cursor:default}.ti-error .ti-input{border-color:#ef4444}.ti-error .ti-input:focus{box-shadow:0 0 0 3px #ef44441f}.ti-disabled .ti-input{opacity:.5;cursor:not-allowed}.ti-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.ti-desc-error{color:#dc2626}@media(pointer:coarse),(max-width:480px){.ti-input{font-size:1rem}}@media(pointer:coarse),(max-width:480px){.ti-input{min-height:44px}}\n"]
5565
+ styles: [":host{display:block}.ti-field{display:flex;flex-direction:column;gap:6px}.ti-label-row{display:flex;align-items:baseline;justify-content:space-between;gap:8px}.ti-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.ti-required{color:#dc2626;margin-left:2px}.ti-prefixed{display:grid;grid-template-columns:minmax(0,1fr)}.ti-prefixed .ti-input{grid-row:var(--ti-input-row);grid-column:1}.ti-prefix{grid-row:var(--ti-input-row);grid-column:1;justify-self:start;align-self:center;margin-left:12px;font-size:.875rem;line-height:1;color:#64748b;pointer-events:none}@media(pointer:coarse),(max-width:480px){.ti-prefix{font-size:1rem}}.ti-disabled .ti-prefix{opacity:.5}.ti-reveal{grid-row:var(--ti-input-row);grid-column:1;justify-self:end;align-self:center;margin-right:6px;position:relative;display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;border:0;border-radius:6px;background:transparent;color:#64748b;cursor:pointer}.ti-reveal:hover:not(:disabled){color:#1e293b;background:#f1f5f9}.ti-reveal:focus-visible{outline:2px solid #3b82f6;outline-offset:0}.ti-reveal:disabled{opacity:.5;cursor:not-allowed}@media(pointer:coarse),(max-width:480px){.ti-reveal{width:44px;height:44px;margin-right:0}}.ti-input{width:100%;box-sizing:border-box;padding:9px 12px;font-size:.875rem;font-family:inherit;color:#1e293b;background:#fff;border:1px solid #7c8ba1;border-radius:8px;outline:none;transition:border-color .15s,box-shadow .15s}.ti-input::placeholder{color:#64748b;opacity:1}.ti-input:focus{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.ti-input:read-only{background:#f8fafc;cursor:default}.ti-error .ti-input{border-color:#ef4444}.ti-error .ti-input:focus{box-shadow:0 0 0 3px #ef44441f}.ti-disabled .ti-input{opacity:.5;cursor:not-allowed}.ti-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.ti-desc-error{color:#dc2626}@media(pointer:coarse),(max-width:480px){.ti-input{font-size:1rem}}@media(pointer:coarse),(max-width:480px){.ti-input{min-height:44px}}\n"]
5566
5566
  }]
5567
5567
  }],
5568
5568
  ctorParameters: () => [],
@@ -11696,6 +11696,7 @@ var DataTableComponent = class DataTableComponent {
11696
11696
  this.showMoreActions = input(true, ...ngDevMode ? [{ debugName: "showMoreActions" }] : /* istanbul ignore next */ []);
11697
11697
  this.showSearch = input(true, ...ngDevMode ? [{ debugName: "showSearch" }] : /* istanbul ignore next */ []);
11698
11698
  this.showQuickTabs = input(true, ...ngDevMode ? [{ debugName: "showQuickTabs" }] : /* istanbul ignore next */ []);
11699
+ this.showPagination = input(true, ...ngDevMode ? [{ debugName: "showPagination" }] : /* istanbul ignore next */ []);
11699
11700
  this.stickyActions = input(false, ...ngDevMode ? [{ debugName: "stickyActions" }] : /* istanbul ignore next */ []);
11700
11701
  this.tableTitle = input("", ...ngDevMode ? [{ debugName: "tableTitle" }] : /* istanbul ignore next */ []);
11701
11702
  this._showHeader = computed(() => !!this.tableTitle() || this.showSearch() || this.showToolbar() || this._effectiveTabs().length > 0, ...ngDevMode ? [{ debugName: "_showHeader" }] : /* istanbul ignore next */ []);
@@ -12703,6 +12704,13 @@ var DataTableComponent = class DataTableComponent {
12703
12704
  isRequired: false,
12704
12705
  transformFunction: null
12705
12706
  },
12707
+ showPagination: {
12708
+ classPropertyName: "showPagination",
12709
+ publicName: "showPagination",
12710
+ isSignal: true,
12711
+ isRequired: false,
12712
+ transformFunction: null
12713
+ },
12706
12714
  stickyActions: {
12707
12715
  classPropertyName: "stickyActions",
12708
12716
  publicName: "stickyActions",
@@ -13468,7 +13476,7 @@ var DataTableComponent = class DataTableComponent {
13468
13476
  }
13469
13477
 
13470
13478
  <!-- ── PAGINATION ─────────────────────────────────────────── -->
13471
- @if (_total() > pageSize()) {
13479
+ @if (showPagination() && _total() > pageSize()) {
13472
13480
  <ui-pagination
13473
13481
  [page]="_page()"
13474
13482
  [pageSize]="pageSize()"
@@ -14536,7 +14544,7 @@ i0.ɵɵngDeclareClassMetadata({
14536
14544
  }
14537
14545
 
14538
14546
  <!-- ── PAGINATION ─────────────────────────────────────────── -->
14539
- @if (_total() > pageSize()) {
14547
+ @if (showPagination() && _total() > pageSize()) {
14540
14548
  <ui-pagination
14541
14549
  [page]="_page()"
14542
14550
  [pageSize]="pageSize()"
@@ -14709,6 +14717,14 @@ i0.ɵɵngDeclareClassMetadata({
14709
14717
  required: false
14710
14718
  }]
14711
14719
  }],
14720
+ showPagination: [{
14721
+ type: i0.Input,
14722
+ args: [{
14723
+ isSignal: true,
14724
+ alias: "showPagination",
14725
+ required: false
14726
+ }]
14727
+ }],
14712
14728
  stickyActions: [{
14713
14729
  type: i0.Input,
14714
14730
  args: [{
@@ -20868,18 +20884,21 @@ var TextareaInputComponent = class TextareaInputComponent {
20868
20884
  template: `
20869
20885
  <div class="ta-field" [class.ta-error]="_activeError()" [class.ta-disabled]="disabled()">
20870
20886
  @if (label()) {
20871
- @if (hintAsDescription()) {
20872
- <div class="ta-head">
20873
- <label class="ta-label" [for]="_inputId">{{ label() }}@if (required()) { <span class="ta-required" aria-hidden="true">*</span> }</label>
20874
- @if (hint()) { <span class="ta-hint-inline" [id]="_inputId + '-hint'">({{ hint() }})</span> }
20875
- </div>
20876
- } @else {
20877
- <label class="ta-label" [for]="_inputId">
20878
- {{ label() }}
20879
- @if (required()) { <span class="ta-required" aria-hidden="true">*</span> }
20880
- @if (hint()) { <span class="ta-hint-inline">({{ hint() }})</span> }
20881
- </label>
20882
- }
20887
+ <div class="ta-label-row">
20888
+ @if (hintAsDescription()) {
20889
+ <div class="ta-head">
20890
+ <label class="ta-label" [for]="_inputId">{{ label() }}@if (required()) { <span class="ta-required" aria-hidden="true">*</span> }</label>
20891
+ @if (hint()) { <span class="ta-hint-inline" [id]="_inputId + '-hint'">({{ hint() }})</span> }
20892
+ </div>
20893
+ } @else {
20894
+ <label class="ta-label" [for]="_inputId">
20895
+ {{ label() }}
20896
+ @if (required()) { <span class="ta-required" aria-hidden="true">*</span> }
20897
+ @if (hint()) { <span class="ta-hint-inline">({{ hint() }})</span> }
20898
+ </label>
20899
+ }
20900
+ <ng-content select="[uiLabelEnd]" />
20901
+ </div>
20883
20902
  }
20884
20903
  <textarea
20885
20904
  class="ta-input"
@@ -20907,7 +20926,7 @@ var TextareaInputComponent = class TextareaInputComponent {
20907
20926
  </div>
20908
20927
  `,
20909
20928
  isInline: true,
20910
- styles: [":host{display:block}.ta-field{display:flex;flex-direction:column;gap:6px}.ta-head{display:flex;flex-wrap:wrap;align-items:baseline;column-gap:4px;row-gap:2px}.ta-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.ta-required{color:#dc2626;margin-left:2px}.ta-hint-inline{font-size:.75rem;color:#64748b;font-weight:400;margin-left:4px}.ta-head .ta-hint-inline{margin-left:0;line-height:1}.ta-input{width:100%;box-sizing:border-box;padding:9px 12px;font-size:.875rem;font-family:inherit;color:#1e293b;background:#fff;border:1px solid #7c8ba1;border-radius:8px;outline:none;resize:vertical;transition:border-color .15s,box-shadow .15s}.ta-input::placeholder{color:#64748b;opacity:1}.ta-input:focus{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.ta-input:read-only{background:#f8fafc;cursor:default}.ta-input.ta-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,Liberation Mono,monospace}@media(min-width:481px)and (pointer:fine){.ta-input.ta-mono{font-size:.8125rem}}.ta-error .ta-input{border-color:#ef4444}.ta-error .ta-input:focus{box-shadow:0 0 0 3px #ef44441f}.ta-disabled .ta-input{opacity:.5;cursor:not-allowed}.ta-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.ta-desc-error{color:#dc2626}@media(pointer:coarse),(max-width:480px){.ta-input{font-size:1rem}}\n"],
20929
+ styles: [":host{display:block}.ta-field{display:flex;flex-direction:column;gap:6px}.ta-label-row{display:flex;align-items:center;justify-content:space-between;gap:8px}.ta-head{display:flex;flex-wrap:wrap;align-items:baseline;column-gap:4px;row-gap:2px}.ta-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.ta-required{color:#dc2626;margin-left:2px}.ta-hint-inline{font-size:.75rem;color:#64748b;font-weight:400;margin-left:4px}.ta-head .ta-hint-inline{margin-left:0;line-height:1}.ta-input{width:100%;box-sizing:border-box;padding:9px 12px;font-size:.875rem;font-family:inherit;color:#1e293b;background:#fff;border:1px solid #7c8ba1;border-radius:8px;outline:none;resize:vertical;transition:border-color .15s,box-shadow .15s}.ta-input::placeholder{color:#64748b;opacity:1}.ta-input:focus{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.ta-input:read-only{background:#f8fafc;cursor:default}.ta-input.ta-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,Liberation Mono,monospace}@media(min-width:481px)and (pointer:fine){.ta-input.ta-mono{font-size:.8125rem}}.ta-error .ta-input{border-color:#ef4444}.ta-error .ta-input:focus{box-shadow:0 0 0 3px #ef44441f}.ta-disabled .ta-input{opacity:.5;cursor:not-allowed}.ta-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.ta-desc-error{color:#dc2626}@media(pointer:coarse),(max-width:480px){.ta-input{font-size:1rem}}\n"],
20911
20930
  changeDetection: i0.ChangeDetectionStrategy.OnPush
20912
20931
  });
20913
20932
  }
@@ -20942,18 +20961,21 @@ i0.ɵɵngDeclareClassMetadata({
20942
20961
  template: `
20943
20962
  <div class="ta-field" [class.ta-error]="_activeError()" [class.ta-disabled]="disabled()">
20944
20963
  @if (label()) {
20945
- @if (hintAsDescription()) {
20946
- <div class="ta-head">
20947
- <label class="ta-label" [for]="_inputId">{{ label() }}@if (required()) { <span class="ta-required" aria-hidden="true">*</span> }</label>
20948
- @if (hint()) { <span class="ta-hint-inline" [id]="_inputId + '-hint'">({{ hint() }})</span> }
20949
- </div>
20950
- } @else {
20951
- <label class="ta-label" [for]="_inputId">
20952
- {{ label() }}
20953
- @if (required()) { <span class="ta-required" aria-hidden="true">*</span> }
20954
- @if (hint()) { <span class="ta-hint-inline">({{ hint() }})</span> }
20955
- </label>
20956
- }
20964
+ <div class="ta-label-row">
20965
+ @if (hintAsDescription()) {
20966
+ <div class="ta-head">
20967
+ <label class="ta-label" [for]="_inputId">{{ label() }}@if (required()) { <span class="ta-required" aria-hidden="true">*</span> }</label>
20968
+ @if (hint()) { <span class="ta-hint-inline" [id]="_inputId + '-hint'">({{ hint() }})</span> }
20969
+ </div>
20970
+ } @else {
20971
+ <label class="ta-label" [for]="_inputId">
20972
+ {{ label() }}
20973
+ @if (required()) { <span class="ta-required" aria-hidden="true">*</span> }
20974
+ @if (hint()) { <span class="ta-hint-inline">({{ hint() }})</span> }
20975
+ </label>
20976
+ }
20977
+ <ng-content select="[uiLabelEnd]" />
20978
+ </div>
20957
20979
  }
20958
20980
  <textarea
20959
20981
  class="ta-input"
@@ -20980,7 +21002,7 @@ i0.ɵɵngDeclareClassMetadata({
20980
21002
  }
20981
21003
  </div>
20982
21004
  `,
20983
- styles: [":host{display:block}.ta-field{display:flex;flex-direction:column;gap:6px}.ta-head{display:flex;flex-wrap:wrap;align-items:baseline;column-gap:4px;row-gap:2px}.ta-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.ta-required{color:#dc2626;margin-left:2px}.ta-hint-inline{font-size:.75rem;color:#64748b;font-weight:400;margin-left:4px}.ta-head .ta-hint-inline{margin-left:0;line-height:1}.ta-input{width:100%;box-sizing:border-box;padding:9px 12px;font-size:.875rem;font-family:inherit;color:#1e293b;background:#fff;border:1px solid #7c8ba1;border-radius:8px;outline:none;resize:vertical;transition:border-color .15s,box-shadow .15s}.ta-input::placeholder{color:#64748b;opacity:1}.ta-input:focus{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.ta-input:read-only{background:#f8fafc;cursor:default}.ta-input.ta-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,Liberation Mono,monospace}@media(min-width:481px)and (pointer:fine){.ta-input.ta-mono{font-size:.8125rem}}.ta-error .ta-input{border-color:#ef4444}.ta-error .ta-input:focus{box-shadow:0 0 0 3px #ef44441f}.ta-disabled .ta-input{opacity:.5;cursor:not-allowed}.ta-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.ta-desc-error{color:#dc2626}@media(pointer:coarse),(max-width:480px){.ta-input{font-size:1rem}}\n"]
21005
+ styles: [":host{display:block}.ta-field{display:flex;flex-direction:column;gap:6px}.ta-label-row{display:flex;align-items:center;justify-content:space-between;gap:8px}.ta-head{display:flex;flex-wrap:wrap;align-items:baseline;column-gap:4px;row-gap:2px}.ta-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.ta-required{color:#dc2626;margin-left:2px}.ta-hint-inline{font-size:.75rem;color:#64748b;font-weight:400;margin-left:4px}.ta-head .ta-hint-inline{margin-left:0;line-height:1}.ta-input{width:100%;box-sizing:border-box;padding:9px 12px;font-size:.875rem;font-family:inherit;color:#1e293b;background:#fff;border:1px solid #7c8ba1;border-radius:8px;outline:none;resize:vertical;transition:border-color .15s,box-shadow .15s}.ta-input::placeholder{color:#64748b;opacity:1}.ta-input:focus{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.ta-input:read-only{background:#f8fafc;cursor:default}.ta-input.ta-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,Liberation Mono,monospace}@media(min-width:481px)and (pointer:fine){.ta-input.ta-mono{font-size:.8125rem}}.ta-error .ta-input{border-color:#ef4444}.ta-error .ta-input:focus{box-shadow:0 0 0 3px #ef44441f}.ta-disabled .ta-input{opacity:.5;cursor:not-allowed}.ta-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.ta-desc-error{color:#dc2626}@media(pointer:coarse),(max-width:480px){.ta-input{font-size:1rem}}\n"]
20984
21006
  }]
20985
21007
  }],
20986
21008
  ctorParameters: () => [],
@@ -24892,8 +24914,9 @@ var MultiSelectComponent = class MultiSelectComponent {
24892
24914
  this._selectedSet = computed(() => new Set(this.selected()), ...ngDevMode ? [{ debugName: "_selectedSet" }] : /* istanbul ignore next */ []);
24893
24915
  this._selectedOptions = computed(() => this.options().filter((o) => this._selectedSet().has(o.value)), ...ngDevMode ? [{ debugName: "_selectedOptions" }] : /* istanbul ignore next */ []);
24894
24916
  this._filteredOptions = computed(() => {
24895
- const q = this._query().trim().toLowerCase();
24896
- return q ? this.options().filter((o) => o.label.toLowerCase().includes(q)) : this.options();
24917
+ const fold = (v) => v.normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase();
24918
+ const q = fold(this._query().trim());
24919
+ return q ? this.options().filter((o) => fold(o.label).includes(q)) : this.options();
24897
24920
  }, ...ngDevMode ? [{ debugName: "_filteredOptions" }] : /* istanbul ignore next */ []);
24898
24921
  this._onChange = (_) => {};
24899
24922
  this._onTouched = () => {};
@@ -25063,9 +25086,9 @@ var MultiSelectComponent = class MultiSelectComponent {
25063
25086
  class="ms-trigger"
25064
25087
  [class.ms-open]="_open()"
25065
25088
  [disabled]="disabled()"
25066
- aria-haspopup="listbox"
25089
+ aria-haspopup="true"
25067
25090
  [attr.aria-expanded]="_open()"
25068
- [attr.aria-controls]="_open() ? _id + '-list' : null"
25091
+ [attr.aria-controls]="_open() ? _id + '-options' : null"
25069
25092
  [attr.aria-labelledby]="label() ? _id + '-label' : null"
25070
25093
  [attr.aria-describedby]="error() ? _id + '-error' : (hint() ? _id + '-hint' : null)"
25071
25094
  [attr.aria-invalid]="error() ? 'true' : null"
@@ -25089,14 +25112,14 @@ var MultiSelectComponent = class MultiSelectComponent {
25089
25112
  (input)="_query.set($any($event.target).value)" />
25090
25113
  </div>
25091
25114
  }
25092
- <div class="ms-options" role="listbox" aria-multiselectable="true" [attr.aria-labelledby]="label() ? _id + '-label' : null">
25115
+ <div class="ms-options" role="group" [id]="_id + '-options'" [attr.aria-labelledby]="label() ? _id + '-label' : null">
25093
25116
  @for (opt of _filteredOptions(); track opt.value) {
25094
- <div class="ms-option" role="option" [attr.aria-selected]="_selectedSet().has(opt.value)" [class.ms-option-selected]="_selectedSet().has(opt.value)">
25117
+ <div class="ms-option" [class.ms-option-selected]="_selectedSet().has(opt.value)">
25095
25118
  <ui-checkbox
25096
25119
  [label]="opt.label"
25097
25120
  [checked]="_selectedSet().has(opt.value)"
25121
+ [description]="opt.description ?? ''"
25098
25122
  (checkedChange)="toggleValue(opt.value)" />
25099
- @if (opt.description) { <p class="ms-option-desc">{{ opt.description }}</p> }
25100
25123
  </div>
25101
25124
  } @empty {
25102
25125
  <div class="ms-empty">No options found</div>
@@ -25114,7 +25137,7 @@ var MultiSelectComponent = class MultiSelectComponent {
25114
25137
  </div>
25115
25138
  `,
25116
25139
  isInline: true,
25117
- styles: [":host{display:block}.ms-field{display:flex;flex-direction:column;gap:6px}.ms-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.ms-required{color:#dc2626;margin-left:2px}.ms-tags{display:flex;flex-wrap:wrap;gap:6px}.ms-wrap{position:relative}.ms-trigger{width:100%;box-sizing:border-box;display:flex;align-items:center;justify-content:space-between;padding:9px 10px 9px 12px;font-size:.875rem;font-family:inherit;text-align:left;color:#1e293b;background:#fff;border:1px solid #7c8ba1;border-radius:8px;cursor:pointer;outline:none;transition:border-color .15s,box-shadow .15s}.ms-trigger:focus-visible,.ms-trigger.ms-open{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.ms-has-error .ms-trigger{border-color:#ef4444}.ms-disabled .ms-trigger{opacity:.5;cursor:not-allowed}.ms-placeholder{color:#64748b}.ms-chevron{color:#64748b;flex-shrink:0;margin-left:8px;transition:transform .2s ease}.ms-chevron-open{transform:rotate(180deg)}.ms-dropdown{position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:50;display:flex;flex-direction:column;max-height:260px;background:#fff;border:1px solid #e2e8f0;border-radius:8px;box-shadow:0 4px 16px #0f172a1a}.ms-search-wrap{padding:8px;border-bottom:1px solid #e2e8f0}.ms-search{width:100%;box-sizing:border-box;padding:7px 10px;font-size:.8125rem;font-family:inherit;color:#1e293b;border:1px solid #7c8ba1;border-radius:6px;outline:none}.ms-search::placeholder{color:#64748b;opacity:1}.ms-search:focus{border-color:#3b82f6}.ms-options{overflow-y:auto;padding:4px 0}.ms-option{padding:7px 12px;font-size:.8125rem}.ms-option:hover{background:#f8fafc}.ms-option-selected{background:#eff6ff}.ms-option-desc{margin:2px 0 0 26px;font-size:.75rem;line-height:1.4;color:#64748b}.ms-empty{padding:16px;text-align:center;color:#94a3b8;font-size:.8125rem}.ms-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.ms-desc-error{color:#dc2626}@media(max-width:480px){.ms-trigger,.ms-search{font-size:1rem}}\n"],
25140
+ styles: [":host{display:block}.ms-field{display:flex;flex-direction:column;gap:6px}.ms-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.ms-required{color:#dc2626;margin-left:2px}.ms-tags{display:flex;flex-wrap:wrap;gap:6px}.ms-wrap{position:relative}.ms-trigger{width:100%;box-sizing:border-box;display:flex;align-items:center;justify-content:space-between;padding:9px 10px 9px 12px;font-size:.875rem;font-family:inherit;text-align:left;color:#1e293b;background:#fff;border:1px solid #7c8ba1;border-radius:8px;cursor:pointer;outline:none;transition:border-color .15s,box-shadow .15s}.ms-trigger:focus-visible,.ms-trigger.ms-open{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.ms-has-error .ms-trigger{border-color:#ef4444}.ms-disabled .ms-trigger{opacity:.5;cursor:not-allowed}.ms-placeholder{color:#64748b}.ms-chevron{color:#64748b;flex-shrink:0;margin-left:8px;transition:transform .2s ease}.ms-chevron-open{transform:rotate(180deg)}.ms-dropdown{position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:50;display:flex;flex-direction:column;max-height:260px;background:#fff;border:1px solid #e2e8f0;border-radius:8px;box-shadow:0 4px 16px #0f172a1a}.ms-search-wrap{padding:8px;border-bottom:1px solid #e2e8f0}.ms-search{width:100%;box-sizing:border-box;padding:7px 10px;font-size:.8125rem;font-family:inherit;color:#1e293b;border:1px solid #7c8ba1;border-radius:6px;outline:none}.ms-search::placeholder{color:#64748b;opacity:1}.ms-search:focus{border-color:#3b82f6}.ms-options{overflow-y:auto;padding:4px 0}.ms-option{padding:7px 12px;font-size:.8125rem}.ms-option:hover{background:#f8fafc}.ms-option-selected{background:#eff6ff}.ms-empty{padding:16px;text-align:center;color:#94a3b8;font-size:.8125rem}.ms-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.ms-desc-error{color:#dc2626}@media(max-width:480px){.ms-trigger,.ms-search{font-size:1rem}}\n"],
25118
25141
  dependencies: [{
25119
25142
  kind: "component",
25120
25143
  type: ChipComponent,
@@ -25201,9 +25224,9 @@ i0.ɵɵngDeclareClassMetadata({
25201
25224
  class="ms-trigger"
25202
25225
  [class.ms-open]="_open()"
25203
25226
  [disabled]="disabled()"
25204
- aria-haspopup="listbox"
25227
+ aria-haspopup="true"
25205
25228
  [attr.aria-expanded]="_open()"
25206
- [attr.aria-controls]="_open() ? _id + '-list' : null"
25229
+ [attr.aria-controls]="_open() ? _id + '-options' : null"
25207
25230
  [attr.aria-labelledby]="label() ? _id + '-label' : null"
25208
25231
  [attr.aria-describedby]="error() ? _id + '-error' : (hint() ? _id + '-hint' : null)"
25209
25232
  [attr.aria-invalid]="error() ? 'true' : null"
@@ -25227,14 +25250,14 @@ i0.ɵɵngDeclareClassMetadata({
25227
25250
  (input)="_query.set($any($event.target).value)" />
25228
25251
  </div>
25229
25252
  }
25230
- <div class="ms-options" role="listbox" aria-multiselectable="true" [attr.aria-labelledby]="label() ? _id + '-label' : null">
25253
+ <div class="ms-options" role="group" [id]="_id + '-options'" [attr.aria-labelledby]="label() ? _id + '-label' : null">
25231
25254
  @for (opt of _filteredOptions(); track opt.value) {
25232
- <div class="ms-option" role="option" [attr.aria-selected]="_selectedSet().has(opt.value)" [class.ms-option-selected]="_selectedSet().has(opt.value)">
25255
+ <div class="ms-option" [class.ms-option-selected]="_selectedSet().has(opt.value)">
25233
25256
  <ui-checkbox
25234
25257
  [label]="opt.label"
25235
25258
  [checked]="_selectedSet().has(opt.value)"
25259
+ [description]="opt.description ?? ''"
25236
25260
  (checkedChange)="toggleValue(opt.value)" />
25237
- @if (opt.description) { <p class="ms-option-desc">{{ opt.description }}</p> }
25238
25261
  </div>
25239
25262
  } @empty {
25240
25263
  <div class="ms-empty">No options found</div>
@@ -25251,7 +25274,7 @@ i0.ɵɵngDeclareClassMetadata({
25251
25274
  }
25252
25275
  </div>
25253
25276
  `,
25254
- styles: [":host{display:block}.ms-field{display:flex;flex-direction:column;gap:6px}.ms-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.ms-required{color:#dc2626;margin-left:2px}.ms-tags{display:flex;flex-wrap:wrap;gap:6px}.ms-wrap{position:relative}.ms-trigger{width:100%;box-sizing:border-box;display:flex;align-items:center;justify-content:space-between;padding:9px 10px 9px 12px;font-size:.875rem;font-family:inherit;text-align:left;color:#1e293b;background:#fff;border:1px solid #7c8ba1;border-radius:8px;cursor:pointer;outline:none;transition:border-color .15s,box-shadow .15s}.ms-trigger:focus-visible,.ms-trigger.ms-open{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.ms-has-error .ms-trigger{border-color:#ef4444}.ms-disabled .ms-trigger{opacity:.5;cursor:not-allowed}.ms-placeholder{color:#64748b}.ms-chevron{color:#64748b;flex-shrink:0;margin-left:8px;transition:transform .2s ease}.ms-chevron-open{transform:rotate(180deg)}.ms-dropdown{position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:50;display:flex;flex-direction:column;max-height:260px;background:#fff;border:1px solid #e2e8f0;border-radius:8px;box-shadow:0 4px 16px #0f172a1a}.ms-search-wrap{padding:8px;border-bottom:1px solid #e2e8f0}.ms-search{width:100%;box-sizing:border-box;padding:7px 10px;font-size:.8125rem;font-family:inherit;color:#1e293b;border:1px solid #7c8ba1;border-radius:6px;outline:none}.ms-search::placeholder{color:#64748b;opacity:1}.ms-search:focus{border-color:#3b82f6}.ms-options{overflow-y:auto;padding:4px 0}.ms-option{padding:7px 12px;font-size:.8125rem}.ms-option:hover{background:#f8fafc}.ms-option-selected{background:#eff6ff}.ms-option-desc{margin:2px 0 0 26px;font-size:.75rem;line-height:1.4;color:#64748b}.ms-empty{padding:16px;text-align:center;color:#94a3b8;font-size:.8125rem}.ms-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.ms-desc-error{color:#dc2626}@media(max-width:480px){.ms-trigger,.ms-search{font-size:1rem}}\n"]
25277
+ styles: [":host{display:block}.ms-field{display:flex;flex-direction:column;gap:6px}.ms-label{font-size:.8125rem;font-weight:600;color:#374151;line-height:1}.ms-required{color:#dc2626;margin-left:2px}.ms-tags{display:flex;flex-wrap:wrap;gap:6px}.ms-wrap{position:relative}.ms-trigger{width:100%;box-sizing:border-box;display:flex;align-items:center;justify-content:space-between;padding:9px 10px 9px 12px;font-size:.875rem;font-family:inherit;text-align:left;color:#1e293b;background:#fff;border:1px solid #7c8ba1;border-radius:8px;cursor:pointer;outline:none;transition:border-color .15s,box-shadow .15s}.ms-trigger:focus-visible,.ms-trigger.ms-open{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61f}.ms-has-error .ms-trigger{border-color:#ef4444}.ms-disabled .ms-trigger{opacity:.5;cursor:not-allowed}.ms-placeholder{color:#64748b}.ms-chevron{color:#64748b;flex-shrink:0;margin-left:8px;transition:transform .2s ease}.ms-chevron-open{transform:rotate(180deg)}.ms-dropdown{position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:50;display:flex;flex-direction:column;max-height:260px;background:#fff;border:1px solid #e2e8f0;border-radius:8px;box-shadow:0 4px 16px #0f172a1a}.ms-search-wrap{padding:8px;border-bottom:1px solid #e2e8f0}.ms-search{width:100%;box-sizing:border-box;padding:7px 10px;font-size:.8125rem;font-family:inherit;color:#1e293b;border:1px solid #7c8ba1;border-radius:6px;outline:none}.ms-search::placeholder{color:#64748b;opacity:1}.ms-search:focus{border-color:#3b82f6}.ms-options{overflow-y:auto;padding:4px 0}.ms-option{padding:7px 12px;font-size:.8125rem}.ms-option:hover{background:#f8fafc}.ms-option-selected{background:#eff6ff}.ms-empty{padding:16px;text-align:center;color:#94a3b8;font-size:.8125rem}.ms-desc{margin:0;font-size:.75rem;line-height:1.4;color:#64748b}.ms-desc-error{color:#dc2626}@media(max-width:480px){.ms-trigger,.ms-search{font-size:1rem}}\n"]
25255
25278
  }]
25256
25279
  }],
25257
25280
  propDecorators: {
@@ -26111,7 +26134,7 @@ var TextTemplatePickerComponent = class TextTemplatePickerComponent {
26111
26134
  this._matches().forEach((v, index) => {
26112
26135
  if (v.group && v.group !== last) rows.push({
26113
26136
  kind: "group",
26114
- key: "g:" + v.group,
26137
+ key: "g:" + rows.length + ":" + v.group,
26115
26138
  text: v.group
26116
26139
  });
26117
26140
  last = v.group;
@@ -26125,15 +26148,17 @@ var TextTemplatePickerComponent = class TextTemplatePickerComponent {
26125
26148
  });
26126
26149
  return rows;
26127
26150
  }, ...ngDevMode ? [{ debugName: "_rows" }] : /* istanbul ignore next */ []);
26128
- this._activeId = computed(() => this._matches().length ? `${this._id}-o${this._active()}` : null, ...ngDevMode ? [{ debugName: "_activeId" }] : /* istanbul ignore next */ []);
26151
+ this._activeIndex = computed(() => Math.min(this._active(), Math.max(0, this._matches().length - 1)), ...ngDevMode ? [{ debugName: "_activeIndex" }] : /* istanbul ignore next */ []);
26152
+ this._activeId = computed(() => this._matches().length ? `${this._id}-o${this._activeIndex()}` : null, ...ngDevMode ? [{ debugName: "_activeId" }] : /* istanbul ignore next */ []);
26129
26153
  this._status = computed(() => {
26130
26154
  const n = this._matches().length;
26131
26155
  return n === 0 ? "No variables found" : n === 1 ? "1 variable" : `${n} variables`;
26132
26156
  }, ...ngDevMode ? [{ debugName: "_status" }] : /* istanbul ignore next */ []);
26133
26157
  this.onAnyScroll = (event) => {
26134
- if (!(event.target instanceof Node && this.host.nativeElement.contains(event.target))) this.close(false);
26158
+ if (!(event.target instanceof Node && this.host.nativeElement.contains(event.target))) this.follow();
26135
26159
  };
26136
- inject(DestroyRef).onDestroy(() => window.removeEventListener("scroll", this.onAnyScroll, true));
26160
+ this.onViewport = () => this.follow();
26161
+ inject(DestroyRef).onDestroy(() => this.unlisten());
26137
26162
  }
26138
26163
  static fold(s) {
26139
26164
  return s.normalize("NFD").replace(/[̀-ͯ]/g, "").toLowerCase();
@@ -26153,6 +26178,8 @@ var TextTemplatePickerComponent = class TextTemplatePickerComponent {
26153
26178
  this.place();
26154
26179
  this._open.set(true);
26155
26180
  window.addEventListener("scroll", this.onAnyScroll, true);
26181
+ window.visualViewport?.addEventListener("resize", this.onViewport);
26182
+ window.visualViewport?.addEventListener("scroll", this.onViewport);
26156
26183
  afterNextRender(() => this.host.nativeElement.querySelector(".ttp-search")?.focus(), { injector: this.injector });
26157
26184
  }
26158
26185
  place() {
@@ -26168,6 +26195,9 @@ var TextTemplatePickerComponent = class TextTemplatePickerComponent {
26168
26195
  this._top.set(up ? null : r.bottom + gap);
26169
26196
  this._bottom.set(up ? vh - r.top + gap : null);
26170
26197
  }
26198
+ onPanelMouseDown(event) {
26199
+ if (!(event.target instanceof HTMLInputElement)) event.preventDefault();
26200
+ }
26171
26201
  onQuery(value) {
26172
26202
  this._query.set(value);
26173
26203
  this._active.set(0);
@@ -26177,7 +26207,7 @@ var TextTemplatePickerComponent = class TextTemplatePickerComponent {
26177
26207
  const n = this._matches().length;
26178
26208
  if (event.key === "ArrowDown" || event.key === "ArrowUp") {
26179
26209
  event.preventDefault();
26180
- if (n) this._active.set((this._active() + (event.key === "ArrowDown" ? 1 : -1) + n) % n);
26210
+ if (n) this._active.set((this._activeIndex() + (event.key === "ArrowDown" ? 1 : -1) + n) % n);
26181
26211
  this.scrollActive();
26182
26212
  } else if (event.key === "Home" || event.key === "End") {
26183
26213
  if (n) {
@@ -26187,9 +26217,9 @@ var TextTemplatePickerComponent = class TextTemplatePickerComponent {
26187
26217
  }
26188
26218
  } else if (event.key === "Enter") {
26189
26219
  event.preventDefault();
26190
- const v = this._matches()[this._active()];
26220
+ const v = this._matches()[this._activeIndex()];
26191
26221
  if (v) this.pick(v);
26192
- } else if (event.key === "Tab") this.close(false);
26222
+ } else if (event.key === "Tab") this.close(true);
26193
26223
  }
26194
26224
  pick(variable) {
26195
26225
  this.picked.emit(variable.value);
@@ -26203,7 +26233,7 @@ var TextTemplatePickerComponent = class TextTemplatePickerComponent {
26203
26233
  close(refocus) {
26204
26234
  this._open.set(false);
26205
26235
  this._query.set("");
26206
- window.removeEventListener("scroll", this.onAnyScroll, true);
26236
+ this.unlisten();
26207
26237
  if (refocus) this.host.nativeElement.querySelector(".ttp-trigger")?.focus();
26208
26238
  }
26209
26239
  scrollActive() {
@@ -26213,7 +26243,18 @@ var TextTemplatePickerComponent = class TextTemplatePickerComponent {
26213
26243
  if (this._open() && !this.host.nativeElement.contains(event.target)) this.close(false);
26214
26244
  }
26215
26245
  onResize() {
26216
- if (this._open()) this.close(false);
26246
+ this.follow();
26247
+ }
26248
+ unlisten() {
26249
+ window.removeEventListener("scroll", this.onAnyScroll, true);
26250
+ window.visualViewport?.removeEventListener("resize", this.onViewport);
26251
+ window.visualViewport?.removeEventListener("scroll", this.onViewport);
26252
+ }
26253
+ follow() {
26254
+ if (!this._open()) return;
26255
+ const r = this.host.nativeElement.querySelector(".ttp-trigger").getBoundingClientRect();
26256
+ if (r.bottom < 0 || r.top > window.innerHeight || r.right < 0 || r.left > window.innerWidth) this.close(false);
26257
+ else this.place();
26217
26258
  }
26218
26259
  static {
26219
26260
  this.ɵfac = i0.ɵɵngDeclareFactory({
@@ -26278,7 +26319,7 @@ var TextTemplatePickerComponent = class TextTemplatePickerComponent {
26278
26319
 
26279
26320
  @if (_open()) {
26280
26321
  <div class="ttp-panel" [style.top.px]="_top()" [style.bottom.px]="_bottom()" [style.left.px]="_left()" [style.width.px]="_width()"
26281
- [style.max-height.px]="_maxHeight()" (keydown.escape)="onEscape($event)">
26322
+ [style.max-height.px]="_maxHeight()" (keydown.escape)="onEscape($event)" (mousedown)="onPanelMouseDown($event)">
26282
26323
  <div class="ttp-search-wrap">
26283
26324
  <input #search class="ttp-search" type="text" role="combobox" autocomplete="off" aria-autocomplete="list" aria-expanded="true"
26284
26325
  [attr.aria-controls]="_id + '-list'" [attr.aria-activedescendant]="_activeId()" [attr.aria-label]="searchPlaceholder()"
@@ -26288,10 +26329,10 @@ var TextTemplatePickerComponent = class TextTemplatePickerComponent {
26288
26329
  <div class="ttp-list" role="listbox" [id]="_id + '-list'" [attr.aria-label]="label()">
26289
26330
  @for (row of _rows(); track row.key) {
26290
26331
  @if (row.kind === 'group') {
26291
- <div class="ttp-group" role="presentation">{{ row.text }}</div>
26332
+ <div class="ttp-group" role="presentation" [id]="_id + '-g' + $index">{{ row.text }}</div>
26292
26333
  } @else {
26293
- <div class="ttp-option" role="option" [id]="_id + '-o' + row.index" [class.ttp-active]="_active() === row.index"
26294
- [attr.aria-selected]="_active() === row.index" (mousedown)="$event.preventDefault()" (click)="pick(row.variable!)" (mouseenter)="_active.set(row.index!)">
26334
+ <div class="ttp-option" role="option" [id]="_id + '-o' + row.index" [class.ttp-active]="_activeIndex() === row.index"
26335
+ [attr.aria-selected]="_activeIndex() === row.index" (mousedown)="$event.preventDefault()" (click)="pick(row.variable!)" (mouseenter)="_active.set(row.index!)">
26295
26336
  {{ row.text }}
26296
26337
  </div>
26297
26338
  }
@@ -26330,7 +26371,7 @@ i0.ɵɵngDeclareClassMetadata({
26330
26371
 
26331
26372
  @if (_open()) {
26332
26373
  <div class="ttp-panel" [style.top.px]="_top()" [style.bottom.px]="_bottom()" [style.left.px]="_left()" [style.width.px]="_width()"
26333
- [style.max-height.px]="_maxHeight()" (keydown.escape)="onEscape($event)">
26374
+ [style.max-height.px]="_maxHeight()" (keydown.escape)="onEscape($event)" (mousedown)="onPanelMouseDown($event)">
26334
26375
  <div class="ttp-search-wrap">
26335
26376
  <input #search class="ttp-search" type="text" role="combobox" autocomplete="off" aria-autocomplete="list" aria-expanded="true"
26336
26377
  [attr.aria-controls]="_id + '-list'" [attr.aria-activedescendant]="_activeId()" [attr.aria-label]="searchPlaceholder()"
@@ -26340,10 +26381,10 @@ i0.ɵɵngDeclareClassMetadata({
26340
26381
  <div class="ttp-list" role="listbox" [id]="_id + '-list'" [attr.aria-label]="label()">
26341
26382
  @for (row of _rows(); track row.key) {
26342
26383
  @if (row.kind === 'group') {
26343
- <div class="ttp-group" role="presentation">{{ row.text }}</div>
26384
+ <div class="ttp-group" role="presentation" [id]="_id + '-g' + $index">{{ row.text }}</div>
26344
26385
  } @else {
26345
- <div class="ttp-option" role="option" [id]="_id + '-o' + row.index" [class.ttp-active]="_active() === row.index"
26346
- [attr.aria-selected]="_active() === row.index" (mousedown)="$event.preventDefault()" (click)="pick(row.variable!)" (mouseenter)="_active.set(row.index!)">
26386
+ <div class="ttp-option" role="option" [id]="_id + '-o' + row.index" [class.ttp-active]="_activeIndex() === row.index"
26387
+ [attr.aria-selected]="_activeIndex() === row.index" (mousedown)="$event.preventDefault()" (click)="pick(row.variable!)" (mouseenter)="_active.set(row.index!)">
26347
26388
  {{ row.text }}
26348
26389
  </div>
26349
26390
  }
@@ -27257,6 +27298,7 @@ var CardListItemComponent = class CardListItemComponent {
27257
27298
  this.statusVariant = input(void 0, ...ngDevMode ? [{ debugName: "statusVariant" }] : /* istanbul ignore next */ []);
27258
27299
  this.indicator = input("none", ...ngDevMode ? [{ debugName: "indicator" }] : /* istanbul ignore next */ []);
27259
27300
  this.icon = input(void 0, ...ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []);
27301
+ this.hasBadges = computed(() => !!this.type() || !!this.status() && !!this.statusVariant(), ...ngDevMode ? [{ debugName: "hasBadges" }] : /* istanbul ignore next */ []);
27260
27302
  this.editButton = input(false, ...ngDevMode ? [{ debugName: "editButton" }] : /* istanbul ignore next */ []);
27261
27303
  this.viewButton = input(false, ...ngDevMode ? [{ debugName: "viewButton" }] : /* istanbul ignore next */ []);
27262
27304
  this.editAriaLabel = input("", ...ngDevMode ? [{ debugName: "editAriaLabel" }] : /* istanbul ignore next */ []);
@@ -27387,7 +27429,13 @@ var CardListItemComponent = class CardListItemComponent {
27387
27429
  },
27388
27430
  ngImport: i0,
27389
27431
  template: `
27390
- <div class="cli-row">
27432
+ @if (hasBadges()) {
27433
+ <div class="cli-badges">
27434
+ @if (type()) { <ui-badge [label]="type()!" [variant]="typeVariant()" /> }
27435
+ @if (status() && statusVariant()) { <ui-badge [label]="status()!" [variant]="statusVariant()!" /> }
27436
+ </div>
27437
+ }
27438
+ <div class="cli-row" [class.cli-row--badges]="hasBadges()" [class.cli-row--badges-2]="hasBadges() && !!type() && !!status() && !!statusVariant()">
27391
27439
  @if (iconPath(); as d) {
27392
27440
  <div class="cli-icon-circle" [class]="'cli-icon-circle cli-icon-circle--' + icon()" aria-hidden="true">
27393
27441
  <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" focusable="false"><path [attr.d]="d" /></svg>
@@ -27403,8 +27451,6 @@ var CardListItemComponent = class CardListItemComponent {
27403
27451
  <div class="cli-body">
27404
27452
  <div class="cli-title-row">
27405
27453
  <span class="cli-title">{{ title() }}</span>
27406
- @if (type()) { <ui-badge [label]="type()!" [variant]="typeVariant()" /> }
27407
- @if (status() && statusVariant()) { <ui-badge [label]="status()!" [variant]="statusVariant()!" /> }
27408
27454
  </div>
27409
27455
  <div class="cli-desc-row">
27410
27456
  @if (description()) { <span class="cli-description">{{ description() }}</span> }
@@ -27434,7 +27480,7 @@ var CardListItemComponent = class CardListItemComponent {
27434
27480
  <ng-content select="[card-detail]" />
27435
27481
  `,
27436
27482
  isInline: true,
27437
- styles: ["ui-card-list-item{display:block;border:1px solid #e2e8f0;border-radius:8px;overflow:hidden;margin-bottom:8px}ui-card-list-item:last-child{margin-bottom:0}ui-card-list-item .cli-row{display:flex;align-items:flex-start;gap:12px;padding:13px 18px;transition:background .12s}ui-card-list-item .cli-row:hover{background:#f8fafc}@media(prefers-reduced-motion:reduce){ui-card-list-item .cli-row{transition:none}}ui-card-list-item .cli-dot{width:9px;height:9px;border-radius:50%;flex-shrink:0;margin-top:5px}ui-card-list-item .cli-dot:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}ui-card-list-item .cli-dot--high{background:#ef4444}ui-card-list-item .cli-dot--medium{background:#f59e0b}ui-card-list-item .cli-dot--low{background:#94a3b8}ui-card-list-item .cli-dot--blue{background:#3b82f6}ui-card-list-item .cli-dot--green{background:#22c55e}ui-card-list-item .cli-icon-circle{width:32px;height:32px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0}ui-card-list-item .cli-icon-circle--call{background:#dbeafe;color:#2563eb}ui-card-list-item .cli-icon-circle--email{background:#dcfce7;color:#16a34a}ui-card-list-item .cli-icon-circle--sms{background:#fef9c3;color:#ca8a04}ui-card-list-item .cli-icon-circle--task{background:#dbeafe;color:#2563eb}ui-card-list-item .cli-icon-circle--doc{background:#ffedd5;color:#ea580c}ui-card-list-item .cli-icon-circle--money{background:#d1fae5;color:#059669}ui-card-list-item .cli-icon-circle--deal{background:#e0f2fe;color:#0284c7}ui-card-list-item .cli-icon-circle--survey{background:#dbeafe;color:#2563eb}ui-card-list-item .cli-icon-circle--property{background:#fef3c7;color:#d97706}ui-card-list-item .cli-icon-circle--search{background:#e0f2fe;color:#0284c7}ui-card-list-item .cli-icon-circle--heart{background:#fce7f3;color:#db2777}ui-card-list-item .cli-icon-circle--calc{background:#d1fae5;color:#059669}ui-card-list-item .cli-icon-circle--repeat{background:#e0f2fe;color:#0284c7}ui-card-list-item .cli-body{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px;overflow-wrap:anywhere;word-break:break-word}ui-card-list-item .cli-title-row{display:flex;align-items:center;gap:7px;flex-wrap:wrap}ui-card-list-item .cli-title{font-size:.875rem;font-weight:600;color:#1e293b}ui-card-list-item .cli-desc-row{display:flex;align-items:center;gap:8px}ui-card-list-item .cli-desc-row:empty{display:none}ui-card-list-item .cli-description{font-size:.8125rem;color:#64748b;min-width:0}ui-card-list-item .cli-date{display:flex;align-items:center;gap:4px;font-size:.75rem;color:#64748b}ui-card-list-item .cli-chip{flex-shrink:0;display:inline-flex;align-items:center;gap:5px;align-self:center;box-sizing:border-box;font-family:inherit;font-size:.8rem;font-weight:500;line-height:1.4;background:none;cursor:pointer;padding:4px 10px;border-radius:6px;text-decoration:none;transition:background .15s,color .15s,border-color .15s}ui-card-list-item .cli-chip--edit{color:#64748b;border:1px solid #e2e8f0}ui-card-list-item .cli-chip--edit:hover{background:#f1f5f9;color:#1e293b}ui-card-list-item .cli-chip--view{color:#2563eb;border:1px solid #dbeafe}ui-card-list-item .cli-chip--view:hover{background:#eff6ff;border-color:#bfdbfe;color:#1d4ed8}ui-card-list-item .cli-chip:focus-visible,ui-card-list-item .cli-inline-link:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}ui-card-list-item .cli-inline-link{flex-shrink:0;margin-left:auto;display:inline-flex;align-items:center;gap:4px;font-size:.8rem;font-weight:500;color:#2563eb;text-decoration:none;transition:color .15s}ui-card-list-item .cli-inline-link:hover{color:#1d4ed8}@media(pointer:coarse),(max-width:480px){ui-card-list-item .cli-chip{min-height:44px;padding:4px 14px}}ui-card-list-item [card-stats]{display:flex;align-items:stretch;background:#f8fafc;border-top:1px solid #f1f5f9}ui-card-list-item [card-detail]{background:#f8fafc;border-top:1px solid #e2e8f0}ui-card-list-item .cli-stat{flex:1;display:flex;flex-direction:column;gap:2px;padding:10px 14px}ui-card-list-item .cli-stat-label{font-size:.6875rem;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:#64748b}ui-card-list-item .cli-stat-value{font-size:.9375rem;font-weight:600;color:#0f172a}ui-card-list-item .cli-stat-divider{width:1px;background:#e2e8f0;margin:8px 0}\n"],
27483
+ styles: ["ui-card-list-item{position:relative;display:block;border:1px solid #e2e8f0;border-radius:8px;overflow:hidden;margin-bottom:8px}ui-card-list-item:last-child{margin-bottom:0}ui-card-list-item .cli-row{display:flex;align-items:flex-start;gap:12px;padding:13px 18px;transition:background .12s}ui-card-list-item .cli-row:hover{background:#f8fafc}@media(prefers-reduced-motion:reduce){ui-card-list-item .cli-row{transition:none}}ui-card-list-item .cli-dot{width:9px;height:9px;border-radius:50%;flex-shrink:0;margin-top:5px}ui-card-list-item .cli-dot:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}ui-card-list-item .cli-dot--high{background:#ef4444}ui-card-list-item .cli-dot--medium{background:#f59e0b}ui-card-list-item .cli-dot--low{background:#94a3b8}ui-card-list-item .cli-dot--blue{background:#3b82f6}ui-card-list-item .cli-dot--green{background:#22c55e}ui-card-list-item .cli-icon-circle{width:32px;height:32px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0}ui-card-list-item .cli-icon-circle--call{background:#dbeafe;color:#2563eb}ui-card-list-item .cli-icon-circle--email{background:#dcfce7;color:#16a34a}ui-card-list-item .cli-icon-circle--sms{background:#fef9c3;color:#ca8a04}ui-card-list-item .cli-icon-circle--task{background:#dbeafe;color:#2563eb}ui-card-list-item .cli-icon-circle--doc{background:#ffedd5;color:#ea580c}ui-card-list-item .cli-icon-circle--money{background:#d1fae5;color:#059669}ui-card-list-item .cli-icon-circle--deal{background:#e0f2fe;color:#0284c7}ui-card-list-item .cli-icon-circle--survey{background:#dbeafe;color:#2563eb}ui-card-list-item .cli-icon-circle--property{background:#fef3c7;color:#d97706}ui-card-list-item .cli-icon-circle--search{background:#e0f2fe;color:#0284c7}ui-card-list-item .cli-icon-circle--heart{background:#fce7f3;color:#db2777}ui-card-list-item .cli-icon-circle--calc{background:#d1fae5;color:#059669}ui-card-list-item .cli-icon-circle--repeat{background:#e0f2fe;color:#0284c7}ui-card-list-item .cli-body{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px;overflow-wrap:anywhere;word-break:break-word}ui-card-list-item .cli-badges{position:absolute;top:10px;right:12px;display:flex;align-items:center;gap:6px;z-index:1}ui-card-list-item .cli-row--badges .cli-body{padding-right:96px}ui-card-list-item .cli-row--badges-2 .cli-body{padding-right:190px}ui-card-list-item .cli-row--badges .cli-chip{align-self:flex-end}ui-card-list-item .cli-title-row{display:flex;align-items:center;gap:7px;flex-wrap:wrap}ui-card-list-item .cli-title{font-size:.875rem;font-weight:600;color:#1e293b}ui-card-list-item .cli-desc-row{display:flex;align-items:center;gap:8px}ui-card-list-item .cli-desc-row:empty{display:none}ui-card-list-item .cli-description{font-size:.8125rem;color:#64748b;min-width:0}ui-card-list-item .cli-date{display:flex;align-items:center;gap:4px;font-size:.75rem;color:#64748b}ui-card-list-item .cli-chip{flex-shrink:0;display:inline-flex;align-items:center;gap:5px;align-self:center;box-sizing:border-box;font-family:inherit;font-size:.8rem;font-weight:500;line-height:1.4;background:none;cursor:pointer;padding:4px 10px;border-radius:6px;text-decoration:none;transition:background .15s,color .15s,border-color .15s}ui-card-list-item .cli-chip--edit{color:#64748b;border:1px solid #e2e8f0}ui-card-list-item .cli-chip--edit:hover{background:#f1f5f9;color:#1e293b}ui-card-list-item .cli-chip--view{color:#2563eb;border:1px solid #dbeafe}ui-card-list-item .cli-chip--view:hover{background:#eff6ff;border-color:#bfdbfe;color:#1d4ed8}ui-card-list-item .cli-chip:focus-visible,ui-card-list-item .cli-inline-link:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}ui-card-list-item .cli-inline-link{flex-shrink:0;margin-left:auto;display:inline-flex;align-items:center;gap:4px;font-size:.8rem;font-weight:500;color:#2563eb;text-decoration:none;transition:color .15s}ui-card-list-item .cli-inline-link:hover{color:#1d4ed8}@media(pointer:coarse),(max-width:480px){ui-card-list-item .cli-chip{min-height:44px;padding:4px 14px}}ui-card-list-item [card-stats]{display:flex;align-items:stretch;background:#f8fafc;border-top:1px solid #f1f5f9}ui-card-list-item [card-detail]{background:#f8fafc;border-top:1px solid #e2e8f0}ui-card-list-item .cli-stat{flex:1;display:flex;flex-direction:column;gap:2px;padding:10px 14px}ui-card-list-item .cli-stat-label{font-size:.6875rem;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:#64748b}ui-card-list-item .cli-stat-value{font-size:.9375rem;font-weight:600;color:#0f172a}ui-card-list-item .cli-stat-divider{width:1px;background:#e2e8f0;margin:8px 0}\n"],
27438
27484
  dependencies: [{
27439
27485
  kind: "component",
27440
27486
  type: BadgeComponent,
@@ -27465,7 +27511,13 @@ i0.ɵɵngDeclareClassMetadata({
27465
27511
  encapsulation: ViewEncapsulation.None,
27466
27512
  imports: [BadgeComponent, TooltipDirective],
27467
27513
  template: `
27468
- <div class="cli-row">
27514
+ @if (hasBadges()) {
27515
+ <div class="cli-badges">
27516
+ @if (type()) { <ui-badge [label]="type()!" [variant]="typeVariant()" /> }
27517
+ @if (status() && statusVariant()) { <ui-badge [label]="status()!" [variant]="statusVariant()!" /> }
27518
+ </div>
27519
+ }
27520
+ <div class="cli-row" [class.cli-row--badges]="hasBadges()" [class.cli-row--badges-2]="hasBadges() && !!type() && !!status() && !!statusVariant()">
27469
27521
  @if (iconPath(); as d) {
27470
27522
  <div class="cli-icon-circle" [class]="'cli-icon-circle cli-icon-circle--' + icon()" aria-hidden="true">
27471
27523
  <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" focusable="false"><path [attr.d]="d" /></svg>
@@ -27481,8 +27533,6 @@ i0.ɵɵngDeclareClassMetadata({
27481
27533
  <div class="cli-body">
27482
27534
  <div class="cli-title-row">
27483
27535
  <span class="cli-title">{{ title() }}</span>
27484
- @if (type()) { <ui-badge [label]="type()!" [variant]="typeVariant()" /> }
27485
- @if (status() && statusVariant()) { <ui-badge [label]="status()!" [variant]="statusVariant()!" /> }
27486
27536
  </div>
27487
27537
  <div class="cli-desc-row">
27488
27538
  @if (description()) { <span class="cli-description">{{ description() }}</span> }
@@ -27511,7 +27561,7 @@ i0.ɵɵngDeclareClassMetadata({
27511
27561
  <ng-content select="[card-stats]" />
27512
27562
  <ng-content select="[card-detail]" />
27513
27563
  `,
27514
- styles: ["ui-card-list-item{display:block;border:1px solid #e2e8f0;border-radius:8px;overflow:hidden;margin-bottom:8px}ui-card-list-item:last-child{margin-bottom:0}ui-card-list-item .cli-row{display:flex;align-items:flex-start;gap:12px;padding:13px 18px;transition:background .12s}ui-card-list-item .cli-row:hover{background:#f8fafc}@media(prefers-reduced-motion:reduce){ui-card-list-item .cli-row{transition:none}}ui-card-list-item .cli-dot{width:9px;height:9px;border-radius:50%;flex-shrink:0;margin-top:5px}ui-card-list-item .cli-dot:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}ui-card-list-item .cli-dot--high{background:#ef4444}ui-card-list-item .cli-dot--medium{background:#f59e0b}ui-card-list-item .cli-dot--low{background:#94a3b8}ui-card-list-item .cli-dot--blue{background:#3b82f6}ui-card-list-item .cli-dot--green{background:#22c55e}ui-card-list-item .cli-icon-circle{width:32px;height:32px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0}ui-card-list-item .cli-icon-circle--call{background:#dbeafe;color:#2563eb}ui-card-list-item .cli-icon-circle--email{background:#dcfce7;color:#16a34a}ui-card-list-item .cli-icon-circle--sms{background:#fef9c3;color:#ca8a04}ui-card-list-item .cli-icon-circle--task{background:#dbeafe;color:#2563eb}ui-card-list-item .cli-icon-circle--doc{background:#ffedd5;color:#ea580c}ui-card-list-item .cli-icon-circle--money{background:#d1fae5;color:#059669}ui-card-list-item .cli-icon-circle--deal{background:#e0f2fe;color:#0284c7}ui-card-list-item .cli-icon-circle--survey{background:#dbeafe;color:#2563eb}ui-card-list-item .cli-icon-circle--property{background:#fef3c7;color:#d97706}ui-card-list-item .cli-icon-circle--search{background:#e0f2fe;color:#0284c7}ui-card-list-item .cli-icon-circle--heart{background:#fce7f3;color:#db2777}ui-card-list-item .cli-icon-circle--calc{background:#d1fae5;color:#059669}ui-card-list-item .cli-icon-circle--repeat{background:#e0f2fe;color:#0284c7}ui-card-list-item .cli-body{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px;overflow-wrap:anywhere;word-break:break-word}ui-card-list-item .cli-title-row{display:flex;align-items:center;gap:7px;flex-wrap:wrap}ui-card-list-item .cli-title{font-size:.875rem;font-weight:600;color:#1e293b}ui-card-list-item .cli-desc-row{display:flex;align-items:center;gap:8px}ui-card-list-item .cli-desc-row:empty{display:none}ui-card-list-item .cli-description{font-size:.8125rem;color:#64748b;min-width:0}ui-card-list-item .cli-date{display:flex;align-items:center;gap:4px;font-size:.75rem;color:#64748b}ui-card-list-item .cli-chip{flex-shrink:0;display:inline-flex;align-items:center;gap:5px;align-self:center;box-sizing:border-box;font-family:inherit;font-size:.8rem;font-weight:500;line-height:1.4;background:none;cursor:pointer;padding:4px 10px;border-radius:6px;text-decoration:none;transition:background .15s,color .15s,border-color .15s}ui-card-list-item .cli-chip--edit{color:#64748b;border:1px solid #e2e8f0}ui-card-list-item .cli-chip--edit:hover{background:#f1f5f9;color:#1e293b}ui-card-list-item .cli-chip--view{color:#2563eb;border:1px solid #dbeafe}ui-card-list-item .cli-chip--view:hover{background:#eff6ff;border-color:#bfdbfe;color:#1d4ed8}ui-card-list-item .cli-chip:focus-visible,ui-card-list-item .cli-inline-link:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}ui-card-list-item .cli-inline-link{flex-shrink:0;margin-left:auto;display:inline-flex;align-items:center;gap:4px;font-size:.8rem;font-weight:500;color:#2563eb;text-decoration:none;transition:color .15s}ui-card-list-item .cli-inline-link:hover{color:#1d4ed8}@media(pointer:coarse),(max-width:480px){ui-card-list-item .cli-chip{min-height:44px;padding:4px 14px}}ui-card-list-item [card-stats]{display:flex;align-items:stretch;background:#f8fafc;border-top:1px solid #f1f5f9}ui-card-list-item [card-detail]{background:#f8fafc;border-top:1px solid #e2e8f0}ui-card-list-item .cli-stat{flex:1;display:flex;flex-direction:column;gap:2px;padding:10px 14px}ui-card-list-item .cli-stat-label{font-size:.6875rem;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:#64748b}ui-card-list-item .cli-stat-value{font-size:.9375rem;font-weight:600;color:#0f172a}ui-card-list-item .cli-stat-divider{width:1px;background:#e2e8f0;margin:8px 0}\n"]
27564
+ styles: ["ui-card-list-item{position:relative;display:block;border:1px solid #e2e8f0;border-radius:8px;overflow:hidden;margin-bottom:8px}ui-card-list-item:last-child{margin-bottom:0}ui-card-list-item .cli-row{display:flex;align-items:flex-start;gap:12px;padding:13px 18px;transition:background .12s}ui-card-list-item .cli-row:hover{background:#f8fafc}@media(prefers-reduced-motion:reduce){ui-card-list-item .cli-row{transition:none}}ui-card-list-item .cli-dot{width:9px;height:9px;border-radius:50%;flex-shrink:0;margin-top:5px}ui-card-list-item .cli-dot:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}ui-card-list-item .cli-dot--high{background:#ef4444}ui-card-list-item .cli-dot--medium{background:#f59e0b}ui-card-list-item .cli-dot--low{background:#94a3b8}ui-card-list-item .cli-dot--blue{background:#3b82f6}ui-card-list-item .cli-dot--green{background:#22c55e}ui-card-list-item .cli-icon-circle{width:32px;height:32px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0}ui-card-list-item .cli-icon-circle--call{background:#dbeafe;color:#2563eb}ui-card-list-item .cli-icon-circle--email{background:#dcfce7;color:#16a34a}ui-card-list-item .cli-icon-circle--sms{background:#fef9c3;color:#ca8a04}ui-card-list-item .cli-icon-circle--task{background:#dbeafe;color:#2563eb}ui-card-list-item .cli-icon-circle--doc{background:#ffedd5;color:#ea580c}ui-card-list-item .cli-icon-circle--money{background:#d1fae5;color:#059669}ui-card-list-item .cli-icon-circle--deal{background:#e0f2fe;color:#0284c7}ui-card-list-item .cli-icon-circle--survey{background:#dbeafe;color:#2563eb}ui-card-list-item .cli-icon-circle--property{background:#fef3c7;color:#d97706}ui-card-list-item .cli-icon-circle--search{background:#e0f2fe;color:#0284c7}ui-card-list-item .cli-icon-circle--heart{background:#fce7f3;color:#db2777}ui-card-list-item .cli-icon-circle--calc{background:#d1fae5;color:#059669}ui-card-list-item .cli-icon-circle--repeat{background:#e0f2fe;color:#0284c7}ui-card-list-item .cli-body{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px;overflow-wrap:anywhere;word-break:break-word}ui-card-list-item .cli-badges{position:absolute;top:10px;right:12px;display:flex;align-items:center;gap:6px;z-index:1}ui-card-list-item .cli-row--badges .cli-body{padding-right:96px}ui-card-list-item .cli-row--badges-2 .cli-body{padding-right:190px}ui-card-list-item .cli-row--badges .cli-chip{align-self:flex-end}ui-card-list-item .cli-title-row{display:flex;align-items:center;gap:7px;flex-wrap:wrap}ui-card-list-item .cli-title{font-size:.875rem;font-weight:600;color:#1e293b}ui-card-list-item .cli-desc-row{display:flex;align-items:center;gap:8px}ui-card-list-item .cli-desc-row:empty{display:none}ui-card-list-item .cli-description{font-size:.8125rem;color:#64748b;min-width:0}ui-card-list-item .cli-date{display:flex;align-items:center;gap:4px;font-size:.75rem;color:#64748b}ui-card-list-item .cli-chip{flex-shrink:0;display:inline-flex;align-items:center;gap:5px;align-self:center;box-sizing:border-box;font-family:inherit;font-size:.8rem;font-weight:500;line-height:1.4;background:none;cursor:pointer;padding:4px 10px;border-radius:6px;text-decoration:none;transition:background .15s,color .15s,border-color .15s}ui-card-list-item .cli-chip--edit{color:#64748b;border:1px solid #e2e8f0}ui-card-list-item .cli-chip--edit:hover{background:#f1f5f9;color:#1e293b}ui-card-list-item .cli-chip--view{color:#2563eb;border:1px solid #dbeafe}ui-card-list-item .cli-chip--view:hover{background:#eff6ff;border-color:#bfdbfe;color:#1d4ed8}ui-card-list-item .cli-chip:focus-visible,ui-card-list-item .cli-inline-link:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}ui-card-list-item .cli-inline-link{flex-shrink:0;margin-left:auto;display:inline-flex;align-items:center;gap:4px;font-size:.8rem;font-weight:500;color:#2563eb;text-decoration:none;transition:color .15s}ui-card-list-item .cli-inline-link:hover{color:#1d4ed8}@media(pointer:coarse),(max-width:480px){ui-card-list-item .cli-chip{min-height:44px;padding:4px 14px}}ui-card-list-item [card-stats]{display:flex;align-items:stretch;background:#f8fafc;border-top:1px solid #f1f5f9}ui-card-list-item [card-detail]{background:#f8fafc;border-top:1px solid #e2e8f0}ui-card-list-item .cli-stat{flex:1;display:flex;flex-direction:column;gap:2px;padding:10px 14px}ui-card-list-item .cli-stat-label{font-size:.6875rem;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:#64748b}ui-card-list-item .cli-stat-value{font-size:.9375rem;font-weight:600;color:#0f172a}ui-card-list-item .cli-stat-divider{width:1px;background:#e2e8f0;margin:8px 0}\n"]
27515
27565
  }]
27516
27566
  }],
27517
27567
  propDecorators: {
@@ -44130,11 +44180,12 @@ var SetupWizardComponent = class SetupWizardComponent {
44130
44180
  }, ...ngDevMode ? [{ debugName: "intro" }] : /* istanbul ignore next */ []);
44131
44181
  this.isDone = computed(() => this.current().key === SETUP_DONE_KEY, ...ngDevMode ? [{ debugName: "isDone" }] : /* istanbul ignore next */ []);
44132
44182
  this.completedCount = computed(() => this.allSteps().filter((s) => this.completed().has(s.key) || this.skipped().has(s.key)).length, ...ngDevMode ? [{ debugName: "completedCount" }] : /* istanbul ignore next */ []);
44133
- this.stepperSteps = computed(() => this.allSteps().map((s) => ({
44183
+ this.stepperSteps = computed(() => this.allSteps().map((s, i) => ({
44134
44184
  key: s.key,
44135
44185
  label: s.label,
44136
44186
  complete: this.completed().has(s.key),
44137
- disabled: this.busy()
44187
+ disabled: this.busy(),
44188
+ selectable: i < this.index()
44138
44189
  })), ...ngDevMode ? [{ debugName: "stepperSteps" }] : /* istanbul ignore next */ []);
44139
44190
  this.summarySections = computed(() => [{ items: this.steps().map((s) => ({
44140
44191
  label: s.label,
@@ -44180,6 +44231,9 @@ var SetupWizardComponent = class SetupWizardComponent {
44180
44231
  templateFor(key) {
44181
44232
  return this.stepTemplates().find((d) => d.key() === key)?.template ?? null;
44182
44233
  }
44234
+ goToPast(key) {
44235
+ if (this.allSteps().findIndex((s) => s.key === key) < this.index()) this.goTo(key);
44236
+ }
44183
44237
  goTo(key) {
44184
44238
  if (!this.busy() && this.allSteps().some((s) => s.key === key)) this.enter(key);
44185
44239
  }
@@ -44314,6 +44368,7 @@ var SetupWizardComponent = class SetupWizardComponent {
44314
44368
  return imp?.resultTitle ? imp.resultTitle(n) : `${n} ${(imp?.config.entityNamePlural ?? "records").toLowerCase()} imported successfully.`;
44315
44369
  }
44316
44370
  continueFromImport() {
44371
+ if (this.importBlocked()) return;
44317
44372
  this.advanceFrom(this.current().key);
44318
44373
  }
44319
44374
  loadStatuses(list) {
@@ -44523,7 +44578,7 @@ var SetupWizardComponent = class SetupWizardComponent {
44523
44578
  <span class="sw-brand-text" data-testid="setup-wizard-brand">{{ t().brand }}</span>
44524
44579
  </div>
44525
44580
  <ui-stepper class="sw-step-nav" [ariaLabel]="t().stepperLabel" orientation="vertical" size="sm" compact="md"
44526
- [steps]="stepperSteps()" [current]="currentKey()" [clickable]="true" [linear]="false" (stepClick)="goTo($event)" />
44581
+ [steps]="stepperSteps()" [current]="currentKey()" [clickable]="true" [linear]="false" (stepClick)="goToPast($event)" />
44527
44582
  </div>
44528
44583
  <div class="sw-sidebar-bottom">
44529
44584
  <ui-progress-bar [value]="completedCount()" [max]="allSteps().length" ariaLabel="Setup progress" />
@@ -45007,7 +45062,7 @@ i0.ɵɵngDeclareClassMetadata({
45007
45062
  <span class="sw-brand-text" data-testid="setup-wizard-brand">{{ t().brand }}</span>
45008
45063
  </div>
45009
45064
  <ui-stepper class="sw-step-nav" [ariaLabel]="t().stepperLabel" orientation="vertical" size="sm" compact="md"
45010
- [steps]="stepperSteps()" [current]="currentKey()" [clickable]="true" [linear]="false" (stepClick)="goTo($event)" />
45065
+ [steps]="stepperSteps()" [current]="currentKey()" [clickable]="true" [linear]="false" (stepClick)="goToPast($event)" />
45011
45066
  </div>
45012
45067
  <div class="sw-sidebar-bottom">
45013
45068
  <ui-progress-bar [value]="completedCount()" [max]="allSteps().length" ariaLabel="Setup progress" />