@acorex/components 22.1.0-next.9 → 22.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) 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-audio-wave.mjs +15 -0
  4. package/fesm2022/acorex-components-audio-wave.mjs.map +1 -1
  5. package/fesm2022/acorex-components-calendar.mjs +321 -118
  6. package/fesm2022/acorex-components-calendar.mjs.map +1 -1
  7. package/fesm2022/acorex-components-combo-box.mjs +259 -37
  8. package/fesm2022/acorex-components-combo-box.mjs.map +1 -1
  9. package/fesm2022/acorex-components-conversation-acorex-components-conversation-BtkyQUlh.mjs +16548 -0
  10. package/fesm2022/acorex-components-conversation-acorex-components-conversation-BtkyQUlh.mjs.map +1 -0
  11. package/fesm2022/acorex-components-conversation-composer-action-choice-dialog.component-D4ca9Mvt.mjs +51 -0
  12. package/fesm2022/acorex-components-conversation-composer-action-choice-dialog.component-D4ca9Mvt.mjs.map +1 -0
  13. package/fesm2022/acorex-components-conversation-image-picker-editor-dialog.component-QVs1XWYf.mjs +85 -0
  14. package/fesm2022/acorex-components-conversation-image-picker-editor-dialog.component-QVs1XWYf.mjs.map +1 -0
  15. package/fesm2022/{acorex-components-conversation-open-composer-picker-for-files-BuNEjswI.mjs → acorex-components-conversation-open-composer-picker-for-files-BKKO_8x6.mjs} +7 -20
  16. package/fesm2022/acorex-components-conversation-open-composer-picker-for-files-BKKO_8x6.mjs.map +1 -0
  17. package/fesm2022/acorex-components-conversation-picker-rename-file-dialog.component-BNKFb5yO.mjs +65 -0
  18. package/fesm2022/acorex-components-conversation-picker-rename-file-dialog.component-BNKFb5yO.mjs.map +1 -0
  19. package/fesm2022/acorex-components-conversation.mjs +1 -17608
  20. package/fesm2022/acorex-components-conversation.mjs.map +1 -1
  21. package/fesm2022/acorex-components-data-table.mjs +57 -23
  22. package/fesm2022/acorex-components-data-table.mjs.map +1 -1
  23. package/fesm2022/acorex-components-decorators.mjs +2 -2
  24. package/fesm2022/acorex-components-decorators.mjs.map +1 -1
  25. package/fesm2022/acorex-components-dropdown.mjs +2 -2
  26. package/fesm2022/acorex-components-dropdown.mjs.map +1 -1
  27. package/fesm2022/acorex-components-fab.mjs +5 -5
  28. package/fesm2022/acorex-components-fab.mjs.map +1 -1
  29. package/fesm2022/acorex-components-image-editor.mjs +600 -409
  30. package/fesm2022/acorex-components-image-editor.mjs.map +1 -1
  31. package/fesm2022/acorex-components-lookup.mjs +1281 -177
  32. package/fesm2022/acorex-components-lookup.mjs.map +1 -1
  33. package/fesm2022/acorex-components-menu.mjs +11 -5
  34. package/fesm2022/acorex-components-menu.mjs.map +1 -1
  35. package/fesm2022/acorex-components-notification.mjs +6 -6
  36. package/fesm2022/acorex-components-notification.mjs.map +1 -1
  37. package/fesm2022/acorex-components-popover.mjs +33 -0
  38. package/fesm2022/acorex-components-popover.mjs.map +1 -1
  39. package/fesm2022/acorex-components-rail-navigation.mjs +2 -2
  40. package/fesm2022/acorex-components-rail-navigation.mjs.map +1 -1
  41. package/fesm2022/acorex-components-range-slider.mjs +2 -2
  42. package/fesm2022/acorex-components-range-slider.mjs.map +1 -1
  43. package/fesm2022/acorex-components-select-box.mjs +38 -11
  44. package/fesm2022/acorex-components-select-box.mjs.map +1 -1
  45. package/fesm2022/acorex-components-tabs.mjs +2 -2
  46. package/fesm2022/acorex-components-tabs.mjs.map +1 -1
  47. package/fesm2022/acorex-components-tree-view.mjs +52 -4
  48. package/fesm2022/acorex-components-tree-view.mjs.map +1 -1
  49. package/lookup/README.md +19 -8
  50. package/package.json +4 -3
  51. package/types/acorex-components-audio-wave.d.ts +3 -0
  52. package/types/acorex-components-calendar.d.ts +41 -9
  53. package/types/acorex-components-combo-box.d.ts +50 -10
  54. package/types/acorex-components-conversation.d.ts +1232 -1782
  55. package/types/acorex-components-data-table.d.ts +12 -2
  56. package/types/acorex-components-image-editor.d.ts +54 -49
  57. package/types/acorex-components-lookup.d.ts +290 -73
  58. package/types/acorex-components-popover.d.ts +8 -0
  59. package/types/acorex-components-select-box.d.ts +11 -0
  60. package/types/acorex-components-tree-view.d.ts +22 -2
  61. package/fesm2022/acorex-components-conversation-composer-action-choice-dialog.component-DCcRJYfF.mjs +0 -50
  62. package/fesm2022/acorex-components-conversation-composer-action-choice-dialog.component-DCcRJYfF.mjs.map +0 -1
  63. package/fesm2022/acorex-components-conversation-open-composer-picker-for-files-BuNEjswI.mjs.map +0 -1
@@ -1,27 +1,175 @@
1
- import { AXListDataSource, AXDataSource, NXValueComponent, convertArrayToDataSource, AXComponent, AXClearableComponent, AXClosableComponent, AXValuableComponent } 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, booleanAttribute, linkedSignal, afterRenderEffect, NgModule } from '@angular/core';
11
13
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
12
14
  import * as i2 from '@acorex/cdk/list-navigation';
13
15
  import { AXListNavigationDirective, AXListNavigationItemDirective, AXListNavigationModule } from '@acorex/cdk/list-navigation';
16
+ import { AXHighlightTextComponent } from '@acorex/cdk/highlight';
14
17
  import * as i1 from '@angular/cdk/scrolling';
15
18
  import { CdkVirtualScrollViewport, ScrollingModule } from '@angular/cdk/scrolling';
16
19
  import { AXTreeViewComponent } from '@acorex/components/tree-view';
17
20
  import { AXDataTableComponent, AXDataTableTextColumnComponent } from '@acorex/components/data-table';
18
21
  import { fromEvent, auditTime } from 'rxjs';
22
+ import { AXCheckBoxComponent } from '@acorex/components/check-box';
23
+
24
+ /**
25
+ * Converts a drop-down-tree datasource (nested array or lazy callback) into an
26
+ * `AXDataSource` that a multi-column data table can load and expand.
27
+ */
28
+ function createLookupTreeTableDataSource(source, options) {
29
+ const isCallback = typeof source === 'function';
30
+ return new AXDataSource({
31
+ pageSize: 8,
32
+ key: options.valueField,
33
+ load: (query) => loadTreeTableRows(source, options, query, isCallback),
34
+ byKey: (key) => findTreeTableItem(source, options.valueField, key),
35
+ });
36
+ }
37
+ async function loadTreeTableRows(source, options, query, isCallback) {
38
+ const parentFilter = query.filter?.field === options.parentField ? query.filter : undefined;
39
+ const textFilter = query.filter && query.filter.field !== options.parentField ? query.filter : undefined;
40
+ if (parentFilter) {
41
+ const children = await loadChildren(source, options, parentFilter.value, isCallback);
42
+ return { items: children, total: children.length };
43
+ }
44
+ const roots = mapTreeNodes(await loadRoots(source, isCallback), options);
45
+ const items = textFilter ? filterTreeNodes(roots, options.textField, String(textFilter.value ?? '')) : roots;
46
+ return { items, total: items.length };
47
+ }
48
+ async function loadRoots(source, isCallback) {
49
+ if (!isCallback) {
50
+ return source ?? [];
51
+ }
52
+ return (await source()) ?? [];
53
+ }
54
+ async function loadChildren(source, options, parentId, isCallback) {
55
+ if (isCallback) {
56
+ const nodes = (await source(String(parentId))) ?? [];
57
+ return mapTreeNodes(nodes, options);
58
+ }
59
+ const parent = findTreeNode(source, options.valueField, parentId);
60
+ const children = Array.isArray(parent?.['children']) ? parent['children'] : [];
61
+ return mapTreeNodes(children, options);
62
+ }
63
+ function mapTreeNodes(nodes, options) {
64
+ return nodes.map((node) => mapTreeNode(node, options));
65
+ }
66
+ function mapTreeNode(node, options) {
67
+ const rawChildren = node['children'];
68
+ const children = Array.isArray(rawChildren) ? mapTreeNodes(rawChildren, options) : undefined;
69
+ const childrenCount = node['childrenCount'];
70
+ const hasChildren = (children?.length ?? 0) > 0 ||
71
+ (typeof childrenCount === 'number' && childrenCount > 0) ||
72
+ node['hasChild'] === true ||
73
+ node['hasChildren'] === true;
74
+ return {
75
+ ...node,
76
+ [options.hasChildrenField]: hasChildren,
77
+ ...(children && children.length > 0 ? { children } : {}),
78
+ };
79
+ }
80
+ /**
81
+ * Recursively filters a nested tree by `textField` (case-insensitive contains).
82
+ * A node is kept if it matches or any descendant matches. Matching parents keep
83
+ * all children. Every kept ancestor is a new object with `expanded: true` so
84
+ * nested hits are visible without mutating the original tree.
85
+ */
86
+ function filterTreeNodes(nodes, textField, query) {
87
+ const needle = query.trim().toLowerCase();
88
+ if (!needle) {
89
+ return nodes;
90
+ }
91
+ const result = [];
92
+ for (const node of nodes) {
93
+ const rawChildren = node['children'];
94
+ const nested = Array.isArray(rawChildren) ? rawChildren : undefined;
95
+ const children = nested ? filterTreeNodes(nested, textField, needle) : undefined;
96
+ const selfMatch = String(node[textField] ?? '')
97
+ .toLowerCase()
98
+ .includes(needle);
99
+ if (selfMatch) {
100
+ result.push({
101
+ ...node,
102
+ ...(nested && nested.length > 0 ? { children: cloneTreeNodes(nested), expanded: true } : {}),
103
+ });
104
+ }
105
+ else if (children && children.length > 0) {
106
+ result.push({
107
+ ...node,
108
+ children,
109
+ expanded: true,
110
+ });
111
+ }
112
+ }
113
+ return result;
114
+ }
115
+ function cloneTreeNodes(nodes) {
116
+ return nodes.map((node) => {
117
+ const raw = node['children'];
118
+ const children = Array.isArray(raw) && raw.length > 0 ? cloneTreeNodes(raw) : undefined;
119
+ return children ? { ...node, children } : { ...node };
120
+ });
121
+ }
122
+ /** Immutable copy of a nested tree so tree-view mutations cannot poison the source. */
123
+ function cloneLookupTreeNodes(nodes) {
124
+ return cloneTreeNodes(nodes);
125
+ }
126
+ /** Depth-first flattening of nested `children` arrays. */
127
+ function flattenTreeNodes(nodes) {
128
+ const result = [];
129
+ for (const node of nodes) {
130
+ result.push(node);
131
+ const children = node['children'];
132
+ if (Array.isArray(children)) {
133
+ result.push(...flattenTreeNodes(children));
134
+ }
135
+ }
136
+ return result;
137
+ }
138
+ function findTreeTableItem(source, valueField, key) {
139
+ if (typeof source === 'function' || !Array.isArray(source)) {
140
+ return undefined;
141
+ }
142
+ return findTreeNode(source, valueField, key) ?? undefined;
143
+ }
144
+ function findTreeNode(nodes, valueField, key) {
145
+ for (const node of nodes) {
146
+ if (String(node[valueField]) === String(key)) {
147
+ return node;
148
+ }
149
+ const children = node['children'];
150
+ if (Array.isArray(children)) {
151
+ const found = findTreeNode(children, valueField, key);
152
+ if (found) {
153
+ return found;
154
+ }
155
+ }
156
+ }
157
+ return null;
158
+ }
19
159
 
20
160
  /**
21
161
  * Shared `AXDataSource` + CDK virtual scroll plumbing for the list-based lookup views
22
162
  * (`ax-lookup-drop-down-list`, `ax-lookup-multi-select`).
23
163
  */
24
164
  class AXLookupListViewBase {
165
+ /** Whether the filtered datasource currently has no items. */
166
+ hasNoMatches() {
167
+ return this.isEmpty();
168
+ }
169
+ /** Number of items in the current filtered result set. */
170
+ matchCount() {
171
+ return this.totalCount();
172
+ }
25
173
  #ngZone;
26
174
  constructor() {
27
175
  /**
@@ -60,7 +208,9 @@ class AXLookupListViewBase {
60
208
  this.maxVisibleItems = input(8, /* @ts-ignore */
61
209
  ...(ngDevMode ? [{ debugName: "maxVisibleItems" }] : /* istanbul ignore next */ []));
62
210
  /**
63
- * Custom template rendered for each item. Context: `$implicit` is the item.
211
+ * Custom template rendered for each item. Context: `$implicit` is the item;
212
+ * `highlightText` is the active search query when result highlighting is enabled.
213
+ * Default option chrome is not applied on top of the template.
64
214
  */
65
215
  this.itemTemplate = input(undefined, /* @ts-ignore */
66
216
  ...(ngDevMode ? [{ debugName: "itemTemplate" }] : /* istanbul ignore next */ []));
@@ -79,6 +229,11 @@ class AXLookupListViewBase {
79
229
  */
80
230
  this.alternate = input(false, /* @ts-ignore */
81
231
  ...(ngDevMode ? [{ debugName: "alternate" }] : /* istanbul ignore next */ []));
232
+ /**
233
+ * When set, matching characters in the default option label are highlighted.
234
+ */
235
+ this.highlightText = input('', /* @ts-ignore */
236
+ ...(ngDevMode ? [{ debugName: "highlightText" }] : /* istanbul ignore next */ []));
82
237
  /**
83
238
  * Emitted when the user picks (or toggles) an item.
84
239
  */
@@ -226,11 +381,11 @@ class AXLookupListViewBase {
226
381
  nav?.navigateTo(item);
227
382
  }
228
383
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupListViewBase, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
229
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "22.0.8", type: AXLookupListViewBase, isStandalone: true, inputs: { dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: true, transformFunction: null }, valueField: { classPropertyName: "valueField", publicName: "valueField", isSignal: true, isRequired: false, transformFunction: null }, textField: { classPropertyName: "textField", publicName: "textField", isSignal: true, isRequired: false, transformFunction: null }, disabledField: { classPropertyName: "disabledField", publicName: "disabledField", isSignal: true, isRequired: false, transformFunction: null }, selectedValues: { classPropertyName: "selectedValues", publicName: "selectedValues", isSignal: true, isRequired: false, transformFunction: null }, itemHeight: { classPropertyName: "itemHeight", publicName: "itemHeight", isSignal: true, isRequired: false, transformFunction: null }, maxVisibleItems: { classPropertyName: "maxVisibleItems", publicName: "maxVisibleItems", isSignal: true, isRequired: false, transformFunction: null }, itemTemplate: { classPropertyName: "itemTemplate", publicName: "itemTemplate", isSignal: true, isRequired: false, transformFunction: null }, emptyTemplate: { classPropertyName: "emptyTemplate", publicName: "emptyTemplate", isSignal: true, isRequired: false, transformFunction: null }, loadingTemplate: { classPropertyName: "loadingTemplate", publicName: "loadingTemplate", isSignal: true, isRequired: false, transformFunction: null }, alternate: { classPropertyName: "alternate", publicName: "alternate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemClick: "itemClick", navigateOut: "navigateOut" }, viewQueries: [{ propertyName: "viewportRef", first: true, predicate: CdkVirtualScrollViewport, descendants: true, isSignal: true }, { propertyName: "listNavigation", first: true, predicate: AXListNavigationDirective, descendants: true, isSignal: true }, { propertyName: "navItems", predicate: AXListNavigationItemDirective, descendants: true, isSignal: true }], ngImport: i0 }); }
384
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "22.0.8", type: AXLookupListViewBase, isStandalone: true, inputs: { dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: true, transformFunction: null }, valueField: { classPropertyName: "valueField", publicName: "valueField", isSignal: true, isRequired: false, transformFunction: null }, textField: { classPropertyName: "textField", publicName: "textField", isSignal: true, isRequired: false, transformFunction: null }, disabledField: { classPropertyName: "disabledField", publicName: "disabledField", isSignal: true, isRequired: false, transformFunction: null }, selectedValues: { classPropertyName: "selectedValues", publicName: "selectedValues", isSignal: true, isRequired: false, transformFunction: null }, itemHeight: { classPropertyName: "itemHeight", publicName: "itemHeight", isSignal: true, isRequired: false, transformFunction: null }, maxVisibleItems: { classPropertyName: "maxVisibleItems", publicName: "maxVisibleItems", isSignal: true, isRequired: false, transformFunction: null }, itemTemplate: { classPropertyName: "itemTemplate", publicName: "itemTemplate", isSignal: true, isRequired: false, transformFunction: null }, emptyTemplate: { classPropertyName: "emptyTemplate", publicName: "emptyTemplate", isSignal: true, isRequired: false, transformFunction: null }, loadingTemplate: { classPropertyName: "loadingTemplate", publicName: "loadingTemplate", isSignal: true, isRequired: false, transformFunction: null }, alternate: { classPropertyName: "alternate", publicName: "alternate", isSignal: true, isRequired: false, transformFunction: null }, highlightText: { classPropertyName: "highlightText", publicName: "highlightText", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemClick: "itemClick", navigateOut: "navigateOut" }, viewQueries: [{ propertyName: "viewportRef", first: true, predicate: CdkVirtualScrollViewport, descendants: true, isSignal: true }, { propertyName: "listNavigation", first: true, predicate: AXListNavigationDirective, descendants: true, isSignal: true }, { propertyName: "navItems", predicate: AXListNavigationItemDirective, descendants: true, isSignal: true }], ngImport: i0 }); }
230
385
  }
231
386
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupListViewBase, decorators: [{
232
387
  type: Directive
233
- }], ctorParameters: () => [], propDecorators: { dataSource: [{ type: i0.Input, args: [{ isSignal: true, alias: "dataSource", required: true }] }], valueField: [{ type: i0.Input, args: [{ isSignal: true, alias: "valueField", required: false }] }], textField: [{ type: i0.Input, args: [{ isSignal: true, alias: "textField", required: false }] }], disabledField: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabledField", required: false }] }], selectedValues: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedValues", required: false }] }], itemHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemHeight", required: false }] }], maxVisibleItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxVisibleItems", required: false }] }], itemTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemTemplate", required: false }] }], emptyTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "emptyTemplate", required: false }] }], loadingTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "loadingTemplate", required: false }] }], alternate: [{ type: i0.Input, args: [{ isSignal: true, alias: "alternate", required: false }] }], itemClick: [{ type: i0.Output, args: ["itemClick"] }], navigateOut: [{ type: i0.Output, args: ["navigateOut"] }], viewportRef: [{ type: i0.ViewChild, args: [i0.forwardRef(() => CdkVirtualScrollViewport), { isSignal: true }] }], listNavigation: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXListNavigationDirective), { isSignal: true }] }], navItems: [{ type: i0.ViewChildren, args: [i0.forwardRef(() => AXListNavigationItemDirective), { isSignal: true }] }] } });
388
+ }], ctorParameters: () => [], propDecorators: { dataSource: [{ type: i0.Input, args: [{ isSignal: true, alias: "dataSource", required: true }] }], valueField: [{ type: i0.Input, args: [{ isSignal: true, alias: "valueField", required: false }] }], textField: [{ type: i0.Input, args: [{ isSignal: true, alias: "textField", required: false }] }], disabledField: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabledField", required: false }] }], selectedValues: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedValues", required: false }] }], itemHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemHeight", required: false }] }], maxVisibleItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxVisibleItems", required: false }] }], itemTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemTemplate", required: false }] }], emptyTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "emptyTemplate", required: false }] }], loadingTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "loadingTemplate", required: false }] }], alternate: [{ type: i0.Input, args: [{ isSignal: true, alias: "alternate", required: false }] }], highlightText: [{ type: i0.Input, args: [{ isSignal: true, alias: "highlightText", required: false }] }], itemClick: [{ type: i0.Output, args: ["itemClick"] }], navigateOut: [{ type: i0.Output, args: ["navigateOut"] }], viewportRef: [{ type: i0.ViewChild, args: [i0.forwardRef(() => CdkVirtualScrollViewport), { isSignal: true }] }], listNavigation: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXListNavigationDirective), { isSignal: true }] }], navItems: [{ type: i0.ViewChildren, args: [i0.forwardRef(() => AXListNavigationItemDirective), { isSignal: true }] }] } });
234
389
 
235
390
  /**
236
391
  * Internal mini component for the `drop-down-list` lookup mode:
@@ -262,10 +417,11 @@ class AXLookupDropDownListComponent extends AXLookupListViewBase {
262
417
  <div
263
418
  *cdkVirtualFor="let item of listDataSource(); let i = index; trackBy: trackByIndex"
264
419
  role="option"
265
- class="ax-lookup-option-host ax-lookup-option"
420
+ class="ax-lookup-option-host"
266
421
  axListNavigationItem
267
422
  #navItem="axListNavigationItem"
268
423
  [style.height.px]="itemHeight()"
424
+ [class.ax-lookup-option]="!itemTemplate()"
269
425
  [class.ax-state-alternate]="alternate() && i % 2 === 1"
270
426
  [class.ax-state-selected]="item != null && isSelected(item)"
271
427
  [class.ax-state-disabled]="item != null && isDisabled(item)"
@@ -277,13 +433,17 @@ class AXLookupDropDownListComponent extends AXLookupListViewBase {
277
433
  >
278
434
  @if (item != null) {
279
435
  @if (itemTemplate()) {
280
- <ng-container [ngTemplateOutlet]="itemTemplate()!" [ngTemplateOutletContext]="{ $implicit: item }" />
436
+ <ng-container
437
+ [ngTemplateOutlet]="itemTemplate()!"
438
+ [ngTemplateOutletContext]="{ $implicit: item, highlightText: highlightText() }"
439
+ />
281
440
  } @else {
282
- <span class="ax-lookup-option-text">{{ getText(item) }}</span>
283
- }
284
- <!-- Keep check outside itemTemplate so custom rows (platform widgets) still show selection. -->
285
- @if (isSelected(item)) {
286
- <span class="ax-lookup-option-check ax-icon ax-icon-check text-primary" aria-hidden="true"></span>
441
+ <span class="ax-lookup-option-text">
442
+ <ax-highlight-text [text]="getText(item)" [query]="highlightText()" />
443
+ </span>
444
+ @if (isSelected(item)) {
445
+ <span class="ax-lookup-option-check ax-icon ax-icon-check" aria-hidden="true"></span>
446
+ }
287
447
  }
288
448
  } @else {
289
449
  <ng-container [ngTemplateOutlet]="loadingRow" />
@@ -299,7 +459,7 @@ class AXLookupDropDownListComponent extends AXLookupListViewBase {
299
459
  <span class="ax-lookup-option-loading">{{ '@acorex:common.status.loading' | translate | async }}</span>
300
460
  }
301
461
  </ng-template>
302
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i1.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i1.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i1.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: AXListNavigationModule }, { kind: "directive", type: i2.AXListNavigationDirective, selector: "[axListNavigation]", inputs: ["orientation"], outputs: ["onNavigationChanged", "onKeypress"], exportAs: ["axListNavigation"] }, { kind: "directive", type: i2.AXListNavigationItemDirective, selector: "[axListNavigationItem]", outputs: ["onKeypress"], exportAs: ["axListNavigationItem"] }, { kind: "pipe", type: AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
462
+ `, 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: AXHighlightTextComponent, selector: "ax-highlight-text", inputs: ["text", "query", "highlightDisabled", "highlightOptions"] }, { kind: "pipe", type: AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
303
463
  }
304
464
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupDropDownListComponent, decorators: [{
305
465
  type: Component,
@@ -307,7 +467,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
307
467
  selector: 'ax-lookup-drop-down-list',
308
468
  changeDetection: ChangeDetectionStrategy.OnPush,
309
469
  encapsulation: ViewEncapsulation.None,
310
- imports: [ScrollingModule, NgTemplateOutlet, AXTranslatorPipe, AsyncPipe, AXListNavigationModule],
470
+ imports: [ScrollingModule, NgTemplateOutlet, AXTranslatorPipe, AsyncPipe, AXListNavigationModule, AXHighlightTextComponent],
311
471
  providers: [{ provide: AXLookupListViewBase, useExisting: AXLookupDropDownListComponent }],
312
472
  template: `
313
473
  @if (isEmpty()) {
@@ -331,10 +491,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
331
491
  <div
332
492
  *cdkVirtualFor="let item of listDataSource(); let i = index; trackBy: trackByIndex"
333
493
  role="option"
334
- class="ax-lookup-option-host ax-lookup-option"
494
+ class="ax-lookup-option-host"
335
495
  axListNavigationItem
336
496
  #navItem="axListNavigationItem"
337
497
  [style.height.px]="itemHeight()"
498
+ [class.ax-lookup-option]="!itemTemplate()"
338
499
  [class.ax-state-alternate]="alternate() && i % 2 === 1"
339
500
  [class.ax-state-selected]="item != null && isSelected(item)"
340
501
  [class.ax-state-disabled]="item != null && isDisabled(item)"
@@ -346,13 +507,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
346
507
  >
347
508
  @if (item != null) {
348
509
  @if (itemTemplate()) {
349
- <ng-container [ngTemplateOutlet]="itemTemplate()!" [ngTemplateOutletContext]="{ $implicit: item }" />
510
+ <ng-container
511
+ [ngTemplateOutlet]="itemTemplate()!"
512
+ [ngTemplateOutletContext]="{ $implicit: item, highlightText: highlightText() }"
513
+ />
350
514
  } @else {
351
- <span class="ax-lookup-option-text">{{ getText(item) }}</span>
352
- }
353
- <!-- Keep check outside itemTemplate so custom rows (platform widgets) still show selection. -->
354
- @if (isSelected(item)) {
355
- <span class="ax-lookup-option-check ax-icon ax-icon-check text-primary" aria-hidden="true"></span>
515
+ <span class="ax-lookup-option-text">
516
+ <ax-highlight-text [text]="getText(item)" [query]="highlightText()" />
517
+ </span>
518
+ @if (isSelected(item)) {
519
+ <span class="ax-lookup-option-check ax-icon ax-icon-check" aria-hidden="true"></span>
520
+ }
356
521
  }
357
522
  } @else {
358
523
  <ng-container [ngTemplateOutlet]="loadingRow" />
@@ -410,12 +575,43 @@ class AXLookupDropDownTreeComponent {
410
575
  */
411
576
  this.nodeTemplate = input(undefined, /* @ts-ignore */
412
577
  ...(ngDevMode ? [{ debugName: "nodeTemplate" }] : /* istanbul ignore next */ []));
578
+ /**
579
+ * Custom template rendered when the filtered tree has no nodes.
580
+ */
581
+ this.emptyTemplate = input(undefined, /* @ts-ignore */
582
+ ...(ngDevMode ? [{ debugName: "emptyTemplate" }] : /* istanbul ignore next */ []));
583
+ /**
584
+ * When `true`, visible tree nodes use alternating background colors.
585
+ */
586
+ this.alternate = input(false, /* @ts-ignore */
587
+ ...(ngDevMode ? [{ debugName: "alternate" }] : /* istanbul ignore next */ []));
588
+ /**
589
+ * Unique id that changes on every search apply so a new tree instance is created.
590
+ */
591
+ this.filterKey = input('0', /* @ts-ignore */
592
+ ...(ngDevMode ? [{ debugName: "filterKey" }] : /* istanbul ignore next */ []));
593
+ /**
594
+ * When set, matching characters in the default node label are highlighted.
595
+ */
596
+ this.highlightText = input('', /* @ts-ignore */
597
+ ...(ngDevMode ? [{ debugName: "highlightText" }] : /* istanbul ignore next */ []));
413
598
  /**
414
599
  * Emitted when the user selects a node.
415
600
  */
416
601
  this.itemClick = output();
417
602
  this.selectedIds = computed(() => this.selectedValues().map((v) => String(v)), /* @ts-ignore */
418
603
  ...(ngDevMode ? [{ debugName: "selectedIds" }] : /* istanbul ignore next */ []));
604
+ this.isEmpty = computed(() => {
605
+ const source = this.dataSource();
606
+ return Array.isArray(source) && source.length === 0;
607
+ }, /* @ts-ignore */
608
+ ...(ngDevMode ? [{ debugName: "isEmpty" }] : /* istanbul ignore next */ []));
609
+ this.treeInstances = computed(() => [{ id: this.filterKey(), source: this.dataSource() }], /* @ts-ignore */
610
+ ...(ngDevMode ? [{ debugName: "treeInstances" }] : /* istanbul ignore next */ []));
611
+ }
612
+ /** Whether the filtered tree currently has no nodes. */
613
+ hasNoMatches() {
614
+ return this.isEmpty();
419
615
  }
420
616
  handleSelectionChange(e) {
421
617
  if (e.source !== 'user') {
@@ -428,22 +624,36 @@ class AXLookupDropDownTreeComponent {
428
624
  this.itemClick.emit({ item: node, value: node[this.valueField()] });
429
625
  }
430
626
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupDropDownTreeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
431
- 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: `
432
- <div class="ax-lookup-tree">
433
- <ax-tree-view
434
- [datasource]="dataSource()"
435
- selectMode="single"
436
- selectionBehavior="all"
437
- [controlledSelection]="true"
438
- [selectedIds]="selectedIds()"
439
- [idField]="valueField()"
440
- [titleField]="textField()"
441
- [disabledField]="disabledField()"
442
- [nodeTemplate]="nodeTemplate()"
443
- (onSelectionChange)="handleSelectionChange($event)"
444
- />
445
- </div>
446
- `, 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 }); }
627
+ 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 }, highlightText: { classPropertyName: "highlightText", publicName: "highlightText", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemClick: "itemClick" }, ngImport: i0, template: `
628
+ @if (isEmpty()) {
629
+ @if (emptyTemplate()) {
630
+ <ng-container [ngTemplateOutlet]="emptyTemplate()!" />
631
+ } @else {
632
+ <div class="ax-lookup-empty">
633
+ {{ '@acorex:common.general.no-result-found' | translate | async }}
634
+ </div>
635
+ }
636
+ } @else {
637
+ <div class="ax-lookup-tree">
638
+ @for (instance of treeInstances(); track instance.id) {
639
+ <ax-tree-view
640
+ [datasource]="instance.source"
641
+ selectMode="single"
642
+ selectionBehavior="all"
643
+ [controlledSelection]="true"
644
+ [selectedIds]="selectedIds()"
645
+ [idField]="valueField()"
646
+ [titleField]="textField()"
647
+ [disabledField]="disabledField()"
648
+ [nodeTemplate]="nodeTemplate()"
649
+ [alternate]="alternate()"
650
+ [highlightText]="highlightText()"
651
+ (onSelectionChange)="handleSelectionChange($event)"
652
+ />
653
+ }
654
+ </div>
655
+ }
656
+ `, 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", "highlightText", "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 }); }
447
657
  }
448
658
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupDropDownTreeComponent, decorators: [{
449
659
  type: Component,
@@ -451,25 +661,320 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
451
661
  selector: 'ax-lookup-drop-down-tree',
452
662
  changeDetection: ChangeDetectionStrategy.OnPush,
453
663
  encapsulation: ViewEncapsulation.None,
454
- imports: [AXTreeViewComponent],
664
+ imports: [AXTreeViewComponent, NgTemplateOutlet, AXTranslatorPipe, AsyncPipe],
455
665
  template: `
456
- <div class="ax-lookup-tree">
457
- <ax-tree-view
458
- [datasource]="dataSource()"
459
- selectMode="single"
460
- selectionBehavior="all"
461
- [controlledSelection]="true"
462
- [selectedIds]="selectedIds()"
463
- [idField]="valueField()"
464
- [titleField]="textField()"
465
- [disabledField]="disabledField()"
466
- [nodeTemplate]="nodeTemplate()"
467
- (onSelectionChange)="handleSelectionChange($event)"
468
- />
469
- </div>
666
+ @if (isEmpty()) {
667
+ @if (emptyTemplate()) {
668
+ <ng-container [ngTemplateOutlet]="emptyTemplate()!" />
669
+ } @else {
670
+ <div class="ax-lookup-empty">
671
+ {{ '@acorex:common.general.no-result-found' | translate | async }}
672
+ </div>
673
+ }
674
+ } @else {
675
+ <div class="ax-lookup-tree">
676
+ @for (instance of treeInstances(); track instance.id) {
677
+ <ax-tree-view
678
+ [datasource]="instance.source"
679
+ selectMode="single"
680
+ selectionBehavior="all"
681
+ [controlledSelection]="true"
682
+ [selectedIds]="selectedIds()"
683
+ [idField]="valueField()"
684
+ [titleField]="textField()"
685
+ [disabledField]="disabledField()"
686
+ [nodeTemplate]="nodeTemplate()"
687
+ [alternate]="alternate()"
688
+ [highlightText]="highlightText()"
689
+ (onSelectionChange)="handleSelectionChange($event)"
690
+ />
691
+ }
692
+ </div>
693
+ }
694
+ `,
695
+ }]
696
+ }], 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 }] }], highlightText: [{ type: i0.Input, args: [{ isSignal: true, alias: "highlightText", required: false }] }], itemClick: [{ type: i0.Output, args: ["itemClick"] }] } });
697
+
698
+ /**
699
+ * Internal mini component for the `multi-column-tree` lookup mode:
700
+ * a multi-column `ax-data-table` with a drop-down tree inside it.
701
+ * Rows expand/collapse via the data-table hierarchy (`parentField` / nested `children`).
702
+ *
703
+ * @category Components
704
+ */
705
+ class AXLookupMultiColumnTreeComponent {
706
+ constructor() {
707
+ /**
708
+ * The datasource providing hierarchical rows (roots on load, children via `parentField`).
709
+ */
710
+ this.dataSource = input.required(/* @ts-ignore */
711
+ ...(ngDevMode ? [{ debugName: "dataSource" }] : /* istanbul ignore next */ []));
712
+ /**
713
+ * The item property used as the selection value (also the data-table row key).
714
+ */
715
+ this.valueField = input('id', /* @ts-ignore */
716
+ ...(ngDevMode ? [{ debugName: "valueField" }] : /* istanbul ignore next */ []));
717
+ /**
718
+ * The item property used as the display text. The matching column shows the expand control
719
+ * unless another column sets `expandHandler`.
720
+ */
721
+ this.textField = input('text', /* @ts-ignore */
722
+ ...(ngDevMode ? [{ debugName: "textField" }] : /* istanbul ignore next */ []));
723
+ /**
724
+ * The item property marking an item as disabled.
725
+ */
726
+ this.disabledField = input('disabled', /* @ts-ignore */
727
+ ...(ngDevMode ? [{ debugName: "disabledField" }] : /* istanbul ignore next */ []));
728
+ /**
729
+ * Field used by the data table to fetch children (`AXDataSource` filter on expand).
730
+ */
731
+ this.parentField = input('parentId', /* @ts-ignore */
732
+ ...(ngDevMode ? [{ debugName: "parentField" }] : /* istanbul ignore next */ []));
733
+ /**
734
+ * Field used by the data table to decide whether a row can expand.
735
+ */
736
+ this.hasChildrenField = input('hasChild', /* @ts-ignore */
737
+ ...(ngDevMode ? [{ debugName: "hasChildrenField" }] : /* istanbul ignore next */ []));
738
+ /**
739
+ * Currently selected values (always an array, even for single selection).
740
+ */
741
+ this.selectedValues = input([], /* @ts-ignore */
742
+ ...(ngDevMode ? [{ debugName: "selectedValues" }] : /* istanbul ignore next */ []));
743
+ /**
744
+ * The fixed row height in pixels passed to the data table.
745
+ */
746
+ this.itemHeight = input(40, /* @ts-ignore */
747
+ ...(ngDevMode ? [{ debugName: "itemHeight" }] : /* istanbul ignore next */ []));
748
+ /**
749
+ * The maximum number of body rows visible before the table scrolls.
750
+ */
751
+ this.maxVisibleItems = input(8, /* @ts-ignore */
752
+ ...(ngDevMode ? [{ debugName: "maxVisibleItems" }] : /* istanbul ignore next */ []));
753
+ /**
754
+ * Column definitions rendered as `ax-text-column` instances.
755
+ */
756
+ this.columns = input([], /* @ts-ignore */
757
+ ...(ngDevMode ? [{ debugName: "columns" }] : /* istanbul ignore next */ []));
758
+ /**
759
+ * Optional custom row content. Context: `$implicit` is the row item.
760
+ * When set, replaces the default multi-column cell layout.
761
+ */
762
+ this.itemTemplate = input(undefined, /* @ts-ignore */
763
+ ...(ngDevMode ? [{ debugName: "itemTemplate" }] : /* istanbul ignore next */ []));
764
+ /**
765
+ * Custom template rendered when the datasource has no items.
766
+ */
767
+ this.emptyTemplate = input(undefined, /* @ts-ignore */
768
+ ...(ngDevMode ? [{ debugName: "emptyTemplate" }] : /* istanbul ignore next */ []));
769
+ /**
770
+ * Custom template rendered while the table is loading.
771
+ */
772
+ this.loadingTemplate = input(undefined, /* @ts-ignore */
773
+ ...(ngDevMode ? [{ debugName: "loadingTemplate" }] : /* istanbul ignore next */ []));
774
+ /**
775
+ * When `true`, table rows use alternating background colors for easier scanning.
776
+ */
777
+ this.alternate = input(false, /* @ts-ignore */
778
+ ...(ngDevMode ? [{ debugName: "alternate" }] : /* istanbul ignore next */ []));
779
+ /**
780
+ * When set, matching text in table cells is highlighted.
781
+ */
782
+ this.highlightText = input('', /* @ts-ignore */
783
+ ...(ngDevMode ? [{ debugName: "highlightText" }] : /* istanbul ignore next */ []));
784
+ /**
785
+ * Emitted when the user picks a row (not when expanding/collapsing).
786
+ */
787
+ this.itemClick = output();
788
+ /**
789
+ * Header (~40px) + up to `maxVisibleItems` body rows. Expanded children scroll inside.
790
+ */
791
+ this.tableHeight = computed(() => 40 + this.maxVisibleItems() * this.itemHeight(), /* @ts-ignore */
792
+ ...(ngDevMode ? [{ debugName: "tableHeight" }] : /* istanbul ignore next */ []));
793
+ this.loadingConfig = computed(() => ({
794
+ enabled: true,
795
+ animation: true,
796
+ loadingTemplate: this.loadingTemplate(),
797
+ }), /* @ts-ignore */
798
+ ...(ngDevMode ? [{ debugName: "loadingConfig" }] : /* istanbul ignore next */ []));
799
+ this.resolveRowCssClass = (row) => {
800
+ const item = row;
801
+ if (!item) {
802
+ return '';
803
+ }
804
+ const classes = [];
805
+ if (this.isSelected(item)) {
806
+ classes.push('ax-state-selected');
807
+ }
808
+ if (this.isDisabled(item)) {
809
+ classes.push('ax-state-disabled');
810
+ }
811
+ return classes.join(' ');
812
+ };
813
+ }
814
+ /** Stable unique key for `@for` — avoids NG0955 when `field` is missing or duplicated. */
815
+ trackColumnKey(index, column) {
816
+ return `${column?.field ?? ''}::${index}`;
817
+ }
818
+ resolveColumnWidth(column) {
819
+ const width = column.width?.trim();
820
+ if (!width || width.includes('fr')) {
821
+ return 'auto';
822
+ }
823
+ return width;
824
+ }
825
+ isExpandColumn(index, column) {
826
+ if (column.expandHandler === true) {
827
+ return true;
828
+ }
829
+ if (this.columns().some((item) => item.expandHandler === true)) {
830
+ return false;
831
+ }
832
+ const textIndex = this.columns().findIndex((item) => item.field === this.textField());
833
+ return (textIndex === -1 ? 0 : textIndex) === index;
834
+ }
835
+ handleRowClick(event) {
836
+ this.handleItemClick(event.data);
837
+ }
838
+ handleItemClick(item) {
839
+ if (!item || this.isDisabled(item)) {
840
+ return;
841
+ }
842
+ this.itemClick.emit({ item, value: this.getValue(item) });
843
+ }
844
+ handleItemMouseDown(event, item) {
845
+ event.preventDefault();
846
+ event.stopPropagation();
847
+ this.handleItemClick(item);
848
+ }
849
+ isSelected(item) {
850
+ const value = this.getValue(item);
851
+ return this.selectedValues().some((v) => v == value);
852
+ }
853
+ isDisabled(item) {
854
+ return Boolean(item?.[this.disabledField()]);
855
+ }
856
+ getValue(item) {
857
+ return item?.[this.valueField()];
858
+ }
859
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupMultiColumnTreeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
860
+ 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 }, highlightText: { classPropertyName: "highlightText", publicName: "highlightText", 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: `
861
+ <ax-data-table
862
+ class="ax-lookup-multi-column-table"
863
+ look="minimal"
864
+ [dataSource]="dataSource()"
865
+ [parentField]="parentField()"
866
+ [hasChildrenField]="hasChildrenField()"
867
+ [itemHeight]="itemHeight()"
868
+ [alternative]="alternate()"
869
+ [emptyTemplate]="emptyTemplate()"
870
+ [highlightText]="highlightText()"
871
+ [loading]="loadingConfig()"
872
+ [paging]="false"
873
+ [showHeader]="true"
874
+ [fixedHeader]="true"
875
+ [showFooter]="false"
876
+ [allowReordering]="false"
877
+ [rowTemplate]="itemTemplate() ? customRowTemplate : undefined"
878
+ [rowCssClass]="resolveRowCssClass"
879
+ (onRowClick)="handleRowClick($event)"
880
+ >
881
+ @for (column of columns(); track trackColumnKey($index, column)) {
882
+ <ax-text-column
883
+ [dataField]="column.field"
884
+ [caption]="column.title"
885
+ [width]="resolveColumnWidth(column)"
886
+ [expandHandler]="isExpandColumn($index, column)"
887
+ [allowSorting]="false"
888
+ [allowResizing]="false"
889
+ />
890
+ }
891
+ </ax-data-table>
892
+
893
+ <ng-template #customRowTemplate let-ctx>
894
+ <tr
895
+ [class.ax-state-selected]="ctx.data != null && isSelected(ctx.data)"
896
+ [class.ax-state-disabled]="ctx.data != null && isDisabled(ctx.data)"
897
+ [style.height.px]="itemHeight()"
898
+ [style.max-height.px]="itemHeight()"
899
+ (mousedown)="handleItemMouseDown($event, ctx.data)"
900
+ >
901
+ <td [attr.colspan]="columns().length || 1">
902
+ @if (ctx.data != null && itemTemplate()) {
903
+ <ng-container
904
+ [ngTemplateOutlet]="itemTemplate()!"
905
+ [ngTemplateOutletContext]="{ $implicit: ctx.data, highlightText: highlightText() }"
906
+ />
907
+ }
908
+ </td>
909
+ </tr>
910
+ </ng-template>
911
+ `, 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 }); }
912
+ }
913
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupMultiColumnTreeComponent, decorators: [{
914
+ type: Component,
915
+ args: [{
916
+ selector: 'ax-lookup-multi-column-tree',
917
+ changeDetection: ChangeDetectionStrategy.OnPush,
918
+ encapsulation: ViewEncapsulation.None,
919
+ imports: [NgTemplateOutlet, AXDataTableComponent, AXDataTableTextColumnComponent],
920
+ host: {
921
+ class: 'ax-lookup-multi-column ax-lookup-multi-column-tree',
922
+ '[style.height.px]': 'tableHeight()',
923
+ },
924
+ template: `
925
+ <ax-data-table
926
+ class="ax-lookup-multi-column-table"
927
+ look="minimal"
928
+ [dataSource]="dataSource()"
929
+ [parentField]="parentField()"
930
+ [hasChildrenField]="hasChildrenField()"
931
+ [itemHeight]="itemHeight()"
932
+ [alternative]="alternate()"
933
+ [emptyTemplate]="emptyTemplate()"
934
+ [highlightText]="highlightText()"
935
+ [loading]="loadingConfig()"
936
+ [paging]="false"
937
+ [showHeader]="true"
938
+ [fixedHeader]="true"
939
+ [showFooter]="false"
940
+ [allowReordering]="false"
941
+ [rowTemplate]="itemTemplate() ? customRowTemplate : undefined"
942
+ [rowCssClass]="resolveRowCssClass"
943
+ (onRowClick)="handleRowClick($event)"
944
+ >
945
+ @for (column of columns(); track trackColumnKey($index, column)) {
946
+ <ax-text-column
947
+ [dataField]="column.field"
948
+ [caption]="column.title"
949
+ [width]="resolveColumnWidth(column)"
950
+ [expandHandler]="isExpandColumn($index, column)"
951
+ [allowSorting]="false"
952
+ [allowResizing]="false"
953
+ />
954
+ }
955
+ </ax-data-table>
956
+
957
+ <ng-template #customRowTemplate let-ctx>
958
+ <tr
959
+ [class.ax-state-selected]="ctx.data != null && isSelected(ctx.data)"
960
+ [class.ax-state-disabled]="ctx.data != null && isDisabled(ctx.data)"
961
+ [style.height.px]="itemHeight()"
962
+ [style.max-height.px]="itemHeight()"
963
+ (mousedown)="handleItemMouseDown($event, ctx.data)"
964
+ >
965
+ <td [attr.colspan]="columns().length || 1">
966
+ @if (ctx.data != null && itemTemplate()) {
967
+ <ng-container
968
+ [ngTemplateOutlet]="itemTemplate()!"
969
+ [ngTemplateOutletContext]="{ $implicit: ctx.data, highlightText: highlightText() }"
970
+ />
971
+ }
972
+ </td>
973
+ </tr>
974
+ </ng-template>
470
975
  `,
471
976
  }]
472
- }], 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"] }] } });
977
+ }], 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 }] }], highlightText: [{ type: i0.Input, args: [{ isSignal: true, alias: "highlightText", required: false }] }], itemClick: [{ type: i0.Output, args: ["itemClick"] }] } });
473
978
 
474
979
  /**
475
980
  * Internal mini component for the `multi-column` lookup mode:
@@ -547,6 +1052,11 @@ class AXLookupMultiColumnComponent {
547
1052
  */
548
1053
  this.alternate = input(false, /* @ts-ignore */
549
1054
  ...(ngDevMode ? [{ debugName: "alternate" }] : /* istanbul ignore next */ []));
1055
+ /**
1056
+ * When set, matching text in table cells is highlighted.
1057
+ */
1058
+ this.highlightText = input('', /* @ts-ignore */
1059
+ ...(ngDevMode ? [{ debugName: "highlightText" }] : /* istanbul ignore next */ []));
550
1060
  /**
551
1061
  * Emitted when the user picks a row.
552
1062
  */
@@ -608,19 +1118,18 @@ class AXLookupMultiColumnComponent {
608
1118
  const source = this.dataSource();
609
1119
  this.tableDataSource.config.key = source.config.key || this.valueField();
610
1120
  untracked(() => {
611
- this.#loadedItems = [];
612
- this.#totalCount.set(0);
613
- this.#syncTablePageSize();
614
- this.tableDataSource.refresh({ reset: true });
1121
+ this.#applyLoadedItems(source.cachedItems, source.totalCount);
615
1122
  });
616
1123
  const changedSub = source.onChanged.subscribe((event) => {
617
- this.#loadedItems = event.cachedItems.filter((item) => item != null);
618
- this.#totalCount.set(event.totalCount);
619
- this.#syncTablePageSize();
620
- this.tableDataSource.refresh({ reset: true });
1124
+ this.#applyLoadedItems(event.cachedItems, event.totalCount);
1125
+ });
1126
+ // Fetch page 0 only when the source has never loaded. Reopen remounts this
1127
+ // view; setPage(0) is a no-op on a warm source and must not force a new API call.
1128
+ queueMicrotask(() => {
1129
+ if (!source.cachedItems.some((item) => item != null)) {
1130
+ source.setPage(0);
1131
+ }
621
1132
  });
622
- // Kick the first page; later pages come from scroll.
623
- queueMicrotask(() => source.setPage(0));
624
1133
  onCleanup(() => changedSub.unsubscribe());
625
1134
  });
626
1135
  effect((onCleanup) => {
@@ -655,6 +1164,12 @@ class AXLookupMultiColumnComponent {
655
1164
  }
656
1165
  return width;
657
1166
  }
1167
+ #applyLoadedItems(cachedItems, totalCount) {
1168
+ this.#loadedItems = cachedItems.filter((item) => item != null);
1169
+ this.#totalCount.set(totalCount);
1170
+ this.#syncTablePageSize();
1171
+ this.tableDataSource.refresh({ reset: true });
1172
+ }
658
1173
  #syncTablePageSize() {
659
1174
  this.tableDataSource.config.pageSize = Math.max(this.#loadedItems.length, 1);
660
1175
  }
@@ -699,7 +1214,7 @@ class AXLookupMultiColumnComponent {
699
1214
  return item?.[this.valueField()];
700
1215
  }
701
1216
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupMultiColumnComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
702
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXLookupMultiColumnComponent, isStandalone: true, selector: "ax-lookup-multi-column", inputs: { dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: true, transformFunction: null }, valueField: { classPropertyName: "valueField", publicName: "valueField", isSignal: true, isRequired: false, transformFunction: null }, textField: { classPropertyName: "textField", publicName: "textField", isSignal: true, isRequired: false, transformFunction: null }, disabledField: { classPropertyName: "disabledField", publicName: "disabledField", isSignal: true, isRequired: false, transformFunction: null }, selectedValues: { classPropertyName: "selectedValues", publicName: "selectedValues", isSignal: true, isRequired: false, transformFunction: null }, itemHeight: { classPropertyName: "itemHeight", publicName: "itemHeight", isSignal: true, isRequired: false, transformFunction: null }, maxVisibleItems: { classPropertyName: "maxVisibleItems", publicName: "maxVisibleItems", isSignal: true, isRequired: false, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, itemTemplate: { classPropertyName: "itemTemplate", publicName: "itemTemplate", isSignal: true, isRequired: false, transformFunction: null }, emptyTemplate: { classPropertyName: "emptyTemplate", publicName: "emptyTemplate", isSignal: true, isRequired: false, transformFunction: null }, loadingTemplate: { classPropertyName: "loadingTemplate", publicName: "loadingTemplate", isSignal: true, isRequired: false, transformFunction: null }, alternate: { classPropertyName: "alternate", publicName: "alternate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemClick: "itemClick" }, host: { properties: { "style.height.px": "tableHeight()" }, classAttribute: "ax-lookup-multi-column" }, viewQueries: [{ propertyName: "tableRef", first: true, predicate: AXDataTableComponent, descendants: true, isSignal: true }], ngImport: i0, template: `
1217
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXLookupMultiColumnComponent, isStandalone: true, selector: "ax-lookup-multi-column", inputs: { dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: true, transformFunction: null }, valueField: { classPropertyName: "valueField", publicName: "valueField", isSignal: true, isRequired: false, transformFunction: null }, textField: { classPropertyName: "textField", publicName: "textField", isSignal: true, isRequired: false, transformFunction: null }, disabledField: { classPropertyName: "disabledField", publicName: "disabledField", isSignal: true, isRequired: false, transformFunction: null }, selectedValues: { classPropertyName: "selectedValues", publicName: "selectedValues", isSignal: true, isRequired: false, transformFunction: null }, itemHeight: { classPropertyName: "itemHeight", publicName: "itemHeight", isSignal: true, isRequired: false, transformFunction: null }, maxVisibleItems: { classPropertyName: "maxVisibleItems", publicName: "maxVisibleItems", isSignal: true, isRequired: false, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, itemTemplate: { classPropertyName: "itemTemplate", publicName: "itemTemplate", isSignal: true, isRequired: false, transformFunction: null }, emptyTemplate: { classPropertyName: "emptyTemplate", publicName: "emptyTemplate", isSignal: true, isRequired: false, transformFunction: null }, loadingTemplate: { classPropertyName: "loadingTemplate", publicName: "loadingTemplate", isSignal: true, isRequired: false, transformFunction: null }, alternate: { classPropertyName: "alternate", publicName: "alternate", isSignal: true, isRequired: false, transformFunction: null }, highlightText: { classPropertyName: "highlightText", publicName: "highlightText", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemClick: "itemClick" }, host: { properties: { "style.height.px": "tableHeight()" }, classAttribute: "ax-lookup-multi-column" }, viewQueries: [{ propertyName: "tableRef", first: true, predicate: AXDataTableComponent, descendants: true, isSignal: true }], ngImport: i0, template: `
703
1218
  <ax-data-table
704
1219
  class="ax-lookup-multi-column-table"
705
1220
  look="minimal"
@@ -707,6 +1222,7 @@ class AXLookupMultiColumnComponent {
707
1222
  [itemHeight]="itemHeight()"
708
1223
  [alternative]="alternate()"
709
1224
  [emptyTemplate]="emptyTemplate()"
1225
+ [highlightText]="highlightText()"
710
1226
  [loading]="loadingConfig()"
711
1227
  [paging]="false"
712
1228
  [showHeader]="true"
@@ -740,7 +1256,7 @@ class AXLookupMultiColumnComponent {
740
1256
  @if (ctx.data != null && itemTemplate()) {
741
1257
  <ng-container
742
1258
  [ngTemplateOutlet]="itemTemplate()!"
743
- [ngTemplateOutletContext]="{ $implicit: ctx.data }"
1259
+ [ngTemplateOutletContext]="{ $implicit: ctx.data, highlightText: highlightText() }"
744
1260
  />
745
1261
  }
746
1262
  </td>
@@ -767,6 +1283,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
767
1283
  [itemHeight]="itemHeight()"
768
1284
  [alternative]="alternate()"
769
1285
  [emptyTemplate]="emptyTemplate()"
1286
+ [highlightText]="highlightText()"
770
1287
  [loading]="loadingConfig()"
771
1288
  [paging]="false"
772
1289
  [showHeader]="true"
@@ -800,7 +1317,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
800
1317
  @if (ctx.data != null && itemTemplate()) {
801
1318
  <ng-container
802
1319
  [ngTemplateOutlet]="itemTemplate()!"
803
- [ngTemplateOutletContext]="{ $implicit: ctx.data }"
1320
+ [ngTemplateOutletContext]="{ $implicit: ctx.data, highlightText: highlightText() }"
804
1321
  />
805
1322
  }
806
1323
  </td>
@@ -808,7 +1325,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
808
1325
  </ng-template>
809
1326
  `,
810
1327
  }]
811
- }], ctorParameters: () => [], propDecorators: { dataSource: [{ type: i0.Input, args: [{ isSignal: true, alias: "dataSource", required: true }] }], valueField: [{ type: i0.Input, args: [{ isSignal: true, alias: "valueField", required: false }] }], textField: [{ type: i0.Input, args: [{ isSignal: true, alias: "textField", required: false }] }], disabledField: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabledField", required: false }] }], selectedValues: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedValues", required: false }] }], itemHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemHeight", required: false }] }], maxVisibleItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxVisibleItems", required: false }] }], columns: [{ type: i0.Input, args: [{ isSignal: true, alias: "columns", required: false }] }], itemTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemTemplate", required: false }] }], emptyTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "emptyTemplate", required: false }] }], loadingTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "loadingTemplate", required: false }] }], alternate: [{ type: i0.Input, args: [{ isSignal: true, alias: "alternate", required: false }] }], itemClick: [{ type: i0.Output, args: ["itemClick"] }], tableRef: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXDataTableComponent), { isSignal: true }] }] } });
1328
+ }], ctorParameters: () => [], propDecorators: { dataSource: [{ type: i0.Input, args: [{ isSignal: true, alias: "dataSource", required: true }] }], valueField: [{ type: i0.Input, args: [{ isSignal: true, alias: "valueField", required: false }] }], textField: [{ type: i0.Input, args: [{ isSignal: true, alias: "textField", required: false }] }], disabledField: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabledField", required: false }] }], selectedValues: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedValues", required: false }] }], itemHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemHeight", required: false }] }], maxVisibleItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxVisibleItems", required: false }] }], columns: [{ type: i0.Input, args: [{ isSignal: true, alias: "columns", required: false }] }], itemTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemTemplate", required: false }] }], emptyTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "emptyTemplate", required: false }] }], loadingTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "loadingTemplate", required: false }] }], alternate: [{ type: i0.Input, args: [{ isSignal: true, alias: "alternate", required: false }] }], highlightText: [{ type: i0.Input, args: [{ isSignal: true, alias: "highlightText", required: false }] }], itemClick: [{ type: i0.Output, args: ["itemClick"] }], tableRef: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXDataTableComponent), { isSignal: true }] }] } });
812
1329
 
813
1330
  /**
814
1331
  * Internal mini component for the `multi-select-tree` lookup mode:
@@ -853,12 +1370,43 @@ class AXLookupMultiSelectTreeComponent {
853
1370
  */
854
1371
  this.nodeTemplate = input(undefined, /* @ts-ignore */
855
1372
  ...(ngDevMode ? [{ debugName: "nodeTemplate" }] : /* istanbul ignore next */ []));
1373
+ /**
1374
+ * Custom template rendered when the filtered tree has no nodes.
1375
+ */
1376
+ this.emptyTemplate = input(undefined, /* @ts-ignore */
1377
+ ...(ngDevMode ? [{ debugName: "emptyTemplate" }] : /* istanbul ignore next */ []));
1378
+ /**
1379
+ * When `true`, visible tree nodes use alternating background colors.
1380
+ */
1381
+ this.alternate = input(false, /* @ts-ignore */
1382
+ ...(ngDevMode ? [{ debugName: "alternate" }] : /* istanbul ignore next */ []));
1383
+ /**
1384
+ * Unique id that changes on every search apply so a new tree instance is created.
1385
+ */
1386
+ this.filterKey = input('0', /* @ts-ignore */
1387
+ ...(ngDevMode ? [{ debugName: "filterKey" }] : /* istanbul ignore next */ []));
1388
+ /**
1389
+ * When set, matching characters in the default node label are highlighted.
1390
+ */
1391
+ this.highlightText = input('', /* @ts-ignore */
1392
+ ...(ngDevMode ? [{ debugName: "highlightText" }] : /* istanbul ignore next */ []));
856
1393
  /**
857
1394
  * Emitted when the user changes the tree selection.
858
1395
  */
859
1396
  this.selectionChange = output();
860
1397
  this.selectedIds = computed(() => this.selectedValues().map((v) => String(v)), /* @ts-ignore */
861
1398
  ...(ngDevMode ? [{ debugName: "selectedIds" }] : /* istanbul ignore next */ []));
1399
+ this.isEmpty = computed(() => {
1400
+ const source = this.dataSource();
1401
+ return Array.isArray(source) && source.length === 0;
1402
+ }, /* @ts-ignore */
1403
+ ...(ngDevMode ? [{ debugName: "isEmpty" }] : /* istanbul ignore next */ []));
1404
+ this.treeInstances = computed(() => [{ id: this.filterKey(), source: this.dataSource() }], /* @ts-ignore */
1405
+ ...(ngDevMode ? [{ debugName: "treeInstances" }] : /* istanbul ignore next */ []));
1406
+ }
1407
+ /** Whether the filtered tree currently has no nodes. */
1408
+ hasNoMatches() {
1409
+ return this.isEmpty();
862
1410
  }
863
1411
  handleSelectionChange(e) {
864
1412
  if (e.source !== 'user') {
@@ -867,22 +1415,36 @@ class AXLookupMultiSelectTreeComponent {
867
1415
  this.selectionChange.emit({ ids: e.selectedIds, nodes: e.selectedNodes });
868
1416
  }
869
1417
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupMultiSelectTreeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
870
- 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: `
871
- <div class="ax-lookup-tree">
872
- <ax-tree-view
873
- [datasource]="dataSource()"
874
- selectMode="multiple"
875
- [selectionBehavior]="selectionBehavior()"
876
- [controlledSelection]="true"
877
- [selectedIds]="selectedIds()"
878
- [idField]="valueField()"
879
- [titleField]="textField()"
880
- [disabledField]="disabledField()"
881
- [nodeTemplate]="nodeTemplate()"
882
- (onSelectionChange)="handleSelectionChange($event)"
883
- />
884
- </div>
885
- `, 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 }); }
1418
+ 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 }, highlightText: { classPropertyName: "highlightText", publicName: "highlightText", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectionChange: "selectionChange" }, ngImport: i0, template: `
1419
+ @if (isEmpty()) {
1420
+ @if (emptyTemplate()) {
1421
+ <ng-container [ngTemplateOutlet]="emptyTemplate()!" />
1422
+ } @else {
1423
+ <div class="ax-lookup-empty">
1424
+ {{ '@acorex:common.general.no-result-found' | translate | async }}
1425
+ </div>
1426
+ }
1427
+ } @else {
1428
+ <div class="ax-lookup-tree">
1429
+ @for (instance of treeInstances(); track instance.id) {
1430
+ <ax-tree-view
1431
+ [datasource]="instance.source"
1432
+ selectMode="multiple"
1433
+ [selectionBehavior]="selectionBehavior()"
1434
+ [controlledSelection]="true"
1435
+ [selectedIds]="selectedIds()"
1436
+ [idField]="valueField()"
1437
+ [titleField]="textField()"
1438
+ [disabledField]="disabledField()"
1439
+ [nodeTemplate]="nodeTemplate()"
1440
+ [alternate]="alternate()"
1441
+ [highlightText]="highlightText()"
1442
+ (onSelectionChange)="handleSelectionChange($event)"
1443
+ />
1444
+ }
1445
+ </div>
1446
+ }
1447
+ `, 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", "highlightText", "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 }); }
886
1448
  }
887
1449
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupMultiSelectTreeComponent, decorators: [{
888
1450
  type: Component,
@@ -890,25 +1452,39 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
890
1452
  selector: 'ax-lookup-multi-select-tree',
891
1453
  changeDetection: ChangeDetectionStrategy.OnPush,
892
1454
  encapsulation: ViewEncapsulation.None,
893
- imports: [AXTreeViewComponent],
1455
+ imports: [AXTreeViewComponent, NgTemplateOutlet, AXTranslatorPipe, AsyncPipe],
894
1456
  template: `
895
- <div class="ax-lookup-tree">
896
- <ax-tree-view
897
- [datasource]="dataSource()"
898
- selectMode="multiple"
899
- [selectionBehavior]="selectionBehavior()"
900
- [controlledSelection]="true"
901
- [selectedIds]="selectedIds()"
902
- [idField]="valueField()"
903
- [titleField]="textField()"
904
- [disabledField]="disabledField()"
905
- [nodeTemplate]="nodeTemplate()"
906
- (onSelectionChange)="handleSelectionChange($event)"
907
- />
908
- </div>
1457
+ @if (isEmpty()) {
1458
+ @if (emptyTemplate()) {
1459
+ <ng-container [ngTemplateOutlet]="emptyTemplate()!" />
1460
+ } @else {
1461
+ <div class="ax-lookup-empty">
1462
+ {{ '@acorex:common.general.no-result-found' | translate | async }}
1463
+ </div>
1464
+ }
1465
+ } @else {
1466
+ <div class="ax-lookup-tree">
1467
+ @for (instance of treeInstances(); track instance.id) {
1468
+ <ax-tree-view
1469
+ [datasource]="instance.source"
1470
+ selectMode="multiple"
1471
+ [selectionBehavior]="selectionBehavior()"
1472
+ [controlledSelection]="true"
1473
+ [selectedIds]="selectedIds()"
1474
+ [idField]="valueField()"
1475
+ [titleField]="textField()"
1476
+ [disabledField]="disabledField()"
1477
+ [nodeTemplate]="nodeTemplate()"
1478
+ [alternate]="alternate()"
1479
+ [highlightText]="highlightText()"
1480
+ (onSelectionChange)="handleSelectionChange($event)"
1481
+ />
1482
+ }
1483
+ </div>
1484
+ }
909
1485
  `,
910
1486
  }]
911
- }], 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"] }] } });
1487
+ }], 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 }] }], highlightText: [{ type: i0.Input, args: [{ isSignal: true, alias: "highlightText", required: false }] }], selectionChange: [{ type: i0.Output, args: ["selectionChange"] }] } });
912
1488
 
913
1489
  /**
914
1490
  * Internal mini component for the `multi-select` lookup mode:
@@ -941,11 +1517,11 @@ class AXLookupMultiSelectComponent extends AXLookupListViewBase {
941
1517
  <div
942
1518
  *cdkVirtualFor="let item of listDataSource(); let i = index; trackBy: trackByIndex"
943
1519
  role="option"
944
- class="ax-lookup-option-host ax-lookup-option"
1520
+ class="ax-lookup-option-host ax-lookup-option-multiple"
945
1521
  axListNavigationItem
946
1522
  #navItem="axListNavigationItem"
947
1523
  [style.height.px]="itemHeight()"
948
- [class.ax-lookup-option-host--check]="!!itemTemplate()"
1524
+ [class.ax-lookup-option]="!itemTemplate()"
949
1525
  [class.ax-state-alternate]="alternate() && i % 2 === 1"
950
1526
  [class.ax-state-selected]="item != null && isSelected(item)"
951
1527
  [class.ax-state-disabled]="item != null && isDisabled(item)"
@@ -956,17 +1532,21 @@ class AXLookupMultiSelectComponent extends AXLookupListViewBase {
956
1532
  (onKeypress)="handleItemKeypress($event, item)"
957
1533
  >
958
1534
  @if (item != null) {
959
- <input
960
- type="checkbox"
1535
+ <ax-check-box
961
1536
  class="ax-lookup-checkbox"
962
- tabindex="-1"
963
- [checked]="isSelected(item)"
1537
+ [tabIndex]="-1"
1538
+ [value]="isSelected(item)"
964
1539
  [disabled]="isDisabled(item)"
965
- />
1540
+ ></ax-check-box>
966
1541
  @if (itemTemplate()) {
967
- <ng-container [ngTemplateOutlet]="itemTemplate()!" [ngTemplateOutletContext]="{ $implicit: item }" />
1542
+ <ng-container
1543
+ [ngTemplateOutlet]="itemTemplate()!"
1544
+ [ngTemplateOutletContext]="{ $implicit: item, highlightText: highlightText() }"
1545
+ />
968
1546
  } @else {
969
- <span class="ax-lookup-option-text">{{ getText(item) }}</span>
1547
+ <span class="ax-lookup-option-text">
1548
+ <ax-highlight-text [text]="getText(item)" [query]="highlightText()" />
1549
+ </span>
970
1550
  }
971
1551
  } @else {
972
1552
  <ng-container [ngTemplateOutlet]="loadingRow" />
@@ -982,7 +1562,7 @@ class AXLookupMultiSelectComponent extends AXLookupListViewBase {
982
1562
  <span class="ax-lookup-option-loading">{{ '@acorex:common.status.loading' | translate | async }}</span>
983
1563
  }
984
1564
  </ng-template>
985
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i1.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i1.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i1.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: AXListNavigationModule }, { kind: "directive", type: i2.AXListNavigationDirective, selector: "[axListNavigation]", inputs: ["orientation"], outputs: ["onNavigationChanged", "onKeypress"], exportAs: ["axListNavigation"] }, { kind: "directive", type: i2.AXListNavigationItemDirective, selector: "[axListNavigationItem]", outputs: ["onKeypress"], exportAs: ["axListNavigationItem"] }, { kind: "pipe", type: AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
1565
+ `, 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: "component", type: AXHighlightTextComponent, selector: "ax-highlight-text", inputs: ["text", "query", "highlightDisabled", "highlightOptions"] }, { kind: "pipe", type: AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
986
1566
  }
987
1567
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupMultiSelectComponent, decorators: [{
988
1568
  type: Component,
@@ -990,7 +1570,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
990
1570
  selector: 'ax-lookup-multi-select',
991
1571
  changeDetection: ChangeDetectionStrategy.OnPush,
992
1572
  encapsulation: ViewEncapsulation.None,
993
- imports: [ScrollingModule, NgTemplateOutlet, AXTranslatorPipe, AsyncPipe, AXListNavigationModule],
1573
+ imports: [ScrollingModule, NgTemplateOutlet, AXTranslatorPipe, AsyncPipe, AXListNavigationModule, AXCheckBoxComponent, AXHighlightTextComponent],
994
1574
  providers: [{ provide: AXLookupListViewBase, useExisting: AXLookupMultiSelectComponent }],
995
1575
  template: `
996
1576
  @if (isEmpty()) {
@@ -1015,11 +1595,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
1015
1595
  <div
1016
1596
  *cdkVirtualFor="let item of listDataSource(); let i = index; trackBy: trackByIndex"
1017
1597
  role="option"
1018
- class="ax-lookup-option-host ax-lookup-option"
1598
+ class="ax-lookup-option-host ax-lookup-option-multiple"
1019
1599
  axListNavigationItem
1020
1600
  #navItem="axListNavigationItem"
1021
1601
  [style.height.px]="itemHeight()"
1022
- [class.ax-lookup-option-host--check]="!!itemTemplate()"
1602
+ [class.ax-lookup-option]="!itemTemplate()"
1023
1603
  [class.ax-state-alternate]="alternate() && i % 2 === 1"
1024
1604
  [class.ax-state-selected]="item != null && isSelected(item)"
1025
1605
  [class.ax-state-disabled]="item != null && isDisabled(item)"
@@ -1030,17 +1610,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
1030
1610
  (onKeypress)="handleItemKeypress($event, item)"
1031
1611
  >
1032
1612
  @if (item != null) {
1033
- <input
1034
- type="checkbox"
1613
+ <ax-check-box
1035
1614
  class="ax-lookup-checkbox"
1036
- tabindex="-1"
1037
- [checked]="isSelected(item)"
1615
+ [tabIndex]="-1"
1616
+ [value]="isSelected(item)"
1038
1617
  [disabled]="isDisabled(item)"
1039
- />
1618
+ ></ax-check-box>
1040
1619
  @if (itemTemplate()) {
1041
- <ng-container [ngTemplateOutlet]="itemTemplate()!" [ngTemplateOutletContext]="{ $implicit: item }" />
1620
+ <ng-container
1621
+ [ngTemplateOutlet]="itemTemplate()!"
1622
+ [ngTemplateOutletContext]="{ $implicit: item, highlightText: highlightText() }"
1623
+ />
1042
1624
  } @else {
1043
- <span class="ax-lookup-option-text">{{ getText(item) }}</span>
1625
+ <span class="ax-lookup-option-text">
1626
+ <ax-highlight-text [text]="getText(item)" [query]="highlightText()" />
1627
+ </span>
1044
1628
  }
1045
1629
  } @else {
1046
1630
  <ng-container [ngTemplateOutlet]="loadingRow" />
@@ -1061,14 +1645,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
1061
1645
  }] });
1062
1646
 
1063
1647
  /**
1064
- * An advanced drop-down (lookup) editor with five modes, `AXDataSource` support, and virtual scrolling.
1648
+ * An advanced drop-down (lookup) editor with six modes, `AXDataSource` support, and virtual scrolling.
1065
1649
  *
1066
1650
  * Modes (each rendered by its own internal mini component):
1067
1651
  * - `drop-down-list` — a predefined list of options for picking single values.
1068
1652
  * - `multi-select` — a predefined list of options for multiple item selection (chips in the trigger).
1069
- * - `drop-down-tree` — a predefined list rendered in a tree-like structure for single item selection.
1070
- * - `multi-select-tree` — a tree-like structure for multiple item selection.
1071
- * - `multi-column` — an `ax-data-table` grid; when searchable, the trigger input filters as you type.
1653
+ * In multi modes, Backspace with an empty trigger input removes the last chip; repeated presses clear
1654
+ * the whole selection.
1655
+ * - `drop-down-tree` — a tree-like structure for single item selection; when searchable, the trigger
1656
+ * input filters nested nodes as you type (on small screens the search field is inside the actionsheet).
1657
+ * - `multi-select-tree` — a tree-like structure for multiple item selection; searchable the same way.
1658
+ * - `multi-column` — an `ax-data-table` grid; when searchable, the trigger input filters as you type
1659
+ * (on small screens the search field is inside the actionsheet).
1660
+ * - `multi-column-tree` — a multi-column `ax-data-table` with a drop-down tree inside it
1661
+ * (expandable hierarchical rows). Uses `treeDataSource` + `columns`, or a hierarchical `dataSource`.
1072
1662
  *
1073
1663
  * With `adaptivityEnabled` (default `true`), the list opens as a bottom actionsheet on small
1074
1664
  * screens instead of an anchored dropdown — the same alternate presentation as `ax-select-box`.
@@ -1081,6 +1671,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
1081
1671
  class AXLookupComponent extends NXValueComponent {
1082
1672
  #platform;
1083
1673
  #destroyRef;
1674
+ /** Whether search filters the tree datasource instead of `AXDataSource`. */
1675
+ #isTreeOnlySearchMode() {
1676
+ const mode = this.mode();
1677
+ return mode === 'drop-down-tree' || mode === 'multi-select-tree';
1678
+ }
1679
+ /**
1680
+ * Applied tree search query. Set only from `#applyFilterNow` so opening a single-select
1681
+ * with the selected label in the trigger does not filter the tree.
1682
+ */
1683
+ #treeFilterQuery;
1684
+ #treeFilterEpoch;
1685
+ /** Applied (debounced) search query used for result highlighting. */
1686
+ #appliedSearchQuery;
1687
+ /** Reused so closing/reopening the popup does not create a new AXDataSource (which would miss cache). */
1688
+ #multiColumnTreeTableSource;
1689
+ #multiColumnTreeTableKey;
1690
+ #multiColumnTreeInput;
1691
+ /**
1692
+ * Tree callback results keyed by parent id. Survives popup remount so
1693
+ * drop-down-tree / multi-select-tree do not refetch on every open.
1694
+ */
1695
+ #treeChildrenCache;
1696
+ #document;
1084
1697
  #itemsCache;
1085
1698
  #isUserInteraction;
1086
1699
  #lastValue;
@@ -1089,6 +1702,8 @@ class AXLookupComponent extends NXValueComponent {
1089
1702
  #selectionInitialized;
1090
1703
  #filterApplied;
1091
1704
  #searchDebounce;
1705
+ #searchEnterRevision;
1706
+ #sheetSearchFocused;
1092
1707
  constructor() {
1093
1708
  super();
1094
1709
  this.#platform = inject(AXPlatform);
@@ -1104,13 +1719,14 @@ class AXLookupComponent extends NXValueComponent {
1104
1719
  this.mode = input('drop-down-list', /* @ts-ignore */
1105
1720
  ...(ngDevMode ? [{ debugName: "mode" }] : /* istanbul ignore next */ []));
1106
1721
  /**
1107
- * The items source for list-based modes (`drop-down-list`, `multi-select`, `multi-column`).
1722
+ * The items source for list-based modes (`drop-down-list`, `multi-select`, `multi-column`)
1723
+ * and for `multi-column-tree` when `treeDataSource` is not set.
1108
1724
  * Accepts an `AXDataSource` (remote paging, `byKey`, server-side filter) or a plain array.
1109
1725
  */
1110
1726
  this.dataSource = input(undefined, /* @ts-ignore */
1111
1727
  ...(ngDevMode ? [{ debugName: "dataSource" }] : /* istanbul ignore next */ []));
1112
1728
  /**
1113
- * The nodes source for tree modes (`drop-down-tree`, `multi-select-tree`):
1729
+ * The nodes source for tree modes (`drop-down-tree`, `multi-select-tree`, `multi-column-tree`):
1114
1730
  * an array of nodes or a lazy children callback.
1115
1731
  */
1116
1732
  this.treeDataSource = input(undefined, /* @ts-ignore */
@@ -1132,20 +1748,36 @@ class AXLookupComponent extends NXValueComponent {
1132
1748
  this.disabledField = input('disabled', /* @ts-ignore */
1133
1749
  ...(ngDevMode ? [{ debugName: "disabledField" }] : /* istanbul ignore next */ []));
1134
1750
  /**
1135
- * Column definitions for the `multi-column` mode (rendered as `ax-text-column` in `ax-data-table`).
1751
+ * Column definitions for the `multi-column` and `multi-column-tree` modes
1752
+ * (rendered as `ax-text-column` in `ax-data-table`).
1136
1753
  */
1137
1754
  this.columns = input([], /* @ts-ignore */
1138
1755
  ...(ngDevMode ? [{ debugName: "columns" }] : /* istanbul ignore next */ []));
1756
+ /**
1757
+ * Field used by `multi-column-tree` to fetch children when a row is expanded
1758
+ * (`AXDataSource` filter). Defaults to `parentId`. Nested `children` arrays are also supported.
1759
+ */
1760
+ this.treeParentField = input('parentId', /* @ts-ignore */
1761
+ ...(ngDevMode ? [{ debugName: "treeParentField" }] : /* istanbul ignore next */ []));
1762
+ /**
1763
+ * Field used by `multi-column-tree` to decide whether a row shows an expand control.
1764
+ * Defaults to `hasChild`. Nodes with `children` / `childrenCount` are mapped automatically
1765
+ * when using `treeDataSource`.
1766
+ */
1767
+ this.hasChildrenField = input('hasChild', /* @ts-ignore */
1768
+ ...(ngDevMode ? [{ debugName: "hasChildrenField" }] : /* istanbul ignore next */ []));
1139
1769
  /**
1140
1770
  * Whether the trigger accepts typing and filters the datasource (`true`),
1141
1771
  * or is select-only with no writable input (`false`).
1142
- * Applies to `drop-down-list`, `multi-select`, and `multi-column`. Tree modes ignore this.
1772
+ * Applies to all modes, including `drop-down-tree` and `multi-select-tree`.
1773
+ * On small screens with `adaptivityEnabled`, search is typed in the actionsheet instead of the trigger.
1143
1774
  */
1144
1775
  this.searchable = input(true, /* @ts-ignore */
1145
1776
  ...(ngDevMode ? [{ debugName: "searchable" }] : /* istanbul ignore next */ []));
1146
1777
  /**
1147
1778
  * When `true` (default), the popup list uses the alternate actionsheet presentation on small
1148
- * screens (`SM`). When `false`, the list always opens as an anchored dropdown.
1779
+ * screens (`SM`). Searchable list modes then show a search field inside the sheet. When `false`,
1780
+ * the list always opens as an anchored dropdown.
1149
1781
  */
1150
1782
  this.adaptivityEnabled = input(true, /* @ts-ignore */
1151
1783
  ...(ngDevMode ? [{ debugName: "adaptivityEnabled" }] : /* istanbul ignore next */ []));
@@ -1156,13 +1788,14 @@ class AXLookupComponent extends NXValueComponent {
1156
1788
  ...(ngDevMode ? [{ debugName: "caption" }] : /* istanbul ignore next */ []));
1157
1789
  /**
1158
1790
  * When `true`, list rows use alternating background colors for easier scanning
1159
- * (`drop-down-list`, `multi-select`, and `multi-column` modes).
1791
+ * (all lookup modes, including drop-down-tree and multi-select-tree).
1160
1792
  */
1161
1793
  this.alternate = input(false, /* @ts-ignore */
1162
1794
  ...(ngDevMode ? [{ debugName: "alternate" }] : /* istanbul ignore next */ []));
1163
1795
  /**
1164
1796
  * Placeholder for the trigger search input when items are already selected
1165
- * (mainly useful in `multi-select`). Falls back to `placeholder` when the selection is empty.
1797
+ * (mainly useful in `multi-select` / `multi-select-tree`), and for the in-sheet search field on small screens.
1798
+ * Falls back to `placeholder` when the selection is empty on desktop.
1166
1799
  */
1167
1800
  this.searchPlaceholder = input('Search...', /* @ts-ignore */
1168
1801
  ...(ngDevMode ? [{ debugName: "searchPlaceholder" }] : /* istanbul ignore next */ []));
@@ -1202,7 +1835,15 @@ class AXLookupComponent extends NXValueComponent {
1202
1835
  this.treeSelectionBehavior = input('all', /* @ts-ignore */
1203
1836
  ...(ngDevMode ? [{ debugName: "treeSelectionBehavior" }] : /* istanbul ignore next */ []));
1204
1837
  /**
1205
- * Custom template rendered for each item/node. Context: `$implicit` is the item.
1838
+ * When `true` (default), matching characters in popup result items are highlighted
1839
+ * while the user searches.
1840
+ */
1841
+ this.highlightSearch = input(true, { ...(ngDevMode ? { debugName: "highlightSearch" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
1842
+ /**
1843
+ * Custom template rendered for each item/node. Context: `$implicit` is the item;
1844
+ * `highlightText` is the active search query when result highlighting is enabled.
1845
+ * Default option chrome (padding, typography, check icon) is not applied; only the
1846
+ * template's styles are used. Selection and hover backgrounds remain on the row.
1206
1847
  */
1207
1848
  this.itemTemplate = input(undefined, /* @ts-ignore */
1208
1849
  ...(ngDevMode ? [{ debugName: "itemTemplate" }] : /* istanbul ignore next */ []));
@@ -1277,19 +1918,73 @@ class AXLookupComponent extends NXValueComponent {
1277
1918
  this.isMultiple = computed(() => this.mode() === 'multi-select' || this.mode() === 'multi-select-tree', /* @ts-ignore */
1278
1919
  ...(ngDevMode ? [{ debugName: "isMultiple" }] : /* istanbul ignore next */ []));
1279
1920
  /** Whether the current mode renders a tree. */
1280
- this.isTreeMode = computed(() => this.mode() === 'drop-down-tree' || this.mode() === 'multi-select-tree', /* @ts-ignore */
1921
+ this.isTreeMode = computed(() => {
1922
+ const mode = this.mode();
1923
+ return (mode === 'drop-down-tree' ||
1924
+ mode === 'multi-select-tree' ||
1925
+ (mode === 'multi-column-tree' && this.treeDataSource() != null));
1926
+ }, /* @ts-ignore */
1281
1927
  ...(ngDevMode ? [{ debugName: "isTreeMode" }] : /* istanbul ignore next */ []));
1282
- /** Whether the trigger input is writable and filters as you type. */
1283
- this.isEditableTrigger = computed(() => {
1284
- if (!this.searchable() || this.readonly()) {
1285
- return false;
1286
- }
1928
+ /** Whether the current mode can filter as you type (list, table, or tree). */
1929
+ this.isListSearchMode = computed(() => {
1287
1930
  const mode = this.mode();
1288
- return mode === 'drop-down-list' || mode === 'multi-select' || mode === 'multi-column';
1931
+ return (mode === 'drop-down-list' ||
1932
+ mode === 'multi-select' ||
1933
+ mode === 'drop-down-tree' ||
1934
+ mode === 'multi-select-tree' ||
1935
+ mode === 'multi-column' ||
1936
+ mode === 'multi-column-tree');
1289
1937
  }, /* @ts-ignore */
1938
+ ...(ngDevMode ? [{ debugName: "isListSearchMode" }] : /* istanbul ignore next */ []));
1939
+ /** Whether the trigger input is writable and filters as you type (desktop only). */
1940
+ this.isEditableTrigger = computed(() => this.searchable() && !this.readonly() && !this.isActionsheetStyle() && this.isListSearchMode(), /* @ts-ignore */
1290
1941
  ...(ngDevMode ? [{ debugName: "isEditableTrigger" }] : /* istanbul ignore next */ []));
1942
+ /** Whether search is typed in the actionsheet instead of the trigger. */
1943
+ this.isSheetSearchEnabled = computed(() => this.searchable() && !this.readonly() && this.isActionsheetStyle() && this.isListSearchMode(), /* @ts-ignore */
1944
+ ...(ngDevMode ? [{ debugName: "isSheetSearchEnabled" }] : /* istanbul ignore next */ []));
1945
+ /** Query typed in the actionsheet search field (independent of the trigger display text). */
1946
+ this.sheetSearchText = signal('', /* @ts-ignore */
1947
+ ...(ngDevMode ? [{ debugName: "sheetSearchText" }] : /* istanbul ignore next */ []));
1948
+ /**
1949
+ * Applied tree search query. Set only from `#applyFilterNow` so opening a single-select
1950
+ * with the selected label in the trigger does not filter the tree.
1951
+ */
1952
+ this.#treeFilterQuery = signal('', /* @ts-ignore */
1953
+ ...(ngDevMode ? [{ debugName: "#treeFilterQuery" }] : /* istanbul ignore next */ []));
1954
+ this.#treeFilterEpoch = signal(0, /* @ts-ignore */
1955
+ ...(ngDevMode ? [{ debugName: "#treeFilterEpoch" }] : /* istanbul ignore next */ []));
1956
+ /** Applied (debounced) search query used for result highlighting. */
1957
+ this.#appliedSearchQuery = signal('', /* @ts-ignore */
1958
+ ...(ngDevMode ? [{ debugName: "#appliedSearchQuery" }] : /* istanbul ignore next */ []));
1959
+ /** Increments on every tree filter apply so the tree view remounts with a new instance. */
1960
+ this.treeFilterKey = computed(() => String(this.#treeFilterEpoch()), /* @ts-ignore */
1961
+ ...(ngDevMode ? [{ debugName: "treeFilterKey" }] : /* istanbul ignore next */ []));
1962
+ /** Query passed to result-item highlighting (empty when disabled). */
1963
+ this.highlightQuery = computed(() => (this.highlightSearch() ? this.#appliedSearchQuery() : ''), /* @ts-ignore */
1964
+ ...(ngDevMode ? [{ debugName: "highlightQuery" }] : /* istanbul ignore next */ []));
1291
1965
  /** The datasource for list-based modes; plain arrays are converted. */
1292
1966
  this.resolvedDataSource = computed(() => {
1967
+ const tree = this.treeDataSource();
1968
+ if (this.mode() === 'multi-column-tree' && tree) {
1969
+ const key = `${this.valueField()}|${this.textField()}|${this.treeParentField()}|${this.hasChildrenField()}`;
1970
+ if (this.#multiColumnTreeTableSource &&
1971
+ this.#multiColumnTreeInput === tree &&
1972
+ this.#multiColumnTreeTableKey === key) {
1973
+ return this.#multiColumnTreeTableSource;
1974
+ }
1975
+ const cachedTree = Array.isArray(tree)
1976
+ ? tree
1977
+ : (nodeId) => this.#loadCachedTreeNodes(tree, nodeId);
1978
+ this.#multiColumnTreeInput = tree;
1979
+ this.#multiColumnTreeTableKey = key;
1980
+ this.#multiColumnTreeTableSource = createLookupTreeTableDataSource(cachedTree, {
1981
+ valueField: this.valueField(),
1982
+ textField: this.textField(),
1983
+ parentField: this.treeParentField(),
1984
+ hasChildrenField: this.hasChildrenField(),
1985
+ });
1986
+ return this.#multiColumnTreeTableSource;
1987
+ }
1293
1988
  const source = this.dataSource();
1294
1989
  if (!source) {
1295
1990
  return convertArrayToDataSource([], { key: this.valueField(), pageSize: 20 });
@@ -1299,6 +1994,28 @@ class AXLookupComponent extends NXValueComponent {
1299
1994
  : source;
1300
1995
  }, /* @ts-ignore */
1301
1996
  ...(ngDevMode ? [{ debugName: "resolvedDataSource" }] : /* istanbul ignore next */ []));
1997
+ /**
1998
+ * Tree callback results keyed by parent id. Survives popup remount so
1999
+ * drop-down-tree / multi-select-tree do not refetch on every open.
2000
+ */
2001
+ this.#treeChildrenCache = new WeakMap();
2002
+ this.resolvedTreeDataSource = computed(() => {
2003
+ this.#treeFilterEpoch();
2004
+ const source = this.treeDataSource();
2005
+ const query = this.#treeFilterQuery();
2006
+ const textField = this.textField();
2007
+ if (!source) {
2008
+ return [];
2009
+ }
2010
+ if (Array.isArray(source)) {
2011
+ return query ? filterTreeNodes(source, textField, query) : cloneLookupTreeNodes(source);
2012
+ }
2013
+ if (!query) {
2014
+ return (nodeId) => this.#loadCachedTreeNodes(source, nodeId);
2015
+ }
2016
+ return (nodeId) => this.#loadFilteredCachedTreeNodes(source, nodeId, query);
2017
+ }, /* @ts-ignore */
2018
+ ...(ngDevMode ? [{ debugName: "resolvedTreeDataSource" }] : /* istanbul ignore next */ []));
1302
2019
  /** The current selection normalized to an array. */
1303
2020
  this.selectedValues = computed(() => {
1304
2021
  const value = this.value();
@@ -1321,7 +2038,7 @@ class AXLookupComponent extends NXValueComponent {
1321
2038
  * Text typed in the editable trigger input.
1322
2039
  * Multi-select starts empty; single modes sync from the selected display text.
1323
2040
  */
1324
- this.searchText = linkedSignal(() => (this.mode() === 'multi-select' || this.mode() === 'multi-select-tree' ? '' : this.displayText()), /* @ts-ignore */
2041
+ this.searchText = linkedSignal(() => (this.isMultiple() ? '' : this.displayText()), /* @ts-ignore */
1325
2042
  ...(ngDevMode ? [{ debugName: "searchText" }] : /* istanbul ignore next */ []));
1326
2043
  /**
1327
2044
  * Whether the trigger should render `selectedTemplate` instead of the plain input text.
@@ -1338,12 +2055,34 @@ class AXLookupComponent extends NXValueComponent {
1338
2055
  return !this.expanded() && this.searchText() === this.displayText();
1339
2056
  }, /* @ts-ignore */
1340
2057
  ...(ngDevMode ? [{ debugName: "showSelectedTemplate" }] : /* istanbul ignore next */ []));
2058
+ /** Placeholder for the editable trigger search input. */
2059
+ this.triggerSearchPlaceholder = computed(() => {
2060
+ if (this.isActionsheetStyle()) {
2061
+ return this.isMultiple() && this.selectedItems().length > 0 ? '' : this.placeholder();
2062
+ }
2063
+ if (this.isMultiple() && this.selectedItems().length > 0) {
2064
+ return this.searchPlaceholder();
2065
+ }
2066
+ return this.placeholder();
2067
+ }, /* @ts-ignore */
2068
+ ...(ngDevMode ? [{ debugName: "triggerSearchPlaceholder" }] : /* istanbul ignore next */ []));
1341
2069
  this.popoverRef = viewChild(AXPopoverComponent, /* @ts-ignore */
1342
2070
  ...(ngDevMode ? [{ debugName: "popoverRef" }] : /* istanbul ignore next */ []));
2071
+ this.originRef = viewChild('origin', /* @ts-ignore */
2072
+ ...(ngDevMode ? [{ debugName: "originRef" }] : /* istanbul ignore next */ []));
2073
+ this.popupRef = viewChild('popup', /* @ts-ignore */
2074
+ ...(ngDevMode ? [{ debugName: "popupRef" }] : /* istanbul ignore next */ []));
1343
2075
  this.triggerSearchInput = viewChild('triggerSearchInput', /* @ts-ignore */
1344
2076
  ...(ngDevMode ? [{ debugName: "triggerSearchInput" }] : /* istanbul ignore next */ []));
2077
+ this.#document = inject(DOCUMENT);
1345
2078
  this.listView = viewChild(AXLookupListViewBase, /* @ts-ignore */
1346
2079
  ...(ngDevMode ? [{ debugName: "listView" }] : /* istanbul ignore next */ []));
2080
+ this.dropDownTreeView = viewChild(AXLookupDropDownTreeComponent, /* @ts-ignore */
2081
+ ...(ngDevMode ? [{ debugName: "dropDownTreeView" }] : /* istanbul ignore next */ []));
2082
+ this.multiSelectTreeView = viewChild(AXLookupMultiSelectTreeComponent, /* @ts-ignore */
2083
+ ...(ngDevMode ? [{ debugName: "multiSelectTreeView" }] : /* istanbul ignore next */ []));
2084
+ this.sheetSearchRef = viewChild('sheetSearch', /* @ts-ignore */
2085
+ ...(ngDevMode ? [{ debugName: "sheetSearchRef" }] : /* istanbul ignore next */ []));
1347
2086
  this.#itemsCache = new Map();
1348
2087
  this.#isUserInteraction = false;
1349
2088
  this.#lastValue = undefined;
@@ -1351,14 +2090,8 @@ class AXLookupComponent extends NXValueComponent {
1351
2090
  this.#resolveRevision = 0;
1352
2091
  this.#selectionInitialized = false;
1353
2092
  this.#filterApplied = false;
1354
- /** Placeholder for the editable trigger search input. */
1355
- this.triggerSearchPlaceholder = computed(() => {
1356
- if (this.mode() === 'multi-select' && this.selectedItems().length > 0) {
1357
- return this.searchPlaceholder();
1358
- }
1359
- return this.placeholder();
1360
- }, /* @ts-ignore */
1361
- ...(ngDevMode ? [{ debugName: "triggerSearchPlaceholder" }] : /* istanbul ignore next */ []));
2093
+ this.#searchEnterRevision = 0;
2094
+ this.#sheetSearchFocused = false;
1362
2095
  effect(() => this.#emitValueChanged(this.value()));
1363
2096
  effect(() => this.#emitOpenedOrClosed(this.expanded()));
1364
2097
  effect(() => {
@@ -1403,6 +2136,13 @@ class AXLookupComponent extends NXValueComponent {
1403
2136
  }
1404
2137
  });
1405
2138
  });
2139
+ afterRenderEffect(() => {
2140
+ if (!this.expanded()) {
2141
+ this.#sheetSearchFocused = false;
2142
+ return;
2143
+ }
2144
+ this.#tryFocusSheetSearch();
2145
+ });
1406
2146
  }
1407
2147
  #syncActionsheetStyle() {
1408
2148
  this.isActionsheetStyle.set(this.adaptivityEnabled() && this.#platform.is('SM'));
@@ -1432,7 +2172,7 @@ class AXLookupComponent extends NXValueComponent {
1432
2172
  if (!this.expanded()) {
1433
2173
  return;
1434
2174
  }
1435
- queueMicrotask(() => this.focusListFirst());
2175
+ queueMicrotask(() => this.#focusPopupSearchOrList());
1436
2176
  }
1437
2177
  /**
1438
2178
  * Focuses the lookup trigger input.
@@ -1445,6 +2185,8 @@ class AXLookupComponent extends NXValueComponent {
1445
2185
  }
1446
2186
  /**
1447
2187
  * Handles keyboard interaction on the trigger input.
2188
+ * In multi modes, Backspace with an empty trigger input removes the last chip; repeated presses
2189
+ * clear the whole selection.
1448
2190
  */
1449
2191
  onTriggerKeydown(e) {
1450
2192
  if (this.disabled() || this.readonly()) {
@@ -1454,19 +2196,193 @@ class AXLookupComponent extends NXValueComponent {
1454
2196
  this.close();
1455
2197
  return;
1456
2198
  }
2199
+ if (e.key === 'Backspace' && this.#removeLastChipOnBackspace(e)) {
2200
+ return;
2201
+ }
1457
2202
  if (e.key === 'ArrowDown') {
1458
2203
  e.preventDefault();
1459
2204
  this.expanded.set(true);
1460
- queueMicrotask(() => this.focusListFirst());
2205
+ queueMicrotask(() => this.#focusPopupSearchOrList());
2206
+ return;
2207
+ }
2208
+ if (e.key === 'Enter' && this.isEditableTrigger()) {
2209
+ this.#onSearchEnter(e);
1461
2210
  return;
1462
2211
  }
1463
2212
  if (!this.isEditableTrigger() && (e.key === 'Enter' || e.key === ' ')) {
1464
2213
  e.preventDefault();
1465
2214
  this.expanded.update((open) => !open);
1466
2215
  if (this.expanded()) {
1467
- queueMicrotask(() => this.focusListFirst());
2216
+ queueMicrotask(() => this.#focusPopupSearchOrList());
2217
+ }
2218
+ }
2219
+ }
2220
+ /** Filters the datasource from the actionsheet search field and handles Enter with no matches. */
2221
+ onSheetSearchKeydown(e) {
2222
+ const event = e.nativeEvent;
2223
+ if (!event || event.key !== 'Enter') {
2224
+ return;
2225
+ }
2226
+ this.#onSearchEnter(event);
2227
+ }
2228
+ /**
2229
+ * Enter in search never submits the surrounding form.
2230
+ * - No matches: single-select value is cleared (`null`).
2231
+ * - Exactly one match: that item is selected (no list navigation required).
2232
+ * - Multiple matches: nothing is selected.
2233
+ */
2234
+ #onSearchEnter(event) {
2235
+ event.preventDefault();
2236
+ event.stopPropagation();
2237
+ event.stopImmediatePropagation();
2238
+ void this.#commitOrClearFromSearch();
2239
+ }
2240
+ async #commitOrClearFromSearch() {
2241
+ const revision = ++this.#searchEnterRevision;
2242
+ this.#flushPendingFilter();
2243
+ if (this.#isTreeOnlySearchMode()) {
2244
+ const nodes = await this.#resolvedFilteredTreeNodes();
2245
+ if (revision !== this.#searchEnterRevision) {
2246
+ return;
2247
+ }
2248
+ const items = this.#enabledTreeItems(nodes);
2249
+ if (items.length === 0) {
2250
+ if (this.#currentSearchQuery() && !this.isMultiple()) {
2251
+ this.reset(true);
2252
+ this.close();
2253
+ }
2254
+ return;
2255
+ }
2256
+ if (items.length !== 1) {
2257
+ return;
2258
+ }
2259
+ this.#commitSearchSelection(items);
2260
+ return;
2261
+ }
2262
+ const source = this.resolvedDataSource();
2263
+ if (source.isLoading) {
2264
+ await this.#whenSourceIdle(source);
2265
+ if (revision !== this.#searchEnterRevision) {
2266
+ return;
2267
+ }
2268
+ }
2269
+ if (this.#hasNoSearchMatches()) {
2270
+ if (this.#currentSearchQuery() && !this.isMultiple()) {
2271
+ this.reset(true);
2272
+ this.close();
2273
+ }
2274
+ return;
2275
+ }
2276
+ if (this.#getSearchMatchCount() !== 1) {
2277
+ return;
2278
+ }
2279
+ const item = this.#pickFirstMatch();
2280
+ if (!item) {
2281
+ return;
2282
+ }
2283
+ this.#commitSearchSelection([item]);
2284
+ }
2285
+ #commitSearchSelection(items) {
2286
+ if (items.length === 0) {
2287
+ if (this.#currentSearchQuery() && !this.isMultiple()) {
2288
+ this.reset(true);
2289
+ this.close();
1468
2290
  }
2291
+ return;
2292
+ }
2293
+ if (!this.#isTypedFilterQuery()) {
2294
+ return;
2295
+ }
2296
+ const item = this.#pickFirstFromItems(items);
2297
+ if (!item) {
2298
+ return;
2299
+ }
2300
+ const event = { item, value: item[this.valueField()] };
2301
+ if (this.isMultiple()) {
2302
+ this.handleMultiToggle(event);
2303
+ }
2304
+ else {
2305
+ this.handleSinglePick(event);
2306
+ }
2307
+ }
2308
+ async #resolvedFilteredTreeNodes() {
2309
+ const source = this.resolvedTreeDataSource();
2310
+ if (Array.isArray(source)) {
2311
+ return source;
2312
+ }
2313
+ return (await source()) ?? [];
2314
+ }
2315
+ #enabledTreeItems(nodes) {
2316
+ const disabledField = this.disabledField();
2317
+ return flattenTreeNodes(nodes).filter((item) => !item[disabledField]);
2318
+ }
2319
+ #pickFirstMatch() {
2320
+ const disabledField = this.disabledField();
2321
+ const source = this.resolvedDataSource();
2322
+ const items = (source.cachedItems.length ? source.cachedItems : source.items).filter((item) => item != null && !item[disabledField]);
2323
+ return this.#pickFirstFromItems(items);
2324
+ }
2325
+ #pickFirstFromItems(items) {
2326
+ if (items.length === 0) {
2327
+ return null;
2328
+ }
2329
+ const query = this.#currentSearchQuery().toLowerCase();
2330
+ if (!query) {
2331
+ return items[0];
2332
+ }
2333
+ const textOf = (item) => String(item?.[this.textField()] ?? '').trim().toLowerCase();
2334
+ return items.find((item) => textOf(item) === query) ?? items.find((item) => textOf(item).includes(query)) ?? items[0];
2335
+ }
2336
+ #whenSourceIdle(source) {
2337
+ if (!source.isLoading) {
2338
+ return Promise.resolve();
2339
+ }
2340
+ return new Promise((resolve) => {
2341
+ const sub = source.onLoadingChanged.subscribe((loading) => {
2342
+ if (!loading) {
2343
+ sub.unsubscribe();
2344
+ resolve();
2345
+ }
2346
+ });
2347
+ });
2348
+ }
2349
+ #flushPendingFilter() {
2350
+ if (!this.#searchDebounce) {
2351
+ return;
2352
+ }
2353
+ clearTimeout(this.#searchDebounce);
2354
+ this.#searchDebounce = undefined;
2355
+ this.#applyFilterNow(this.#currentSearchQuery());
2356
+ }
2357
+ #currentSearchQuery() {
2358
+ if (this.isSheetSearchEnabled()) {
2359
+ return (this.sheetSearchText() || this.#sheetSearchInputValue()).trim();
2360
+ }
2361
+ return this.searchText().trim();
2362
+ }
2363
+ #isTypedFilterQuery() {
2364
+ const query = this.#currentSearchQuery();
2365
+ if (!query) {
2366
+ return false;
2367
+ }
2368
+ if (!this.isSheetSearchEnabled() && !this.isMultiple()) {
2369
+ return query.toLowerCase() !== this.displayText().trim().toLowerCase();
2370
+ }
2371
+ return true;
2372
+ }
2373
+ #hasNoSearchMatches() {
2374
+ return this.#getSearchMatchCount() === 0;
2375
+ }
2376
+ #getSearchMatchCount() {
2377
+ const list = this.listView();
2378
+ if (list) {
2379
+ return list.matchCount();
2380
+ }
2381
+ const source = this.resolvedDataSource();
2382
+ if (source.isLoading) {
2383
+ return -1;
1469
2384
  }
2385
+ return source.totalCount;
1470
2386
  }
1471
2387
  /** Blocks typing when the trigger is not editable (keeps Tab / keyboard open working). */
1472
2388
  onBeforeInput(event) {
@@ -1475,9 +2391,13 @@ class AXLookupComponent extends NXValueComponent {
1475
2391
  }
1476
2392
  }
1477
2393
  /**
1478
- * Returns focus to the trigger input when list navigation requests it.
2394
+ * Returns focus to the search field when list navigation requests it.
1479
2395
  */
1480
2396
  onListNavigateOut(_reason) {
2397
+ if (this.isSheetSearchEnabled()) {
2398
+ this.sheetSearchRef()?.focus();
2399
+ return;
2400
+ }
1481
2401
  this.triggerSearchInput()?.nativeElement.focus();
1482
2402
  }
1483
2403
  focusListFirst() {
@@ -1500,11 +2420,17 @@ class AXLookupComponent extends NXValueComponent {
1500
2420
  onPopoverClosed() {
1501
2421
  this.expanded.set(false);
1502
2422
  this.searchText.set(this.isMultiple() ? '' : this.displayText());
2423
+ this.sheetSearchText.set('');
2424
+ this.#appliedSearchQuery.set('');
2425
+ this.#treeFilterQuery.set('');
2426
+ this.#treeFilterEpoch.update((value) => value + 1);
1503
2427
  if (this.#filterApplied) {
1504
2428
  this.#filterApplied = false;
1505
- const source = this.resolvedDataSource();
1506
- source.clearFilter();
1507
- source.refresh();
2429
+ if (!this.#isTreeOnlySearchMode()) {
2430
+ const source = this.resolvedDataSource();
2431
+ source.clearFilter();
2432
+ source.refresh();
2433
+ }
1508
2434
  }
1509
2435
  }
1510
2436
  /**
@@ -1539,8 +2465,14 @@ class AXLookupComponent extends NXValueComponent {
1539
2465
  this.expanded.set(true);
1540
2466
  this.#applyFilterDebounced(text);
1541
2467
  }
2468
+ /** Filters the datasource from the actionsheet search field (reads the input so delayed ngModel cannot block typing). */
2469
+ onSheetSearchInput() {
2470
+ const query = this.#sheetSearchInputValue();
2471
+ this.sheetSearchText.set(query);
2472
+ this.#applyFilterDebounced(query);
2473
+ }
1542
2474
  /**
1543
- * Commits a single pick (drop-down-list, drop-down-tree, multi-column) and closes the popup.
2475
+ * Commits a single pick (drop-down-list, drop-down-tree, multi-column, multi-column-tree) and closes the popup.
1544
2476
  */
1545
2477
  handleSinglePick(e) {
1546
2478
  this.#emitItemClick(e.item);
@@ -1567,7 +2499,10 @@ class AXLookupComponent extends NXValueComponent {
1567
2499
  const next = exists ? current.filter((v) => !(v == e.value)) : [...current, e.value];
1568
2500
  this.#isUserInteraction = true;
1569
2501
  this.value.set(next);
1570
- if (this.isEditableTrigger() && this.searchText()) {
2502
+ if (this.isSheetSearchEnabled() && this.sheetSearchText()) {
2503
+ this.#clearSheetSearch();
2504
+ }
2505
+ else if (this.isEditableTrigger() && this.searchText()) {
1571
2506
  this.searchText.set('');
1572
2507
  this.#applyFilterDebounced('');
1573
2508
  }
@@ -1586,6 +2521,13 @@ class AXLookupComponent extends NXValueComponent {
1586
2521
  }
1587
2522
  this.#isUserInteraction = true;
1588
2523
  this.value.set([...e.ids]);
2524
+ if (this.isSheetSearchEnabled() && this.sheetSearchText()) {
2525
+ this.#clearSheetSearch();
2526
+ }
2527
+ else if (this.isEditableTrigger() && this.searchText()) {
2528
+ this.searchText.set('');
2529
+ this.#applyFilterDebounced('');
2530
+ }
1589
2531
  }
1590
2532
  /** Forwards native focus from the trigger input. */
1591
2533
  emitOnFocus(e) {
@@ -1602,6 +2544,38 @@ class AXLookupComponent extends NXValueComponent {
1602
2544
  htmlElement: this.nativeElement,
1603
2545
  nativeEvent: e,
1604
2546
  });
2547
+ this.#scheduleCloseOnTriggerBlur(e);
2548
+ }
2549
+ /**
2550
+ * Closes the popup when the trigger input loses focus, unless focus moved into the
2551
+ * popover panel or another part of the trigger (e.g. sheet search or list navigation).
2552
+ */
2553
+ #scheduleCloseOnTriggerBlur(e) {
2554
+ if (!this.expanded()) {
2555
+ return;
2556
+ }
2557
+ const related = e.relatedTarget;
2558
+ if (related instanceof Node && this.#isFocusWithinPopupOrTrigger(related)) {
2559
+ return;
2560
+ }
2561
+ queueMicrotask(() => {
2562
+ if (!this.expanded()) {
2563
+ return;
2564
+ }
2565
+ const active = this.#document.activeElement;
2566
+ if (active instanceof Node && this.#isFocusWithinPopupOrTrigger(active)) {
2567
+ return;
2568
+ }
2569
+ this.close();
2570
+ });
2571
+ }
2572
+ #isFocusWithinPopupOrTrigger(node) {
2573
+ const popup = this.popupRef()?.nativeElement;
2574
+ if (popup?.contains(node)) {
2575
+ return true;
2576
+ }
2577
+ const origin = this.originRef()?.nativeElement;
2578
+ return Boolean(origin?.contains(node));
1605
2579
  }
1606
2580
  #emitItemClick(item) {
1607
2581
  this.onItemClick.emit({
@@ -1631,6 +2605,24 @@ class AXLookupComponent extends NXValueComponent {
1631
2605
  this.#isUserInteraction = true;
1632
2606
  this.value.set(this.selectedValues().filter((v) => !(v == value)));
1633
2607
  }
2608
+ /** Removes the last chip when Backspace is pressed with an empty trigger input (multi modes). */
2609
+ #removeLastChipOnBackspace(event) {
2610
+ if (!this.isMultiple() || !this.#isTriggerInputEmpty(event)) {
2611
+ return false;
2612
+ }
2613
+ const items = this.selectedItems();
2614
+ if (items.length === 0) {
2615
+ return false;
2616
+ }
2617
+ event.preventDefault();
2618
+ event.stopPropagation();
2619
+ this.removeChip(event, items[items.length - 1]);
2620
+ return true;
2621
+ }
2622
+ #isTriggerInputEmpty(event) {
2623
+ const input = event.target instanceof HTMLInputElement ? event.target : this.triggerSearchInput()?.nativeElement;
2624
+ return input ? input.value.length === 0 : !this.searchText();
2625
+ }
1634
2626
  /**
1635
2627
  * Seeds the item cache with known items so matching `value` keys resolve without `byKey`.
1636
2628
  * Useful after an async parent-entity load when `valueItems` is not bound.
@@ -1663,26 +2655,130 @@ class AXLookupComponent extends NXValueComponent {
1663
2655
  }
1664
2656
  this.#isUserInteraction = isUserInteraction;
1665
2657
  this.value.set(next);
1666
- if (this.isEditableTrigger() && this.searchText()) {
2658
+ if (this.isSheetSearchEnabled() && this.sheetSearchText()) {
2659
+ this.#clearSheetSearch();
2660
+ }
2661
+ else if (this.isEditableTrigger() && this.searchText()) {
1667
2662
  this.searchText.set('');
1668
2663
  this.#applyFilterDebounced('');
1669
2664
  }
1670
2665
  }
2666
+ #clearSheetSearch() {
2667
+ this.sheetSearchText.set('');
2668
+ this.sheetSearchRef()?.commitValue('', false);
2669
+ this.#applyFilterDebounced('');
2670
+ }
2671
+ #sheetSearchInputValue() {
2672
+ return this.sheetSearchRef()?.getHostElement()?.querySelector('input')?.value ?? '';
2673
+ }
2674
+ #tryFocusSheetSearch() {
2675
+ if (!this.isSheetSearchEnabled() || this.#sheetSearchFocused) {
2676
+ return;
2677
+ }
2678
+ const search = this.sheetSearchRef();
2679
+ if (!search) {
2680
+ return;
2681
+ }
2682
+ this.#sheetSearchFocused = true;
2683
+ search.focus();
2684
+ }
2685
+ #focusPopupSearchOrList() {
2686
+ if (this.isSheetSearchEnabled()) {
2687
+ this.#tryFocusSheetSearch();
2688
+ return;
2689
+ }
2690
+ this.focusListFirst();
2691
+ }
2692
+ #loadCachedTreeNodes(source, nodeId) {
2693
+ let byParent = this.#treeChildrenCache.get(source);
2694
+ if (!byParent) {
2695
+ byParent = new Map();
2696
+ this.#treeChildrenCache.set(source, byParent);
2697
+ }
2698
+ const key = nodeId ?? '';
2699
+ const cached = byParent.get(key);
2700
+ if (cached) {
2701
+ return cached;
2702
+ }
2703
+ const request = Promise.resolve(source(nodeId)).then((nodes) => nodes ?? [], (error) => {
2704
+ byParent.delete(key);
2705
+ throw error;
2706
+ });
2707
+ byParent.set(key, request);
2708
+ return request;
2709
+ }
2710
+ #nodeMayHaveChildren(node) {
2711
+ const raw = node['children'];
2712
+ if (Array.isArray(raw) && raw.length > 0) {
2713
+ return true;
2714
+ }
2715
+ const count = node['childrenCount'];
2716
+ if (typeof count === 'number' && count > 0) {
2717
+ return true;
2718
+ }
2719
+ return node['hasChild'] === true || node['hasChildren'] === true;
2720
+ }
2721
+ /**
2722
+ * Builds a nested tree for search by loading lazy children (using the existing cache)
2723
+ * so a query can match sub-items that have not been expanded yet.
2724
+ */
2725
+ async #hydrateTreeChildrenForSearch(source, nodes, visited = new Set()) {
2726
+ const valueField = this.valueField();
2727
+ return Promise.all(nodes.map(async (node) => {
2728
+ const raw = node['children'];
2729
+ const nested = Array.isArray(raw) && raw.length > 0 ? raw : undefined;
2730
+ if (nested) {
2731
+ const children = await this.#hydrateTreeChildrenForSearch(source, nested, visited);
2732
+ return { ...node, children };
2733
+ }
2734
+ const id = String(node[valueField] ?? '');
2735
+ if (!id || !this.#nodeMayHaveChildren(node) || visited.has(id)) {
2736
+ return node;
2737
+ }
2738
+ visited.add(id);
2739
+ const loaded = await this.#loadCachedTreeNodes(source, id);
2740
+ const children = await this.#hydrateTreeChildrenForSearch(source, loaded, visited);
2741
+ return { ...node, children };
2742
+ }));
2743
+ }
2744
+ async #loadFilteredCachedTreeNodes(source, nodeId, query) {
2745
+ const nodes = await this.#loadCachedTreeNodes(source, nodeId);
2746
+ const hydrated = await this.#hydrateTreeChildrenForSearch(source, nodes);
2747
+ return filterTreeNodes(hydrated, this.textField(), query);
2748
+ }
2749
+ #applyFilterNow(text) {
2750
+ const query = text?.trim() ?? '';
2751
+ this.#appliedSearchQuery.set(query);
2752
+ if (this.#isTreeOnlySearchMode()) {
2753
+ this.#treeFilterQuery.set(query);
2754
+ this.#treeFilterEpoch.update((value) => value + 1);
2755
+ this.#filterApplied = query.length > 0;
2756
+ return;
2757
+ }
2758
+ const source = this.resolvedDataSource();
2759
+ if (query) {
2760
+ source.filter({ field: this.textField(), value: query, operator: { type: 'contains' } });
2761
+ this.#filterApplied = true;
2762
+ }
2763
+ else {
2764
+ source.clearFilter();
2765
+ }
2766
+ source.refresh();
2767
+ }
1671
2768
  #applyFilterDebounced(text) {
1672
2769
  if (this.#searchDebounce) {
1673
2770
  clearTimeout(this.#searchDebounce);
2771
+ this.#searchDebounce = undefined;
2772
+ }
2773
+ const query = text?.trim() ?? '';
2774
+ // Restore the full tree immediately when the query is cleared.
2775
+ if (!query) {
2776
+ this.#applyFilterNow('');
2777
+ return;
1674
2778
  }
1675
2779
  this.#searchDebounce = setTimeout(() => {
1676
- const source = this.resolvedDataSource();
1677
- const query = text?.trim() ?? '';
1678
- if (query) {
1679
- source.filter({ field: this.textField(), value: query, operator: { type: 'contains' } });
1680
- this.#filterApplied = true;
1681
- }
1682
- else {
1683
- source.clearFilter();
1684
- }
1685
- source.refresh();
2780
+ this.#searchDebounce = undefined;
2781
+ this.#applyFilterNow(text);
1686
2782
  }, 300);
1687
2783
  }
1688
2784
  async #resolveSelectedItems(values) {
@@ -1698,7 +2794,7 @@ class AXLookupComponent extends NXValueComponent {
1698
2794
  component: this,
1699
2795
  htmlElement: this.nativeElement,
1700
2796
  isUserInteraction: this.#isUserInteraction,
1701
- items,
2797
+ items: items,
1702
2798
  value: this.value(),
1703
2799
  });
1704
2800
  }
@@ -1810,12 +2906,12 @@ class AXLookupComponent extends NXValueComponent {
1810
2906
  expanded ? this.onOpened.emit(event) : this.onClosed.emit(event);
1811
2907
  }
1812
2908
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1813
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXLookupComponent, isStandalone: true, selector: "ax-lookup", inputs: { name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: false, transformFunction: null }, treeDataSource: { classPropertyName: "treeDataSource", publicName: "treeDataSource", isSignal: true, isRequired: false, transformFunction: null }, valueField: { classPropertyName: "valueField", publicName: "valueField", isSignal: true, isRequired: false, transformFunction: null }, textField: { classPropertyName: "textField", publicName: "textField", isSignal: true, isRequired: false, transformFunction: null }, disabledField: { classPropertyName: "disabledField", publicName: "disabledField", isSignal: true, isRequired: false, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, searchable: { classPropertyName: "searchable", publicName: "searchable", isSignal: true, isRequired: false, transformFunction: null }, adaptivityEnabled: { classPropertyName: "adaptivityEnabled", publicName: "adaptivityEnabled", isSignal: true, isRequired: false, transformFunction: null }, caption: { classPropertyName: "caption", publicName: "caption", isSignal: true, isRequired: false, transformFunction: null }, alternate: { classPropertyName: "alternate", publicName: "alternate", isSignal: true, isRequired: false, transformFunction: null }, searchPlaceholder: { classPropertyName: "searchPlaceholder", publicName: "searchPlaceholder", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, look: { classPropertyName: "look", publicName: "look", isSignal: true, isRequired: false, transformFunction: null }, itemHeight: { classPropertyName: "itemHeight", publicName: "itemHeight", isSignal: true, isRequired: false, transformFunction: null }, maxVisibleItems: { classPropertyName: "maxVisibleItems", publicName: "maxVisibleItems", isSignal: true, isRequired: false, transformFunction: null }, treeSelectionBehavior: { classPropertyName: "treeSelectionBehavior", publicName: "treeSelectionBehavior", isSignal: true, isRequired: false, transformFunction: null }, itemTemplate: { classPropertyName: "itemTemplate", publicName: "itemTemplate", isSignal: true, isRequired: false, transformFunction: null }, selectedTemplate: { classPropertyName: "selectedTemplate", publicName: "selectedTemplate", isSignal: true, isRequired: false, transformFunction: null }, emptyTemplate: { classPropertyName: "emptyTemplate", publicName: "emptyTemplate", isSignal: true, isRequired: false, transformFunction: null }, loadingTemplate: { classPropertyName: "loadingTemplate", publicName: "loadingTemplate", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, valueItems: { classPropertyName: "valueItems", publicName: "valueItems", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { look: "lookChange", value: "valueChange", onValueChanged: "onValueChanged", onSelectionChanged: "onSelectionChanged", onFocus: "onFocus", onBlur: "onBlur", onItemClick: "onItemClick", onItemSelected: "onItemSelected", onOpened: "onOpened", onClosed: "onClosed" }, providers: [
2909
+ 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 }, highlightSearch: { classPropertyName: "highlightSearch", publicName: "highlightSearch", isSignal: true, isRequired: false, transformFunction: null }, itemTemplate: { classPropertyName: "itemTemplate", publicName: "itemTemplate", isSignal: true, isRequired: false, transformFunction: null }, selectedTemplate: { classPropertyName: "selectedTemplate", publicName: "selectedTemplate", isSignal: true, isRequired: false, transformFunction: null }, emptyTemplate: { classPropertyName: "emptyTemplate", publicName: "emptyTemplate", isSignal: true, isRequired: false, transformFunction: null }, loadingTemplate: { classPropertyName: "loadingTemplate", publicName: "loadingTemplate", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, valueItems: { classPropertyName: "valueItems", publicName: "valueItems", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { look: "lookChange", value: "valueChange", onValueChanged: "onValueChanged", onSelectionChanged: "onSelectionChanged", onFocus: "onFocus", onBlur: "onBlur", onItemClick: "onItemClick", onItemSelected: "onItemSelected", onOpened: "onOpened", onClosed: "onClosed" }, providers: [
1814
2910
  { provide: AXComponent, useExisting: AXLookupComponent },
1815
2911
  { provide: AXClearableComponent, useExisting: AXLookupComponent },
1816
2912
  { provide: AXClosableComponent, useExisting: AXLookupComponent },
1817
2913
  { provide: AXValuableComponent, useExisting: AXLookupComponent },
1818
- ], viewQueries: [{ propertyName: "popoverRef", first: true, predicate: AXPopoverComponent, descendants: true, isSignal: true }, { propertyName: "triggerSearchInput", first: true, predicate: ["triggerSearchInput"], descendants: true, isSignal: true }, { propertyName: "listView", first: true, predicate: AXLookupListViewBase, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div\n #origin\n class=\"ax-editor-container ax-{{ look() }} ax-default\"\n [class.ax-lookup-trigger]=\"!isEditableTrigger()\"\n [class.ax-lookup-trigger-multiple]=\"isMultiple()\"\n [class.ax-state-disabled]=\"disabled()\"\n [class.ax-state-readonly]=\"readonly()\"\n (click)=\"onTriggerClick()\"\n>\n <ng-content select=\"ax-prefix\"></ng-content>\n\n @if (isMultiple()) {\n <div class=\"ax-lookup-chips\">\n @for (item of selectedItems(); track trackSelectedKey(item)) {\n <ax-chips class=\"ax-sm\" color=\"primary\" look=\"twotone\" [text]=\"selectedTemplate() ? '' : getItemText(item)\">\n @if (selectedTemplate()) {\n <ax-prefix>\n <ng-container\n [ngTemplateOutlet]=\"selectedTemplate()!\"\n [ngTemplateOutletContext]=\"{ $implicit: item }\"\n />\n </ax-prefix>\n }\n @if (!disabled() && !readonly()) {\n <ax-suffix>\n <button type=\"button\" tabindex=\"-1\" (click)=\"removeChip($event, item)\">\n <span class=\"ax-icon ax-icon-close\"></span>\n </button>\n </ax-suffix>\n }\n </ax-chips>\n }\n <input\n #triggerSearchInput\n type=\"text\"\n class=\"ax-input ax-lookup-trigger-search\"\n [class.ax-lookup-select-input]=\"!isEditableTrigger()\"\n [placeholder]=\"triggerSearchPlaceholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly() || !isEditableTrigger()\"\n [attr.inputmode]=\"isEditableTrigger() ? null : 'none'\"\n [value]=\"searchText()\"\n (input)=\"onTriggerSearchInput($any($event.target).value)\"\n (keydown)=\"onTriggerKeydown($event)\"\n (beforeinput)=\"onBeforeInput($event)\"\n (focus)=\"emitOnFocus($event)\"\n (blur)=\"emitOnBlur($event)\"\n />\n </div>\n } @else {\n <div class=\"ax-lookup-value\">\n @if (showSelectedTemplate()) {\n <div class=\"ax-lookup-selected-content\" aria-hidden=\"true\">\n <ng-container\n [ngTemplateOutlet]=\"selectedTemplate()!\"\n [ngTemplateOutletContext]=\"{ $implicit: selectedItems()[0] }\"\n />\n </div>\n }\n <input\n #triggerSearchInput\n type=\"text\"\n class=\"ax-input\"\n [class.ax-lookup-select-input]=\"!isEditableTrigger()\"\n [class.ax-lookup-input-overlay]=\"showSelectedTemplate()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly() || !isEditableTrigger()\"\n [attr.inputmode]=\"isEditableTrigger() ? null : 'none'\"\n [value]=\"searchText()\"\n (input)=\"onTriggerSearchInput($any($event.target).value)\"\n (keydown)=\"onTriggerKeydown($event)\"\n (beforeinput)=\"onBeforeInput($event)\"\n (focus)=\"emitOnFocus($event)\"\n (blur)=\"emitOnBlur($event)\"\n />\n </div>\n }\n\n @if (selectedValues().length > 0 && !disabled() && !readonly()) {\n <ng-content select=\"ax-clear-button\"></ng-content>\n }\n\n <button\n type=\"button\"\n class=\"ax-general-button-icon\"\n tabindex=\"-1\"\n [disabled]=\"disabled() || readonly()\"\n >\n <span\n class=\"ax-icon\"\n [class.ax-icon-chevron-down]=\"!expanded()\"\n [class.ax-icon-chevron-up]=\"expanded()\"\n ></span>\n </button>\n <ng-content select=\"ax-suffix\"></ng-content>\n</div>\n\n<ax-popover\n [target]=\"origin\"\n [openOn]=\"'manual'\"\n [closeOn]=\"'clickOut'\"\n [placement]=\"'bottom-start'\"\n [width]=\"isActionsheetStyle() ? '100%' : origin.offsetWidth + 'px'\"\n [adaptivityEnabled]=\"isActionsheetStyle()\"\n [disabled]=\"disabled() || readonly()\"\n (onClosed)=\"onPopoverClosed()\"\n>\n <div class=\"ax-lookup-popup\" [class.ax-is-actionsheet]=\"isActionsheetStyle()\" [class.ax-is-alternate]=\"alternate()\" (keydown.escape)=\"close()\">\n @if (isActionsheetStyle()) {\n <ax-header class=\"ax-solid\">\n <ax-title>{{ caption() || placeholder() || ('@acorex:selectbox.popover.title' | translate | async) }}</ax-title>\n <ax-close-button [icon]=\"isMultiple() ? 'ax-icon ax-icon-check' : 'ax-icon ax-icon-close'\"></ax-close-button>\n </ax-header>\n }\n <ng-content select=\"ax-header\"></ng-content>\n @if (expanded()) {\n @switch (mode()) {\n @case ('drop-down-list') {\n <ax-lookup-drop-down-list\n [dataSource]=\"resolvedDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [itemHeight]=\"itemHeight()\"\n [maxVisibleItems]=\"maxVisibleItems()\"\n [itemTemplate]=\"itemTemplate()\"\n [emptyTemplate]=\"emptyTemplate()\"\n [loadingTemplate]=\"loadingTemplate()\"\n [alternate]=\"alternate()\"\n (itemClick)=\"handleSinglePick($event)\"\n (navigateOut)=\"onListNavigateOut($event)\"\n />\n }\n @case ('multi-select') {\n <ax-lookup-multi-select\n [dataSource]=\"resolvedDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [itemHeight]=\"itemHeight()\"\n [maxVisibleItems]=\"maxVisibleItems()\"\n [itemTemplate]=\"itemTemplate()\"\n [emptyTemplate]=\"emptyTemplate()\"\n [loadingTemplate]=\"loadingTemplate()\"\n [alternate]=\"alternate()\"\n (itemClick)=\"handleMultiToggle($event)\"\n (navigateOut)=\"onListNavigateOut($event)\"\n />\n }\n @case ('drop-down-tree') {\n <ax-lookup-drop-down-tree\n [dataSource]=\"treeDataSource()!\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [nodeTemplate]=\"$any(itemTemplate())\"\n (itemClick)=\"handleSinglePick($event)\"\n />\n }\n @case ('multi-select-tree') {\n <ax-lookup-multi-select-tree\n [dataSource]=\"treeDataSource()!\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [selectionBehavior]=\"treeSelectionBehavior()\"\n [nodeTemplate]=\"$any(itemTemplate())\"\n (selectionChange)=\"handleTreeSelectionChange($event)\"\n />\n }\n @case ('multi-column') {\n <ax-lookup-multi-column\n [dataSource]=\"resolvedDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [itemHeight]=\"itemHeight()\"\n [maxVisibleItems]=\"maxVisibleItems()\"\n [columns]=\"columns()\"\n [itemTemplate]=\"itemTemplate()\"\n [emptyTemplate]=\"emptyTemplate()\"\n [loadingTemplate]=\"loadingTemplate()\"\n [alternate]=\"alternate()\"\n (itemClick)=\"handleSinglePick($event)\"\n />\n }\n }\n }\n <ng-content select=\"ax-footer\"></ng-content>\n </div>\n</ax-popover>\n<ng-content select=\"ax-validation-rule\"></ng-content>\n", styles: ["@layer properties;@layer components{ax-lookup{display:block;width:100%}ax-lookup .ax-editor-container{justify-content:flex-start;gap:calc(var(--spacing, .25rem) * 1)}ax-lookup .ax-lookup-trigger{cursor:pointer;-webkit-user-select:none;user-select:none}ax-lookup .ax-lookup-trigger-multiple{height:auto;min-height:calc(var(--spacing, .25rem) * 9);padding-block:calc(var(--spacing, .25rem) * 1)}ax-lookup .ax-lookup-value{position:relative;display:flex;min-width:calc(var(--spacing, .25rem) * 0);flex:1;align-items:center;overflow:hidden}ax-lookup .ax-lookup-select-input{cursor:pointer;caret-color:transparent;-webkit-user-select:none;user-select:none}ax-lookup .ax-lookup-selected-content{pointer-events:none;position:relative;z-index:0;display:flex;min-width:calc(var(--spacing, .25rem) * 0);flex:1;align-items:center;overflow:hidden}ax-lookup .ax-lookup-input-overlay{position:absolute;inset:calc(var(--spacing, .25rem) * 0);z-index:10;margin:calc(var(--spacing, .25rem) * 0)!important;height:100%;width:100%;border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding:calc(var(--spacing, .25rem) * 0)!important;color:transparent;caret-color:transparent}ax-lookup .ax-lookup-chips{display:flex;min-width:calc(var(--spacing, .25rem) * 0);flex:1;flex-wrap:wrap;align-items:center;gap:calc(var(--spacing, .25rem) * 1)}ax-lookup .ax-lookup-trigger-search{margin:calc(var(--spacing, .25rem) * 0)!important;height:calc(var(--spacing, .25rem) * 7.5);width:auto!important;min-width:calc(var(--spacing, .25rem) * 16);flex:1;flex-basis:calc(var(--spacing, .25rem) * 16)}ax-lookup .ax-lookup-placeholder{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){ax-lookup .ax-lookup-placeholder{color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 50%,transparent)}}ax-lookup ax-chips ax-prefix,ax-lookup ax-chips ax-suffix{padding:calc(var(--spacing, .25rem) * 0)!important}ax-lookup ax-chips ax-suffix button{display:flex;cursor:pointer;align-items:center;border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding:calc(var(--spacing, .25rem) * 0)}.ax-lookup-popup{box-sizing:border-box;display:flex;width:100%;flex-direction:column;overflow:hidden;border-radius:var(--ax-sys-border-radius);border-style:var(--tw-border-style);border-width:1px;border-color:rgba(var(--ax-sys-color-border-surface));background-color:rgba(var(--ax-sys-color-lightest-surface));--tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ax-lookup-popup:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:rgba(var(--ax-sys-color-darkest-surface))}.ax-lookup-popup.ax-is-actionsheet{border-bottom-right-radius:0;border-bottom-left-radius:0;--tw-shadow: 0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ax-lookup-popup.ax-is-actionsheet>ax-header.ax-solid{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:rgba(var(--ax-sys-color-border-lightest-surface))}.ax-lookup-popup.ax-is-actionsheet>ax-header.ax-solid .ax-icon-check{color:rgba(var(--ax-sys-color-primary-surface))}.ax-lookup-popup.ax-is-actionsheet>ax-header.ax-solid ax-title{font-size:var(--text-base, 1rem);line-height:var(--tw-leading, var(--text-base--line-height, 1.5 ));--tw-leading: calc(var(--spacing, .25rem) * 6);line-height:calc(var(--spacing, .25rem) * 6);--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500)}.ax-lookup-popup>ax-header:not(.ax-solid),.ax-lookup-popup>ax-footer{flex-shrink:0;border-color:rgba(var(--ax-sys-color-border-lightest-surface))}.ax-lookup-popup>ax-header:not(.ax-solid){border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.ax-lookup-popup>ax-footer{border-top-style:var(--tw-border-style);border-top-width:1px}.ax-lookup-viewport{width:100%}.ax-lookup-empty{display:flex;min-height:calc(var(--spacing, .25rem) * 12);width:100%;align-items:center;justify-content:center;padding-inline:calc(var(--spacing, .25rem) * 3);padding-block:calc(var(--spacing, .25rem) * 3);text-align:center;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-empty{color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 60%,transparent)}}.ax-lookup-option-host{box-sizing:border-box;display:flex;cursor:pointer;align-items:center;gap:calc(var(--spacing, .25rem) * 2);border-style:var(--tw-border-style);border-width:1px;border-color:transparent;padding-inline:calc(var(--spacing, .25rem) * 3);font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgba(var(--ax-sys-color-on-surface));--tw-outline-style: none;outline-style:none}.ax-lookup-option-host.ax-state-alternate{background-color:rgba(var(--ax-sys-color-light-surface))}.ax-lookup-option-host.ax-state-alternate:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:rgba(var(--ax-sys-color-surface))}.ax-lookup-option-host:hover,.ax-lookup-option-host.ax-state-active{background-color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-option-host:hover,.ax-lookup-option-host.ax-state-active{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 10%,transparent)}}.ax-lookup-option-host.ax-state-alternate:hover,.ax-lookup-option-host.ax-state-alternate.ax-state-active{background-color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-option-host.ax-state-alternate:hover,.ax-lookup-option-host.ax-state-alternate.ax-state-active{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 15%,transparent)}}.ax-lookup-option-host.ax-state-selected,.ax-lookup-option-host.ax-state-selected:hover,.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate,.ax-lookup-option-host.ax-state-selected.ax-state-alternate:hover,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active{background-color:rgba(var(--ax-sys-color-primary-lightest-surface))}:is(.ax-lookup-option-host.ax-state-selected,.ax-lookup-option-host.ax-state-selected:hover,.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate,.ax-lookup-option-host.ax-state-selected.ax-state-alternate:hover,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active):where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:rgba(var(--ax-sys-color-primary-darkest-surface))}@supports (color: color-mix(in lab,red,red)){:is(.ax-lookup-option-host.ax-state-selected,.ax-lookup-option-host.ax-state-selected:hover,.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate,.ax-lookup-option-host.ax-state-selected.ax-state-alternate:hover,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active):where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-darkest-surface)) 25%,transparent)}}.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active{background-color:rgba(var(--ax-sys-color-primary-lightest-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-lightest-surface)) 80%,transparent)}}:is(.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active):where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:rgba(var(--ax-sys-color-primary-darkest-surface))}@supports (color: color-mix(in lab,red,red)){:is(.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active):where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-darkest-surface)) 40%,transparent)}}.ax-lookup-option-host .ax-lookup-checkbox{pointer-events:none;width:calc(var(--spacing, .25rem) * 4);height:calc(var(--spacing, .25rem) * 4);flex-shrink:0;accent-color:rgba(var(--ax-sys-color-primary-surface))}.ax-lookup-option-host .ax-lookup-option-loading{width:100%;padding-inline:calc(var(--spacing, .25rem) * 3);font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-option-host .ax-lookup-option-loading{color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 50%,transparent)}}.ax-lookup-option{justify-content:space-between}.ax-lookup-option-host.ax-state-selected,.ax-lookup-option.ax-state-selected{color:rgba(var(--ax-sys-color-primary-surface))!important}.ax-lookup-option-host.ax-state-selected .ax-lookup-option-text,.ax-lookup-option-host.ax-state-selected .ax-lookup-option-check,.ax-lookup-option-host.ax-state-selected ax-icon{color:rgba(var(--ax-sys-color-primary-surface))!important}.ax-lookup-option-text{min-width:calc(var(--spacing, .25rem) * 0);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ax-lookup-option-check{margin-inline-start:auto;flex-shrink:0;color:rgba(var(--ax-sys-color-primary-surface))!important}ax-lookup-multi-column,.ax-lookup-multi-column{display:block;min-height:calc(var(--spacing, .25rem) * 0);width:100%}:is(ax-lookup-multi-column,.ax-lookup-multi-column) .ax-lookup-multi-column-table,:is(ax-lookup-multi-column,.ax-lookup-multi-column) ax-data-table{height:100%;min-height:calc(var(--spacing, .25rem) * 0);border-style:var(--tw-border-style)!important;border-width:0px!important}:is(ax-lookup-multi-column,.ax-lookup-multi-column) tr.ax-state-selected{background-color:rgba(var(--ax-sys-color-primary-surface))}@supports (color: color-mix(in lab,red,red)){:is(ax-lookup-multi-column,.ax-lookup-multi-column) tr.ax-state-selected{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-surface)) 10%,transparent)}}:is(ax-lookup-multi-column,.ax-lookup-multi-column) tr.ax-state-disabled{pointer-events:none;opacity:50%}.ax-lookup-tree{max-height:calc(var(--spacing, .25rem) * 80);overflow:auto;padding:calc(var(--spacing, .25rem) * 2)}}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-inset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-inset-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-ring-color{syntax: \"*\"; inherits: false;}@property --tw-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-ring-color{syntax: \"*\"; inherits: false;}@property --tw-inset-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-ring-inset{syntax: \"*\"; inherits: false;}@property --tw-ring-offset-width{syntax: \"<length>\"; inherits: false; initial-value: 0px;}@property --tw-ring-offset-color{syntax: \"*\"; inherits: false; initial-value: #fff;}@property --tw-ring-offset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-leading{syntax: \"*\"; inherits: false;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid;--tw-shadow: 0 0 #0000;--tw-shadow-color: initial;--tw-shadow-alpha: 100%;--tw-inset-shadow: 0 0 #0000;--tw-inset-shadow-color: initial;--tw-inset-shadow-alpha: 100%;--tw-ring-color: initial;--tw-ring-shadow: 0 0 #0000;--tw-inset-ring-color: initial;--tw-inset-ring-shadow: 0 0 #0000;--tw-ring-inset: initial;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-offset-shadow: 0 0 #0000;--tw-leading: initial;--tw-font-weight: initial}}}\n/*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: AXChipsComponent, selector: "ax-chips", inputs: ["tabIndex", "color", "look", "text"], outputs: ["textChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i1$1.AXDecoratorCloseButtonComponent, selector: "ax-close-button", inputs: ["closeAll", "icon"] }, { kind: "component", type: i1$1.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "component", type: AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disablePanelClass", "visualContextScope", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "closeOnScroll", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "component", type: AXLookupDropDownListComponent, selector: "ax-lookup-drop-down-list" }, { kind: "component", type: AXLookupMultiSelectComponent, selector: "ax-lookup-multi-select" }, { kind: "component", type: AXLookupDropDownTreeComponent, selector: "ax-lookup-drop-down-tree", inputs: ["dataSource", "valueField", "textField", "disabledField", "selectedValues", "nodeTemplate"], outputs: ["itemClick"] }, { kind: "component", type: AXLookupMultiSelectTreeComponent, selector: "ax-lookup-multi-select-tree", inputs: ["dataSource", "valueField", "textField", "disabledField", "selectedValues", "selectionBehavior", "nodeTemplate"], outputs: ["selectionChange"] }, { kind: "component", type: AXLookupMultiColumnComponent, selector: "ax-lookup-multi-column", inputs: ["dataSource", "valueField", "textField", "disabledField", "selectedValues", "itemHeight", "maxVisibleItems", "columns", "itemTemplate", "emptyTemplate", "loadingTemplate", "alternate"], outputs: ["itemClick"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
2914
+ ], 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 [highlightText]=\"highlightQuery()\"\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 [highlightText]=\"highlightQuery()\"\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 [highlightText]=\"highlightQuery()\"\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 [highlightText]=\"highlightQuery()\"\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 [highlightText]=\"highlightQuery()\"\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 [highlightText]=\"highlightQuery()\"\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{--ax-comp-lookup-highlight-bg-color: var(--ax-sys-color-warning-lighter-surface);--ax-comp-lookup-highlight-text-color: var(--ax-sys-color-on-warning-lighter-surface);--ax-comp-lookup-highlight-border-color: var(--ax-sys-color-warning-500);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 .ax-highlight{display:inline;margin:0;padding:0;background-color:rgb(var(--ax-comp-lookup-highlight-bg-color));color:rgb(var(--ax-comp-lookup-highlight-text-color));font-weight:inherit;box-shadow:none}.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{height:100dvh;max-height:100dvh;min-height:100dvh;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-is-actionsheet ax-lookup-drop-down-list,.ax-lookup-popup.ax-is-actionsheet ax-lookup-multi-select,.ax-lookup-popup.ax-is-actionsheet ax-lookup-drop-down-tree,.ax-lookup-popup.ax-is-actionsheet ax-lookup-multi-select-tree,.ax-lookup-popup.ax-is-actionsheet ax-lookup-multi-column,.ax-lookup-popup.ax-is-actionsheet ax-lookup-multi-column-tree{display:flex;min-height:calc(var(--spacing, .25rem) * 0);flex:1;flex-direction:column;height:auto!important}.ax-lookup-popup.ax-is-actionsheet .ax-lookup-viewport{min-height:calc(var(--spacing, .25rem) * 0);flex:1;height:auto!important;max-height:none!important}.ax-lookup-popup.ax-is-actionsheet .ax-lookup-tree{max-height:none;min-height:calc(var(--spacing, .25rem) * 0);flex:1;overflow:auto}.ax-lookup-popup.ax-is-actionsheet .ax-lookup-empty{display:flex;flex:1;align-items:center;justify-content:center}:is(.ax-lookup-popup.ax-is-actionsheet .ax-lookup-multi-column,.ax-lookup-popup.ax-is-actionsheet .ax-lookup-multi-column-tree) .ax-lookup-multi-column-table,:is(.ax-lookup-popup.ax-is-actionsheet .ax-lookup-multi-column,.ax-lookup-popup.ax-is-actionsheet .ax-lookup-multi-column-tree) ax-data-table{height:100%;min-height:calc(var(--spacing, .25rem) * 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", "highlightText"], outputs: ["itemClick"] }, { kind: "component", type: AXLookupMultiSelectTreeComponent, selector: "ax-lookup-multi-select-tree", inputs: ["dataSource", "valueField", "textField", "disabledField", "selectedValues", "selectionBehavior", "nodeTemplate", "emptyTemplate", "alternate", "filterKey", "highlightText"], outputs: ["selectionChange"] }, { kind: "component", type: AXLookupMultiColumnComponent, selector: "ax-lookup-multi-column", inputs: ["dataSource", "valueField", "textField", "disabledField", "selectedValues", "itemHeight", "maxVisibleItems", "columns", "itemTemplate", "emptyTemplate", "loadingTemplate", "alternate", "highlightText"], 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", "highlightText"], outputs: ["itemClick"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
1819
2915
  }
1820
2916
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupComponent, decorators: [{
1821
2917
  type: Component,
@@ -1823,21 +2919,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
1823
2919
  NgTemplateOutlet,
1824
2920
  AsyncPipe,
1825
2921
  AXTranslatorPipe,
2922
+ AXButtonComponent,
1826
2923
  AXChipsComponent,
1827
2924
  AXDecoratorModule,
1828
2925
  AXPopoverComponent,
2926
+ AXSearchBoxComponent,
1829
2927
  AXLookupDropDownListComponent,
1830
2928
  AXLookupMultiSelectComponent,
1831
2929
  AXLookupDropDownTreeComponent,
1832
2930
  AXLookupMultiSelectTreeComponent,
1833
2931
  AXLookupMultiColumnComponent,
2932
+ AXLookupMultiColumnTreeComponent,
1834
2933
  ], providers: [
1835
2934
  { provide: AXComponent, useExisting: AXLookupComponent },
1836
2935
  { provide: AXClearableComponent, useExisting: AXLookupComponent },
1837
2936
  { provide: AXClosableComponent, useExisting: AXLookupComponent },
1838
2937
  { provide: AXValuableComponent, useExisting: AXLookupComponent },
1839
- ], template: "<div\n #origin\n class=\"ax-editor-container ax-{{ look() }} ax-default\"\n [class.ax-lookup-trigger]=\"!isEditableTrigger()\"\n [class.ax-lookup-trigger-multiple]=\"isMultiple()\"\n [class.ax-state-disabled]=\"disabled()\"\n [class.ax-state-readonly]=\"readonly()\"\n (click)=\"onTriggerClick()\"\n>\n <ng-content select=\"ax-prefix\"></ng-content>\n\n @if (isMultiple()) {\n <div class=\"ax-lookup-chips\">\n @for (item of selectedItems(); track trackSelectedKey(item)) {\n <ax-chips class=\"ax-sm\" color=\"primary\" look=\"twotone\" [text]=\"selectedTemplate() ? '' : getItemText(item)\">\n @if (selectedTemplate()) {\n <ax-prefix>\n <ng-container\n [ngTemplateOutlet]=\"selectedTemplate()!\"\n [ngTemplateOutletContext]=\"{ $implicit: item }\"\n />\n </ax-prefix>\n }\n @if (!disabled() && !readonly()) {\n <ax-suffix>\n <button type=\"button\" tabindex=\"-1\" (click)=\"removeChip($event, item)\">\n <span class=\"ax-icon ax-icon-close\"></span>\n </button>\n </ax-suffix>\n }\n </ax-chips>\n }\n <input\n #triggerSearchInput\n type=\"text\"\n class=\"ax-input ax-lookup-trigger-search\"\n [class.ax-lookup-select-input]=\"!isEditableTrigger()\"\n [placeholder]=\"triggerSearchPlaceholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly() || !isEditableTrigger()\"\n [attr.inputmode]=\"isEditableTrigger() ? null : 'none'\"\n [value]=\"searchText()\"\n (input)=\"onTriggerSearchInput($any($event.target).value)\"\n (keydown)=\"onTriggerKeydown($event)\"\n (beforeinput)=\"onBeforeInput($event)\"\n (focus)=\"emitOnFocus($event)\"\n (blur)=\"emitOnBlur($event)\"\n />\n </div>\n } @else {\n <div class=\"ax-lookup-value\">\n @if (showSelectedTemplate()) {\n <div class=\"ax-lookup-selected-content\" aria-hidden=\"true\">\n <ng-container\n [ngTemplateOutlet]=\"selectedTemplate()!\"\n [ngTemplateOutletContext]=\"{ $implicit: selectedItems()[0] }\"\n />\n </div>\n }\n <input\n #triggerSearchInput\n type=\"text\"\n class=\"ax-input\"\n [class.ax-lookup-select-input]=\"!isEditableTrigger()\"\n [class.ax-lookup-input-overlay]=\"showSelectedTemplate()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly() || !isEditableTrigger()\"\n [attr.inputmode]=\"isEditableTrigger() ? null : 'none'\"\n [value]=\"searchText()\"\n (input)=\"onTriggerSearchInput($any($event.target).value)\"\n (keydown)=\"onTriggerKeydown($event)\"\n (beforeinput)=\"onBeforeInput($event)\"\n (focus)=\"emitOnFocus($event)\"\n (blur)=\"emitOnBlur($event)\"\n />\n </div>\n }\n\n @if (selectedValues().length > 0 && !disabled() && !readonly()) {\n <ng-content select=\"ax-clear-button\"></ng-content>\n }\n\n <button\n type=\"button\"\n class=\"ax-general-button-icon\"\n tabindex=\"-1\"\n [disabled]=\"disabled() || readonly()\"\n >\n <span\n class=\"ax-icon\"\n [class.ax-icon-chevron-down]=\"!expanded()\"\n [class.ax-icon-chevron-up]=\"expanded()\"\n ></span>\n </button>\n <ng-content select=\"ax-suffix\"></ng-content>\n</div>\n\n<ax-popover\n [target]=\"origin\"\n [openOn]=\"'manual'\"\n [closeOn]=\"'clickOut'\"\n [placement]=\"'bottom-start'\"\n [width]=\"isActionsheetStyle() ? '100%' : origin.offsetWidth + 'px'\"\n [adaptivityEnabled]=\"isActionsheetStyle()\"\n [disabled]=\"disabled() || readonly()\"\n (onClosed)=\"onPopoverClosed()\"\n>\n <div class=\"ax-lookup-popup\" [class.ax-is-actionsheet]=\"isActionsheetStyle()\" [class.ax-is-alternate]=\"alternate()\" (keydown.escape)=\"close()\">\n @if (isActionsheetStyle()) {\n <ax-header class=\"ax-solid\">\n <ax-title>{{ caption() || placeholder() || ('@acorex:selectbox.popover.title' | translate | async) }}</ax-title>\n <ax-close-button [icon]=\"isMultiple() ? 'ax-icon ax-icon-check' : 'ax-icon ax-icon-close'\"></ax-close-button>\n </ax-header>\n }\n <ng-content select=\"ax-header\"></ng-content>\n @if (expanded()) {\n @switch (mode()) {\n @case ('drop-down-list') {\n <ax-lookup-drop-down-list\n [dataSource]=\"resolvedDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [itemHeight]=\"itemHeight()\"\n [maxVisibleItems]=\"maxVisibleItems()\"\n [itemTemplate]=\"itemTemplate()\"\n [emptyTemplate]=\"emptyTemplate()\"\n [loadingTemplate]=\"loadingTemplate()\"\n [alternate]=\"alternate()\"\n (itemClick)=\"handleSinglePick($event)\"\n (navigateOut)=\"onListNavigateOut($event)\"\n />\n }\n @case ('multi-select') {\n <ax-lookup-multi-select\n [dataSource]=\"resolvedDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [itemHeight]=\"itemHeight()\"\n [maxVisibleItems]=\"maxVisibleItems()\"\n [itemTemplate]=\"itemTemplate()\"\n [emptyTemplate]=\"emptyTemplate()\"\n [loadingTemplate]=\"loadingTemplate()\"\n [alternate]=\"alternate()\"\n (itemClick)=\"handleMultiToggle($event)\"\n (navigateOut)=\"onListNavigateOut($event)\"\n />\n }\n @case ('drop-down-tree') {\n <ax-lookup-drop-down-tree\n [dataSource]=\"treeDataSource()!\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [nodeTemplate]=\"$any(itemTemplate())\"\n (itemClick)=\"handleSinglePick($event)\"\n />\n }\n @case ('multi-select-tree') {\n <ax-lookup-multi-select-tree\n [dataSource]=\"treeDataSource()!\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [selectionBehavior]=\"treeSelectionBehavior()\"\n [nodeTemplate]=\"$any(itemTemplate())\"\n (selectionChange)=\"handleTreeSelectionChange($event)\"\n />\n }\n @case ('multi-column') {\n <ax-lookup-multi-column\n [dataSource]=\"resolvedDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [itemHeight]=\"itemHeight()\"\n [maxVisibleItems]=\"maxVisibleItems()\"\n [columns]=\"columns()\"\n [itemTemplate]=\"itemTemplate()\"\n [emptyTemplate]=\"emptyTemplate()\"\n [loadingTemplate]=\"loadingTemplate()\"\n [alternate]=\"alternate()\"\n (itemClick)=\"handleSinglePick($event)\"\n />\n }\n }\n }\n <ng-content select=\"ax-footer\"></ng-content>\n </div>\n</ax-popover>\n<ng-content select=\"ax-validation-rule\"></ng-content>\n", styles: ["@layer properties;@layer components{ax-lookup{display:block;width:100%}ax-lookup .ax-editor-container{justify-content:flex-start;gap:calc(var(--spacing, .25rem) * 1)}ax-lookup .ax-lookup-trigger{cursor:pointer;-webkit-user-select:none;user-select:none}ax-lookup .ax-lookup-trigger-multiple{height:auto;min-height:calc(var(--spacing, .25rem) * 9);padding-block:calc(var(--spacing, .25rem) * 1)}ax-lookup .ax-lookup-value{position:relative;display:flex;min-width:calc(var(--spacing, .25rem) * 0);flex:1;align-items:center;overflow:hidden}ax-lookup .ax-lookup-select-input{cursor:pointer;caret-color:transparent;-webkit-user-select:none;user-select:none}ax-lookup .ax-lookup-selected-content{pointer-events:none;position:relative;z-index:0;display:flex;min-width:calc(var(--spacing, .25rem) * 0);flex:1;align-items:center;overflow:hidden}ax-lookup .ax-lookup-input-overlay{position:absolute;inset:calc(var(--spacing, .25rem) * 0);z-index:10;margin:calc(var(--spacing, .25rem) * 0)!important;height:100%;width:100%;border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding:calc(var(--spacing, .25rem) * 0)!important;color:transparent;caret-color:transparent}ax-lookup .ax-lookup-chips{display:flex;min-width:calc(var(--spacing, .25rem) * 0);flex:1;flex-wrap:wrap;align-items:center;gap:calc(var(--spacing, .25rem) * 1)}ax-lookup .ax-lookup-trigger-search{margin:calc(var(--spacing, .25rem) * 0)!important;height:calc(var(--spacing, .25rem) * 7.5);width:auto!important;min-width:calc(var(--spacing, .25rem) * 16);flex:1;flex-basis:calc(var(--spacing, .25rem) * 16)}ax-lookup .ax-lookup-placeholder{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){ax-lookup .ax-lookup-placeholder{color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 50%,transparent)}}ax-lookup ax-chips ax-prefix,ax-lookup ax-chips ax-suffix{padding:calc(var(--spacing, .25rem) * 0)!important}ax-lookup ax-chips ax-suffix button{display:flex;cursor:pointer;align-items:center;border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding:calc(var(--spacing, .25rem) * 0)}.ax-lookup-popup{box-sizing:border-box;display:flex;width:100%;flex-direction:column;overflow:hidden;border-radius:var(--ax-sys-border-radius);border-style:var(--tw-border-style);border-width:1px;border-color:rgba(var(--ax-sys-color-border-surface));background-color:rgba(var(--ax-sys-color-lightest-surface));--tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ax-lookup-popup:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:rgba(var(--ax-sys-color-darkest-surface))}.ax-lookup-popup.ax-is-actionsheet{border-bottom-right-radius:0;border-bottom-left-radius:0;--tw-shadow: 0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ax-lookup-popup.ax-is-actionsheet>ax-header.ax-solid{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:rgba(var(--ax-sys-color-border-lightest-surface))}.ax-lookup-popup.ax-is-actionsheet>ax-header.ax-solid .ax-icon-check{color:rgba(var(--ax-sys-color-primary-surface))}.ax-lookup-popup.ax-is-actionsheet>ax-header.ax-solid ax-title{font-size:var(--text-base, 1rem);line-height:var(--tw-leading, var(--text-base--line-height, 1.5 ));--tw-leading: calc(var(--spacing, .25rem) * 6);line-height:calc(var(--spacing, .25rem) * 6);--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500)}.ax-lookup-popup>ax-header:not(.ax-solid),.ax-lookup-popup>ax-footer{flex-shrink:0;border-color:rgba(var(--ax-sys-color-border-lightest-surface))}.ax-lookup-popup>ax-header:not(.ax-solid){border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.ax-lookup-popup>ax-footer{border-top-style:var(--tw-border-style);border-top-width:1px}.ax-lookup-viewport{width:100%}.ax-lookup-empty{display:flex;min-height:calc(var(--spacing, .25rem) * 12);width:100%;align-items:center;justify-content:center;padding-inline:calc(var(--spacing, .25rem) * 3);padding-block:calc(var(--spacing, .25rem) * 3);text-align:center;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-empty{color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 60%,transparent)}}.ax-lookup-option-host{box-sizing:border-box;display:flex;cursor:pointer;align-items:center;gap:calc(var(--spacing, .25rem) * 2);border-style:var(--tw-border-style);border-width:1px;border-color:transparent;padding-inline:calc(var(--spacing, .25rem) * 3);font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgba(var(--ax-sys-color-on-surface));--tw-outline-style: none;outline-style:none}.ax-lookup-option-host.ax-state-alternate{background-color:rgba(var(--ax-sys-color-light-surface))}.ax-lookup-option-host.ax-state-alternate:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:rgba(var(--ax-sys-color-surface))}.ax-lookup-option-host:hover,.ax-lookup-option-host.ax-state-active{background-color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-option-host:hover,.ax-lookup-option-host.ax-state-active{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 10%,transparent)}}.ax-lookup-option-host.ax-state-alternate:hover,.ax-lookup-option-host.ax-state-alternate.ax-state-active{background-color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-option-host.ax-state-alternate:hover,.ax-lookup-option-host.ax-state-alternate.ax-state-active{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 15%,transparent)}}.ax-lookup-option-host.ax-state-selected,.ax-lookup-option-host.ax-state-selected:hover,.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate,.ax-lookup-option-host.ax-state-selected.ax-state-alternate:hover,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active{background-color:rgba(var(--ax-sys-color-primary-lightest-surface))}:is(.ax-lookup-option-host.ax-state-selected,.ax-lookup-option-host.ax-state-selected:hover,.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate,.ax-lookup-option-host.ax-state-selected.ax-state-alternate:hover,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active):where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:rgba(var(--ax-sys-color-primary-darkest-surface))}@supports (color: color-mix(in lab,red,red)){:is(.ax-lookup-option-host.ax-state-selected,.ax-lookup-option-host.ax-state-selected:hover,.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate,.ax-lookup-option-host.ax-state-selected.ax-state-alternate:hover,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active):where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-darkest-surface)) 25%,transparent)}}.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active{background-color:rgba(var(--ax-sys-color-primary-lightest-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-lightest-surface)) 80%,transparent)}}:is(.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active):where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:rgba(var(--ax-sys-color-primary-darkest-surface))}@supports (color: color-mix(in lab,red,red)){:is(.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active):where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-darkest-surface)) 40%,transparent)}}.ax-lookup-option-host .ax-lookup-checkbox{pointer-events:none;width:calc(var(--spacing, .25rem) * 4);height:calc(var(--spacing, .25rem) * 4);flex-shrink:0;accent-color:rgba(var(--ax-sys-color-primary-surface))}.ax-lookup-option-host .ax-lookup-option-loading{width:100%;padding-inline:calc(var(--spacing, .25rem) * 3);font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-option-host .ax-lookup-option-loading{color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 50%,transparent)}}.ax-lookup-option{justify-content:space-between}.ax-lookup-option-host.ax-state-selected,.ax-lookup-option.ax-state-selected{color:rgba(var(--ax-sys-color-primary-surface))!important}.ax-lookup-option-host.ax-state-selected .ax-lookup-option-text,.ax-lookup-option-host.ax-state-selected .ax-lookup-option-check,.ax-lookup-option-host.ax-state-selected ax-icon{color:rgba(var(--ax-sys-color-primary-surface))!important}.ax-lookup-option-text{min-width:calc(var(--spacing, .25rem) * 0);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ax-lookup-option-check{margin-inline-start:auto;flex-shrink:0;color:rgba(var(--ax-sys-color-primary-surface))!important}ax-lookup-multi-column,.ax-lookup-multi-column{display:block;min-height:calc(var(--spacing, .25rem) * 0);width:100%}:is(ax-lookup-multi-column,.ax-lookup-multi-column) .ax-lookup-multi-column-table,:is(ax-lookup-multi-column,.ax-lookup-multi-column) ax-data-table{height:100%;min-height:calc(var(--spacing, .25rem) * 0);border-style:var(--tw-border-style)!important;border-width:0px!important}:is(ax-lookup-multi-column,.ax-lookup-multi-column) tr.ax-state-selected{background-color:rgba(var(--ax-sys-color-primary-surface))}@supports (color: color-mix(in lab,red,red)){:is(ax-lookup-multi-column,.ax-lookup-multi-column) tr.ax-state-selected{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-surface)) 10%,transparent)}}:is(ax-lookup-multi-column,.ax-lookup-multi-column) tr.ax-state-disabled{pointer-events:none;opacity:50%}.ax-lookup-tree{max-height:calc(var(--spacing, .25rem) * 80);overflow:auto;padding:calc(var(--spacing, .25rem) * 2)}}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-inset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-inset-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-ring-color{syntax: \"*\"; inherits: false;}@property --tw-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-ring-color{syntax: \"*\"; inherits: false;}@property --tw-inset-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-ring-inset{syntax: \"*\"; inherits: false;}@property --tw-ring-offset-width{syntax: \"<length>\"; inherits: false; initial-value: 0px;}@property --tw-ring-offset-color{syntax: \"*\"; inherits: false; initial-value: #fff;}@property --tw-ring-offset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-leading{syntax: \"*\"; inherits: false;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid;--tw-shadow: 0 0 #0000;--tw-shadow-color: initial;--tw-shadow-alpha: 100%;--tw-inset-shadow: 0 0 #0000;--tw-inset-shadow-color: initial;--tw-inset-shadow-alpha: 100%;--tw-ring-color: initial;--tw-ring-shadow: 0 0 #0000;--tw-inset-ring-color: initial;--tw-inset-ring-shadow: 0 0 #0000;--tw-ring-inset: initial;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-offset-shadow: 0 0 #0000;--tw-leading: initial;--tw-font-weight: initial}}}\n/*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */\n"] }]
1840
- }], ctorParameters: () => [], propDecorators: { name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], dataSource: [{ type: i0.Input, args: [{ isSignal: true, alias: "dataSource", required: false }] }], treeDataSource: [{ type: i0.Input, args: [{ isSignal: true, alias: "treeDataSource", required: false }] }], valueField: [{ type: i0.Input, args: [{ isSignal: true, alias: "valueField", required: false }] }], textField: [{ type: i0.Input, args: [{ isSignal: true, alias: "textField", required: false }] }], disabledField: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabledField", required: false }] }], columns: [{ type: i0.Input, args: [{ isSignal: true, alias: "columns", required: false }] }], searchable: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchable", required: false }] }], adaptivityEnabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "adaptivityEnabled", required: false }] }], caption: [{ type: i0.Input, args: [{ isSignal: true, alias: "caption", required: false }] }], alternate: [{ type: i0.Input, args: [{ isSignal: true, alias: "alternate", required: false }] }], searchPlaceholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchPlaceholder", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], look: [{ type: i0.Input, args: [{ isSignal: true, alias: "look", required: false }] }, { type: i0.Output, args: ["lookChange"] }], itemHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemHeight", required: false }] }], maxVisibleItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxVisibleItems", required: false }] }], treeSelectionBehavior: [{ type: i0.Input, args: [{ isSignal: true, alias: "treeSelectionBehavior", required: false }] }], itemTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemTemplate", required: false }] }], selectedTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedTemplate", required: false }] }], emptyTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "emptyTemplate", required: false }] }], loadingTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "loadingTemplate", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], valueItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "valueItems", required: false }] }], onValueChanged: [{ type: i0.Output, args: ["onValueChanged"] }], onSelectionChanged: [{ type: i0.Output, args: ["onSelectionChanged"] }], onFocus: [{ type: i0.Output, args: ["onFocus"] }], onBlur: [{ type: i0.Output, args: ["onBlur"] }], onItemClick: [{ type: i0.Output, args: ["onItemClick"] }], onItemSelected: [{ type: i0.Output, args: ["onItemSelected"] }], onOpened: [{ type: i0.Output, args: ["onOpened"] }], onClosed: [{ type: i0.Output, args: ["onClosed"] }], popoverRef: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXPopoverComponent), { isSignal: true }] }], triggerSearchInput: [{ type: i0.ViewChild, args: ['triggerSearchInput', { isSignal: true }] }], listView: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXLookupListViewBase), { isSignal: true }] }] } });
2938
+ ], 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 [highlightText]=\"highlightQuery()\"\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 [highlightText]=\"highlightQuery()\"\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 [highlightText]=\"highlightQuery()\"\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 [highlightText]=\"highlightQuery()\"\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 [highlightText]=\"highlightQuery()\"\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 [highlightText]=\"highlightQuery()\"\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{--ax-comp-lookup-highlight-bg-color: var(--ax-sys-color-warning-lighter-surface);--ax-comp-lookup-highlight-text-color: var(--ax-sys-color-on-warning-lighter-surface);--ax-comp-lookup-highlight-border-color: var(--ax-sys-color-warning-500);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 .ax-highlight{display:inline;margin:0;padding:0;background-color:rgb(var(--ax-comp-lookup-highlight-bg-color));color:rgb(var(--ax-comp-lookup-highlight-text-color));font-weight:inherit;box-shadow:none}.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{height:100dvh;max-height:100dvh;min-height:100dvh;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-is-actionsheet ax-lookup-drop-down-list,.ax-lookup-popup.ax-is-actionsheet ax-lookup-multi-select,.ax-lookup-popup.ax-is-actionsheet ax-lookup-drop-down-tree,.ax-lookup-popup.ax-is-actionsheet ax-lookup-multi-select-tree,.ax-lookup-popup.ax-is-actionsheet ax-lookup-multi-column,.ax-lookup-popup.ax-is-actionsheet ax-lookup-multi-column-tree{display:flex;min-height:calc(var(--spacing, .25rem) * 0);flex:1;flex-direction:column;height:auto!important}.ax-lookup-popup.ax-is-actionsheet .ax-lookup-viewport{min-height:calc(var(--spacing, .25rem) * 0);flex:1;height:auto!important;max-height:none!important}.ax-lookup-popup.ax-is-actionsheet .ax-lookup-tree{max-height:none;min-height:calc(var(--spacing, .25rem) * 0);flex:1;overflow:auto}.ax-lookup-popup.ax-is-actionsheet .ax-lookup-empty{display:flex;flex:1;align-items:center;justify-content:center}:is(.ax-lookup-popup.ax-is-actionsheet .ax-lookup-multi-column,.ax-lookup-popup.ax-is-actionsheet .ax-lookup-multi-column-tree) .ax-lookup-multi-column-table,:is(.ax-lookup-popup.ax-is-actionsheet .ax-lookup-multi-column,.ax-lookup-popup.ax-is-actionsheet .ax-lookup-multi-column-tree) ax-data-table{height:100%;min-height:calc(var(--spacing, .25rem) * 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"] }]
2939
+ }], 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 }] }], highlightSearch: [{ type: i0.Input, args: [{ isSignal: true, alias: "highlightSearch", 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 }] }] } });
1841
2940
 
1842
2941
  class AXLookupModule {
1843
2942
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
@@ -1846,18 +2945,21 @@ class AXLookupModule {
1846
2945
  AXLookupMultiSelectComponent,
1847
2946
  AXLookupDropDownTreeComponent,
1848
2947
  AXLookupMultiSelectTreeComponent,
1849
- AXLookupMultiColumnComponent], exports: [AXLookupComponent,
2948
+ AXLookupMultiColumnComponent,
2949
+ AXLookupMultiColumnTreeComponent], exports: [AXLookupComponent,
1850
2950
  AXLookupDropDownListComponent,
1851
2951
  AXLookupMultiSelectComponent,
1852
2952
  AXLookupDropDownTreeComponent,
1853
2953
  AXLookupMultiSelectTreeComponent,
1854
- AXLookupMultiColumnComponent] }); }
2954
+ AXLookupMultiColumnComponent,
2955
+ AXLookupMultiColumnTreeComponent] }); }
1855
2956
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupModule, imports: [AXLookupComponent,
1856
2957
  AXLookupDropDownListComponent,
1857
2958
  AXLookupMultiSelectComponent,
1858
2959
  AXLookupDropDownTreeComponent,
1859
2960
  AXLookupMultiSelectTreeComponent,
1860
- AXLookupMultiColumnComponent] }); }
2961
+ AXLookupMultiColumnComponent,
2962
+ AXLookupMultiColumnTreeComponent] }); }
1861
2963
  }
1862
2964
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupModule, decorators: [{
1863
2965
  type: NgModule,
@@ -1869,6 +2971,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
1869
2971
  AXLookupDropDownTreeComponent,
1870
2972
  AXLookupMultiSelectTreeComponent,
1871
2973
  AXLookupMultiColumnComponent,
2974
+ AXLookupMultiColumnTreeComponent,
1872
2975
  ],
1873
2976
  exports: [
1874
2977
  AXLookupComponent,
@@ -1877,6 +2980,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
1877
2980
  AXLookupDropDownTreeComponent,
1878
2981
  AXLookupMultiSelectTreeComponent,
1879
2982
  AXLookupMultiColumnComponent,
2983
+ AXLookupMultiColumnTreeComponent,
1880
2984
  ],
1881
2985
  }]
1882
2986
  }] });
@@ -1885,5 +2989,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
1885
2989
  * Generated bundle index. Do not edit.
1886
2990
  */
1887
2991
 
1888
- export { AXLookupComponent, AXLookupDropDownListComponent, AXLookupDropDownTreeComponent, AXLookupModule, AXLookupMultiColumnComponent, AXLookupMultiSelectComponent, AXLookupMultiSelectTreeComponent };
2992
+ export { AXLookupComponent, AXLookupDropDownListComponent, AXLookupDropDownTreeComponent, AXLookupModule, AXLookupMultiColumnComponent, AXLookupMultiColumnTreeComponent, AXLookupMultiSelectComponent, AXLookupMultiSelectTreeComponent };
1889
2993
  //# sourceMappingURL=acorex-components-lookup.mjs.map