@acorex/components 22.1.0-next.3 → 22.1.0-next.30

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 (53) hide show
  1. package/fesm2022/acorex-components-alert.mjs +2 -2
  2. package/fesm2022/acorex-components-alert.mjs.map +1 -1
  3. package/fesm2022/acorex-components-combo-box.mjs +229 -25
  4. package/fesm2022/acorex-components-combo-box.mjs.map +1 -1
  5. package/fesm2022/{acorex-components-conversation-open-composer-picker-for-files-BuNEjswI.mjs → acorex-components-conversation-open-composer-picker-for-files-DnSW908R.mjs} +6 -19
  6. package/fesm2022/acorex-components-conversation-open-composer-picker-for-files-DnSW908R.mjs.map +1 -0
  7. package/fesm2022/acorex-components-conversation.mjs +7568 -9585
  8. package/fesm2022/acorex-components-conversation.mjs.map +1 -1
  9. package/fesm2022/acorex-components-data-table.mjs +57 -23
  10. package/fesm2022/acorex-components-data-table.mjs.map +1 -1
  11. package/fesm2022/acorex-components-decorators.mjs +2 -2
  12. package/fesm2022/acorex-components-decorators.mjs.map +1 -1
  13. package/fesm2022/acorex-components-dropdown.mjs +2 -2
  14. package/fesm2022/acorex-components-dropdown.mjs.map +1 -1
  15. package/fesm2022/acorex-components-fab.mjs +5 -5
  16. package/fesm2022/acorex-components-fab.mjs.map +1 -1
  17. package/fesm2022/acorex-components-form.mjs +21 -5
  18. package/fesm2022/acorex-components-form.mjs.map +1 -1
  19. package/fesm2022/acorex-components-label.mjs +2 -2
  20. package/fesm2022/acorex-components-label.mjs.map +1 -1
  21. package/fesm2022/acorex-components-loading-dialog.mjs +59 -42
  22. package/fesm2022/acorex-components-loading-dialog.mjs.map +1 -1
  23. package/fesm2022/acorex-components-lookup.mjs +1191 -171
  24. package/fesm2022/acorex-components-lookup.mjs.map +1 -1
  25. package/fesm2022/acorex-components-menu.mjs +11 -5
  26. package/fesm2022/acorex-components-menu.mjs.map +1 -1
  27. package/fesm2022/acorex-components-notification.mjs +6 -6
  28. package/fesm2022/acorex-components-notification.mjs.map +1 -1
  29. package/fesm2022/acorex-components-popover.mjs +22 -0
  30. package/fesm2022/acorex-components-popover.mjs.map +1 -1
  31. package/fesm2022/acorex-components-select-box.mjs +38 -11
  32. package/fesm2022/acorex-components-select-box.mjs.map +1 -1
  33. package/fesm2022/acorex-components-tabs.mjs +2 -2
  34. package/fesm2022/acorex-components-tabs.mjs.map +1 -1
  35. package/fesm2022/acorex-components-tag-box.mjs +2 -2
  36. package/fesm2022/acorex-components-tag-box.mjs.map +1 -1
  37. package/fesm2022/acorex-components-tree-view.mjs +40 -3
  38. package/fesm2022/acorex-components-tree-view.mjs.map +1 -1
  39. package/lookup/README.md +19 -8
  40. package/package.json +4 -7
  41. package/types/acorex-components-combo-box.d.ts +46 -9
  42. package/types/acorex-components-conversation.d.ts +663 -1293
  43. package/types/acorex-components-data-table.d.ts +12 -2
  44. package/types/acorex-components-loading-dialog.d.ts +12 -4
  45. package/types/acorex-components-lookup.d.ts +258 -64
  46. package/types/acorex-components-popover.d.ts +6 -0
  47. package/types/acorex-components-select-box.d.ts +11 -0
  48. package/types/acorex-components-tree-view.d.ts +9 -1
  49. package/fesm2022/acorex-components-conversation-open-composer-picker-for-files-BuNEjswI.mjs.map +0 -1
  50. package/fesm2022/acorex-components-selection-list-2.mjs +0 -168
  51. package/fesm2022/acorex-components-selection-list-2.mjs.map +0 -1
  52. package/selection-list-2/README.md +0 -3
  53. package/types/acorex-components-selection-list-2.d.ts +0 -52
@@ -1,27 +1,174 @@
1
- import { AXListDataSource, AXDataSource, NXComponent, convertArrayToDataSource, AXComponent, AXClearableComponent, AXClosableComponent } from '@acorex/cdk/common';
1
+ import { AXDataSource, AXListDataSource, NXValueComponent, convertArrayToDataSource, AXComponent, AXClearableComponent, AXClosableComponent, AXValuableComponent } from '@acorex/cdk/common';
2
+ import { AXButtonComponent } from '@acorex/components/button';
2
3
  import { AXChipsComponent } from '@acorex/components/chips';
3
4
  import * as i1$1 from '@acorex/components/decorators';
4
5
  import { AXDecoratorModule } from '@acorex/components/decorators';
5
6
  import { AXPopoverComponent } from '@acorex/components/popover';
7
+ import { AXSearchBoxComponent } from '@acorex/components/search-box';
6
8
  import { AXPlatform } from '@acorex/core/platform';
7
9
  import { AXTranslatorPipe } from '@acorex/core/translation';
8
- import { NgTemplateOutlet, AsyncPipe } from '@angular/common';
10
+ import { NgTemplateOutlet, AsyncPipe, DOCUMENT } from '@angular/common';
9
11
  import * as i0 from '@angular/core';
10
- import { input, output, signal, computed, viewChild, viewChildren, inject, NgZone, effect, untracked, Directive, ViewEncapsulation, ChangeDetectionStrategy, Component, ElementRef, DestroyRef, model, linkedSignal, NgModule } from '@angular/core';
12
+ import { input, output, signal, computed, viewChild, viewChildren, inject, NgZone, effect, untracked, Directive, ViewEncapsulation, ChangeDetectionStrategy, Component, ElementRef, DestroyRef, model, linkedSignal, afterRenderEffect, NgModule } from '@angular/core';
11
13
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
12
- import * as i3 from '@acorex/cdk/list-navigation';
14
+ import * as i2 from '@acorex/cdk/list-navigation';
13
15
  import { AXListNavigationDirective, AXListNavigationItemDirective, AXListNavigationModule } from '@acorex/cdk/list-navigation';
14
16
  import * as i1 from '@angular/cdk/scrolling';
15
17
  import { CdkVirtualScrollViewport, ScrollingModule } from '@angular/cdk/scrolling';
16
18
  import { AXTreeViewComponent } from '@acorex/components/tree-view';
17
19
  import { AXDataTableComponent, AXDataTableTextColumnComponent } from '@acorex/components/data-table';
18
20
  import { fromEvent, auditTime } from 'rxjs';
21
+ import { AXCheckBoxComponent } from '@acorex/components/check-box';
22
+
23
+ /**
24
+ * Converts a drop-down-tree datasource (nested array or lazy callback) into an
25
+ * `AXDataSource` that a multi-column data table can load and expand.
26
+ */
27
+ function createLookupTreeTableDataSource(source, options) {
28
+ const isCallback = typeof source === 'function';
29
+ return new AXDataSource({
30
+ pageSize: 8,
31
+ key: options.valueField,
32
+ load: (query) => loadTreeTableRows(source, options, query, isCallback),
33
+ byKey: (key) => findTreeTableItem(source, options.valueField, key),
34
+ });
35
+ }
36
+ async function loadTreeTableRows(source, options, query, isCallback) {
37
+ const parentFilter = query.filter?.field === options.parentField ? query.filter : undefined;
38
+ const textFilter = query.filter && query.filter.field !== options.parentField ? query.filter : undefined;
39
+ if (parentFilter) {
40
+ const children = await loadChildren(source, options, parentFilter.value, isCallback);
41
+ return { items: children, total: children.length };
42
+ }
43
+ const roots = mapTreeNodes(await loadRoots(source, isCallback), options);
44
+ const items = textFilter ? filterTreeNodes(roots, options.textField, String(textFilter.value ?? '')) : roots;
45
+ return { items, total: items.length };
46
+ }
47
+ async function loadRoots(source, isCallback) {
48
+ if (!isCallback) {
49
+ return source ?? [];
50
+ }
51
+ return (await source()) ?? [];
52
+ }
53
+ async function loadChildren(source, options, parentId, isCallback) {
54
+ if (isCallback) {
55
+ const nodes = (await source(String(parentId))) ?? [];
56
+ return mapTreeNodes(nodes, options);
57
+ }
58
+ const parent = findTreeNode(source, options.valueField, parentId);
59
+ const children = Array.isArray(parent?.['children']) ? parent['children'] : [];
60
+ return mapTreeNodes(children, options);
61
+ }
62
+ function mapTreeNodes(nodes, options) {
63
+ return nodes.map((node) => mapTreeNode(node, options));
64
+ }
65
+ function mapTreeNode(node, options) {
66
+ const rawChildren = node['children'];
67
+ const children = Array.isArray(rawChildren) ? mapTreeNodes(rawChildren, options) : undefined;
68
+ const childrenCount = node['childrenCount'];
69
+ const hasChildren = (children?.length ?? 0) > 0 ||
70
+ (typeof childrenCount === 'number' && childrenCount > 0) ||
71
+ node['hasChild'] === true ||
72
+ node['hasChildren'] === true;
73
+ return {
74
+ ...node,
75
+ [options.hasChildrenField]: hasChildren,
76
+ ...(children && children.length > 0 ? { children } : {}),
77
+ };
78
+ }
79
+ /**
80
+ * Recursively filters a nested tree by `textField` (case-insensitive contains).
81
+ * A node is kept if it matches or any descendant matches. Matching parents keep
82
+ * all children. Every kept ancestor is a new object with `expanded: true` so
83
+ * nested hits are visible without mutating the original tree.
84
+ */
85
+ function filterTreeNodes(nodes, textField, query) {
86
+ const needle = query.trim().toLowerCase();
87
+ if (!needle) {
88
+ return nodes;
89
+ }
90
+ const result = [];
91
+ for (const node of nodes) {
92
+ const rawChildren = node['children'];
93
+ const nested = Array.isArray(rawChildren) ? rawChildren : undefined;
94
+ const children = nested ? filterTreeNodes(nested, textField, needle) : undefined;
95
+ const selfMatch = String(node[textField] ?? '')
96
+ .toLowerCase()
97
+ .includes(needle);
98
+ if (selfMatch) {
99
+ result.push({
100
+ ...node,
101
+ ...(nested && nested.length > 0 ? { children: cloneTreeNodes(nested), expanded: true } : {}),
102
+ });
103
+ }
104
+ else if (children && children.length > 0) {
105
+ result.push({
106
+ ...node,
107
+ children,
108
+ expanded: true,
109
+ });
110
+ }
111
+ }
112
+ return result;
113
+ }
114
+ function cloneTreeNodes(nodes) {
115
+ return nodes.map((node) => {
116
+ const raw = node['children'];
117
+ const children = Array.isArray(raw) && raw.length > 0 ? cloneTreeNodes(raw) : undefined;
118
+ return children ? { ...node, children } : { ...node };
119
+ });
120
+ }
121
+ /** Immutable copy of a nested tree so tree-view mutations cannot poison the source. */
122
+ function cloneLookupTreeNodes(nodes) {
123
+ return cloneTreeNodes(nodes);
124
+ }
125
+ /** Depth-first flattening of nested `children` arrays. */
126
+ function flattenTreeNodes(nodes) {
127
+ const result = [];
128
+ for (const node of nodes) {
129
+ result.push(node);
130
+ const children = node['children'];
131
+ if (Array.isArray(children)) {
132
+ result.push(...flattenTreeNodes(children));
133
+ }
134
+ }
135
+ return result;
136
+ }
137
+ function findTreeTableItem(source, valueField, key) {
138
+ if (typeof source === 'function' || !Array.isArray(source)) {
139
+ return undefined;
140
+ }
141
+ return findTreeNode(source, valueField, key) ?? undefined;
142
+ }
143
+ function findTreeNode(nodes, valueField, key) {
144
+ for (const node of nodes) {
145
+ if (String(node[valueField]) === String(key)) {
146
+ return node;
147
+ }
148
+ const children = node['children'];
149
+ if (Array.isArray(children)) {
150
+ const found = findTreeNode(children, valueField, key);
151
+ if (found) {
152
+ return found;
153
+ }
154
+ }
155
+ }
156
+ return null;
157
+ }
19
158
 
20
159
  /**
21
160
  * Shared `AXDataSource` + CDK virtual scroll plumbing for the list-based lookup views
22
161
  * (`ax-lookup-drop-down-list`, `ax-lookup-multi-select`).
23
162
  */
24
163
  class AXLookupListViewBase {
164
+ /** Whether the filtered datasource currently has no items. */
165
+ hasNoMatches() {
166
+ return this.isEmpty();
167
+ }
168
+ /** Number of items in the current filtered result set. */
169
+ matchCount() {
170
+ return this.totalCount();
171
+ }
25
172
  #ngZone;
26
173
  constructor() {
27
174
  /**
@@ -61,6 +208,7 @@ class AXLookupListViewBase {
61
208
  ...(ngDevMode ? [{ debugName: "maxVisibleItems" }] : /* istanbul ignore next */ []));
62
209
  /**
63
210
  * Custom template rendered for each item. Context: `$implicit` is the item.
211
+ * Default option chrome is not applied on top of the template.
64
212
  */
65
213
  this.itemTemplate = input(undefined, /* @ts-ignore */
66
214
  ...(ngDevMode ? [{ debugName: "itemTemplate" }] : /* istanbul ignore next */ []));
@@ -166,6 +314,15 @@ class AXLookupListViewBase {
166
314
  }
167
315
  this.itemClick.emit({ item, value: this.getValue(item) });
168
316
  }
317
+ /**
318
+ * Commit on mousedown (not click) so a searchable trigger blur cannot destroy the
319
+ * list before the pick is applied.
320
+ */
321
+ handleItemMouseDown(event, item) {
322
+ event.preventDefault();
323
+ event.stopPropagation();
324
+ this.handleItemClick(item);
325
+ }
169
326
  handleItemKeypress(e, item) {
170
327
  if (e.nativeEvent.key === 'Enter' || e.nativeEvent.code === 'Space') {
171
328
  e.nativeEvent.stopPropagation();
@@ -264,7 +421,7 @@ class AXLookupDropDownListComponent extends AXLookupListViewBase {
264
421
  [class.ax-state-active]="navItem.isActive()"
265
422
  [attr.aria-selected]="item != null ? isSelected(item) : null"
266
423
  (mouseenter)="activateNavItem(nav, navItem)"
267
- (click)="handleItemClick(item)"
424
+ (mousedown)="handleItemMouseDown($event, item)"
268
425
  (onKeypress)="handleItemKeypress($event, item)"
269
426
  >
270
427
  @if (item != null) {
@@ -273,7 +430,7 @@ class AXLookupDropDownListComponent extends AXLookupListViewBase {
273
430
  } @else {
274
431
  <span class="ax-lookup-option-text">{{ getText(item) }}</span>
275
432
  @if (isSelected(item)) {
276
- <ax-icon class="ax-lookup-option-check ax-icon ax-icon-check" aria-hidden="true"></ax-icon>
433
+ <span class="ax-lookup-option-check ax-icon ax-icon-check" aria-hidden="true"></span>
277
434
  }
278
435
  }
279
436
  } @else {
@@ -290,7 +447,7 @@ class AXLookupDropDownListComponent extends AXLookupListViewBase {
290
447
  <span class="ax-lookup-option-loading">{{ '@acorex:common.status.loading' | translate | async }}</span>
291
448
  }
292
449
  </ng-template>
293
- `, 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 }); }
450
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i1.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i1.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i1.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: AXListNavigationModule }, { kind: "directive", type: i2.AXListNavigationDirective, selector: "[axListNavigation]", inputs: ["orientation"], outputs: ["onNavigationChanged", "onKeypress"], exportAs: ["axListNavigation"] }, { kind: "directive", type: i2.AXListNavigationItemDirective, selector: "[axListNavigationItem]", outputs: ["onKeypress"], exportAs: ["axListNavigationItem"] }, { kind: "pipe", type: AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
294
451
  }
295
452
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupDropDownListComponent, decorators: [{
296
453
  type: Component,
@@ -298,14 +455,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
298
455
  selector: 'ax-lookup-drop-down-list',
299
456
  changeDetection: ChangeDetectionStrategy.OnPush,
300
457
  encapsulation: ViewEncapsulation.None,
301
- imports: [
302
- ScrollingModule,
303
- NgTemplateOutlet,
304
- AXTranslatorPipe,
305
- AsyncPipe,
306
- AXDecoratorModule,
307
- AXListNavigationModule,
308
- ],
458
+ imports: [ScrollingModule, NgTemplateOutlet, AXTranslatorPipe, AsyncPipe, AXListNavigationModule],
309
459
  providers: [{ provide: AXLookupListViewBase, useExisting: AXLookupDropDownListComponent }],
310
460
  template: `
311
461
  @if (isEmpty()) {
@@ -340,7 +490,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
340
490
  [class.ax-state-active]="navItem.isActive()"
341
491
  [attr.aria-selected]="item != null ? isSelected(item) : null"
342
492
  (mouseenter)="activateNavItem(nav, navItem)"
343
- (click)="handleItemClick(item)"
493
+ (mousedown)="handleItemMouseDown($event, item)"
344
494
  (onKeypress)="handleItemKeypress($event, item)"
345
495
  >
346
496
  @if (item != null) {
@@ -349,7 +499,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
349
499
  } @else {
350
500
  <span class="ax-lookup-option-text">{{ getText(item) }}</span>
351
501
  @if (isSelected(item)) {
352
- <ax-icon class="ax-lookup-option-check ax-icon ax-icon-check" aria-hidden="true"></ax-icon>
502
+ <span class="ax-lookup-option-check ax-icon ax-icon-check" aria-hidden="true"></span>
353
503
  }
354
504
  }
355
505
  } @else {
@@ -408,12 +558,38 @@ class AXLookupDropDownTreeComponent {
408
558
  */
409
559
  this.nodeTemplate = input(undefined, /* @ts-ignore */
410
560
  ...(ngDevMode ? [{ debugName: "nodeTemplate" }] : /* istanbul ignore next */ []));
561
+ /**
562
+ * Custom template rendered when the filtered tree has no nodes.
563
+ */
564
+ this.emptyTemplate = input(undefined, /* @ts-ignore */
565
+ ...(ngDevMode ? [{ debugName: "emptyTemplate" }] : /* istanbul ignore next */ []));
566
+ /**
567
+ * When `true`, visible tree nodes use alternating background colors.
568
+ */
569
+ this.alternate = input(false, /* @ts-ignore */
570
+ ...(ngDevMode ? [{ debugName: "alternate" }] : /* istanbul ignore next */ []));
571
+ /**
572
+ * Unique id that changes on every search apply so a new tree instance is created.
573
+ */
574
+ this.filterKey = input('0', /* @ts-ignore */
575
+ ...(ngDevMode ? [{ debugName: "filterKey" }] : /* istanbul ignore next */ []));
411
576
  /**
412
577
  * Emitted when the user selects a node.
413
578
  */
414
579
  this.itemClick = output();
415
580
  this.selectedIds = computed(() => this.selectedValues().map((v) => String(v)), /* @ts-ignore */
416
581
  ...(ngDevMode ? [{ debugName: "selectedIds" }] : /* istanbul ignore next */ []));
582
+ this.isEmpty = computed(() => {
583
+ const source = this.dataSource();
584
+ return Array.isArray(source) && source.length === 0;
585
+ }, /* @ts-ignore */
586
+ ...(ngDevMode ? [{ debugName: "isEmpty" }] : /* istanbul ignore next */ []));
587
+ this.treeInstances = computed(() => [{ id: this.filterKey(), source: this.dataSource() }], /* @ts-ignore */
588
+ ...(ngDevMode ? [{ debugName: "treeInstances" }] : /* istanbul ignore next */ []));
589
+ }
590
+ /** Whether the filtered tree currently has no nodes. */
591
+ hasNoMatches() {
592
+ return this.isEmpty();
417
593
  }
418
594
  handleSelectionChange(e) {
419
595
  if (e.source !== 'user') {
@@ -426,22 +602,35 @@ class AXLookupDropDownTreeComponent {
426
602
  this.itemClick.emit({ item: node, value: node[this.valueField()] });
427
603
  }
428
604
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupDropDownTreeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
429
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.8", type: AXLookupDropDownTreeComponent, isStandalone: true, selector: "ax-lookup-drop-down-tree", 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 }, nodeTemplate: { classPropertyName: "nodeTemplate", publicName: "nodeTemplate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemClick: "itemClick" }, ngImport: i0, template: `
430
- <div class="ax-lookup-tree">
431
- <ax-tree-view
432
- [datasource]="dataSource()"
433
- selectMode="single"
434
- selectionBehavior="all"
435
- [controlledSelection]="true"
436
- [selectedIds]="selectedIds()"
437
- [idField]="valueField()"
438
- [titleField]="textField()"
439
- [disabledField]="disabledField()"
440
- [nodeTemplate]="nodeTemplate()"
441
- (onSelectionChange)="handleSelectionChange($event)"
442
- />
443
- </div>
444
- `, isInline: true, dependencies: [{ kind: "component", type: AXTreeViewComponent, selector: "ax-tree-view", inputs: ["datasource", "selectMode", "selectionBehavior", "dragArea", "dragBehavior", "showIcons", "showChildrenBadge", "expandedIcon", "collapsedIcon", "indentSize", "look", "nodeTemplate", "idField", "titleField", "tooltipField", "iconField", "expandedField", "selectedField", "indeterminateField", "disabledField", "hiddenField", "childrenField", "childrenCountField", "dataField", "inheritDisabled", "expandOnDoubleClick", "doubleClickDuration", "tooltipDelay", "controlledSelection", "selectedIds"], outputs: ["datasourceChange", "selectedIdsChange", "onBeforeDrop", "onNodeToggle", "onNodeSelect", "onNodeDoubleClick", "onNodeClick", "onSelectionChange", "onOrderChange", "onMoveChange", "onItemsChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
605
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXLookupDropDownTreeComponent, isStandalone: true, selector: "ax-lookup-drop-down-tree", 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 }, nodeTemplate: { classPropertyName: "nodeTemplate", publicName: "nodeTemplate", isSignal: true, isRequired: false, transformFunction: null }, emptyTemplate: { classPropertyName: "emptyTemplate", publicName: "emptyTemplate", isSignal: true, isRequired: false, transformFunction: null }, alternate: { classPropertyName: "alternate", publicName: "alternate", isSignal: true, isRequired: false, transformFunction: null }, filterKey: { classPropertyName: "filterKey", publicName: "filterKey", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemClick: "itemClick" }, ngImport: i0, template: `
606
+ @if (isEmpty()) {
607
+ @if (emptyTemplate()) {
608
+ <ng-container [ngTemplateOutlet]="emptyTemplate()!" />
609
+ } @else {
610
+ <div class="ax-lookup-empty">
611
+ {{ '@acorex:common.general.no-result-found' | translate | async }}
612
+ </div>
613
+ }
614
+ } @else {
615
+ <div class="ax-lookup-tree">
616
+ @for (instance of treeInstances(); track instance.id) {
617
+ <ax-tree-view
618
+ [datasource]="instance.source"
619
+ selectMode="single"
620
+ selectionBehavior="all"
621
+ [controlledSelection]="true"
622
+ [selectedIds]="selectedIds()"
623
+ [idField]="valueField()"
624
+ [titleField]="textField()"
625
+ [disabledField]="disabledField()"
626
+ [nodeTemplate]="nodeTemplate()"
627
+ [alternate]="alternate()"
628
+ (onSelectionChange)="handleSelectionChange($event)"
629
+ />
630
+ }
631
+ </div>
632
+ }
633
+ `, isInline: true, dependencies: [{ kind: "component", type: AXTreeViewComponent, selector: "ax-tree-view", inputs: ["datasource", "selectMode", "selectionBehavior", "dragArea", "dragBehavior", "showIcons", "showChildrenBadge", "expandedIcon", "collapsedIcon", "indentSize", "look", "alternate", "nodeTemplate", "idField", "titleField", "tooltipField", "iconField", "expandedField", "selectedField", "indeterminateField", "disabledField", "hiddenField", "childrenField", "childrenCountField", "dataField", "inheritDisabled", "expandOnDoubleClick", "doubleClickDuration", "tooltipDelay", "controlledSelection", "selectedIds"], outputs: ["datasourceChange", "selectedIdsChange", "onBeforeDrop", "onNodeToggle", "onNodeSelect", "onNodeDoubleClick", "onNodeClick", "onSelectionChange", "onOrderChange", "onMoveChange", "onItemsChange"] }, { 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 }); }
445
634
  }
446
635
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupDropDownTreeComponent, decorators: [{
447
636
  type: Component,
@@ -449,25 +638,312 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
449
638
  selector: 'ax-lookup-drop-down-tree',
450
639
  changeDetection: ChangeDetectionStrategy.OnPush,
451
640
  encapsulation: ViewEncapsulation.None,
452
- imports: [AXTreeViewComponent],
641
+ imports: [AXTreeViewComponent, NgTemplateOutlet, AXTranslatorPipe, AsyncPipe],
453
642
  template: `
454
- <div class="ax-lookup-tree">
455
- <ax-tree-view
456
- [datasource]="dataSource()"
457
- selectMode="single"
458
- selectionBehavior="all"
459
- [controlledSelection]="true"
460
- [selectedIds]="selectedIds()"
461
- [idField]="valueField()"
462
- [titleField]="textField()"
463
- [disabledField]="disabledField()"
464
- [nodeTemplate]="nodeTemplate()"
465
- (onSelectionChange)="handleSelectionChange($event)"
466
- />
467
- </div>
643
+ @if (isEmpty()) {
644
+ @if (emptyTemplate()) {
645
+ <ng-container [ngTemplateOutlet]="emptyTemplate()!" />
646
+ } @else {
647
+ <div class="ax-lookup-empty">
648
+ {{ '@acorex:common.general.no-result-found' | translate | async }}
649
+ </div>
650
+ }
651
+ } @else {
652
+ <div class="ax-lookup-tree">
653
+ @for (instance of treeInstances(); track instance.id) {
654
+ <ax-tree-view
655
+ [datasource]="instance.source"
656
+ selectMode="single"
657
+ selectionBehavior="all"
658
+ [controlledSelection]="true"
659
+ [selectedIds]="selectedIds()"
660
+ [idField]="valueField()"
661
+ [titleField]="textField()"
662
+ [disabledField]="disabledField()"
663
+ [nodeTemplate]="nodeTemplate()"
664
+ [alternate]="alternate()"
665
+ (onSelectionChange)="handleSelectionChange($event)"
666
+ />
667
+ }
668
+ </div>
669
+ }
670
+ `,
671
+ }]
672
+ }], 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 }] }], nodeTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "nodeTemplate", required: false }] }], emptyTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "emptyTemplate", required: false }] }], alternate: [{ type: i0.Input, args: [{ isSignal: true, alias: "alternate", required: false }] }], filterKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterKey", required: false }] }], itemClick: [{ type: i0.Output, args: ["itemClick"] }] } });
673
+
674
+ /**
675
+ * Internal mini component for the `multi-column-tree` lookup mode:
676
+ * a multi-column `ax-data-table` with a drop-down tree inside it.
677
+ * Rows expand/collapse via the data-table hierarchy (`parentField` / nested `children`).
678
+ *
679
+ * @category Components
680
+ */
681
+ class AXLookupMultiColumnTreeComponent {
682
+ constructor() {
683
+ /**
684
+ * The datasource providing hierarchical rows (roots on load, children via `parentField`).
685
+ */
686
+ this.dataSource = input.required(/* @ts-ignore */
687
+ ...(ngDevMode ? [{ debugName: "dataSource" }] : /* istanbul ignore next */ []));
688
+ /**
689
+ * The item property used as the selection value (also the data-table row key).
690
+ */
691
+ this.valueField = input('id', /* @ts-ignore */
692
+ ...(ngDevMode ? [{ debugName: "valueField" }] : /* istanbul ignore next */ []));
693
+ /**
694
+ * The item property used as the display text. The matching column shows the expand control
695
+ * unless another column sets `expandHandler`.
696
+ */
697
+ this.textField = input('text', /* @ts-ignore */
698
+ ...(ngDevMode ? [{ debugName: "textField" }] : /* istanbul ignore next */ []));
699
+ /**
700
+ * The item property marking an item as disabled.
701
+ */
702
+ this.disabledField = input('disabled', /* @ts-ignore */
703
+ ...(ngDevMode ? [{ debugName: "disabledField" }] : /* istanbul ignore next */ []));
704
+ /**
705
+ * Field used by the data table to fetch children (`AXDataSource` filter on expand).
706
+ */
707
+ this.parentField = input('parentId', /* @ts-ignore */
708
+ ...(ngDevMode ? [{ debugName: "parentField" }] : /* istanbul ignore next */ []));
709
+ /**
710
+ * Field used by the data table to decide whether a row can expand.
711
+ */
712
+ this.hasChildrenField = input('hasChild', /* @ts-ignore */
713
+ ...(ngDevMode ? [{ debugName: "hasChildrenField" }] : /* istanbul ignore next */ []));
714
+ /**
715
+ * Currently selected values (always an array, even for single selection).
716
+ */
717
+ this.selectedValues = input([], /* @ts-ignore */
718
+ ...(ngDevMode ? [{ debugName: "selectedValues" }] : /* istanbul ignore next */ []));
719
+ /**
720
+ * The fixed row height in pixels passed to the data table.
721
+ */
722
+ this.itemHeight = input(40, /* @ts-ignore */
723
+ ...(ngDevMode ? [{ debugName: "itemHeight" }] : /* istanbul ignore next */ []));
724
+ /**
725
+ * The maximum number of body rows visible before the table scrolls.
726
+ */
727
+ this.maxVisibleItems = input(8, /* @ts-ignore */
728
+ ...(ngDevMode ? [{ debugName: "maxVisibleItems" }] : /* istanbul ignore next */ []));
729
+ /**
730
+ * Column definitions rendered as `ax-text-column` instances.
731
+ */
732
+ this.columns = input([], /* @ts-ignore */
733
+ ...(ngDevMode ? [{ debugName: "columns" }] : /* istanbul ignore next */ []));
734
+ /**
735
+ * Optional custom row content. Context: `$implicit` is the row item.
736
+ * When set, replaces the default multi-column cell layout.
737
+ */
738
+ this.itemTemplate = input(undefined, /* @ts-ignore */
739
+ ...(ngDevMode ? [{ debugName: "itemTemplate" }] : /* istanbul ignore next */ []));
740
+ /**
741
+ * Custom template rendered when the datasource has no items.
742
+ */
743
+ this.emptyTemplate = input(undefined, /* @ts-ignore */
744
+ ...(ngDevMode ? [{ debugName: "emptyTemplate" }] : /* istanbul ignore next */ []));
745
+ /**
746
+ * Custom template rendered while the table is loading.
747
+ */
748
+ this.loadingTemplate = input(undefined, /* @ts-ignore */
749
+ ...(ngDevMode ? [{ debugName: "loadingTemplate" }] : /* istanbul ignore next */ []));
750
+ /**
751
+ * When `true`, table rows use alternating background colors for easier scanning.
752
+ */
753
+ this.alternate = input(false, /* @ts-ignore */
754
+ ...(ngDevMode ? [{ debugName: "alternate" }] : /* istanbul ignore next */ []));
755
+ /**
756
+ * Emitted when the user picks a row (not when expanding/collapsing).
757
+ */
758
+ this.itemClick = output();
759
+ /**
760
+ * Header (~40px) + up to `maxVisibleItems` body rows. Expanded children scroll inside.
761
+ */
762
+ this.tableHeight = computed(() => 40 + this.maxVisibleItems() * this.itemHeight(), /* @ts-ignore */
763
+ ...(ngDevMode ? [{ debugName: "tableHeight" }] : /* istanbul ignore next */ []));
764
+ this.loadingConfig = computed(() => ({
765
+ enabled: true,
766
+ animation: true,
767
+ loadingTemplate: this.loadingTemplate(),
768
+ }), /* @ts-ignore */
769
+ ...(ngDevMode ? [{ debugName: "loadingConfig" }] : /* istanbul ignore next */ []));
770
+ this.resolveRowCssClass = (row) => {
771
+ const item = row;
772
+ if (!item) {
773
+ return '';
774
+ }
775
+ const classes = [];
776
+ if (this.isSelected(item)) {
777
+ classes.push('ax-state-selected');
778
+ }
779
+ if (this.isDisabled(item)) {
780
+ classes.push('ax-state-disabled');
781
+ }
782
+ return classes.join(' ');
783
+ };
784
+ }
785
+ /** Stable unique key for `@for` — avoids NG0955 when `field` is missing or duplicated. */
786
+ trackColumnKey(index, column) {
787
+ return `${column?.field ?? ''}::${index}`;
788
+ }
789
+ resolveColumnWidth(column) {
790
+ const width = column.width?.trim();
791
+ if (!width || width.includes('fr')) {
792
+ return 'auto';
793
+ }
794
+ return width;
795
+ }
796
+ isExpandColumn(index, column) {
797
+ if (column.expandHandler === true) {
798
+ return true;
799
+ }
800
+ if (this.columns().some((item) => item.expandHandler === true)) {
801
+ return false;
802
+ }
803
+ const textIndex = this.columns().findIndex((item) => item.field === this.textField());
804
+ return (textIndex === -1 ? 0 : textIndex) === index;
805
+ }
806
+ handleRowClick(event) {
807
+ this.handleItemClick(event.data);
808
+ }
809
+ handleItemClick(item) {
810
+ if (!item || this.isDisabled(item)) {
811
+ return;
812
+ }
813
+ this.itemClick.emit({ item, value: this.getValue(item) });
814
+ }
815
+ handleItemMouseDown(event, item) {
816
+ event.preventDefault();
817
+ event.stopPropagation();
818
+ this.handleItemClick(item);
819
+ }
820
+ isSelected(item) {
821
+ const value = this.getValue(item);
822
+ return this.selectedValues().some((v) => v == value);
823
+ }
824
+ isDisabled(item) {
825
+ return Boolean(item?.[this.disabledField()]);
826
+ }
827
+ getValue(item) {
828
+ return item?.[this.valueField()];
829
+ }
830
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupMultiColumnTreeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
831
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXLookupMultiColumnTreeComponent, isStandalone: true, selector: "ax-lookup-multi-column-tree", 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 }, parentField: { classPropertyName: "parentField", publicName: "parentField", isSignal: true, isRequired: false, transformFunction: null }, hasChildrenField: { classPropertyName: "hasChildrenField", publicName: "hasChildrenField", 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 ax-lookup-multi-column-tree" }, ngImport: i0, template: `
832
+ <ax-data-table
833
+ class="ax-lookup-multi-column-table"
834
+ look="minimal"
835
+ [dataSource]="dataSource()"
836
+ [parentField]="parentField()"
837
+ [hasChildrenField]="hasChildrenField()"
838
+ [itemHeight]="itemHeight()"
839
+ [alternative]="alternate()"
840
+ [emptyTemplate]="emptyTemplate()"
841
+ [loading]="loadingConfig()"
842
+ [paging]="false"
843
+ [showHeader]="true"
844
+ [fixedHeader]="true"
845
+ [showFooter]="false"
846
+ [allowReordering]="false"
847
+ [rowTemplate]="itemTemplate() ? customRowTemplate : undefined"
848
+ [rowCssClass]="resolveRowCssClass"
849
+ (onRowClick)="handleRowClick($event)"
850
+ >
851
+ @for (column of columns(); track trackColumnKey($index, column)) {
852
+ <ax-text-column
853
+ [dataField]="column.field"
854
+ [caption]="column.title"
855
+ [width]="resolveColumnWidth(column)"
856
+ [expandHandler]="isExpandColumn($index, column)"
857
+ [allowSorting]="false"
858
+ [allowResizing]="false"
859
+ />
860
+ }
861
+ </ax-data-table>
862
+
863
+ <ng-template #customRowTemplate let-ctx>
864
+ <tr
865
+ [class.ax-state-selected]="ctx.data != null && isSelected(ctx.data)"
866
+ [class.ax-state-disabled]="ctx.data != null && isDisabled(ctx.data)"
867
+ [style.height.px]="itemHeight()"
868
+ [style.max-height.px]="itemHeight()"
869
+ (mousedown)="handleItemMouseDown($event, ctx.data)"
870
+ >
871
+ <td [attr.colspan]="columns().length || 1">
872
+ @if (ctx.data != null && itemTemplate()) {
873
+ <ng-container
874
+ [ngTemplateOutlet]="itemTemplate()!"
875
+ [ngTemplateOutletContext]="{ $implicit: ctx.data }"
876
+ />
877
+ }
878
+ </td>
879
+ </tr>
880
+ </ng-template>
881
+ `, 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 }); }
882
+ }
883
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupMultiColumnTreeComponent, decorators: [{
884
+ type: Component,
885
+ args: [{
886
+ selector: 'ax-lookup-multi-column-tree',
887
+ changeDetection: ChangeDetectionStrategy.OnPush,
888
+ encapsulation: ViewEncapsulation.None,
889
+ imports: [NgTemplateOutlet, AXDataTableComponent, AXDataTableTextColumnComponent],
890
+ host: {
891
+ class: 'ax-lookup-multi-column ax-lookup-multi-column-tree',
892
+ '[style.height.px]': 'tableHeight()',
893
+ },
894
+ template: `
895
+ <ax-data-table
896
+ class="ax-lookup-multi-column-table"
897
+ look="minimal"
898
+ [dataSource]="dataSource()"
899
+ [parentField]="parentField()"
900
+ [hasChildrenField]="hasChildrenField()"
901
+ [itemHeight]="itemHeight()"
902
+ [alternative]="alternate()"
903
+ [emptyTemplate]="emptyTemplate()"
904
+ [loading]="loadingConfig()"
905
+ [paging]="false"
906
+ [showHeader]="true"
907
+ [fixedHeader]="true"
908
+ [showFooter]="false"
909
+ [allowReordering]="false"
910
+ [rowTemplate]="itemTemplate() ? customRowTemplate : undefined"
911
+ [rowCssClass]="resolveRowCssClass"
912
+ (onRowClick)="handleRowClick($event)"
913
+ >
914
+ @for (column of columns(); track trackColumnKey($index, column)) {
915
+ <ax-text-column
916
+ [dataField]="column.field"
917
+ [caption]="column.title"
918
+ [width]="resolveColumnWidth(column)"
919
+ [expandHandler]="isExpandColumn($index, column)"
920
+ [allowSorting]="false"
921
+ [allowResizing]="false"
922
+ />
923
+ }
924
+ </ax-data-table>
925
+
926
+ <ng-template #customRowTemplate let-ctx>
927
+ <tr
928
+ [class.ax-state-selected]="ctx.data != null && isSelected(ctx.data)"
929
+ [class.ax-state-disabled]="ctx.data != null && isDisabled(ctx.data)"
930
+ [style.height.px]="itemHeight()"
931
+ [style.max-height.px]="itemHeight()"
932
+ (mousedown)="handleItemMouseDown($event, ctx.data)"
933
+ >
934
+ <td [attr.colspan]="columns().length || 1">
935
+ @if (ctx.data != null && itemTemplate()) {
936
+ <ng-container
937
+ [ngTemplateOutlet]="itemTemplate()!"
938
+ [ngTemplateOutletContext]="{ $implicit: ctx.data }"
939
+ />
940
+ }
941
+ </td>
942
+ </tr>
943
+ </ng-template>
468
944
  `,
469
945
  }]
470
- }], 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 }] }], nodeTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "nodeTemplate", required: false }] }], itemClick: [{ type: i0.Output, args: ["itemClick"] }] } });
946
+ }], 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 }] }], parentField: [{ type: i0.Input, args: [{ isSignal: true, alias: "parentField", required: false }] }], hasChildrenField: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasChildrenField", 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"] }] } });
471
947
 
472
948
  /**
473
949
  * Internal mini component for the `multi-column` lookup mode:
@@ -606,19 +1082,18 @@ class AXLookupMultiColumnComponent {
606
1082
  const source = this.dataSource();
607
1083
  this.tableDataSource.config.key = source.config.key || this.valueField();
608
1084
  untracked(() => {
609
- this.#loadedItems = [];
610
- this.#totalCount.set(0);
611
- this.#syncTablePageSize();
612
- this.tableDataSource.refresh({ reset: true });
1085
+ this.#applyLoadedItems(source.cachedItems, source.totalCount);
613
1086
  });
614
1087
  const changedSub = source.onChanged.subscribe((event) => {
615
- this.#loadedItems = event.cachedItems.filter((item) => item != null);
616
- this.#totalCount.set(event.totalCount);
617
- this.#syncTablePageSize();
618
- this.tableDataSource.refresh({ reset: true });
1088
+ this.#applyLoadedItems(event.cachedItems, event.totalCount);
1089
+ });
1090
+ // Fetch page 0 only when the source has never loaded. Reopen remounts this
1091
+ // view; setPage(0) is a no-op on a warm source and must not force a new API call.
1092
+ queueMicrotask(() => {
1093
+ if (!source.cachedItems.some((item) => item != null)) {
1094
+ source.setPage(0);
1095
+ }
619
1096
  });
620
- // Kick the first page; later pages come from scroll.
621
- queueMicrotask(() => source.setPage(0));
622
1097
  onCleanup(() => changedSub.unsubscribe());
623
1098
  });
624
1099
  effect((onCleanup) => {
@@ -653,6 +1128,12 @@ class AXLookupMultiColumnComponent {
653
1128
  }
654
1129
  return width;
655
1130
  }
1131
+ #applyLoadedItems(cachedItems, totalCount) {
1132
+ this.#loadedItems = cachedItems.filter((item) => item != null);
1133
+ this.#totalCount.set(totalCount);
1134
+ this.#syncTablePageSize();
1135
+ this.tableDataSource.refresh({ reset: true });
1136
+ }
656
1137
  #syncTablePageSize() {
657
1138
  this.tableDataSource.config.pageSize = Math.max(this.#loadedItems.length, 1);
658
1139
  }
@@ -665,6 +1146,11 @@ class AXLookupMultiColumnComponent {
665
1146
  }
666
1147
  this.itemClick.emit({ item, value: this.getValue(item) });
667
1148
  }
1149
+ handleItemMouseDown(event, item) {
1150
+ event.preventDefault();
1151
+ event.stopPropagation();
1152
+ this.handleItemClick(item);
1153
+ }
668
1154
  isSelected(item) {
669
1155
  const value = this.getValue(item);
670
1156
  return this.selectedValues().some((v) => v == value);
@@ -727,7 +1213,7 @@ class AXLookupMultiColumnComponent {
727
1213
  [class.ax-state-disabled]="ctx.data != null && isDisabled(ctx.data)"
728
1214
  [style.height.px]="itemHeight()"
729
1215
  [style.max-height.px]="itemHeight()"
730
- (click)="handleItemClick(ctx.data)"
1216
+ (mousedown)="handleItemMouseDown($event, ctx.data)"
731
1217
  >
732
1218
  <td [attr.colspan]="columns().length || 1">
733
1219
  @if (ctx.data != null && itemTemplate()) {
@@ -787,7 +1273,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
787
1273
  [class.ax-state-disabled]="ctx.data != null && isDisabled(ctx.data)"
788
1274
  [style.height.px]="itemHeight()"
789
1275
  [style.max-height.px]="itemHeight()"
790
- (click)="handleItemClick(ctx.data)"
1276
+ (mousedown)="handleItemMouseDown($event, ctx.data)"
791
1277
  >
792
1278
  <td [attr.colspan]="columns().length || 1">
793
1279
  @if (ctx.data != null && itemTemplate()) {
@@ -846,12 +1332,38 @@ class AXLookupMultiSelectTreeComponent {
846
1332
  */
847
1333
  this.nodeTemplate = input(undefined, /* @ts-ignore */
848
1334
  ...(ngDevMode ? [{ debugName: "nodeTemplate" }] : /* istanbul ignore next */ []));
1335
+ /**
1336
+ * Custom template rendered when the filtered tree has no nodes.
1337
+ */
1338
+ this.emptyTemplate = input(undefined, /* @ts-ignore */
1339
+ ...(ngDevMode ? [{ debugName: "emptyTemplate" }] : /* istanbul ignore next */ []));
1340
+ /**
1341
+ * When `true`, visible tree nodes use alternating background colors.
1342
+ */
1343
+ this.alternate = input(false, /* @ts-ignore */
1344
+ ...(ngDevMode ? [{ debugName: "alternate" }] : /* istanbul ignore next */ []));
1345
+ /**
1346
+ * Unique id that changes on every search apply so a new tree instance is created.
1347
+ */
1348
+ this.filterKey = input('0', /* @ts-ignore */
1349
+ ...(ngDevMode ? [{ debugName: "filterKey" }] : /* istanbul ignore next */ []));
849
1350
  /**
850
1351
  * Emitted when the user changes the tree selection.
851
1352
  */
852
1353
  this.selectionChange = output();
853
1354
  this.selectedIds = computed(() => this.selectedValues().map((v) => String(v)), /* @ts-ignore */
854
1355
  ...(ngDevMode ? [{ debugName: "selectedIds" }] : /* istanbul ignore next */ []));
1356
+ this.isEmpty = computed(() => {
1357
+ const source = this.dataSource();
1358
+ return Array.isArray(source) && source.length === 0;
1359
+ }, /* @ts-ignore */
1360
+ ...(ngDevMode ? [{ debugName: "isEmpty" }] : /* istanbul ignore next */ []));
1361
+ this.treeInstances = computed(() => [{ id: this.filterKey(), source: this.dataSource() }], /* @ts-ignore */
1362
+ ...(ngDevMode ? [{ debugName: "treeInstances" }] : /* istanbul ignore next */ []));
1363
+ }
1364
+ /** Whether the filtered tree currently has no nodes. */
1365
+ hasNoMatches() {
1366
+ return this.isEmpty();
855
1367
  }
856
1368
  handleSelectionChange(e) {
857
1369
  if (e.source !== 'user') {
@@ -860,22 +1372,35 @@ class AXLookupMultiSelectTreeComponent {
860
1372
  this.selectionChange.emit({ ids: e.selectedIds, nodes: e.selectedNodes });
861
1373
  }
862
1374
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupMultiSelectTreeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
863
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.8", type: AXLookupMultiSelectTreeComponent, isStandalone: true, selector: "ax-lookup-multi-select-tree", 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 }, selectionBehavior: { classPropertyName: "selectionBehavior", publicName: "selectionBehavior", isSignal: true, isRequired: false, transformFunction: null }, nodeTemplate: { classPropertyName: "nodeTemplate", publicName: "nodeTemplate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectionChange: "selectionChange" }, ngImport: i0, template: `
864
- <div class="ax-lookup-tree">
865
- <ax-tree-view
866
- [datasource]="dataSource()"
867
- selectMode="multiple"
868
- [selectionBehavior]="selectionBehavior()"
869
- [controlledSelection]="true"
870
- [selectedIds]="selectedIds()"
871
- [idField]="valueField()"
872
- [titleField]="textField()"
873
- [disabledField]="disabledField()"
874
- [nodeTemplate]="nodeTemplate()"
875
- (onSelectionChange)="handleSelectionChange($event)"
876
- />
877
- </div>
878
- `, isInline: true, dependencies: [{ kind: "component", type: AXTreeViewComponent, selector: "ax-tree-view", inputs: ["datasource", "selectMode", "selectionBehavior", "dragArea", "dragBehavior", "showIcons", "showChildrenBadge", "expandedIcon", "collapsedIcon", "indentSize", "look", "nodeTemplate", "idField", "titleField", "tooltipField", "iconField", "expandedField", "selectedField", "indeterminateField", "disabledField", "hiddenField", "childrenField", "childrenCountField", "dataField", "inheritDisabled", "expandOnDoubleClick", "doubleClickDuration", "tooltipDelay", "controlledSelection", "selectedIds"], outputs: ["datasourceChange", "selectedIdsChange", "onBeforeDrop", "onNodeToggle", "onNodeSelect", "onNodeDoubleClick", "onNodeClick", "onSelectionChange", "onOrderChange", "onMoveChange", "onItemsChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
1375
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXLookupMultiSelectTreeComponent, isStandalone: true, selector: "ax-lookup-multi-select-tree", 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 }, selectionBehavior: { classPropertyName: "selectionBehavior", publicName: "selectionBehavior", isSignal: true, isRequired: false, transformFunction: null }, nodeTemplate: { classPropertyName: "nodeTemplate", publicName: "nodeTemplate", isSignal: true, isRequired: false, transformFunction: null }, emptyTemplate: { classPropertyName: "emptyTemplate", publicName: "emptyTemplate", isSignal: true, isRequired: false, transformFunction: null }, alternate: { classPropertyName: "alternate", publicName: "alternate", isSignal: true, isRequired: false, transformFunction: null }, filterKey: { classPropertyName: "filterKey", publicName: "filterKey", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectionChange: "selectionChange" }, ngImport: i0, template: `
1376
+ @if (isEmpty()) {
1377
+ @if (emptyTemplate()) {
1378
+ <ng-container [ngTemplateOutlet]="emptyTemplate()!" />
1379
+ } @else {
1380
+ <div class="ax-lookup-empty">
1381
+ {{ '@acorex:common.general.no-result-found' | translate | async }}
1382
+ </div>
1383
+ }
1384
+ } @else {
1385
+ <div class="ax-lookup-tree">
1386
+ @for (instance of treeInstances(); track instance.id) {
1387
+ <ax-tree-view
1388
+ [datasource]="instance.source"
1389
+ selectMode="multiple"
1390
+ [selectionBehavior]="selectionBehavior()"
1391
+ [controlledSelection]="true"
1392
+ [selectedIds]="selectedIds()"
1393
+ [idField]="valueField()"
1394
+ [titleField]="textField()"
1395
+ [disabledField]="disabledField()"
1396
+ [nodeTemplate]="nodeTemplate()"
1397
+ [alternate]="alternate()"
1398
+ (onSelectionChange)="handleSelectionChange($event)"
1399
+ />
1400
+ }
1401
+ </div>
1402
+ }
1403
+ `, isInline: true, dependencies: [{ kind: "component", type: AXTreeViewComponent, selector: "ax-tree-view", inputs: ["datasource", "selectMode", "selectionBehavior", "dragArea", "dragBehavior", "showIcons", "showChildrenBadge", "expandedIcon", "collapsedIcon", "indentSize", "look", "alternate", "nodeTemplate", "idField", "titleField", "tooltipField", "iconField", "expandedField", "selectedField", "indeterminateField", "disabledField", "hiddenField", "childrenField", "childrenCountField", "dataField", "inheritDisabled", "expandOnDoubleClick", "doubleClickDuration", "tooltipDelay", "controlledSelection", "selectedIds"], outputs: ["datasourceChange", "selectedIdsChange", "onBeforeDrop", "onNodeToggle", "onNodeSelect", "onNodeDoubleClick", "onNodeClick", "onSelectionChange", "onOrderChange", "onMoveChange", "onItemsChange"] }, { 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 }); }
879
1404
  }
880
1405
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupMultiSelectTreeComponent, decorators: [{
881
1406
  type: Component,
@@ -883,25 +1408,38 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
883
1408
  selector: 'ax-lookup-multi-select-tree',
884
1409
  changeDetection: ChangeDetectionStrategy.OnPush,
885
1410
  encapsulation: ViewEncapsulation.None,
886
- imports: [AXTreeViewComponent],
1411
+ imports: [AXTreeViewComponent, NgTemplateOutlet, AXTranslatorPipe, AsyncPipe],
887
1412
  template: `
888
- <div class="ax-lookup-tree">
889
- <ax-tree-view
890
- [datasource]="dataSource()"
891
- selectMode="multiple"
892
- [selectionBehavior]="selectionBehavior()"
893
- [controlledSelection]="true"
894
- [selectedIds]="selectedIds()"
895
- [idField]="valueField()"
896
- [titleField]="textField()"
897
- [disabledField]="disabledField()"
898
- [nodeTemplate]="nodeTemplate()"
899
- (onSelectionChange)="handleSelectionChange($event)"
900
- />
901
- </div>
1413
+ @if (isEmpty()) {
1414
+ @if (emptyTemplate()) {
1415
+ <ng-container [ngTemplateOutlet]="emptyTemplate()!" />
1416
+ } @else {
1417
+ <div class="ax-lookup-empty">
1418
+ {{ '@acorex:common.general.no-result-found' | translate | async }}
1419
+ </div>
1420
+ }
1421
+ } @else {
1422
+ <div class="ax-lookup-tree">
1423
+ @for (instance of treeInstances(); track instance.id) {
1424
+ <ax-tree-view
1425
+ [datasource]="instance.source"
1426
+ selectMode="multiple"
1427
+ [selectionBehavior]="selectionBehavior()"
1428
+ [controlledSelection]="true"
1429
+ [selectedIds]="selectedIds()"
1430
+ [idField]="valueField()"
1431
+ [titleField]="textField()"
1432
+ [disabledField]="disabledField()"
1433
+ [nodeTemplate]="nodeTemplate()"
1434
+ [alternate]="alternate()"
1435
+ (onSelectionChange)="handleSelectionChange($event)"
1436
+ />
1437
+ }
1438
+ </div>
1439
+ }
902
1440
  `,
903
1441
  }]
904
- }], 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 }] }], selectionBehavior: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectionBehavior", required: false }] }], nodeTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "nodeTemplate", required: false }] }], selectionChange: [{ type: i0.Output, args: ["selectionChange"] }] } });
1442
+ }], 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 }] }], selectionBehavior: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectionBehavior", required: false }] }], nodeTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "nodeTemplate", required: false }] }], emptyTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "emptyTemplate", required: false }] }], alternate: [{ type: i0.Input, args: [{ isSignal: true, alias: "alternate", required: false }] }], filterKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterKey", required: false }] }], selectionChange: [{ type: i0.Output, args: ["selectionChange"] }] } });
905
1443
 
906
1444
  /**
907
1445
  * Internal mini component for the `multi-select` lookup mode:
@@ -934,29 +1472,27 @@ class AXLookupMultiSelectComponent extends AXLookupListViewBase {
934
1472
  <div
935
1473
  *cdkVirtualFor="let item of listDataSource(); let i = index; trackBy: trackByIndex"
936
1474
  role="option"
937
- class="ax-lookup-option-host"
1475
+ class="ax-lookup-option-host ax-lookup-option-multiple"
938
1476
  axListNavigationItem
939
1477
  #navItem="axListNavigationItem"
940
1478
  [style.height.px]="itemHeight()"
941
1479
  [class.ax-lookup-option]="!itemTemplate()"
942
- [class.ax-lookup-option-host--check]="!!itemTemplate()"
943
1480
  [class.ax-state-alternate]="alternate() && i % 2 === 1"
944
1481
  [class.ax-state-selected]="item != null && isSelected(item)"
945
1482
  [class.ax-state-disabled]="item != null && isDisabled(item)"
946
1483
  [class.ax-state-active]="navItem.isActive()"
947
1484
  [attr.aria-selected]="item != null ? isSelected(item) : null"
948
1485
  (mouseenter)="activateNavItem(nav, navItem)"
949
- (click)="handleItemClick(item)"
1486
+ (mousedown)="handleItemMouseDown($event, item)"
950
1487
  (onKeypress)="handleItemKeypress($event, item)"
951
1488
  >
952
1489
  @if (item != null) {
953
- <input
954
- type="checkbox"
1490
+ <ax-check-box
955
1491
  class="ax-lookup-checkbox"
956
- tabindex="-1"
957
- [checked]="isSelected(item)"
1492
+ [tabIndex]="-1"
1493
+ [value]="isSelected(item)"
958
1494
  [disabled]="isDisabled(item)"
959
- />
1495
+ ></ax-check-box>
960
1496
  @if (itemTemplate()) {
961
1497
  <ng-container [ngTemplateOutlet]="itemTemplate()!" [ngTemplateOutletContext]="{ $implicit: item }" />
962
1498
  } @else {
@@ -976,7 +1512,7 @@ class AXLookupMultiSelectComponent extends AXLookupListViewBase {
976
1512
  <span class="ax-lookup-option-loading">{{ '@acorex:common.status.loading' | translate | async }}</span>
977
1513
  }
978
1514
  </ng-template>
979
- `, 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 }); }
1515
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i1.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i1.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i1.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: AXListNavigationModule }, { kind: "directive", type: i2.AXListNavigationDirective, selector: "[axListNavigation]", inputs: ["orientation"], outputs: ["onNavigationChanged", "onKeypress"], exportAs: ["axListNavigation"] }, { kind: "directive", type: i2.AXListNavigationItemDirective, selector: "[axListNavigationItem]", outputs: ["onKeypress"], exportAs: ["axListNavigationItem"] }, { kind: "component", type: AXCheckBoxComponent, selector: "ax-check-box", inputs: ["disabled", "tabIndex", "readonly", "color", "value", "name", "id", "isLoading", "indeterminate"], outputs: ["onBlur", "onFocus", "valueChange", "onValueChanged"] }, { kind: "pipe", type: AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
980
1516
  }
981
1517
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupMultiSelectComponent, decorators: [{
982
1518
  type: Component,
@@ -984,7 +1520,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
984
1520
  selector: 'ax-lookup-multi-select',
985
1521
  changeDetection: ChangeDetectionStrategy.OnPush,
986
1522
  encapsulation: ViewEncapsulation.None,
987
- imports: [ScrollingModule, NgTemplateOutlet, AXTranslatorPipe, AsyncPipe, AXListNavigationModule],
1523
+ imports: [ScrollingModule, NgTemplateOutlet, AXTranslatorPipe, AsyncPipe, AXListNavigationModule, AXCheckBoxComponent],
988
1524
  providers: [{ provide: AXLookupListViewBase, useExisting: AXLookupMultiSelectComponent }],
989
1525
  template: `
990
1526
  @if (isEmpty()) {
@@ -1009,29 +1545,27 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
1009
1545
  <div
1010
1546
  *cdkVirtualFor="let item of listDataSource(); let i = index; trackBy: trackByIndex"
1011
1547
  role="option"
1012
- class="ax-lookup-option-host"
1548
+ class="ax-lookup-option-host ax-lookup-option-multiple"
1013
1549
  axListNavigationItem
1014
1550
  #navItem="axListNavigationItem"
1015
1551
  [style.height.px]="itemHeight()"
1016
1552
  [class.ax-lookup-option]="!itemTemplate()"
1017
- [class.ax-lookup-option-host--check]="!!itemTemplate()"
1018
1553
  [class.ax-state-alternate]="alternate() && i % 2 === 1"
1019
1554
  [class.ax-state-selected]="item != null && isSelected(item)"
1020
1555
  [class.ax-state-disabled]="item != null && isDisabled(item)"
1021
1556
  [class.ax-state-active]="navItem.isActive()"
1022
1557
  [attr.aria-selected]="item != null ? isSelected(item) : null"
1023
1558
  (mouseenter)="activateNavItem(nav, navItem)"
1024
- (click)="handleItemClick(item)"
1559
+ (mousedown)="handleItemMouseDown($event, item)"
1025
1560
  (onKeypress)="handleItemKeypress($event, item)"
1026
1561
  >
1027
1562
  @if (item != null) {
1028
- <input
1029
- type="checkbox"
1563
+ <ax-check-box
1030
1564
  class="ax-lookup-checkbox"
1031
- tabindex="-1"
1032
- [checked]="isSelected(item)"
1565
+ [tabIndex]="-1"
1566
+ [value]="isSelected(item)"
1033
1567
  [disabled]="isDisabled(item)"
1034
- />
1568
+ ></ax-check-box>
1035
1569
  @if (itemTemplate()) {
1036
1570
  <ng-container [ngTemplateOutlet]="itemTemplate()!" [ngTemplateOutletContext]="{ $implicit: item }" />
1037
1571
  } @else {
@@ -1056,14 +1590,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
1056
1590
  }] });
1057
1591
 
1058
1592
  /**
1059
- * An advanced drop-down (lookup) editor with five modes, `AXDataSource` support, and virtual scrolling.
1593
+ * An advanced drop-down (lookup) editor with six modes, `AXDataSource` support, and virtual scrolling.
1060
1594
  *
1061
1595
  * Modes (each rendered by its own internal mini component):
1062
1596
  * - `drop-down-list` — a predefined list of options for picking single values.
1063
1597
  * - `multi-select` — a predefined list of options for multiple item selection (chips in the trigger).
1064
- * - `drop-down-tree` — a predefined list rendered in a tree-like structure for single item selection.
1065
- * - `multi-select-tree` a tree-like structure for multiple item selection.
1066
- * - `multi-column` — an `ax-data-table` grid; when searchable, the trigger input filters as you type.
1598
+ * - `drop-down-tree` — a tree-like structure for single item selection; when searchable, the trigger
1599
+ * input filters nested nodes as you type (on small screens the search field is inside the actionsheet).
1600
+ * - `multi-select-tree` — a tree-like structure for multiple item selection; searchable the same way.
1601
+ * - `multi-column` — an `ax-data-table` grid; when searchable, the trigger input filters as you type
1602
+ * (on small screens the search field is inside the actionsheet).
1603
+ * - `multi-column-tree` — a multi-column `ax-data-table` with a drop-down tree inside it
1604
+ * (expandable hierarchical rows). Uses `treeDataSource` + `columns`, or a hierarchical `dataSource`.
1067
1605
  *
1068
1606
  * With `adaptivityEnabled` (default `true`), the list opens as a bottom actionsheet on small
1069
1607
  * screens instead of an anchored dropdown — the same alternate presentation as `ax-select-box`.
@@ -1073,9 +1611,30 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
1073
1611
  *
1074
1612
  * @category Components
1075
1613
  */
1076
- class AXLookupComponent extends NXComponent {
1614
+ class AXLookupComponent extends NXValueComponent {
1077
1615
  #platform;
1078
1616
  #destroyRef;
1617
+ /** Whether search filters the tree datasource instead of `AXDataSource`. */
1618
+ #isTreeOnlySearchMode() {
1619
+ const mode = this.mode();
1620
+ return mode === 'drop-down-tree' || mode === 'multi-select-tree';
1621
+ }
1622
+ /**
1623
+ * Applied tree search query. Set only from `#applyFilterNow` so opening a single-select
1624
+ * with the selected label in the trigger does not filter the tree.
1625
+ */
1626
+ #treeFilterQuery;
1627
+ #treeFilterEpoch;
1628
+ /** Reused so closing/reopening the popup does not create a new AXDataSource (which would miss cache). */
1629
+ #multiColumnTreeTableSource;
1630
+ #multiColumnTreeTableKey;
1631
+ #multiColumnTreeInput;
1632
+ /**
1633
+ * Tree callback results keyed by parent id. Survives popup remount so
1634
+ * drop-down-tree / multi-select-tree do not refetch on every open.
1635
+ */
1636
+ #treeChildrenCache;
1637
+ #document;
1079
1638
  #itemsCache;
1080
1639
  #isUserInteraction;
1081
1640
  #lastValue;
@@ -1084,23 +1643,31 @@ class AXLookupComponent extends NXComponent {
1084
1643
  #selectionInitialized;
1085
1644
  #filterApplied;
1086
1645
  #searchDebounce;
1646
+ #searchEnterRevision;
1647
+ #sheetSearchFocused;
1087
1648
  constructor() {
1088
1649
  super();
1089
1650
  this.#platform = inject(AXPlatform);
1090
1651
  this.#destroyRef = inject(DestroyRef);
1652
+ /**
1653
+ * The name of the form field, used by validation rules and `ax-form.validate(names)`.
1654
+ */
1655
+ this.name = input('', /* @ts-ignore */
1656
+ ...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
1091
1657
  /**
1092
1658
  * The lookup rendering mode. Selects which mini component renders in the popup.
1093
1659
  */
1094
1660
  this.mode = input('drop-down-list', /* @ts-ignore */
1095
1661
  ...(ngDevMode ? [{ debugName: "mode" }] : /* istanbul ignore next */ []));
1096
1662
  /**
1097
- * The items source for list-based modes (`drop-down-list`, `multi-select`, `multi-column`).
1663
+ * The items source for list-based modes (`drop-down-list`, `multi-select`, `multi-column`)
1664
+ * and for `multi-column-tree` when `treeDataSource` is not set.
1098
1665
  * Accepts an `AXDataSource` (remote paging, `byKey`, server-side filter) or a plain array.
1099
1666
  */
1100
1667
  this.dataSource = input(undefined, /* @ts-ignore */
1101
1668
  ...(ngDevMode ? [{ debugName: "dataSource" }] : /* istanbul ignore next */ []));
1102
1669
  /**
1103
- * The nodes source for tree modes (`drop-down-tree`, `multi-select-tree`):
1670
+ * The nodes source for tree modes (`drop-down-tree`, `multi-select-tree`, `multi-column-tree`):
1104
1671
  * an array of nodes or a lazy children callback.
1105
1672
  */
1106
1673
  this.treeDataSource = input(undefined, /* @ts-ignore */
@@ -1122,20 +1689,36 @@ class AXLookupComponent extends NXComponent {
1122
1689
  this.disabledField = input('disabled', /* @ts-ignore */
1123
1690
  ...(ngDevMode ? [{ debugName: "disabledField" }] : /* istanbul ignore next */ []));
1124
1691
  /**
1125
- * Column definitions for the `multi-column` mode (rendered as `ax-text-column` in `ax-data-table`).
1692
+ * Column definitions for the `multi-column` and `multi-column-tree` modes
1693
+ * (rendered as `ax-text-column` in `ax-data-table`).
1126
1694
  */
1127
1695
  this.columns = input([], /* @ts-ignore */
1128
1696
  ...(ngDevMode ? [{ debugName: "columns" }] : /* istanbul ignore next */ []));
1697
+ /**
1698
+ * Field used by `multi-column-tree` to fetch children when a row is expanded
1699
+ * (`AXDataSource` filter). Defaults to `parentId`. Nested `children` arrays are also supported.
1700
+ */
1701
+ this.treeParentField = input('parentId', /* @ts-ignore */
1702
+ ...(ngDevMode ? [{ debugName: "treeParentField" }] : /* istanbul ignore next */ []));
1703
+ /**
1704
+ * Field used by `multi-column-tree` to decide whether a row shows an expand control.
1705
+ * Defaults to `hasChild`. Nodes with `children` / `childrenCount` are mapped automatically
1706
+ * when using `treeDataSource`.
1707
+ */
1708
+ this.hasChildrenField = input('hasChild', /* @ts-ignore */
1709
+ ...(ngDevMode ? [{ debugName: "hasChildrenField" }] : /* istanbul ignore next */ []));
1129
1710
  /**
1130
1711
  * Whether the trigger accepts typing and filters the datasource (`true`),
1131
1712
  * or is select-only with no writable input (`false`).
1132
- * Applies to `drop-down-list`, `multi-select`, and `multi-column`. Tree modes ignore this.
1713
+ * Applies to all modes, including `drop-down-tree` and `multi-select-tree`.
1714
+ * On small screens with `adaptivityEnabled`, search is typed in the actionsheet instead of the trigger.
1133
1715
  */
1134
1716
  this.searchable = input(true, /* @ts-ignore */
1135
1717
  ...(ngDevMode ? [{ debugName: "searchable" }] : /* istanbul ignore next */ []));
1136
1718
  /**
1137
1719
  * When `true` (default), the popup list uses the alternate actionsheet presentation on small
1138
- * screens (`SM`). When `false`, the list always opens as an anchored dropdown.
1720
+ * screens (`SM`). Searchable list modes then show a search field inside the sheet. When `false`,
1721
+ * the list always opens as an anchored dropdown.
1139
1722
  */
1140
1723
  this.adaptivityEnabled = input(true, /* @ts-ignore */
1141
1724
  ...(ngDevMode ? [{ debugName: "adaptivityEnabled" }] : /* istanbul ignore next */ []));
@@ -1146,13 +1729,14 @@ class AXLookupComponent extends NXComponent {
1146
1729
  ...(ngDevMode ? [{ debugName: "caption" }] : /* istanbul ignore next */ []));
1147
1730
  /**
1148
1731
  * When `true`, list rows use alternating background colors for easier scanning
1149
- * (`drop-down-list`, `multi-select`, and `multi-column` modes).
1732
+ * (all lookup modes, including drop-down-tree and multi-select-tree).
1150
1733
  */
1151
1734
  this.alternate = input(false, /* @ts-ignore */
1152
1735
  ...(ngDevMode ? [{ debugName: "alternate" }] : /* istanbul ignore next */ []));
1153
1736
  /**
1154
1737
  * Placeholder for the trigger search input when items are already selected
1155
- * (mainly useful in `multi-select`). Falls back to `placeholder` when the selection is empty.
1738
+ * (mainly useful in `multi-select` / `multi-select-tree`), and for the in-sheet search field on small screens.
1739
+ * Falls back to `placeholder` when the selection is empty on desktop.
1156
1740
  */
1157
1741
  this.searchPlaceholder = input('Search...', /* @ts-ignore */
1158
1742
  ...(ngDevMode ? [{ debugName: "searchPlaceholder" }] : /* istanbul ignore next */ []));
@@ -1193,6 +1777,8 @@ class AXLookupComponent extends NXComponent {
1193
1777
  ...(ngDevMode ? [{ debugName: "treeSelectionBehavior" }] : /* istanbul ignore next */ []));
1194
1778
  /**
1195
1779
  * Custom template rendered for each item/node. Context: `$implicit` is the item.
1780
+ * Default option chrome (padding, typography, check icon) is not applied; only the
1781
+ * template's styles are used. Selection and hover backgrounds remain on the row.
1196
1782
  */
1197
1783
  this.itemTemplate = input(undefined, /* @ts-ignore */
1198
1784
  ...(ngDevMode ? [{ debugName: "itemTemplate" }] : /* istanbul ignore next */ []));
@@ -1267,19 +1853,67 @@ class AXLookupComponent extends NXComponent {
1267
1853
  this.isMultiple = computed(() => this.mode() === 'multi-select' || this.mode() === 'multi-select-tree', /* @ts-ignore */
1268
1854
  ...(ngDevMode ? [{ debugName: "isMultiple" }] : /* istanbul ignore next */ []));
1269
1855
  /** Whether the current mode renders a tree. */
1270
- this.isTreeMode = computed(() => this.mode() === 'drop-down-tree' || this.mode() === 'multi-select-tree', /* @ts-ignore */
1856
+ this.isTreeMode = computed(() => {
1857
+ const mode = this.mode();
1858
+ return (mode === 'drop-down-tree' ||
1859
+ mode === 'multi-select-tree' ||
1860
+ (mode === 'multi-column-tree' && this.treeDataSource() != null));
1861
+ }, /* @ts-ignore */
1271
1862
  ...(ngDevMode ? [{ debugName: "isTreeMode" }] : /* istanbul ignore next */ []));
1272
- /** Whether the trigger input is writable and filters as you type. */
1273
- this.isEditableTrigger = computed(() => {
1274
- if (!this.searchable() || this.readonly()) {
1275
- return false;
1276
- }
1863
+ /** Whether the current mode can filter as you type (list, table, or tree). */
1864
+ this.isListSearchMode = computed(() => {
1277
1865
  const mode = this.mode();
1278
- return mode === 'drop-down-list' || mode === 'multi-select' || mode === 'multi-column';
1866
+ return (mode === 'drop-down-list' ||
1867
+ mode === 'multi-select' ||
1868
+ mode === 'drop-down-tree' ||
1869
+ mode === 'multi-select-tree' ||
1870
+ mode === 'multi-column' ||
1871
+ mode === 'multi-column-tree');
1279
1872
  }, /* @ts-ignore */
1873
+ ...(ngDevMode ? [{ debugName: "isListSearchMode" }] : /* istanbul ignore next */ []));
1874
+ /** Whether the trigger input is writable and filters as you type (desktop only). */
1875
+ this.isEditableTrigger = computed(() => this.searchable() && !this.readonly() && !this.isActionsheetStyle() && this.isListSearchMode(), /* @ts-ignore */
1280
1876
  ...(ngDevMode ? [{ debugName: "isEditableTrigger" }] : /* istanbul ignore next */ []));
1877
+ /** Whether search is typed in the actionsheet instead of the trigger. */
1878
+ this.isSheetSearchEnabled = computed(() => this.searchable() && !this.readonly() && this.isActionsheetStyle() && this.isListSearchMode(), /* @ts-ignore */
1879
+ ...(ngDevMode ? [{ debugName: "isSheetSearchEnabled" }] : /* istanbul ignore next */ []));
1880
+ /** Query typed in the actionsheet search field (independent of the trigger display text). */
1881
+ this.sheetSearchText = signal('', /* @ts-ignore */
1882
+ ...(ngDevMode ? [{ debugName: "sheetSearchText" }] : /* istanbul ignore next */ []));
1883
+ /**
1884
+ * Applied tree search query. Set only from `#applyFilterNow` so opening a single-select
1885
+ * with the selected label in the trigger does not filter the tree.
1886
+ */
1887
+ this.#treeFilterQuery = signal('', /* @ts-ignore */
1888
+ ...(ngDevMode ? [{ debugName: "#treeFilterQuery" }] : /* istanbul ignore next */ []));
1889
+ this.#treeFilterEpoch = signal(0, /* @ts-ignore */
1890
+ ...(ngDevMode ? [{ debugName: "#treeFilterEpoch" }] : /* istanbul ignore next */ []));
1891
+ /** Increments on every tree filter apply so the tree view remounts with a new instance. */
1892
+ this.treeFilterKey = computed(() => String(this.#treeFilterEpoch()), /* @ts-ignore */
1893
+ ...(ngDevMode ? [{ debugName: "treeFilterKey" }] : /* istanbul ignore next */ []));
1281
1894
  /** The datasource for list-based modes; plain arrays are converted. */
1282
1895
  this.resolvedDataSource = computed(() => {
1896
+ const tree = this.treeDataSource();
1897
+ if (this.mode() === 'multi-column-tree' && tree) {
1898
+ const key = `${this.valueField()}|${this.textField()}|${this.treeParentField()}|${this.hasChildrenField()}`;
1899
+ if (this.#multiColumnTreeTableSource &&
1900
+ this.#multiColumnTreeInput === tree &&
1901
+ this.#multiColumnTreeTableKey === key) {
1902
+ return this.#multiColumnTreeTableSource;
1903
+ }
1904
+ const cachedTree = Array.isArray(tree)
1905
+ ? tree
1906
+ : (nodeId) => this.#loadCachedTreeNodes(tree, nodeId);
1907
+ this.#multiColumnTreeInput = tree;
1908
+ this.#multiColumnTreeTableKey = key;
1909
+ this.#multiColumnTreeTableSource = createLookupTreeTableDataSource(cachedTree, {
1910
+ valueField: this.valueField(),
1911
+ textField: this.textField(),
1912
+ parentField: this.treeParentField(),
1913
+ hasChildrenField: this.hasChildrenField(),
1914
+ });
1915
+ return this.#multiColumnTreeTableSource;
1916
+ }
1283
1917
  const source = this.dataSource();
1284
1918
  if (!source) {
1285
1919
  return convertArrayToDataSource([], { key: this.valueField(), pageSize: 20 });
@@ -1289,6 +1923,28 @@ class AXLookupComponent extends NXComponent {
1289
1923
  : source;
1290
1924
  }, /* @ts-ignore */
1291
1925
  ...(ngDevMode ? [{ debugName: "resolvedDataSource" }] : /* istanbul ignore next */ []));
1926
+ /**
1927
+ * Tree callback results keyed by parent id. Survives popup remount so
1928
+ * drop-down-tree / multi-select-tree do not refetch on every open.
1929
+ */
1930
+ this.#treeChildrenCache = new WeakMap();
1931
+ this.resolvedTreeDataSource = computed(() => {
1932
+ this.#treeFilterEpoch();
1933
+ const source = this.treeDataSource();
1934
+ const query = this.#treeFilterQuery();
1935
+ const textField = this.textField();
1936
+ if (!source) {
1937
+ return [];
1938
+ }
1939
+ if (Array.isArray(source)) {
1940
+ return query ? filterTreeNodes(source, textField, query) : cloneLookupTreeNodes(source);
1941
+ }
1942
+ if (!query) {
1943
+ return (nodeId) => this.#loadCachedTreeNodes(source, nodeId);
1944
+ }
1945
+ return (nodeId) => this.#loadFilteredCachedTreeNodes(source, nodeId, query);
1946
+ }, /* @ts-ignore */
1947
+ ...(ngDevMode ? [{ debugName: "resolvedTreeDataSource" }] : /* istanbul ignore next */ []));
1292
1948
  /** The current selection normalized to an array. */
1293
1949
  this.selectedValues = computed(() => {
1294
1950
  const value = this.value();
@@ -1311,7 +1967,7 @@ class AXLookupComponent extends NXComponent {
1311
1967
  * Text typed in the editable trigger input.
1312
1968
  * Multi-select starts empty; single modes sync from the selected display text.
1313
1969
  */
1314
- this.searchText = linkedSignal(() => (this.mode() === 'multi-select' || this.mode() === 'multi-select-tree' ? '' : this.displayText()), /* @ts-ignore */
1970
+ this.searchText = linkedSignal(() => (this.isMultiple() ? '' : this.displayText()), /* @ts-ignore */
1315
1971
  ...(ngDevMode ? [{ debugName: "searchText" }] : /* istanbul ignore next */ []));
1316
1972
  /**
1317
1973
  * Whether the trigger should render `selectedTemplate` instead of the plain input text.
@@ -1328,12 +1984,34 @@ class AXLookupComponent extends NXComponent {
1328
1984
  return !this.expanded() && this.searchText() === this.displayText();
1329
1985
  }, /* @ts-ignore */
1330
1986
  ...(ngDevMode ? [{ debugName: "showSelectedTemplate" }] : /* istanbul ignore next */ []));
1987
+ /** Placeholder for the editable trigger search input. */
1988
+ this.triggerSearchPlaceholder = computed(() => {
1989
+ if (this.isActionsheetStyle()) {
1990
+ return this.isMultiple() && this.selectedItems().length > 0 ? '' : this.placeholder();
1991
+ }
1992
+ if (this.isMultiple() && this.selectedItems().length > 0) {
1993
+ return this.searchPlaceholder();
1994
+ }
1995
+ return this.placeholder();
1996
+ }, /* @ts-ignore */
1997
+ ...(ngDevMode ? [{ debugName: "triggerSearchPlaceholder" }] : /* istanbul ignore next */ []));
1331
1998
  this.popoverRef = viewChild(AXPopoverComponent, /* @ts-ignore */
1332
1999
  ...(ngDevMode ? [{ debugName: "popoverRef" }] : /* istanbul ignore next */ []));
2000
+ this.originRef = viewChild('origin', /* @ts-ignore */
2001
+ ...(ngDevMode ? [{ debugName: "originRef" }] : /* istanbul ignore next */ []));
2002
+ this.popupRef = viewChild('popup', /* @ts-ignore */
2003
+ ...(ngDevMode ? [{ debugName: "popupRef" }] : /* istanbul ignore next */ []));
1333
2004
  this.triggerSearchInput = viewChild('triggerSearchInput', /* @ts-ignore */
1334
2005
  ...(ngDevMode ? [{ debugName: "triggerSearchInput" }] : /* istanbul ignore next */ []));
2006
+ this.#document = inject(DOCUMENT);
1335
2007
  this.listView = viewChild(AXLookupListViewBase, /* @ts-ignore */
1336
2008
  ...(ngDevMode ? [{ debugName: "listView" }] : /* istanbul ignore next */ []));
2009
+ this.dropDownTreeView = viewChild(AXLookupDropDownTreeComponent, /* @ts-ignore */
2010
+ ...(ngDevMode ? [{ debugName: "dropDownTreeView" }] : /* istanbul ignore next */ []));
2011
+ this.multiSelectTreeView = viewChild(AXLookupMultiSelectTreeComponent, /* @ts-ignore */
2012
+ ...(ngDevMode ? [{ debugName: "multiSelectTreeView" }] : /* istanbul ignore next */ []));
2013
+ this.sheetSearchRef = viewChild('sheetSearch', /* @ts-ignore */
2014
+ ...(ngDevMode ? [{ debugName: "sheetSearchRef" }] : /* istanbul ignore next */ []));
1337
2015
  this.#itemsCache = new Map();
1338
2016
  this.#isUserInteraction = false;
1339
2017
  this.#lastValue = undefined;
@@ -1341,14 +2019,8 @@ class AXLookupComponent extends NXComponent {
1341
2019
  this.#resolveRevision = 0;
1342
2020
  this.#selectionInitialized = false;
1343
2021
  this.#filterApplied = false;
1344
- /** Placeholder for the editable trigger search input. */
1345
- this.triggerSearchPlaceholder = computed(() => {
1346
- if (this.mode() === 'multi-select' && this.selectedItems().length > 0) {
1347
- return this.searchPlaceholder();
1348
- }
1349
- return this.placeholder();
1350
- }, /* @ts-ignore */
1351
- ...(ngDevMode ? [{ debugName: "triggerSearchPlaceholder" }] : /* istanbul ignore next */ []));
2022
+ this.#searchEnterRevision = 0;
2023
+ this.#sheetSearchFocused = false;
1352
2024
  effect(() => this.#emitValueChanged(this.value()));
1353
2025
  effect(() => this.#emitOpenedOrClosed(this.expanded()));
1354
2026
  effect(() => {
@@ -1393,6 +2065,13 @@ class AXLookupComponent extends NXComponent {
1393
2065
  }
1394
2066
  });
1395
2067
  });
2068
+ afterRenderEffect(() => {
2069
+ if (!this.expanded()) {
2070
+ this.#sheetSearchFocused = false;
2071
+ return;
2072
+ }
2073
+ this.#tryFocusSheetSearch();
2074
+ });
1396
2075
  }
1397
2076
  #syncActionsheetStyle() {
1398
2077
  this.isActionsheetStyle.set(this.adaptivityEnabled() && this.#platform.is('SM'));
@@ -1422,7 +2101,7 @@ class AXLookupComponent extends NXComponent {
1422
2101
  if (!this.expanded()) {
1423
2102
  return;
1424
2103
  }
1425
- queueMicrotask(() => this.focusListFirst());
2104
+ queueMicrotask(() => this.#focusPopupSearchOrList());
1426
2105
  }
1427
2106
  /**
1428
2107
  * Focuses the lookup trigger input.
@@ -1447,16 +2126,187 @@ class AXLookupComponent extends NXComponent {
1447
2126
  if (e.key === 'ArrowDown') {
1448
2127
  e.preventDefault();
1449
2128
  this.expanded.set(true);
1450
- queueMicrotask(() => this.focusListFirst());
2129
+ queueMicrotask(() => this.#focusPopupSearchOrList());
2130
+ return;
2131
+ }
2132
+ if (e.key === 'Enter' && this.isEditableTrigger()) {
2133
+ this.#onSearchEnter(e);
1451
2134
  return;
1452
2135
  }
1453
2136
  if (!this.isEditableTrigger() && (e.key === 'Enter' || e.key === ' ')) {
1454
2137
  e.preventDefault();
1455
2138
  this.expanded.update((open) => !open);
1456
2139
  if (this.expanded()) {
1457
- queueMicrotask(() => this.focusListFirst());
2140
+ queueMicrotask(() => this.#focusPopupSearchOrList());
2141
+ }
2142
+ }
2143
+ }
2144
+ /** Filters the datasource from the actionsheet search field and handles Enter with no matches. */
2145
+ onSheetSearchKeydown(e) {
2146
+ const event = e.nativeEvent;
2147
+ if (!event || event.key !== 'Enter') {
2148
+ return;
2149
+ }
2150
+ this.#onSearchEnter(event);
2151
+ }
2152
+ /**
2153
+ * Enter in search never submits the surrounding form.
2154
+ * - No matches: single-select value is cleared (`null`).
2155
+ * - Exactly one match: that item is selected (no list navigation required).
2156
+ * - Multiple matches: nothing is selected.
2157
+ */
2158
+ #onSearchEnter(event) {
2159
+ event.preventDefault();
2160
+ event.stopPropagation();
2161
+ event.stopImmediatePropagation();
2162
+ void this.#commitOrClearFromSearch();
2163
+ }
2164
+ async #commitOrClearFromSearch() {
2165
+ const revision = ++this.#searchEnterRevision;
2166
+ this.#flushPendingFilter();
2167
+ if (this.#isTreeOnlySearchMode()) {
2168
+ const nodes = await this.#resolvedFilteredTreeNodes();
2169
+ if (revision !== this.#searchEnterRevision) {
2170
+ return;
2171
+ }
2172
+ const items = this.#enabledTreeItems(nodes);
2173
+ if (items.length === 0) {
2174
+ if (this.#currentSearchQuery() && !this.isMultiple()) {
2175
+ this.reset(true);
2176
+ this.close();
2177
+ }
2178
+ return;
2179
+ }
2180
+ if (items.length !== 1) {
2181
+ return;
2182
+ }
2183
+ this.#commitSearchSelection(items);
2184
+ return;
2185
+ }
2186
+ const source = this.resolvedDataSource();
2187
+ if (source.isLoading) {
2188
+ await this.#whenSourceIdle(source);
2189
+ if (revision !== this.#searchEnterRevision) {
2190
+ return;
2191
+ }
2192
+ }
2193
+ if (this.#hasNoSearchMatches()) {
2194
+ if (this.#currentSearchQuery() && !this.isMultiple()) {
2195
+ this.reset(true);
2196
+ this.close();
2197
+ }
2198
+ return;
2199
+ }
2200
+ if (this.#getSearchMatchCount() !== 1) {
2201
+ return;
2202
+ }
2203
+ const item = this.#pickFirstMatch();
2204
+ if (!item) {
2205
+ return;
2206
+ }
2207
+ this.#commitSearchSelection([item]);
2208
+ }
2209
+ #commitSearchSelection(items) {
2210
+ if (items.length === 0) {
2211
+ if (this.#currentSearchQuery() && !this.isMultiple()) {
2212
+ this.reset(true);
2213
+ this.close();
1458
2214
  }
2215
+ return;
2216
+ }
2217
+ if (!this.#isTypedFilterQuery()) {
2218
+ return;
2219
+ }
2220
+ const item = this.#pickFirstFromItems(items);
2221
+ if (!item) {
2222
+ return;
2223
+ }
2224
+ const event = { item, value: item[this.valueField()] };
2225
+ if (this.isMultiple()) {
2226
+ this.handleMultiToggle(event);
2227
+ }
2228
+ else {
2229
+ this.handleSinglePick(event);
2230
+ }
2231
+ }
2232
+ async #resolvedFilteredTreeNodes() {
2233
+ const source = this.resolvedTreeDataSource();
2234
+ if (Array.isArray(source)) {
2235
+ return source;
2236
+ }
2237
+ return (await source()) ?? [];
2238
+ }
2239
+ #enabledTreeItems(nodes) {
2240
+ const disabledField = this.disabledField();
2241
+ return flattenTreeNodes(nodes).filter((item) => !item[disabledField]);
2242
+ }
2243
+ #pickFirstMatch() {
2244
+ const disabledField = this.disabledField();
2245
+ const source = this.resolvedDataSource();
2246
+ const items = (source.cachedItems.length ? source.cachedItems : source.items).filter((item) => item != null && !item[disabledField]);
2247
+ return this.#pickFirstFromItems(items);
2248
+ }
2249
+ #pickFirstFromItems(items) {
2250
+ if (items.length === 0) {
2251
+ return null;
2252
+ }
2253
+ const query = this.#currentSearchQuery().toLowerCase();
2254
+ if (!query) {
2255
+ return items[0];
2256
+ }
2257
+ const textOf = (item) => String(item?.[this.textField()] ?? '').trim().toLowerCase();
2258
+ return items.find((item) => textOf(item) === query) ?? items.find((item) => textOf(item).includes(query)) ?? items[0];
2259
+ }
2260
+ #whenSourceIdle(source) {
2261
+ if (!source.isLoading) {
2262
+ return Promise.resolve();
2263
+ }
2264
+ return new Promise((resolve) => {
2265
+ const sub = source.onLoadingChanged.subscribe((loading) => {
2266
+ if (!loading) {
2267
+ sub.unsubscribe();
2268
+ resolve();
2269
+ }
2270
+ });
2271
+ });
2272
+ }
2273
+ #flushPendingFilter() {
2274
+ if (!this.#searchDebounce) {
2275
+ return;
2276
+ }
2277
+ clearTimeout(this.#searchDebounce);
2278
+ this.#searchDebounce = undefined;
2279
+ this.#applyFilterNow(this.#currentSearchQuery());
2280
+ }
2281
+ #currentSearchQuery() {
2282
+ if (this.isSheetSearchEnabled()) {
2283
+ return (this.sheetSearchText() || this.#sheetSearchInputValue()).trim();
2284
+ }
2285
+ return this.searchText().trim();
2286
+ }
2287
+ #isTypedFilterQuery() {
2288
+ const query = this.#currentSearchQuery();
2289
+ if (!query) {
2290
+ return false;
2291
+ }
2292
+ if (!this.isSheetSearchEnabled() && !this.isMultiple()) {
2293
+ return query.toLowerCase() !== this.displayText().trim().toLowerCase();
2294
+ }
2295
+ return true;
2296
+ }
2297
+ #hasNoSearchMatches() {
2298
+ return this.#getSearchMatchCount() === 0;
2299
+ }
2300
+ #getSearchMatchCount() {
2301
+ const list = this.listView();
2302
+ if (list) {
2303
+ return list.matchCount();
2304
+ }
2305
+ const source = this.resolvedDataSource();
2306
+ if (source.isLoading) {
2307
+ return -1;
1459
2308
  }
2309
+ return source.totalCount;
1460
2310
  }
1461
2311
  /** Blocks typing when the trigger is not editable (keeps Tab / keyboard open working). */
1462
2312
  onBeforeInput(event) {
@@ -1465,9 +2315,13 @@ class AXLookupComponent extends NXComponent {
1465
2315
  }
1466
2316
  }
1467
2317
  /**
1468
- * Returns focus to the trigger input when list navigation requests it.
2318
+ * Returns focus to the search field when list navigation requests it.
1469
2319
  */
1470
2320
  onListNavigateOut(_reason) {
2321
+ if (this.isSheetSearchEnabled()) {
2322
+ this.sheetSearchRef()?.focus();
2323
+ return;
2324
+ }
1471
2325
  this.triggerSearchInput()?.nativeElement.focus();
1472
2326
  }
1473
2327
  focusListFirst() {
@@ -1490,11 +2344,16 @@ class AXLookupComponent extends NXComponent {
1490
2344
  onPopoverClosed() {
1491
2345
  this.expanded.set(false);
1492
2346
  this.searchText.set(this.isMultiple() ? '' : this.displayText());
2347
+ this.sheetSearchText.set('');
2348
+ this.#treeFilterQuery.set('');
2349
+ this.#treeFilterEpoch.update((value) => value + 1);
1493
2350
  if (this.#filterApplied) {
1494
2351
  this.#filterApplied = false;
1495
- const source = this.resolvedDataSource();
1496
- source.clearFilter();
1497
- source.refresh();
2352
+ if (!this.#isTreeOnlySearchMode()) {
2353
+ const source = this.resolvedDataSource();
2354
+ source.clearFilter();
2355
+ source.refresh();
2356
+ }
1498
2357
  }
1499
2358
  }
1500
2359
  /**
@@ -1529,17 +2388,23 @@ class AXLookupComponent extends NXComponent {
1529
2388
  this.expanded.set(true);
1530
2389
  this.#applyFilterDebounced(text);
1531
2390
  }
2391
+ /** Filters the datasource from the actionsheet search field (reads the input so delayed ngModel cannot block typing). */
2392
+ onSheetSearchInput() {
2393
+ const query = this.#sheetSearchInputValue();
2394
+ this.sheetSearchText.set(query);
2395
+ this.#applyFilterDebounced(query);
2396
+ }
1532
2397
  /**
1533
- * Commits a single pick (drop-down-list, drop-down-tree, multi-column) and closes the popup.
2398
+ * Commits a single pick (drop-down-list, drop-down-tree, multi-column, multi-column-tree) and closes the popup.
1534
2399
  */
1535
2400
  handleSinglePick(e) {
1536
2401
  this.#emitItemClick(e.item);
1537
2402
  this.#emitItemSelected(e.item);
1538
2403
  this.#itemsCache.set(e.value, e.item);
1539
- if (!this.#valuesEqual(e.value, this.value())) {
1540
- this.#isUserInteraction = true;
1541
- this.value.set(e.value);
1542
- }
2404
+ this.selectedItems.set([e.item]);
2405
+ this.searchText.set(this.getItemText(e.item));
2406
+ this.#isUserInteraction = true;
2407
+ this.value.set(e.value);
1543
2408
  this.close();
1544
2409
  }
1545
2410
  /**
@@ -1557,7 +2422,10 @@ class AXLookupComponent extends NXComponent {
1557
2422
  const next = exists ? current.filter((v) => !(v == e.value)) : [...current, e.value];
1558
2423
  this.#isUserInteraction = true;
1559
2424
  this.value.set(next);
1560
- if (this.isEditableTrigger() && this.searchText()) {
2425
+ if (this.isSheetSearchEnabled() && this.sheetSearchText()) {
2426
+ this.#clearSheetSearch();
2427
+ }
2428
+ else if (this.isEditableTrigger() && this.searchText()) {
1561
2429
  this.searchText.set('');
1562
2430
  this.#applyFilterDebounced('');
1563
2431
  }
@@ -1576,6 +2444,13 @@ class AXLookupComponent extends NXComponent {
1576
2444
  }
1577
2445
  this.#isUserInteraction = true;
1578
2446
  this.value.set([...e.ids]);
2447
+ if (this.isSheetSearchEnabled() && this.sheetSearchText()) {
2448
+ this.#clearSheetSearch();
2449
+ }
2450
+ else if (this.isEditableTrigger() && this.searchText()) {
2451
+ this.searchText.set('');
2452
+ this.#applyFilterDebounced('');
2453
+ }
1579
2454
  }
1580
2455
  /** Forwards native focus from the trigger input. */
1581
2456
  emitOnFocus(e) {
@@ -1592,6 +2467,38 @@ class AXLookupComponent extends NXComponent {
1592
2467
  htmlElement: this.nativeElement,
1593
2468
  nativeEvent: e,
1594
2469
  });
2470
+ this.#scheduleCloseOnTriggerBlur(e);
2471
+ }
2472
+ /**
2473
+ * Closes the popup when the trigger input loses focus, unless focus moved into the
2474
+ * popover panel or another part of the trigger (e.g. sheet search or list navigation).
2475
+ */
2476
+ #scheduleCloseOnTriggerBlur(e) {
2477
+ if (!this.expanded()) {
2478
+ return;
2479
+ }
2480
+ const related = e.relatedTarget;
2481
+ if (related instanceof Node && this.#isFocusWithinPopupOrTrigger(related)) {
2482
+ return;
2483
+ }
2484
+ queueMicrotask(() => {
2485
+ if (!this.expanded()) {
2486
+ return;
2487
+ }
2488
+ const active = this.#document.activeElement;
2489
+ if (active instanceof Node && this.#isFocusWithinPopupOrTrigger(active)) {
2490
+ return;
2491
+ }
2492
+ this.close();
2493
+ });
2494
+ }
2495
+ #isFocusWithinPopupOrTrigger(node) {
2496
+ const popup = this.popupRef()?.nativeElement;
2497
+ if (popup?.contains(node)) {
2498
+ return true;
2499
+ }
2500
+ const origin = this.originRef()?.nativeElement;
2501
+ return Boolean(origin?.contains(node));
1595
2502
  }
1596
2503
  #emitItemClick(item) {
1597
2504
  this.onItemClick.emit({
@@ -1653,26 +2560,129 @@ class AXLookupComponent extends NXComponent {
1653
2560
  }
1654
2561
  this.#isUserInteraction = isUserInteraction;
1655
2562
  this.value.set(next);
1656
- if (this.isEditableTrigger() && this.searchText()) {
2563
+ if (this.isSheetSearchEnabled() && this.sheetSearchText()) {
2564
+ this.#clearSheetSearch();
2565
+ }
2566
+ else if (this.isEditableTrigger() && this.searchText()) {
1657
2567
  this.searchText.set('');
1658
2568
  this.#applyFilterDebounced('');
1659
2569
  }
1660
2570
  }
2571
+ #clearSheetSearch() {
2572
+ this.sheetSearchText.set('');
2573
+ this.sheetSearchRef()?.commitValue('', false);
2574
+ this.#applyFilterDebounced('');
2575
+ }
2576
+ #sheetSearchInputValue() {
2577
+ return this.sheetSearchRef()?.getHostElement()?.querySelector('input')?.value ?? '';
2578
+ }
2579
+ #tryFocusSheetSearch() {
2580
+ if (!this.isSheetSearchEnabled() || this.#sheetSearchFocused) {
2581
+ return;
2582
+ }
2583
+ const search = this.sheetSearchRef();
2584
+ if (!search) {
2585
+ return;
2586
+ }
2587
+ this.#sheetSearchFocused = true;
2588
+ search.focus();
2589
+ }
2590
+ #focusPopupSearchOrList() {
2591
+ if (this.isSheetSearchEnabled()) {
2592
+ this.#tryFocusSheetSearch();
2593
+ return;
2594
+ }
2595
+ this.focusListFirst();
2596
+ }
2597
+ #loadCachedTreeNodes(source, nodeId) {
2598
+ let byParent = this.#treeChildrenCache.get(source);
2599
+ if (!byParent) {
2600
+ byParent = new Map();
2601
+ this.#treeChildrenCache.set(source, byParent);
2602
+ }
2603
+ const key = nodeId ?? '';
2604
+ const cached = byParent.get(key);
2605
+ if (cached) {
2606
+ return cached;
2607
+ }
2608
+ const request = Promise.resolve(source(nodeId)).then((nodes) => nodes ?? [], (error) => {
2609
+ byParent.delete(key);
2610
+ throw error;
2611
+ });
2612
+ byParent.set(key, request);
2613
+ return request;
2614
+ }
2615
+ #nodeMayHaveChildren(node) {
2616
+ const raw = node['children'];
2617
+ if (Array.isArray(raw) && raw.length > 0) {
2618
+ return true;
2619
+ }
2620
+ const count = node['childrenCount'];
2621
+ if (typeof count === 'number' && count > 0) {
2622
+ return true;
2623
+ }
2624
+ return node['hasChild'] === true || node['hasChildren'] === true;
2625
+ }
2626
+ /**
2627
+ * Builds a nested tree for search by loading lazy children (using the existing cache)
2628
+ * so a query can match sub-items that have not been expanded yet.
2629
+ */
2630
+ async #hydrateTreeChildrenForSearch(source, nodes, visited = new Set()) {
2631
+ const valueField = this.valueField();
2632
+ return Promise.all(nodes.map(async (node) => {
2633
+ const raw = node['children'];
2634
+ const nested = Array.isArray(raw) && raw.length > 0 ? raw : undefined;
2635
+ if (nested) {
2636
+ const children = await this.#hydrateTreeChildrenForSearch(source, nested, visited);
2637
+ return { ...node, children };
2638
+ }
2639
+ const id = String(node[valueField] ?? '');
2640
+ if (!id || !this.#nodeMayHaveChildren(node) || visited.has(id)) {
2641
+ return node;
2642
+ }
2643
+ visited.add(id);
2644
+ const loaded = await this.#loadCachedTreeNodes(source, id);
2645
+ const children = await this.#hydrateTreeChildrenForSearch(source, loaded, visited);
2646
+ return { ...node, children };
2647
+ }));
2648
+ }
2649
+ async #loadFilteredCachedTreeNodes(source, nodeId, query) {
2650
+ const nodes = await this.#loadCachedTreeNodes(source, nodeId);
2651
+ const hydrated = await this.#hydrateTreeChildrenForSearch(source, nodes);
2652
+ return filterTreeNodes(hydrated, this.textField(), query);
2653
+ }
2654
+ #applyFilterNow(text) {
2655
+ const query = text?.trim() ?? '';
2656
+ if (this.#isTreeOnlySearchMode()) {
2657
+ this.#treeFilterQuery.set(query);
2658
+ this.#treeFilterEpoch.update((value) => value + 1);
2659
+ this.#filterApplied = query.length > 0;
2660
+ return;
2661
+ }
2662
+ const source = this.resolvedDataSource();
2663
+ if (query) {
2664
+ source.filter({ field: this.textField(), value: query, operator: { type: 'contains' } });
2665
+ this.#filterApplied = true;
2666
+ }
2667
+ else {
2668
+ source.clearFilter();
2669
+ }
2670
+ source.refresh();
2671
+ }
1661
2672
  #applyFilterDebounced(text) {
1662
2673
  if (this.#searchDebounce) {
1663
2674
  clearTimeout(this.#searchDebounce);
2675
+ this.#searchDebounce = undefined;
2676
+ }
2677
+ const query = text?.trim() ?? '';
2678
+ // Restore the full tree immediately when the query is cleared.
2679
+ if (!query) {
2680
+ this.#applyFilterNow('');
2681
+ return;
1664
2682
  }
1665
2683
  this.#searchDebounce = setTimeout(() => {
1666
- const source = this.resolvedDataSource();
1667
- const query = text?.trim() ?? '';
1668
- if (query) {
1669
- source.filter({ field: this.textField(), value: query, operator: { type: 'contains' } });
1670
- this.#filterApplied = true;
1671
- }
1672
- else {
1673
- source.clearFilter();
1674
- }
1675
- source.refresh();
2684
+ this.#searchDebounce = undefined;
2685
+ this.#applyFilterNow(text);
1676
2686
  }, 300);
1677
2687
  }
1678
2688
  async #resolveSelectedItems(values) {
@@ -1800,11 +2810,12 @@ class AXLookupComponent extends NXComponent {
1800
2810
  expanded ? this.onOpened.emit(event) : this.onClosed.emit(event);
1801
2811
  }
1802
2812
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1803
- 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 }, valueItems: { classPropertyName: "valueItems", publicName: "valueItems", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { look: "lookChange", value: "valueChange", onValueChanged: "onValueChanged", onSelectionChanged: "onSelectionChanged", onFocus: "onFocus", onBlur: "onBlur", onItemClick: "onItemClick", onItemSelected: "onItemSelected", onOpened: "onOpened", onClosed: "onClosed" }, providers: [
2813
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXLookupComponent, isStandalone: true, selector: "ax-lookup", inputs: { name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: false, transformFunction: null }, treeDataSource: { classPropertyName: "treeDataSource", publicName: "treeDataSource", isSignal: true, isRequired: false, transformFunction: null }, valueField: { classPropertyName: "valueField", publicName: "valueField", isSignal: true, isRequired: false, transformFunction: null }, textField: { classPropertyName: "textField", publicName: "textField", isSignal: true, isRequired: false, transformFunction: null }, disabledField: { classPropertyName: "disabledField", publicName: "disabledField", isSignal: true, isRequired: false, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, treeParentField: { classPropertyName: "treeParentField", publicName: "treeParentField", isSignal: true, isRequired: false, transformFunction: null }, hasChildrenField: { classPropertyName: "hasChildrenField", publicName: "hasChildrenField", isSignal: true, isRequired: false, transformFunction: null }, searchable: { classPropertyName: "searchable", publicName: "searchable", isSignal: true, isRequired: false, transformFunction: null }, adaptivityEnabled: { classPropertyName: "adaptivityEnabled", publicName: "adaptivityEnabled", isSignal: true, isRequired: false, transformFunction: null }, caption: { classPropertyName: "caption", publicName: "caption", isSignal: true, isRequired: false, transformFunction: null }, alternate: { classPropertyName: "alternate", publicName: "alternate", isSignal: true, isRequired: false, transformFunction: null }, searchPlaceholder: { classPropertyName: "searchPlaceholder", publicName: "searchPlaceholder", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, look: { classPropertyName: "look", publicName: "look", isSignal: true, isRequired: false, transformFunction: null }, itemHeight: { classPropertyName: "itemHeight", publicName: "itemHeight", isSignal: true, isRequired: false, transformFunction: null }, maxVisibleItems: { classPropertyName: "maxVisibleItems", publicName: "maxVisibleItems", isSignal: true, isRequired: false, transformFunction: null }, treeSelectionBehavior: { classPropertyName: "treeSelectionBehavior", publicName: "treeSelectionBehavior", isSignal: true, isRequired: false, transformFunction: null }, itemTemplate: { classPropertyName: "itemTemplate", publicName: "itemTemplate", isSignal: true, isRequired: false, transformFunction: null }, selectedTemplate: { classPropertyName: "selectedTemplate", publicName: "selectedTemplate", isSignal: true, isRequired: false, transformFunction: null }, emptyTemplate: { classPropertyName: "emptyTemplate", publicName: "emptyTemplate", isSignal: true, isRequired: false, transformFunction: null }, loadingTemplate: { classPropertyName: "loadingTemplate", publicName: "loadingTemplate", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, valueItems: { classPropertyName: "valueItems", publicName: "valueItems", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { look: "lookChange", value: "valueChange", onValueChanged: "onValueChanged", onSelectionChanged: "onSelectionChanged", onFocus: "onFocus", onBlur: "onBlur", onItemClick: "onItemClick", onItemSelected: "onItemSelected", onOpened: "onOpened", onClosed: "onClosed" }, providers: [
1804
2814
  { provide: AXComponent, useExisting: AXLookupComponent },
1805
2815
  { provide: AXClearableComponent, useExisting: AXLookupComponent },
1806
2816
  { provide: AXClosableComponent, useExisting: AXLookupComponent },
1807
- ], viewQueries: [{ propertyName: "popoverRef", first: true, predicate: AXPopoverComponent, descendants: true, isSignal: true }, { propertyName: "triggerSearchInput", first: true, predicate: ["triggerSearchInput"], descendants: true, isSignal: true }, { propertyName: "listView", first: true, predicate: AXLookupListViewBase, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div\n #origin\n class=\"ax-editor-container ax-{{ look() }} ax-default\"\n [class.ax-lookup-trigger]=\"!isEditableTrigger()\"\n [class.ax-lookup-trigger-multiple]=\"isMultiple()\"\n [class.ax-state-disabled]=\"disabled()\"\n [class.ax-state-readonly]=\"readonly()\"\n (click)=\"onTriggerClick()\"\n>\n <ng-content select=\"ax-prefix\"></ng-content>\n\n @if (isMultiple()) {\n <div class=\"ax-lookup-chips\">\n @for (item of selectedItems(); track trackSelectedKey(item)) {\n <ax-chips class=\"ax-sm\" color=\"primary\" look=\"twotone\" [text]=\"selectedTemplate() ? '' : getItemText(item)\">\n @if (selectedTemplate()) {\n <ax-prefix>\n <ng-container\n [ngTemplateOutlet]=\"selectedTemplate()!\"\n [ngTemplateOutletContext]=\"{ $implicit: item }\"\n />\n </ax-prefix>\n }\n @if (!disabled() && !readonly()) {\n <ax-suffix>\n <button type=\"button\" tabindex=\"-1\" (click)=\"removeChip($event, item)\">\n <span class=\"ax-icon ax-icon-close\"></span>\n </button>\n </ax-suffix>\n }\n </ax-chips>\n }\n <input\n #triggerSearchInput\n type=\"text\"\n class=\"ax-input ax-lookup-trigger-search\"\n [class.ax-lookup-select-input]=\"!isEditableTrigger()\"\n [placeholder]=\"triggerSearchPlaceholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly() || !isEditableTrigger()\"\n [attr.inputmode]=\"isEditableTrigger() ? null : 'none'\"\n [value]=\"searchText()\"\n (input)=\"onTriggerSearchInput($any($event.target).value)\"\n (keydown)=\"onTriggerKeydown($event)\"\n (beforeinput)=\"onBeforeInput($event)\"\n (focus)=\"emitOnFocus($event)\"\n (blur)=\"emitOnBlur($event)\"\n />\n </div>\n } @else {\n <div class=\"ax-lookup-value\">\n @if (showSelectedTemplate()) {\n <div class=\"ax-lookup-selected-content\" aria-hidden=\"true\">\n <ng-container\n [ngTemplateOutlet]=\"selectedTemplate()!\"\n [ngTemplateOutletContext]=\"{ $implicit: selectedItems()[0] }\"\n />\n </div>\n }\n <input\n #triggerSearchInput\n type=\"text\"\n class=\"ax-input\"\n [class.ax-lookup-select-input]=\"!isEditableTrigger()\"\n [class.ax-lookup-input-overlay]=\"showSelectedTemplate()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly() || !isEditableTrigger()\"\n [attr.inputmode]=\"isEditableTrigger() ? null : 'none'\"\n [value]=\"searchText()\"\n (input)=\"onTriggerSearchInput($any($event.target).value)\"\n (keydown)=\"onTriggerKeydown($event)\"\n (beforeinput)=\"onBeforeInput($event)\"\n (focus)=\"emitOnFocus($event)\"\n (blur)=\"emitOnBlur($event)\"\n />\n </div>\n }\n\n @if (selectedValues().length > 0 && !disabled() && !readonly()) {\n <ng-content select=\"ax-clear-button\"></ng-content>\n }\n\n <button\n type=\"button\"\n class=\"ax-general-button-icon\"\n tabindex=\"-1\"\n [disabled]=\"disabled() || readonly()\"\n >\n <span\n class=\"ax-icon\"\n [class.ax-icon-chevron-down]=\"!expanded()\"\n [class.ax-icon-chevron-up]=\"expanded()\"\n ></span>\n </button>\n <ng-content select=\"ax-suffix\"></ng-content>\n</div>\n\n<ax-popover\n [target]=\"origin\"\n [openOn]=\"'manual'\"\n [closeOn]=\"'clickOut'\"\n [placement]=\"'bottom-start'\"\n [width]=\"isActionsheetStyle() ? '100%' : origin.offsetWidth + 'px'\"\n [adaptivityEnabled]=\"isActionsheetStyle()\"\n [disabled]=\"disabled() || readonly()\"\n (onClosed)=\"onPopoverClosed()\"\n>\n <div class=\"ax-lookup-popup\" [class.ax-is-actionsheet]=\"isActionsheetStyle()\" [class.ax-is-alternate]=\"alternate()\" (keydown.escape)=\"close()\">\n @if (isActionsheetStyle()) {\n <ax-header class=\"ax-solid\">\n <ax-title>{{ caption() || placeholder() || ('@acorex:selectbox.popover.title' | translate | async) }}</ax-title>\n <ax-close-button [icon]=\"isMultiple() ? 'ax-icon ax-icon-check' : 'ax-icon ax-icon-close'\"></ax-close-button>\n </ax-header>\n }\n <ng-content select=\"ax-header\"></ng-content>\n @if (expanded()) {\n @switch (mode()) {\n @case ('drop-down-list') {\n <ax-lookup-drop-down-list\n [dataSource]=\"resolvedDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [itemHeight]=\"itemHeight()\"\n [maxVisibleItems]=\"maxVisibleItems()\"\n [itemTemplate]=\"itemTemplate()\"\n [emptyTemplate]=\"emptyTemplate()\"\n [loadingTemplate]=\"loadingTemplate()\"\n [alternate]=\"alternate()\"\n (itemClick)=\"handleSinglePick($event)\"\n (navigateOut)=\"onListNavigateOut($event)\"\n />\n }\n @case ('multi-select') {\n <ax-lookup-multi-select\n [dataSource]=\"resolvedDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [itemHeight]=\"itemHeight()\"\n [maxVisibleItems]=\"maxVisibleItems()\"\n [itemTemplate]=\"itemTemplate()\"\n [emptyTemplate]=\"emptyTemplate()\"\n [loadingTemplate]=\"loadingTemplate()\"\n [alternate]=\"alternate()\"\n (itemClick)=\"handleMultiToggle($event)\"\n (navigateOut)=\"onListNavigateOut($event)\"\n />\n }\n @case ('drop-down-tree') {\n <ax-lookup-drop-down-tree\n [dataSource]=\"treeDataSource()!\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [nodeTemplate]=\"$any(itemTemplate())\"\n (itemClick)=\"handleSinglePick($event)\"\n />\n }\n @case ('multi-select-tree') {\n <ax-lookup-multi-select-tree\n [dataSource]=\"treeDataSource()!\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [selectionBehavior]=\"treeSelectionBehavior()\"\n [nodeTemplate]=\"$any(itemTemplate())\"\n (selectionChange)=\"handleTreeSelectionChange($event)\"\n />\n }\n @case ('multi-column') {\n <ax-lookup-multi-column\n [dataSource]=\"resolvedDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [itemHeight]=\"itemHeight()\"\n [maxVisibleItems]=\"maxVisibleItems()\"\n [columns]=\"columns()\"\n [itemTemplate]=\"itemTemplate()\"\n [emptyTemplate]=\"emptyTemplate()\"\n [loadingTemplate]=\"loadingTemplate()\"\n [alternate]=\"alternate()\"\n (itemClick)=\"handleSinglePick($event)\"\n />\n }\n }\n }\n <ng-content select=\"ax-footer\"></ng-content>\n </div>\n</ax-popover>\n", styles: ["@layer properties;@layer components{ax-lookup{display:block;width:100%}ax-lookup .ax-editor-container{justify-content:flex-start;gap:calc(var(--spacing, .25rem) * 1)}ax-lookup .ax-lookup-trigger{cursor:pointer;-webkit-user-select:none;user-select:none}ax-lookup .ax-lookup-trigger-multiple{height:auto;min-height:calc(var(--spacing, .25rem) * 9);padding-block:calc(var(--spacing, .25rem) * 1)}ax-lookup .ax-lookup-value{position:relative;display:flex;min-width:calc(var(--spacing, .25rem) * 0);flex:1;align-items:center;overflow:hidden}ax-lookup .ax-lookup-select-input{cursor:pointer;caret-color:transparent;-webkit-user-select:none;user-select:none}ax-lookup .ax-lookup-selected-content{pointer-events:none;position:relative;z-index:0;display:flex;min-width:calc(var(--spacing, .25rem) * 0);flex:1;align-items:center;overflow:hidden}ax-lookup .ax-lookup-input-overlay{position:absolute;inset:calc(var(--spacing, .25rem) * 0);z-index:10;margin:calc(var(--spacing, .25rem) * 0)!important;height:100%;width:100%;border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding:calc(var(--spacing, .25rem) * 0)!important;color:transparent;caret-color:transparent}ax-lookup .ax-lookup-chips{display:flex;min-width:calc(var(--spacing, .25rem) * 0);flex:1;flex-wrap:wrap;align-items:center;gap:calc(var(--spacing, .25rem) * 1)}ax-lookup .ax-lookup-trigger-search{margin:calc(var(--spacing, .25rem) * 0)!important;height:calc(var(--spacing, .25rem) * 7.5);width:auto!important;min-width:calc(var(--spacing, .25rem) * 16);flex:1;flex-basis:calc(var(--spacing, .25rem) * 16)}ax-lookup .ax-lookup-placeholder{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){ax-lookup .ax-lookup-placeholder{color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 50%,transparent)}}ax-lookup ax-chips ax-prefix,ax-lookup ax-chips ax-suffix{padding:calc(var(--spacing, .25rem) * 0)!important}ax-lookup ax-chips ax-suffix button{display:flex;cursor:pointer;align-items:center;border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding:calc(var(--spacing, .25rem) * 0)}.ax-lookup-popup{box-sizing:border-box;display:flex;width:100%;flex-direction:column;overflow:hidden;border-radius:var(--ax-sys-border-radius);border-style:var(--tw-border-style);border-width:1px;border-color:rgba(var(--ax-sys-color-border-surface));background-color:rgba(var(--ax-sys-color-lightest-surface));--tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ax-lookup-popup:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:rgba(var(--ax-sys-color-darkest-surface))}.ax-lookup-popup.ax-is-actionsheet{border-bottom-right-radius:0;border-bottom-left-radius:0;--tw-shadow: 0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ax-lookup-popup.ax-is-actionsheet>ax-header.ax-solid{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:rgba(var(--ax-sys-color-border-lightest-surface))}.ax-lookup-popup.ax-is-actionsheet>ax-header.ax-solid .ax-icon-check{color:rgba(var(--ax-sys-color-primary-surface))}.ax-lookup-popup.ax-is-actionsheet>ax-header.ax-solid ax-title{font-size:var(--text-base, 1rem);line-height:var(--tw-leading, var(--text-base--line-height, 1.5 ));--tw-leading: calc(var(--spacing, .25rem) * 6);line-height:calc(var(--spacing, .25rem) * 6);--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500)}.ax-lookup-popup>ax-header:not(.ax-solid),.ax-lookup-popup>ax-footer{flex-shrink:0;border-color:rgba(var(--ax-sys-color-border-lightest-surface))}.ax-lookup-popup>ax-header:not(.ax-solid){border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.ax-lookup-popup>ax-footer{border-top-style:var(--tw-border-style);border-top-width:1px}.ax-lookup-viewport{width:100%}.ax-lookup-empty{display:flex;min-height:calc(var(--spacing, .25rem) * 12);width:100%;align-items:center;justify-content:center;padding-inline:calc(var(--spacing, .25rem) * 3);padding-block:calc(var(--spacing, .25rem) * 3);text-align:center;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-empty{color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 60%,transparent)}}.ax-lookup-option-host{box-sizing:border-box;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-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-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-inset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-inset-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-ring-color{syntax: \"*\"; inherits: false;}@property --tw-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-ring-color{syntax: \"*\"; inherits: false;}@property --tw-inset-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-ring-inset{syntax: \"*\"; inherits: false;}@property --tw-ring-offset-width{syntax: \"<length>\"; inherits: false; initial-value: 0px;}@property --tw-ring-offset-color{syntax: \"*\"; inherits: false; initial-value: #fff;}@property --tw-ring-offset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-leading{syntax: \"*\"; inherits: false;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid;--tw-shadow: 0 0 #0000;--tw-shadow-color: initial;--tw-shadow-alpha: 100%;--tw-inset-shadow: 0 0 #0000;--tw-inset-shadow-color: initial;--tw-inset-shadow-alpha: 100%;--tw-ring-color: initial;--tw-ring-shadow: 0 0 #0000;--tw-inset-ring-color: initial;--tw-inset-ring-shadow: 0 0 #0000;--tw-ring-inset: initial;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-offset-shadow: 0 0 #0000;--tw-leading: initial;--tw-font-weight: initial}}}\n/*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: AXChipsComponent, selector: "ax-chips", inputs: ["tabIndex", "color", "look", "text"], outputs: ["textChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i1$1.AXDecoratorCloseButtonComponent, selector: "ax-close-button", inputs: ["closeAll", "icon"] }, { kind: "component", type: i1$1.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "component", type: AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disablePanelClass", "visualContextScope", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "closeOnScroll", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "component", type: AXLookupDropDownListComponent, selector: "ax-lookup-drop-down-list" }, { kind: "component", type: AXLookupMultiSelectComponent, selector: "ax-lookup-multi-select" }, { kind: "component", type: AXLookupDropDownTreeComponent, selector: "ax-lookup-drop-down-tree", inputs: ["dataSource", "valueField", "textField", "disabledField", "selectedValues", "nodeTemplate"], outputs: ["itemClick"] }, { kind: "component", type: AXLookupMultiSelectTreeComponent, selector: "ax-lookup-multi-select-tree", inputs: ["dataSource", "valueField", "textField", "disabledField", "selectedValues", "selectionBehavior", "nodeTemplate"], outputs: ["selectionChange"] }, { kind: "component", type: AXLookupMultiColumnComponent, selector: "ax-lookup-multi-column", inputs: ["dataSource", "valueField", "textField", "disabledField", "selectedValues", "itemHeight", "maxVisibleItems", "columns", "itemTemplate", "emptyTemplate", "loadingTemplate", "alternate"], outputs: ["itemClick"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
2817
+ { provide: AXValuableComponent, useExisting: AXLookupComponent },
2818
+ ], viewQueries: [{ propertyName: "popoverRef", first: true, predicate: AXPopoverComponent, descendants: true, isSignal: true }, { propertyName: "originRef", first: true, predicate: ["origin"], descendants: true, isSignal: true }, { propertyName: "popupRef", first: true, predicate: ["popup"], descendants: true, isSignal: true }, { propertyName: "triggerSearchInput", first: true, predicate: ["triggerSearchInput"], descendants: true, isSignal: true }, { propertyName: "listView", first: true, predicate: AXLookupListViewBase, descendants: true, isSignal: true }, { propertyName: "dropDownTreeView", first: true, predicate: AXLookupDropDownTreeComponent, descendants: true, isSignal: true }, { propertyName: "multiSelectTreeView", first: true, predicate: AXLookupMultiSelectTreeComponent, descendants: true, isSignal: true }, { propertyName: "sheetSearchRef", first: true, predicate: ["sheetSearch"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div\n #origin\n class=\"ax-editor-container ax-{{ look() }} ax-default\"\n [class.ax-lookup-trigger]=\"!isEditableTrigger()\"\n [class.ax-lookup-trigger-multiple]=\"isMultiple()\"\n [class.ax-state-disabled]=\"disabled()\"\n [class.ax-state-readonly]=\"readonly()\"\n (click)=\"onTriggerClick()\"\n>\n <ng-content select=\"ax-prefix\"></ng-content>\n\n @if (isMultiple()) {\n <div class=\"ax-lookup-chips\">\n @for (item of selectedItems(); track trackSelectedKey(item)) {\n <ax-chips class=\"ax-sm\" look=\"fill\" [text]=\"selectedTemplate() ? '' : getItemText(item)\">\n @if (selectedTemplate()) {\n <ax-prefix>\n <ng-container\n [ngTemplateOutlet]=\"selectedTemplate()!\"\n [ngTemplateOutletContext]=\"{ $implicit: item }\"\n />\n </ax-prefix>\n }\n @if (!disabled() && !readonly()) {\n <ax-suffix>\n <button type=\"button\" tabindex=\"-1\" (click)=\"removeChip($event, item)\">\n <span class=\"ax-icon ax-icon-close\"></span>\n </button>\n </ax-suffix>\n }\n </ax-chips>\n }\n <input\n #triggerSearchInput\n type=\"text\"\n class=\"ax-input ax-lookup-trigger-search\"\n [class.ax-lookup-select-input]=\"!isEditableTrigger()\"\n [placeholder]=\"triggerSearchPlaceholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly() || !isEditableTrigger()\"\n [attr.inputmode]=\"isEditableTrigger() ? null : 'none'\"\n [value]=\"searchText()\"\n (input)=\"onTriggerSearchInput($any($event.target).value)\"\n (keydown)=\"onTriggerKeydown($event)\"\n (beforeinput)=\"onBeforeInput($event)\"\n (focus)=\"emitOnFocus($event)\"\n (blur)=\"emitOnBlur($event)\"\n />\n </div>\n } @else {\n <div class=\"ax-lookup-value\">\n @if (showSelectedTemplate()) {\n <div class=\"ax-lookup-selected-content\" aria-hidden=\"true\">\n <ng-container\n [ngTemplateOutlet]=\"selectedTemplate()!\"\n [ngTemplateOutletContext]=\"{ $implicit: selectedItems()[0] }\"\n />\n </div>\n }\n <input\n #triggerSearchInput\n type=\"text\"\n class=\"ax-input\"\n [class.ax-lookup-select-input]=\"!isEditableTrigger()\"\n [class.ax-lookup-input-overlay]=\"showSelectedTemplate()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly() || !isEditableTrigger()\"\n [attr.inputmode]=\"isEditableTrigger() ? null : 'none'\"\n [value]=\"searchText()\"\n (input)=\"onTriggerSearchInput($any($event.target).value)\"\n (keydown)=\"onTriggerKeydown($event)\"\n (beforeinput)=\"onBeforeInput($event)\"\n (focus)=\"emitOnFocus($event)\"\n (blur)=\"emitOnBlur($event)\"\n />\n </div>\n }\n\n @if (selectedValues().length > 0 && !disabled() && !readonly()) {\n <ng-content select=\"ax-clear-button\"></ng-content>\n }\n\n <button\n type=\"button\"\n class=\"ax-general-button-icon\"\n tabindex=\"-1\"\n [disabled]=\"disabled() || readonly()\"\n >\n <span\n class=\"ax-icon\"\n [class.ax-icon-chevron-down]=\"!expanded()\"\n [class.ax-icon-chevron-up]=\"expanded()\"\n ></span>\n </button>\n <ng-content select=\"ax-suffix\"></ng-content>\n</div>\n\n<ax-popover\n [target]=\"origin\"\n [openOn]=\"'manual'\"\n [closeOn]=\"isActionsheetStyle() ? 'manual' : 'clickOut'\"\n [closeOnScroll]=\"!isActionsheetStyle()\"\n [placement]=\"'bottom-start'\"\n [width]=\"isActionsheetStyle() ? '100%' : origin.offsetWidth + 'px'\"\n [adaptivityEnabled]=\"isActionsheetStyle()\"\n [disabled]=\"disabled() || readonly()\"\n (onClosed)=\"onPopoverClosed()\"\n>\n <div\n #popup\n class=\"ax-lookup-popup\"\n [class.ax-is-actionsheet]=\"isActionsheetStyle()\"\n [class.ax-is-alternate]=\"alternate()\"\n (keydown.escape)=\"close()\"\n >\n @if (isActionsheetStyle()) {\n <ax-header class=\"ax-solid\">\n <ax-title>{{ caption() || placeholder() || ('@acorex:selectbox.popover.title' | translate | async) }}</ax-title>\n @if (isMultiple()) {\n <ax-button\n class=\"ax-sm\"\n color=\"primary\"\n look=\"solid\"\n text=\"@acorex:common.actions.apply\"\n (onClick)=\"close()\"\n ></ax-button>\n } @else {\n <ax-close-button></ax-close-button>\n }\n </ax-header>\n }\n @if (isSheetSearchEnabled()) {\n <div class=\"ax-lookup-sheet-search\">\n <ax-search-box\n #sheetSearch\n class=\"ax-sm\"\n look=\"fill\"\n [autoSearch]=\"false\"\n [delayTime]=\"0\"\n [placeholder]=\"searchPlaceholder()\"\n (onValueChanged)=\"onSheetSearchInput()\"\n (onKeyUp)=\"onSheetSearchInput()\"\n (onKeyDown)=\"onSheetSearchKeydown($event)\"\n >\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n </div>\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]=\"resolvedTreeDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [nodeTemplate]=\"$any(itemTemplate())\"\n [emptyTemplate]=\"emptyTemplate()\"\n [filterKey]=\"treeFilterKey()\"\n [alternate]=\"alternate()\"\n (itemClick)=\"handleSinglePick($event)\"\n />\n }\n @case ('multi-select-tree') {\n <ax-lookup-multi-select-tree\n [dataSource]=\"resolvedTreeDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [selectionBehavior]=\"treeSelectionBehavior()\"\n [nodeTemplate]=\"$any(itemTemplate())\"\n [emptyTemplate]=\"emptyTemplate()\"\n [filterKey]=\"treeFilterKey()\"\n [alternate]=\"alternate()\"\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 @case ('multi-column-tree') {\n <ax-lookup-multi-column-tree\n [dataSource]=\"resolvedDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [parentField]=\"treeParentField()\"\n [hasChildrenField]=\"hasChildrenField()\"\n [selectedValues]=\"selectedValues()\"\n [itemHeight]=\"itemHeight()\"\n [maxVisibleItems]=\"maxVisibleItems()\"\n [columns]=\"columns()\"\n [itemTemplate]=\"itemTemplate()\"\n [emptyTemplate]=\"emptyTemplate()\"\n [loadingTemplate]=\"loadingTemplate()\"\n [alternate]=\"alternate()\"\n (itemClick)=\"handleSinglePick($event)\"\n />\n }\n }\n }\n <ng-content select=\"ax-footer\"></ng-content>\n </div>\n</ax-popover>\n<ng-content select=\"ax-validation-rule\"></ng-content>\n", styles: ["@layer properties;@layer components{ax-lookup{display:block;width:100%}ax-lookup .ax-editor-container{justify-content:flex-start;gap:calc(var(--spacing, .25rem) * 1)}ax-lookup .ax-lookup-trigger{cursor:pointer;-webkit-user-select:none;user-select:none}ax-lookup .ax-lookup-trigger-multiple{height:auto;min-height:calc(var(--spacing, .25rem) * 9);padding-block:calc(var(--spacing, .25rem) * 1)}ax-lookup .ax-lookup-value{position:relative;display:flex;min-width:calc(var(--spacing, .25rem) * 0);flex:1;align-items:center;overflow:hidden}ax-lookup .ax-lookup-select-input{cursor:pointer;caret-color:transparent;-webkit-user-select:none;user-select:none}ax-lookup .ax-lookup-selected-content{pointer-events:none;position:relative;z-index:0;display:flex;min-width:calc(var(--spacing, .25rem) * 0);flex:1;align-items:center;overflow:hidden}ax-lookup .ax-lookup-input-overlay{position:absolute;inset:calc(var(--spacing, .25rem) * 0);z-index:10;margin:calc(var(--spacing, .25rem) * 0)!important;height:100%;width:100%;border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding:calc(var(--spacing, .25rem) * 0)!important;color:transparent;caret-color:transparent}ax-lookup .ax-lookup-chips{display:flex;min-width:calc(var(--spacing, .25rem) * 0);flex:1;flex-wrap:wrap;align-items:center;gap:calc(var(--spacing, .25rem) * 1)}ax-lookup .ax-lookup-trigger-search{margin:calc(var(--spacing, .25rem) * 0)!important;height:calc(var(--spacing, .25rem) * 7.5);width:auto!important;min-width:calc(var(--spacing, .25rem) * 16);flex:1;flex-basis:calc(var(--spacing, .25rem) * 16)}ax-lookup .ax-lookup-placeholder{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){ax-lookup .ax-lookup-placeholder{color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 50%,transparent)}}ax-lookup ax-chips ax-prefix,ax-lookup ax-chips ax-suffix{padding:calc(var(--spacing, .25rem) * 0)!important}ax-lookup ax-chips ax-suffix button{display:flex;cursor:pointer;align-items:center;border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding:calc(var(--spacing, .25rem) * 0)}.ax-lookup-popup{box-sizing:border-box;display:flex;width:100%;max-width:100%;min-width:calc(var(--spacing, .25rem) * 0);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-title{min-width:calc(var(--spacing, .25rem) * 0);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;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-is-actionsheet>ax-header.ax-solid ax-button{flex-shrink:0}.ax-lookup-popup .ax-lookup-sheet-search{flex-shrink:0;border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:rgba(var(--ax-sys-color-border-lightest-surface));padding-inline:calc(var(--spacing, .25rem) * 3);padding-block:calc(var(--spacing, .25rem) * 2)}.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%;min-width:calc(var(--spacing, .25rem) * 0);overflow-x:hidden}.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-light-surface))}.ax-lookup-option-host.ax-state-alternate:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:rgba(var(--ax-sys-color-surface))}.ax-lookup-option-host:hover,.ax-lookup-option-host.ax-state-active{background-color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-option-host:hover,.ax-lookup-option-host.ax-state-active{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 10%,transparent)}}.ax-lookup-option-host.ax-state-alternate:hover,.ax-lookup-option-host.ax-state-alternate.ax-state-active{background-color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-option-host.ax-state-alternate:hover,.ax-lookup-option-host.ax-state-alternate.ax-state-active{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 15%,transparent)}}.ax-lookup-option-host.ax-state-selected,.ax-lookup-option-host.ax-state-selected:hover,.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate,.ax-lookup-option-host.ax-state-selected.ax-state-alternate:hover,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active{background-color:rgba(var(--ax-sys-color-primary-lightest-surface))}:is(.ax-lookup-option-host.ax-state-selected,.ax-lookup-option-host.ax-state-selected:hover,.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate,.ax-lookup-option-host.ax-state-selected.ax-state-alternate:hover,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active):where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:rgba(var(--ax-sys-color-primary-darkest-surface))}@supports (color: color-mix(in lab,red,red)){:is(.ax-lookup-option-host.ax-state-selected,.ax-lookup-option-host.ax-state-selected:hover,.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate,.ax-lookup-option-host.ax-state-selected.ax-state-alternate:hover,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active):where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-darkest-surface)) 25%,transparent)}}.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active{background-color:rgba(var(--ax-sys-color-primary-lightest-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-lightest-surface)) 80%,transparent)}}:is(.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active):where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:rgba(var(--ax-sys-color-primary-darkest-surface))}@supports (color: color-mix(in lab,red,red)){:is(.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active):where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-darkest-surface)) 40%,transparent)}}.ax-lookup-option-host.ax-lookup-option-multiple{display:flex;align-items:center;gap:calc(var(--spacing, .25rem) * 2)}.ax-lookup-option-host.ax-lookup-option-multiple:not(.ax-lookup-option){padding-inline:calc(var(--spacing, .25rem) * 3)}.ax-lookup-option-host .ax-lookup-checkbox{pointer-events:none;display:inline-flex;flex-shrink:0;align-items:center}.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-multiple{justify-content:flex-start}.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{margin-inline-start:auto;flex-shrink:0;color:rgba(var(--ax-sys-color-primary-surface))}ax-lookup-multi-column,ax-lookup-multi-column-tree,.ax-lookup-multi-column,.ax-lookup-multi-column-tree{display:block;min-height:calc(var(--spacing, .25rem) * 0);width:100%}:is(ax-lookup-multi-column,ax-lookup-multi-column-tree,.ax-lookup-multi-column,.ax-lookup-multi-column-tree) .ax-lookup-multi-column-table,:is(ax-lookup-multi-column,ax-lookup-multi-column-tree,.ax-lookup-multi-column,.ax-lookup-multi-column-tree) 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-tree,.ax-lookup-multi-column,.ax-lookup-multi-column-tree) 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-tree,.ax-lookup-multi-column,.ax-lookup-multi-column-tree) 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-tree,.ax-lookup-multi-column,.ax-lookup-multi-column-tree) 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)}.ax-lookup-tree .ax-tree-view-node{margin-block:0;border-radius:0}.ax-lookup-tree .ax-tree-view-node.ax-state-alternate{background-color:rgba(var(--ax-sys-color-light-surface))}.ax-lookup-tree .ax-tree-view-node.ax-state-alternate:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:rgba(var(--ax-sys-color-surface))}.ax-lookup-tree .ax-tree-view-node.ax-state-alternate:hover:not(.ax-dragging){background-color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-tree .ax-tree-view-node.ax-state-alternate:hover:not(.ax-dragging){background-color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 15%,transparent)}}.ax-lookup-tree .ax-tree-view-node.ax-tree-view-node-selected,.ax-lookup-tree .ax-tree-view-node.ax-state-alternate.ax-tree-view-node-selected{background-color:rgba(var(--ax-sys-color-primary-lightest-surface))}:is(.ax-lookup-tree .ax-tree-view-node.ax-tree-view-node-selected,.ax-lookup-tree .ax-tree-view-node.ax-state-alternate.ax-tree-view-node-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)){:is(.ax-lookup-tree .ax-tree-view-node.ax-tree-view-node-selected,.ax-lookup-tree .ax-tree-view-node.ax-state-alternate.ax-tree-view-node-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-tree .ax-tree-view-node.ax-tree-view-node-selected:hover:not(.ax-dragging),.ax-lookup-tree .ax-tree-view-node.ax-state-alternate.ax-tree-view-node-selected:hover:not(.ax-dragging){background-color:rgba(var(--ax-sys-color-primary-lightest-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-tree .ax-tree-view-node.ax-tree-view-node-selected:hover:not(.ax-dragging),.ax-lookup-tree .ax-tree-view-node.ax-state-alternate.ax-tree-view-node-selected:hover:not(.ax-dragging){background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-lightest-surface)) 80%,transparent)}}:is(.ax-lookup-tree .ax-tree-view-node.ax-tree-view-node-selected:hover:not(.ax-dragging),.ax-lookup-tree .ax-tree-view-node.ax-state-alternate.ax-tree-view-node-selected:hover:not(.ax-dragging)):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-tree .ax-tree-view-node.ax-tree-view-node-selected:hover:not(.ax-dragging),.ax-lookup-tree .ax-tree-view-node.ax-state-alternate.ax-tree-view-node-selected:hover:not(.ax-dragging)):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 .ax-editor-container.ax-fill ax-chips.ax-default.ax-fill-interactive{background-color:var(--color-lightest);color:var(--color-on-lightest);border-color:var(--color-border-lightest);border-color:rgba(var(--ax-sys-color-border-surface))}ax-lookup .ax-editor-container.ax-fill ax-chips.ax-default.ax-fill-interactive:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:var(--color-lighter);color:var(--color-on-lighter);border-color:var(--color-border-lighter)}ax-lookup .ax-editor-container.ax-fill ax-chips.ax-default.ax-fill-interactive:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){border-color:rgba(var(--ax-sys-color-border-light-surface))}ax-lookup .ax-editor-container.ax-fill ax-chips.ax-default.ax-fill-interactive:not(.ax-state-disabled):hover{background-color:var(--color-lighter);color:var(--color-on-lighter);border-color:var(--color-border-lighter)}ax-lookup .ax-editor-container.ax-fill ax-chips.ax-default.ax-fill-interactive:not(.ax-state-disabled):hover:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:var(--color-light);color:var(--color-on-light);border-color:var(--color-border-light)}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-inset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-inset-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-ring-color{syntax: \"*\"; inherits: false;}@property --tw-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-ring-color{syntax: \"*\"; inherits: false;}@property --tw-inset-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-ring-inset{syntax: \"*\"; inherits: false;}@property --tw-ring-offset-width{syntax: \"<length>\"; inherits: false; initial-value: 0px;}@property --tw-ring-offset-color{syntax: \"*\"; inherits: false; initial-value: #fff;}@property --tw-ring-offset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-leading{syntax: \"*\"; inherits: false;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid;--tw-shadow: 0 0 #0000;--tw-shadow-color: initial;--tw-shadow-alpha: 100%;--tw-inset-shadow: 0 0 #0000;--tw-inset-shadow-color: initial;--tw-inset-shadow-alpha: 100%;--tw-ring-color: initial;--tw-ring-shadow: 0 0 #0000;--tw-inset-ring-color: initial;--tw-inset-ring-shadow: 0 0 #0000;--tw-ring-inset: initial;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-offset-shadow: 0 0 #0000;--tw-leading: initial;--tw-font-weight: initial}}}\n/*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "component", type: AXChipsComponent, selector: "ax-chips", inputs: ["tabIndex", "color", "look", "text"], outputs: ["textChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i1$1.AXDecoratorClearButtonComponent, selector: "ax-clear-button", inputs: ["icon"] }, { 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: AXSearchBoxComponent, selector: "ax-search-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "class", "delayTime", "type", "autoSearch"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { 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", "emptyTemplate", "alternate", "filterKey"], outputs: ["itemClick"] }, { kind: "component", type: AXLookupMultiSelectTreeComponent, selector: "ax-lookup-multi-select-tree", inputs: ["dataSource", "valueField", "textField", "disabledField", "selectedValues", "selectionBehavior", "nodeTemplate", "emptyTemplate", "alternate", "filterKey"], 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: "component", type: AXLookupMultiColumnTreeComponent, selector: "ax-lookup-multi-column-tree", inputs: ["dataSource", "valueField", "textField", "disabledField", "parentField", "hasChildrenField", "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 }); }
1808
2819
  }
1809
2820
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupComponent, decorators: [{
1810
2821
  type: Component,
@@ -1812,20 +2823,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
1812
2823
  NgTemplateOutlet,
1813
2824
  AsyncPipe,
1814
2825
  AXTranslatorPipe,
2826
+ AXButtonComponent,
1815
2827
  AXChipsComponent,
1816
2828
  AXDecoratorModule,
1817
2829
  AXPopoverComponent,
2830
+ AXSearchBoxComponent,
1818
2831
  AXLookupDropDownListComponent,
1819
2832
  AXLookupMultiSelectComponent,
1820
2833
  AXLookupDropDownTreeComponent,
1821
2834
  AXLookupMultiSelectTreeComponent,
1822
2835
  AXLookupMultiColumnComponent,
2836
+ AXLookupMultiColumnTreeComponent,
1823
2837
  ], providers: [
1824
2838
  { provide: AXComponent, useExisting: AXLookupComponent },
1825
2839
  { provide: AXClearableComponent, useExisting: AXLookupComponent },
1826
2840
  { provide: AXClosableComponent, useExisting: AXLookupComponent },
1827
- ], template: "<div\n #origin\n class=\"ax-editor-container ax-{{ look() }} ax-default\"\n [class.ax-lookup-trigger]=\"!isEditableTrigger()\"\n [class.ax-lookup-trigger-multiple]=\"isMultiple()\"\n [class.ax-state-disabled]=\"disabled()\"\n [class.ax-state-readonly]=\"readonly()\"\n (click)=\"onTriggerClick()\"\n>\n <ng-content select=\"ax-prefix\"></ng-content>\n\n @if (isMultiple()) {\n <div class=\"ax-lookup-chips\">\n @for (item of selectedItems(); track trackSelectedKey(item)) {\n <ax-chips class=\"ax-sm\" color=\"primary\" look=\"twotone\" [text]=\"selectedTemplate() ? '' : getItemText(item)\">\n @if (selectedTemplate()) {\n <ax-prefix>\n <ng-container\n [ngTemplateOutlet]=\"selectedTemplate()!\"\n [ngTemplateOutletContext]=\"{ $implicit: item }\"\n />\n </ax-prefix>\n }\n @if (!disabled() && !readonly()) {\n <ax-suffix>\n <button type=\"button\" tabindex=\"-1\" (click)=\"removeChip($event, item)\">\n <span class=\"ax-icon ax-icon-close\"></span>\n </button>\n </ax-suffix>\n }\n </ax-chips>\n }\n <input\n #triggerSearchInput\n type=\"text\"\n class=\"ax-input ax-lookup-trigger-search\"\n [class.ax-lookup-select-input]=\"!isEditableTrigger()\"\n [placeholder]=\"triggerSearchPlaceholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly() || !isEditableTrigger()\"\n [attr.inputmode]=\"isEditableTrigger() ? null : 'none'\"\n [value]=\"searchText()\"\n (input)=\"onTriggerSearchInput($any($event.target).value)\"\n (keydown)=\"onTriggerKeydown($event)\"\n (beforeinput)=\"onBeforeInput($event)\"\n (focus)=\"emitOnFocus($event)\"\n (blur)=\"emitOnBlur($event)\"\n />\n </div>\n } @else {\n <div class=\"ax-lookup-value\">\n @if (showSelectedTemplate()) {\n <div class=\"ax-lookup-selected-content\" aria-hidden=\"true\">\n <ng-container\n [ngTemplateOutlet]=\"selectedTemplate()!\"\n [ngTemplateOutletContext]=\"{ $implicit: selectedItems()[0] }\"\n />\n </div>\n }\n <input\n #triggerSearchInput\n type=\"text\"\n class=\"ax-input\"\n [class.ax-lookup-select-input]=\"!isEditableTrigger()\"\n [class.ax-lookup-input-overlay]=\"showSelectedTemplate()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly() || !isEditableTrigger()\"\n [attr.inputmode]=\"isEditableTrigger() ? null : 'none'\"\n [value]=\"searchText()\"\n (input)=\"onTriggerSearchInput($any($event.target).value)\"\n (keydown)=\"onTriggerKeydown($event)\"\n (beforeinput)=\"onBeforeInput($event)\"\n (focus)=\"emitOnFocus($event)\"\n (blur)=\"emitOnBlur($event)\"\n />\n </div>\n }\n\n @if (selectedValues().length > 0 && !disabled() && !readonly()) {\n <ng-content select=\"ax-clear-button\"></ng-content>\n }\n\n <button\n type=\"button\"\n class=\"ax-general-button-icon\"\n tabindex=\"-1\"\n [disabled]=\"disabled() || readonly()\"\n >\n <span\n class=\"ax-icon\"\n [class.ax-icon-chevron-down]=\"!expanded()\"\n [class.ax-icon-chevron-up]=\"expanded()\"\n ></span>\n </button>\n <ng-content select=\"ax-suffix\"></ng-content>\n</div>\n\n<ax-popover\n [target]=\"origin\"\n [openOn]=\"'manual'\"\n [closeOn]=\"'clickOut'\"\n [placement]=\"'bottom-start'\"\n [width]=\"isActionsheetStyle() ? '100%' : origin.offsetWidth + 'px'\"\n [adaptivityEnabled]=\"isActionsheetStyle()\"\n [disabled]=\"disabled() || readonly()\"\n (onClosed)=\"onPopoverClosed()\"\n>\n <div class=\"ax-lookup-popup\" [class.ax-is-actionsheet]=\"isActionsheetStyle()\" [class.ax-is-alternate]=\"alternate()\" (keydown.escape)=\"close()\">\n @if (isActionsheetStyle()) {\n <ax-header class=\"ax-solid\">\n <ax-title>{{ caption() || placeholder() || ('@acorex:selectbox.popover.title' | translate | async) }}</ax-title>\n <ax-close-button [icon]=\"isMultiple() ? 'ax-icon ax-icon-check' : 'ax-icon ax-icon-close'\"></ax-close-button>\n </ax-header>\n }\n <ng-content select=\"ax-header\"></ng-content>\n @if (expanded()) {\n @switch (mode()) {\n @case ('drop-down-list') {\n <ax-lookup-drop-down-list\n [dataSource]=\"resolvedDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [itemHeight]=\"itemHeight()\"\n [maxVisibleItems]=\"maxVisibleItems()\"\n [itemTemplate]=\"itemTemplate()\"\n [emptyTemplate]=\"emptyTemplate()\"\n [loadingTemplate]=\"loadingTemplate()\"\n [alternate]=\"alternate()\"\n (itemClick)=\"handleSinglePick($event)\"\n (navigateOut)=\"onListNavigateOut($event)\"\n />\n }\n @case ('multi-select') {\n <ax-lookup-multi-select\n [dataSource]=\"resolvedDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [itemHeight]=\"itemHeight()\"\n [maxVisibleItems]=\"maxVisibleItems()\"\n [itemTemplate]=\"itemTemplate()\"\n [emptyTemplate]=\"emptyTemplate()\"\n [loadingTemplate]=\"loadingTemplate()\"\n [alternate]=\"alternate()\"\n (itemClick)=\"handleMultiToggle($event)\"\n (navigateOut)=\"onListNavigateOut($event)\"\n />\n }\n @case ('drop-down-tree') {\n <ax-lookup-drop-down-tree\n [dataSource]=\"treeDataSource()!\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [nodeTemplate]=\"$any(itemTemplate())\"\n (itemClick)=\"handleSinglePick($event)\"\n />\n }\n @case ('multi-select-tree') {\n <ax-lookup-multi-select-tree\n [dataSource]=\"treeDataSource()!\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [selectionBehavior]=\"treeSelectionBehavior()\"\n [nodeTemplate]=\"$any(itemTemplate())\"\n (selectionChange)=\"handleTreeSelectionChange($event)\"\n />\n }\n @case ('multi-column') {\n <ax-lookup-multi-column\n [dataSource]=\"resolvedDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [itemHeight]=\"itemHeight()\"\n [maxVisibleItems]=\"maxVisibleItems()\"\n [columns]=\"columns()\"\n [itemTemplate]=\"itemTemplate()\"\n [emptyTemplate]=\"emptyTemplate()\"\n [loadingTemplate]=\"loadingTemplate()\"\n [alternate]=\"alternate()\"\n (itemClick)=\"handleSinglePick($event)\"\n />\n }\n }\n }\n <ng-content select=\"ax-footer\"></ng-content>\n </div>\n</ax-popover>\n", styles: ["@layer properties;@layer components{ax-lookup{display:block;width:100%}ax-lookup .ax-editor-container{justify-content:flex-start;gap:calc(var(--spacing, .25rem) * 1)}ax-lookup .ax-lookup-trigger{cursor:pointer;-webkit-user-select:none;user-select:none}ax-lookup .ax-lookup-trigger-multiple{height:auto;min-height:calc(var(--spacing, .25rem) * 9);padding-block:calc(var(--spacing, .25rem) * 1)}ax-lookup .ax-lookup-value{position:relative;display:flex;min-width:calc(var(--spacing, .25rem) * 0);flex:1;align-items:center;overflow:hidden}ax-lookup .ax-lookup-select-input{cursor:pointer;caret-color:transparent;-webkit-user-select:none;user-select:none}ax-lookup .ax-lookup-selected-content{pointer-events:none;position:relative;z-index:0;display:flex;min-width:calc(var(--spacing, .25rem) * 0);flex:1;align-items:center;overflow:hidden}ax-lookup .ax-lookup-input-overlay{position:absolute;inset:calc(var(--spacing, .25rem) * 0);z-index:10;margin:calc(var(--spacing, .25rem) * 0)!important;height:100%;width:100%;border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding:calc(var(--spacing, .25rem) * 0)!important;color:transparent;caret-color:transparent}ax-lookup .ax-lookup-chips{display:flex;min-width:calc(var(--spacing, .25rem) * 0);flex:1;flex-wrap:wrap;align-items:center;gap:calc(var(--spacing, .25rem) * 1)}ax-lookup .ax-lookup-trigger-search{margin:calc(var(--spacing, .25rem) * 0)!important;height:calc(var(--spacing, .25rem) * 7.5);width:auto!important;min-width:calc(var(--spacing, .25rem) * 16);flex:1;flex-basis:calc(var(--spacing, .25rem) * 16)}ax-lookup .ax-lookup-placeholder{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){ax-lookup .ax-lookup-placeholder{color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 50%,transparent)}}ax-lookup ax-chips ax-prefix,ax-lookup ax-chips ax-suffix{padding:calc(var(--spacing, .25rem) * 0)!important}ax-lookup ax-chips ax-suffix button{display:flex;cursor:pointer;align-items:center;border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding:calc(var(--spacing, .25rem) * 0)}.ax-lookup-popup{box-sizing:border-box;display:flex;width:100%;flex-direction:column;overflow:hidden;border-radius:var(--ax-sys-border-radius);border-style:var(--tw-border-style);border-width:1px;border-color:rgba(var(--ax-sys-color-border-surface));background-color:rgba(var(--ax-sys-color-lightest-surface));--tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ax-lookup-popup:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:rgba(var(--ax-sys-color-darkest-surface))}.ax-lookup-popup.ax-is-actionsheet{border-bottom-right-radius:0;border-bottom-left-radius:0;--tw-shadow: 0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ax-lookup-popup.ax-is-actionsheet>ax-header.ax-solid{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:rgba(var(--ax-sys-color-border-lightest-surface))}.ax-lookup-popup.ax-is-actionsheet>ax-header.ax-solid .ax-icon-check{color:rgba(var(--ax-sys-color-primary-surface))}.ax-lookup-popup.ax-is-actionsheet>ax-header.ax-solid ax-title{font-size:var(--text-base, 1rem);line-height:var(--tw-leading, var(--text-base--line-height, 1.5 ));--tw-leading: calc(var(--spacing, .25rem) * 6);line-height:calc(var(--spacing, .25rem) * 6);--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500)}.ax-lookup-popup>ax-header:not(.ax-solid),.ax-lookup-popup>ax-footer{flex-shrink:0;border-color:rgba(var(--ax-sys-color-border-lightest-surface))}.ax-lookup-popup>ax-header:not(.ax-solid){border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.ax-lookup-popup>ax-footer{border-top-style:var(--tw-border-style);border-top-width:1px}.ax-lookup-viewport{width:100%}.ax-lookup-empty{display:flex;min-height:calc(var(--spacing, .25rem) * 12);width:100%;align-items:center;justify-content:center;padding-inline:calc(var(--spacing, .25rem) * 3);padding-block:calc(var(--spacing, .25rem) * 3);text-align:center;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-empty{color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 60%,transparent)}}.ax-lookup-option-host{box-sizing:border-box;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-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-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-inset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-inset-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-ring-color{syntax: \"*\"; inherits: false;}@property --tw-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-ring-color{syntax: \"*\"; inherits: false;}@property --tw-inset-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-ring-inset{syntax: \"*\"; inherits: false;}@property --tw-ring-offset-width{syntax: \"<length>\"; inherits: false; initial-value: 0px;}@property --tw-ring-offset-color{syntax: \"*\"; inherits: false; initial-value: #fff;}@property --tw-ring-offset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-leading{syntax: \"*\"; inherits: false;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid;--tw-shadow: 0 0 #0000;--tw-shadow-color: initial;--tw-shadow-alpha: 100%;--tw-inset-shadow: 0 0 #0000;--tw-inset-shadow-color: initial;--tw-inset-shadow-alpha: 100%;--tw-ring-color: initial;--tw-ring-shadow: 0 0 #0000;--tw-inset-ring-color: initial;--tw-inset-ring-shadow: 0 0 #0000;--tw-ring-inset: initial;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-offset-shadow: 0 0 #0000;--tw-leading: initial;--tw-font-weight: initial}}}\n/*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */\n"] }]
1828
- }], 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"] }], valueItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "valueItems", required: false }] }], onValueChanged: [{ type: i0.Output, args: ["onValueChanged"] }], onSelectionChanged: [{ type: i0.Output, args: ["onSelectionChanged"] }], onFocus: [{ type: i0.Output, args: ["onFocus"] }], onBlur: [{ type: i0.Output, args: ["onBlur"] }], onItemClick: [{ type: i0.Output, args: ["onItemClick"] }], onItemSelected: [{ type: i0.Output, args: ["onItemSelected"] }], onOpened: [{ type: i0.Output, args: ["onOpened"] }], onClosed: [{ type: i0.Output, args: ["onClosed"] }], popoverRef: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXPopoverComponent), { isSignal: true }] }], triggerSearchInput: [{ type: i0.ViewChild, args: ['triggerSearchInput', { isSignal: true }] }], listView: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXLookupListViewBase), { isSignal: true }] }] } });
2841
+ { provide: AXValuableComponent, useExisting: AXLookupComponent },
2842
+ ], template: "<div\n #origin\n class=\"ax-editor-container ax-{{ look() }} ax-default\"\n [class.ax-lookup-trigger]=\"!isEditableTrigger()\"\n [class.ax-lookup-trigger-multiple]=\"isMultiple()\"\n [class.ax-state-disabled]=\"disabled()\"\n [class.ax-state-readonly]=\"readonly()\"\n (click)=\"onTriggerClick()\"\n>\n <ng-content select=\"ax-prefix\"></ng-content>\n\n @if (isMultiple()) {\n <div class=\"ax-lookup-chips\">\n @for (item of selectedItems(); track trackSelectedKey(item)) {\n <ax-chips class=\"ax-sm\" look=\"fill\" [text]=\"selectedTemplate() ? '' : getItemText(item)\">\n @if (selectedTemplate()) {\n <ax-prefix>\n <ng-container\n [ngTemplateOutlet]=\"selectedTemplate()!\"\n [ngTemplateOutletContext]=\"{ $implicit: item }\"\n />\n </ax-prefix>\n }\n @if (!disabled() && !readonly()) {\n <ax-suffix>\n <button type=\"button\" tabindex=\"-1\" (click)=\"removeChip($event, item)\">\n <span class=\"ax-icon ax-icon-close\"></span>\n </button>\n </ax-suffix>\n }\n </ax-chips>\n }\n <input\n #triggerSearchInput\n type=\"text\"\n class=\"ax-input ax-lookup-trigger-search\"\n [class.ax-lookup-select-input]=\"!isEditableTrigger()\"\n [placeholder]=\"triggerSearchPlaceholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly() || !isEditableTrigger()\"\n [attr.inputmode]=\"isEditableTrigger() ? null : 'none'\"\n [value]=\"searchText()\"\n (input)=\"onTriggerSearchInput($any($event.target).value)\"\n (keydown)=\"onTriggerKeydown($event)\"\n (beforeinput)=\"onBeforeInput($event)\"\n (focus)=\"emitOnFocus($event)\"\n (blur)=\"emitOnBlur($event)\"\n />\n </div>\n } @else {\n <div class=\"ax-lookup-value\">\n @if (showSelectedTemplate()) {\n <div class=\"ax-lookup-selected-content\" aria-hidden=\"true\">\n <ng-container\n [ngTemplateOutlet]=\"selectedTemplate()!\"\n [ngTemplateOutletContext]=\"{ $implicit: selectedItems()[0] }\"\n />\n </div>\n }\n <input\n #triggerSearchInput\n type=\"text\"\n class=\"ax-input\"\n [class.ax-lookup-select-input]=\"!isEditableTrigger()\"\n [class.ax-lookup-input-overlay]=\"showSelectedTemplate()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly() || !isEditableTrigger()\"\n [attr.inputmode]=\"isEditableTrigger() ? null : 'none'\"\n [value]=\"searchText()\"\n (input)=\"onTriggerSearchInput($any($event.target).value)\"\n (keydown)=\"onTriggerKeydown($event)\"\n (beforeinput)=\"onBeforeInput($event)\"\n (focus)=\"emitOnFocus($event)\"\n (blur)=\"emitOnBlur($event)\"\n />\n </div>\n }\n\n @if (selectedValues().length > 0 && !disabled() && !readonly()) {\n <ng-content select=\"ax-clear-button\"></ng-content>\n }\n\n <button\n type=\"button\"\n class=\"ax-general-button-icon\"\n tabindex=\"-1\"\n [disabled]=\"disabled() || readonly()\"\n >\n <span\n class=\"ax-icon\"\n [class.ax-icon-chevron-down]=\"!expanded()\"\n [class.ax-icon-chevron-up]=\"expanded()\"\n ></span>\n </button>\n <ng-content select=\"ax-suffix\"></ng-content>\n</div>\n\n<ax-popover\n [target]=\"origin\"\n [openOn]=\"'manual'\"\n [closeOn]=\"isActionsheetStyle() ? 'manual' : 'clickOut'\"\n [closeOnScroll]=\"!isActionsheetStyle()\"\n [placement]=\"'bottom-start'\"\n [width]=\"isActionsheetStyle() ? '100%' : origin.offsetWidth + 'px'\"\n [adaptivityEnabled]=\"isActionsheetStyle()\"\n [disabled]=\"disabled() || readonly()\"\n (onClosed)=\"onPopoverClosed()\"\n>\n <div\n #popup\n class=\"ax-lookup-popup\"\n [class.ax-is-actionsheet]=\"isActionsheetStyle()\"\n [class.ax-is-alternate]=\"alternate()\"\n (keydown.escape)=\"close()\"\n >\n @if (isActionsheetStyle()) {\n <ax-header class=\"ax-solid\">\n <ax-title>{{ caption() || placeholder() || ('@acorex:selectbox.popover.title' | translate | async) }}</ax-title>\n @if (isMultiple()) {\n <ax-button\n class=\"ax-sm\"\n color=\"primary\"\n look=\"solid\"\n text=\"@acorex:common.actions.apply\"\n (onClick)=\"close()\"\n ></ax-button>\n } @else {\n <ax-close-button></ax-close-button>\n }\n </ax-header>\n }\n @if (isSheetSearchEnabled()) {\n <div class=\"ax-lookup-sheet-search\">\n <ax-search-box\n #sheetSearch\n class=\"ax-sm\"\n look=\"fill\"\n [autoSearch]=\"false\"\n [delayTime]=\"0\"\n [placeholder]=\"searchPlaceholder()\"\n (onValueChanged)=\"onSheetSearchInput()\"\n (onKeyUp)=\"onSheetSearchInput()\"\n (onKeyDown)=\"onSheetSearchKeydown($event)\"\n >\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n </div>\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]=\"resolvedTreeDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [nodeTemplate]=\"$any(itemTemplate())\"\n [emptyTemplate]=\"emptyTemplate()\"\n [filterKey]=\"treeFilterKey()\"\n [alternate]=\"alternate()\"\n (itemClick)=\"handleSinglePick($event)\"\n />\n }\n @case ('multi-select-tree') {\n <ax-lookup-multi-select-tree\n [dataSource]=\"resolvedTreeDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [selectionBehavior]=\"treeSelectionBehavior()\"\n [nodeTemplate]=\"$any(itemTemplate())\"\n [emptyTemplate]=\"emptyTemplate()\"\n [filterKey]=\"treeFilterKey()\"\n [alternate]=\"alternate()\"\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 @case ('multi-column-tree') {\n <ax-lookup-multi-column-tree\n [dataSource]=\"resolvedDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [parentField]=\"treeParentField()\"\n [hasChildrenField]=\"hasChildrenField()\"\n [selectedValues]=\"selectedValues()\"\n [itemHeight]=\"itemHeight()\"\n [maxVisibleItems]=\"maxVisibleItems()\"\n [columns]=\"columns()\"\n [itemTemplate]=\"itemTemplate()\"\n [emptyTemplate]=\"emptyTemplate()\"\n [loadingTemplate]=\"loadingTemplate()\"\n [alternate]=\"alternate()\"\n (itemClick)=\"handleSinglePick($event)\"\n />\n }\n }\n }\n <ng-content select=\"ax-footer\"></ng-content>\n </div>\n</ax-popover>\n<ng-content select=\"ax-validation-rule\"></ng-content>\n", styles: ["@layer properties;@layer components{ax-lookup{display:block;width:100%}ax-lookup .ax-editor-container{justify-content:flex-start;gap:calc(var(--spacing, .25rem) * 1)}ax-lookup .ax-lookup-trigger{cursor:pointer;-webkit-user-select:none;user-select:none}ax-lookup .ax-lookup-trigger-multiple{height:auto;min-height:calc(var(--spacing, .25rem) * 9);padding-block:calc(var(--spacing, .25rem) * 1)}ax-lookup .ax-lookup-value{position:relative;display:flex;min-width:calc(var(--spacing, .25rem) * 0);flex:1;align-items:center;overflow:hidden}ax-lookup .ax-lookup-select-input{cursor:pointer;caret-color:transparent;-webkit-user-select:none;user-select:none}ax-lookup .ax-lookup-selected-content{pointer-events:none;position:relative;z-index:0;display:flex;min-width:calc(var(--spacing, .25rem) * 0);flex:1;align-items:center;overflow:hidden}ax-lookup .ax-lookup-input-overlay{position:absolute;inset:calc(var(--spacing, .25rem) * 0);z-index:10;margin:calc(var(--spacing, .25rem) * 0)!important;height:100%;width:100%;border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding:calc(var(--spacing, .25rem) * 0)!important;color:transparent;caret-color:transparent}ax-lookup .ax-lookup-chips{display:flex;min-width:calc(var(--spacing, .25rem) * 0);flex:1;flex-wrap:wrap;align-items:center;gap:calc(var(--spacing, .25rem) * 1)}ax-lookup .ax-lookup-trigger-search{margin:calc(var(--spacing, .25rem) * 0)!important;height:calc(var(--spacing, .25rem) * 7.5);width:auto!important;min-width:calc(var(--spacing, .25rem) * 16);flex:1;flex-basis:calc(var(--spacing, .25rem) * 16)}ax-lookup .ax-lookup-placeholder{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){ax-lookup .ax-lookup-placeholder{color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 50%,transparent)}}ax-lookup ax-chips ax-prefix,ax-lookup ax-chips ax-suffix{padding:calc(var(--spacing, .25rem) * 0)!important}ax-lookup ax-chips ax-suffix button{display:flex;cursor:pointer;align-items:center;border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding:calc(var(--spacing, .25rem) * 0)}.ax-lookup-popup{box-sizing:border-box;display:flex;width:100%;max-width:100%;min-width:calc(var(--spacing, .25rem) * 0);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-title{min-width:calc(var(--spacing, .25rem) * 0);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;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-is-actionsheet>ax-header.ax-solid ax-button{flex-shrink:0}.ax-lookup-popup .ax-lookup-sheet-search{flex-shrink:0;border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:rgba(var(--ax-sys-color-border-lightest-surface));padding-inline:calc(var(--spacing, .25rem) * 3);padding-block:calc(var(--spacing, .25rem) * 2)}.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%;min-width:calc(var(--spacing, .25rem) * 0);overflow-x:hidden}.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-light-surface))}.ax-lookup-option-host.ax-state-alternate:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:rgba(var(--ax-sys-color-surface))}.ax-lookup-option-host:hover,.ax-lookup-option-host.ax-state-active{background-color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-option-host:hover,.ax-lookup-option-host.ax-state-active{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 10%,transparent)}}.ax-lookup-option-host.ax-state-alternate:hover,.ax-lookup-option-host.ax-state-alternate.ax-state-active{background-color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-option-host.ax-state-alternate:hover,.ax-lookup-option-host.ax-state-alternate.ax-state-active{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 15%,transparent)}}.ax-lookup-option-host.ax-state-selected,.ax-lookup-option-host.ax-state-selected:hover,.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate,.ax-lookup-option-host.ax-state-selected.ax-state-alternate:hover,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active{background-color:rgba(var(--ax-sys-color-primary-lightest-surface))}:is(.ax-lookup-option-host.ax-state-selected,.ax-lookup-option-host.ax-state-selected:hover,.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate,.ax-lookup-option-host.ax-state-selected.ax-state-alternate:hover,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active):where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:rgba(var(--ax-sys-color-primary-darkest-surface))}@supports (color: color-mix(in lab,red,red)){:is(.ax-lookup-option-host.ax-state-selected,.ax-lookup-option-host.ax-state-selected:hover,.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate,.ax-lookup-option-host.ax-state-selected.ax-state-alternate:hover,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active):where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-darkest-surface)) 25%,transparent)}}.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active{background-color:rgba(var(--ax-sys-color-primary-lightest-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-lightest-surface)) 80%,transparent)}}:is(.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active):where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:rgba(var(--ax-sys-color-primary-darkest-surface))}@supports (color: color-mix(in lab,red,red)){:is(.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active):where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-darkest-surface)) 40%,transparent)}}.ax-lookup-option-host.ax-lookup-option-multiple{display:flex;align-items:center;gap:calc(var(--spacing, .25rem) * 2)}.ax-lookup-option-host.ax-lookup-option-multiple:not(.ax-lookup-option){padding-inline:calc(var(--spacing, .25rem) * 3)}.ax-lookup-option-host .ax-lookup-checkbox{pointer-events:none;display:inline-flex;flex-shrink:0;align-items:center}.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-multiple{justify-content:flex-start}.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{margin-inline-start:auto;flex-shrink:0;color:rgba(var(--ax-sys-color-primary-surface))}ax-lookup-multi-column,ax-lookup-multi-column-tree,.ax-lookup-multi-column,.ax-lookup-multi-column-tree{display:block;min-height:calc(var(--spacing, .25rem) * 0);width:100%}:is(ax-lookup-multi-column,ax-lookup-multi-column-tree,.ax-lookup-multi-column,.ax-lookup-multi-column-tree) .ax-lookup-multi-column-table,:is(ax-lookup-multi-column,ax-lookup-multi-column-tree,.ax-lookup-multi-column,.ax-lookup-multi-column-tree) 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-tree,.ax-lookup-multi-column,.ax-lookup-multi-column-tree) 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-tree,.ax-lookup-multi-column,.ax-lookup-multi-column-tree) 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-tree,.ax-lookup-multi-column,.ax-lookup-multi-column-tree) 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)}.ax-lookup-tree .ax-tree-view-node{margin-block:0;border-radius:0}.ax-lookup-tree .ax-tree-view-node.ax-state-alternate{background-color:rgba(var(--ax-sys-color-light-surface))}.ax-lookup-tree .ax-tree-view-node.ax-state-alternate:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:rgba(var(--ax-sys-color-surface))}.ax-lookup-tree .ax-tree-view-node.ax-state-alternate:hover:not(.ax-dragging){background-color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-tree .ax-tree-view-node.ax-state-alternate:hover:not(.ax-dragging){background-color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 15%,transparent)}}.ax-lookup-tree .ax-tree-view-node.ax-tree-view-node-selected,.ax-lookup-tree .ax-tree-view-node.ax-state-alternate.ax-tree-view-node-selected{background-color:rgba(var(--ax-sys-color-primary-lightest-surface))}:is(.ax-lookup-tree .ax-tree-view-node.ax-tree-view-node-selected,.ax-lookup-tree .ax-tree-view-node.ax-state-alternate.ax-tree-view-node-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)){:is(.ax-lookup-tree .ax-tree-view-node.ax-tree-view-node-selected,.ax-lookup-tree .ax-tree-view-node.ax-state-alternate.ax-tree-view-node-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-tree .ax-tree-view-node.ax-tree-view-node-selected:hover:not(.ax-dragging),.ax-lookup-tree .ax-tree-view-node.ax-state-alternate.ax-tree-view-node-selected:hover:not(.ax-dragging){background-color:rgba(var(--ax-sys-color-primary-lightest-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-tree .ax-tree-view-node.ax-tree-view-node-selected:hover:not(.ax-dragging),.ax-lookup-tree .ax-tree-view-node.ax-state-alternate.ax-tree-view-node-selected:hover:not(.ax-dragging){background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-lightest-surface)) 80%,transparent)}}:is(.ax-lookup-tree .ax-tree-view-node.ax-tree-view-node-selected:hover:not(.ax-dragging),.ax-lookup-tree .ax-tree-view-node.ax-state-alternate.ax-tree-view-node-selected:hover:not(.ax-dragging)):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-tree .ax-tree-view-node.ax-tree-view-node-selected:hover:not(.ax-dragging),.ax-lookup-tree .ax-tree-view-node.ax-state-alternate.ax-tree-view-node-selected:hover:not(.ax-dragging)):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 .ax-editor-container.ax-fill ax-chips.ax-default.ax-fill-interactive{background-color:var(--color-lightest);color:var(--color-on-lightest);border-color:var(--color-border-lightest);border-color:rgba(var(--ax-sys-color-border-surface))}ax-lookup .ax-editor-container.ax-fill ax-chips.ax-default.ax-fill-interactive:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:var(--color-lighter);color:var(--color-on-lighter);border-color:var(--color-border-lighter)}ax-lookup .ax-editor-container.ax-fill ax-chips.ax-default.ax-fill-interactive:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){border-color:rgba(var(--ax-sys-color-border-light-surface))}ax-lookup .ax-editor-container.ax-fill ax-chips.ax-default.ax-fill-interactive:not(.ax-state-disabled):hover{background-color:var(--color-lighter);color:var(--color-on-lighter);border-color:var(--color-border-lighter)}ax-lookup .ax-editor-container.ax-fill ax-chips.ax-default.ax-fill-interactive:not(.ax-state-disabled):hover:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:var(--color-light);color:var(--color-on-light);border-color:var(--color-border-light)}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-inset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-inset-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-ring-color{syntax: \"*\"; inherits: false;}@property --tw-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-ring-color{syntax: \"*\"; inherits: false;}@property --tw-inset-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-ring-inset{syntax: \"*\"; inherits: false;}@property --tw-ring-offset-width{syntax: \"<length>\"; inherits: false; initial-value: 0px;}@property --tw-ring-offset-color{syntax: \"*\"; inherits: false; initial-value: #fff;}@property --tw-ring-offset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-leading{syntax: \"*\"; inherits: false;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid;--tw-shadow: 0 0 #0000;--tw-shadow-color: initial;--tw-shadow-alpha: 100%;--tw-inset-shadow: 0 0 #0000;--tw-inset-shadow-color: initial;--tw-inset-shadow-alpha: 100%;--tw-ring-color: initial;--tw-ring-shadow: 0 0 #0000;--tw-inset-ring-color: initial;--tw-inset-ring-shadow: 0 0 #0000;--tw-ring-inset: initial;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-offset-shadow: 0 0 #0000;--tw-leading: initial;--tw-font-weight: initial}}}\n/*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */\n"] }]
2843
+ }], ctorParameters: () => [], propDecorators: { name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], dataSource: [{ type: i0.Input, args: [{ isSignal: true, alias: "dataSource", required: false }] }], treeDataSource: [{ type: i0.Input, args: [{ isSignal: true, alias: "treeDataSource", required: false }] }], valueField: [{ type: i0.Input, args: [{ isSignal: true, alias: "valueField", required: false }] }], textField: [{ type: i0.Input, args: [{ isSignal: true, alias: "textField", required: false }] }], disabledField: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabledField", required: false }] }], columns: [{ type: i0.Input, args: [{ isSignal: true, alias: "columns", required: false }] }], treeParentField: [{ type: i0.Input, args: [{ isSignal: true, alias: "treeParentField", required: false }] }], hasChildrenField: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasChildrenField", required: false }] }], searchable: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchable", required: false }] }], adaptivityEnabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "adaptivityEnabled", required: false }] }], caption: [{ type: i0.Input, args: [{ isSignal: true, alias: "caption", required: false }] }], alternate: [{ type: i0.Input, args: [{ isSignal: true, alias: "alternate", required: false }] }], searchPlaceholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchPlaceholder", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], look: [{ type: i0.Input, args: [{ isSignal: true, alias: "look", required: false }] }, { type: i0.Output, args: ["lookChange"] }], itemHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemHeight", required: false }] }], maxVisibleItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxVisibleItems", required: false }] }], treeSelectionBehavior: [{ type: i0.Input, args: [{ isSignal: true, alias: "treeSelectionBehavior", required: false }] }], itemTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemTemplate", required: false }] }], selectedTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedTemplate", required: false }] }], emptyTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "emptyTemplate", required: false }] }], loadingTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "loadingTemplate", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], valueItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "valueItems", required: false }] }], onValueChanged: [{ type: i0.Output, args: ["onValueChanged"] }], onSelectionChanged: [{ type: i0.Output, args: ["onSelectionChanged"] }], onFocus: [{ type: i0.Output, args: ["onFocus"] }], onBlur: [{ type: i0.Output, args: ["onBlur"] }], onItemClick: [{ type: i0.Output, args: ["onItemClick"] }], onItemSelected: [{ type: i0.Output, args: ["onItemSelected"] }], onOpened: [{ type: i0.Output, args: ["onOpened"] }], onClosed: [{ type: i0.Output, args: ["onClosed"] }], popoverRef: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXPopoverComponent), { isSignal: true }] }], originRef: [{ type: i0.ViewChild, args: ['origin', { isSignal: true }] }], popupRef: [{ type: i0.ViewChild, args: ['popup', { isSignal: true }] }], triggerSearchInput: [{ type: i0.ViewChild, args: ['triggerSearchInput', { isSignal: true }] }], listView: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXLookupListViewBase), { isSignal: true }] }], dropDownTreeView: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXLookupDropDownTreeComponent), { isSignal: true }] }], multiSelectTreeView: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXLookupMultiSelectTreeComponent), { isSignal: true }] }], sheetSearchRef: [{ type: i0.ViewChild, args: ['sheetSearch', { isSignal: true }] }] } });
1829
2844
 
1830
2845
  class AXLookupModule {
1831
2846
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
@@ -1834,18 +2849,21 @@ class AXLookupModule {
1834
2849
  AXLookupMultiSelectComponent,
1835
2850
  AXLookupDropDownTreeComponent,
1836
2851
  AXLookupMultiSelectTreeComponent,
1837
- AXLookupMultiColumnComponent], exports: [AXLookupComponent,
2852
+ AXLookupMultiColumnComponent,
2853
+ AXLookupMultiColumnTreeComponent], exports: [AXLookupComponent,
1838
2854
  AXLookupDropDownListComponent,
1839
2855
  AXLookupMultiSelectComponent,
1840
2856
  AXLookupDropDownTreeComponent,
1841
2857
  AXLookupMultiSelectTreeComponent,
1842
- AXLookupMultiColumnComponent] }); }
2858
+ AXLookupMultiColumnComponent,
2859
+ AXLookupMultiColumnTreeComponent] }); }
1843
2860
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupModule, imports: [AXLookupComponent,
1844
2861
  AXLookupDropDownListComponent,
1845
2862
  AXLookupMultiSelectComponent,
1846
2863
  AXLookupDropDownTreeComponent,
1847
2864
  AXLookupMultiSelectTreeComponent,
1848
- AXLookupMultiColumnComponent] }); }
2865
+ AXLookupMultiColumnComponent,
2866
+ AXLookupMultiColumnTreeComponent] }); }
1849
2867
  }
1850
2868
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupModule, decorators: [{
1851
2869
  type: NgModule,
@@ -1857,6 +2875,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
1857
2875
  AXLookupDropDownTreeComponent,
1858
2876
  AXLookupMultiSelectTreeComponent,
1859
2877
  AXLookupMultiColumnComponent,
2878
+ AXLookupMultiColumnTreeComponent,
1860
2879
  ],
1861
2880
  exports: [
1862
2881
  AXLookupComponent,
@@ -1865,6 +2884,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
1865
2884
  AXLookupDropDownTreeComponent,
1866
2885
  AXLookupMultiSelectTreeComponent,
1867
2886
  AXLookupMultiColumnComponent,
2887
+ AXLookupMultiColumnTreeComponent,
1868
2888
  ],
1869
2889
  }]
1870
2890
  }] });
@@ -1873,5 +2893,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
1873
2893
  * Generated bundle index. Do not edit.
1874
2894
  */
1875
2895
 
1876
- export { AXLookupComponent, AXLookupDropDownListComponent, AXLookupDropDownTreeComponent, AXLookupModule, AXLookupMultiColumnComponent, AXLookupMultiSelectComponent, AXLookupMultiSelectTreeComponent };
2896
+ export { AXLookupComponent, AXLookupDropDownListComponent, AXLookupDropDownTreeComponent, AXLookupModule, AXLookupMultiColumnComponent, AXLookupMultiColumnTreeComponent, AXLookupMultiSelectComponent, AXLookupMultiSelectTreeComponent };
1877
2897
  //# sourceMappingURL=acorex-components-lookup.mjs.map