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

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 (59) hide show
  1. package/combo-box/README.md +7 -2
  2. package/fesm2022/acorex-components-action-sheet.mjs +1 -0
  3. package/fesm2022/acorex-components-action-sheet.mjs.map +1 -1
  4. package/fesm2022/acorex-components-button.mjs +2 -2
  5. package/fesm2022/acorex-components-button.mjs.map +1 -1
  6. package/fesm2022/acorex-components-combo-box.mjs +240 -17
  7. package/fesm2022/acorex-components-combo-box.mjs.map +1 -1
  8. package/fesm2022/acorex-components-conversation.mjs +2 -2
  9. package/fesm2022/acorex-components-conversation.mjs.map +1 -1
  10. package/fesm2022/acorex-components-decorators.mjs +19 -3
  11. package/fesm2022/acorex-components-decorators.mjs.map +1 -1
  12. package/fesm2022/acorex-components-dialog.mjs +4 -2
  13. package/fesm2022/acorex-components-dialog.mjs.map +1 -1
  14. package/fesm2022/acorex-components-drawer.mjs +2 -2
  15. package/fesm2022/acorex-components-drawer.mjs.map +1 -1
  16. package/fesm2022/acorex-components-dropdown.mjs +4 -4
  17. package/fesm2022/acorex-components-dropdown.mjs.map +1 -1
  18. package/fesm2022/acorex-components-fab.mjs +2 -2
  19. package/fesm2022/acorex-components-fab.mjs.map +1 -1
  20. package/fesm2022/acorex-components-list.mjs +2 -2
  21. package/fesm2022/acorex-components-list.mjs.map +1 -1
  22. package/fesm2022/acorex-components-lookup.mjs +722 -175
  23. package/fesm2022/acorex-components-lookup.mjs.map +1 -1
  24. package/fesm2022/acorex-components-map.mjs +2 -2
  25. package/fesm2022/acorex-components-map.mjs.map +1 -1
  26. package/fesm2022/acorex-components-menu.mjs +26 -6
  27. package/fesm2022/acorex-components-menu.mjs.map +1 -1
  28. package/fesm2022/acorex-components-notification.mjs +9 -2
  29. package/fesm2022/acorex-components-notification.mjs.map +1 -1
  30. package/fesm2022/acorex-components-password-box.mjs +1 -1
  31. package/fesm2022/acorex-components-password-box.mjs.map +1 -1
  32. package/fesm2022/acorex-components-popover.mjs +7 -6
  33. package/fesm2022/acorex-components-popover.mjs.map +1 -1
  34. package/fesm2022/acorex-components-popup.mjs +4 -2
  35. package/fesm2022/acorex-components-popup.mjs.map +1 -1
  36. package/fesm2022/acorex-components-scheduler.mjs +6 -6
  37. package/fesm2022/acorex-components-scheduler.mjs.map +1 -1
  38. package/fesm2022/acorex-components-select-box.mjs +13 -2
  39. package/fesm2022/acorex-components-select-box.mjs.map +1 -1
  40. package/fesm2022/acorex-components-text-area.mjs +2 -2
  41. package/fesm2022/acorex-components-text-area.mjs.map +1 -1
  42. package/fesm2022/acorex-components-toast.mjs +9 -2
  43. package/fesm2022/acorex-components-toast.mjs.map +1 -1
  44. package/fesm2022/acorex-components-tooltip.mjs +2 -2
  45. package/fesm2022/acorex-components-tooltip.mjs.map +1 -1
  46. package/lookup/README.md +13 -8
  47. package/package.json +3 -3
  48. package/select-box/README.md +5 -0
  49. package/types/acorex-components-action-sheet.d.ts +9 -1
  50. package/types/acorex-components-combo-box.d.ts +101 -11
  51. package/types/acorex-components-decorators.d.ts +1 -0
  52. package/types/acorex-components-dialog.d.ts +9 -0
  53. package/types/acorex-components-lookup.d.ts +260 -90
  54. package/types/acorex-components-menu.d.ts +2 -0
  55. package/types/acorex-components-notification.d.ts +11 -1
  56. package/types/acorex-components-popover.d.ts +4 -1
  57. package/types/acorex-components-popup.d.ts +9 -1
  58. package/types/acorex-components-select-box.d.ts +8 -2
  59. package/types/acorex-components-toast.d.ts +10 -1
@@ -1,16 +1,24 @@
1
- import { AXListDataSource, NXComponent, convertArrayToDataSource, AXComponent } from '@acorex/cdk/common';
1
+ import { AXListDataSource, AXDataSource, NXComponent, convertArrayToDataSource, AXComponent, AXClearableComponent, AXClosableComponent } from '@acorex/cdk/common';
2
+ import * as i1$1 from '@acorex/components/decorators';
3
+ import { AXDecoratorModule } from '@acorex/components/decorators';
2
4
  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';
5
+ import { AXPlatform } from '@acorex/core/platform';
6
6
  import { AXTranslatorPipe } from '@acorex/core/translation';
7
+ import { NgTemplateOutlet, AsyncPipe } from '@angular/common';
8
+ import * as i0 from '@angular/core';
9
+ import { input, output, signal, computed, viewChild, viewChildren, inject, NgZone, effect, untracked, Directive, ViewEncapsulation, ChangeDetectionStrategy, Component, ElementRef, DestroyRef, model, linkedSignal, NgModule } from '@angular/core';
10
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
11
+ import * as i3 from '@acorex/cdk/list-navigation';
12
+ import { AXListNavigationDirective, AXListNavigationItemDirective, AXListNavigationModule } from '@acorex/cdk/list-navigation';
7
13
  import * as i1 from '@angular/cdk/scrolling';
8
14
  import { CdkVirtualScrollViewport, ScrollingModule } from '@angular/cdk/scrolling';
9
15
  import { AXTreeViewComponent } from '@acorex/components/tree-view';
16
+ import { AXDataTableComponent, AXDataTableTextColumnComponent } from '@acorex/components/data-table';
17
+ import { fromEvent, auditTime } from 'rxjs';
10
18
 
11
19
  /**
12
20
  * 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`).
21
+ * (`ax-lookup-drop-down-list`, `ax-lookup-multi-select`).
14
22
  */
15
23
  class AXLookupListViewBase {
16
24
  #ngZone;
@@ -65,10 +73,20 @@ class AXLookupListViewBase {
65
73
  */
66
74
  this.loadingTemplate = input(undefined, /* @ts-ignore */
67
75
  ...(ngDevMode ? [{ debugName: "loadingTemplate" }] : /* istanbul ignore next */ []));
76
+ /**
77
+ * When `true`, list rows use alternating background colors for easier scanning.
78
+ */
79
+ this.alternate = input(false, /* @ts-ignore */
80
+ ...(ngDevMode ? [{ debugName: "alternate" }] : /* istanbul ignore next */ []));
68
81
  /**
69
82
  * Emitted when the user picks (or toggles) an item.
70
83
  */
71
84
  this.itemClick = output();
85
+ /**
86
+ * Emitted when keyboard navigation should leave the list (e.g. ArrowUp on the first
87
+ * item, or a printable key that should return focus to the trigger search input).
88
+ */
89
+ this.navigateOut = output();
72
90
  /** CDK virtual scroll adapter over the datasource. */
73
91
  this.listDataSource = signal(null, /* @ts-ignore */
74
92
  ...(ngDevMode ? [{ debugName: "listDataSource" }] : /* istanbul ignore next */ []));
@@ -86,6 +104,10 @@ class AXLookupListViewBase {
86
104
  ...(ngDevMode ? [{ debugName: "viewportHeight" }] : /* istanbul ignore next */ []));
87
105
  this.viewportRef = viewChild(CdkVirtualScrollViewport, /* @ts-ignore */
88
106
  ...(ngDevMode ? [{ debugName: "viewportRef" }] : /* istanbul ignore next */ []));
107
+ this.listNavigation = viewChild(AXListNavigationDirective, /* @ts-ignore */
108
+ ...(ngDevMode ? [{ debugName: "listNavigation" }] : /* istanbul ignore next */ []));
109
+ this.navItems = viewChildren(AXListNavigationItemDirective, /* @ts-ignore */
110
+ ...(ngDevMode ? [{ debugName: "navItems" }] : /* istanbul ignore next */ []));
89
111
  this.#ngZone = inject(NgZone);
90
112
  this.trackByIndex = (index) => index;
91
113
  // CDK measures the viewport size only once, when it initializes. Inside the popover the
@@ -120,6 +142,10 @@ class AXLookupListViewBase {
120
142
  });
121
143
  });
