@acorex/components 22.1.0-next.0 → 22.1.0-next.10

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.
Files changed (87) hide show
  1. package/combo-box/README.md +12 -3
  2. package/fesm2022/acorex-components-accordion.mjs +2 -2
  3. package/fesm2022/acorex-components-accordion.mjs.map +1 -1
  4. package/fesm2022/acorex-components-action-sheet.mjs +1 -0
  5. package/fesm2022/acorex-components-action-sheet.mjs.map +1 -1
  6. package/fesm2022/acorex-components-button.mjs +4 -4
  7. package/fesm2022/acorex-components-button.mjs.map +1 -1
  8. package/fesm2022/acorex-components-check-box.mjs +2 -2
  9. package/fesm2022/acorex-components-check-box.mjs.map +1 -1
  10. package/fesm2022/acorex-components-combo-box.mjs +389 -31
  11. package/fesm2022/acorex-components-combo-box.mjs.map +1 -1
  12. package/fesm2022/acorex-components-conversation.mjs +222 -101
  13. package/fesm2022/acorex-components-conversation.mjs.map +1 -1
  14. package/fesm2022/acorex-components-decorators.mjs +19 -3
  15. package/fesm2022/acorex-components-decorators.mjs.map +1 -1
  16. package/fesm2022/acorex-components-dialog.mjs +4 -2
  17. package/fesm2022/acorex-components-dialog.mjs.map +1 -1
  18. package/fesm2022/acorex-components-drawer.mjs +2 -2
  19. package/fesm2022/acorex-components-drawer.mjs.map +1 -1
  20. package/fesm2022/acorex-components-dropdown.mjs +4 -4
  21. package/fesm2022/acorex-components-dropdown.mjs.map +1 -1
  22. package/fesm2022/acorex-components-fab.mjs +2 -2
  23. package/fesm2022/acorex-components-fab.mjs.map +1 -1
  24. package/fesm2022/acorex-components-form.mjs +21 -5
  25. package/fesm2022/acorex-components-form.mjs.map +1 -1
  26. package/fesm2022/acorex-components-label.mjs +2 -2
  27. package/fesm2022/acorex-components-label.mjs.map +1 -1
  28. package/fesm2022/acorex-components-list.mjs +2 -2
  29. package/fesm2022/acorex-components-list.mjs.map +1 -1
  30. package/fesm2022/acorex-components-loading-dialog.mjs +59 -42
  31. package/fesm2022/acorex-components-loading-dialog.mjs.map +1 -1
  32. package/fesm2022/acorex-components-lookup.mjs +783 -186
  33. package/fesm2022/acorex-components-lookup.mjs.map +1 -1
  34. package/fesm2022/acorex-components-map.mjs +2 -2
  35. package/fesm2022/acorex-components-map.mjs.map +1 -1
  36. package/fesm2022/acorex-components-menu.mjs +26 -6
  37. package/fesm2022/acorex-components-menu.mjs.map +1 -1
  38. package/fesm2022/acorex-components-notification.mjs +9 -2
  39. package/fesm2022/acorex-components-notification.mjs.map +1 -1
  40. package/fesm2022/acorex-components-password-box.mjs +3 -3
  41. package/fesm2022/acorex-components-password-box.mjs.map +1 -1
  42. package/fesm2022/acorex-components-popover.mjs +7 -6
  43. package/fesm2022/acorex-components-popover.mjs.map +1 -1
  44. package/fesm2022/acorex-components-popup.mjs +4 -2
  45. package/fesm2022/acorex-components-popup.mjs.map +1 -1
  46. package/fesm2022/acorex-components-radio.mjs +2 -2
  47. package/fesm2022/acorex-components-radio.mjs.map +1 -1
  48. package/fesm2022/acorex-components-range-slider.mjs +2 -2
  49. package/fesm2022/acorex-components-range-slider.mjs.map +1 -1
  50. package/fesm2022/acorex-components-scheduler.mjs +6 -6
  51. package/fesm2022/acorex-components-scheduler.mjs.map +1 -1
  52. package/fesm2022/acorex-components-select-box.mjs +19 -9
  53. package/fesm2022/acorex-components-select-box.mjs.map +1 -1
  54. package/fesm2022/acorex-components-selection-list.mjs +2 -2
  55. package/fesm2022/acorex-components-selection-list.mjs.map +1 -1
  56. package/fesm2022/acorex-components-switch.mjs +2 -2
  57. package/fesm2022/acorex-components-switch.mjs.map +1 -1
  58. package/fesm2022/acorex-components-tabs.mjs +2 -2
  59. package/fesm2022/acorex-components-tabs.mjs.map +1 -1
  60. package/fesm2022/acorex-components-tag-box.mjs +2 -2
  61. package/fesm2022/acorex-components-tag-box.mjs.map +1 -1
  62. package/fesm2022/acorex-components-text-area.mjs +2 -2
  63. package/fesm2022/acorex-components-text-area.mjs.map +1 -1
  64. package/fesm2022/acorex-components-toast.mjs +9 -2
  65. package/fesm2022/acorex-components-toast.mjs.map +1 -1
  66. package/fesm2022/acorex-components-tooltip.mjs +2 -2
  67. package/fesm2022/acorex-components-tooltip.mjs.map +1 -1
  68. package/lookup/README.md +24 -8
  69. package/package.json +4 -7
  70. package/select-box/README.md +5 -0
  71. package/types/acorex-components-action-sheet.d.ts +9 -1
  72. package/types/acorex-components-combo-box.d.ts +155 -18
  73. package/types/acorex-components-conversation.d.ts +81 -48
  74. package/types/acorex-components-decorators.d.ts +1 -0
  75. package/types/acorex-components-dialog.d.ts +9 -0
  76. package/types/acorex-components-loading-dialog.d.ts +12 -4
  77. package/types/acorex-components-lookup.d.ts +283 -90
  78. package/types/acorex-components-menu.d.ts +2 -0
  79. package/types/acorex-components-notification.d.ts +11 -1
  80. package/types/acorex-components-popover.d.ts +4 -1
  81. package/types/acorex-components-popup.d.ts +9 -1
  82. package/types/acorex-components-select-box.d.ts +10 -4
  83. package/types/acorex-components-toast.d.ts +10 -1
  84. package/fesm2022/acorex-components-selection-list-2.mjs +0 -168
  85. package/fesm2022/acorex-components-selection-list-2.mjs.map +0 -1
  86. package/selection-list-2/README.md +0 -3
  87. package/types/acorex-components-selection-list-2.d.ts +0 -52
@@ -1,16 +1,25 @@
1
- import { AXListDataSource, NXComponent, convertArrayToDataSource, AXComponent } from '@acorex/cdk/common';
1
+ import { AXListDataSource, AXDataSource, NXValueComponent, convertArrayToDataSource, AXComponent, AXClearableComponent, AXClosableComponent, AXValuableComponent } from '@acorex/cdk/common';
2
+ import { AXChipsComponent } from '@acorex/components/chips';
3
+ import * as i1$1 from '@acorex/components/decorators';
4
+ import { AXDecoratorModule } from '@acorex/components/decorators';
2
5
  import { AXPopoverComponent } from '@acorex/components/popover';
3
- import * as i0 from '@angular/core';
4
- import { input, output, signal, computed, viewChild, inject, NgZone, effect, untracked, Directive, ViewEncapsulation, ChangeDetectionStrategy, Component, model, linkedSignal, NgModule } from '@angular/core';
5
- import { NgTemplateOutlet, AsyncPipe } from '@angular/common';
6
+ import { AXPlatform } from '@acorex/core/platform';
6
7
  import { AXTranslatorPipe } from '@acorex/core/translation';
8
+ import { NgTemplateOutlet, AsyncPipe } from '@angular/common';
9
+ import * as i0 from '@angular/core';
10
+ import { input, output, signal, computed, viewChild, viewChildren, inject, NgZone, effect, untracked, Directive, ViewEncapsulation, ChangeDetectionStrategy, Component, ElementRef, DestroyRef, model, linkedSignal, NgModule } from '@angular/core';
11
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
12
+ import * as i2 from '@acorex/cdk/list-navigation';
13
+ import { AXListNavigationDirective, AXListNavigationItemDirective, AXListNavigationModule } from '@acorex/cdk/list-navigation';
7
14
  import * as i1 from '@angular/cdk/scrolling';
8
15
  import { CdkVirtualScrollViewport, ScrollingModule } from '@angular/cdk/scrolling';
9
16
  import { AXTreeViewComponent } from '@acorex/components/tree-view';
17
+ import { AXDataTableComponent, AXDataTableTextColumnComponent } from '@acorex/components/data-table';
18
+ import { fromEvent, auditTime } from 'rxjs';
10
19
 
11
20
  /**
12
21
  * Shared `AXDataSource` + CDK virtual scroll plumbing for the list-based lookup views
13
- * (`ax-lookup-drop-down-list`, `ax-lookup-multi-select`, `ax-lookup-multi-column`).
22
+ * (`ax-lookup-drop-down-list`, `ax-lookup-multi-select`).
14
23
  */
15
24
  class AXLookupListViewBase {
16
25
  #ngZone;
@@ -65,10 +74,20 @@ class AXLookupListViewBase {
65
74
  */
66
75
  this.loadingTemplate = input(undefined, /* @ts-ignore */
67
76
  ...(ngDevMode ? [{ debugName: "loadingTemplate" }] : /* istanbul ignore next */ []));
77
+ /**
78
+ * When `true`, list rows use alternating background colors for easier scanning.
79
+ */
80
+ this.alternate = input(false, /* @ts-ignore */
81
+ ...(ngDevMode ? [{ debugName: "alternate" }] : /* istanbul ignore next */ []));
68
82
  /**
69
83
  * Emitted when the user picks (or toggles) an item.
70
84
  */
71
85
  this.itemClick = output();
86
+ /**
87
+ * Emitted when keyboard navigation should leave the list (e.g. ArrowUp on the first
88
+ * item, or a printable key that should return focus to the trigger search input).
89
+ */
90
+ this.navigateOut = output();
72
91
  /** CDK virtual scroll adapter over the datasource. */
73
92
  this.listDataSource = signal(null, /* @ts-ignore */
74
93
  ...(ngDevMode ? [{ debugName: "listDataSource" }] : /* istanbul ignore next */ []));
@@ -86,6 +105,10 @@ class AXLookupListViewBase {
86
105
  ...(ngDevMode ? [{ debugName: "viewportHeight" }] : /* istanbul ignore next */ []));
87
106
  this.viewportRef = viewChild(CdkVirtualScrollViewport, /* @ts-ignore */
88
107
  ...(ngDevMode ? [{ debugName: "viewportRef" }] : /* istanbul ignore next */ []));
108
+ this.listNavigation = viewChild(AXListNavigationDirective, /* @ts-ignore */
109
+ ...(ngDevMode ? [{ debugName: "listNavigation" }] : /* istanbul ignore next */ []));
110
+ this.navItems = viewChildren(AXListNavigationItemDirective, /* @ts-ignore */
111
+ ...(ngDevMode ? [{ debugName: "navItems" }] : /* istanbul ignore next */ []));
89
112
  this.#ngZone = inject(NgZone);
90
113
  this.trackByIndex = (index) => index;
91
114
  // CDK measures the viewport size only once, when it initializes. Inside the popover the
@@ -120,6 +143,10 @@ class AXLookupListViewBase {
120
143
  });
121
144
  });
122
145
  }
146
+ /** Moves keyboard focus to the first rendered list option. */
147
+ focusFirst() {
148
+ this.listNavigation()?.focusOnIndex(0);
149
+ }
123
150
  getValue(item) {
124
151
  return item?.[this.valueField()];
125
152
  }
@@ -139,12 +166,71 @@ class AXLookupListViewBase {
139
166
  }
140
167
  this.itemClick.emit({ item, value: this.getValue(item) });
141
168
  }
169
+ /**
170
+ * Commit on mousedown (not click) so a searchable trigger blur cannot destroy the
171
+ * list before the pick is applied.
172
+ */
173
+ handleItemMouseDown(event, item) {
174
+ event.preventDefault();
175
+ event.stopPropagation();
176
+ this.handleItemClick(item);
177
+ }
178
+ handleItemKeypress(e, item) {
179
+ if (e.nativeEvent.key === 'Enter' || e.nativeEvent.code === 'Space') {
180
+ e.nativeEvent.stopPropagation();
181
+ e.nativeEvent.preventDefault();
182
+ this.handleItemClick(item);
183
+ }
184
+ }
185
+ handleListKeypress(e) {
186
+ const key = e.nativeEvent.key;
187
+ const nav = this.listNavigation();
188
+ const viewport = this.viewportRef();
189
+ if (key === 'ArrowUp' && nav && nav.activeIndex() === 0) {
190
+ const offset = viewport?.measureScrollOffset() ?? 0;
191
+ if (offset > 0) {
192
+ e.nativeEvent.preventDefault();
193
+ viewport.scrollToOffset(Math.max(0, offset - this.itemHeight()));
194
+ queueMicrotask(() => nav.focusOnIndex(0));
195
+ return;
196
+ }
197
+ e.nativeEvent.preventDefault();
198
+ this.navigateOut.emit('up');
199
+ return;
200
+ }
201
+ if (key === 'ArrowDown' && nav && viewport) {
202
+ const items = this.navItems();
203
+ if (items.length > 0 && nav.activeIndex() >= items.length - 1) {
204
+ const maxOffset = Math.max(0, this.totalCount() * this.itemHeight() - viewport.getViewportSize());
205
+ const nextOffset = Math.min(maxOffset, viewport.measureScrollOffset() + this.itemHeight());
206
+ if (nextOffset > viewport.measureScrollOffset()) {
207
+ e.nativeEvent.preventDefault();
208
+ viewport.scrollToOffset(nextOffset);
209
+ queueMicrotask(() => nav.focusOnIndex(this.navItems().length - 1));
210
+ }
211
+ return;
212
+ }
213
+ }
214
+ if (key === 'ArrowUp' ||
215
+ key === 'ArrowDown' ||
216
+ key === 'Tab' ||
217
+ key === 'Shift' ||
218
+ key === 'Enter' ||
219
+ key === 'Escape' ||
220
+ key === ' ') {
221
+ return;
222
+ }
223
+ this.navigateOut.emit('typeahead');
224
+ }
225
+ activateNavItem(nav, item) {
226
+ nav?.navigateTo(item);
227
+ }
142
228
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupListViewBase, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
143
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "22.0.8", type: AXLookupListViewBase, isStandalone: true, inputs: { dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: true, transformFunction: null }, valueField: { classPropertyName: "valueField", publicName: "valueField", isSignal: true, isRequired: false, transformFunction: null }, textField: { classPropertyName: "textField", publicName: "textField", isSignal: true, isRequired: false, transformFunction: null }, disabledField: { classPropertyName: "disabledField", publicName: "disabledField", isSignal: true, isRequired: false, transformFunction: null }, selectedValues: { classPropertyName: "selectedValues", publicName: "selectedValues", isSignal: true, isRequired: false, transformFunction: null }, itemHeight: { classPropertyName: "itemHeight", publicName: "itemHeight", isSignal: true, isRequired: false, transformFunction: null }, maxVisibleItems: { classPropertyName: "maxVisibleItems", publicName: "maxVisibleItems", isSignal: true, isRequired: false, transformFunction: null }, itemTemplate: { classPropertyName: "itemTemplate", publicName: "itemTemplate", isSignal: true, isRequired: false, transformFunction: null }, emptyTemplate: { classPropertyName: "emptyTemplate", publicName: "emptyTemplate", isSignal: true, isRequired: false, transformFunction: null }, loadingTemplate: { classPropertyName: "loadingTemplate", publicName: "loadingTemplate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemClick: "itemClick" }, viewQueries: [{ propertyName: "viewportRef", first: true, predicate: CdkVirtualScrollViewport, descendants: true, isSignal: true }], ngImport: i0 }); }
229
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "22.0.8", type: AXLookupListViewBase, isStandalone: true, inputs: { dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: true, transformFunction: null }, valueField: { classPropertyName: "valueField", publicName: "valueField", isSignal: true, isRequired: false, transformFunction: null }, textField: { classPropertyName: "textField", publicName: "textField", isSignal: true, isRequired: false, transformFunction: null }, disabledField: { classPropertyName: "disabledField", publicName: "disabledField", isSignal: true, isRequired: false, transformFunction: null }, selectedValues: { classPropertyName: "selectedValues", publicName: "selectedValues", isSignal: true, isRequired: false, transformFunction: null }, itemHeight: { classPropertyName: "itemHeight", publicName: "itemHeight", isSignal: true, isRequired: false, transformFunction: null }, maxVisibleItems: { classPropertyName: "maxVisibleItems", publicName: "maxVisibleItems", isSignal: true, isRequired: false, transformFunction: null }, itemTemplate: { classPropertyName: "itemTemplate", publicName: "itemTemplate", isSignal: true, isRequired: false, transformFunction: null }, emptyTemplate: { classPropertyName: "emptyTemplate", publicName: "emptyTemplate", isSignal: true, isRequired: false, transformFunction: null }, loadingTemplate: { classPropertyName: "loadingTemplate", publicName: "loadingTemplate", isSignal: true, isRequired: false, transformFunction: null }, alternate: { classPropertyName: "alternate", publicName: "alternate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemClick: "itemClick", navigateOut: "navigateOut" }, viewQueries: [{ propertyName: "viewportRef", first: true, predicate: CdkVirtualScrollViewport, descendants: true, isSignal: true }, { propertyName: "listNavigation", first: true, predicate: AXListNavigationDirective, descendants: true, isSignal: true }, { propertyName: "navItems", predicate: AXListNavigationItemDirective, descendants: true, isSignal: true }], ngImport: i0 }); }
144
230
  }
145
231
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupListViewBase, decorators: [{
146
232
  type: Directive
147
- }], ctorParameters: () => [], propDecorators: { dataSource: [{ type: i0.Input, args: [{ isSignal: true, alias: "dataSource", required: true }] }], valueField: [{ type: i0.Input, args: [{ isSignal: true, alias: "valueField", required: false }] }], textField: [{ type: i0.Input, args: [{ isSignal: true, alias: "textField", required: false }] }], disabledField: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabledField", required: false }] }], selectedValues: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedValues", required: false }] }], itemHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemHeight", required: false }] }], maxVisibleItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxVisibleItems", required: false }] }], itemTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemTemplate", required: false }] }], emptyTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "emptyTemplate", required: false }] }], loadingTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "loadingTemplate", required: false }] }], itemClick: [{ type: i0.Output, args: ["itemClick"] }], viewportRef: [{ type: i0.ViewChild, args: [i0.forwardRef(() => CdkVirtualScrollViewport), { isSignal: true }] }] } });
233
+ }], ctorParameters: () => [], propDecorators: { dataSource: [{ type: i0.Input, args: [{ isSignal: true, alias: "dataSource", required: true }] }], valueField: [{ type: i0.Input, args: [{ isSignal: true, alias: "valueField", required: false }] }], textField: [{ type: i0.Input, args: [{ isSignal: true, alias: "textField", required: false }] }], disabledField: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabledField", required: false }] }], selectedValues: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedValues", required: false }] }], itemHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemHeight", required: false }] }], maxVisibleItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxVisibleItems", required: false }] }], itemTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemTemplate", required: false }] }], emptyTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "emptyTemplate", required: false }] }], loadingTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "loadingTemplate", required: false }] }], alternate: [{ type: i0.Input, args: [{ isSignal: true, alias: "alternate", required: false }] }], itemClick: [{ type: i0.Output, args: ["itemClick"] }], navigateOut: [{ type: i0.Output, args: ["navigateOut"] }], viewportRef: [{ type: i0.ViewChild, args: [i0.forwardRef(() => CdkVirtualScrollViewport), { isSignal: true }] }], listNavigation: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXListNavigationDirective), { isSignal: true }] }], navItems: [{ type: i0.ViewChildren, args: [i0.forwardRef(() => AXListNavigationItemDirective), { isSignal: true }] }] } });
148
234
 
149
235
  /**
150
236
  * Internal mini component for the `drop-down-list` lookup mode:
@@ -154,38 +240,50 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
154
240
  */
155
241
  class AXLookupDropDownListComponent extends AXLookupListViewBase {
156
242
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupDropDownListComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
157
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXLookupDropDownListComponent, isStandalone: true, selector: "ax-lookup-drop-down-list", usesInheritance: true, ngImport: i0, template: `
243
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXLookupDropDownListComponent, isStandalone: true, selector: "ax-lookup-drop-down-list", providers: [{ provide: AXLookupListViewBase, useExisting: AXLookupDropDownListComponent }], usesInheritance: true, ngImport: i0, template: `
158
244
  @if (isEmpty()) {
159
- <div class="ax-lookup-empty">
160
- @if (emptyTemplate()) {
161
- <ng-container [ngTemplateOutlet]="emptyTemplate()!" />
162
- } @else {
245
+ @if (emptyTemplate()) {
246
+ <ng-container [ngTemplateOutlet]="emptyTemplate()!" />
247
+ } @else {
248
+ <div class="ax-lookup-empty">
163
249
  {{ '@acorex:common.general.no-result-found' | translate | async }}
164
- }
165
- </div>
250
+ </div>
251
+ }
166
252
  } @else {
167
253
  <cdk-virtual-scroll-viewport
168
254
  class="ax-lookup-viewport"
169
255
  role="listbox"
256
+ axListNavigation
257
+ #nav="axListNavigation"
170
258
  [itemSize]="itemHeight()"
171
259
  [style.height.px]="viewportHeight()"
260
+ (onKeypress)="handleListKeypress($event)"
172
261
  >
173
262
  <div
174
- *cdkVirtualFor="let item of listDataSource(); trackBy: trackByIndex"
263
+ *cdkVirtualFor="let item of listDataSource(); let i = index; trackBy: trackByIndex"
175
264
  role="option"
176
- class="ax-lookup-option"
265
+ class="ax-lookup-option-host ax-lookup-option"
266
+ axListNavigationItem
267
+ #navItem="axListNavigationItem"
177
268
  [style.height.px]="itemHeight()"
269
+ [class.ax-state-alternate]="alternate() && i % 2 === 1"
178
270
  [class.ax-state-selected]="item != null && isSelected(item)"
179
271
  [class.ax-state-disabled]="item != null && isDisabled(item)"
272
+ [class.ax-state-active]="navItem.isActive()"
180
273
  [attr.aria-selected]="item != null ? isSelected(item) : null"
181
- (click)="handleItemClick(item)"
274
+ (mouseenter)="activateNavItem(nav, navItem)"
275
+ (mousedown)="handleItemMouseDown($event, item)"
276
+ (onKeypress)="handleItemKeypress($event, item)"
182
277
  >
183
278
  @if (item != null) {
184
279
  @if (itemTemplate()) {
185
280
  <ng-container [ngTemplateOutlet]="itemTemplate()!" [ngTemplateOutletContext]="{ $implicit: item }" />
186
281
  } @else {
187
282
  <span class="ax-lookup-option-text">{{ getText(item) }}</span>
188
- <span class="ax-lookup-option-check" aria-hidden="true"></span>
283
+ }
284
+ <!-- Keep check outside itemTemplate so custom rows (platform widgets) still show selection. -->
285
+ @if (isSelected(item)) {
286
+ <span class="ax-lookup-option-check ax-icon ax-icon-check text-primary" aria-hidden="true"></span>
189
287
  }
190
288
  } @else {
191
289
  <ng-container [ngTemplateOutlet]="loadingRow" />
@@ -201,7 +299,7 @@ class AXLookupDropDownListComponent extends AXLookupListViewBase {
201
299
  <span class="ax-lookup-option-loading">{{ '@acorex:common.status.loading' | translate | async }}</span>
202
300
  }
203
301
  </ng-template>
204
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i1.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i1.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i1.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
302
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i1.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i1.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i1.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: AXListNavigationModule }, { kind: "directive", type: i2.AXListNavigationDirective, selector: "[axListNavigation]", inputs: ["orientation"], outputs: ["onNavigationChanged", "onKeypress"], exportAs: ["axListNavigation"] }, { kind: "directive", type: i2.AXListNavigationItemDirective, selector: "[axListNavigationItem]", outputs: ["onKeypress"], exportAs: ["axListNavigationItem"] }, { kind: "pipe", type: AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
205
303
  }
206
304
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupDropDownListComponent, decorators: [{
207
305
  type: Component,
@@ -209,39 +307,52 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
209
307
  selector: 'ax-lookup-drop-down-list',
210
308
  changeDetection: ChangeDetectionStrategy.OnPush,
211
309
  encapsulation: ViewEncapsulation.None,
212
- imports: [ScrollingModule, NgTemplateOutlet, AXTranslatorPipe, AsyncPipe],
310
+ imports: [ScrollingModule, NgTemplateOutlet, AXTranslatorPipe, AsyncPipe, AXListNavigationModule],
311
+ providers: [{ provide: AXLookupListViewBase, useExisting: AXLookupDropDownListComponent }],
213
312
  template: `
214
313
  @if (isEmpty()) {
215
- <div class="ax-lookup-empty">
216
- @if (emptyTemplate()) {
217
- <ng-container [ngTemplateOutlet]="emptyTemplate()!" />
218
- } @else {
314
+ @if (emptyTemplate()) {
315
+ <ng-container [ngTemplateOutlet]="emptyTemplate()!" />
316
+ } @else {
317
+ <div class="ax-lookup-empty">
219
318
  {{ '@acorex:common.general.no-result-found' | translate | async }}
220
- }
221
- </div>
319
+ </div>
320
+ }
222
321
  } @else {
223
322
  <cdk-virtual-scroll-viewport
224
323
  class="ax-lookup-viewport"
225
324
  role="listbox"
325
+ axListNavigation
326
+ #nav="axListNavigation"
226
327
  [itemSize]="itemHeight()"
227
328
  [style.height.px]="viewportHeight()"
329
+ (onKeypress)="handleListKeypress($event)"
228
330
  >
229
331
  <div
230
- *cdkVirtualFor="let item of listDataSource(); trackBy: trackByIndex"
332
+ *cdkVirtualFor="let item of listDataSource(); let i = index; trackBy: trackByIndex"
231
333
  role="option"
232
- class="ax-lookup-option"
334
+ class="ax-lookup-option-host ax-lookup-option"
335
+ axListNavigationItem
336
+ #navItem="axListNavigationItem"
233
337
  [style.height.px]="itemHeight()"
338
+ [class.ax-state-alternate]="alternate() && i % 2 === 1"
234
339
  [class.ax-state-selected]="item != null && isSelected(item)"
235
340
  [class.ax-state-disabled]="item != null && isDisabled(item)"
341
+ [class.ax-state-active]="navItem.isActive()"
236
342
  [attr.aria-selected]="item != null ? isSelected(item) : null"
237
- (click)="handleItemClick(item)"
343
+ (mouseenter)="activateNavItem(nav, navItem)"
344
+ (mousedown)="handleItemMouseDown($event, item)"
345
+ (onKeypress)="handleItemKeypress($event, item)"
238
346
  >
239
347
  @if (item != null) {
240
348
  @if (itemTemplate()) {
241
349
  <ng-container [ngTemplateOutlet]="itemTemplate()!" [ngTemplateOutletContext]="{ $implicit: item }" />
242
350
  } @else {
243
351
  <span class="ax-lookup-option-text">{{ getText(item) }}</span>
244
- <span class="ax-lookup-option-check" aria-hidden="true"></span>
352
+ }
353
+ <!-- Keep check outside itemTemplate so custom rows (platform widgets) still show selection. -->
354
+ @if (isSelected(item)) {
355
+ <span class="ax-lookup-option-check ax-icon ax-icon-check text-primary" aria-hidden="true"></span>
245
356
  }
246
357
  } @else {
247
358
  <ng-container [ngTemplateOutlet]="loadingRow" />
@@ -362,83 +473,280 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
362
473
 
363
474
  /**
364
475
  * Internal mini component for the `multi-column` lookup mode:
365
- * a table-structured, virtualized list with a sticky header row.
476
+ * renders selectable rows in an `ax-data-table` grid and loads further
477
+ * pages as the user scrolls (no pager UI).
366
478
  *
367
479
  * @category Components
368
480
  */
369
- class AXLookupMultiColumnComponent extends AXLookupListViewBase {
481
+ class AXLookupMultiColumnComponent {
482
+ /** Accumulated rows fed to the table (grows as pages are scrolled in). */
483
+ #loadedItems;
484
+ /** Total matching rows from the source (used to size the popup). */
485
+ #totalCount;
486
+ #host;
370
487
  constructor() {
371
- super(...arguments);
372
488
  /**
373
- * Column definitions rendered as a sticky header plus one grid cell per row.
489
+ * The datasource providing the grid rows (paged, remote-capable).
490
+ * Pages are fetched on demand as the user scrolls the table body.
491
+ */
492
+ this.dataSource = input.required(/* @ts-ignore */
493
+ ...(ngDevMode ? [{ debugName: "dataSource" }] : /* istanbul ignore next */ []));
494
+ /**
495
+ * The item property used as the selection value.
496
+ */
497
+ this.valueField = input('id', /* @ts-ignore */
498
+ ...(ngDevMode ? [{ debugName: "valueField" }] : /* istanbul ignore next */ []));
499
+ /**
500
+ * The item property used as the display text.
501
+ */
502
+ this.textField = input('text', /* @ts-ignore */
503
+ ...(ngDevMode ? [{ debugName: "textField" }] : /* istanbul ignore next */ []));
504
+ /**
505
+ * The item property marking an item as disabled.
506
+ */
507
+ this.disabledField = input('disabled', /* @ts-ignore */
508
+ ...(ngDevMode ? [{ debugName: "disabledField" }] : /* istanbul ignore next */ []));
509
+ /**
510
+ * Currently selected values (always an array, even for single selection).
511
+ */
512
+ this.selectedValues = input([], /* @ts-ignore */
513
+ ...(ngDevMode ? [{ debugName: "selectedValues" }] : /* istanbul ignore next */ []));
514
+ /**
515
+ * The fixed row height in pixels passed to the data table.
516
+ */
517
+ this.itemHeight = input(40, /* @ts-ignore */
518
+ ...(ngDevMode ? [{ debugName: "itemHeight" }] : /* istanbul ignore next */ []));
519
+ /**
520
+ * The maximum number of body rows visible before the table scrolls.
521
+ */
522
+ this.maxVisibleItems = input(8, /* @ts-ignore */
523
+ ...(ngDevMode ? [{ debugName: "maxVisibleItems" }] : /* istanbul ignore next */ []));
524
+ /**
525
+ * Column definitions rendered as `ax-text-column` instances.
374
526
  */
375
527
  this.columns = input([], /* @ts-ignore */
376
528
  ...(ngDevMode ? [{ debugName: "columns" }] : /* istanbul ignore next */ []));
377
- /** CSS grid track list built from the column widths. */
378
- this.gridTemplate = computed(() => this.columns()
379
- .map((column) => column.width ?? '1fr')
380
- .join(' '), /* @ts-ignore */
381
- ...(ngDevMode ? [{ debugName: "gridTemplate" }] : /* istanbul ignore next */ []));
529
+ /**
530
+ * Optional custom row content. Context: `$implicit` is the row item.
531
+ * When set, replaces the default multi-column cell layout.
532
+ */
533
+ this.itemTemplate = input(undefined, /* @ts-ignore */
534
+ ...(ngDevMode ? [{ debugName: "itemTemplate" }] : /* istanbul ignore next */ []));
535
+ /**
536
+ * Custom template rendered when the datasource has no items.
537
+ */
538
+ this.emptyTemplate = input(undefined, /* @ts-ignore */
539
+ ...(ngDevMode ? [{ debugName: "emptyTemplate" }] : /* istanbul ignore next */ []));
540
+ /**
541
+ * Custom template rendered while the table is loading.
542
+ */
543
+ this.loadingTemplate = input(undefined, /* @ts-ignore */
544
+ ...(ngDevMode ? [{ debugName: "loadingTemplate" }] : /* istanbul ignore next */ []));
545
+ /**
546
+ * When `true`, table rows use alternating background colors for easier scanning.
547
+ */
548
+ this.alternate = input(false, /* @ts-ignore */
549
+ ...(ngDevMode ? [{ debugName: "alternate" }] : /* istanbul ignore next */ []));
550
+ /**
551
+ * Emitted when the user picks a row.
552
+ */
553
+ this.itemClick = output();
554
+ this.tableRef = viewChild(AXDataTableComponent, /* @ts-ignore */
555
+ ...(ngDevMode ? [{ debugName: "tableRef" }] : /* istanbul ignore next */ []));
556
+ /** Accumulated rows fed to the table (grows as pages are scrolled in). */
557
+ this.#loadedItems = [];
558
+ /** Total matching rows from the source (used to size the popup). */
559
+ this.#totalCount = signal(0, /* @ts-ignore */
560
+ ...(ngDevMode ? [{ debugName: "#totalCount" }] : /* istanbul ignore next */ []));
561
+ /**
562
+ * Local table source: one page of whatever has been scrolled in so far.
563
+ * Kept as a stable instance so the table host is not recreated on each page load.
564
+ * `pageSize` grows with `#loadedItems` — never seed with a huge empty array (data-table
565
+ * initializes `displayedRows` as `new Array(pageSize)`, which caused NG0955-level jank).
566
+ */
567
+ this.tableDataSource = new AXDataSource({
568
+ pageSize: 1,
569
+ key: 'id',
570
+ load: async () => ({
571
+ items: this.#loadedItems,
572
+ total: this.#loadedItems.length,
573
+ }),
574
+ });
575
+ /**
576
+ * Header (~40px) + body rows. Grows with results up to `maxVisibleItems`,
577
+ * then the table body scrolls for the rest.
578
+ */
579
+ this.tableHeight = computed(() => {
580
+ const header = 40;
581
+ const total = this.#totalCount();
582
+ const rows = total > 0 ? total : Math.min(3, this.maxVisibleItems());
583
+ return header + Math.min(rows, this.maxVisibleItems()) * this.itemHeight();
584
+ }, /* @ts-ignore */
585
+ ...(ngDevMode ? [{ debugName: "tableHeight" }] : /* istanbul ignore next */ []));
586
+ this.loadingConfig = computed(() => ({
587
+ enabled: true,
588
+ animation: true,
589
+ loadingTemplate: this.loadingTemplate(),
590
+ }), /* @ts-ignore */
591
+ ...(ngDevMode ? [{ debugName: "loadingConfig" }] : /* istanbul ignore next */ []));
592
+ this.#host = inject((ElementRef));
593
+ this.resolveRowCssClass = (row) => {
594
+ const item = row;
595
+ if (!item) {
596
+ return '';
597
+ }
598
+ const classes = [];
599
+ if (this.isSelected(item)) {
600
+ classes.push('ax-state-selected');
601
+ }
602
+ if (this.isDisabled(item)) {
603
+ classes.push('ax-state-disabled');
604
+ }
605
+ return classes.join(' ');
606
+ };
607
+ effect((onCleanup) => {
608
+ const source = this.dataSource();
609
+ this.tableDataSource.config.key = source.config.key || this.valueField();
610
+ untracked(() => {
611
+ this.#loadedItems = [];
612
+ this.#totalCount.set(0);
613
+ this.#syncTablePageSize();
614
+ this.tableDataSource.refresh({ reset: true });
615
+ });
616
+ const changedSub = source.onChanged.subscribe((event) => {
617
+ this.#loadedItems = event.cachedItems.filter((item) => item != null);
618
+ this.#totalCount.set(event.totalCount);
619
+ this.#syncTablePageSize();
620
+ this.tableDataSource.refresh({ reset: true });
621
+ });
622
+ // Kick the first page; later pages come from scroll.
623
+ queueMicrotask(() => source.setPage(0));
624
+ onCleanup(() => changedSub.unsubscribe());
625
+ });
626
+ effect((onCleanup) => {
627
+ // Rebind when the table instance appears / source changes.
628
+ this.tableRef();
629
+ this.dataSource();
630
+ let scrollSub;
631
+ const timer = setTimeout(() => {
632
+ const wrapper = this.tableRef()?.getHostElement()?.querySelector('.ax-data-table-wrapper') ??
633
+ this.#host.nativeElement.querySelector('.ax-data-table-wrapper');
634
+ if (!wrapper) {
635
+ return;
636
+ }
637
+ scrollSub = fromEvent(wrapper, 'scroll')
638
+ .pipe(auditTime(80))
639
+ .subscribe(() => this.#tryLoadMore(wrapper));
640
+ }, 0);
641
+ onCleanup(() => {
642
+ clearTimeout(timer);
643
+ scrollSub?.unsubscribe();
644
+ });
645
+ });
382
646
  }
383
- getCellText(item, column) {
384
- return String(item?.[column.field] ?? '');
647
+ /** Stable unique key for `@for` — avoids NG0955 when `field` is missing or duplicated. */
648
+ trackColumnKey(index, column) {
649
+ return `${column?.field ?? ''}::${index}`;
385
650
  }
386
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupMultiColumnComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
387
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXLookupMultiColumnComponent, isStandalone: true, selector: "ax-lookup-multi-column", inputs: { columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: `
388
- @if (isEmpty()) {
389
- <div class="ax-lookup-empty">
390
- @if (emptyTemplate()) {
391
- <ng-container [ngTemplateOutlet]="emptyTemplate()!" />
392
- } @else {
393
- {{ '@acorex:common.general.no-result-found' | translate | async }}
651
+ resolveColumnWidth(column) {
652
+ const width = column.width?.trim();
653
+ if (!width || width.includes('fr')) {
654
+ return 'auto';
394
655
  }
395
- </div>
396
- } @else {
397
- <div class="ax-lookup-column-header" role="row" [style.grid-template-columns]="gridTemplate()">
398
- @for (column of columns(); track column.field) {
399
- <span class="ax-lookup-column-header-cell" role="columnheader">{{ column.title }}</span>
656
+ return width;
657
+ }
658
+ #syncTablePageSize() {
659
+ this.tableDataSource.config.pageSize = Math.max(this.#loadedItems.length, 1);
660
+ }
661
+ handleRowClick(event) {
662
+ this.handleItemClick(event.data);
663
+ }
664
+ handleItemClick(item) {
665
+ if (!item || this.isDisabled(item)) {
666
+ return;
400
667
  }
401
- </div>
402
- <cdk-virtual-scroll-viewport
403
- class="ax-lookup-viewport"
404
- role="listbox"
405
- [itemSize]="itemHeight()"
406
- [style.height.px]="viewportHeight()"
407
- >
408
- <div
409
- *cdkVirtualFor="let item of listDataSource(); trackBy: trackByIndex"
410
- role="option"
411
- class="ax-lookup-option ax-lookup-column-row"
412
- [style.height.px]="itemHeight()"
413
- [style.grid-template-columns]="gridTemplate()"
414
- [class.ax-state-selected]="item != null && isSelected(item)"
415
- [class.ax-state-disabled]="item != null && isDisabled(item)"
416
- [attr.aria-selected]="item != null ? isSelected(item) : null"
417
- (click)="handleItemClick(item)"
418
- >
419
- @if (item != null) {
420
- @if (itemTemplate()) {
421
- <ng-container [ngTemplateOutlet]="itemTemplate()!" [ngTemplateOutletContext]="{ $implicit: item }" />
422
- } @else {
423
- @for (column of columns(); track column.field) {
424
- <span class="ax-lookup-column-cell">{{ getCellText(item, column) }}</span>
425
- }
426
- }
427
- } @else {
428
- <ng-container [ngTemplateOutlet]="loadingRow" />
429
- }
430
- </div>
431
- </cdk-virtual-scroll-viewport>
668
+ this.itemClick.emit({ item, value: this.getValue(item) });
432
669
  }
433
-
434
- <ng-template #loadingRow>
435
- @if (loadingTemplate()) {
436
- <ng-container [ngTemplateOutlet]="loadingTemplate()!" />
437
- } @else {
438
- <span class="ax-lookup-option-loading">{{ '@acorex:common.status.loading' | translate | async }}</span>
670
+ handleItemMouseDown(event, item) {
671
+ event.preventDefault();
672
+ event.stopPropagation();
673
+ this.handleItemClick(item);
674
+ }
675
+ isSelected(item) {
676
+ const value = this.getValue(item);
677
+ return this.selectedValues().some((v) => v == value);
678
+ }
679
+ isDisabled(item) {
680
+ return Boolean(item?.[this.disabledField()]);
681
+ }
682
+ #tryLoadMore(wrapper) {
683
+ const nearBottom = wrapper.scrollTop + wrapper.clientHeight >= wrapper.scrollHeight - 48;
684
+ if (!nearBottom) {
685
+ return;
686
+ }
687
+ const source = this.dataSource();
688
+ if (source.isLoading || source.totalCount === 0) {
689
+ return;
690
+ }
691
+ const loadedCount = source.cachedItems.filter((item) => item != null).length;
692
+ if (loadedCount >= source.totalCount) {
693
+ return;
694
+ }
695
+ const nextPage = Math.floor(loadedCount / source.pageSize);
696
+ source.setPage(nextPage);
697
+ }
698
+ getValue(item) {
699
+ return item?.[this.valueField()];
700
+ }
701
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupMultiColumnComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
702
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXLookupMultiColumnComponent, isStandalone: true, selector: "ax-lookup-multi-column", inputs: { dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: true, transformFunction: null }, valueField: { classPropertyName: "valueField", publicName: "valueField", isSignal: true, isRequired: false, transformFunction: null }, textField: { classPropertyName: "textField", publicName: "textField", isSignal: true, isRequired: false, transformFunction: null }, disabledField: { classPropertyName: "disabledField", publicName: "disabledField", isSignal: true, isRequired: false, transformFunction: null }, selectedValues: { classPropertyName: "selectedValues", publicName: "selectedValues", isSignal: true, isRequired: false, transformFunction: null }, itemHeight: { classPropertyName: "itemHeight", publicName: "itemHeight", isSignal: true, isRequired: false, transformFunction: null }, maxVisibleItems: { classPropertyName: "maxVisibleItems", publicName: "maxVisibleItems", isSignal: true, isRequired: false, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, itemTemplate: { classPropertyName: "itemTemplate", publicName: "itemTemplate", isSignal: true, isRequired: false, transformFunction: null }, emptyTemplate: { classPropertyName: "emptyTemplate", publicName: "emptyTemplate", isSignal: true, isRequired: false, transformFunction: null }, loadingTemplate: { classPropertyName: "loadingTemplate", publicName: "loadingTemplate", isSignal: true, isRequired: false, transformFunction: null }, alternate: { classPropertyName: "alternate", publicName: "alternate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemClick: "itemClick" }, host: { properties: { "style.height.px": "tableHeight()" }, classAttribute: "ax-lookup-multi-column" }, viewQueries: [{ propertyName: "tableRef", first: true, predicate: AXDataTableComponent, descendants: true, isSignal: true }], ngImport: i0, template: `
703
+ <ax-data-table
704
+ class="ax-lookup-multi-column-table"
705
+ look="minimal"
706
+ [dataSource]="tableDataSource"
707
+ [itemHeight]="itemHeight()"
708
+ [alternative]="alternate()"
709
+ [emptyTemplate]="emptyTemplate()"
710
+ [loading]="loadingConfig()"
711
+ [paging]="false"
712
+ [showHeader]="true"
713
+ [fixedHeader]="true"
714
+ [showFooter]="false"
715
+ [allowReordering]="false"
716
+ [rowTemplate]="itemTemplate() ? customRowTemplate : undefined"
717
+ [rowCssClass]="resolveRowCssClass"
718
+ (onRowClick)="handleRowClick($event)"
719
+ >
720
+ @for (column of columns(); track trackColumnKey($index, column)) {
721
+ <ax-text-column
722
+ [dataField]="column.field"
723
+ [caption]="column.title"
724
+ [width]="resolveColumnWidth(column)"
725
+ [allowSorting]="false"
726
+ [allowResizing]="false"
727
+ />
439
728
  }
729
+ </ax-data-table>
730
+
731
+ <ng-template #customRowTemplate let-ctx>
732
+ <tr
733
+ [class.ax-state-selected]="ctx.data != null && isSelected(ctx.data)"
734
+ [class.ax-state-disabled]="ctx.data != null && isDisabled(ctx.data)"
735
+ [style.height.px]="itemHeight()"
736
+ [style.max-height.px]="itemHeight()"
737
+ (mousedown)="handleItemMouseDown($event, ctx.data)"
738
+ >
739
+ <td [attr.colspan]="columns().length || 1">
740
+ @if (ctx.data != null && itemTemplate()) {
741
+ <ng-container
742
+ [ngTemplateOutlet]="itemTemplate()!"
743
+ [ngTemplateOutletContext]="{ $implicit: ctx.data }"
744
+ />
745
+ }
746
+ </td>
747
+ </tr>
440
748
  </ng-template>
441
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i1.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i1.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i1.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
749
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: AXDataTableComponent, selector: "ax-data-table", inputs: ["dataSource", "selectedRows", "parentField", "hasChildrenField", "rowDetailsTemplate", "rowCssClass", "cellCssClass", "highlightText", "look", "rowTemplate", "emptyTemplate", "noDataTemplate", "alternative", "showHeader", "fixedHeader", "showFooter", "fixedFooter", "itemHeight", "allowReordering", "paging", "fetchDataMode", "loading", "focusedRow"], outputs: ["selectedRowsChange", "focusedRowChange", "onRowClick", "onRowDbClick", "onColumnsOrderChanged", "onColumnSizeChanged", "onPageChanged"] }, { kind: "component", type: AXDataTableTextColumnComponent, selector: "ax-text-column", inputs: ["width", "caption", "allowSorting", "allowResizing", "fixed", "hasTitle", "customExpandIcon", "customCollapseIcon", "dataField", "expandHandler", "wrapText", "cellTemplate", "footerTemplate", "headerTemplate", "format", "formatOptions"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
442
750
  }
443
751
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupMultiColumnComponent, decorators: [{
444
752
  type: Component,
@@ -446,64 +754,61 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
446
754
  selector: 'ax-lookup-multi-column',
447
755
  changeDetection: ChangeDetectionStrategy.OnPush,
448
756
  encapsulation: ViewEncapsulation.None,
449
- imports: [ScrollingModule, NgTemplateOutlet, AXTranslatorPipe, AsyncPipe],
757
+ imports: [NgTemplateOutlet, AXDataTableComponent, AXDataTableTextColumnComponent],
758
+ host: {
759
+ class: 'ax-lookup-multi-column',
760
+ '[style.height.px]': 'tableHeight()',
761
+ },
450
762
  template: `
451
- @if (isEmpty()) {
452
- <div class="ax-lookup-empty">
453
- @if (emptyTemplate()) {
454
- <ng-container [ngTemplateOutlet]="emptyTemplate()!" />
455
- } @else {
456
- {{ '@acorex:common.general.no-result-found' | translate | async }}
457
- }
458
- </div>
459
- } @else {
460
- <div class="ax-lookup-column-header" role="row" [style.grid-template-columns]="gridTemplate()">
461
- @for (column of columns(); track column.field) {
462
- <span class="ax-lookup-column-header-cell" role="columnheader">{{ column.title }}</span>
463
- }
464
- </div>
465
- <cdk-virtual-scroll-viewport
466
- class="ax-lookup-viewport"
467
- role="listbox"
468
- [itemSize]="itemHeight()"
469
- [style.height.px]="viewportHeight()"
763
+ <ax-data-table
764
+ class="ax-lookup-multi-column-table"
765
+ look="minimal"
766
+ [dataSource]="tableDataSource"
767
+ [itemHeight]="itemHeight()"
768
+ [alternative]="alternate()"
769
+ [emptyTemplate]="emptyTemplate()"
770
+ [loading]="loadingConfig()"
771
+ [paging]="false"
772
+ [showHeader]="true"
773
+ [fixedHeader]="true"
774
+ [showFooter]="false"
775
+ [allowReordering]="false"
776
+ [rowTemplate]="itemTemplate() ? customRowTemplate : undefined"
777
+ [rowCssClass]="resolveRowCssClass"
778
+ (onRowClick)="handleRowClick($event)"
779
+ >
780
+ @for (column of columns(); track trackColumnKey($index, column)) {
781
+ <ax-text-column
782
+ [dataField]="column.field"
783
+ [caption]="column.title"
784
+ [width]="resolveColumnWidth(column)"
785
+ [allowSorting]="false"
786
+ [allowResizing]="false"
787
+ />
788
+ }
789
+ </ax-data-table>
790
+
791
+ <ng-template #customRowTemplate let-ctx>
792
+ <tr
793
+ [class.ax-state-selected]="ctx.data != null && isSelected(ctx.data)"
794
+ [class.ax-state-disabled]="ctx.data != null && isDisabled(ctx.data)"
795
+ [style.height.px]="itemHeight()"
796
+ [style.max-height.px]="itemHeight()"
797
+ (mousedown)="handleItemMouseDown($event, ctx.data)"
470
798
  >
471
- <div
472
- *cdkVirtualFor="let item of listDataSource(); trackBy: trackByIndex"
473
- role="option"
474
- class="ax-lookup-option ax-lookup-column-row"
475
- [style.height.px]="itemHeight()"
476
- [style.grid-template-columns]="gridTemplate()"
477
- [class.ax-state-selected]="item != null && isSelected(item)"
478
- [class.ax-state-disabled]="item != null && isDisabled(item)"
479
- [attr.aria-selected]="item != null ? isSelected(item) : null"
480
- (click)="handleItemClick(item)"
481
- >
482
- @if (item != null) {
483
- @if (itemTemplate()) {
484
- <ng-container [ngTemplateOutlet]="itemTemplate()!" [ngTemplateOutletContext]="{ $implicit: item }" />
485
- } @else {
486
- @for (column of columns(); track column.field) {
487
- <span class="ax-lookup-column-cell">{{ getCellText(item, column) }}</span>
488
- }
489
- }
490
- } @else {
491
- <ng-container [ngTemplateOutlet]="loadingRow" />
799
+ <td [attr.colspan]="columns().length || 1">
800
+ @if (ctx.data != null && itemTemplate()) {
801
+ <ng-container
802
+ [ngTemplateOutlet]="itemTemplate()!"
803
+ [ngTemplateOutletContext]="{ $implicit: ctx.data }"
804
+ />
492
805
  }
493
- </div>
494
- </cdk-virtual-scroll-viewport>
495
- }
496
-
497
- <ng-template #loadingRow>
498
- @if (loadingTemplate()) {
499
- <ng-container [ngTemplateOutlet]="loadingTemplate()!" />
500
- } @else {
501
- <span class="ax-lookup-option-loading">{{ '@acorex:common.status.loading' | translate | async }}</span>
502
- }
806
+ </td>
807
+ </tr>
503
808
  </ng-template>
504
809
  `,
505
810
  }]
506
- }], propDecorators: { columns: [{ type: i0.Input, args: [{ isSignal: true, alias: "columns", required: false }] }] } });
811
+ }], ctorParameters: () => [], propDecorators: { dataSource: [{ type: i0.Input, args: [{ isSignal: true, alias: "dataSource", required: true }] }], valueField: [{ type: i0.Input, args: [{ isSignal: true, alias: "valueField", required: false }] }], textField: [{ type: i0.Input, args: [{ isSignal: true, alias: "textField", required: false }] }], disabledField: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabledField", required: false }] }], selectedValues: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedValues", required: false }] }], itemHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemHeight", required: false }] }], maxVisibleItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxVisibleItems", required: false }] }], columns: [{ type: i0.Input, args: [{ isSignal: true, alias: "columns", required: false }] }], itemTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemTemplate", required: false }] }], emptyTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "emptyTemplate", required: false }] }], loadingTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "loadingTemplate", required: false }] }], alternate: [{ type: i0.Input, args: [{ isSignal: true, alias: "alternate", required: false }] }], itemClick: [{ type: i0.Output, args: ["itemClick"] }], tableRef: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXDataTableComponent), { isSignal: true }] }] } });
507
812
 
508
813
  /**
509
814
  * Internal mini component for the `multi-select-tree` lookup mode:
@@ -613,32 +918,42 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
613
918
  */
614
919
  class AXLookupMultiSelectComponent extends AXLookupListViewBase {
615
920
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupMultiSelectComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
616
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXLookupMultiSelectComponent, isStandalone: true, selector: "ax-lookup-multi-select", usesInheritance: true, ngImport: i0, template: `
921
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXLookupMultiSelectComponent, isStandalone: true, selector: "ax-lookup-multi-select", providers: [{ provide: AXLookupListViewBase, useExisting: AXLookupMultiSelectComponent }], usesInheritance: true, ngImport: i0, template: `
617
922
  @if (isEmpty()) {
618
- <div class="ax-lookup-empty">
619
- @if (emptyTemplate()) {
620
- <ng-container [ngTemplateOutlet]="emptyTemplate()!" />
621
- } @else {
923
+ @if (emptyTemplate()) {
924
+ <ng-container [ngTemplateOutlet]="emptyTemplate()!" />
925
+ } @else {
926
+ <div class="ax-lookup-empty">
622
927
  {{ '@acorex:common.general.no-result-found' | translate | async }}
623
- }
624
- </div>
928
+ </div>
929
+ }
625
930
  } @else {
626
931
  <cdk-virtual-scroll-viewport
627
932
  class="ax-lookup-viewport"
628
933
  role="listbox"
629
934
  aria-multiselectable="true"
935
+ axListNavigation
936
+ #nav="axListNavigation"
630
937
  [itemSize]="itemHeight()"
631
938
  [style.height.px]="viewportHeight()"
939
+ (onKeypress)="handleListKeypress($event)"
632
940
  >
633
941
  <div
634
- *cdkVirtualFor="let item of listDataSource(); trackBy: trackByIndex"
942
+ *cdkVirtualFor="let item of listDataSource(); let i = index; trackBy: trackByIndex"
635
943
  role="option"
636
- class="ax-lookup-option"
944
+ class="ax-lookup-option-host ax-lookup-option"
945
+ axListNavigationItem
946
+ #navItem="axListNavigationItem"
637
947
  [style.height.px]="itemHeight()"
948
+ [class.ax-lookup-option-host--check]="!!itemTemplate()"
949
+ [class.ax-state-alternate]="alternate() && i % 2 === 1"
638
950
  [class.ax-state-selected]="item != null && isSelected(item)"
639
951
  [class.ax-state-disabled]="item != null && isDisabled(item)"
952
+ [class.ax-state-active]="navItem.isActive()"
640
953
  [attr.aria-selected]="item != null ? isSelected(item) : null"
641
- (click)="handleItemClick(item)"
954
+ (mouseenter)="activateNavItem(nav, navItem)"
955
+ (mousedown)="handleItemMouseDown($event, item)"
956
+ (onKeypress)="handleItemKeypress($event, item)"
642
957
  >
643
958
  @if (item != null) {
644
959
  <input
@@ -667,7 +982,7 @@ class AXLookupMultiSelectComponent extends AXLookupListViewBase {
667
982
  <span class="ax-lookup-option-loading">{{ '@acorex:common.status.loading' | translate | async }}</span>
668
983
  }
669
984
  </ng-template>
670
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i1.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i1.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i1.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
985
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i1.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i1.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i1.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: AXListNavigationModule }, { kind: "directive", type: i2.AXListNavigationDirective, selector: "[axListNavigation]", inputs: ["orientation"], outputs: ["onNavigationChanged", "onKeypress"], exportAs: ["axListNavigation"] }, { kind: "directive", type: i2.AXListNavigationItemDirective, selector: "[axListNavigationItem]", outputs: ["onKeypress"], exportAs: ["axListNavigationItem"] }, { kind: "pipe", type: AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
671
986
  }
672
987
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupMultiSelectComponent, decorators: [{
673
988
  type: Component,
@@ -675,33 +990,44 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
675
990
  selector: 'ax-lookup-multi-select',
676
991
  changeDetection: ChangeDetectionStrategy.OnPush,
677
992
  encapsulation: ViewEncapsulation.None,
678
- imports: [ScrollingModule, NgTemplateOutlet, AXTranslatorPipe, AsyncPipe],
993
+ imports: [ScrollingModule, NgTemplateOutlet, AXTranslatorPipe, AsyncPipe, AXListNavigationModule],
994
+ providers: [{ provide: AXLookupListViewBase, useExisting: AXLookupMultiSelectComponent }],
679
995
  template: `
680
996
  @if (isEmpty()) {
681
- <div class="ax-lookup-empty">
682
- @if (emptyTemplate()) {
683
- <ng-container [ngTemplateOutlet]="emptyTemplate()!" />
684
- } @else {
997
+ @if (emptyTemplate()) {
998
+ <ng-container [ngTemplateOutlet]="emptyTemplate()!" />
999
+ } @else {
1000
+ <div class="ax-lookup-empty">
685
1001
  {{ '@acorex:common.general.no-result-found' | translate | async }}
686
- }
687
- </div>
1002
+ </div>
1003
+ }
688
1004
  } @else {
689
1005
  <cdk-virtual-scroll-viewport
690
1006
  class="ax-lookup-viewport"
691
1007
  role="listbox"
692
1008
  aria-multiselectable="true"
1009
+ axListNavigation
1010
+ #nav="axListNavigation"
693
1011
  [itemSize]="itemHeight()"
694
1012
  [style.height.px]="viewportHeight()"
1013
+ (onKeypress)="handleListKeypress($event)"
695
1014
  >
696
1015
  <div
697
- *cdkVirtualFor="let item of listDataSource(); trackBy: trackByIndex"
1016
+ *cdkVirtualFor="let item of listDataSource(); let i = index; trackBy: trackByIndex"
698
1017
  role="option"
699
- class="ax-lookup-option"
1018
+ class="ax-lookup-option-host ax-lookup-option"
1019
+ axListNavigationItem
1020
+ #navItem="axListNavigationItem"
700
1021
  [style.height.px]="itemHeight()"
1022
+ [class.ax-lookup-option-host--check]="!!itemTemplate()"
1023
+ [class.ax-state-alternate]="alternate() && i % 2 === 1"
701
1024
  [class.ax-state-selected]="item != null && isSelected(item)"
702
1025
  [class.ax-state-disabled]="item != null && isDisabled(item)"
1026
+ [class.ax-state-active]="navItem.isActive()"
703
1027
  [attr.aria-selected]="item != null ? isSelected(item) : null"
704
- (click)="handleItemClick(item)"
1028
+ (mouseenter)="activateNavItem(nav, navItem)"
1029
+ (mousedown)="handleItemMouseDown($event, item)"
1030
+ (onKeypress)="handleItemKeypress($event, item)"
705
1031
  >
706
1032
  @if (item != null) {
707
1033
  <input
@@ -742,11 +1068,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
742
1068
  * - `multi-select` — a predefined list of options for multiple item selection (chips in the trigger).
743
1069
  * - `drop-down-tree` — a predefined list rendered in a tree-like structure for single item selection.
744
1070
  * - `multi-select-tree` — a tree-like structure for multiple item selection.
745
- * - `multi-column` — a table-structured list; when searchable, the trigger input filters as you type.
1071
+ * - `multi-column` — an `ax-data-table` grid; when searchable, the trigger input filters as you type.
1072
+ *
1073
+ * With `adaptivityEnabled` (default `true`), the list opens as a bottom actionsheet on small
1074
+ * screens instead of an anchored dropdown — the same alternate presentation as `ax-select-box`.
1075
+ *
1076
+ * Implements {@link FormValueControl} so `[(ngModel)]` / signal forms work via the `value` model
1077
+ * (no `ControlValueAccessor`).
746
1078
  *
747
1079
  * @category Components
748
1080
  */
749
- class AXLookupComponent extends NXComponent {
1081
+ class AXLookupComponent extends NXValueComponent {
1082
+ #platform;
1083
+ #destroyRef;
750
1084
  #itemsCache;
751
1085
  #isUserInteraction;
752
1086
  #lastValue;
@@ -757,6 +1091,13 @@ class AXLookupComponent extends NXComponent {
757
1091
  #searchDebounce;
758
1092
  constructor() {
759
1093
  super();
1094
+ this.#platform = inject(AXPlatform);
1095
+ this.#destroyRef = inject(DestroyRef);
1096
+ /**
1097
+ * The name of the form field, used by validation rules and `ax-form.validate(names)`.
1098
+ */
1099
+ this.name = input('', /* @ts-ignore */
1100
+ ...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
760
1101
  /**
761
1102
  * The lookup rendering mode. Selects which mini component renders in the popup.
762
1103
  */
@@ -791,7 +1132,7 @@ class AXLookupComponent extends NXComponent {
791
1132
  this.disabledField = input('disabled', /* @ts-ignore */
792
1133
  ...(ngDevMode ? [{ debugName: "disabledField" }] : /* istanbul ignore next */ []));
793
1134
  /**
794
- * Column definitions for the `multi-column` mode.
1135
+ * Column definitions for the `multi-column` mode (rendered as `ax-text-column` in `ax-data-table`).
795
1136
  */
796
1137
  this.columns = input([], /* @ts-ignore */
797
1138
  ...(ngDevMode ? [{ debugName: "columns" }] : /* istanbul ignore next */ []));
@@ -802,6 +1143,23 @@ class AXLookupComponent extends NXComponent {
802
1143
  */
803
1144
  this.searchable = input(true, /* @ts-ignore */
804
1145
  ...(ngDevMode ? [{ debugName: "searchable" }] : /* istanbul ignore next */ []));
1146
+ /**
1147
+ * When `true` (default), the popup list uses the alternate actionsheet presentation on small
1148
+ * screens (`SM`). When `false`, the list always opens as an anchored dropdown.
1149
+ */
1150
+ this.adaptivityEnabled = input(true, /* @ts-ignore */
1151
+ ...(ngDevMode ? [{ debugName: "adaptivityEnabled" }] : /* istanbul ignore next */ []));
1152
+ /**
1153
+ * Title shown in the actionsheet header on small screens. Falls back to `placeholder`.
1154
+ */
1155
+ this.caption = input('', /* @ts-ignore */
1156
+ ...(ngDevMode ? [{ debugName: "caption" }] : /* istanbul ignore next */ []));
1157
+ /**
1158
+ * When `true`, list rows use alternating background colors for easier scanning
1159
+ * (`drop-down-list`, `multi-select`, and `multi-column` modes).
1160
+ */
1161
+ this.alternate = input(false, /* @ts-ignore */
1162
+ ...(ngDevMode ? [{ debugName: "alternate" }] : /* istanbul ignore next */ []));
805
1163
  /**
806
1164
  * Placeholder for the trigger search input when items are already selected
807
1165
  * (mainly useful in `multi-select`). Falls back to `placeholder` when the selection is empty.
@@ -816,12 +1174,12 @@ class AXLookupComponent extends NXComponent {
816
1174
  /**
817
1175
  * Whether the lookup is disabled.
818
1176
  */
819
- this.disabled = model(false, /* @ts-ignore */
1177
+ this.disabled = input(false, /* @ts-ignore */
820
1178
  ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
821
1179
  /**
822
1180
  * Whether the lookup is readonly.
823
1181
  */
824
- this.readonly = model(false, /* @ts-ignore */
1182
+ this.readonly = input(false, /* @ts-ignore */
825
1183
  ...(ngDevMode ? [{ debugName: "readonly" }] : /* istanbul ignore next */ []));
826
1184
  /**
827
1185
  * Predefined look scheme of the editor container. Same looks as other editor components like ax-text-box.
@@ -865,10 +1223,18 @@ class AXLookupComponent extends NXComponent {
865
1223
  ...(ngDevMode ? [{ debugName: "loadingTemplate" }] : /* istanbul ignore next */ []));
866
1224
  /**
867
1225
  * The selected value(s): a scalar in single modes, an array in
868
- * `multi-select` / `multi-select-tree`. Supports two-way binding.
1226
+ * `multi-select` / `multi-select-tree`. Supports `[(value)]`, `[(ngModel)]`, and signal forms
1227
+ * via {@link FormValueControl}.
869
1228
  */
870
1229
  this.value = model(null, /* @ts-ignore */
871
1230
  ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
1231
+ /**
1232
+ * Full items that resolve the current `value` key(s) without calling datasource `byKey`.
1233
+ * Use when the parent already has the selected entity (e.g. edit forms). Seeds the internal
1234
+ * item cache; missing keys still fall through to `find` / `byKey`.
1235
+ */
1236
+ this.valueItems = input([], /* @ts-ignore */
1237
+ ...(ngDevMode ? [{ debugName: "valueItems" }] : /* istanbul ignore next */ []));
872
1238
  /**
873
1239
  * Emitted when the selected value changes.
874
1240
  */
@@ -877,6 +1243,22 @@ class AXLookupComponent extends NXComponent {
877
1243
  * Emitted when the selection changes, carrying the resolved selected items.
878
1244
  */
879
1245
  this.onSelectionChanged = output();
1246
+ /**
1247
+ * Emitted when the trigger receives focus.
1248
+ */
1249
+ this.onFocus = output();
1250
+ /**
1251
+ * Emitted when the trigger loses focus.
1252
+ */
1253
+ this.onBlur = output();
1254
+ /**
1255
+ * Emitted when a list/tree item is clicked.
1256
+ */
1257
+ this.onItemClick = output();
1258
+ /**
1259
+ * Emitted when an item is selected (click or keyboard).
1260
+ */
1261
+ this.onItemSelected = output();
880
1262
  /**
881
1263
  * Emitted when the popup opens.
882
1264
  */
@@ -888,6 +1270,9 @@ class AXLookupComponent extends NXComponent {
888
1270
  /** Whether the popup is expanded. */
889
1271
  this.expanded = signal(false, /* @ts-ignore */
890
1272
  ...(ngDevMode ? [{ debugName: "expanded" }] : /* istanbul ignore next */ []));
1273
+ /** Whether the list is currently shown as a bottom actionsheet (small screens + adaptivity). */
1274
+ this.isActionsheetStyle = signal(false, /* @ts-ignore */
1275
+ ...(ngDevMode ? [{ debugName: "isActionsheetStyle" }] : /* istanbul ignore next */ []));
891
1276
  /** Whether the current mode selects multiple values. */
892
1277
  this.isMultiple = computed(() => this.mode() === 'multi-select' || this.mode() === 'multi-select-tree', /* @ts-ignore */
893
1278
  ...(ngDevMode ? [{ debugName: "isMultiple" }] : /* istanbul ignore next */ []));
@@ -936,12 +1321,29 @@ class AXLookupComponent extends NXComponent {
936
1321
  * Text typed in the editable trigger input.
937
1322
  * Multi-select starts empty; single modes sync from the selected display text.
938
1323
  */
939
- this.searchText = linkedSignal(() => (this.mode() === 'multi-select' ? '' : this.displayText()), /* @ts-ignore */
1324
+ this.searchText = linkedSignal(() => (this.mode() === 'multi-select' || this.mode() === 'multi-select-tree' ? '' : this.displayText()), /* @ts-ignore */
940
1325
  ...(ngDevMode ? [{ debugName: "searchText" }] : /* istanbul ignore next */ []));
1326
+ /**
1327
+ * Whether the trigger should render `selectedTemplate` instead of the plain input text.
1328
+ * Searchable mode shows the template while the popup is closed and the input still matches
1329
+ * the selected display text (same pattern as combo-box).
1330
+ */
1331
+ this.showSelectedTemplate = computed(() => {
1332
+ if (this.isMultiple() || !this.selectedTemplate() || this.selectedItems().length === 0) {
1333
+ return false;
1334
+ }
1335
+ if (!this.isEditableTrigger()) {
1336
+ return true;
1337
+ }
1338
+ return !this.expanded() && this.searchText() === this.displayText();
1339
+ }, /* @ts-ignore */
1340
+ ...(ngDevMode ? [{ debugName: "showSelectedTemplate" }] : /* istanbul ignore next */ []));
941
1341
  this.popoverRef = viewChild(AXPopoverComponent, /* @ts-ignore */
942
1342
  ...(ngDevMode ? [{ debugName: "popoverRef" }] : /* istanbul ignore next */ []));
943
1343
  this.triggerSearchInput = viewChild('triggerSearchInput', /* @ts-ignore */
944
1344
  ...(ngDevMode ? [{ debugName: "triggerSearchInput" }] : /* istanbul ignore next */ []));
1345
+ this.listView = viewChild(AXLookupListViewBase, /* @ts-ignore */
1346
+ ...(ngDevMode ? [{ debugName: "listView" }] : /* istanbul ignore next */ []));
945
1347
  this.#itemsCache = new Map();
946
1348
  this.#isUserInteraction = false;
947
1349
  this.#lastValue = undefined;
@@ -959,13 +1361,31 @@ class AXLookupComponent extends NXComponent {
959
1361
  ...(ngDevMode ? [{ debugName: "triggerSearchPlaceholder" }] : /* istanbul ignore next */ []));
960
1362
  effect(() => this.#emitValueChanged(this.value()));
961
1363
  effect(() => this.#emitOpenedOrClosed(this.expanded()));
962
- // Resolve selected items whenever the value (or the sources) change.
963
1364
  effect(() => {
1365
+ this.adaptivityEnabled();
1366
+ untracked(() => this.#syncActionsheetStyle());
1367
+ });
1368
+ this.#platform.resize.pipe(takeUntilDestroyed(this.#destroyRef)).subscribe(() => {
1369
+ this.#syncActionsheetStyle();
1370
+ // Match dropdown-box: close anchored dropdowns on resize; keep actionsheet open.
1371
+ if (this.expanded() && !this.isActionsheetStyle()) {
1372
+ this.close();
1373
+ }
1374
+ });
1375
+ // Seed the actionsheet flag once.
1376
+ this.#syncActionsheetStyle();
1377
+ // Seed the item cache from valueItems, then resolve selection.
1378
+ effect(() => {
1379
+ const seeded = this.valueItems();
964
1380
  const values = this.selectedValues();
1381
+ this.valueField();
965
1382
  this.mode();
966
1383
  this.dataSource();
967
1384
  this.treeDataSource();
968
- untracked(() => void this.#resolveSelectedItems(values));
1385
+ untracked(() => {
1386
+ this.#seedItemsCache(seeded);
1387
+ void this.#resolveSelectedItems(values);
1388
+ });
969
1389
  });
970
1390
  // Keep the popover in sync with the expanded state.
971
1391
  effect(() => {
@@ -984,10 +1404,18 @@ class AXLookupComponent extends NXComponent {
984
1404
  });
985
1405
  });
986
1406
  }
1407
+ #syncActionsheetStyle() {
1408
+ this.isActionsheetStyle.set(this.adaptivityEnabled() && this.#platform.is('SM'));
1409
+ }
987
1410
  /** Returns the display text of an item using the `textField` mapping. */
988
1411
  getItemText(item) {
989
1412
  return String(item?.[this.textField()] ?? '');
990
1413
  }
1414
+ /** Stable unique key for selected chips — avoids NG0955 and remounts on reorder/remove. */
1415
+ trackSelectedKey(item) {
1416
+ const key = item?.[this.valueField()];
1417
+ return key != null ? key : item;
1418
+ }
991
1419
  /**
992
1420
  * Opens (editable trigger) or toggles the popup on trigger click.
993
1421
  */
@@ -1001,6 +1429,69 @@ class AXLookupComponent extends NXComponent {
1001
1429
  return;
1002
1430
  }
1003
1431
  this.expanded.update((open) => !open);
1432
+ if (!this.expanded()) {
1433
+ return;
1434
+ }
1435
+ queueMicrotask(() => this.focusListFirst());
1436
+ }
1437
+ /**
1438
+ * Focuses the lookup trigger input.
1439
+ */
1440
+ focus(options) {
1441
+ if (this.disabled()) {
1442
+ return;
1443
+ }
1444
+ this.triggerSearchInput()?.nativeElement.focus(options);
1445
+ }
1446
+ /**
1447
+ * Handles keyboard interaction on the trigger input.
1448
+ */
1449
+ onTriggerKeydown(e) {
1450
+ if (this.disabled() || this.readonly()) {
1451
+ return;
1452
+ }
1453
+ if (e.key === 'Escape') {
1454
+ this.close();
1455
+ return;
1456
+ }
1457
+ if (e.key === 'ArrowDown') {
1458
+ e.preventDefault();
1459
+ this.expanded.set(true);
1460
+ queueMicrotask(() => this.focusListFirst());
1461
+ return;
1462
+ }
1463
+ if (!this.isEditableTrigger() && (e.key === 'Enter' || e.key === ' ')) {
1464
+ e.preventDefault();
1465
+ this.expanded.update((open) => !open);
1466
+ if (this.expanded()) {
1467
+ queueMicrotask(() => this.focusListFirst());
1468
+ }
1469
+ }
1470
+ }
1471
+ /** Blocks typing when the trigger is not editable (keeps Tab / keyboard open working). */
1472
+ onBeforeInput(event) {
1473
+ if (!this.isEditableTrigger() || this.readonly()) {
1474
+ event.preventDefault();
1475
+ }
1476
+ }
1477
+ /**
1478
+ * Returns focus to the trigger input when list navigation requests it.
1479
+ */
1480
+ onListNavigateOut(_reason) {
1481
+ this.triggerSearchInput()?.nativeElement.focus();
1482
+ }
1483
+ focusListFirst() {
1484
+ const tryFocus = (attempt = 0) => {
1485
+ const list = this.listView();
1486
+ if (list) {
1487
+ list.focusFirst();
1488
+ return;
1489
+ }
1490
+ if (attempt < 5) {
1491
+ setTimeout(() => tryFocus(attempt + 1), 16);
1492
+ }
1493
+ };
1494
+ tryFocus();
1004
1495
  }
1005
1496
  /**
1006
1497
  * Keeps the expanded state in sync when the popover closes (e.g. click outside),
@@ -1008,7 +1499,7 @@ class AXLookupComponent extends NXComponent {
1008
1499
  */
1009
1500
  onPopoverClosed() {
1010
1501
  this.expanded.set(false);
1011
- this.searchText.set(this.mode() === 'multi-select' ? '' : this.displayText());
1502
+ this.searchText.set(this.isMultiple() ? '' : this.displayText());
1012
1503
  if (this.#filterApplied) {
1013
1504
  this.#filterApplied = false;
1014
1505
  const source = this.resolvedDataSource();
@@ -1022,6 +1513,12 @@ class AXLookupComponent extends NXComponent {
1022
1513
  close() {
1023
1514
  this.expanded.set(false);
1024
1515
  }
1516
+ /**
1517
+ * Closes the popup (alias for {@link close}, required by `AXClosableComponent`).
1518
+ */
1519
+ closeAll() {
1520
+ this.close();
1521
+ }
1025
1522
  /**
1026
1523
  * Opens the popup.
1027
1524
  */
@@ -1035,6 +1532,9 @@ class AXLookupComponent extends NXComponent {
1035
1532
  * Handles typing in the editable trigger input.
1036
1533
  */
1037
1534
  onTriggerSearchInput(text) {
1535
+ if (!this.isEditableTrigger()) {
1536
+ return;
1537
+ }
1038
1538
  this.searchText.set(text);
1039
1539
  this.expanded.set(true);
1040
1540
  this.#applyFilterDebounced(text);
@@ -1043,11 +1543,13 @@ class AXLookupComponent extends NXComponent {
1043
1543
  * Commits a single pick (drop-down-list, drop-down-tree, multi-column) and closes the popup.
1044
1544
  */
1045
1545
  handleSinglePick(e) {
1546
+ this.#emitItemClick(e.item);
1547
+ this.#emitItemSelected(e.item);
1046
1548
  this.#itemsCache.set(e.value, e.item);
1047
- if (!this.#valuesEqual(e.value, this.value())) {
1048
- this.#isUserInteraction = true;
1049
- this.value.set(e.value);
1050
- }
1549
+ this.selectedItems.set([e.item]);
1550
+ this.searchText.set(this.getItemText(e.item));
1551
+ this.#isUserInteraction = true;
1552
+ this.value.set(e.value);
1051
1553
  this.close();
1052
1554
  }
1053
1555
  /**
@@ -1055,9 +1557,13 @@ class AXLookupComponent extends NXComponent {
1055
1557
  * Clears the trigger search so the full list returns (select-box-like).
1056
1558
  */
1057
1559
  handleMultiToggle(e) {
1560
+ this.#emitItemClick(e.item);
1058
1561
  this.#itemsCache.set(e.value, e.item);
1059
1562
  const current = this.selectedValues();
1060
1563
  const exists = current.some((v) => v == e.value);
1564
+ if (!exists) {
1565
+ this.#emitItemSelected(e.item);
1566
+ }
1061
1567
  const next = exists ? current.filter((v) => !(v == e.value)) : [...current, e.value];
1062
1568
  this.#isUserInteraction = true;
1063
1569
  this.value.set(next);
@@ -1070,12 +1576,49 @@ class AXLookupComponent extends NXComponent {
1070
1576
  * Applies the multi-select-tree selection to the value; the popup stays open.
1071
1577
  */
1072
1578
  handleTreeSelectionChange(e) {
1579
+ const prev = new Set(this.selectedValues().map((v) => String(v)));
1580
+ const newlySelected = e.nodes.filter((node) => !prev.has(String(node[this.valueField()])));
1581
+ if (newlySelected.length > 0) {
1582
+ this.#emitItemSelected(newlySelected[0]);
1583
+ }
1073
1584
  for (const node of e.nodes) {
1074
1585
  this.#itemsCache.set(String(node[this.valueField()]), node);
1075
1586
  }
1076
1587
  this.#isUserInteraction = true;
1077
1588
  this.value.set([...e.ids]);
1078
1589
  }
1590
+ /** Forwards native focus from the trigger input. */
1591
+ emitOnFocus(e) {
1592
+ this.onFocus.emit({
1593
+ component: this,
1594
+ htmlElement: this.nativeElement,
1595
+ nativeEvent: e,
1596
+ });
1597
+ }
1598
+ /** Forwards native blur from the trigger input. */
1599
+ emitOnBlur(e) {
1600
+ this.onBlur.emit({
1601
+ component: this,
1602
+ htmlElement: this.nativeElement,
1603
+ nativeEvent: e,
1604
+ });
1605
+ }
1606
+ #emitItemClick(item) {
1607
+ this.onItemClick.emit({
1608
+ component: this,
1609
+ item,
1610
+ htmlElement: this.nativeElement,
1611
+ isUserInteraction: true,
1612
+ });
1613
+ }
1614
+ #emitItemSelected(item) {
1615
+ this.onItemSelected.emit({
1616
+ component: this,
1617
+ item,
1618
+ htmlElement: this.nativeElement,
1619
+ isUserInteraction: true,
1620
+ });
1621
+ }
1079
1622
  /**
1080
1623
  * Removes a single chip from the multi selection.
1081
1624
  */
@@ -1088,16 +1631,42 @@ class AXLookupComponent extends NXComponent {
1088
1631
  this.#isUserInteraction = true;
1089
1632
  this.value.set(this.selectedValues().filter((v) => !(v == value)));
1090
1633
  }
1634
+ /**
1635
+ * Seeds the item cache with known items so matching `value` keys resolve without `byKey`.
1636
+ * Useful after an async parent-entity load when `valueItems` is not bound.
1637
+ *
1638
+ * @param items - Full items that include `valueField` (and ideally `textField`) properties.
1639
+ */
1640
+ seedItems(items) {
1641
+ this.#seedItemsCache(items);
1642
+ void this.#resolveSelectedItems(this.selectedValues());
1643
+ }
1091
1644
  /**
1092
1645
  * Clears the whole selection.
1646
+ * Sets `null` in single modes and `[]` in multi modes. Used by projected `ax-clear-button`.
1647
+ *
1648
+ * @param isUserInteraction - Whether the clear was triggered by the user.
1093
1649
  */
1094
- clearAll(event) {
1095
- event.stopPropagation();
1650
+ reset(isUserInteraction = false) {
1096
1651
  if (this.disabled() || this.readonly()) {
1097
1652
  return;
1098
1653
  }
1099
- this.#isUserInteraction = true;
1100
- this.value.set(this.isMultiple() ? [] : null);
1654
+ const next = this.isMultiple() ? [] : null;
1655
+ const current = this.value();
1656
+ if (this.isMultiple()) {
1657
+ if (Array.isArray(current) && current.length === 0) {
1658
+ return;
1659
+ }
1660
+ }
1661
+ else if (current == null) {
1662
+ return;
1663
+ }
1664
+ this.#isUserInteraction = isUserInteraction;
1665
+ this.value.set(next);
1666
+ if (this.isEditableTrigger() && this.searchText()) {
1667
+ this.searchText.set('');
1668
+ this.#applyFilterDebounced('');
1669
+ }
1101
1670
  }
1102
1671
  #applyFilterDebounced(text) {
1103
1672
  if (this.#searchDebounce) {
@@ -1135,6 +1704,20 @@ class AXLookupComponent extends NXComponent {
1135
1704
  }
1136
1705
  this.#selectionInitialized = true;
1137
1706
  }
1707
+ #seedItemsCache(items) {
1708
+ if (!items?.length) {
1709
+ return;
1710
+ }
1711
+ const field = this.valueField();
1712
+ for (const item of items) {
1713
+ const key = item?.[field];
1714
+ if (key == null) {
1715
+ continue;
1716
+ }
1717
+ this.#itemsCache.set(key, item);
1718
+ this.#itemsCache.set(String(key), item);
1719
+ }
1720
+ }
1138
1721
  #resolveItem(value) {
1139
1722
  const cached = this.#itemsCache.get(value) ?? this.#itemsCache.get(String(value));
1140
1723
  if (cached) {
@@ -1227,20 +1810,34 @@ class AXLookupComponent extends NXComponent {
1227
1810
  expanded ? this.onOpened.emit(event) : this.onClosed.emit(event);
1228
1811
  }
1229
1812
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1230
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXLookupComponent, isStandalone: true, selector: "ax-lookup", inputs: { mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: false, transformFunction: null }, treeDataSource: { classPropertyName: "treeDataSource", publicName: "treeDataSource", isSignal: true, isRequired: false, transformFunction: null }, valueField: { classPropertyName: "valueField", publicName: "valueField", isSignal: true, isRequired: false, transformFunction: null }, textField: { classPropertyName: "textField", publicName: "textField", isSignal: true, isRequired: false, transformFunction: null }, disabledField: { classPropertyName: "disabledField", publicName: "disabledField", isSignal: true, isRequired: false, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, searchable: { classPropertyName: "searchable", publicName: "searchable", isSignal: true, isRequired: false, transformFunction: null }, searchPlaceholder: { classPropertyName: "searchPlaceholder", publicName: "searchPlaceholder", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, look: { classPropertyName: "look", publicName: "look", isSignal: true, isRequired: false, transformFunction: null }, itemHeight: { classPropertyName: "itemHeight", publicName: "itemHeight", isSignal: true, isRequired: false, transformFunction: null }, maxVisibleItems: { classPropertyName: "maxVisibleItems", publicName: "maxVisibleItems", isSignal: true, isRequired: false, transformFunction: null }, treeSelectionBehavior: { classPropertyName: "treeSelectionBehavior", publicName: "treeSelectionBehavior", isSignal: true, isRequired: false, transformFunction: null }, itemTemplate: { classPropertyName: "itemTemplate", publicName: "itemTemplate", isSignal: true, isRequired: false, transformFunction: null }, selectedTemplate: { classPropertyName: "selectedTemplate", publicName: "selectedTemplate", isSignal: true, isRequired: false, transformFunction: null }, emptyTemplate: { classPropertyName: "emptyTemplate", publicName: "emptyTemplate", isSignal: true, isRequired: false, transformFunction: null }, loadingTemplate: { classPropertyName: "loadingTemplate", publicName: "loadingTemplate", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { disabled: "disabledChange", readonly: "readonlyChange", look: "lookChange", value: "valueChange", onValueChanged: "onValueChanged", onSelectionChanged: "onSelectionChanged", onOpened: "onOpened", onClosed: "onClosed" }, providers: [{ provide: AXComponent, useExisting: AXLookupComponent }], viewQueries: [{ propertyName: "popoverRef", first: true, predicate: AXPopoverComponent, descendants: true, isSignal: true }, { propertyName: "triggerSearchInput", first: true, predicate: ["triggerSearchInput"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div\n #origin\n class=\"ax-editor-container ax-{{ look() }} ax-default ax-lookup-trigger\"\n [class.ax-lookup-trigger-multiple]=\"isMultiple()\"\n [class.ax-state-disabled]=\"disabled()\"\n [class.ax-state-readonly]=\"readonly()\"\n (click)=\"onTriggerClick()\"\n (keydown.escape)=\"close()\"\n>\n <ng-content select=\"ax-prefix\"></ng-content>\n\n @if (isMultiple()) {\n <div class=\"ax-lookup-chips\">\n @for (item of selectedItems(); track $index) {\n <span class=\"ax-lookup-chip\">\n @if (selectedTemplate()) {\n <ng-container [ngTemplateOutlet]=\"selectedTemplate()!\" [ngTemplateOutletContext]=\"{ $implicit: item }\" />\n } @else {\n <span class=\"ax-lookup-chip-text\">{{ getItemText(item) }}</span>\n }\n <button\n type=\"button\"\n class=\"ax-lookup-chip-remove\"\n tabindex=\"-1\"\n [disabled]=\"disabled() || readonly()\"\n (click)=\"removeChip($event, item)\"\n >\n <span class=\"ax-icon ax-icon-close\"></span>\n </button>\n </span>\n }\n @if (isEditableTrigger()) {\n <input\n #triggerSearchInput\n type=\"text\"\n class=\"ax-input ax-lookup-trigger-search\"\n [placeholder]=\"triggerSearchPlaceholder()\"\n [disabled]=\"disabled()\"\n [value]=\"searchText()\"\n (input)=\"onTriggerSearchInput($any($event.target).value)\"\n />\n } @else if (selectedItems().length === 0) {\n <span class=\"ax-lookup-placeholder\">{{ placeholder() }}</span>\n }\n </div>\n @if (selectedItems().length > 0) {\n <button\n type=\"button\"\n class=\"ax-general-button-icon\"\n tabindex=\"-1\"\n [disabled]=\"disabled() || readonly()\"\n (click)=\"clearAll($event)\"\n >\n <span class=\"ax-icon ax-icon-close\"></span>\n </button>\n }\n } @else if (isEditableTrigger()) {\n <input\n #triggerSearchInput\n type=\"text\"\n class=\"ax-input\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [value]=\"searchText()\"\n (input)=\"onTriggerSearchInput($any($event.target).value)\"\n />\n } @else {\n @if (selectedTemplate() && selectedItems().length > 0) {\n <div class=\"ax-lookup-selected-content\">\n <ng-container\n [ngTemplateOutlet]=\"selectedTemplate()!\"\n [ngTemplateOutletContext]=\"{ $implicit: selectedItems()[0] }\"\n />\n </div>\n } @else {\n <input\n type=\"text\"\n class=\"ax-input ax-lookup-select-input\"\n readonly\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [value]=\"displayText()\"\n />\n }\n }\n\n <button\n type=\"button\"\n class=\"ax-general-button-icon\"\n tabindex=\"-1\"\n [disabled]=\"disabled() || readonly()\"\n >\n <span\n class=\"ax-icon\"\n [class.ax-icon-chevron-down]=\"!expanded()\"\n [class.ax-icon-chevron-up]=\"expanded()\"\n ></span>\n </button>\n <ng-content select=\"ax-suffix\"></ng-content>\n</div>\n\n<ax-popover\n [target]=\"origin\"\n [openOn]=\"'manual'\"\n [closeOn]=\"'clickOut'\"\n [placement]=\"'bottom-start'\"\n [width]=\"origin.offsetWidth + 'px'\"\n [disabled]=\"disabled() || readonly()\"\n (onClosed)=\"onPopoverClosed()\"\n>\n <div class=\"ax-lookup-popup\" (keydown.escape)=\"close()\">\n @switch (mode()) {\n @case ('drop-down-list') {\n <ax-lookup-drop-down-list\n [dataSource]=\"resolvedDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [itemHeight]=\"itemHeight()\"\n [maxVisibleItems]=\"maxVisibleItems()\"\n [itemTemplate]=\"itemTemplate()\"\n [emptyTemplate]=\"emptyTemplate()\"\n [loadingTemplate]=\"loadingTemplate()\"\n (itemClick)=\"handleSinglePick($event)\"\n />\n }\n @case ('multi-select') {\n <ax-lookup-multi-select\n [dataSource]=\"resolvedDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [itemHeight]=\"itemHeight()\"\n [maxVisibleItems]=\"maxVisibleItems()\"\n [itemTemplate]=\"itemTemplate()\"\n [emptyTemplate]=\"emptyTemplate()\"\n [loadingTemplate]=\"loadingTemplate()\"\n (itemClick)=\"handleMultiToggle($event)\"\n />\n }\n @case ('drop-down-tree') {\n <ax-lookup-drop-down-tree\n [dataSource]=\"treeDataSource()!\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [nodeTemplate]=\"$any(itemTemplate())\"\n (itemClick)=\"handleSinglePick($event)\"\n />\n }\n @case ('multi-select-tree') {\n <ax-lookup-multi-select-tree\n [dataSource]=\"treeDataSource()!\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [selectionBehavior]=\"treeSelectionBehavior()\"\n [nodeTemplate]=\"$any(itemTemplate())\"\n (selectionChange)=\"handleTreeSelectionChange($event)\"\n />\n }\n @case ('multi-column') {\n <ax-lookup-multi-column\n [dataSource]=\"resolvedDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [itemHeight]=\"itemHeight()\"\n [maxVisibleItems]=\"maxVisibleItems()\"\n [columns]=\"columns()\"\n [itemTemplate]=\"itemTemplate()\"\n [emptyTemplate]=\"emptyTemplate()\"\n [loadingTemplate]=\"loadingTemplate()\"\n (itemClick)=\"handleSinglePick($event)\"\n />\n }\n }\n </div>\n</ax-popover>\n", styles: ["@layer properties;@layer components{ax-lookup{display:block;width:100%}ax-lookup .ax-editor-container{justify-content:flex-start;gap:calc(var(--spacing, .25rem) * 1)}ax-lookup .ax-editor-container.ax-state-disabled{cursor:not-allowed;opacity:50%}ax-lookup .ax-editor-container.ax-state-disabled .ax-input,ax-lookup .ax-editor-container.ax-state-disabled .ax-editor{cursor:not-allowed}ax-lookup .ax-editor-container.ax-state-readonly{opacity:75%}ax-lookup .ax-lookup-trigger{cursor:pointer;--tw-outline-style: none;outline-style:none;-webkit-user-select:none;user-select:none}ax-lookup .ax-lookup-trigger-multiple{height:auto;min-height:calc(var(--spacing, .25rem) * 9);padding-block:calc(var(--spacing, .25rem) * 1)}ax-lookup .ax-lookup-select-input{cursor:pointer;caret-color:transparent;-webkit-user-select:none;user-select:none}ax-lookup .ax-lookup-selected-content{display:flex;min-width:calc(var(--spacing, .25rem) * 0);flex:1;align-items:center;overflow:hidden}ax-lookup .ax-lookup-chips{display:flex;min-width:calc(var(--spacing, .25rem) * 0);flex:1;flex-wrap:wrap;align-items:center;gap:calc(var(--spacing, .25rem) * 1)}ax-lookup .ax-lookup-trigger-search{margin:calc(var(--spacing, .25rem) * 0)!important;height:calc(var(--spacing, .25rem) * 7.5);width:auto!important;min-width:calc(var(--spacing, .25rem) * 16);flex:1;flex-basis:calc(var(--spacing, .25rem) * 16)}ax-lookup .ax-lookup-placeholder{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){ax-lookup .ax-lookup-placeholder{color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 50%,transparent)}}ax-lookup .ax-lookup-chip{display:inline-flex;max-width:100%;align-items:center;gap:calc(var(--spacing, .25rem) * 1);border-radius:var(--ax-sys-border-radius);background-color:rgba(var(--ax-sys-color-on-surface));padding-inline:calc(var(--spacing, .25rem) * 2);padding-block:calc(var(--spacing, .25rem) * .5);font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)))}@supports (color: color-mix(in lab,red,red)){ax-lookup .ax-lookup-chip{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 10%,transparent)}}ax-lookup .ax-lookup-chip .ax-lookup-chip-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}ax-lookup .ax-lookup-chip .ax-lookup-chip-remove{display:flex;width:calc(var(--spacing, .25rem) * 4);height:calc(var(--spacing, .25rem) * 4);flex-shrink:0;cursor:pointer;align-items:center;justify-content:center;border-radius:calc(infinity * 1px);border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding:calc(var(--spacing, .25rem) * 0)}ax-lookup .ax-lookup-chip .ax-lookup-chip-remove:hover{background-color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){ax-lookup .ax-lookup-chip .ax-lookup-chip-remove:hover{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 15%,transparent)}}ax-lookup .ax-lookup-chip .ax-lookup-chip-remove .ax-icon{font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));--tw-leading: 1;line-height:1}.ax-lookup-popup{box-sizing:border-box;display:flex;width:100%;flex-direction:column;overflow:hidden;border-radius:var(--ax-sys-border-radius);border-style:var(--tw-border-style);border-width:1px;border-color:rgba(var(--ax-sys-color-border-surface));background-color:rgba(var(--ax-sys-color-lightest-surface));--tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ax-lookup-popup:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:rgba(var(--ax-sys-color-darkest-surface))}.ax-lookup-viewport{width:100%}.ax-lookup-empty{display:flex;min-height:calc(var(--spacing, .25rem) * 12);width:100%;align-items:center;justify-content:center;padding-inline:calc(var(--spacing, .25rem) * 3);padding-block:calc(var(--spacing, .25rem) * 3);text-align:center;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-empty{color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 60%,transparent)}}.ax-lookup-option{box-sizing:border-box;display:flex;cursor:pointer;align-items:center;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 2);border-style:var(--tw-border-style);border-width:1px;border-color:transparent;padding-inline:calc(var(--spacing, .25rem) * 3);font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgba(var(--ax-sys-color-on-surface));--tw-outline-style: none;outline-style:none}.ax-lookup-option:hover{background-color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-option:hover{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 5%,transparent)}}.ax-lookup-option.ax-state-selected{background-color:rgba(var(--ax-sys-color-primary-lightest-surface));color:rgba(var(--ax-sys-color-primary-surface))}.ax-lookup-option.ax-state-selected:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:rgba(var(--ax-sys-color-primary-darkest-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-option.ax-state-selected:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-darkest-surface)) 25%,transparent)}}.ax-lookup-option.ax-state-selected .ax-lookup-option-check{display:block;width:calc(var(--spacing, .25rem) * 2);height:calc(var(--spacing, .25rem) * 2);rotate:45deg;border-right-style:var(--tw-border-style);border-right-width:2px;border-bottom-style:var(--tw-border-style);border-bottom-width:2px;border-color:rgba(var(--ax-sys-color-primary-surface))}.ax-lookup-option.ax-state-disabled{cursor:not-allowed;opacity:50%}.ax-lookup-option .ax-lookup-option-text{min-width:calc(var(--spacing, .25rem) * 0);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ax-lookup-option .ax-lookup-option-check{display:none;flex-shrink:0}.ax-lookup-option .ax-lookup-option-loading{width:100%;color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-option .ax-lookup-option-loading{color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 50%,transparent)}}.ax-lookup-option .ax-lookup-checkbox{pointer-events:none;width:calc(var(--spacing, .25rem) * 4);height:calc(var(--spacing, .25rem) * 4);flex-shrink:0;accent-color:rgba(var(--ax-sys-color-primary-surface))}.ax-lookup-column-header{display:grid;width:100%;gap:calc(var(--spacing, .25rem) * 2);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:rgba(var(--ax-sys-color-border-surface));background-color:rgba(var(--ax-sys-color-on-surface));padding-inline:calc(var(--spacing, .25rem) * 3);padding-block:calc(var(--spacing, .25rem) * 2);font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600);color:rgba(var(--ax-sys-color-on-surface));text-transform:uppercase}@supports (color: color-mix(in lab,red,red)){.ax-lookup-column-header{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 5%,transparent)}}@supports (color: color-mix(in lab,red,red)){.ax-lookup-column-header{color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 70%,transparent)}}.ax-lookup-column-row{display:grid;gap:calc(var(--spacing, .25rem) * 2)}.ax-lookup-column-row .ax-lookup-column-cell{min-width:calc(var(--spacing, .25rem) * 0);align-self:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ax-lookup-tree{max-height:calc(var(--spacing, .25rem) * 80);overflow:auto;padding:calc(var(--spacing, .25rem) * 2)}}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-leading{syntax: \"*\"; inherits: false;}@property --tw-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-inset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-inset-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-ring-color{syntax: \"*\"; inherits: false;}@property --tw-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-ring-color{syntax: \"*\"; inherits: false;}@property --tw-inset-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-ring-inset{syntax: \"*\"; inherits: false;}@property --tw-ring-offset-width{syntax: \"<length>\"; inherits: false; initial-value: 0px;}@property --tw-ring-offset-color{syntax: \"*\"; inherits: false; initial-value: #fff;}@property --tw-ring-offset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid;--tw-leading: initial;--tw-shadow: 0 0 #0000;--tw-shadow-color: initial;--tw-shadow-alpha: 100%;--tw-inset-shadow: 0 0 #0000;--tw-inset-shadow-color: initial;--tw-inset-shadow-alpha: 100%;--tw-ring-color: initial;--tw-ring-shadow: 0 0 #0000;--tw-inset-ring-color: initial;--tw-inset-ring-shadow: 0 0 #0000;--tw-ring-inset: initial;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-offset-shadow: 0 0 #0000;--tw-font-weight: initial}}}\n/*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disablePanelClass", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "closeOnScroll", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "component", type: AXLookupDropDownListComponent, selector: "ax-lookup-drop-down-list" }, { kind: "component", type: AXLookupMultiSelectComponent, selector: "ax-lookup-multi-select" }, { kind: "component", type: AXLookupDropDownTreeComponent, selector: "ax-lookup-drop-down-tree", inputs: ["dataSource", "valueField", "textField", "disabledField", "selectedValues", "nodeTemplate"], outputs: ["itemClick"] }, { kind: "component", type: AXLookupMultiSelectTreeComponent, selector: "ax-lookup-multi-select-tree", inputs: ["dataSource", "valueField", "textField", "disabledField", "selectedValues", "selectionBehavior", "nodeTemplate"], outputs: ["selectionChange"] }, { kind: "component", type: AXLookupMultiColumnComponent, selector: "ax-lookup-multi-column", inputs: ["columns"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
1813
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXLookupComponent, isStandalone: true, selector: "ax-lookup", inputs: { name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: false, transformFunction: null }, treeDataSource: { classPropertyName: "treeDataSource", publicName: "treeDataSource", isSignal: true, isRequired: false, transformFunction: null }, valueField: { classPropertyName: "valueField", publicName: "valueField", isSignal: true, isRequired: false, transformFunction: null }, textField: { classPropertyName: "textField", publicName: "textField", isSignal: true, isRequired: false, transformFunction: null }, disabledField: { classPropertyName: "disabledField", publicName: "disabledField", isSignal: true, isRequired: false, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, searchable: { classPropertyName: "searchable", publicName: "searchable", isSignal: true, isRequired: false, transformFunction: null }, adaptivityEnabled: { classPropertyName: "adaptivityEnabled", publicName: "adaptivityEnabled", isSignal: true, isRequired: false, transformFunction: null }, caption: { classPropertyName: "caption", publicName: "caption", isSignal: true, isRequired: false, transformFunction: null }, alternate: { classPropertyName: "alternate", publicName: "alternate", isSignal: true, isRequired: false, transformFunction: null }, searchPlaceholder: { classPropertyName: "searchPlaceholder", publicName: "searchPlaceholder", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, look: { classPropertyName: "look", publicName: "look", isSignal: true, isRequired: false, transformFunction: null }, itemHeight: { classPropertyName: "itemHeight", publicName: "itemHeight", isSignal: true, isRequired: false, transformFunction: null }, maxVisibleItems: { classPropertyName: "maxVisibleItems", publicName: "maxVisibleItems", isSignal: true, isRequired: false, transformFunction: null }, treeSelectionBehavior: { classPropertyName: "treeSelectionBehavior", publicName: "treeSelectionBehavior", isSignal: true, isRequired: false, transformFunction: null }, itemTemplate: { classPropertyName: "itemTemplate", publicName: "itemTemplate", isSignal: true, isRequired: false, transformFunction: null }, selectedTemplate: { classPropertyName: "selectedTemplate", publicName: "selectedTemplate", isSignal: true, isRequired: false, transformFunction: null }, emptyTemplate: { classPropertyName: "emptyTemplate", publicName: "emptyTemplate", isSignal: true, isRequired: false, transformFunction: null }, loadingTemplate: { classPropertyName: "loadingTemplate", publicName: "loadingTemplate", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, valueItems: { classPropertyName: "valueItems", publicName: "valueItems", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { look: "lookChange", value: "valueChange", onValueChanged: "onValueChanged", onSelectionChanged: "onSelectionChanged", onFocus: "onFocus", onBlur: "onBlur", onItemClick: "onItemClick", onItemSelected: "onItemSelected", onOpened: "onOpened", onClosed: "onClosed" }, providers: [
1814
+ { provide: AXComponent, useExisting: AXLookupComponent },
1815
+ { provide: AXClearableComponent, useExisting: AXLookupComponent },
1816
+ { provide: AXClosableComponent, useExisting: AXLookupComponent },
1817
+ { provide: AXValuableComponent, useExisting: AXLookupComponent },
1818
+ ], viewQueries: [{ propertyName: "popoverRef", first: true, predicate: AXPopoverComponent, descendants: true, isSignal: true }, { propertyName: "triggerSearchInput", first: true, predicate: ["triggerSearchInput"], descendants: true, isSignal: true }, { propertyName: "listView", first: true, predicate: AXLookupListViewBase, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div\n #origin\n class=\"ax-editor-container ax-{{ look() }} ax-default\"\n [class.ax-lookup-trigger]=\"!isEditableTrigger()\"\n [class.ax-lookup-trigger-multiple]=\"isMultiple()\"\n [class.ax-state-disabled]=\"disabled()\"\n [class.ax-state-readonly]=\"readonly()\"\n (click)=\"onTriggerClick()\"\n>\n <ng-content select=\"ax-prefix\"></ng-content>\n\n @if (isMultiple()) {\n <div class=\"ax-lookup-chips\">\n @for (item of selectedItems(); track trackSelectedKey(item)) {\n <ax-chips class=\"ax-sm\" color=\"primary\" look=\"twotone\" [text]=\"selectedTemplate() ? '' : getItemText(item)\">\n @if (selectedTemplate()) {\n <ax-prefix>\n <ng-container\n [ngTemplateOutlet]=\"selectedTemplate()!\"\n [ngTemplateOutletContext]=\"{ $implicit: item }\"\n />\n </ax-prefix>\n }\n @if (!disabled() && !readonly()) {\n <ax-suffix>\n <button type=\"button\" tabindex=\"-1\" (click)=\"removeChip($event, item)\">\n <span class=\"ax-icon ax-icon-close\"></span>\n </button>\n </ax-suffix>\n }\n </ax-chips>\n }\n <input\n #triggerSearchInput\n type=\"text\"\n class=\"ax-input ax-lookup-trigger-search\"\n [class.ax-lookup-select-input]=\"!isEditableTrigger()\"\n [placeholder]=\"triggerSearchPlaceholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly() || !isEditableTrigger()\"\n [attr.inputmode]=\"isEditableTrigger() ? null : 'none'\"\n [value]=\"searchText()\"\n (input)=\"onTriggerSearchInput($any($event.target).value)\"\n (keydown)=\"onTriggerKeydown($event)\"\n (beforeinput)=\"onBeforeInput($event)\"\n (focus)=\"emitOnFocus($event)\"\n (blur)=\"emitOnBlur($event)\"\n />\n </div>\n } @else {\n <div class=\"ax-lookup-value\">\n @if (showSelectedTemplate()) {\n <div class=\"ax-lookup-selected-content\" aria-hidden=\"true\">\n <ng-container\n [ngTemplateOutlet]=\"selectedTemplate()!\"\n [ngTemplateOutletContext]=\"{ $implicit: selectedItems()[0] }\"\n />\n </div>\n }\n <input\n #triggerSearchInput\n type=\"text\"\n class=\"ax-input\"\n [class.ax-lookup-select-input]=\"!isEditableTrigger()\"\n [class.ax-lookup-input-overlay]=\"showSelectedTemplate()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly() || !isEditableTrigger()\"\n [attr.inputmode]=\"isEditableTrigger() ? null : 'none'\"\n [value]=\"searchText()\"\n (input)=\"onTriggerSearchInput($any($event.target).value)\"\n (keydown)=\"onTriggerKeydown($event)\"\n (beforeinput)=\"onBeforeInput($event)\"\n (focus)=\"emitOnFocus($event)\"\n (blur)=\"emitOnBlur($event)\"\n />\n </div>\n }\n\n @if (selectedValues().length > 0 && !disabled() && !readonly()) {\n <ng-content select=\"ax-clear-button\"></ng-content>\n }\n\n <button\n type=\"button\"\n class=\"ax-general-button-icon\"\n tabindex=\"-1\"\n [disabled]=\"disabled() || readonly()\"\n >\n <span\n class=\"ax-icon\"\n [class.ax-icon-chevron-down]=\"!expanded()\"\n [class.ax-icon-chevron-up]=\"expanded()\"\n ></span>\n </button>\n <ng-content select=\"ax-suffix\"></ng-content>\n</div>\n\n<ax-popover\n [target]=\"origin\"\n [openOn]=\"'manual'\"\n [closeOn]=\"'clickOut'\"\n [placement]=\"'bottom-start'\"\n [width]=\"isActionsheetStyle() ? '100%' : origin.offsetWidth + 'px'\"\n [adaptivityEnabled]=\"isActionsheetStyle()\"\n [disabled]=\"disabled() || readonly()\"\n (onClosed)=\"onPopoverClosed()\"\n>\n <div class=\"ax-lookup-popup\" [class.ax-is-actionsheet]=\"isActionsheetStyle()\" [class.ax-is-alternate]=\"alternate()\" (keydown.escape)=\"close()\">\n @if (isActionsheetStyle()) {\n <ax-header class=\"ax-solid\">\n <ax-title>{{ caption() || placeholder() || ('@acorex:selectbox.popover.title' | translate | async) }}</ax-title>\n <ax-close-button [icon]=\"isMultiple() ? 'ax-icon ax-icon-check' : 'ax-icon ax-icon-close'\"></ax-close-button>\n </ax-header>\n }\n <ng-content select=\"ax-header\"></ng-content>\n @if (expanded()) {\n @switch (mode()) {\n @case ('drop-down-list') {\n <ax-lookup-drop-down-list\n [dataSource]=\"resolvedDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [itemHeight]=\"itemHeight()\"\n [maxVisibleItems]=\"maxVisibleItems()\"\n [itemTemplate]=\"itemTemplate()\"\n [emptyTemplate]=\"emptyTemplate()\"\n [loadingTemplate]=\"loadingTemplate()\"\n [alternate]=\"alternate()\"\n (itemClick)=\"handleSinglePick($event)\"\n (navigateOut)=\"onListNavigateOut($event)\"\n />\n }\n @case ('multi-select') {\n <ax-lookup-multi-select\n [dataSource]=\"resolvedDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [itemHeight]=\"itemHeight()\"\n [maxVisibleItems]=\"maxVisibleItems()\"\n [itemTemplate]=\"itemTemplate()\"\n [emptyTemplate]=\"emptyTemplate()\"\n [loadingTemplate]=\"loadingTemplate()\"\n [alternate]=\"alternate()\"\n (itemClick)=\"handleMultiToggle($event)\"\n (navigateOut)=\"onListNavigateOut($event)\"\n />\n }\n @case ('drop-down-tree') {\n <ax-lookup-drop-down-tree\n [dataSource]=\"treeDataSource()!\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [nodeTemplate]=\"$any(itemTemplate())\"\n (itemClick)=\"handleSinglePick($event)\"\n />\n }\n @case ('multi-select-tree') {\n <ax-lookup-multi-select-tree\n [dataSource]=\"treeDataSource()!\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [selectionBehavior]=\"treeSelectionBehavior()\"\n [nodeTemplate]=\"$any(itemTemplate())\"\n (selectionChange)=\"handleTreeSelectionChange($event)\"\n />\n }\n @case ('multi-column') {\n <ax-lookup-multi-column\n [dataSource]=\"resolvedDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [itemHeight]=\"itemHeight()\"\n [maxVisibleItems]=\"maxVisibleItems()\"\n [columns]=\"columns()\"\n [itemTemplate]=\"itemTemplate()\"\n [emptyTemplate]=\"emptyTemplate()\"\n [loadingTemplate]=\"loadingTemplate()\"\n [alternate]=\"alternate()\"\n (itemClick)=\"handleSinglePick($event)\"\n />\n }\n }\n }\n <ng-content select=\"ax-footer\"></ng-content>\n </div>\n</ax-popover>\n<ng-content select=\"ax-validation-rule\"></ng-content>\n", styles: ["@layer properties;@layer components{ax-lookup{display:block;width:100%}ax-lookup .ax-editor-container{justify-content:flex-start;gap:calc(var(--spacing, .25rem) * 1)}ax-lookup .ax-lookup-trigger{cursor:pointer;-webkit-user-select:none;user-select:none}ax-lookup .ax-lookup-trigger-multiple{height:auto;min-height:calc(var(--spacing, .25rem) * 9);padding-block:calc(var(--spacing, .25rem) * 1)}ax-lookup .ax-lookup-value{position:relative;display:flex;min-width:calc(var(--spacing, .25rem) * 0);flex:1;align-items:center;overflow:hidden}ax-lookup .ax-lookup-select-input{cursor:pointer;caret-color:transparent;-webkit-user-select:none;user-select:none}ax-lookup .ax-lookup-selected-content{pointer-events:none;position:relative;z-index:0;display:flex;min-width:calc(var(--spacing, .25rem) * 0);flex:1;align-items:center;overflow:hidden}ax-lookup .ax-lookup-input-overlay{position:absolute;inset:calc(var(--spacing, .25rem) * 0);z-index:10;margin:calc(var(--spacing, .25rem) * 0)!important;height:100%;width:100%;border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding:calc(var(--spacing, .25rem) * 0)!important;color:transparent;caret-color:transparent}ax-lookup .ax-lookup-chips{display:flex;min-width:calc(var(--spacing, .25rem) * 0);flex:1;flex-wrap:wrap;align-items:center;gap:calc(var(--spacing, .25rem) * 1)}ax-lookup .ax-lookup-trigger-search{margin:calc(var(--spacing, .25rem) * 0)!important;height:calc(var(--spacing, .25rem) * 7.5);width:auto!important;min-width:calc(var(--spacing, .25rem) * 16);flex:1;flex-basis:calc(var(--spacing, .25rem) * 16)}ax-lookup .ax-lookup-placeholder{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){ax-lookup .ax-lookup-placeholder{color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 50%,transparent)}}ax-lookup ax-chips ax-prefix,ax-lookup ax-chips ax-suffix{padding:calc(var(--spacing, .25rem) * 0)!important}ax-lookup ax-chips ax-suffix button{display:flex;cursor:pointer;align-items:center;border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding:calc(var(--spacing, .25rem) * 0)}.ax-lookup-popup{box-sizing:border-box;display:flex;width:100%;flex-direction:column;overflow:hidden;border-radius:var(--ax-sys-border-radius);border-style:var(--tw-border-style);border-width:1px;border-color:rgba(var(--ax-sys-color-border-surface));background-color:rgba(var(--ax-sys-color-lightest-surface));--tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ax-lookup-popup:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:rgba(var(--ax-sys-color-darkest-surface))}.ax-lookup-popup.ax-is-actionsheet{border-bottom-right-radius:0;border-bottom-left-radius:0;--tw-shadow: 0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ax-lookup-popup.ax-is-actionsheet>ax-header.ax-solid{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:rgba(var(--ax-sys-color-border-lightest-surface))}.ax-lookup-popup.ax-is-actionsheet>ax-header.ax-solid .ax-icon-check{color:rgba(var(--ax-sys-color-primary-surface))}.ax-lookup-popup.ax-is-actionsheet>ax-header.ax-solid ax-title{font-size:var(--text-base, 1rem);line-height:var(--tw-leading, var(--text-base--line-height, 1.5 ));--tw-leading: calc(var(--spacing, .25rem) * 6);line-height:calc(var(--spacing, .25rem) * 6);--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500)}.ax-lookup-popup>ax-header:not(.ax-solid),.ax-lookup-popup>ax-footer{flex-shrink:0;border-color:rgba(var(--ax-sys-color-border-lightest-surface))}.ax-lookup-popup>ax-header:not(.ax-solid){border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.ax-lookup-popup>ax-footer{border-top-style:var(--tw-border-style);border-top-width:1px}.ax-lookup-viewport{width:100%}.ax-lookup-empty{display:flex;min-height:calc(var(--spacing, .25rem) * 12);width:100%;align-items:center;justify-content:center;padding-inline:calc(var(--spacing, .25rem) * 3);padding-block:calc(var(--spacing, .25rem) * 3);text-align:center;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-empty{color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 60%,transparent)}}.ax-lookup-option-host{box-sizing:border-box;display:flex;cursor:pointer;align-items:center;gap:calc(var(--spacing, .25rem) * 2);border-style:var(--tw-border-style);border-width:1px;border-color:transparent;padding-inline:calc(var(--spacing, .25rem) * 3);font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgba(var(--ax-sys-color-on-surface));--tw-outline-style: none;outline-style:none}.ax-lookup-option-host.ax-state-alternate{background-color:rgba(var(--ax-sys-color-light-surface))}.ax-lookup-option-host.ax-state-alternate:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:rgba(var(--ax-sys-color-surface))}.ax-lookup-option-host:hover,.ax-lookup-option-host.ax-state-active{background-color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-option-host:hover,.ax-lookup-option-host.ax-state-active{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 10%,transparent)}}.ax-lookup-option-host.ax-state-alternate:hover,.ax-lookup-option-host.ax-state-alternate.ax-state-active{background-color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-option-host.ax-state-alternate:hover,.ax-lookup-option-host.ax-state-alternate.ax-state-active{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 15%,transparent)}}.ax-lookup-option-host.ax-state-selected,.ax-lookup-option-host.ax-state-selected:hover,.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate,.ax-lookup-option-host.ax-state-selected.ax-state-alternate:hover,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active{background-color:rgba(var(--ax-sys-color-primary-lightest-surface))}:is(.ax-lookup-option-host.ax-state-selected,.ax-lookup-option-host.ax-state-selected:hover,.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate,.ax-lookup-option-host.ax-state-selected.ax-state-alternate:hover,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active):where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:rgba(var(--ax-sys-color-primary-darkest-surface))}@supports (color: color-mix(in lab,red,red)){:is(.ax-lookup-option-host.ax-state-selected,.ax-lookup-option-host.ax-state-selected:hover,.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate,.ax-lookup-option-host.ax-state-selected.ax-state-alternate:hover,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active):where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-darkest-surface)) 25%,transparent)}}.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active{background-color:rgba(var(--ax-sys-color-primary-lightest-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-lightest-surface)) 80%,transparent)}}:is(.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active):where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:rgba(var(--ax-sys-color-primary-darkest-surface))}@supports (color: color-mix(in lab,red,red)){:is(.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active):where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-darkest-surface)) 40%,transparent)}}.ax-lookup-option-host .ax-lookup-checkbox{pointer-events:none;width:calc(var(--spacing, .25rem) * 4);height:calc(var(--spacing, .25rem) * 4);flex-shrink:0;accent-color:rgba(var(--ax-sys-color-primary-surface))}.ax-lookup-option-host .ax-lookup-option-loading{width:100%;padding-inline:calc(var(--spacing, .25rem) * 3);font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-option-host .ax-lookup-option-loading{color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 50%,transparent)}}.ax-lookup-option{justify-content:space-between}.ax-lookup-option-host.ax-state-selected,.ax-lookup-option.ax-state-selected{color:rgba(var(--ax-sys-color-primary-surface))!important}.ax-lookup-option-host.ax-state-selected .ax-lookup-option-text,.ax-lookup-option-host.ax-state-selected .ax-lookup-option-check,.ax-lookup-option-host.ax-state-selected ax-icon{color:rgba(var(--ax-sys-color-primary-surface))!important}.ax-lookup-option-text{min-width:calc(var(--spacing, .25rem) * 0);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ax-lookup-option-check{margin-inline-start:auto;flex-shrink:0;color:rgba(var(--ax-sys-color-primary-surface))!important}ax-lookup-multi-column,.ax-lookup-multi-column{display:block;min-height:calc(var(--spacing, .25rem) * 0);width:100%}:is(ax-lookup-multi-column,.ax-lookup-multi-column) .ax-lookup-multi-column-table,:is(ax-lookup-multi-column,.ax-lookup-multi-column) ax-data-table{height:100%;min-height:calc(var(--spacing, .25rem) * 0);border-style:var(--tw-border-style)!important;border-width:0px!important}:is(ax-lookup-multi-column,.ax-lookup-multi-column) tr.ax-state-selected{background-color:rgba(var(--ax-sys-color-primary-surface))}@supports (color: color-mix(in lab,red,red)){:is(ax-lookup-multi-column,.ax-lookup-multi-column) tr.ax-state-selected{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-surface)) 10%,transparent)}}:is(ax-lookup-multi-column,.ax-lookup-multi-column) tr.ax-state-disabled{pointer-events:none;opacity:50%}.ax-lookup-tree{max-height:calc(var(--spacing, .25rem) * 80);overflow:auto;padding:calc(var(--spacing, .25rem) * 2)}}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-inset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-inset-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-ring-color{syntax: \"*\"; inherits: false;}@property --tw-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-ring-color{syntax: \"*\"; inherits: false;}@property --tw-inset-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-ring-inset{syntax: \"*\"; inherits: false;}@property --tw-ring-offset-width{syntax: \"<length>\"; inherits: false; initial-value: 0px;}@property --tw-ring-offset-color{syntax: \"*\"; inherits: false; initial-value: #fff;}@property --tw-ring-offset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-leading{syntax: \"*\"; inherits: false;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid;--tw-shadow: 0 0 #0000;--tw-shadow-color: initial;--tw-shadow-alpha: 100%;--tw-inset-shadow: 0 0 #0000;--tw-inset-shadow-color: initial;--tw-inset-shadow-alpha: 100%;--tw-ring-color: initial;--tw-ring-shadow: 0 0 #0000;--tw-inset-ring-color: initial;--tw-inset-ring-shadow: 0 0 #0000;--tw-ring-inset: initial;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-offset-shadow: 0 0 #0000;--tw-leading: initial;--tw-font-weight: initial}}}\n/*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: AXChipsComponent, selector: "ax-chips", inputs: ["tabIndex", "color", "look", "text"], outputs: ["textChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i1$1.AXDecoratorCloseButtonComponent, selector: "ax-close-button", inputs: ["closeAll", "icon"] }, { kind: "component", type: i1$1.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "component", type: AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disablePanelClass", "visualContextScope", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "closeOnScroll", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "component", type: AXLookupDropDownListComponent, selector: "ax-lookup-drop-down-list" }, { kind: "component", type: AXLookupMultiSelectComponent, selector: "ax-lookup-multi-select" }, { kind: "component", type: AXLookupDropDownTreeComponent, selector: "ax-lookup-drop-down-tree", inputs: ["dataSource", "valueField", "textField", "disabledField", "selectedValues", "nodeTemplate"], outputs: ["itemClick"] }, { kind: "component", type: AXLookupMultiSelectTreeComponent, selector: "ax-lookup-multi-select-tree", inputs: ["dataSource", "valueField", "textField", "disabledField", "selectedValues", "selectionBehavior", "nodeTemplate"], outputs: ["selectionChange"] }, { kind: "component", type: AXLookupMultiColumnComponent, selector: "ax-lookup-multi-column", inputs: ["dataSource", "valueField", "textField", "disabledField", "selectedValues", "itemHeight", "maxVisibleItems", "columns", "itemTemplate", "emptyTemplate", "loadingTemplate", "alternate"], outputs: ["itemClick"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
1231
1819
  }
1232
1820
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupComponent, decorators: [{
1233
1821
  type: Component,
1234
1822
  args: [{ selector: 'ax-lookup', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
1235
1823
  NgTemplateOutlet,
1824
+ AsyncPipe,
1825
+ AXTranslatorPipe,
1826
+ AXChipsComponent,
1827
+ AXDecoratorModule,
1236
1828
  AXPopoverComponent,
1237
1829
  AXLookupDropDownListComponent,
1238
1830
  AXLookupMultiSelectComponent,
1239
1831
  AXLookupDropDownTreeComponent,
1240
1832
  AXLookupMultiSelectTreeComponent,
1241
1833
  AXLookupMultiColumnComponent,
1242
- ], providers: [{ provide: AXComponent, useExisting: AXLookupComponent }], template: "<div\n #origin\n class=\"ax-editor-container ax-{{ look() }} ax-default ax-lookup-trigger\"\n [class.ax-lookup-trigger-multiple]=\"isMultiple()\"\n [class.ax-state-disabled]=\"disabled()\"\n [class.ax-state-readonly]=\"readonly()\"\n (click)=\"onTriggerClick()\"\n (keydown.escape)=\"close()\"\n>\n <ng-content select=\"ax-prefix\"></ng-content>\n\n @if (isMultiple()) {\n <div class=\"ax-lookup-chips\">\n @for (item of selectedItems(); track $index) {\n <span class=\"ax-lookup-chip\">\n @if (selectedTemplate()) {\n <ng-container [ngTemplateOutlet]=\"selectedTemplate()!\" [ngTemplateOutletContext]=\"{ $implicit: item }\" />\n } @else {\n <span class=\"ax-lookup-chip-text\">{{ getItemText(item) }}</span>\n }\n <button\n type=\"button\"\n class=\"ax-lookup-chip-remove\"\n tabindex=\"-1\"\n [disabled]=\"disabled() || readonly()\"\n (click)=\"removeChip($event, item)\"\n >\n <span class=\"ax-icon ax-icon-close\"></span>\n </button>\n </span>\n }\n @if (isEditableTrigger()) {\n <input\n #triggerSearchInput\n type=\"text\"\n class=\"ax-input ax-lookup-trigger-search\"\n [placeholder]=\"triggerSearchPlaceholder()\"\n [disabled]=\"disabled()\"\n [value]=\"searchText()\"\n (input)=\"onTriggerSearchInput($any($event.target).value)\"\n />\n } @else if (selectedItems().length === 0) {\n <span class=\"ax-lookup-placeholder\">{{ placeholder() }}</span>\n }\n </div>\n @if (selectedItems().length > 0) {\n <button\n type=\"button\"\n class=\"ax-general-button-icon\"\n tabindex=\"-1\"\n [disabled]=\"disabled() || readonly()\"\n (click)=\"clearAll($event)\"\n >\n <span class=\"ax-icon ax-icon-close\"></span>\n </button>\n }\n } @else if (isEditableTrigger()) {\n <input\n #triggerSearchInput\n type=\"text\"\n class=\"ax-input\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [value]=\"searchText()\"\n (input)=\"onTriggerSearchInput($any($event.target).value)\"\n />\n } @else {\n @if (selectedTemplate() && selectedItems().length > 0) {\n <div class=\"ax-lookup-selected-content\">\n <ng-container\n [ngTemplateOutlet]=\"selectedTemplate()!\"\n [ngTemplateOutletContext]=\"{ $implicit: selectedItems()[0] }\"\n />\n </div>\n } @else {\n <input\n type=\"text\"\n class=\"ax-input ax-lookup-select-input\"\n readonly\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [value]=\"displayText()\"\n />\n }\n }\n\n <button\n type=\"button\"\n class=\"ax-general-button-icon\"\n tabindex=\"-1\"\n [disabled]=\"disabled() || readonly()\"\n >\n <span\n class=\"ax-icon\"\n [class.ax-icon-chevron-down]=\"!expanded()\"\n [class.ax-icon-chevron-up]=\"expanded()\"\n ></span>\n </button>\n <ng-content select=\"ax-suffix\"></ng-content>\n</div>\n\n<ax-popover\n [target]=\"origin\"\n [openOn]=\"'manual'\"\n [closeOn]=\"'clickOut'\"\n [placement]=\"'bottom-start'\"\n [width]=\"origin.offsetWidth + 'px'\"\n [disabled]=\"disabled() || readonly()\"\n (onClosed)=\"onPopoverClosed()\"\n>\n <div class=\"ax-lookup-popup\" (keydown.escape)=\"close()\">\n @switch (mode()) {\n @case ('drop-down-list') {\n <ax-lookup-drop-down-list\n [dataSource]=\"resolvedDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [itemHeight]=\"itemHeight()\"\n [maxVisibleItems]=\"maxVisibleItems()\"\n [itemTemplate]=\"itemTemplate()\"\n [emptyTemplate]=\"emptyTemplate()\"\n [loadingTemplate]=\"loadingTemplate()\"\n (itemClick)=\"handleSinglePick($event)\"\n />\n }\n @case ('multi-select') {\n <ax-lookup-multi-select\n [dataSource]=\"resolvedDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [itemHeight]=\"itemHeight()\"\n [maxVisibleItems]=\"maxVisibleItems()\"\n [itemTemplate]=\"itemTemplate()\"\n [emptyTemplate]=\"emptyTemplate()\"\n [loadingTemplate]=\"loadingTemplate()\"\n (itemClick)=\"handleMultiToggle($event)\"\n />\n }\n @case ('drop-down-tree') {\n <ax-lookup-drop-down-tree\n [dataSource]=\"treeDataSource()!\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [nodeTemplate]=\"$any(itemTemplate())\"\n (itemClick)=\"handleSinglePick($event)\"\n />\n }\n @case ('multi-select-tree') {\n <ax-lookup-multi-select-tree\n [dataSource]=\"treeDataSource()!\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [selectionBehavior]=\"treeSelectionBehavior()\"\n [nodeTemplate]=\"$any(itemTemplate())\"\n (selectionChange)=\"handleTreeSelectionChange($event)\"\n />\n }\n @case ('multi-column') {\n <ax-lookup-multi-column\n [dataSource]=\"resolvedDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [itemHeight]=\"itemHeight()\"\n [maxVisibleItems]=\"maxVisibleItems()\"\n [columns]=\"columns()\"\n [itemTemplate]=\"itemTemplate()\"\n [emptyTemplate]=\"emptyTemplate()\"\n [loadingTemplate]=\"loadingTemplate()\"\n (itemClick)=\"handleSinglePick($event)\"\n />\n }\n }\n </div>\n</ax-popover>\n", styles: ["@layer properties;@layer components{ax-lookup{display:block;width:100%}ax-lookup .ax-editor-container{justify-content:flex-start;gap:calc(var(--spacing, .25rem) * 1)}ax-lookup .ax-editor-container.ax-state-disabled{cursor:not-allowed;opacity:50%}ax-lookup .ax-editor-container.ax-state-disabled .ax-input,ax-lookup .ax-editor-container.ax-state-disabled .ax-editor{cursor:not-allowed}ax-lookup .ax-editor-container.ax-state-readonly{opacity:75%}ax-lookup .ax-lookup-trigger{cursor:pointer;--tw-outline-style: none;outline-style:none;-webkit-user-select:none;user-select:none}ax-lookup .ax-lookup-trigger-multiple{height:auto;min-height:calc(var(--spacing, .25rem) * 9);padding-block:calc(var(--spacing, .25rem) * 1)}ax-lookup .ax-lookup-select-input{cursor:pointer;caret-color:transparent;-webkit-user-select:none;user-select:none}ax-lookup .ax-lookup-selected-content{display:flex;min-width:calc(var(--spacing, .25rem) * 0);flex:1;align-items:center;overflow:hidden}ax-lookup .ax-lookup-chips{display:flex;min-width:calc(var(--spacing, .25rem) * 0);flex:1;flex-wrap:wrap;align-items:center;gap:calc(var(--spacing, .25rem) * 1)}ax-lookup .ax-lookup-trigger-search{margin:calc(var(--spacing, .25rem) * 0)!important;height:calc(var(--spacing, .25rem) * 7.5);width:auto!important;min-width:calc(var(--spacing, .25rem) * 16);flex:1;flex-basis:calc(var(--spacing, .25rem) * 16)}ax-lookup .ax-lookup-placeholder{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){ax-lookup .ax-lookup-placeholder{color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 50%,transparent)}}ax-lookup .ax-lookup-chip{display:inline-flex;max-width:100%;align-items:center;gap:calc(var(--spacing, .25rem) * 1);border-radius:var(--ax-sys-border-radius);background-color:rgba(var(--ax-sys-color-on-surface));padding-inline:calc(var(--spacing, .25rem) * 2);padding-block:calc(var(--spacing, .25rem) * .5);font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)))}@supports (color: color-mix(in lab,red,red)){ax-lookup .ax-lookup-chip{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 10%,transparent)}}ax-lookup .ax-lookup-chip .ax-lookup-chip-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}ax-lookup .ax-lookup-chip .ax-lookup-chip-remove{display:flex;width:calc(var(--spacing, .25rem) * 4);height:calc(var(--spacing, .25rem) * 4);flex-shrink:0;cursor:pointer;align-items:center;justify-content:center;border-radius:calc(infinity * 1px);border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding:calc(var(--spacing, .25rem) * 0)}ax-lookup .ax-lookup-chip .ax-lookup-chip-remove:hover{background-color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){ax-lookup .ax-lookup-chip .ax-lookup-chip-remove:hover{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 15%,transparent)}}ax-lookup .ax-lookup-chip .ax-lookup-chip-remove .ax-icon{font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));--tw-leading: 1;line-height:1}.ax-lookup-popup{box-sizing:border-box;display:flex;width:100%;flex-direction:column;overflow:hidden;border-radius:var(--ax-sys-border-radius);border-style:var(--tw-border-style);border-width:1px;border-color:rgba(var(--ax-sys-color-border-surface));background-color:rgba(var(--ax-sys-color-lightest-surface));--tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ax-lookup-popup:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:rgba(var(--ax-sys-color-darkest-surface))}.ax-lookup-viewport{width:100%}.ax-lookup-empty{display:flex;min-height:calc(var(--spacing, .25rem) * 12);width:100%;align-items:center;justify-content:center;padding-inline:calc(var(--spacing, .25rem) * 3);padding-block:calc(var(--spacing, .25rem) * 3);text-align:center;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-empty{color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 60%,transparent)}}.ax-lookup-option{box-sizing:border-box;display:flex;cursor:pointer;align-items:center;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 2);border-style:var(--tw-border-style);border-width:1px;border-color:transparent;padding-inline:calc(var(--spacing, .25rem) * 3);font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgba(var(--ax-sys-color-on-surface));--tw-outline-style: none;outline-style:none}.ax-lookup-option:hover{background-color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-option:hover{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 5%,transparent)}}.ax-lookup-option.ax-state-selected{background-color:rgba(var(--ax-sys-color-primary-lightest-surface));color:rgba(var(--ax-sys-color-primary-surface))}.ax-lookup-option.ax-state-selected:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:rgba(var(--ax-sys-color-primary-darkest-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-option.ax-state-selected:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-darkest-surface)) 25%,transparent)}}.ax-lookup-option.ax-state-selected .ax-lookup-option-check{display:block;width:calc(var(--spacing, .25rem) * 2);height:calc(var(--spacing, .25rem) * 2);rotate:45deg;border-right-style:var(--tw-border-style);border-right-width:2px;border-bottom-style:var(--tw-border-style);border-bottom-width:2px;border-color:rgba(var(--ax-sys-color-primary-surface))}.ax-lookup-option.ax-state-disabled{cursor:not-allowed;opacity:50%}.ax-lookup-option .ax-lookup-option-text{min-width:calc(var(--spacing, .25rem) * 0);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ax-lookup-option .ax-lookup-option-check{display:none;flex-shrink:0}.ax-lookup-option .ax-lookup-option-loading{width:100%;color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-option .ax-lookup-option-loading{color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 50%,transparent)}}.ax-lookup-option .ax-lookup-checkbox{pointer-events:none;width:calc(var(--spacing, .25rem) * 4);height:calc(var(--spacing, .25rem) * 4);flex-shrink:0;accent-color:rgba(var(--ax-sys-color-primary-surface))}.ax-lookup-column-header{display:grid;width:100%;gap:calc(var(--spacing, .25rem) * 2);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:rgba(var(--ax-sys-color-border-surface));background-color:rgba(var(--ax-sys-color-on-surface));padding-inline:calc(var(--spacing, .25rem) * 3);padding-block:calc(var(--spacing, .25rem) * 2);font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600);color:rgba(var(--ax-sys-color-on-surface));text-transform:uppercase}@supports (color: color-mix(in lab,red,red)){.ax-lookup-column-header{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 5%,transparent)}}@supports (color: color-mix(in lab,red,red)){.ax-lookup-column-header{color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 70%,transparent)}}.ax-lookup-column-row{display:grid;gap:calc(var(--spacing, .25rem) * 2)}.ax-lookup-column-row .ax-lookup-column-cell{min-width:calc(var(--spacing, .25rem) * 0);align-self:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ax-lookup-tree{max-height:calc(var(--spacing, .25rem) * 80);overflow:auto;padding:calc(var(--spacing, .25rem) * 2)}}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-leading{syntax: \"*\"; inherits: false;}@property --tw-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-inset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-inset-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-ring-color{syntax: \"*\"; inherits: false;}@property --tw-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-ring-color{syntax: \"*\"; inherits: false;}@property --tw-inset-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-ring-inset{syntax: \"*\"; inherits: false;}@property --tw-ring-offset-width{syntax: \"<length>\"; inherits: false; initial-value: 0px;}@property --tw-ring-offset-color{syntax: \"*\"; inherits: false; initial-value: #fff;}@property --tw-ring-offset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid;--tw-leading: initial;--tw-shadow: 0 0 #0000;--tw-shadow-color: initial;--tw-shadow-alpha: 100%;--tw-inset-shadow: 0 0 #0000;--tw-inset-shadow-color: initial;--tw-inset-shadow-alpha: 100%;--tw-ring-color: initial;--tw-ring-shadow: 0 0 #0000;--tw-inset-ring-color: initial;--tw-inset-ring-shadow: 0 0 #0000;--tw-ring-inset: initial;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-offset-shadow: 0 0 #0000;--tw-font-weight: initial}}}\n/*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */\n"] }]
1243
- }], ctorParameters: () => [], propDecorators: { mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], dataSource: [{ type: i0.Input, args: [{ isSignal: true, alias: "dataSource", required: false }] }], treeDataSource: [{ type: i0.Input, args: [{ isSignal: true, alias: "treeDataSource", required: false }] }], valueField: [{ type: i0.Input, args: [{ isSignal: true, alias: "valueField", required: false }] }], textField: [{ type: i0.Input, args: [{ isSignal: true, alias: "textField", required: false }] }], disabledField: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabledField", required: false }] }], columns: [{ type: i0.Input, args: [{ isSignal: true, alias: "columns", required: false }] }], searchable: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchable", required: false }] }], searchPlaceholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchPlaceholder", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }, { type: i0.Output, args: ["disabledChange"] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }, { type: i0.Output, args: ["readonlyChange"] }], look: [{ type: i0.Input, args: [{ isSignal: true, alias: "look", required: false }] }, { type: i0.Output, args: ["lookChange"] }], itemHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemHeight", required: false }] }], maxVisibleItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxVisibleItems", required: false }] }], treeSelectionBehavior: [{ type: i0.Input, args: [{ isSignal: true, alias: "treeSelectionBehavior", required: false }] }], itemTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemTemplate", required: false }] }], selectedTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedTemplate", required: false }] }], emptyTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "emptyTemplate", required: false }] }], loadingTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "loadingTemplate", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], onValueChanged: [{ type: i0.Output, args: ["onValueChanged"] }], onSelectionChanged: [{ type: i0.Output, args: ["onSelectionChanged"] }], onOpened: [{ type: i0.Output, args: ["onOpened"] }], onClosed: [{ type: i0.Output, args: ["onClosed"] }], popoverRef: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXPopoverComponent), { isSignal: true }] }], triggerSearchInput: [{ type: i0.ViewChild, args: ['triggerSearchInput', { isSignal: true }] }] } });
1834
+ ], providers: [
1835
+ { provide: AXComponent, useExisting: AXLookupComponent },
1836
+ { provide: AXClearableComponent, useExisting: AXLookupComponent },
1837
+ { provide: AXClosableComponent, useExisting: AXLookupComponent },
1838
+ { provide: AXValuableComponent, useExisting: AXLookupComponent },
1839
+ ], template: "<div\n #origin\n class=\"ax-editor-container ax-{{ look() }} ax-default\"\n [class.ax-lookup-trigger]=\"!isEditableTrigger()\"\n [class.ax-lookup-trigger-multiple]=\"isMultiple()\"\n [class.ax-state-disabled]=\"disabled()\"\n [class.ax-state-readonly]=\"readonly()\"\n (click)=\"onTriggerClick()\"\n>\n <ng-content select=\"ax-prefix\"></ng-content>\n\n @if (isMultiple()) {\n <div class=\"ax-lookup-chips\">\n @for (item of selectedItems(); track trackSelectedKey(item)) {\n <ax-chips class=\"ax-sm\" color=\"primary\" look=\"twotone\" [text]=\"selectedTemplate() ? '' : getItemText(item)\">\n @if (selectedTemplate()) {\n <ax-prefix>\n <ng-container\n [ngTemplateOutlet]=\"selectedTemplate()!\"\n [ngTemplateOutletContext]=\"{ $implicit: item }\"\n />\n </ax-prefix>\n }\n @if (!disabled() && !readonly()) {\n <ax-suffix>\n <button type=\"button\" tabindex=\"-1\" (click)=\"removeChip($event, item)\">\n <span class=\"ax-icon ax-icon-close\"></span>\n </button>\n </ax-suffix>\n }\n </ax-chips>\n }\n <input\n #triggerSearchInput\n type=\"text\"\n class=\"ax-input ax-lookup-trigger-search\"\n [class.ax-lookup-select-input]=\"!isEditableTrigger()\"\n [placeholder]=\"triggerSearchPlaceholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly() || !isEditableTrigger()\"\n [attr.inputmode]=\"isEditableTrigger() ? null : 'none'\"\n [value]=\"searchText()\"\n (input)=\"onTriggerSearchInput($any($event.target).value)\"\n (keydown)=\"onTriggerKeydown($event)\"\n (beforeinput)=\"onBeforeInput($event)\"\n (focus)=\"emitOnFocus($event)\"\n (blur)=\"emitOnBlur($event)\"\n />\n </div>\n } @else {\n <div class=\"ax-lookup-value\">\n @if (showSelectedTemplate()) {\n <div class=\"ax-lookup-selected-content\" aria-hidden=\"true\">\n <ng-container\n [ngTemplateOutlet]=\"selectedTemplate()!\"\n [ngTemplateOutletContext]=\"{ $implicit: selectedItems()[0] }\"\n />\n </div>\n }\n <input\n #triggerSearchInput\n type=\"text\"\n class=\"ax-input\"\n [class.ax-lookup-select-input]=\"!isEditableTrigger()\"\n [class.ax-lookup-input-overlay]=\"showSelectedTemplate()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly() || !isEditableTrigger()\"\n [attr.inputmode]=\"isEditableTrigger() ? null : 'none'\"\n [value]=\"searchText()\"\n (input)=\"onTriggerSearchInput($any($event.target).value)\"\n (keydown)=\"onTriggerKeydown($event)\"\n (beforeinput)=\"onBeforeInput($event)\"\n (focus)=\"emitOnFocus($event)\"\n (blur)=\"emitOnBlur($event)\"\n />\n </div>\n }\n\n @if (selectedValues().length > 0 && !disabled() && !readonly()) {\n <ng-content select=\"ax-clear-button\"></ng-content>\n }\n\n <button\n type=\"button\"\n class=\"ax-general-button-icon\"\n tabindex=\"-1\"\n [disabled]=\"disabled() || readonly()\"\n >\n <span\n class=\"ax-icon\"\n [class.ax-icon-chevron-down]=\"!expanded()\"\n [class.ax-icon-chevron-up]=\"expanded()\"\n ></span>\n </button>\n <ng-content select=\"ax-suffix\"></ng-content>\n</div>\n\n<ax-popover\n [target]=\"origin\"\n [openOn]=\"'manual'\"\n [closeOn]=\"'clickOut'\"\n [placement]=\"'bottom-start'\"\n [width]=\"isActionsheetStyle() ? '100%' : origin.offsetWidth + 'px'\"\n [adaptivityEnabled]=\"isActionsheetStyle()\"\n [disabled]=\"disabled() || readonly()\"\n (onClosed)=\"onPopoverClosed()\"\n>\n <div class=\"ax-lookup-popup\" [class.ax-is-actionsheet]=\"isActionsheetStyle()\" [class.ax-is-alternate]=\"alternate()\" (keydown.escape)=\"close()\">\n @if (isActionsheetStyle()) {\n <ax-header class=\"ax-solid\">\n <ax-title>{{ caption() || placeholder() || ('@acorex:selectbox.popover.title' | translate | async) }}</ax-title>\n <ax-close-button [icon]=\"isMultiple() ? 'ax-icon ax-icon-check' : 'ax-icon ax-icon-close'\"></ax-close-button>\n </ax-header>\n }\n <ng-content select=\"ax-header\"></ng-content>\n @if (expanded()) {\n @switch (mode()) {\n @case ('drop-down-list') {\n <ax-lookup-drop-down-list\n [dataSource]=\"resolvedDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [itemHeight]=\"itemHeight()\"\n [maxVisibleItems]=\"maxVisibleItems()\"\n [itemTemplate]=\"itemTemplate()\"\n [emptyTemplate]=\"emptyTemplate()\"\n [loadingTemplate]=\"loadingTemplate()\"\n [alternate]=\"alternate()\"\n (itemClick)=\"handleSinglePick($event)\"\n (navigateOut)=\"onListNavigateOut($event)\"\n />\n }\n @case ('multi-select') {\n <ax-lookup-multi-select\n [dataSource]=\"resolvedDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [itemHeight]=\"itemHeight()\"\n [maxVisibleItems]=\"maxVisibleItems()\"\n [itemTemplate]=\"itemTemplate()\"\n [emptyTemplate]=\"emptyTemplate()\"\n [loadingTemplate]=\"loadingTemplate()\"\n [alternate]=\"alternate()\"\n (itemClick)=\"handleMultiToggle($event)\"\n (navigateOut)=\"onListNavigateOut($event)\"\n />\n }\n @case ('drop-down-tree') {\n <ax-lookup-drop-down-tree\n [dataSource]=\"treeDataSource()!\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [nodeTemplate]=\"$any(itemTemplate())\"\n (itemClick)=\"handleSinglePick($event)\"\n />\n }\n @case ('multi-select-tree') {\n <ax-lookup-multi-select-tree\n [dataSource]=\"treeDataSource()!\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [selectionBehavior]=\"treeSelectionBehavior()\"\n [nodeTemplate]=\"$any(itemTemplate())\"\n (selectionChange)=\"handleTreeSelectionChange($event)\"\n />\n }\n @case ('multi-column') {\n <ax-lookup-multi-column\n [dataSource]=\"resolvedDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [itemHeight]=\"itemHeight()\"\n [maxVisibleItems]=\"maxVisibleItems()\"\n [columns]=\"columns()\"\n [itemTemplate]=\"itemTemplate()\"\n [emptyTemplate]=\"emptyTemplate()\"\n [loadingTemplate]=\"loadingTemplate()\"\n [alternate]=\"alternate()\"\n (itemClick)=\"handleSinglePick($event)\"\n />\n }\n }\n }\n <ng-content select=\"ax-footer\"></ng-content>\n </div>\n</ax-popover>\n<ng-content select=\"ax-validation-rule\"></ng-content>\n", styles: ["@layer properties;@layer components{ax-lookup{display:block;width:100%}ax-lookup .ax-editor-container{justify-content:flex-start;gap:calc(var(--spacing, .25rem) * 1)}ax-lookup .ax-lookup-trigger{cursor:pointer;-webkit-user-select:none;user-select:none}ax-lookup .ax-lookup-trigger-multiple{height:auto;min-height:calc(var(--spacing, .25rem) * 9);padding-block:calc(var(--spacing, .25rem) * 1)}ax-lookup .ax-lookup-value{position:relative;display:flex;min-width:calc(var(--spacing, .25rem) * 0);flex:1;align-items:center;overflow:hidden}ax-lookup .ax-lookup-select-input{cursor:pointer;caret-color:transparent;-webkit-user-select:none;user-select:none}ax-lookup .ax-lookup-selected-content{pointer-events:none;position:relative;z-index:0;display:flex;min-width:calc(var(--spacing, .25rem) * 0);flex:1;align-items:center;overflow:hidden}ax-lookup .ax-lookup-input-overlay{position:absolute;inset:calc(var(--spacing, .25rem) * 0);z-index:10;margin:calc(var(--spacing, .25rem) * 0)!important;height:100%;width:100%;border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding:calc(var(--spacing, .25rem) * 0)!important;color:transparent;caret-color:transparent}ax-lookup .ax-lookup-chips{display:flex;min-width:calc(var(--spacing, .25rem) * 0);flex:1;flex-wrap:wrap;align-items:center;gap:calc(var(--spacing, .25rem) * 1)}ax-lookup .ax-lookup-trigger-search{margin:calc(var(--spacing, .25rem) * 0)!important;height:calc(var(--spacing, .25rem) * 7.5);width:auto!important;min-width:calc(var(--spacing, .25rem) * 16);flex:1;flex-basis:calc(var(--spacing, .25rem) * 16)}ax-lookup .ax-lookup-placeholder{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){ax-lookup .ax-lookup-placeholder{color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 50%,transparent)}}ax-lookup ax-chips ax-prefix,ax-lookup ax-chips ax-suffix{padding:calc(var(--spacing, .25rem) * 0)!important}ax-lookup ax-chips ax-suffix button{display:flex;cursor:pointer;align-items:center;border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding:calc(var(--spacing, .25rem) * 0)}.ax-lookup-popup{box-sizing:border-box;display:flex;width:100%;flex-direction:column;overflow:hidden;border-radius:var(--ax-sys-border-radius);border-style:var(--tw-border-style);border-width:1px;border-color:rgba(var(--ax-sys-color-border-surface));background-color:rgba(var(--ax-sys-color-lightest-surface));--tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ax-lookup-popup:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:rgba(var(--ax-sys-color-darkest-surface))}.ax-lookup-popup.ax-is-actionsheet{border-bottom-right-radius:0;border-bottom-left-radius:0;--tw-shadow: 0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ax-lookup-popup.ax-is-actionsheet>ax-header.ax-solid{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:rgba(var(--ax-sys-color-border-lightest-surface))}.ax-lookup-popup.ax-is-actionsheet>ax-header.ax-solid .ax-icon-check{color:rgba(var(--ax-sys-color-primary-surface))}.ax-lookup-popup.ax-is-actionsheet>ax-header.ax-solid ax-title{font-size:var(--text-base, 1rem);line-height:var(--tw-leading, var(--text-base--line-height, 1.5 ));--tw-leading: calc(var(--spacing, .25rem) * 6);line-height:calc(var(--spacing, .25rem) * 6);--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500)}.ax-lookup-popup>ax-header:not(.ax-solid),.ax-lookup-popup>ax-footer{flex-shrink:0;border-color:rgba(var(--ax-sys-color-border-lightest-surface))}.ax-lookup-popup>ax-header:not(.ax-solid){border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.ax-lookup-popup>ax-footer{border-top-style:var(--tw-border-style);border-top-width:1px}.ax-lookup-viewport{width:100%}.ax-lookup-empty{display:flex;min-height:calc(var(--spacing, .25rem) * 12);width:100%;align-items:center;justify-content:center;padding-inline:calc(var(--spacing, .25rem) * 3);padding-block:calc(var(--spacing, .25rem) * 3);text-align:center;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-empty{color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 60%,transparent)}}.ax-lookup-option-host{box-sizing:border-box;display:flex;cursor:pointer;align-items:center;gap:calc(var(--spacing, .25rem) * 2);border-style:var(--tw-border-style);border-width:1px;border-color:transparent;padding-inline:calc(var(--spacing, .25rem) * 3);font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgba(var(--ax-sys-color-on-surface));--tw-outline-style: none;outline-style:none}.ax-lookup-option-host.ax-state-alternate{background-color:rgba(var(--ax-sys-color-light-surface))}.ax-lookup-option-host.ax-state-alternate:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:rgba(var(--ax-sys-color-surface))}.ax-lookup-option-host:hover,.ax-lookup-option-host.ax-state-active{background-color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-option-host:hover,.ax-lookup-option-host.ax-state-active{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 10%,transparent)}}.ax-lookup-option-host.ax-state-alternate:hover,.ax-lookup-option-host.ax-state-alternate.ax-state-active{background-color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-option-host.ax-state-alternate:hover,.ax-lookup-option-host.ax-state-alternate.ax-state-active{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 15%,transparent)}}.ax-lookup-option-host.ax-state-selected,.ax-lookup-option-host.ax-state-selected:hover,.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate,.ax-lookup-option-host.ax-state-selected.ax-state-alternate:hover,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active{background-color:rgba(var(--ax-sys-color-primary-lightest-surface))}:is(.ax-lookup-option-host.ax-state-selected,.ax-lookup-option-host.ax-state-selected:hover,.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate,.ax-lookup-option-host.ax-state-selected.ax-state-alternate:hover,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active):where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:rgba(var(--ax-sys-color-primary-darkest-surface))}@supports (color: color-mix(in lab,red,red)){:is(.ax-lookup-option-host.ax-state-selected,.ax-lookup-option-host.ax-state-selected:hover,.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate,.ax-lookup-option-host.ax-state-selected.ax-state-alternate:hover,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active):where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-darkest-surface)) 25%,transparent)}}.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active{background-color:rgba(var(--ax-sys-color-primary-lightest-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-lightest-surface)) 80%,transparent)}}:is(.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active):where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:rgba(var(--ax-sys-color-primary-darkest-surface))}@supports (color: color-mix(in lab,red,red)){:is(.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active):where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-darkest-surface)) 40%,transparent)}}.ax-lookup-option-host .ax-lookup-checkbox{pointer-events:none;width:calc(var(--spacing, .25rem) * 4);height:calc(var(--spacing, .25rem) * 4);flex-shrink:0;accent-color:rgba(var(--ax-sys-color-primary-surface))}.ax-lookup-option-host .ax-lookup-option-loading{width:100%;padding-inline:calc(var(--spacing, .25rem) * 3);font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-option-host .ax-lookup-option-loading{color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 50%,transparent)}}.ax-lookup-option{justify-content:space-between}.ax-lookup-option-host.ax-state-selected,.ax-lookup-option.ax-state-selected{color:rgba(var(--ax-sys-color-primary-surface))!important}.ax-lookup-option-host.ax-state-selected .ax-lookup-option-text,.ax-lookup-option-host.ax-state-selected .ax-lookup-option-check,.ax-lookup-option-host.ax-state-selected ax-icon{color:rgba(var(--ax-sys-color-primary-surface))!important}.ax-lookup-option-text{min-width:calc(var(--spacing, .25rem) * 0);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ax-lookup-option-check{margin-inline-start:auto;flex-shrink:0;color:rgba(var(--ax-sys-color-primary-surface))!important}ax-lookup-multi-column,.ax-lookup-multi-column{display:block;min-height:calc(var(--spacing, .25rem) * 0);width:100%}:is(ax-lookup-multi-column,.ax-lookup-multi-column) .ax-lookup-multi-column-table,:is(ax-lookup-multi-column,.ax-lookup-multi-column) ax-data-table{height:100%;min-height:calc(var(--spacing, .25rem) * 0);border-style:var(--tw-border-style)!important;border-width:0px!important}:is(ax-lookup-multi-column,.ax-lookup-multi-column) tr.ax-state-selected{background-color:rgba(var(--ax-sys-color-primary-surface))}@supports (color: color-mix(in lab,red,red)){:is(ax-lookup-multi-column,.ax-lookup-multi-column) tr.ax-state-selected{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-surface)) 10%,transparent)}}:is(ax-lookup-multi-column,.ax-lookup-multi-column) tr.ax-state-disabled{pointer-events:none;opacity:50%}.ax-lookup-tree{max-height:calc(var(--spacing, .25rem) * 80);overflow:auto;padding:calc(var(--spacing, .25rem) * 2)}}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-inset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-inset-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-ring-color{syntax: \"*\"; inherits: false;}@property --tw-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-ring-color{syntax: \"*\"; inherits: false;}@property --tw-inset-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-ring-inset{syntax: \"*\"; inherits: false;}@property --tw-ring-offset-width{syntax: \"<length>\"; inherits: false; initial-value: 0px;}@property --tw-ring-offset-color{syntax: \"*\"; inherits: false; initial-value: #fff;}@property --tw-ring-offset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-leading{syntax: \"*\"; inherits: false;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid;--tw-shadow: 0 0 #0000;--tw-shadow-color: initial;--tw-shadow-alpha: 100%;--tw-inset-shadow: 0 0 #0000;--tw-inset-shadow-color: initial;--tw-inset-shadow-alpha: 100%;--tw-ring-color: initial;--tw-ring-shadow: 0 0 #0000;--tw-inset-ring-color: initial;--tw-inset-ring-shadow: 0 0 #0000;--tw-ring-inset: initial;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-offset-shadow: 0 0 #0000;--tw-leading: initial;--tw-font-weight: initial}}}\n/*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */\n"] }]
1840
+ }], ctorParameters: () => [], propDecorators: { name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], dataSource: [{ type: i0.Input, args: [{ isSignal: true, alias: "dataSource", required: false }] }], treeDataSource: [{ type: i0.Input, args: [{ isSignal: true, alias: "treeDataSource", required: false }] }], valueField: [{ type: i0.Input, args: [{ isSignal: true, alias: "valueField", required: false }] }], textField: [{ type: i0.Input, args: [{ isSignal: true, alias: "textField", required: false }] }], disabledField: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabledField", required: false }] }], columns: [{ type: i0.Input, args: [{ isSignal: true, alias: "columns", required: false }] }], searchable: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchable", required: false }] }], adaptivityEnabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "adaptivityEnabled", required: false }] }], caption: [{ type: i0.Input, args: [{ isSignal: true, alias: "caption", required: false }] }], alternate: [{ type: i0.Input, args: [{ isSignal: true, alias: "alternate", required: false }] }], searchPlaceholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchPlaceholder", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], look: [{ type: i0.Input, args: [{ isSignal: true, alias: "look", required: false }] }, { type: i0.Output, args: ["lookChange"] }], itemHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemHeight", required: false }] }], maxVisibleItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxVisibleItems", required: false }] }], treeSelectionBehavior: [{ type: i0.Input, args: [{ isSignal: true, alias: "treeSelectionBehavior", required: false }] }], itemTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemTemplate", required: false }] }], selectedTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedTemplate", required: false }] }], emptyTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "emptyTemplate", required: false }] }], loadingTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "loadingTemplate", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], valueItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "valueItems", required: false }] }], onValueChanged: [{ type: i0.Output, args: ["onValueChanged"] }], onSelectionChanged: [{ type: i0.Output, args: ["onSelectionChanged"] }], onFocus: [{ type: i0.Output, args: ["onFocus"] }], onBlur: [{ type: i0.Output, args: ["onBlur"] }], onItemClick: [{ type: i0.Output, args: ["onItemClick"] }], onItemSelected: [{ type: i0.Output, args: ["onItemSelected"] }], onOpened: [{ type: i0.Output, args: ["onOpened"] }], onClosed: [{ type: i0.Output, args: ["onClosed"] }], popoverRef: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXPopoverComponent), { isSignal: true }] }], triggerSearchInput: [{ type: i0.ViewChild, args: ['triggerSearchInput', { isSignal: true }] }], listView: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXLookupListViewBase), { isSignal: true }] }] } });
1244
1841
 
1245
1842
  class AXLookupModule {
1246
1843
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }