@flusys/ng-ui 9.1.1 → 9.2.0

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.
@@ -724,6 +724,9 @@ const PRESET_NAMES = [
724
724
  function setVar(name, value, root) {
725
725
  root.style.setProperty(name, value);
726
726
  }
727
+ function ownEntry(record, key) {
728
+ return key != null && Object.hasOwn(record, key) ? record[key] : void 0;
729
+ }
727
730
  function applyPrimaryPalette(palette, isDark = false, root = document.documentElement) {
728
731
  for (const shade of [
729
732
  "50",
@@ -898,12 +901,12 @@ function getAppliedTheme() {
898
901
  function applyTheme(options, root = document.documentElement) {
899
902
  appliedTheme = { ...options };
900
903
  const presetName = options.preset ?? "Aura";
901
- const preset = PRESETS[presetName] ?? PRESETS["Aura"];
904
+ const preset = ownEntry(PRESETS, presetName) ?? PRESETS["Aura"];
902
905
  const primaryName = options.primary ?? "violet";
903
906
  const surfaceName = options.surface;
904
907
  const isDark = options.darkTheme ?? false;
905
- const primaryPalette = primaryName === "noir" ? NOIR_PRIMARY : PRIMARY_PALETTES[primaryName] ?? PRIMARY_PALETTES["violet"];
906
- const surfacePalette = SURFACE_PALETTES[surfaceName ?? (isDark ? "zinc" : "slate")] ?? SURFACE_PALETTES["slate"];
908
+ const primaryPalette = primaryName === "noir" ? NOIR_PRIMARY : ownEntry(PRIMARY_PALETTES, primaryName) ?? PRIMARY_PALETTES["violet"];
909
+ const surfacePalette = ownEntry(SURFACE_PALETTES, surfaceName ?? (isDark ? "zinc" : "slate")) ?? SURFACE_PALETTES["slate"];
907
910
  applyPreset(preset, root);
908
911
  applySurfacePalette(surfacePalette, root);
909
912
  applyPrimaryPalette(primaryPalette, isDark, root);
@@ -950,30 +953,33 @@ function buildBootstrapPreset(envConfig) {
950
953
  };
951
954
  }
952
955
  function initializeNgUITheme(options, platformId) {
953
- if (!isPlatformBrowser(platformId)) return;
956
+ if (!isPlatformBrowser(platformId)) return null;
954
957
  let themeOptions = {};
955
958
  const themePreset = options?.theme?.preset;
956
959
  if (themePreset && typeof themePreset === "object" && "preset" in themePreset && "options" in themePreset) themeOptions = themePreset.preset;
957
960
  else if (themePreset) themeOptions = themePreset;
958
961
  const darkModeSelector = options?.theme?.options?.darkModeSelector ?? ".app-dark";
959
- const isDark = document.documentElement.classList.contains(darkModeSelector.replace(".", "")) || document.documentElement.getAttribute("class")?.includes("app-dark") === true;
962
+ const isDarkNow = () => document.documentElement.classList.contains(darkModeSelector.replace(".", "")) || document.documentElement.getAttribute("class")?.includes("app-dark") === true;
963
+ const isDark = isDarkNow();
960
964
  applyTheme({
961
965
  ...themeOptions,
962
966
  darkTheme: isDark
963
967
  });
964
968
  let wasDark = isDark;
965
- new MutationObserver(() => {
966
- const nowDark = document.documentElement.classList.contains("app-dark");
969
+ const observer = new MutationObserver(() => {
970
+ const nowDark = isDarkNow();
967
971
  if (nowDark === wasDark) return;
968
972
  wasDark = nowDark;
969
973
  applyTheme({
970
974
  ...getAppliedTheme(),
971
975
  darkTheme: nowDark
972
976
  });
973
- }).observe(document.documentElement, {
977
+ });
978
+ observer.observe(document.documentElement, {
974
979
  attributes: true,
975
980
  attributeFilter: ["class"]
976
981
  });
982
+ return observer;
977
983
  }
978
984
  function provideNgUI(options) {
979
985
  const configOptions = {
@@ -988,8 +994,8 @@ function provideNgUI(options) {
988
994
  return config;
989
995
  }
990
996
  }, provideAppInitializer(() => {
991
- const platformId = inject(PLATFORM_ID);
992
- initializeNgUITheme(options ?? {}, platformId);
997
+ const observer = initializeNgUITheme(options ?? {}, inject(PLATFORM_ID));
998
+ if (observer) inject(DestroyRef).onDestroy(() => observer.disconnect());
993
999
  })]);
994
1000
  }
995
1001
  const BASE_Z_INDEX = 1e3;
@@ -6927,6 +6933,45 @@ function attachOverlayPosition(anchor, panel, options = {}) {
6927
6933
  if (placement.width !== null) panel.style.width = `${placement.width}px`;
6928
6934
  });
6929
6935
  }
6936
+ var OverflowTitleDirective = class OverflowTitleDirective {
6937
+ el = inject(ElementRef);
6938
+ sync() {
6939
+ const el = this.el.nativeElement;
6940
+ const text = el.textContent?.trim() ?? "";
6941
+ if (text && el.scrollWidth > el.clientWidth) el.title = text;
6942
+ else el.removeAttribute("title");
6943
+ }
6944
+ static ɵfac = i0.ɵɵngDeclareFactory({
6945
+ minVersion: "12.0.0",
6946
+ version: "22.2.1",
6947
+ ngImport: i0,
6948
+ type: OverflowTitleDirective,
6949
+ deps: [],
6950
+ target: i0.ɵɵFactoryTarget.Directive
6951
+ });
6952
+ static ɵdir = i0.ɵɵngDeclareDirective({
6953
+ minVersion: "14.0.0",
6954
+ version: "22.2.1",
6955
+ type: OverflowTitleDirective,
6956
+ isStandalone: true,
6957
+ selector: "[fOverflowTitle]",
6958
+ host: { listeners: { "mouseenter": "sync()" } },
6959
+ ngImport: i0
6960
+ });
6961
+ };
6962
+ i0.ɵɵngDeclareClassMetadata({
6963
+ minVersion: "12.0.0",
6964
+ version: "22.2.1",
6965
+ ngImport: i0,
6966
+ type: OverflowTitleDirective,
6967
+ decorators: [{
6968
+ type: Directive,
6969
+ args: [{
6970
+ selector: "[fOverflowTitle]",
6971
+ host: { "(mouseenter)": "sync()" }
6972
+ }]
6973
+ }]
6974
+ });
6930
6975
  var SelectComponent = class SelectComponent {
6931
6976
  _el = inject(ElementRef);
6932
6977
  constructor() {
@@ -7765,14 +7810,14 @@ var SelectComponent = class SelectComponent {
7765
7810
  (click)="$event.stopPropagation()"
7766
7811
  />
7767
7812
  } @else if (selectedItemTpl() && selectedOption() != null) {
7768
- <span class="flex-1 min-w-0 truncate text-left">
7813
+ <span fOverflowTitle class="flex-1 min-w-0 truncate text-left">
7769
7814
  <ng-container
7770
7815
  [ngTemplateOutlet]="selectedItemTpl()"
7771
7816
  [ngTemplateOutletContext]="{ $implicit: selectedOption() }"
7772
7817
  />
7773
7818
  </span>
7774
7819
  } @else {
7775
- <span
7820
+ <span fOverflowTitle
7776
7821
  data-select-label
7777
7822
  class="flex-1 min-w-0 truncate text-left"
7778
7823
  [class.text-(--f-form-field-placeholder-color)]="!selectedLabel()"
@@ -7921,7 +7966,7 @@ var SelectComponent = class SelectComponent {
7921
7966
  @if (checkmark() && getOptionValue(item.option) === value()) {
7922
7967
  <ui-icon name="check" class="text-xs shrink-0"></ui-icon>
7923
7968
  }
7924
- <span class="flex-1 truncate">
7969
+ <span fOverflowTitle class="flex-1 truncate">
7925
7970
  @if (itemTpl()) {
7926
7971
  <ng-container
7927
7972
  [ngTemplateOutlet]="itemTpl()"
@@ -7968,6 +8013,11 @@ var SelectComponent = class SelectComponent {
7968
8013
  `,
7969
8014
  isInline: true,
7970
8015
  dependencies: [
8016
+ {
8017
+ kind: "directive",
8018
+ type: OverflowTitleDirective,
8019
+ selector: "[fOverflowTitle]"
8020
+ },
7971
8021
  {
7972
8022
  kind: "component",
7973
8023
  type: UiIconComponent,
@@ -8021,6 +8071,7 @@ i0.ɵɵngDeclareClassMetadata({
8021
8071
  args: [{
8022
8072
  selector: "f-select",
8023
8073
  imports: [
8074
+ OverflowTitleDirective,
8024
8075
  UiIconComponent,
8025
8076
  NgTemplateOutlet,
8026
8077
  ScrollerComponent
@@ -8069,14 +8120,14 @@ i0.ɵɵngDeclareClassMetadata({
8069
8120
  (click)="$event.stopPropagation()"
8070
8121
  />
8071
8122
  } @else if (selectedItemTpl() && selectedOption() != null) {
8072
- <span class="flex-1 min-w-0 truncate text-left">
8123
+ <span fOverflowTitle class="flex-1 min-w-0 truncate text-left">
8073
8124
  <ng-container
8074
8125
  [ngTemplateOutlet]="selectedItemTpl()"
8075
8126
  [ngTemplateOutletContext]="{ $implicit: selectedOption() }"
8076
8127
  />
8077
8128
  </span>
8078
8129
  } @else {
8079
- <span
8130
+ <span fOverflowTitle
8080
8131
  data-select-label
8081
8132
  class="flex-1 min-w-0 truncate text-left"
8082
8133
  [class.text-(--f-form-field-placeholder-color)]="!selectedLabel()"
@@ -8225,7 +8276,7 @@ i0.ɵɵngDeclareClassMetadata({
8225
8276
  @if (checkmark() && getOptionValue(item.option) === value()) {
8226
8277
  <ui-icon name="check" class="text-xs shrink-0"></ui-icon>
8227
8278
  }
8228
- <span class="flex-1 truncate">
8279
+ <span fOverflowTitle class="flex-1 truncate">
8229
8280
  @if (itemTpl()) {
8230
8281
  <ng-container
8231
8282
  [ngTemplateOutlet]="itemTpl()"
@@ -9502,12 +9553,12 @@ var MultiSelectComponent = class MultiSelectComponent {
9502
9553
  >
9503
9554
  @if (selectedLabels().length) {
9504
9555
  @if (display() === 'comma') {
9505
- <span
9556
+ <span fOverflowTitle
9506
9557
  class="flex-1 min-w-0 truncate text-sm text-(--f-form-field-color)"
9507
9558
  >{{ commaLabel() }}</span
9508
9559
  >
9509
9560
  } @else if (selectedLabels().length > maxSelectedLabels()) {
9510
- <span
9561
+ <span fOverflowTitle
9511
9562
  class="flex-1 min-w-0 truncate text-sm text-(--f-form-field-color)"
9512
9563
  >{{ selectedLabels().length }} items selected</span
9513
9564
  >
@@ -9628,7 +9679,7 @@ var MultiSelectComponent = class MultiSelectComponent {
9628
9679
  ></ui-icon>
9629
9680
  }
9630
9681
  </div>
9631
- <span class="flex-1 truncate font-medium">Select All</span>
9682
+ <span fOverflowTitle class="flex-1 truncate font-medium">Select All</span>
9632
9683
  </button>
9633
9684
  }
9634
9685
  <div
@@ -9724,7 +9775,7 @@ var MultiSelectComponent = class MultiSelectComponent {
9724
9775
  ></ui-icon>
9725
9776
  }
9726
9777
  </div>
9727
- <span class="flex-1 truncate">
9778
+ <span fOverflowTitle class="flex-1 truncate">
9728
9779
  @if (itemTpl()) {
9729
9780
  <ng-container
9730
9781
  [ngTemplateOutlet]="itemTpl()"
@@ -9768,6 +9819,11 @@ var MultiSelectComponent = class MultiSelectComponent {
9768
9819
  `,
9769
9820
  isInline: true,
9770
9821
  dependencies: [
9822
+ {
9823
+ kind: "directive",
9824
+ type: OverflowTitleDirective,
9825
+ selector: "[fOverflowTitle]"
9826
+ },
9771
9827
  {
9772
9828
  kind: "component",
9773
9829
  type: UiIconComponent,
@@ -9821,6 +9877,7 @@ i0.ɵɵngDeclareClassMetadata({
9821
9877
  args: [{
9822
9878
  selector: "f-multiselect",
9823
9879
  imports: [
9880
+ OverflowTitleDirective,
9824
9881
  UiIconComponent,
9825
9882
  NgTemplateOutlet,
9826
9883
  ScrollerComponent
@@ -9856,12 +9913,12 @@ i0.ɵɵngDeclareClassMetadata({
9856
9913
  >
9857
9914
  @if (selectedLabels().length) {
9858
9915
  @if (display() === 'comma') {
9859
- <span
9916
+ <span fOverflowTitle
9860
9917
  class="flex-1 min-w-0 truncate text-sm text-(--f-form-field-color)"
9861
9918
  >{{ commaLabel() }}</span
9862
9919
  >
9863
9920
  } @else if (selectedLabels().length > maxSelectedLabels()) {
9864
- <span
9921
+ <span fOverflowTitle
9865
9922
  class="flex-1 min-w-0 truncate text-sm text-(--f-form-field-color)"
9866
9923
  >{{ selectedLabels().length }} items selected</span
9867
9924
  >
@@ -9982,7 +10039,7 @@ i0.ɵɵngDeclareClassMetadata({
9982
10039
  ></ui-icon>
9983
10040
  }
9984
10041
  </div>
9985
- <span class="flex-1 truncate font-medium">Select All</span>
10042
+ <span fOverflowTitle class="flex-1 truncate font-medium">Select All</span>
9986
10043
  </button>
9987
10044
  }
9988
10045
  <div
@@ -10078,7 +10135,7 @@ i0.ɵɵngDeclareClassMetadata({
10078
10135
  ></ui-icon>
10079
10136
  }
10080
10137
  </div>
10081
- <span class="flex-1 truncate">
10138
+ <span fOverflowTitle class="flex-1 truncate">
10082
10139
  @if (itemTpl()) {
10083
10140
  <ng-container
10084
10141
  [ngTemplateOutlet]="itemTpl()"
@@ -20970,7 +21027,7 @@ var AccordionComponent = class AccordionComponent {
20970
21027
  this.value.set(wasOpen ? cur.filter((x) => x !== v) : [...cur, v]);
20971
21028
  this.emitToggle(v, wasOpen);
20972
21029
  } else {
20973
- const wasOpen = current === v;
21030
+ const wasOpen = Array.isArray(current) ? current.includes(v) : current === v;
20974
21031
  this.value.set(wasOpen ? null : v);
20975
21032
  this.emitToggle(v, wasOpen);
20976
21033
  }
@@ -20989,9 +21046,10 @@ var AccordionComponent = class AccordionComponent {
20989
21046
  if (!headers.length) return;
20990
21047
  const currentEl = document.activeElement;
20991
21048
  const currentIndex = headers.findIndex((h) => h.buttonEl() === currentEl);
21049
+ if (currentIndex < 0) return;
20992
21050
  let nextIndex = null;
20993
- if (event.key === "ArrowDown") nextIndex = currentIndex < 0 ? 0 : (currentIndex + 1) % headers.length;
20994
- else if (event.key === "ArrowUp") nextIndex = currentIndex < 0 ? 0 : (currentIndex - 1 + headers.length) % headers.length;
21051
+ if (event.key === "ArrowDown") nextIndex = (currentIndex + 1) % headers.length;
21052
+ else if (event.key === "ArrowUp") nextIndex = (currentIndex - 1 + headers.length) % headers.length;
20995
21053
  else if (event.key === "Home") nextIndex = 0;
20996
21054
  else if (event.key === "End") nextIndex = headers.length - 1;
20997
21055
  if (nextIndex === null) return;
@@ -27435,6 +27493,10 @@ var AutoCompleteComponent = class AutoCompleteComponent {
27435
27493
  isDisabled = computed(() => this.disabled() || this._formDisabled(), ...ngDevMode ? [{ debugName: "isDisabled" }] : /* istanbul ignore next */ []);
27436
27494
  constructor() {
27437
27495
  blockClicksWhileDisabled(this.isDisabled);
27496
+ inject(DestroyRef).onDestroy(() => {
27497
+ clearTimeout(this._debounce);
27498
+ clearTimeout(this._blurTimer);
27499
+ });
27438
27500
  }
27439
27501
  dropdown = input(false, {
27440
27502
  ...ngDevMode ? { debugName: "dropdown" } : /* istanbul ignore next */ {},
@@ -27527,6 +27589,7 @@ var AutoCompleteComponent = class AutoCompleteComponent {
27527
27589
  _onChange = () => {};
27528
27590
  _onTouched = () => {};
27529
27591
  _debounce;
27592
+ _blurTimer;
27530
27593
  itemRef = contentChild("item", ...ngDevMode ? [{ debugName: "itemRef" }] : /* istanbul ignore next */ []);
27531
27594
  groupRef = contentChild("group", ...ngDevMode ? [{ debugName: "groupRef" }] : /* istanbul ignore next */ []);
27532
27595
  headerRef = contentChild("header", ...ngDevMode ? [{ debugName: "headerRef" }] : /* istanbul ignore next */ []);
@@ -27609,7 +27672,7 @@ var AutoCompleteComponent = class AutoCompleteComponent {
27609
27672
  return this.open() ? "border-primary" : "border-(--f-form-field-border-color) hover:border-(--f-form-field-hover-border-color)";
27610
27673
  }, ...ngDevMode ? [{ debugName: "wrapperClass" }] : /* istanbul ignore next */ []);
27611
27674
  getLabel(item) {
27612
- if (!item) return "";
27675
+ if (item == null || item === "") return "";
27613
27676
  if (typeof item !== "object") return String(item);
27614
27677
  return String(item[this.field()] ?? item);
27615
27678
  }
@@ -27648,7 +27711,8 @@ var AutoCompleteComponent = class AutoCompleteComponent {
27648
27711
  }
27649
27712
  _handleBlur() {
27650
27713
  this.blurEvent.emit();
27651
- setTimeout(() => {
27714
+ clearTimeout(this._blurTimer);
27715
+ this._blurTimer = setTimeout(() => {
27652
27716
  if (this.forceSelection() && this.flatSuggestions().length === 0) this.query = "";
27653
27717
  this._open.set(false);
27654
27718
  this._onTouched();
@@ -27665,7 +27729,7 @@ var AutoCompleteComponent = class AutoCompleteComponent {
27665
27729
  } else if (e.key === "Enter") {
27666
27730
  e.preventDefault();
27667
27731
  const idx = this.activeIndex();
27668
- if (idx >= 0) this.selectItem(e, this.flatSuggestions()[idx]);
27732
+ if (idx >= 0 && idx < len) this.selectItem(e, this.flatSuggestions()[idx]);
27669
27733
  } else if (e.key === "Escape") this._open.set(false);
27670
27734
  else if (e.key === "Backspace" && this.multiple() && this.query === "" && this.selectedItems().length) this.removeChip(this.selectedItems().length - 1, e);
27671
27735
  }
@@ -27729,7 +27793,7 @@ var AutoCompleteComponent = class AutoCompleteComponent {
27729
27793
  if (this.multiple()) this._selectedItems.set(Array.isArray(val) ? val : []);
27730
27794
  else {
27731
27795
  this._value.set(val);
27732
- this.query = val ? this.getLabel(val) : "";
27796
+ this.query = this.getLabel(val);
27733
27797
  }
27734
27798
  }
27735
27799
  registerOnChange(fn) {
@@ -28106,6 +28170,8 @@ var AutoCompleteComponent = class AutoCompleteComponent {
28106
28170
  class="flex-1 min-w-[6rem] text-sm bg-transparent focus:outline-none text-(--f-form-field-color) placeholder:text-(--f-form-field-placeholder-color)"
28107
28171
  [placeholder]="selectedItems().length === 0 ? placeholder() : ''"
28108
28172
  [attr.aria-label]="ariaLabel() || null"
28173
+ [attr.disabled]="isDisabled() ? '' : null"
28174
+ [disabled]="isDisabled()"
28109
28175
  [(ngModel)]="query"
28110
28176
  (ngModelChange)="onQueryChange($event)"
28111
28177
  (keydown)="onKeyDown($event)"
@@ -28148,6 +28214,8 @@ var AutoCompleteComponent = class AutoCompleteComponent {
28148
28214
  [class.pr-12!]="dropdown() && showClear() && !!query"
28149
28215
  [placeholder]="placeholder()"
28150
28216
  [attr.aria-label]="ariaLabel() || null"
28217
+ [attr.disabled]="isDisabled() ? '' : null"
28218
+ [disabled]="isDisabled()"
28151
28219
  [(ngModel)]="query"
28152
28220
  (ngModelChange)="onQueryChange($event)"
28153
28221
  (keydown)="onKeyDown($event)"
@@ -28256,7 +28324,7 @@ var AutoCompleteComponent = class AutoCompleteComponent {
28256
28324
  [ngTemplateOutletContext]="{ $implicit: item, index: i }"
28257
28325
  />
28258
28326
  } @else {
28259
- <span class="flex-1 truncate">{{ getLabel(item) }}</span>
28327
+ <span fOverflowTitle class="flex-1 truncate">{{ getLabel(item) }}</span>
28260
28328
  }
28261
28329
  </div>
28262
28330
  </ng-template>
@@ -28306,7 +28374,7 @@ var AutoCompleteComponent = class AutoCompleteComponent {
28306
28374
  }"
28307
28375
  />
28308
28376
  } @else {
28309
- <span class="flex-1 truncate">{{
28377
+ <span fOverflowTitle class="flex-1 truncate">{{
28310
28378
  getLabel(row.item)
28311
28379
  }}</span>
28312
28380
  }
@@ -28327,6 +28395,11 @@ var AutoCompleteComponent = class AutoCompleteComponent {
28327
28395
  `,
28328
28396
  isInline: true,
28329
28397
  dependencies: [
28398
+ {
28399
+ kind: "directive",
28400
+ type: OverflowTitleDirective,
28401
+ selector: "[fOverflowTitle]"
28402
+ },
28330
28403
  {
28331
28404
  kind: "component",
28332
28405
  type: UiIconComponent,
@@ -28407,6 +28480,7 @@ i0.ɵɵngDeclareClassMetadata({
28407
28480
  args: [{
28408
28481
  selector: "f-autocomplete",
28409
28482
  imports: [
28483
+ OverflowTitleDirective,
28410
28484
  UiIconComponent,
28411
28485
  FormsModule,
28412
28486
  NgTemplateOutlet,
@@ -28465,6 +28539,8 @@ i0.ɵɵngDeclareClassMetadata({
28465
28539
  class="flex-1 min-w-[6rem] text-sm bg-transparent focus:outline-none text-(--f-form-field-color) placeholder:text-(--f-form-field-placeholder-color)"
28466
28540
  [placeholder]="selectedItems().length === 0 ? placeholder() : ''"
28467
28541
  [attr.aria-label]="ariaLabel() || null"
28542
+ [attr.disabled]="isDisabled() ? '' : null"
28543
+ [disabled]="isDisabled()"
28468
28544
  [(ngModel)]="query"
28469
28545
  (ngModelChange)="onQueryChange($event)"
28470
28546
  (keydown)="onKeyDown($event)"
@@ -28507,6 +28583,8 @@ i0.ɵɵngDeclareClassMetadata({
28507
28583
  [class.pr-12!]="dropdown() && showClear() && !!query"
28508
28584
  [placeholder]="placeholder()"
28509
28585
  [attr.aria-label]="ariaLabel() || null"
28586
+ [attr.disabled]="isDisabled() ? '' : null"
28587
+ [disabled]="isDisabled()"
28510
28588
  [(ngModel)]="query"
28511
28589
  (ngModelChange)="onQueryChange($event)"
28512
28590
  (keydown)="onKeyDown($event)"
@@ -28615,7 +28693,7 @@ i0.ɵɵngDeclareClassMetadata({
28615
28693
  [ngTemplateOutletContext]="{ $implicit: item, index: i }"
28616
28694
  />
28617
28695
  } @else {
28618
- <span class="flex-1 truncate">{{ getLabel(item) }}</span>
28696
+ <span fOverflowTitle class="flex-1 truncate">{{ getLabel(item) }}</span>
28619
28697
  }
28620
28698
  </div>
28621
28699
  </ng-template>
@@ -28665,7 +28743,7 @@ i0.ɵɵngDeclareClassMetadata({
28665
28743
  }"
28666
28744
  />
28667
28745
  } @else {
28668
- <span class="flex-1 truncate">{{
28746
+ <span fOverflowTitle class="flex-1 truncate">{{
28669
28747
  getLabel(row.item)
28670
28748
  }}</span>
28671
28749
  }
@@ -30136,7 +30214,7 @@ var ListboxComponent = class ListboxComponent {
30136
30214
  <ui-icon name="check" class="text-[9px] text-primary-contrast"></ui-icon>
30137
30215
  }
30138
30216
  </div>
30139
- <span class="flex-1 truncate font-medium">Select All</span>
30217
+ <span fOverflowTitle class="flex-1 truncate font-medium">Select All</span>
30140
30218
  </button>
30141
30219
  }
30142
30220
 
@@ -30218,7 +30296,7 @@ var ListboxComponent = class ListboxComponent {
30218
30296
  <span class="w-3 h-3 shrink-0"></span>
30219
30297
  }
30220
30298
  }
30221
- <span class="flex-1 truncate">
30299
+ <span fOverflowTitle class="flex-1 truncate">
30222
30300
  @if (itemTpl()) {
30223
30301
  <ng-container [ngTemplateOutlet]="itemTpl()" [ngTemplateOutletContext]="{ $implicit: item.option }" />
30224
30302
  } @else {
@@ -30231,6 +30309,11 @@ var ListboxComponent = class ListboxComponent {
30231
30309
  `,
30232
30310
  isInline: true,
30233
30311
  dependencies: [
30312
+ {
30313
+ kind: "directive",
30314
+ type: OverflowTitleDirective,
30315
+ selector: "[fOverflowTitle]"
30316
+ },
30234
30317
  {
30235
30318
  kind: "component",
30236
30319
  type: UiIconComponent,
@@ -30284,6 +30367,7 @@ i0.ɵɵngDeclareClassMetadata({
30284
30367
  args: [{
30285
30368
  selector: "f-listbox",
30286
30369
  imports: [
30370
+ OverflowTitleDirective,
30287
30371
  UiIconComponent,
30288
30372
  NgTemplateOutlet,
30289
30373
  ScrollerComponent
@@ -30338,7 +30422,7 @@ i0.ɵɵngDeclareClassMetadata({
30338
30422
  <ui-icon name="check" class="text-[9px] text-primary-contrast"></ui-icon>
30339
30423
  }
30340
30424
  </div>
30341
- <span class="flex-1 truncate font-medium">Select All</span>
30425
+ <span fOverflowTitle class="flex-1 truncate font-medium">Select All</span>
30342
30426
  </button>
30343
30427
  }
30344
30428
 
@@ -30420,7 +30504,7 @@ i0.ɵɵngDeclareClassMetadata({
30420
30504
  <span class="w-3 h-3 shrink-0"></span>
30421
30505
  }
30422
30506
  }
30423
- <span class="flex-1 truncate">
30507
+ <span fOverflowTitle class="flex-1 truncate">
30424
30508
  @if (itemTpl()) {
30425
30509
  <ng-container [ngTemplateOutlet]="itemTpl()" [ngTemplateOutletContext]="{ $implicit: item.option }" />
30426
30510
  } @else {
@@ -31858,7 +31942,7 @@ var TreeSelectComponent = class TreeSelectComponent {
31858
31942
  (keydown)="onTriggerKeyDown($event)"
31859
31943
  >
31860
31944
  @if (valueTpl()) {
31861
- <span class="flex-1 min-w-0 truncate text-left text-sm">
31945
+ <span fOverflowTitle class="flex-1 min-w-0 truncate text-left text-sm">
31862
31946
  <ng-container
31863
31947
  [ngTemplateOutlet]="valueTpl()"
31864
31948
  [ngTemplateOutletContext]="{
@@ -31868,7 +31952,7 @@ var TreeSelectComponent = class TreeSelectComponent {
31868
31952
  />
31869
31953
  </span>
31870
31954
  } @else if (selectionMode() === 'single') {
31871
- <span
31955
+ <span fOverflowTitle
31872
31956
  class="truncate text-sm"
31873
31957
  [class.text-(--f-form-field-placeholder-color)]="
31874
31958
  !selectedLabels().length
@@ -31899,7 +31983,7 @@ var TreeSelectComponent = class TreeSelectComponent {
31899
31983
  }
31900
31984
  </div>
31901
31985
  } @else if (selectedLabels().length) {
31902
- <span class="flex-1 min-w-0 truncate text-sm text-(--f-text-color)">{{
31986
+ <span fOverflowTitle class="flex-1 min-w-0 truncate text-sm text-(--f-text-color)">{{
31903
31987
  selectedLabels().join(', ')
31904
31988
  }}</span>
31905
31989
  } @else {
@@ -32063,12 +32147,17 @@ var TreeSelectComponent = class TreeSelectComponent {
32063
32147
  class="text-xs text-(--f-text-muted-color) shrink-0"
32064
32148
  ></ui-icon>
32065
32149
  }
32066
- <span class="flex-1 truncate" [class.font-medium]="row.node.selectable === false">{{ row.node.label }}</span>
32150
+ <span fOverflowTitle class="flex-1 truncate" [class.font-medium]="row.node.selectable === false">{{ row.node.label }}</span>
32067
32151
  </div>
32068
32152
  </ng-template>
32069
32153
  `,
32070
32154
  isInline: true,
32071
32155
  dependencies: [
32156
+ {
32157
+ kind: "directive",
32158
+ type: OverflowTitleDirective,
32159
+ selector: "[fOverflowTitle]"
32160
+ },
32072
32161
  {
32073
32162
  kind: "component",
32074
32163
  type: UiIconComponent,
@@ -32122,6 +32211,7 @@ i0.ɵɵngDeclareClassMetadata({
32122
32211
  args: [{
32123
32212
  selector: "f-treeselect",
32124
32213
  imports: [
32214
+ OverflowTitleDirective,
32125
32215
  UiIconComponent,
32126
32216
  NgTemplateOutlet,
32127
32217
  ScrollerComponent
@@ -32151,7 +32241,7 @@ i0.ɵɵngDeclareClassMetadata({
32151
32241
  (keydown)="onTriggerKeyDown($event)"
32152
32242
  >
32153
32243
  @if (valueTpl()) {
32154
- <span class="flex-1 min-w-0 truncate text-left text-sm">
32244
+ <span fOverflowTitle class="flex-1 min-w-0 truncate text-left text-sm">
32155
32245
  <ng-container
32156
32246
  [ngTemplateOutlet]="valueTpl()"
32157
32247
  [ngTemplateOutletContext]="{
@@ -32161,7 +32251,7 @@ i0.ɵɵngDeclareClassMetadata({
32161
32251
  />
32162
32252
  </span>
32163
32253
  } @else if (selectionMode() === 'single') {
32164
- <span
32254
+ <span fOverflowTitle
32165
32255
  class="truncate text-sm"
32166
32256
  [class.text-(--f-form-field-placeholder-color)]="
32167
32257
  !selectedLabels().length
@@ -32192,7 +32282,7 @@ i0.ɵɵngDeclareClassMetadata({
32192
32282
  }
32193
32283
  </div>
32194
32284
  } @else if (selectedLabels().length) {
32195
- <span class="flex-1 min-w-0 truncate text-sm text-(--f-text-color)">{{
32285
+ <span fOverflowTitle class="flex-1 min-w-0 truncate text-sm text-(--f-text-color)">{{
32196
32286
  selectedLabels().join(', ')
32197
32287
  }}</span>
32198
32288
  } @else {
@@ -32356,7 +32446,7 @@ i0.ɵɵngDeclareClassMetadata({
32356
32446
  class="text-xs text-(--f-text-muted-color) shrink-0"
32357
32447
  ></ui-icon>
32358
32448
  }
32359
- <span class="flex-1 truncate" [class.font-medium]="row.node.selectable === false">{{ row.node.label }}</span>
32449
+ <span fOverflowTitle class="flex-1 truncate" [class.font-medium]="row.node.selectable === false">{{ row.node.label }}</span>
32360
32450
  </div>
32361
32451
  </ng-template>
32362
32452
  `
@@ -40847,7 +40937,7 @@ var CascadeSelectComponent = class CascadeSelectComponent {
40847
40937
  (keydown)="onKeyDown($event)"
40848
40938
  >
40849
40939
  @if (valueTpl()) {
40850
- <span class="flex-1 min-w-0 truncate text-left text-sm">
40940
+ <span fOverflowTitle class="flex-1 min-w-0 truncate text-left text-sm">
40851
40941
  <ng-container
40852
40942
  [ngTemplateOutlet]="valueTpl()"
40853
40943
  [ngTemplateOutletContext]="{
@@ -40857,7 +40947,7 @@ var CascadeSelectComponent = class CascadeSelectComponent {
40857
40947
  />
40858
40948
  </span>
40859
40949
  } @else {
40860
- <span
40950
+ <span fOverflowTitle
40861
40951
  class="flex-1 min-w-0 truncate text-left text-sm"
40862
40952
  [class.text-(--f-form-field-placeholder-color)]="
40863
40953
  !selectedPath().length
@@ -40928,7 +41018,7 @@ var CascadeSelectComponent = class CascadeSelectComponent {
40928
41018
  (click)="onOptionClick(opt, $index)"
40929
41019
  (mouseenter)="onOptionHover(opt, $index)"
40930
41020
  >
40931
- <span class="truncate">
41021
+ <span fOverflowTitle class="truncate">
40932
41022
  @if (getChildren(opt, $index).length && groupTpl()) {
40933
41023
  <ng-container
40934
41024
  [ngTemplateOutlet]="groupTpl()"
@@ -40982,27 +41072,35 @@ var CascadeSelectComponent = class CascadeSelectComponent {
40982
41072
  </div>
40983
41073
  `,
40984
41074
  isInline: true,
40985
- dependencies: [{
40986
- kind: "component",
40987
- type: UiIconComponent,
40988
- selector: "ui-icon",
40989
- inputs: [
40990
- "name",
40991
- "size",
40992
- "spin",
40993
- "fill",
40994
- "severity"
40995
- ]
40996
- }, {
40997
- kind: "directive",
40998
- type: NgTemplateOutlet,
40999
- selector: "[ngTemplateOutlet]",
41000
- inputs: [
41001
- "ngTemplateOutletContext",
41002
- "ngTemplateOutlet",
41003
- "ngTemplateOutletInjector"
41004
- ]
41005
- }]
41075
+ dependencies: [
41076
+ {
41077
+ kind: "directive",
41078
+ type: OverflowTitleDirective,
41079
+ selector: "[fOverflowTitle]"
41080
+ },
41081
+ {
41082
+ kind: "component",
41083
+ type: UiIconComponent,
41084
+ selector: "ui-icon",
41085
+ inputs: [
41086
+ "name",
41087
+ "size",
41088
+ "spin",
41089
+ "fill",
41090
+ "severity"
41091
+ ]
41092
+ },
41093
+ {
41094
+ kind: "directive",
41095
+ type: NgTemplateOutlet,
41096
+ selector: "[ngTemplateOutlet]",
41097
+ inputs: [
41098
+ "ngTemplateOutletContext",
41099
+ "ngTemplateOutlet",
41100
+ "ngTemplateOutletInjector"
41101
+ ]
41102
+ }
41103
+ ]
41006
41104
  });
41007
41105
  };
41008
41106
  i0.ɵɵngDeclareClassMetadata({
@@ -41014,7 +41112,11 @@ i0.ɵɵngDeclareClassMetadata({
41014
41112
  type: Component,
41015
41113
  args: [{
41016
41114
  selector: "f-cascadeselect",
41017
- imports: [UiIconComponent, NgTemplateOutlet],
41115
+ imports: [
41116
+ OverflowTitleDirective,
41117
+ UiIconComponent,
41118
+ NgTemplateOutlet
41119
+ ],
41018
41120
  providers: [{
41019
41121
  provide: NG_VALUE_ACCESSOR,
41020
41122
  useExisting: forwardRef(() => CascadeSelectComponent),
@@ -41040,7 +41142,7 @@ i0.ɵɵngDeclareClassMetadata({
41040
41142
  (keydown)="onKeyDown($event)"
41041
41143
  >
41042
41144
  @if (valueTpl()) {
41043
- <span class="flex-1 min-w-0 truncate text-left text-sm">
41145
+ <span fOverflowTitle class="flex-1 min-w-0 truncate text-left text-sm">
41044
41146
  <ng-container
41045
41147
  [ngTemplateOutlet]="valueTpl()"
41046
41148
  [ngTemplateOutletContext]="{
@@ -41050,7 +41152,7 @@ i0.ɵɵngDeclareClassMetadata({
41050
41152
  />
41051
41153
  </span>
41052
41154
  } @else {
41053
- <span
41155
+ <span fOverflowTitle
41054
41156
  class="flex-1 min-w-0 truncate text-left text-sm"
41055
41157
  [class.text-(--f-form-field-placeholder-color)]="
41056
41158
  !selectedPath().length
@@ -41121,7 +41223,7 @@ i0.ɵɵngDeclareClassMetadata({
41121
41223
  (click)="onOptionClick(opt, $index)"
41122
41224
  (mouseenter)="onOptionHover(opt, $index)"
41123
41225
  >
41124
- <span class="truncate">
41226
+ <span fOverflowTitle class="truncate">
41125
41227
  @if (getChildren(opt, $index).length && groupTpl()) {
41126
41228
  <ng-container
41127
41229
  [ngTemplateOutlet]="groupTpl()"
@@ -49488,6 +49590,6 @@ i0.ɵɵngDeclareClassMetadata({
49488
49590
  }],
49489
49591
  ctorParameters: () => []
49490
49592
  });
49491
- export { AURA_PRESET, AccordionComponent, AccordionContentComponent, AccordionContext, AccordionHeaderComponent, AccordionPanelComponent, AnimateOnScrollDirective, AutoCompleteComponent, AutoFocusDirective, AvatarComponent, AvatarGroupComponent, BadgeComponent, BlockUiComponent, BreadcrumbComponent, ButtonComponent, ButtonGroupComponent, CardComponent, CarouselComponent, CascadeSelectComponent, ChartComponent, CheckboxComponent, ChipComponent, ColorPickerComponent, ConfirmDialog, ConfirmPopupComponent, ConfirmationService, ContextMenuComponent, DYNAMIC_DIALOG_DATA, DYNAMIC_DIALOG_REF, DataViewComponent, DatePickerComponent, DialogComponent, DividerComponent, DockComponent, DrawerComponent, DynamicDialogComponent, DynamicDialogRef, DynamicDialogService, EditorComponent, FButtonDirective, FTemplateDirective, FieldsetComponent, FileUploadComponent, FloatLabelComponent, FluidComponent, GalleriaComponent, IconFieldComponent, IftaLabelComponent, ImageCompareComponent, ImageComponent, InplaceComponent, InputGroupAddonComponent, InputGroupComponent, InputIconComponent, InputMaskDirective, InputNumberComponent, InputOtpComponent, InputPasswordDirective, InputTextDirective, KeyFilterDirective, KnobComponent, LARA_PRESET, ListboxComponent, MegaMenuComponent, MenuComponent, MenubarComponent, MessageComponent, MessageService, MeterGroupComponent, MultiSelectComponent, NOIR_PRIMARY, NORA_PRESET, NgUIConfig, OrderListComponent, OrganizationChartComponent, OverlayBadgeComponent, OverlayStackService, PRESETS, PRESET_NAMES, PRIMARY_PALETTES, PaginatorComponent, PanelComponent, PanelMenuComponent, PasswordComponent, PickListComponent, PopoverComponent, ProgressSpinnerComponent, ProgressbarComponent, RadioButtonComponent, RatingComponent, RippleDirective, SURFACE_PALETTES, ScrollPanelComponent, ScrollTopComponent, ScrollerComponent, SelectButtonComponent, SelectComponent, SkeletonComponent, SliderComponent, SortIconComponent, SortableColumnDirective, SpeedDialComponent, SplitButtonComponent, SplitterComponent, SplitterPanelComponent, StepsComponent, StyleClassDirective, TabComponent, TabListComponent, TabPanelComponent, TabPanelsComponent, TableComponent, TabsComponent, TabsContext, TagComponent, TerminalComponent, TextareaDirective, TieredMenuComponent, TimelineComponent, ToastComponent, ToggleButtonComponent, ToggleSwitchComponent, ToolbarComponent, TooltipDirective, TreeComponent, TreeSelectComponent, TreeTableComponent, TreeTableService, TreeTableTogglerComponent, UiIconComponent, applyDarkSemantics, applyLightSemantics, applyPreset, applyPrimaryPalette, applySurfacePalette, applyTheme, attachOverlayPosition, buildBootstrapPreset, computeOverlayPlacement, overlayPlacementStyle, overlayPosition, provideNgUI };
49593
+ export { AURA_PRESET, AccordionComponent, AccordionContentComponent, AccordionContext, AccordionHeaderComponent, AccordionPanelComponent, AnimateOnScrollDirective, AutoCompleteComponent, AutoFocusDirective, AvatarComponent, AvatarGroupComponent, BadgeComponent, BlockUiComponent, BreadcrumbComponent, ButtonComponent, ButtonGroupComponent, CardComponent, CarouselComponent, CascadeSelectComponent, ChartComponent, CheckboxComponent, ChipComponent, ColorPickerComponent, ConfirmDialog, ConfirmPopupComponent, ConfirmationService, ContextMenuComponent, DYNAMIC_DIALOG_DATA, DYNAMIC_DIALOG_REF, DataViewComponent, DatePickerComponent, DialogComponent, DividerComponent, DockComponent, DrawerComponent, DynamicDialogComponent, DynamicDialogRef, DynamicDialogService, EditorComponent, FButtonDirective, FTemplateDirective, FieldsetComponent, FileUploadComponent, FloatLabelComponent, FluidComponent, GalleriaComponent, IconFieldComponent, IftaLabelComponent, ImageCompareComponent, ImageComponent, InplaceComponent, InputGroupAddonComponent, InputGroupComponent, InputIconComponent, InputMaskDirective, InputNumberComponent, InputOtpComponent, InputPasswordDirective, InputTextDirective, KeyFilterDirective, KnobComponent, LARA_PRESET, ListboxComponent, MegaMenuComponent, MenuComponent, MenubarComponent, MessageComponent, MessageService, MeterGroupComponent, MultiSelectComponent, NOIR_PRIMARY, NORA_PRESET, NgUIConfig, OrderListComponent, OrganizationChartComponent, OverflowTitleDirective, OverlayBadgeComponent, OverlayStackService, PRESETS, PRESET_NAMES, PRIMARY_PALETTES, PaginatorComponent, PanelComponent, PanelMenuComponent, PasswordComponent, PickListComponent, PopoverComponent, ProgressSpinnerComponent, ProgressbarComponent, RadioButtonComponent, RatingComponent, RippleDirective, SURFACE_PALETTES, ScrollPanelComponent, ScrollTopComponent, ScrollerComponent, SelectButtonComponent, SelectComponent, SkeletonComponent, SliderComponent, SortIconComponent, SortableColumnDirective, SpeedDialComponent, SplitButtonComponent, SplitterComponent, SplitterPanelComponent, StepsComponent, StyleClassDirective, TabComponent, TabListComponent, TabPanelComponent, TabPanelsComponent, TableComponent, TabsComponent, TabsContext, TagComponent, TerminalComponent, TextareaDirective, TieredMenuComponent, TimelineComponent, ToastComponent, ToggleButtonComponent, ToggleSwitchComponent, ToolbarComponent, TooltipDirective, TreeComponent, TreeSelectComponent, TreeTableComponent, TreeTableService, TreeTableTogglerComponent, UiIconComponent, applyDarkSemantics, applyLightSemantics, applyPreset, applyPrimaryPalette, applySurfacePalette, applyTheme, attachOverlayPosition, buildBootstrapPreset, computeOverlayPlacement, overlayPlacementStyle, overlayPosition, provideNgUI };
49492
49594
 
49493
49595
  //# sourceMappingURL=flusys-ng-ui.mjs.map