122
144
  }
145
+ /** Moves keyboard focus to the first rendered list option. */
146
+ focusFirst() {
147
+ this.listNavigation()?.focusOnIndex(0);
148
+ }
123
149
  getValue(item) {
124
150
  return item?.[this.valueField()];
125
151
  }
@@ -139,12 +165,62 @@ class AXLookupListViewBase {
139
165
  }
140
166
  this.itemClick.emit({ item, value: this.getValue(item) });
141
167
  }
168
+ handleItemKeypress(e, item) {
169
+ if (e.nativeEvent.key === 'Enter' || e.nativeEvent.code === 'Space') {
170
+ e.nativeEvent.stopPropagation();
171
+ e.nativeEvent.preventDefault();
172
+ this.handleItemClick(item);
173
+ }
174
+ }
175
+ handleListKeypress(e) {
176
+ const key = e.nativeEvent.key;
177
+ const nav = this.listNavigation();
178
+ const viewport = this.viewportRef();
179
+ if (key === 'ArrowUp' && nav && nav.activeIndex() === 0) {
180
+ const offset = viewport?.measureScrollOffset() ?? 0;
181
+ if (offset > 0) {
182
+ e.nativeEvent.preventDefault();
183
+ viewport.scrollToOffset(Math.max(0, offset - this.itemHeight()));
184
+ queueMicrotask(() => nav.focusOnIndex(0));
185
+ return;
186
+ }
187
+ e.nativeEvent.preventDefault();
188
+ this.navigateOut.emit('up');
189
+ return;
190
+ }
191
+ if (key === 'ArrowDown' && nav && viewport) {
192
+ const items = this.navItems();
193
+ if (items.length > 0 && nav.activeIndex() >= items.length - 1) {
194
+ const maxOffset = Math.max(0, this.totalCount() * this.itemHeight() - viewport.getViewportSize());
195
+ const nextOffset = Math.min(maxOffset, viewport.measureScrollOffset() + this.itemHeight());
196
+ if (nextOffset > viewport.measureScrollOffset()) {
197
+ e.nativeEvent.preventDefault();
198
+ viewport.scrollToOffset(nextOffset);
199
+ queueMicrotask(() => nav.focusOnIndex(this.navItems().length - 1));
200
+ }
201
+ return;
202
+ }
203
+ }
204
+ if (key === 'ArrowUp' ||
205
+ key === 'ArrowDown' ||
206
+ key === 'Tab' ||
207
+ key === 'Shift' ||
208
+ key === 'Enter' ||
209
+ key === 'Escape' ||
210
+ key === ' ') {
211
+ return;
212
+ }
213
+ this.navigateOut.emit('typeahead');
214
+ }
215
+ activateNavItem(nav, item) {
216
+ nav?.navigateTo(item);
217
+ }
142
218
  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 }); }
219
+ 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
220
  }
145
221
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupListViewBase, decorators: [{
146
222
  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 }] }] } });
223
+ }], 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
224
 
149
225
  /**
150
226
  * Internal mini component for the `drop-down-list` lookup mode:
@@ -154,38 +230,50 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
154
230
  */
155
231
  class AXLookupDropDownListComponent extends AXLookupListViewBase {
156
232
  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: `
233
+ 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
234
  @if (isEmpty()) {
159
- <div class="ax-lookup-empty">
160
- @if (emptyTemplate()) {
161
- <ng-container [ngTemplateOutlet]="emptyTemplate()!" />
162
- } @else {
235
+ @if (emptyTemplate()) {
236
+ <ng-container [ngTemplateOutlet]="emptyTemplate()!" />
237
+ } @else {
238
+ <div class="ax-lookup-empty">
163
239
  {{ '@acorex:common.general.no-result-found' | translate | async }}
164
- }
165
- </div>
240
+ </div>
241
+ }
166
242
  } @else {
167
243
  <cdk-virtual-scroll-viewport
168
244
  class="ax-lookup-viewport"
169
245
  role="listbox"
246
+ axListNavigation
247
+ #nav="axListNavigation"
170
248
  [itemSize]="itemHeight()"
171
249
  [style.height.px]="viewportHeight()"
250
+ (onKeypress)="handleListKeypress($event)"
172
251
  >
173
252
  <div
174
- *cdkVirtualFor="let item of listDataSource(); trackBy: trackByIndex"
253
+ *cdkVirtualFor="let item of listDataSource(); let i = index; trackBy: trackByIndex"
175
254
  role="option"
176
- class="ax-lookup-option"
255
+ class="ax-lookup-option-host"
256
+ axListNavigationItem
257
+ #navItem="axListNavigationItem"
177
258
  [style.height.px]="itemHeight()"
259
+ [class.ax-lookup-option]="!itemTemplate()"
260
+ [class.ax-state-alternate]="alternate() && i % 2 === 1"
178
261
  [class.ax-state-selected]="item != null && isSelected(item)"
179
262
  [class.ax-state-disabled]="item != null && isDisabled(item)"
263
+ [class.ax-state-active]="navItem.isActive()"
180
264
  [attr.aria-selected]="item != null ? isSelected(item) : null"
265
+ (mouseenter)="activateNavItem(nav, navItem)"
181
266
  (click)="handleItemClick(item)"
267
+ (onKeypress)="handleItemKeypress($event, item)"
182
268
  >
183
269
  @if (item != null) {
184
270
  @if (itemTemplate()) {
185
271
  <ng-container [ngTemplateOutlet]="itemTemplate()!" [ngTemplateOutletContext]="{ $implicit: item }" />
186
272
  } @else {
187
273
  <span class="ax-lookup-option-text">{{ getText(item) }}</span>
188
- <span class="ax-lookup-option-check" aria-hidden="true"></span>
274
+ @if (isSelected(item)) {
275
+ <ax-icon class="ax-lookup-option-check ax-icon ax-icon-check" aria-hidden="true"></ax-icon>
276
+ }
189
277
  }
190
278
  } @else {
191
279
  <ng-container [ngTemplateOutlet]="loadingRow" />
@@ -201,7 +289,7 @@ class AXLookupDropDownListComponent extends AXLookupListViewBase {
201
289
  <span class="ax-lookup-option-loading">{{ '@acorex:common.status.loading' | translate | async }}</span>
202
290
  }
203
291
  </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 }); }
292
+ `, 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: AXDecoratorModule }, { kind: "component", type: i1$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "ngmodule", type: AXListNavigationModule }, { kind: "directive", type: i3.AXListNavigationDirective, selector: "[axListNavigation]", inputs: ["orientation"], outputs: ["onNavigationChanged", "onKeypress"], exportAs: ["axListNavigation"] }, { kind: "directive", type: i3.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
293
  }
206
294
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupDropDownListComponent, decorators: [{
207
295
  type: Component,
@@ -209,39 +297,59 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
209
297
  selector: 'ax-lookup-drop-down-list',
210
298
  changeDetection: ChangeDetectionStrategy.OnPush,
211
299
  encapsulation: ViewEncapsulation.None,
212
- imports: [ScrollingModule, NgTemplateOutlet, AXTranslatorPipe, AsyncPipe],
300
+ imports: [
301
+ ScrollingModule,
302
+ NgTemplateOutlet,
303
+ AXTranslatorPipe,
304
+ AsyncPipe,
305
+ AXDecoratorModule,
306
+ AXListNavigationModule,
307
+ ],
308
+ providers: [{ provide: AXLookupListViewBase, useExisting: AXLookupDropDownListComponent }],
213
309
  template: `
214
310
  @if (isEmpty()) {
215
- <div class="ax-lookup-empty">
216
- @if (emptyTemplate()) {
217
- <ng-container [ngTemplateOutlet]="emptyTemplate()!" />
218
- } @else {
311
+ @if (emptyTemplate()) {
312
+ <ng-container [ngTemplateOutlet]="emptyTemplate()!" />
313
+ } @else {
314
+ <div class="ax-lookup-empty">
219
315
  {{ '@acorex:common.general.no-result-found' | translate | async }}
220
- }
221
- </div>
316
+ </div>
317
+ }
222
318
  } @else {
223
319
  <cdk-virtual-scroll-viewport
224
320
  class="ax-lookup-viewport"
225
321
  role="listbox"
322
+ axListNavigation
323
+ #nav="axListNavigation"
226
324
  [itemSize]="itemHeight()"
227
325
  [style.height.px]="viewportHeight()"
326
+ (onKeypress)="handleListKeypress($event)"
228
327
  >
229
328
  <div
230
- *cdkVirtualFor="let item of listDataSource(); trackBy: trackByIndex"
329
+ *cdkVirtualFor="let item of listDataSource(); let i = index; trackBy: trackByIndex"
231
330
  role="option"
232
- class="ax-lookup-option"
331
+ class="ax-lookup-option-host"
332
+ axListNavigationItem
333
+ #navItem="axListNavigationItem"
233
334
  [style.height.px]="itemHeight()"
335
+ [class.ax-lookup-option]="!itemTemplate()"
336
+ [class.ax-state-alternate]="alternate() && i % 2 === 1"
234
337
  [class.ax-state-selected]="item != null && isSelected(item)"
235
338
  [class.ax-state-disabled]="item != null && isDisabled(item)"
339
+ [class.ax-state-active]="navItem.isActive()"
236
340
  [attr.aria-selected]="item != null ? isSelected(item) : null"
341
+ (mouseenter)="activateNavItem(nav, navItem)"
237
342
  (click)="handleItemClick(item)"
343
+ (onKeypress)="handleItemKeypress($event, item)"
238
344
  >
239
345
  @if (item != null) {
240
346
  @if (itemTemplate()) {
241
347
  <ng-container [ngTemplateOutlet]="itemTemplate()!" [ngTemplateOutletContext]="{ $implicit: item }" />
242
348
  } @else {
243
349
  <span class="ax-lookup-option-text">{{ getText(item) }}</span>
244
- <span class="ax-lookup-option-check" aria-hidden="true"></span>
350
+ @if (isSelected(item)) {
351
+ <ax-icon class="ax-lookup-option-check ax-icon ax-icon-check" aria-hidden="true"></ax-icon>
352
+ }
245
353
  }
246
354
  } @else {
247
355
  <ng-container [ngTemplateOutlet]="loadingRow" />
@@ -362,83 +470,275 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
362
470
 
363
471
  /**
364
472
  * Internal mini component for the `multi-column` lookup mode:
365
- * a table-structured, virtualized list with a sticky header row.
473
+ * renders selectable rows in an `ax-data-table` grid and loads further
474
+ * pages as the user scrolls (no pager UI).
366
475
  *
367
476
  * @category Components
368
477
  */
369
- class AXLookupMultiColumnComponent extends AXLookupListViewBase {
478
+ class AXLookupMultiColumnComponent {
479
+ /** Accumulated rows fed to the table (grows as pages are scrolled in). */
480
+ #loadedItems;
481
+ /** Total matching rows from the source (used to size the popup). */
482
+ #totalCount;
483
+ #host;
370
484
  constructor() {
371
- super(...arguments);
372
485
  /**
373
- * Column definitions rendered as a sticky header plus one grid cell per row.
486
+ * The datasource providing the grid rows (paged, remote-capable).
487
+ * Pages are fetched on demand as the user scrolls the table body.
488
+ */
489
+ this.dataSource = input.required(/* @ts-ignore */
490
+ ...(ngDevMode ? [{ debugName: "dataSource" }] : /* istanbul ignore next */ []));
491
+ /**
492
+ * The item property used as the selection value.
493
+ */
494
+ this.valueField = input('id', /* @ts-ignore */
495
+ ...(ngDevMode ? [{ debugName: "valueField" }] : /* istanbul ignore next */ []));
496
+ /**
497
+ * The item property used as the display text.
498
+ */
499
+ this.textField = input('text', /* @ts-ignore */
500
+ ...(ngDevMode ? [{ debugName: "textField" }] : /* istanbul ignore next */ []));
501
+ /**
502
+ * The item property marking an item as disabled.
503
+ */
504
+ this.disabledField = input('disabled', /* @ts-ignore */
505
+ ...(ngDevMode ? [{ debugName: "disabledField" }] : /* istanbul ignore next */ []));
506
+ /**
507
+ * Currently selected values (always an array, even for single selection).
508
+ */
509
+ this.selectedValues = input([], /* @ts-ignore */
510
+ ...(ngDevMode ? [{ debugName: "selectedValues" }] : /* istanbul ignore next */ []));
511
+ /**
512
+ * The fixed row height in pixels passed to the data table.
513
+ */
514
+ this.itemHeight = input(40, /* @ts-ignore */
515
+ ...(ngDevMode ? [{ debugName: "itemHeight" }] : /* istanbul ignore next */ []));
516
+ /**
517
+ * The maximum number of body rows visible before the table scrolls.
518
+ */
519
+ this.maxVisibleItems = input(8, /* @ts-ignore */
520
+ ...(ngDevMode ? [{ debugName: "maxVisibleItems" }] : /* istanbul ignore next */ []));
521
+ /**
522
+ * Column definitions rendered as `ax-text-column` instances.
374
523
  */
375
524
  this.columns = input([], /* @ts-ignore */
376
525
  ...(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 */ []));
526
+ /**
527
+ * Optional custom row content. Context: `$implicit` is the row item.
528
+ * When set, replaces the default multi-column cell layout.
529
+ */
530
+ this.itemTemplate = input(undefined, /* @ts-ignore */
531
+ ...(ngDevMode ? [{ debugName: "itemTemplate" }] : /* istanbul ignore next */ []));
532
+ /**
533
+ * Custom template rendered when the datasource has no items.
534
+ */
535
+ this.emptyTemplate = input(undefined, /* @ts-ignore */
536
+ ...(ngDevMode ? [{ debugName: "emptyTemplate" }] : /* istanbul ignore next */ []));
537
+ /**
538
+ * Custom template rendered while the table is loading.
539
+ */
540
+ this.loadingTemplate = input(undefined, /* @ts-ignore */
541
+ ...(ngDevMode ? [{ debugName: "loadingTemplate" }] : /* istanbul ignore next */ []));
542
+ /**
543
+ * When `true`, table rows use alternating background colors for easier scanning.
544
+ */
545
+ this.alternate = input(false, /* @ts-ignore */
546
+ ...(ngDevMode ? [{ debugName: "alternate" }] : /* istanbul ignore next */ []));
547
+ /**
548
+ * Emitted when the user picks a row.
549
+ */
550
+ this.itemClick = output();
551
+ this.tableRef = viewChild(AXDataTableComponent, /* @ts-ignore */
552
+ ...(ngDevMode ? [{ debugName: "tableRef" }] : /* istanbul ignore next */ []));
553
+ /** Accumulated rows fed to the table (grows as pages are scrolled in). */
554
+ this.#loadedItems = [];
555
+ /** Total matching rows from the source (used to size the popup). */
556
+ this.#totalCount = signal(0, /* @ts-ignore */
557
+ ...(ngDevMode ? [{ debugName: "#totalCount" }] : /* istanbul ignore next */ []));
558
+ /**
559
+ * Local table source: one page of whatever has been scrolled in so far.
560
+ * Kept as a stable instance so the table host is not recreated on each page load.
561
+ * `pageSize` grows with `#loadedItems` — never seed with a huge empty array (data-table
562
+ * initializes `displayedRows` as `new Array(pageSize)`, which caused NG0955-level jank).
563
+ */
564
+ this.tableDataSource = new AXDataSource({
565
+ pageSize: 1,
566
+ key: 'id',
567
+ load: async () => ({
568
+ items: this.#loadedItems,
569
+ total: this.#loadedItems.length,
570
+ }),
571
+ });
572
+ /**
573
+ * Header (~40px) + body rows. Grows with results up to `maxVisibleItems`,
574
+ * then the table body scrolls for the rest.
575
+ */
576
+ this.tableHeight = computed(() => {
577
+ const header = 40;
578
+ const total = this.#totalCount();
579
+ const rows = total > 0 ? total : Math.min(3, this.maxVisibleItems());
580
+ return header + Math.min(rows, this.maxVisibleItems()) * this.itemHeight();
581
+ }, /* @ts-ignore */
582
+ ...(ngDevMode ? [{ debugName: "tableHeight" }] : /* istanbul ignore next */ []));
583
+ this.loadingConfig = computed(() => ({
584
+ enabled: true,
585
+ animation: true,
586
+ loadingTemplate: this.loadingTemplate(),
587
+ }), /* @ts-ignore */
588
+ ...(ngDevMode ? [{ debugName: "loadingConfig" }] : /* istanbul ignore next */ []));
589
+ this.#host = inject((ElementRef));
590
+ this.resolveRowCssClass = (row) => {
591
+ const item = row;
592
+ if (!item) {
593
+ return '';
594
+ }
595
+ const classes = [];
596
+ if (this.isSelected(item)) {
597
+ classes.push('ax-state-selected');
598
+ }
599
+ if (this.isDisabled(item)) {
600
+ classes.push('ax-state-disabled');
601
+ }
602
+ return classes.join(' ');
603
+ };
604
+ effect((onCleanup) => {
605
+ const source = this.dataSource();
606
+ this.tableDataSource.config.key = source.config.key || this.valueField();
607
+ untracked(() => {
608
+ this.#loadedItems = [];
609
+ this.#totalCount.set(0);
610
+ this.#syncTablePageSize();
611
+ this.tableDataSource.refresh({ reset: true });
612
+ });
613
+ const changedSub = source.onChanged.subscribe((event) => {
614
+ this.#loadedItems = event.cachedItems.filter((item) => item != null);
615
+ this.#totalCount.set(event.totalCount);
616
+ this.#syncTablePageSize();
617
+ this.tableDataSource.refresh({ reset: true });
618
+ });
619
+ // Kick the first page; later pages come from scroll.
620
+ queueMicrotask(() => source.setPage(0));
621
+ onCleanup(() => changedSub.unsubscribe());
622
+ });
623
+ effect((onCleanup) => {
624
+ // Rebind when the table instance appears / source changes.
625
+ this.tableRef();
626
+ this.dataSource();
627
+ let scrollSub;
628
+ const timer = setTimeout(() => {
629
+ const wrapper = this.tableRef()?.getHostElement()?.querySelector('.ax-data-table-wrapper') ??
630
+ this.#host.nativeElement.querySelector('.ax-data-table-wrapper');
631
+ if (!wrapper) {
632
+ return;
633
+ }
634
+ scrollSub = fromEvent(wrapper, 'scroll')
635
+ .pipe(auditTime(80))
636
+ .subscribe(() => this.#tryLoadMore(wrapper));
637
+ }, 0);
638
+ onCleanup(() => {
639
+ clearTimeout(timer);
640
+ scrollSub?.unsubscribe();
641
+ });
642
+ });
382
643
  }
383
- getCellText(item, column) {
384
- return String(item?.[column.field] ?? '');
644
+ /** Stable unique key for `@for` — avoids NG0955 when `field` is missing or duplicated. */
645
+ trackColumnKey(index, column) {
646
+ return `${column?.field ?? ''}::${index}`;
385
647
  }
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 }}
648
+ resolveColumnWidth(column) {
649
+ const width = column.width?.trim();
650
+ if (!width || width.includes('fr')) {
651
+ return 'auto';
394
652
  }
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>
653
+ return width;
654
+ }
655
+ #syncTablePageSize() {
656
+ this.tableDataSource.config.pageSize = Math.max(this.#loadedItems.length, 1);
657
+ }
658
+ handleRowClick(event) {
659
+ this.handleItemClick(event.data);
660
+ }
661
+ handleItemClick(item) {
662
+ if (!item || this.isDisabled(item)) {
663
+ return;
400
664
  }
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>
665
+ this.itemClick.emit({ item, value: this.getValue(item) });
432
666
  }
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>
667
+ isSelected(item) {
668
+ const value = this.getValue(item);
669
+ return this.selectedValues().some((v) => v == value);
670
+ }
671
+ isDisabled(item) {
672
+ return Boolean(item?.[this.disabledField()]);
673
+ }
674
+ #tryLoadMore(wrapper) {
675
+ const nearBottom = wrapper.scrollTop + wrapper.clientHeight >= wrapper.scrollHeight - 48;
676
+ if (!nearBottom) {
677
+ return;
678
+ }
679
+ const source = this.dataSource();
680
+ if (source.isLoading || source.totalCount === 0) {
681
+ return;
682
+ }
683
+ const loadedCount = source.cachedItems.filter((item) => item != null).length;
684
+ if (loadedCount >= source.totalCount) {
685
+ return;
686
+ }
687
+ const nextPage = Math.floor(loadedCount / source.pageSize);
688
+ source.setPage(nextPage);
689
+ }
690
+ getValue(item) {
691
+ return item?.[this.valueField()];
692
+ }
693
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupMultiColumnComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
694
+ 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: `
695
+ <ax-data-table
696
+ class="ax-lookup-multi-column-table"
697
+ look="minimal"
698
+ [dataSource]="tableDataSource"
699
+ [itemHeight]="itemHeight()"
700
+ [alternative]="alternate()"
701
+ [emptyTemplate]="emptyTemplate()"
702
+ [loading]="loadingConfig()"
703
+ [paging]="false"
704
+ [showHeader]="true"
705
+ [fixedHeader]="true"
706
+ [showFooter]="false"
707
+ [allowReordering]="false"
708
+ [rowTemplate]="itemTemplate() ? customRowTemplate : undefined"
709
+ [rowCssClass]="resolveRowCssClass"
710
+ (onRowClick)="handleRowClick($event)"
711
+ >
712
+ @for (column of columns(); track trackColumnKey($index, column)) {
713
+ <ax-text-column
714
+ [dataField]="column.field"
715
+ [caption]="column.title"
716
+ [width]="resolveColumnWidth(column)"
717
+ [allowSorting]="false"
718
+ [allowResizing]="false"
719
+ />
439
720
  }
721
+ </ax-data-table>
722
+
723
+ <ng-template #customRowTemplate let-ctx>
724
+ <tr
725
+ [class.ax-state-selected]="ctx.data != null && isSelected(ctx.data)"
726
+ [class.ax-state-disabled]="ctx.data != null && isDisabled(ctx.data)"
727
+ [style.height.px]="itemHeight()"
728
+ [style.max-height.px]="itemHeight()"
729
+ (click)="handleItemClick(ctx.data)"
730
+ >
731
+ <td [attr.colspan]="columns().length || 1">
732
+ @if (ctx.data != null && itemTemplate()) {
733
+ <ng-container
734
+ [ngTemplateOutlet]="itemTemplate()!"
735
+ [ngTemplateOutletContext]="{ $implicit: ctx.data }"
736
+ />
737
+ }
738
+ </td>
739
+ </tr>
440
740
  </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 }); }
741
+ `, 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
742
  }
443
743
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupMultiColumnComponent, decorators: [{
444
744
  type: Component,
@@ -446,64 +746,61 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
446
746
  selector: 'ax-lookup-multi-column',
447
747
  changeDetection: ChangeDetectionStrategy.OnPush,
448
748
  encapsulation: ViewEncapsulation.None,
449
- imports: [ScrollingModule, NgTemplateOutlet, AXTranslatorPipe, AsyncPipe],
749
+ imports: [NgTemplateOutlet, AXDataTableComponent, AXDataTableTextColumnComponent],
750
+ host: {
751
+ class: 'ax-lookup-multi-column',
752
+ '[style.height.px]': 'tableHeight()',
753
+ },
450
754
  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()"
755
+ <ax-data-table
756
+ class="ax-lookup-multi-column-table"
757
+ look="minimal"
758
+ [dataSource]="tableDataSource"
759
+ [itemHeight]="itemHeight()"
760
+ [alternative]="alternate()"
761
+ [emptyTemplate]="emptyTemplate()"
762
+ [loading]="loadingConfig()"
763
+ [paging]="false"
764
+ [showHeader]="true"
765
+ [fixedHeader]="true"
766
+ [showFooter]="false"
767
+ [allowReordering]="false"
768
+ [rowTemplate]="itemTemplate() ? customRowTemplate : undefined"
769
+ [rowCssClass]="resolveRowCssClass"
770
+ (onRowClick)="handleRowClick($event)"
771
+ >
772
+ @for (column of columns(); track trackColumnKey($index, column)) {
773
+ <ax-text-column
774
+ [dataField]="column.field"
775
+ [caption]="column.title"
776
+ [width]="resolveColumnWidth(column)"
777
+ [allowSorting]="false"
778
+ [allowResizing]="false"
779
+ />
780
+ }
781
+ </ax-data-table>
782
+
783
+ <ng-template #customRowTemplate let-ctx>
784
+ <tr
785
+ [class.ax-state-selected]="ctx.data != null && isSelected(ctx.data)"
786
+ [class.ax-state-disabled]="ctx.data != null && isDisabled(ctx.data)"
787
+ [style.height.px]="itemHeight()"
788
+ [style.max-height.px]="itemHeight()"
789
+ (click)="handleItemClick(ctx.data)"
470
790
  >
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" />
791
+ <td [attr.colspan]="columns().length || 1">
792
+ @if (ctx.data != null && itemTemplate()) {
793
+ <ng-container
794
+ [ngTemplateOutlet]="itemTemplate()!"
795
+ [ngTemplateOutletContext]="{ $implicit: ctx.data }"
796
+ />
492
797
  }
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
- }
798
+ </td>
799
+ </tr>
503
800
  </ng-template>
504
801
  `,
505
802
  }]
506
- }], propDecorators: { columns: [{ type: i0.Input, args: [{ isSignal: true, alias: "columns", required: false }] }] } });
803
+ }], 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
804
 
508
805
  /**
509
806
  * Internal mini component for the `multi-select-tree` lookup mode:
@@ -613,32 +910,43 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
613
910
  */
614
911
  class AXLookupMultiSelectComponent extends AXLookupListViewBase {
615
912
  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: `
913
+ 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
914
  @if (isEmpty()) {
618
- <div class="ax-lookup-empty">
619
- @if (emptyTemplate()) {
620
- <ng-container [ngTemplateOutlet]="emptyTemplate()!" />
621
- } @else {
915
+ @if (emptyTemplate()) {
916
+ <ng-container [ngTemplateOutlet]="emptyTemplate()!" />
917
+ } @else {
918
+ <div class="ax-lookup-empty">
622
919
  {{ '@acorex:common.general.no-result-found' | translate | async }}
623
- }
624
- </div>
920
+ </div>
921
+ }
625
922
  } @else {
626
923
  <cdk-virtual-scroll-viewport
627
924
  class="ax-lookup-viewport"
628
925
  role="listbox"
629
926
  aria-multiselectable="true"
927
+ axListNavigation
928
+ #nav="axListNavigation"
630
929
  [itemSize]="itemHeight()"
631
930
  [style.height.px]="viewportHeight()"
931
+ (onKeypress)="handleListKeypress($event)"
632
932
  >
633
933
  <div
634
- *cdkVirtualFor="let item of listDataSource(); trackBy: trackByIndex"
934
+ *cdkVirtualFor="let item of listDataSource(); let i = index; trackBy: trackByIndex"
635
935
  role="option"
636
- class="ax-lookup-option"
936
+ class="ax-lookup-option-host"
937
+ axListNavigationItem
938
+ #navItem="axListNavigationItem"
637
939
  [style.height.px]="itemHeight()"
940
+ [class.ax-lookup-option]="!itemTemplate()"
941
+ [class.ax-lookup-option-host--check]="!!itemTemplate()"
942
+ [class.ax-state-alternate]="alternate() && i % 2 === 1"
638
943
  [class.ax-state-selected]="item != null && isSelected(item)"
639
944
  [class.ax-state-disabled]="item != null && isDisabled(item)"
945
+ [class.ax-state-active]="navItem.isActive()"
640
946
  [attr.aria-selected]="item != null ? isSelected(item) : null"
947
+ (mouseenter)="activateNavItem(nav, navItem)"
641
948
  (click)="handleItemClick(item)"
949
+ (onKeypress)="handleItemKeypress($event, item)"
642
950
  >
643
951
  @if (item != null) {
644
952
  <input
@@ -667,7 +975,7 @@ class AXLookupMultiSelectComponent extends AXLookupListViewBase {
667
975
  <span class="ax-lookup-option-loading">{{ '@acorex:common.status.loading' | translate | async }}</span>
668
976
  }
669
977
  </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 }); }
978
+ `, 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: i3.AXListNavigationDirective, selector: "[axListNavigation]", inputs: ["orientation"], outputs: ["onNavigationChanged", "onKeypress"], exportAs: ["axListNavigation"] }, { kind: "directive", type: i3.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
979
  }
672
980
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupMultiSelectComponent, decorators: [{
673
981
  type: Component,
@@ -675,33 +983,45 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
675
983
  selector: 'ax-lookup-multi-select',
676
984
  changeDetection: ChangeDetectionStrategy.OnPush,
677
985
  encapsulation: ViewEncapsulation.None,
678
- imports: [ScrollingModule, NgTemplateOutlet, AXTranslatorPipe, AsyncPipe],
986
+ imports: [ScrollingModule, NgTemplateOutlet, AXTranslatorPipe, AsyncPipe, AXListNavigationModule],
987
+ providers: [{ provide: AXLookupListViewBase, useExisting: AXLookupMultiSelectComponent }],
679
988
  template: `
680
989
  @if (isEmpty()) {
681
- <div class="ax-lookup-empty">
682
- @if (emptyTemplate()) {
683
- <ng-container [ngTemplateOutlet]="emptyTemplate()!" />
684
- } @else {
990
+ @if (emptyTemplate()) {
991
+ <ng-container [ngTemplateOutlet]="emptyTemplate()!" />
992
+ } @else {
993
+ <div class="ax-lookup-empty">
685
994
  {{ '@acorex:common.general.no-result-found' | translate | async }}
686
- }
687
- </div>
995
+ </div>
996
+ }
688
997
  } @else {
689
998
  <cdk-virtual-scroll-viewport
690
999
  class="ax-lookup-viewport"
691
1000
  role="listbox"
692
1001
  aria-multiselectable="true"
1002
+ axListNavigation
1003
+ #nav="axListNavigation"
693
1004
  [itemSize]="itemHeight()"
694
1005
  [style.height.px]="viewportHeight()"
1006
+ (onKeypress)="handleListKeypress($event)"
695
1007
  >
696
1008
  <div
697
- *cdkVirtualFor="let item of listDataSource(); trackBy: trackByIndex"
1009
+ *cdkVirtualFor="let item of listDataSource(); let i = index; trackBy: trackByIndex"
698
1010
  role="option"
699
- class="ax-lookup-option"
1011
+ class="ax-lookup-option-host"
1012
+ axListNavigationItem
1013
+ #navItem="axListNavigationItem"
700
1014
  [style.height.px]="itemHeight()"
1015
+ [class.ax-lookup-option]="!itemTemplate()"
1016
+ [class.ax-lookup-option-host--check]="!!itemTemplate()"
1017
+ [class.ax-state-alternate]="alternate() && i % 2 === 1"
701
1018
  [class.ax-state-selected]="item != null && isSelected(item)"
702
1019
  [class.ax-state-disabled]="item != null && isDisabled(item)"
1020
+ [class.ax-state-active]="navItem.isActive()"
703
1021
  [attr.aria-selected]="item != null ? isSelected(item) : null"
1022
+ (mouseenter)="activateNavItem(nav, navItem)"
704
1023
  (click)="handleItemClick(item)"
1024
+ (onKeypress)="handleItemKeypress($event, item)"
705
1025
  >
706
1026
  @if (item != null) {
707
1027
  <input
@@ -742,11 +1062,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
742
1062
  * - `multi-select` — a predefined list of options for multiple item selection (chips in the trigger).
743
1063
  * - `drop-down-tree` — a predefined list rendered in a tree-like structure for single item selection.
744
1064
  * - `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.
1065
+ * - `multi-column` — an `ax-data-table` grid; when searchable, the trigger input filters as you type.
1066
+ *
1067
+ * With `adaptivityEnabled` (default `true`), the list opens as a bottom actionsheet on small
1068
+ * screens instead of an anchored dropdown — the same alternate presentation as `ax-select-box`.
1069
+ *
1070
+ * Implements {@link FormValueControl} so `[(ngModel)]` / signal forms work via the `value` model
1071
+ * (no `ControlValueAccessor`).
746
1072
  *
747
1073
  * @category Components
748
1074
  */
749
1075
  class AXLookupComponent extends NXComponent {
1076
+ #platform;
1077
+ #destroyRef;
750
1078
  #itemsCache;
751
1079
  #isUserInteraction;
752
1080
  #lastValue;
@@ -757,6 +1085,8 @@ class AXLookupComponent extends NXComponent {
757
1085
  #searchDebounce;
758
1086
  constructor() {
759
1087
  super();
1088
+ this.#platform = inject(AXPlatform);
1089
+ this.#destroyRef = inject(DestroyRef);
760
1090
  /**
761
1091
  * The lookup rendering mode. Selects which mini component renders in the popup.
762
1092
  */
@@ -791,7 +1121,7 @@ class AXLookupComponent extends NXComponent {
791
1121
  this.disabledField = input('disabled', /* @ts-ignore */
792
1122
  ...(ngDevMode ? [{ debugName: "disabledField" }] : /* istanbul ignore next */ []));
793
1123
  /**
794
- * Column definitions for the `multi-column` mode.
1124
+ * Column definitions for the `multi-column` mode (rendered as `ax-text-column` in `ax-data-table`).
795
1125
  */
796
1126
  this.columns = input([], /* @ts-ignore */
797
1127
  ...(ngDevMode ? [{ debugName: "columns" }] : /* istanbul ignore next */ []));
@@ -802,6 +1132,23 @@ class AXLookupComponent extends NXComponent {
802
1132
  */
803
1133
  this.searchable = input(true, /* @ts-ignore */
804
1134
  ...(ngDevMode ? [{ debugName: "searchable" }] : /* istanbul ignore next */ []));
1135
+ /**
1136
+ * When `true` (default), the popup list uses the alternate actionsheet presentation on small
1137
+ * screens (`SM`). When `false`, the list always opens as an anchored dropdown.
1138
+ */
1139
+ this.adaptivityEnabled = input(true, /* @ts-ignore */
1140
+ ...(ngDevMode ? [{ debugName: "adaptivityEnabled" }] : /* istanbul ignore next */ []));
1141
+ /**
1142
+ * Title shown in the actionsheet header on small screens. Falls back to `placeholder`.
1143
+ */
1144
+ this.caption = input('', /* @ts-ignore */
1145
+ ...(ngDevMode ? [{ debugName: "caption" }] : /* istanbul ignore next */ []));
1146
+ /**
1147
+ * When `true`, list rows use alternating background colors for easier scanning
1148
+ * (`drop-down-list`, `multi-select`, and `multi-column` modes).
1149
+ */
1150
+ this.alternate = input(false, /* @ts-ignore */
1151
+ ...(ngDevMode ? [{ debugName: "alternate" }] : /* istanbul ignore next */ []));
805
1152
  /**
806
1153
  * Placeholder for the trigger search input when items are already selected
807
1154
  * (mainly useful in `multi-select`). Falls back to `placeholder` when the selection is empty.
@@ -816,12 +1163,12 @@ class AXLookupComponent extends NXComponent {
816
1163
  /**
817
1164
  * Whether the lookup is disabled.
818
1165
  */
819
- this.disabled = model(false, /* @ts-ignore */
1166
+ this.disabled = input(false, /* @ts-ignore */
820
1167
  ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
821
1168
  /**
822
1169
  * Whether the lookup is readonly.
823
1170
  */
824
- this.readonly = model(false, /* @ts-ignore */
1171
+ this.readonly = input(false, /* @ts-ignore */
825
1172
  ...(ngDevMode ? [{ debugName: "readonly" }] : /* istanbul ignore next */ []));
826
1173
  /**
827
1174
  * Predefined look scheme of the editor container. Same looks as other editor components like ax-text-box.
@@ -865,7 +1212,8 @@ class AXLookupComponent extends NXComponent {
865
1212
  ...(ngDevMode ? [{ debugName: "loadingTemplate" }] : /* istanbul ignore next */ []));
866
1213
  /**
867
1214
  * The selected value(s): a scalar in single modes, an array in
868
- * `multi-select` / `multi-select-tree`. Supports two-way binding.
1215
+ * `multi-select` / `multi-select-tree`. Supports `[(value)]`, `[(ngModel)]`, and signal forms
1216
+ * via {@link FormValueControl}.
869
1217
  */
870
1218
  this.value = model(null, /* @ts-ignore */
871
1219
  ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
@@ -877,6 +1225,22 @@ class AXLookupComponent extends NXComponent {
877
1225
  * Emitted when the selection changes, carrying the resolved selected items.
878
1226
  */
879
1227
  this.onSelectionChanged = output();
1228
+ /**
1229
+ * Emitted when the trigger receives focus.
1230
+ */
1231
+ this.onFocus = output();
1232
+ /**
1233
+ * Emitted when the trigger loses focus.
1234
+ */
1235
+ this.onBlur = output();
1236
+ /**
1237
+ * Emitted when a list/tree item is clicked.
1238
+ */
1239
+ this.onItemClick = output();
1240
+ /**
1241
+ * Emitted when an item is selected (click or keyboard).
1242
+ */
1243
+ this.onItemSelected = output();
880
1244
  /**
881
1245
  * Emitted when the popup opens.
882
1246
  */
@@ -888,6 +1252,9 @@ class AXLookupComponent extends NXComponent {
888
1252
  /** Whether the popup is expanded. */
889
1253
  this.expanded = signal(false, /* @ts-ignore */
890
1254
  ...(ngDevMode ? [{ debugName: "expanded" }] : /* istanbul ignore next */ []));
1255
+ /** Whether the list is currently shown as a bottom actionsheet (small screens + adaptivity). */
1256
+ this.isActionsheetStyle = signal(false, /* @ts-ignore */
1257
+ ...(ngDevMode ? [{ debugName: "isActionsheetStyle" }] : /* istanbul ignore next */ []));
891
1258
  /** Whether the current mode selects multiple values. */
892
1259
  this.isMultiple = computed(() => this.mode() === 'multi-select' || this.mode() === 'multi-select-tree', /* @ts-ignore */
893
1260
  ...(ngDevMode ? [{ debugName: "isMultiple" }] : /* istanbul ignore next */ []));
@@ -936,12 +1303,29 @@ class AXLookupComponent extends NXComponent {
936
1303
  * Text typed in the editable trigger input.
937
1304
  * Multi-select starts empty; single modes sync from the selected display text.
938
1305
  */
939
- this.searchText = linkedSignal(() => (this.mode() === 'multi-select' ? '' : this.displayText()), /* @ts-ignore */
1306
+ this.searchText = linkedSignal(() => (this.mode() === 'multi-select' || this.mode() === 'multi-select-tree' ? '' : this.displayText()), /* @ts-ignore */
940
1307
  ...(ngDevMode ? [{ debugName: "searchText" }] : /* istanbul ignore next */ []));
1308
+ /**
1309
+ * Whether the trigger should render `selectedTemplate` instead of the plain input text.
1310
+ * Searchable mode shows the template while the popup is closed and the input still matches
1311
+ * the selected display text (same pattern as combo-box).
1312
+ */
1313
+ this.showSelectedTemplate = computed(() => {
1314
+ if (this.isMultiple() || !this.selectedTemplate() || this.selectedItems().length === 0) {
1315
+ return false;
1316
+ }
1317
+ if (!this.isEditableTrigger()) {
1318
+ return true;
1319
+ }
1320
+ return !this.expanded() && this.searchText() === this.displayText();
1321
+ }, /* @ts-ignore */
1322
+ ...(ngDevMode ? [{ debugName: "showSelectedTemplate" }] : /* istanbul ignore next */ []));
941
1323
  this.popoverRef = viewChild(AXPopoverComponent, /* @ts-ignore */
942
1324
  ...(ngDevMode ? [{ debugName: "popoverRef" }] : /* istanbul ignore next */ []));
943
1325
  this.triggerSearchInput = viewChild('triggerSearchInput', /* @ts-ignore */
944
1326
  ...(ngDevMode ? [{ debugName: "triggerSearchInput" }] : /* istanbul ignore next */ []));
1327
+ this.listView = viewChild(AXLookupListViewBase, /* @ts-ignore */
1328
+ ...(ngDevMode ? [{ debugName: "listView" }] : /* istanbul ignore next */ []));
945
1329
  this.#itemsCache = new Map();
946
1330
  this.#isUserInteraction = false;
947
1331
  this.#lastValue = undefined;
@@ -959,6 +1343,19 @@ class AXLookupComponent extends NXComponent {
959
1343
  ...(ngDevMode ? [{ debugName: "triggerSearchPlaceholder" }] : /* istanbul ignore next */ []));
960
1344
  effect(() => this.#emitValueChanged(this.value()));
961
1345
  effect(() => this.#emitOpenedOrClosed(this.expanded()));
1346
+ effect(() => {
1347
+ this.adaptivityEnabled();
1348
+ untracked(() => this.#syncActionsheetStyle());
1349
+ });
1350
+ this.#platform.resize.pipe(takeUntilDestroyed(this.#destroyRef)).subscribe(() => {
1351
+ this.#syncActionsheetStyle();
1352
+ // Match dropdown-box: close anchored dropdowns on resize; keep actionsheet open.
1353
+ if (this.expanded() && !this.isActionsheetStyle()) {
1354
+ this.close();
1355
+ }
1356
+ });
1357
+ // Seed the actionsheet flag once.
1358
+ this.#syncActionsheetStyle();
962
1359
  // Resolve selected items whenever the value (or the sources) change.
963
1360
  effect(() => {
964
1361
  const values = this.selectedValues();
@@ -984,10 +1381,18 @@ class AXLookupComponent extends NXComponent {
984
1381
  });
985
1382
  });
986
1383
  }
1384
+ #syncActionsheetStyle() {
1385
+ this.isActionsheetStyle.set(this.adaptivityEnabled() && this.#platform.is('SM'));
1386
+ }
987
1387
  /** Returns the display text of an item using the `textField` mapping. */
988
1388
  getItemText(item) {
989
1389
  return String(item?.[this.textField()] ?? '');
990
1390
  }
1391
+ /** Stable unique key for selected chips — avoids NG0955 and remounts on reorder/remove. */
1392
+ trackSelectedKey(item) {
1393
+ const key = item?.[this.valueField()];
1394
+ return key != null ? key : item;
1395
+ }
991
1396
  /**
992
1397
  * Opens (editable trigger) or toggles the popup on trigger click.
993
1398
  */
@@ -1001,6 +1406,69 @@ class AXLookupComponent extends NXComponent {
1001
1406
  return;
1002
1407
  }
1003
1408
  this.expanded.update((open) => !open);
1409
+ if (!this.expanded()) {
1410
+ return;
1411
+ }
1412
+ queueMicrotask(() => this.focusListFirst());
1413
+ }
1414
+ /**
1415
+ * Focuses the lookup trigger input.
1416
+ */
1417
+ focus(options) {
1418
+ if (this.disabled()) {
1419
+ return;
1420
+ }
1421
+ this.triggerSearchInput()?.nativeElement.focus(options);
1422
+ }
1423
+ /**
1424
+ * Handles keyboard interaction on the trigger input.
1425
+ */
1426
+ onTriggerKeydown(e) {
1427
+ if (this.disabled() || this.readonly()) {
1428
+ return;
1429
+ }
1430
+ if (e.key === 'Escape') {
1431
+ this.close();
1432
+ return;
1433
+ }
1434
+ if (e.key === 'ArrowDown') {
1435
+ e.preventDefault();
1436
+ this.expanded.set(true);
1437
+ queueMicrotask(() => this.focusListFirst());
1438
+ return;
1439
+ }
1440
+ if (!this.isEditableTrigger() && (e.key === 'Enter' || e.key === ' ')) {
1441
+ e.preventDefault();
1442
+ this.expanded.update((open) => !open);
1443
+ if (this.expanded()) {
1444
+ queueMicrotask(() => this.focusListFirst());
1445
+ }
1446
+ }
1447
+ }
1448
+ /** Blocks typing when the trigger is not editable (keeps Tab / keyboard open working). */
1449
+ onBeforeInput(event) {
1450
+ if (!this.isEditableTrigger() || this.readonly()) {
1451
+ event.preventDefault();
1452
+ }
1453
+ }
1454
+ /**
1455
+ * Returns focus to the trigger input when list navigation requests it.
1456
+ */
1457
+ onListNavigateOut(_reason) {
1458
+ this.triggerSearchInput()?.nativeElement.focus();
1459
+ }
1460
+ focusListFirst() {
1461
+ const tryFocus = (attempt = 0) => {
1462
+ const list = this.listView();
1463
+ if (list) {
1464
+ list.focusFirst();
1465
+ return;
1466
+ }
1467
+ if (attempt < 5) {
1468
+ setTimeout(() => tryFocus(attempt + 1), 16);
1469
+ }
1470
+ };
1471
+ tryFocus();
1004
1472
  }
1005
1473
  /**
1006
1474
  * Keeps the expanded state in sync when the popover closes (e.g. click outside),
@@ -1008,7 +1476,7 @@ class AXLookupComponent extends NXComponent {
1008
1476
  */
1009
1477
  onPopoverClosed() {
1010
1478
  this.expanded.set(false);
1011
- this.searchText.set(this.mode() === 'multi-select' ? '' : this.displayText());
1479
+ this.searchText.set(this.isMultiple() ? '' : this.displayText());
1012
1480
  if (this.#filterApplied) {
1013
1481
  this.#filterApplied = false;
1014
1482
  const source = this.resolvedDataSource();
@@ -1022,6 +1490,12 @@ class AXLookupComponent extends NXComponent {
1022
1490
  close() {
1023
1491
  this.expanded.set(false);
1024
1492
  }
1493
+ /**
1494
+ * Closes the popup (alias for {@link close}, required by `AXClosableComponent`).
1495
+ */
1496
+ closeAll() {
1497
+ this.close();
1498
+ }
1025
1499
  /**
1026
1500
  * Opens the popup.
1027
1501
  */
@@ -1035,6 +1509,9 @@ class AXLookupComponent extends NXComponent {
1035
1509
  * Handles typing in the editable trigger input.
1036
1510
  */
1037
1511
  onTriggerSearchInput(text) {
1512
+ if (!this.isEditableTrigger()) {
1513
+ return;
1514
+ }
1038
1515
  this.searchText.set(text);
1039
1516
  this.expanded.set(true);
1040
1517
  this.#applyFilterDebounced(text);
@@ -1043,6 +1520,8 @@ class AXLookupComponent extends NXComponent {
1043
1520
  * Commits a single pick (drop-down-list, drop-down-tree, multi-column) and closes the popup.
1044
1521
  */
1045
1522
  handleSinglePick(e) {
1523
+ this.#emitItemClick(e.item);
1524
+ this.#emitItemSelected(e.item);
1046
1525
  this.#itemsCache.set(e.value, e.item);
1047
1526
  if (!this.#valuesEqual(e.value, this.value())) {
1048
1527
  this.#isUserInteraction = true;
@@ -1055,9 +1534,13 @@ class AXLookupComponent extends NXComponent {
1055
1534
  * Clears the trigger search so the full list returns (select-box-like).
1056
1535
  */
1057
1536
  handleMultiToggle(e) {
1537
+ this.#emitItemClick(e.item);
1058
1538
  this.#itemsCache.set(e.value, e.item);
1059
1539
  const current = this.selectedValues();
1060
1540
  const exists = current.some((v) => v == e.value);
1541
+ if (!exists) {
1542
+ this.#emitItemSelected(e.item);
1543
+ }
1061
1544
  const next = exists ? current.filter((v) => !(v == e.value)) : [...current, e.value];
1062
1545
  this.#isUserInteraction = true;
1063
1546
  this.value.set(next);
@@ -1070,12 +1553,49 @@ class AXLookupComponent extends NXComponent {
1070
1553
  * Applies the multi-select-tree selection to the value; the popup stays open.
1071
1554
  */
1072
1555
  handleTreeSelectionChange(e) {
1556
+ const prev = new Set(this.selectedValues().map((v) => String(v)));
1557
+ const newlySelected = e.nodes.filter((node) => !prev.has(String(node[this.valueField()])));
1558
+ if (newlySelected.length > 0) {
1559
+ this.#emitItemSelected(newlySelected[0]);
1560
+ }
1073
1561
  for (const node of e.nodes) {
1074
1562
  this.#itemsCache.set(String(node[this.valueField()]), node);
1075
1563
  }
1076
1564
  this.#isUserInteraction = true;
1077
1565
  this.value.set([...e.ids]);
1078
1566
  }
1567
+ /** Forwards native focus from the trigger input. */
1568
+ emitOnFocus(e) {
1569
+ this.onFocus.emit({
1570
+ component: this,
1571
+ htmlElement: this.nativeElement,
1572
+ nativeEvent: e,
1573
+ });
1574
+ }
1575
+ /** Forwards native blur from the trigger input. */
1576
+ emitOnBlur(e) {
1577
+ this.onBlur.emit({
1578
+ component: this,
1579
+ htmlElement: this.nativeElement,
1580
+ nativeEvent: e,
1581
+ });
1582
+ }
1583
+ #emitItemClick(item) {
1584
+ this.onItemClick.emit({
1585
+ component: this,
1586
+ item,
1587
+ htmlElement: this.nativeElement,
1588
+ isUserInteraction: true,
1589
+ });
1590
+ }
1591
+ #emitItemSelected(item) {
1592
+ this.onItemSelected.emit({
1593
+ component: this,
1594
+ item,
1595
+ htmlElement: this.nativeElement,
1596
+ isUserInteraction: true,
1597
+ });
1598
+ }
1079
1599
  /**
1080
1600
  * Removes a single chip from the multi selection.
1081
1601
  */
@@ -1090,14 +1610,30 @@ class AXLookupComponent extends NXComponent {
1090
1610
  }
1091
1611
  /**
1092
1612
  * Clears the whole selection.
1613
+ * Sets `null` in single modes and `[]` in multi modes. Used by projected `ax-clear-button`.
1614
+ *
1615
+ * @param isUserInteraction - Whether the clear was triggered by the user.
1093
1616
  */
1094
- clearAll(event) {
1095
- event.stopPropagation();
1617
+ reset(isUserInteraction = false) {
1096
1618
  if (this.disabled() || this.readonly()) {
1097
1619
  return;
1098
1620
  }
1099
- this.#isUserInteraction = true;
1100
- this.value.set(this.isMultiple() ? [] : null);
1621
+ const next = this.isMultiple() ? [] : null;
1622
+ const current = this.value();
1623
+ if (this.isMultiple()) {
1624
+ if (Array.isArray(current) && current.length === 0) {
1625
+ return;
1626
+ }
1627
+ }
1628
+ else if (current == null) {
1629
+ return;
1630
+ }
1631
+ this.#isUserInteraction = isUserInteraction;
1632
+ this.value.set(next);
1633
+ if (this.isEditableTrigger() && this.searchText()) {
1634
+ this.searchText.set('');
1635
+ this.#applyFilterDebounced('');
1636
+ }
1101
1637
  }
1102
1638
  #applyFilterDebounced(text) {
1103
1639
  if (this.#searchDebounce) {
@@ -1227,20 +1763,31 @@ class AXLookupComponent extends NXComponent {
1227
1763
  expanded ? this.onOpened.emit(event) : this.onClosed.emit(event);
1228
1764
  }
1229
1765
  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 }); }
1766
+ 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 }, 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 } }, outputs: { look: "lookChange", value: "valueChange", onValueChanged: "onValueChanged", onSelectionChanged: "onSelectionChanged", onFocus: "onFocus", onBlur: "onBlur", onItemClick: "onItemClick", onItemSelected: "onItemSelected", onOpened: "onOpened", onClosed: "onClosed" }, providers: [
1767
+ { provide: AXComponent, useExisting: AXLookupComponent },
1768
+ { provide: AXClearableComponent, useExisting: AXLookupComponent },
1769
+ { provide: AXClosableComponent, useExisting: AXLookupComponent },
1770
+ ], 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 <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 <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", 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;-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-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-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;cursor:pointer;border-style:var(--tw-border-style);border-width:1px;border-color:transparent;--tw-outline-style: none;outline-style:none}.ax-lookup-option-host.ax-state-alternate{background-color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-option-host.ax-state-alternate{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 5%,transparent)}}.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-state-disabled{cursor:not-allowed;opacity:50%}.ax-lookup-option-host.ax-lookup-option-host--check{display:flex;align-items:center;gap:calc(var(--spacing, .25rem) * 2);padding-inline:calc(var(--spacing, .25rem) * 3)}.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{display:flex;align-items:center;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 2);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))}.ax-lookup-option.ax-state-selected{color:rgba(var(--ax-sys-color-primary-surface))}.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{flex-shrink:0;color:rgba(var(--ax-sys-color-primary-surface))}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-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: "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
1771
  }
1232
1772
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupComponent, decorators: [{
1233
1773
  type: Component,
1234
1774
  args: [{ selector: 'ax-lookup', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
1235
1775
  NgTemplateOutlet,
1776
+ AsyncPipe,
1777
+ AXTranslatorPipe,
1778
+ AXDecoratorModule,
1236
1779
  AXPopoverComponent,
1237
1780
  AXLookupDropDownListComponent,
1238
1781
  AXLookupMultiSelectComponent,
1239
1782
  AXLookupDropDownTreeComponent,
1240
1783
  AXLookupMultiSelectTreeComponent,
1241
1784
  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 }] }] } });
1785
+ ], providers: [
1786
+ { provide: AXComponent, useExisting: AXLookupComponent },
1787
+ { provide: AXClearableComponent, useExisting: AXLookupComponent },
1788
+ { provide: AXClosableComponent, useExisting: AXLookupComponent },
1789
+ ], 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 <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 <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", 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;-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-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-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;cursor:pointer;border-style:var(--tw-border-style);border-width:1px;border-color:transparent;--tw-outline-style: none;outline-style:none}.ax-lookup-option-host.ax-state-alternate{background-color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-option-host.ax-state-alternate{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 5%,transparent)}}.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-state-disabled{cursor:not-allowed;opacity:50%}.ax-lookup-option-host.ax-lookup-option-host--check{display:flex;align-items:center;gap:calc(var(--spacing, .25rem) * 2);padding-inline:calc(var(--spacing, .25rem) * 3)}.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{display:flex;align-items:center;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 2);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))}.ax-lookup-option.ax-state-selected{color:rgba(var(--ax-sys-color-primary-surface))}.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{flex-shrink:0;color:rgba(var(--ax-sys-color-primary-surface))}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-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"] }]
1790
+ }], 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 }] }], 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"] }], 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
1791
 
1245
1792
  class AXLookupModule {
1246
1793
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }