@acorex/components 22.1.0-next.8 → 22.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) 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-loading-dialog.mjs +59 -42
  32. package/fesm2022/acorex-components-loading-dialog.mjs.map +1 -1
  33. package/fesm2022/acorex-components-lookup.mjs +1259 -169
  34. package/fesm2022/acorex-components-lookup.mjs.map +1 -1
  35. package/fesm2022/acorex-components-menu.mjs +11 -5
  36. package/fesm2022/acorex-components-menu.mjs.map +1 -1
  37. package/fesm2022/acorex-components-notification.mjs +6 -6
  38. package/fesm2022/acorex-components-notification.mjs.map +1 -1
  39. package/fesm2022/acorex-components-popover.mjs +33 -0
  40. package/fesm2022/acorex-components-popover.mjs.map +1 -1
  41. package/fesm2022/acorex-components-rail-navigation.mjs +2 -2
  42. package/fesm2022/acorex-components-rail-navigation.mjs.map +1 -1
  43. package/fesm2022/acorex-components-range-slider.mjs +2 -2
  44. package/fesm2022/acorex-components-range-slider.mjs.map +1 -1
  45. package/fesm2022/acorex-components-select-box.mjs +38 -11
  46. package/fesm2022/acorex-components-select-box.mjs.map +1 -1
  47. package/fesm2022/acorex-components-tabs.mjs +2 -2
  48. package/fesm2022/acorex-components-tabs.mjs.map +1 -1
  49. package/fesm2022/acorex-components-tree-view.mjs +45 -3
  50. package/fesm2022/acorex-components-tree-view.mjs.map +1 -1
  51. package/lookup/README.md +19 -8
  52. package/package.json +4 -3
  53. package/types/acorex-components-audio-wave.d.ts +3 -0
  54. package/types/acorex-components-calendar.d.ts +41 -9
  55. package/types/acorex-components-combo-box.d.ts +50 -10
  56. package/types/acorex-components-conversation.d.ts +1232 -1782
  57. package/types/acorex-components-data-table.d.ts +12 -2
  58. package/types/acorex-components-image-editor.d.ts +54 -49
  59. package/types/acorex-components-loading-dialog.d.ts +12 -4
  60. package/types/acorex-components-lookup.d.ts +286 -71
  61. package/types/acorex-components-popover.d.ts +8 -0
  62. package/types/acorex-components-select-box.d.ts +11 -0
  63. package/types/acorex-components-tree-view.d.ts +11 -1
  64. package/fesm2022/acorex-components-conversation-composer-action-choice-dialog.component-DCcRJYfF.mjs +0 -50
  65. package/fesm2022/acorex-components-conversation-composer-action-choice-dialog.component-DCcRJYfF.mjs.map +0 -1
  66. 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
  /**
@@ -61,6 +209,7 @@ class AXLookupListViewBase {
61
209
  ...(ngDevMode ? [{ debugName: "maxVisibleItems" }] : /* istanbul ignore next */ []));
62
210
  /**
63
211
  * Custom template rendered for each item. Context: `$implicit` is the item.
212
+ * Default option chrome is not applied on top of the template.
64
213
  */
65
214
  this.itemTemplate = input(undefined, /* @ts-ignore */
66
215
  ...(ngDevMode ? [{ debugName: "itemTemplate" }] : /* istanbul ignore next */ []));
@@ -79,6 +228,11 @@ class AXLookupListViewBase {
79
228
  */
80
229
  this.alternate = input(false, /* @ts-ignore */
81
230
  ...(ngDevMode ? [{ debugName: "alternate" }] : /* istanbul ignore next */ []));
231
+ /**
232
+ * When set, matching characters in the default option label are highlighted.
233
+ */
234
+ this.highlightText = input('', /* @ts-ignore */
235
+ ...(ngDevMode ? [{ debugName: "highlightText" }] : /* istanbul ignore next */ []));
82
236
  /**
83
237
  * Emitted when the user picks (or toggles) an item.
84
238
  */
@@ -226,11 +380,11 @@ class AXLookupListViewBase {
226
380
  nav?.navigateTo(item);
227
381
  }
228
382
  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 }); }
383
+ 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
384
  }
231
385
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupListViewBase, decorators: [{
232
386
  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 }] }] } });
387
+ }], 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
388
 
235
389
  /**
236
390
  * Internal mini component for the `drop-down-list` lookup mode:
@@ -262,10 +416,11 @@ class AXLookupDropDownListComponent extends AXLookupListViewBase {
262
416
  <div
263
417
  *cdkVirtualFor="let item of listDataSource(); let i = index; trackBy: trackByIndex"
264
418
  role="option"
265
- class="ax-lookup-option-host ax-lookup-option"
419
+ class="ax-lookup-option-host"
266
420
  axListNavigationItem
267
421
  #navItem="axListNavigationItem"
268
422
  [style.height.px]="itemHeight()"
423
+ [class.ax-lookup-option]="!itemTemplate()"
269
424
  [class.ax-state-alternate]="alternate() && i % 2 === 1"
270
425
  [class.ax-state-selected]="item != null && isSelected(item)"
271
426
  [class.ax-state-disabled]="item != null && isDisabled(item)"
@@ -279,11 +434,12 @@ class AXLookupDropDownListComponent extends AXLookupListViewBase {
279
434
  @if (itemTemplate()) {
280
435
  <ng-container [ngTemplateOutlet]="itemTemplate()!" [ngTemplateOutletContext]="{ $implicit: item }" />
281
436
  } @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>
437
+ <span class="ax-lookup-option-text">
438
+ <ax-highlight-text [text]="getText(item)" [query]="highlightText()" />
439
+ </span>
440
+ @if (isSelected(item)) {
441
+ <span class="ax-lookup-option-check ax-icon ax-icon-check" aria-hidden="true"></span>
442
+ }
287
443
  }
288
444
  } @else {
289
445
  <ng-container [ngTemplateOutlet]="loadingRow" />
@@ -299,7 +455,7 @@ class AXLookupDropDownListComponent extends AXLookupListViewBase {
299
455
  <span class="ax-lookup-option-loading">{{ '@acorex:common.status.loading' | translate | async }}</span>
300
456
  }
301
457
  </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 }); }
458
+ `, 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
459
  }
304
460
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupDropDownListComponent, decorators: [{
305
461
  type: Component,
@@ -307,7 +463,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
307
463
  selector: 'ax-lookup-drop-down-list',
308
464
  changeDetection: ChangeDetectionStrategy.OnPush,
309
465
  encapsulation: ViewEncapsulation.None,
310
- imports: [ScrollingModule, NgTemplateOutlet, AXTranslatorPipe, AsyncPipe, AXListNavigationModule],
466
+ imports: [ScrollingModule, NgTemplateOutlet, AXTranslatorPipe, AsyncPipe, AXListNavigationModule, AXHighlightTextComponent],
311
467
  providers: [{ provide: AXLookupListViewBase, useExisting: AXLookupDropDownListComponent }],
312
468
  template: `
313
469
  @if (isEmpty()) {
@@ -331,10 +487,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
331
487
  <div
332
488
  *cdkVirtualFor="let item of listDataSource(); let i = index; trackBy: trackByIndex"
333
489
  role="option"
334
- class="ax-lookup-option-host ax-lookup-option"
490
+ class="ax-lookup-option-host"
335
491
  axListNavigationItem
336
492
  #navItem="axListNavigationItem"
337
493
  [style.height.px]="itemHeight()"
494
+ [class.ax-lookup-option]="!itemTemplate()"
338
495
  [class.ax-state-alternate]="alternate() && i % 2 === 1"
339
496
  [class.ax-state-selected]="item != null && isSelected(item)"
340
497
  [class.ax-state-disabled]="item != null && isDisabled(item)"
@@ -348,11 +505,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
348
505
  @if (itemTemplate()) {
349
506
  <ng-container [ngTemplateOutlet]="itemTemplate()!" [ngTemplateOutletContext]="{ $implicit: item }" />
350
507
  } @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>
508
+ <span class="ax-lookup-option-text">
509
+ <ax-highlight-text [text]="getText(item)" [query]="highlightText()" />
510
+ </span>
511
+ @if (isSelected(item)) {
512
+ <span class="ax-lookup-option-check ax-icon ax-icon-check" aria-hidden="true"></span>
513
+ }
356
514
  }
357
515
  } @else {
358
516
  <ng-container [ngTemplateOutlet]="loadingRow" />
@@ -410,12 +568,43 @@ class AXLookupDropDownTreeComponent {
410
568
  */
411
569
  this.nodeTemplate = input(undefined, /* @ts-ignore */
412
570
  ...(ngDevMode ? [{ debugName: "nodeTemplate" }] : /* istanbul ignore next */ []));
571
+ /**
572
+ * Custom template rendered when the filtered tree has no nodes.
573
+ */
574
+ this.emptyTemplate = input(undefined, /* @ts-ignore */
575
+ ...(ngDevMode ? [{ debugName: "emptyTemplate" }] : /* istanbul ignore next */ []));
576
+ /**
577
+ * When `true`, visible tree nodes use alternating background colors.
578
+ */
579
+ this.alternate = input(false, /* @ts-ignore */
580
+ ...(ngDevMode ? [{ debugName: "alternate" }] : /* istanbul ignore next */ []));
581
+ /**
582
+ * Unique id that changes on every search apply so a new tree instance is created.
583
+ */
584
+ this.filterKey = input('0', /* @ts-ignore */
585
+ ...(ngDevMode ? [{ debugName: "filterKey" }] : /* istanbul ignore next */ []));
586
+ /**
587
+ * When set, matching characters in the default node label are highlighted.
588
+ */
589
+ this.highlightText = input('', /* @ts-ignore */
590
+ ...(ngDevMode ? [{ debugName: "highlightText" }] : /* istanbul ignore next */ []));
413
591
  /**
414
592
  * Emitted when the user selects a node.
415
593
  */
416
594
  this.itemClick = output();
417
595
  this.selectedIds = computed(() => this.selectedValues().map((v) => String(v)), /* @ts-ignore */
418
596
  ...(ngDevMode ? [{ debugName: "selectedIds" }] : /* istanbul ignore next */ []));
597
+ this.isEmpty = computed(() => {
598
+ const source = this.dataSource();
599
+ return Array.isArray(source) && source.length === 0;
600
+ }, /* @ts-ignore */
601
+ ...(ngDevMode ? [{ debugName: "isEmpty" }] : /* istanbul ignore next */ []));
602
+ this.treeInstances = computed(() => [{ id: this.filterKey(), source: this.dataSource() }], /* @ts-ignore */
603
+ ...(ngDevMode ? [{ debugName: "treeInstances" }] : /* istanbul ignore next */ []));
604
+ }
605
+ /** Whether the filtered tree currently has no nodes. */
606
+ hasNoMatches() {
607
+ return this.isEmpty();
419
608
  }
420
609
  handleSelectionChange(e) {
421
610
  if (e.source !== 'user') {
@@ -428,22 +617,36 @@ class AXLookupDropDownTreeComponent {
428
617
  this.itemClick.emit({ item: node, value: node[this.valueField()] });
429
618
  }
430
619
  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 }); }
620
+ 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: `
621
+ @if (isEmpty()) {
622
+ @if (emptyTemplate()) {
623
+ <ng-container [ngTemplateOutlet]="emptyTemplate()!" />
624
+ } @else {
625
+ <div class="ax-lookup-empty">
626
+ {{ '@acorex:common.general.no-result-found' | translate | async }}
627
+ </div>
628
+ }
629
+ } @else {
630
+ <div class="ax-lookup-tree">
631
+ @for (instance of treeInstances(); track instance.id) {
632
+ <ax-tree-view
633
+ [datasource]="instance.source"
634
+ selectMode="single"
635
+ selectionBehavior="all"
636
+ [controlledSelection]="true"
637
+ [selectedIds]="selectedIds()"
638
+ [idField]="valueField()"
639
+ [titleField]="textField()"
640
+ [disabledField]="disabledField()"
641
+ [nodeTemplate]="nodeTemplate()"
642
+ [alternate]="alternate()"
643
+ [highlightText]="highlightText()"
644
+ (onSelectionChange)="handleSelectionChange($event)"
645
+ />
646
+ }
647
+ </div>
648
+ }
649
+ `, 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
650
  }
448
651
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupDropDownTreeComponent, decorators: [{
449
652
  type: Component,
@@ -451,25 +654,320 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
451
654
  selector: 'ax-lookup-drop-down-tree',
452
655
  changeDetection: ChangeDetectionStrategy.OnPush,
453
656
  encapsulation: ViewEncapsulation.None,
454
- imports: [AXTreeViewComponent],
657
+ imports: [AXTreeViewComponent, NgTemplateOutlet, AXTranslatorPipe, AsyncPipe],
455
658
  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>
659
+ @if (isEmpty()) {
660
+ @if (emptyTemplate()) {
661
+ <ng-container [ngTemplateOutlet]="emptyTemplate()!" />
662
+ } @else {
663
+ <div class="ax-lookup-empty">
664
+ {{ '@acorex:common.general.no-result-found' | translate | async }}
665
+ </div>
666
+ }
667
+ } @else {
668
+ <div class="ax-lookup-tree">
669
+ @for (instance of treeInstances(); track instance.id) {
670
+ <ax-tree-view
671
+ [datasource]="instance.source"
672
+ selectMode="single"
673
+ selectionBehavior="all"
674
+ [controlledSelection]="true"
675
+ [selectedIds]="selectedIds()"
676
+ [idField]="valueField()"
677
+ [titleField]="textField()"
678
+ [disabledField]="disabledField()"
679
+ [nodeTemplate]="nodeTemplate()"
680
+ [alternate]="alternate()"
681
+ [highlightText]="highlightText()"
682
+ (onSelectionChange)="handleSelectionChange($event)"
683
+ />
684
+ }
685
+ </div>
686
+ }
687
+ `,
688
+ }]
689
+ }], 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"] }] } });
690
+
691
+ /**
692
+ * Internal mini component for the `multi-column-tree` lookup mode:
693
+ * a multi-column `ax-data-table` with a drop-down tree inside it.
694
+ * Rows expand/collapse via the data-table hierarchy (`parentField` / nested `children`).
695
+ *
696
+ * @category Components
697
+ */
698
+ class AXLookupMultiColumnTreeComponent {
699
+ constructor() {
700
+ /**
701
+ * The datasource providing hierarchical rows (roots on load, children via `parentField`).
702
+ */
703
+ this.dataSource = input.required(/* @ts-ignore */
704
+ ...(ngDevMode ? [{ debugName: "dataSource" }] : /* istanbul ignore next */ []));
705
+ /**
706
+ * The item property used as the selection value (also the data-table row key).
707
+ */
708
+ this.valueField = input('id', /* @ts-ignore */
709
+ ...(ngDevMode ? [{ debugName: "valueField" }] : /* istanbul ignore next */ []));
710
+ /**
711
+ * The item property used as the display text. The matching column shows the expand control
712
+ * unless another column sets `expandHandler`.
713
+ */
714
+ this.textField = input('text', /* @ts-ignore */
715
+ ...(ngDevMode ? [{ debugName: "textField" }] : /* istanbul ignore next */ []));
716
+ /**
717
+ * The item property marking an item as disabled.
718
+ */
719
+ this.disabledField = input('disabled', /* @ts-ignore */
720
+ ...(ngDevMode ? [{ debugName: "disabledField" }] : /* istanbul ignore next */ []));
721
+ /**
722
+ * Field used by the data table to fetch children (`AXDataSource` filter on expand).
723
+ */
724
+ this.parentField = input('parentId', /* @ts-ignore */
725
+ ...(ngDevMode ? [{ debugName: "parentField" }] : /* istanbul ignore next */ []));
726
+ /**
727
+ * Field used by the data table to decide whether a row can expand.
728
+ */
729
+ this.hasChildrenField = input('hasChild', /* @ts-ignore */
730
+ ...(ngDevMode ? [{ debugName: "hasChildrenField" }] : /* istanbul ignore next */ []));
731
+ /**
732
+ * Currently selected values (always an array, even for single selection).
733
+ */
734
+ this.selectedValues = input([], /* @ts-ignore */
735
+ ...(ngDevMode ? [{ debugName: "selectedValues" }] : /* istanbul ignore next */ []));
736
+ /**
737
+ * The fixed row height in pixels passed to the data table.
738
+ */
739
+ this.itemHeight = input(40, /* @ts-ignore */
740
+ ...(ngDevMode ? [{ debugName: "itemHeight" }] : /* istanbul ignore next */ []));
741
+ /**
742
+ * The maximum number of body rows visible before the table scrolls.
743
+ */
744
+ this.maxVisibleItems = input(8, /* @ts-ignore */
745
+ ...(ngDevMode ? [{ debugName: "maxVisibleItems" }] : /* istanbul ignore next */ []));
746
+ /**
747
+ * Column definitions rendered as `ax-text-column` instances.
748
+ */
749
+ this.columns = input([], /* @ts-ignore */
750
+ ...(ngDevMode ? [{ debugName: "columns" }] : /* istanbul ignore next */ []));
751
+ /**
752
+ * Optional custom row content. Context: `$implicit` is the row item.
753
+ * When set, replaces the default multi-column cell layout.
754
+ */
755
+ this.itemTemplate = input(undefined, /* @ts-ignore */
756
+ ...(ngDevMode ? [{ debugName: "itemTemplate" }] : /* istanbul ignore next */ []));
757
+ /**
758
+ * Custom template rendered when the datasource has no items.
759
+ */
760
+ this.emptyTemplate = input(undefined, /* @ts-ignore */
761
+ ...(ngDevMode ? [{ debugName: "emptyTemplate" }] : /* istanbul ignore next */ []));
762
+ /**
763
+ * Custom template rendered while the table is loading.
764
+ */
765
+ this.loadingTemplate = input(undefined, /* @ts-ignore */
766
+ ...(ngDevMode ? [{ debugName: "loadingTemplate" }] : /* istanbul ignore next */ []));
767
+ /**
768
+ * When `true`, table rows use alternating background colors for easier scanning.
769
+ */
770
+ this.alternate = input(false, /* @ts-ignore */
771
+ ...(ngDevMode ? [{ debugName: "alternate" }] : /* istanbul ignore next */ []));
772
+ /**
773
+ * When set, matching text in table cells is highlighted.
774
+ */
775
+ this.highlightText = input('', /* @ts-ignore */
776
+ ...(ngDevMode ? [{ debugName: "highlightText" }] : /* istanbul ignore next */ []));
777
+ /**
778
+ * Emitted when the user picks a row (not when expanding/collapsing).
779
+ */
780
+ this.itemClick = output();
781
+ /**
782
+ * Header (~40px) + up to `maxVisibleItems` body rows. Expanded children scroll inside.
783
+ */
784
+ this.tableHeight = computed(() => 40 + this.maxVisibleItems() * this.itemHeight(), /* @ts-ignore */
785
+ ...(ngDevMode ? [{ debugName: "tableHeight" }] : /* istanbul ignore next */ []));
786
+ this.loadingConfig = computed(() => ({
787
+ enabled: true,
788
+ animation: true,
789
+ loadingTemplate: this.loadingTemplate(),
790
+ }), /* @ts-ignore */
791
+ ...(ngDevMode ? [{ debugName: "loadingConfig" }] : /* istanbul ignore next */ []));
792
+ this.resolveRowCssClass = (row) => {
793
+ const item = row;
794
+ if (!item) {
795
+ return '';
796
+ }
797
+ const classes = [];
798
+ if (this.isSelected(item)) {
799
+ classes.push('ax-state-selected');
800
+ }
801
+ if (this.isDisabled(item)) {
802
+ classes.push('ax-state-disabled');
803
+ }
804
+ return classes.join(' ');
805
+ };
806
+ }
807
+ /** Stable unique key for `@for` — avoids NG0955 when `field` is missing or duplicated. */
808
+ trackColumnKey(index, column) {
809
+ return `${column?.field ?? ''}::${index}`;
810
+ }
811
+ resolveColumnWidth(column) {
812
+ const width = column.width?.trim();
813
+ if (!width || width.includes('fr')) {
814
+ return 'auto';
815
+ }
816
+ return width;
817
+ }
818
+ isExpandColumn(index, column) {
819
+ if (column.expandHandler === true) {
820
+ return true;
821
+ }
822
+ if (this.columns().some((item) => item.expandHandler === true)) {
823
+ return false;
824
+ }
825
+ const textIndex = this.columns().findIndex((item) => item.field === this.textField());
826
+ return (textIndex === -1 ? 0 : textIndex) === index;
827
+ }
828
+ handleRowClick(event) {
829
+ this.handleItemClick(event.data);
830
+ }
831
+ handleItemClick(item) {
832
+ if (!item || this.isDisabled(item)) {
833
+ return;
834
+ }
835
+ this.itemClick.emit({ item, value: this.getValue(item) });
836
+ }
837
+ handleItemMouseDown(event, item) {
838
+ event.preventDefault();
839
+ event.stopPropagation();
840
+ this.handleItemClick(item);
841
+ }
842
+ isSelected(item) {
843
+ const value = this.getValue(item);
844
+ return this.selectedValues().some((v) => v == value);
845
+ }
846
+ isDisabled(item) {
847
+ return Boolean(item?.[this.disabledField()]);
848
+ }
849
+ getValue(item) {
850
+ return item?.[this.valueField()];
851
+ }
852
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupMultiColumnTreeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
853
+ 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: `
854
+ <ax-data-table
855
+ class="ax-lookup-multi-column-table"
856
+ look="minimal"
857
+ [dataSource]="dataSource()"
858
+ [parentField]="parentField()"
859
+ [hasChildrenField]="hasChildrenField()"
860
+ [itemHeight]="itemHeight()"
861
+ [alternative]="alternate()"
862
+ [emptyTemplate]="emptyTemplate()"
863
+ [highlightText]="highlightText()"
864
+ [loading]="loadingConfig()"
865
+ [paging]="false"
866
+ [showHeader]="true"
867
+ [fixedHeader]="true"
868
+ [showFooter]="false"
869
+ [allowReordering]="false"
870
+ [rowTemplate]="itemTemplate() ? customRowTemplate : undefined"
871
+ [rowCssClass]="resolveRowCssClass"
872
+ (onRowClick)="handleRowClick($event)"
873
+ >
874
+ @for (column of columns(); track trackColumnKey($index, column)) {
875
+ <ax-text-column
876
+ [dataField]="column.field"
877
+ [caption]="column.title"
878
+ [width]="resolveColumnWidth(column)"
879
+ [expandHandler]="isExpandColumn($index, column)"
880
+ [allowSorting]="false"
881
+ [allowResizing]="false"
882
+ />
883
+ }
884
+ </ax-data-table>
885
+
886
+ <ng-template #customRowTemplate let-ctx>
887
+ <tr
888
+ [class.ax-state-selected]="ctx.data != null && isSelected(ctx.data)"
889
+ [class.ax-state-disabled]="ctx.data != null && isDisabled(ctx.data)"
890
+ [style.height.px]="itemHeight()"
891
+ [style.max-height.px]="itemHeight()"
892
+ (mousedown)="handleItemMouseDown($event, ctx.data)"
893
+ >
894
+ <td [attr.colspan]="columns().length || 1">
895
+ @if (ctx.data != null && itemTemplate()) {
896
+ <ng-container
897
+ [ngTemplateOutlet]="itemTemplate()!"
898
+ [ngTemplateOutletContext]="{ $implicit: ctx.data }"
899
+ />
900
+ }
901
+ </td>
902
+ </tr>
903
+ </ng-template>
904
+ `, 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 }); }
905
+ }
906
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupMultiColumnTreeComponent, decorators: [{
907
+ type: Component,
908
+ args: [{
909
+ selector: 'ax-lookup-multi-column-tree',
910
+ changeDetection: ChangeDetectionStrategy.OnPush,
911
+ encapsulation: ViewEncapsulation.None,
912
+ imports: [NgTemplateOutlet, AXDataTableComponent, AXDataTableTextColumnComponent],
913
+ host: {
914
+ class: 'ax-lookup-multi-column ax-lookup-multi-column-tree',
915
+ '[style.height.px]': 'tableHeight()',
916
+ },
917
+ template: `
918
+ <ax-data-table
919
+ class="ax-lookup-multi-column-table"
920
+ look="minimal"
921
+ [dataSource]="dataSource()"
922
+ [parentField]="parentField()"
923
+ [hasChildrenField]="hasChildrenField()"
924
+ [itemHeight]="itemHeight()"
925
+ [alternative]="alternate()"
926
+ [emptyTemplate]="emptyTemplate()"
927
+ [highlightText]="highlightText()"
928
+ [loading]="loadingConfig()"
929
+ [paging]="false"
930
+ [showHeader]="true"
931
+ [fixedHeader]="true"
932
+ [showFooter]="false"
933
+ [allowReordering]="false"
934
+ [rowTemplate]="itemTemplate() ? customRowTemplate : undefined"
935
+ [rowCssClass]="resolveRowCssClass"
936
+ (onRowClick)="handleRowClick($event)"
937
+ >
938
+ @for (column of columns(); track trackColumnKey($index, column)) {
939
+ <ax-text-column
940
+ [dataField]="column.field"
941
+ [caption]="column.title"
942
+ [width]="resolveColumnWidth(column)"
943
+ [expandHandler]="isExpandColumn($index, column)"
944
+ [allowSorting]="false"
945
+ [allowResizing]="false"
946
+ />
947
+ }
948
+ </ax-data-table>
949
+
950
+ <ng-template #customRowTemplate let-ctx>
951
+ <tr
952
+ [class.ax-state-selected]="ctx.data != null && isSelected(ctx.data)"
953
+ [class.ax-state-disabled]="ctx.data != null && isDisabled(ctx.data)"
954
+ [style.height.px]="itemHeight()"
955
+ [style.max-height.px]="itemHeight()"
956
+ (mousedown)="handleItemMouseDown($event, ctx.data)"
957
+ >
958
+ <td [attr.colspan]="columns().length || 1">
959
+ @if (ctx.data != null && itemTemplate()) {
960
+ <ng-container
961
+ [ngTemplateOutlet]="itemTemplate()!"
962
+ [ngTemplateOutletContext]="{ $implicit: ctx.data }"
963
+ />
964
+ }
965
+ </td>
966
+ </tr>
967
+ </ng-template>
470
968
  `,
471
969
  }]
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"] }] } });
970
+ }], 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
971
 
474
972
  /**
475
973
  * Internal mini component for the `multi-column` lookup mode:
@@ -547,6 +1045,11 @@ class AXLookupMultiColumnComponent {
547
1045
  */
548
1046
  this.alternate = input(false, /* @ts-ignore */
549
1047
  ...(ngDevMode ? [{ debugName: "alternate" }] : /* istanbul ignore next */ []));
1048
+ /**
1049
+ * When set, matching text in table cells is highlighted.
1050
+ */
1051
+ this.highlightText = input('', /* @ts-ignore */
1052
+ ...(ngDevMode ? [{ debugName: "highlightText" }] : /* istanbul ignore next */ []));
550
1053
  /**
551
1054
  * Emitted when the user picks a row.
552
1055
  */
@@ -608,19 +1111,18 @@ class AXLookupMultiColumnComponent {
608
1111
  const source = this.dataSource();
609
1112
  this.tableDataSource.config.key = source.config.key || this.valueField();
610
1113
  untracked(() => {
611
- this.#loadedItems = [];
612
- this.#totalCount.set(0);
613
- this.#syncTablePageSize();
614
- this.tableDataSource.refresh({ reset: true });
1114
+ this.#applyLoadedItems(source.cachedItems, source.totalCount);
615
1115
  });
616
1116
  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 });
1117
+ this.#applyLoadedItems(event.cachedItems, event.totalCount);
1118
+ });
1119
+ // Fetch page 0 only when the source has never loaded. Reopen remounts this
1120
+ // view; setPage(0) is a no-op on a warm source and must not force a new API call.
1121
+ queueMicrotask(() => {
1122
+ if (!source.cachedItems.some((item) => item != null)) {
1123
+ source.setPage(0);
1124
+ }
621
1125
  });
622
- // Kick the first page; later pages come from scroll.
623
- queueMicrotask(() => source.setPage(0));
624
1126
  onCleanup(() => changedSub.unsubscribe());
625
1127
  });
626
1128
  effect((onCleanup) => {
@@ -655,6 +1157,12 @@ class AXLookupMultiColumnComponent {
655
1157
  }
656
1158
  return width;
657
1159
  }
1160
+ #applyLoadedItems(cachedItems, totalCount) {
1161
+ this.#loadedItems = cachedItems.filter((item) => item != null);
1162
+ this.#totalCount.set(totalCount);
1163
+ this.#syncTablePageSize();
1164
+ this.tableDataSource.refresh({ reset: true });
1165
+ }
658
1166
  #syncTablePageSize() {
659
1167
  this.tableDataSource.config.pageSize = Math.max(this.#loadedItems.length, 1);
660
1168
  }
@@ -699,7 +1207,7 @@ class AXLookupMultiColumnComponent {
699
1207
  return item?.[this.valueField()];
700
1208
  }
701
1209
  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: `
1210
+ 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
1211
  <ax-data-table
704
1212
  class="ax-lookup-multi-column-table"
705
1213
  look="minimal"
@@ -707,6 +1215,7 @@ class AXLookupMultiColumnComponent {
707
1215
  [itemHeight]="itemHeight()"
708
1216
  [alternative]="alternate()"
709
1217
  [emptyTemplate]="emptyTemplate()"
1218
+ [highlightText]="highlightText()"
710
1219
  [loading]="loadingConfig()"
711
1220
  [paging]="false"
712
1221
  [showHeader]="true"
@@ -767,6 +1276,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
767
1276
  [itemHeight]="itemHeight()"
768
1277
  [alternative]="alternate()"
769
1278
  [emptyTemplate]="emptyTemplate()"
1279
+ [highlightText]="highlightText()"
770
1280
  [loading]="loadingConfig()"
771
1281
  [paging]="false"
772
1282
  [showHeader]="true"
@@ -808,7 +1318,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
808
1318
  </ng-template>
809
1319
  `,
810
1320
  }]
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 }] }] } });
1321
+ }], 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
1322
 
813
1323
  /**
814
1324
  * Internal mini component for the `multi-select-tree` lookup mode:
@@ -853,12 +1363,43 @@ class AXLookupMultiSelectTreeComponent {
853
1363
  */
854
1364
  this.nodeTemplate = input(undefined, /* @ts-ignore */
855
1365
  ...(ngDevMode ? [{ debugName: "nodeTemplate" }] : /* istanbul ignore next */ []));
1366
+ /**
1367
+ * Custom template rendered when the filtered tree has no nodes.
1368
+ */
1369
+ this.emptyTemplate = input(undefined, /* @ts-ignore */
1370
+ ...(ngDevMode ? [{ debugName: "emptyTemplate" }] : /* istanbul ignore next */ []));
1371
+ /**
1372
+ * When `true`, visible tree nodes use alternating background colors.
1373
+ */
1374
+ this.alternate = input(false, /* @ts-ignore */
1375
+ ...(ngDevMode ? [{ debugName: "alternate" }] : /* istanbul ignore next */ []));
1376
+ /**
1377
+ * Unique id that changes on every search apply so a new tree instance is created.
1378
+ */
1379
+ this.filterKey = input('0', /* @ts-ignore */
1380
+ ...(ngDevMode ? [{ debugName: "filterKey" }] : /* istanbul ignore next */ []));
1381
+ /**
1382
+ * When set, matching characters in the default node label are highlighted.
1383
+ */
1384
+ this.highlightText = input('', /* @ts-ignore */
1385
+ ...(ngDevMode ? [{ debugName: "highlightText" }] : /* istanbul ignore next */ []));
856
1386
  /**
857
1387
  * Emitted when the user changes the tree selection.
858
1388
  */
859
1389
  this.selectionChange = output();
860
1390
  this.selectedIds = computed(() => this.selectedValues().map((v) => String(v)), /* @ts-ignore */
861
1391
  ...(ngDevMode ? [{ debugName: "selectedIds" }] : /* istanbul ignore next */ []));
1392
+ this.isEmpty = computed(() => {
1393
+ const source = this.dataSource();
1394
+ return Array.isArray(source) && source.length === 0;
1395
+ }, /* @ts-ignore */
1396
+ ...(ngDevMode ? [{ debugName: "isEmpty" }] : /* istanbul ignore next */ []));
1397
+ this.treeInstances = computed(() => [{ id: this.filterKey(), source: this.dataSource() }], /* @ts-ignore */
1398
+ ...(ngDevMode ? [{ debugName: "treeInstances" }] : /* istanbul ignore next */ []));
1399
+ }
1400
+ /** Whether the filtered tree currently has no nodes. */
1401
+ hasNoMatches() {
1402
+ return this.isEmpty();
862
1403
  }
863
1404
  handleSelectionChange(e) {
864
1405
  if (e.source !== 'user') {
@@ -867,22 +1408,36 @@ class AXLookupMultiSelectTreeComponent {
867
1408
  this.selectionChange.emit({ ids: e.selectedIds, nodes: e.selectedNodes });
868
1409
  }
869
1410
  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 }); }
1411
+ 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: `
1412
+ @if (isEmpty()) {
1413
+ @if (emptyTemplate()) {
1414
+ <ng-container [ngTemplateOutlet]="emptyTemplate()!" />
1415
+ } @else {
1416
+ <div class="ax-lookup-empty">
1417
+ {{ '@acorex:common.general.no-result-found' | translate | async }}
1418
+ </div>
1419
+ }
1420
+ } @else {
1421
+ <div class="ax-lookup-tree">
1422
+ @for (instance of treeInstances(); track instance.id) {
1423
+ <ax-tree-view
1424
+ [datasource]="instance.source"
1425
+ selectMode="multiple"
1426
+ [selectionBehavior]="selectionBehavior()"
1427
+ [controlledSelection]="true"
1428
+ [selectedIds]="selectedIds()"
1429
+ [idField]="valueField()"
1430
+ [titleField]="textField()"
1431
+ [disabledField]="disabledField()"
1432
+ [nodeTemplate]="nodeTemplate()"
1433
+ [alternate]="alternate()"
1434
+ [highlightText]="highlightText()"
1435
+ (onSelectionChange)="handleSelectionChange($event)"
1436
+ />
1437
+ }
1438
+ </div>
1439
+ }
1440
+ `, 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
1441
  }
887
1442
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupMultiSelectTreeComponent, decorators: [{
888
1443
  type: Component,
@@ -890,25 +1445,39 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
890
1445
  selector: 'ax-lookup-multi-select-tree',
891
1446
  changeDetection: ChangeDetectionStrategy.OnPush,
892
1447
  encapsulation: ViewEncapsulation.None,
893
- imports: [AXTreeViewComponent],
1448
+ imports: [AXTreeViewComponent, NgTemplateOutlet, AXTranslatorPipe, AsyncPipe],
894
1449
  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>
1450
+ @if (isEmpty()) {
1451
+ @if (emptyTemplate()) {
1452
+ <ng-container [ngTemplateOutlet]="emptyTemplate()!" />
1453
+ } @else {
1454
+ <div class="ax-lookup-empty">
1455
+ {{ '@acorex:common.general.no-result-found' | translate | async }}
1456
+ </div>
1457
+ }
1458
+ } @else {
1459
+ <div class="ax-lookup-tree">
1460
+ @for (instance of treeInstances(); track instance.id) {
1461
+ <ax-tree-view
1462
+ [datasource]="instance.source"
1463
+ selectMode="multiple"
1464
+ [selectionBehavior]="selectionBehavior()"
1465
+ [controlledSelection]="true"
1466
+ [selectedIds]="selectedIds()"
1467
+ [idField]="valueField()"
1468
+ [titleField]="textField()"
1469
+ [disabledField]="disabledField()"
1470
+ [nodeTemplate]="nodeTemplate()"
1471
+ [alternate]="alternate()"
1472
+ [highlightText]="highlightText()"
1473
+ (onSelectionChange)="handleSelectionChange($event)"
1474
+ />
1475
+ }
1476
+ </div>
1477
+ }
909
1478
  `,
910
1479
  }]
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"] }] } });
1480
+ }], 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
1481
 
913
1482
  /**
914
1483
  * Internal mini component for the `multi-select` lookup mode:
@@ -941,11 +1510,11 @@ class AXLookupMultiSelectComponent extends AXLookupListViewBase {
941
1510
  <div
942
1511
  *cdkVirtualFor="let item of listDataSource(); let i = index; trackBy: trackByIndex"
943
1512
  role="option"
944
- class="ax-lookup-option-host ax-lookup-option"
1513
+ class="ax-lookup-option-host ax-lookup-option-multiple"
945
1514
  axListNavigationItem
946
1515
  #navItem="axListNavigationItem"
947
1516
  [style.height.px]="itemHeight()"
948
- [class.ax-lookup-option-host--check]="!!itemTemplate()"
1517
+ [class.ax-lookup-option]="!itemTemplate()"
949
1518
  [class.ax-state-alternate]="alternate() && i % 2 === 1"
950
1519
  [class.ax-state-selected]="item != null && isSelected(item)"
951
1520
  [class.ax-state-disabled]="item != null && isDisabled(item)"
@@ -956,17 +1525,18 @@ class AXLookupMultiSelectComponent extends AXLookupListViewBase {
956
1525
  (onKeypress)="handleItemKeypress($event, item)"
957
1526
  >
958
1527
  @if (item != null) {
959
- <input
960
- type="checkbox"
1528
+ <ax-check-box
961
1529
  class="ax-lookup-checkbox"
962
- tabindex="-1"
963
- [checked]="isSelected(item)"
1530
+ [tabIndex]="-1"
1531
+ [value]="isSelected(item)"
964
1532
  [disabled]="isDisabled(item)"
965
- />
1533
+ ></ax-check-box>
966
1534
  @if (itemTemplate()) {
967
1535
  <ng-container [ngTemplateOutlet]="itemTemplate()!" [ngTemplateOutletContext]="{ $implicit: item }" />
968
1536
  } @else {
969
- <span class="ax-lookup-option-text">{{ getText(item) }}</span>
1537
+ <span class="ax-lookup-option-text">
1538
+ <ax-highlight-text [text]="getText(item)" [query]="highlightText()" />
1539
+ </span>
970
1540
  }
971
1541
  } @else {
972
1542
  <ng-container [ngTemplateOutlet]="loadingRow" />
@@ -982,7 +1552,7 @@ class AXLookupMultiSelectComponent extends AXLookupListViewBase {
982
1552
  <span class="ax-lookup-option-loading">{{ '@acorex:common.status.loading' | translate | async }}</span>
983
1553
  }
984
1554
  </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 }); }
1555
+ `, 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
1556
  }
987
1557
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupMultiSelectComponent, decorators: [{
988
1558
  type: Component,
@@ -990,7 +1560,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
990
1560
  selector: 'ax-lookup-multi-select',
991
1561
  changeDetection: ChangeDetectionStrategy.OnPush,
992
1562
  encapsulation: ViewEncapsulation.None,
993
- imports: [ScrollingModule, NgTemplateOutlet, AXTranslatorPipe, AsyncPipe, AXListNavigationModule],
1563
+ imports: [ScrollingModule, NgTemplateOutlet, AXTranslatorPipe, AsyncPipe, AXListNavigationModule, AXCheckBoxComponent, AXHighlightTextComponent],
994
1564
  providers: [{ provide: AXLookupListViewBase, useExisting: AXLookupMultiSelectComponent }],
995
1565
  template: `
996
1566
  @if (isEmpty()) {
@@ -1015,11 +1585,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
1015
1585
  <div
1016
1586
  *cdkVirtualFor="let item of listDataSource(); let i = index; trackBy: trackByIndex"
1017
1587
  role="option"
1018
- class="ax-lookup-option-host ax-lookup-option"
1588
+ class="ax-lookup-option-host ax-lookup-option-multiple"
1019
1589
  axListNavigationItem
1020
1590
  #navItem="axListNavigationItem"
1021
1591
  [style.height.px]="itemHeight()"
1022
- [class.ax-lookup-option-host--check]="!!itemTemplate()"
1592
+ [class.ax-lookup-option]="!itemTemplate()"
1023
1593
  [class.ax-state-alternate]="alternate() && i % 2 === 1"
1024
1594
  [class.ax-state-selected]="item != null && isSelected(item)"
1025
1595
  [class.ax-state-disabled]="item != null && isDisabled(item)"
@@ -1030,17 +1600,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
1030
1600
  (onKeypress)="handleItemKeypress($event, item)"
1031
1601
  >
1032
1602
  @if (item != null) {
1033
- <input
1034
- type="checkbox"
1603
+ <ax-check-box
1035
1604
  class="ax-lookup-checkbox"
1036
- tabindex="-1"
1037
- [checked]="isSelected(item)"
1605
+ [tabIndex]="-1"
1606
+ [value]="isSelected(item)"
1038
1607
  [disabled]="isDisabled(item)"
1039
- />
1608
+ ></ax-check-box>
1040
1609
  @if (itemTemplate()) {
1041
1610
  <ng-container [ngTemplateOutlet]="itemTemplate()!" [ngTemplateOutletContext]="{ $implicit: item }" />
1042
1611
  } @else {
1043
- <span class="ax-lookup-option-text">{{ getText(item) }}</span>
1612
+ <span class="ax-lookup-option-text">
1613
+ <ax-highlight-text [text]="getText(item)" [query]="highlightText()" />
1614
+ </span>
1044
1615
  }
1045
1616
  } @else {
1046
1617
  <ng-container [ngTemplateOutlet]="loadingRow" />
@@ -1061,14 +1632,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
1061
1632
  }] });
1062
1633
 
1063
1634
  /**
1064
- * An advanced drop-down (lookup) editor with five modes, `AXDataSource` support, and virtual scrolling.
1635
+ * An advanced drop-down (lookup) editor with six modes, `AXDataSource` support, and virtual scrolling.
1065
1636
  *
1066
1637
  * Modes (each rendered by its own internal mini component):
1067
1638
  * - `drop-down-list` — a predefined list of options for picking single values.
1068
1639
  * - `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.
1640
+ * In multi modes, Backspace with an empty trigger input removes the last chip; repeated presses clear
1641
+ * the whole selection.
1642
+ * - `drop-down-tree` — a tree-like structure for single item selection; when searchable, the trigger
1643
+ * input filters nested nodes as you type (on small screens the search field is inside the actionsheet).
1644
+ * - `multi-select-tree` — a tree-like structure for multiple item selection; searchable the same way.
1645
+ * - `multi-column` — an `ax-data-table` grid; when searchable, the trigger input filters as you type
1646
+ * (on small screens the search field is inside the actionsheet).
1647
+ * - `multi-column-tree` — a multi-column `ax-data-table` with a drop-down tree inside it
1648
+ * (expandable hierarchical rows). Uses `treeDataSource` + `columns`, or a hierarchical `dataSource`.
1072
1649
  *
1073
1650
  * With `adaptivityEnabled` (default `true`), the list opens as a bottom actionsheet on small
1074
1651
  * screens instead of an anchored dropdown — the same alternate presentation as `ax-select-box`.
@@ -1081,6 +1658,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
1081
1658
  class AXLookupComponent extends NXValueComponent {
1082
1659
  #platform;
1083
1660
  #destroyRef;
1661
+ /** Whether search filters the tree datasource instead of `AXDataSource`. */
1662
+ #isTreeOnlySearchMode() {
1663
+ const mode = this.mode();
1664
+ return mode === 'drop-down-tree' || mode === 'multi-select-tree';
1665
+ }
1666
+ /**
1667
+ * Applied tree search query. Set only from `#applyFilterNow` so opening a single-select
1668
+ * with the selected label in the trigger does not filter the tree.
1669
+ */
1670
+ #treeFilterQuery;
1671
+ #treeFilterEpoch;
1672
+ /** Applied (debounced) search query used for result highlighting. */
1673
+ #appliedSearchQuery;
1674
+ /** Reused so closing/reopening the popup does not create a new AXDataSource (which would miss cache). */
1675
+ #multiColumnTreeTableSource;
1676
+ #multiColumnTreeTableKey;
1677
+ #multiColumnTreeInput;
1678
+ /**
1679
+ * Tree callback results keyed by parent id. Survives popup remount so
1680
+ * drop-down-tree / multi-select-tree do not refetch on every open.
1681
+ */
1682
+ #treeChildrenCache;
1683
+ #document;
1084
1684
  #itemsCache;
1085
1685
  #isUserInteraction;
1086
1686
  #lastValue;
@@ -1089,6 +1689,8 @@ class AXLookupComponent extends NXValueComponent {
1089
1689
  #selectionInitialized;
1090
1690
  #filterApplied;
1091
1691
  #searchDebounce;
1692
+ #searchEnterRevision;
1693
+ #sheetSearchFocused;
1092
1694
  constructor() {
1093
1695
  super();
1094
1696
  this.#platform = inject(AXPlatform);
@@ -1104,13 +1706,14 @@ class AXLookupComponent extends NXValueComponent {
1104
1706
  this.mode = input('drop-down-list', /* @ts-ignore */
1105
1707
  ...(ngDevMode ? [{ debugName: "mode" }] : /* istanbul ignore next */ []));
1106
1708
  /**
1107
- * The items source for list-based modes (`drop-down-list`, `multi-select`, `multi-column`).
1709
+ * The items source for list-based modes (`drop-down-list`, `multi-select`, `multi-column`)
1710
+ * and for `multi-column-tree` when `treeDataSource` is not set.
1108
1711
  * Accepts an `AXDataSource` (remote paging, `byKey`, server-side filter) or a plain array.
1109
1712
  */
1110
1713
  this.dataSource = input(undefined, /* @ts-ignore */
1111
1714
  ...(ngDevMode ? [{ debugName: "dataSource" }] : /* istanbul ignore next */ []));
1112
1715
  /**
1113
- * The nodes source for tree modes (`drop-down-tree`, `multi-select-tree`):
1716
+ * The nodes source for tree modes (`drop-down-tree`, `multi-select-tree`, `multi-column-tree`):
1114
1717
  * an array of nodes or a lazy children callback.
1115
1718
  */
1116
1719
  this.treeDataSource = input(undefined, /* @ts-ignore */
@@ -1132,20 +1735,36 @@ class AXLookupComponent extends NXValueComponent {
1132
1735
  this.disabledField = input('disabled', /* @ts-ignore */
1133
1736
  ...(ngDevMode ? [{ debugName: "disabledField" }] : /* istanbul ignore next */ []));
1134
1737
  /**
1135
- * Column definitions for the `multi-column` mode (rendered as `ax-text-column` in `ax-data-table`).
1738
+ * Column definitions for the `multi-column` and `multi-column-tree` modes
1739
+ * (rendered as `ax-text-column` in `ax-data-table`).
1136
1740
  */
1137
1741
  this.columns = input([], /* @ts-ignore */
1138
1742
  ...(ngDevMode ? [{ debugName: "columns" }] : /* istanbul ignore next */ []));
1743
+ /**
1744
+ * Field used by `multi-column-tree` to fetch children when a row is expanded
1745
+ * (`AXDataSource` filter). Defaults to `parentId`. Nested `children` arrays are also supported.
1746
+ */
1747
+ this.treeParentField = input('parentId', /* @ts-ignore */
1748
+ ...(ngDevMode ? [{ debugName: "treeParentField" }] : /* istanbul ignore next */ []));
1749
+ /**
1750
+ * Field used by `multi-column-tree` to decide whether a row shows an expand control.
1751
+ * Defaults to `hasChild`. Nodes with `children` / `childrenCount` are mapped automatically
1752
+ * when using `treeDataSource`.
1753
+ */
1754
+ this.hasChildrenField = input('hasChild', /* @ts-ignore */
1755
+ ...(ngDevMode ? [{ debugName: "hasChildrenField" }] : /* istanbul ignore next */ []));
1139
1756
  /**
1140
1757
  * Whether the trigger accepts typing and filters the datasource (`true`),
1141
1758
  * or is select-only with no writable input (`false`).
1142
- * Applies to `drop-down-list`, `multi-select`, and `multi-column`. Tree modes ignore this.
1759
+ * Applies to all modes, including `drop-down-tree` and `multi-select-tree`.
1760
+ * On small screens with `adaptivityEnabled`, search is typed in the actionsheet instead of the trigger.
1143
1761
  */
1144
1762
  this.searchable = input(true, /* @ts-ignore */
1145
1763
  ...(ngDevMode ? [{ debugName: "searchable" }] : /* istanbul ignore next */ []));
1146
1764
  /**
1147
1765
  * 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.
1766
+ * screens (`SM`). Searchable list modes then show a search field inside the sheet. When `false`,
1767
+ * the list always opens as an anchored dropdown.
1149
1768
  */
1150
1769
  this.adaptivityEnabled = input(true, /* @ts-ignore */
1151
1770
  ...(ngDevMode ? [{ debugName: "adaptivityEnabled" }] : /* istanbul ignore next */ []));
@@ -1156,13 +1775,14 @@ class AXLookupComponent extends NXValueComponent {
1156
1775
  ...(ngDevMode ? [{ debugName: "caption" }] : /* istanbul ignore next */ []));
1157
1776
  /**
1158
1777
  * When `true`, list rows use alternating background colors for easier scanning
1159
- * (`drop-down-list`, `multi-select`, and `multi-column` modes).
1778
+ * (all lookup modes, including drop-down-tree and multi-select-tree).
1160
1779
  */
1161
1780
  this.alternate = input(false, /* @ts-ignore */
1162
1781
  ...(ngDevMode ? [{ debugName: "alternate" }] : /* istanbul ignore next */ []));
1163
1782
  /**
1164
1783
  * 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.
1784
+ * (mainly useful in `multi-select` / `multi-select-tree`), and for the in-sheet search field on small screens.
1785
+ * Falls back to `placeholder` when the selection is empty on desktop.
1166
1786
  */
1167
1787
  this.searchPlaceholder = input('Search...', /* @ts-ignore */
1168
1788
  ...(ngDevMode ? [{ debugName: "searchPlaceholder" }] : /* istanbul ignore next */ []));
@@ -1201,8 +1821,15 @@ class AXLookupComponent extends NXValueComponent {
1201
1821
  */
1202
1822
  this.treeSelectionBehavior = input('all', /* @ts-ignore */
1203
1823
  ...(ngDevMode ? [{ debugName: "treeSelectionBehavior" }] : /* istanbul ignore next */ []));
1824
+ /**
1825
+ * When `true` (default), matching characters in popup result items are highlighted
1826
+ * while the user searches.
1827
+ */
1828
+ this.highlightSearch = input(true, { ...(ngDevMode ? { debugName: "highlightSearch" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
1204
1829
  /**
1205
1830
  * Custom template rendered for each item/node. Context: `$implicit` is the item.
1831
+ * Default option chrome (padding, typography, check icon) is not applied; only the
1832
+ * template's styles are used. Selection and hover backgrounds remain on the row.
1206
1833
  */
1207
1834
  this.itemTemplate = input(undefined, /* @ts-ignore */
1208
1835
  ...(ngDevMode ? [{ debugName: "itemTemplate" }] : /* istanbul ignore next */ []));
@@ -1277,19 +1904,73 @@ class AXLookupComponent extends NXValueComponent {
1277
1904
  this.isMultiple = computed(() => this.mode() === 'multi-select' || this.mode() === 'multi-select-tree', /* @ts-ignore */
1278
1905
  ...(ngDevMode ? [{ debugName: "isMultiple" }] : /* istanbul ignore next */ []));
1279
1906
  /** Whether the current mode renders a tree. */
1280
- this.isTreeMode = computed(() => this.mode() === 'drop-down-tree' || this.mode() === 'multi-select-tree', /* @ts-ignore */
1907
+ this.isTreeMode = computed(() => {
1908
+ const mode = this.mode();
1909
+ return (mode === 'drop-down-tree' ||
1910
+ mode === 'multi-select-tree' ||
1911
+ (mode === 'multi-column-tree' && this.treeDataSource() != null));
1912
+ }, /* @ts-ignore */
1281
1913
  ...(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
- }
1914
+ /** Whether the current mode can filter as you type (list, table, or tree). */
1915
+ this.isListSearchMode = computed(() => {
1287
1916
  const mode = this.mode();
1288
- return mode === 'drop-down-list' || mode === 'multi-select' || mode === 'multi-column';
1917
+ return (mode === 'drop-down-list' ||
1918
+ mode === 'multi-select' ||
1919
+ mode === 'drop-down-tree' ||
1920
+ mode === 'multi-select-tree' ||
1921
+ mode === 'multi-column' ||
1922
+ mode === 'multi-column-tree');
1289
1923
  }, /* @ts-ignore */
1924
+ ...(ngDevMode ? [{ debugName: "isListSearchMode" }] : /* istanbul ignore next */ []));
1925
+ /** Whether the trigger input is writable and filters as you type (desktop only). */
1926
+ this.isEditableTrigger = computed(() => this.searchable() && !this.readonly() && !this.isActionsheetStyle() && this.isListSearchMode(), /* @ts-ignore */
1290
1927
  ...(ngDevMode ? [{ debugName: "isEditableTrigger" }] : /* istanbul ignore next */ []));
1928
+ /** Whether search is typed in the actionsheet instead of the trigger. */
1929
+ this.isSheetSearchEnabled = computed(() => this.searchable() && !this.readonly() && this.isActionsheetStyle() && this.isListSearchMode(), /* @ts-ignore */
1930
+ ...(ngDevMode ? [{ debugName: "isSheetSearchEnabled" }] : /* istanbul ignore next */ []));
1931
+ /** Query typed in the actionsheet search field (independent of the trigger display text). */
1932
+ this.sheetSearchText = signal('', /* @ts-ignore */
1933
+ ...(ngDevMode ? [{ debugName: "sheetSearchText" }] : /* istanbul ignore next */ []));
1934
+ /**
1935
+ * Applied tree search query. Set only from `#applyFilterNow` so opening a single-select
1936
+ * with the selected label in the trigger does not filter the tree.
1937
+ */
1938
+ this.#treeFilterQuery = signal('', /* @ts-ignore */
1939
+ ...(ngDevMode ? [{ debugName: "#treeFilterQuery" }] : /* istanbul ignore next */ []));
1940
+ this.#treeFilterEpoch = signal(0, /* @ts-ignore */
1941
+ ...(ngDevMode ? [{ debugName: "#treeFilterEpoch" }] : /* istanbul ignore next */ []));
1942
+ /** Applied (debounced) search query used for result highlighting. */
1943
+ this.#appliedSearchQuery = signal('', /* @ts-ignore */
1944
+ ...(ngDevMode ? [{ debugName: "#appliedSearchQuery" }] : /* istanbul ignore next */ []));
1945
+ /** Increments on every tree filter apply so the tree view remounts with a new instance. */
1946
+ this.treeFilterKey = computed(() => String(this.#treeFilterEpoch()), /* @ts-ignore */
1947
+ ...(ngDevMode ? [{ debugName: "treeFilterKey" }] : /* istanbul ignore next */ []));
1948
+ /** Query passed to result-item highlighting (empty when disabled). */
1949
+ this.highlightQuery = computed(() => (this.highlightSearch() ? this.#appliedSearchQuery() : ''), /* @ts-ignore */
1950
+ ...(ngDevMode ? [{ debugName: "highlightQuery" }] : /* istanbul ignore next */ []));
1291
1951
  /** The datasource for list-based modes; plain arrays are converted. */
1292
1952
  this.resolvedDataSource = computed(() => {
1953
+ const tree = this.treeDataSource();
1954
+ if (this.mode() === 'multi-column-tree' && tree) {
1955
+ const key = `${this.valueField()}|${this.textField()}|${this.treeParentField()}|${this.hasChildrenField()}`;
1956
+ if (this.#multiColumnTreeTableSource &&
1957
+ this.#multiColumnTreeInput === tree &&
1958
+ this.#multiColumnTreeTableKey === key) {
1959
+ return this.#multiColumnTreeTableSource;
1960
+ }
1961
+ const cachedTree = Array.isArray(tree)
1962
+ ? tree
1963
+ : (nodeId) => this.#loadCachedTreeNodes(tree, nodeId);
1964
+ this.#multiColumnTreeInput = tree;
1965
+ this.#multiColumnTreeTableKey = key;
1966
+ this.#multiColumnTreeTableSource = createLookupTreeTableDataSource(cachedTree, {
1967
+ valueField: this.valueField(),
1968
+ textField: this.textField(),
1969
+ parentField: this.treeParentField(),
1970
+ hasChildrenField: this.hasChildrenField(),
1971
+ });
1972
+ return this.#multiColumnTreeTableSource;
1973
+ }
1293
1974
  const source = this.dataSource();
1294
1975
  if (!source) {
1295
1976
  return convertArrayToDataSource([], { key: this.valueField(), pageSize: 20 });
@@ -1299,6 +1980,28 @@ class AXLookupComponent extends NXValueComponent {
1299
1980
  : source;
1300
1981
  }, /* @ts-ignore */
1301
1982
  ...(ngDevMode ? [{ debugName: "resolvedDataSource" }] : /* istanbul ignore next */ []));
1983
+ /**
1984
+ * Tree callback results keyed by parent id. Survives popup remount so
1985
+ * drop-down-tree / multi-select-tree do not refetch on every open.
1986
+ */
1987
+ this.#treeChildrenCache = new WeakMap();
1988
+ this.resolvedTreeDataSource = computed(() => {
1989
+ this.#treeFilterEpoch();
1990
+ const source = this.treeDataSource();
1991
+ const query = this.#treeFilterQuery();
1992
+ const textField = this.textField();
1993
+ if (!source) {
1994
+ return [];
1995
+ }
1996
+ if (Array.isArray(source)) {
1997
+ return query ? filterTreeNodes(source, textField, query) : cloneLookupTreeNodes(source);
1998
+ }
1999
+ if (!query) {
2000
+ return (nodeId) => this.#loadCachedTreeNodes(source, nodeId);
2001
+ }
2002
+ return (nodeId) => this.#loadFilteredCachedTreeNodes(source, nodeId, query);
2003
+ }, /* @ts-ignore */
2004
+ ...(ngDevMode ? [{ debugName: "resolvedTreeDataSource" }] : /* istanbul ignore next */ []));
1302
2005
  /** The current selection normalized to an array. */
1303
2006
  this.selectedValues = computed(() => {
1304
2007
  const value = this.value();
@@ -1321,7 +2024,7 @@ class AXLookupComponent extends NXValueComponent {
1321
2024
  * Text typed in the editable trigger input.
1322
2025
  * Multi-select starts empty; single modes sync from the selected display text.
1323
2026
  */
1324
- this.searchText = linkedSignal(() => (this.mode() === 'multi-select' || this.mode() === 'multi-select-tree' ? '' : this.displayText()), /* @ts-ignore */
2027
+ this.searchText = linkedSignal(() => (this.isMultiple() ? '' : this.displayText()), /* @ts-ignore */
1325
2028
  ...(ngDevMode ? [{ debugName: "searchText" }] : /* istanbul ignore next */ []));
1326
2029
  /**
1327
2030
  * Whether the trigger should render `selectedTemplate` instead of the plain input text.
@@ -1338,12 +2041,34 @@ class AXLookupComponent extends NXValueComponent {
1338
2041
  return !this.expanded() && this.searchText() === this.displayText();
1339
2042
  }, /* @ts-ignore */
1340
2043
  ...(ngDevMode ? [{ debugName: "showSelectedTemplate" }] : /* istanbul ignore next */ []));
2044
+ /** Placeholder for the editable trigger search input. */
2045
+ this.triggerSearchPlaceholder = computed(() => {
2046
+ if (this.isActionsheetStyle()) {
2047
+ return this.isMultiple() && this.selectedItems().length > 0 ? '' : this.placeholder();
2048
+ }
2049
+ if (this.isMultiple() && this.selectedItems().length > 0) {
2050
+ return this.searchPlaceholder();
2051
+ }
2052
+ return this.placeholder();
2053
+ }, /* @ts-ignore */
2054
+ ...(ngDevMode ? [{ debugName: "triggerSearchPlaceholder" }] : /* istanbul ignore next */ []));
1341
2055
  this.popoverRef = viewChild(AXPopoverComponent, /* @ts-ignore */
1342
2056
  ...(ngDevMode ? [{ debugName: "popoverRef" }] : /* istanbul ignore next */ []));
2057
+ this.originRef = viewChild('origin', /* @ts-ignore */
2058
+ ...(ngDevMode ? [{ debugName: "originRef" }] : /* istanbul ignore next */ []));
2059
+ this.popupRef = viewChild('popup', /* @ts-ignore */
2060
+ ...(ngDevMode ? [{ debugName: "popupRef" }] : /* istanbul ignore next */ []));
1343
2061
  this.triggerSearchInput = viewChild('triggerSearchInput', /* @ts-ignore */
1344
2062
  ...(ngDevMode ? [{ debugName: "triggerSearchInput" }] : /* istanbul ignore next */ []));
2063
+ this.#document = inject(DOCUMENT);
1345
2064
  this.listView = viewChild(AXLookupListViewBase, /* @ts-ignore */
1346
2065
  ...(ngDevMode ? [{ debugName: "listView" }] : /* istanbul ignore next */ []));
2066
+ this.dropDownTreeView = viewChild(AXLookupDropDownTreeComponent, /* @ts-ignore */
2067
+ ...(ngDevMode ? [{ debugName: "dropDownTreeView" }] : /* istanbul ignore next */ []));
2068
+ this.multiSelectTreeView = viewChild(AXLookupMultiSelectTreeComponent, /* @ts-ignore */
2069
+ ...(ngDevMode ? [{ debugName: "multiSelectTreeView" }] : /* istanbul ignore next */ []));
2070
+ this.sheetSearchRef = viewChild('sheetSearch', /* @ts-ignore */
2071
+ ...(ngDevMode ? [{ debugName: "sheetSearchRef" }] : /* istanbul ignore next */ []));
1347
2072
  this.#itemsCache = new Map();
1348
2073
  this.#isUserInteraction = false;
1349
2074
  this.#lastValue = undefined;
@@ -1351,14 +2076,8 @@ class AXLookupComponent extends NXValueComponent {
1351
2076
  this.#resolveRevision = 0;
1352
2077
  this.#selectionInitialized = false;
1353
2078
  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 */ []));
2079
+ this.#searchEnterRevision = 0;
2080
+ this.#sheetSearchFocused = false;
1362
2081
  effect(() => this.#emitValueChanged(this.value()));
1363
2082
  effect(() => this.#emitOpenedOrClosed(this.expanded()));
1364
2083
  effect(() => {
@@ -1403,6 +2122,13 @@ class AXLookupComponent extends NXValueComponent {
1403
2122
  }
1404
2123
  });
1405
2124
  });
2125
+ afterRenderEffect(() => {
2126
+ if (!this.expanded()) {
2127
+ this.#sheetSearchFocused = false;
2128
+ return;
2129
+ }
2130
+ this.#tryFocusSheetSearch();
2131
+ });
1406
2132
  }
1407
2133
  #syncActionsheetStyle() {
1408
2134
  this.isActionsheetStyle.set(this.adaptivityEnabled() && this.#platform.is('SM'));
@@ -1432,7 +2158,7 @@ class AXLookupComponent extends NXValueComponent {
1432
2158
  if (!this.expanded()) {
1433
2159
  return;
1434
2160
  }
1435
- queueMicrotask(() => this.focusListFirst());
2161
+ queueMicrotask(() => this.#focusPopupSearchOrList());
1436
2162
  }
1437
2163
  /**
1438
2164
  * Focuses the lookup trigger input.
@@ -1445,6 +2171,8 @@ class AXLookupComponent extends NXValueComponent {
1445
2171
  }
1446
2172
  /**
1447
2173
  * Handles keyboard interaction on the trigger input.
2174
+ * In multi modes, Backspace with an empty trigger input removes the last chip; repeated presses
2175
+ * clear the whole selection.
1448
2176
  */
1449
2177
  onTriggerKeydown(e) {
1450
2178
  if (this.disabled() || this.readonly()) {
@@ -1454,19 +2182,193 @@ class AXLookupComponent extends NXValueComponent {
1454
2182
  this.close();
1455
2183
  return;
1456
2184
  }
2185
+ if (e.key === 'Backspace' && this.#removeLastChipOnBackspace(e)) {
2186
+ return;
2187
+ }
1457
2188
  if (e.key === 'ArrowDown') {
1458
2189
  e.preventDefault();
1459
2190
  this.expanded.set(true);
1460
- queueMicrotask(() => this.focusListFirst());
2191
+ queueMicrotask(() => this.#focusPopupSearchOrList());
2192
+ return;
2193
+ }
2194
+ if (e.key === 'Enter' && this.isEditableTrigger()) {
2195
+ this.#onSearchEnter(e);
1461
2196
  return;
1462
2197
  }
1463
2198
  if (!this.isEditableTrigger() && (e.key === 'Enter' || e.key === ' ')) {
1464
2199
  e.preventDefault();
1465
2200
  this.expanded.update((open) => !open);
1466
2201
  if (this.expanded()) {
1467
- queueMicrotask(() => this.focusListFirst());
2202
+ queueMicrotask(() => this.#focusPopupSearchOrList());
2203
+ }
2204
+ }
2205
+ }
2206
+ /** Filters the datasource from the actionsheet search field and handles Enter with no matches. */
2207
+ onSheetSearchKeydown(e) {
2208
+ const event = e.nativeEvent;
2209
+ if (!event || event.key !== 'Enter') {
2210
+ return;
2211
+ }
2212
+ this.#onSearchEnter(event);
2213
+ }
2214
+ /**
2215
+ * Enter in search never submits the surrounding form.
2216
+ * - No matches: single-select value is cleared (`null`).
2217
+ * - Exactly one match: that item is selected (no list navigation required).
2218
+ * - Multiple matches: nothing is selected.
2219
+ */
2220
+ #onSearchEnter(event) {
2221
+ event.preventDefault();
2222
+ event.stopPropagation();
2223
+ event.stopImmediatePropagation();
2224
+ void this.#commitOrClearFromSearch();
2225
+ }
2226
+ async #commitOrClearFromSearch() {
2227
+ const revision = ++this.#searchEnterRevision;
2228
+ this.#flushPendingFilter();
2229
+ if (this.#isTreeOnlySearchMode()) {
2230
+ const nodes = await this.#resolvedFilteredTreeNodes();
2231
+ if (revision !== this.#searchEnterRevision) {
2232
+ return;
2233
+ }
2234
+ const items = this.#enabledTreeItems(nodes);
2235
+ if (items.length === 0) {
2236
+ if (this.#currentSearchQuery() && !this.isMultiple()) {
2237
+ this.reset(true);
2238
+ this.close();
2239
+ }
2240
+ return;
2241
+ }
2242
+ if (items.length !== 1) {
2243
+ return;
2244
+ }
2245
+ this.#commitSearchSelection(items);
2246
+ return;
2247
+ }
2248
+ const source = this.resolvedDataSource();
2249
+ if (source.isLoading) {
2250
+ await this.#whenSourceIdle(source);
2251
+ if (revision !== this.#searchEnterRevision) {
2252
+ return;
2253
+ }
2254
+ }
2255
+ if (this.#hasNoSearchMatches()) {
2256
+ if (this.#currentSearchQuery() && !this.isMultiple()) {
2257
+ this.reset(true);
2258
+ this.close();
2259
+ }
2260
+ return;
2261
+ }
2262
+ if (this.#getSearchMatchCount() !== 1) {
2263
+ return;
2264
+ }
2265
+ const item = this.#pickFirstMatch();
2266
+ if (!item) {
2267
+ return;
2268
+ }
2269
+ this.#commitSearchSelection([item]);
2270
+ }
2271
+ #commitSearchSelection(items) {
2272
+ if (items.length === 0) {
2273
+ if (this.#currentSearchQuery() && !this.isMultiple()) {
2274
+ this.reset(true);
2275
+ this.close();
1468
2276
  }
2277
+ return;
2278
+ }
2279
+ if (!this.#isTypedFilterQuery()) {
2280
+ return;
2281
+ }
2282
+ const item = this.#pickFirstFromItems(items);
2283
+ if (!item) {
2284
+ return;
2285
+ }
2286
+ const event = { item, value: item[this.valueField()] };
2287
+ if (this.isMultiple()) {
2288
+ this.handleMultiToggle(event);
2289
+ }
2290
+ else {
2291
+ this.handleSinglePick(event);
2292
+ }
2293
+ }
2294
+ async #resolvedFilteredTreeNodes() {
2295
+ const source = this.resolvedTreeDataSource();
2296
+ if (Array.isArray(source)) {
2297
+ return source;
2298
+ }
2299
+ return (await source()) ?? [];
2300
+ }
2301
+ #enabledTreeItems(nodes) {
2302
+ const disabledField = this.disabledField();
2303
+ return flattenTreeNodes(nodes).filter((item) => !item[disabledField]);
2304
+ }
2305
+ #pickFirstMatch() {
2306
+ const disabledField = this.disabledField();
2307
+ const source = this.resolvedDataSource();
2308
+ const items = (source.cachedItems.length ? source.cachedItems : source.items).filter((item) => item != null && !item[disabledField]);
2309
+ return this.#pickFirstFromItems(items);
2310
+ }
2311
+ #pickFirstFromItems(items) {
2312
+ if (items.length === 0) {
2313
+ return null;
2314
+ }
2315
+ const query = this.#currentSearchQuery().toLowerCase();
2316
+ if (!query) {
2317
+ return items[0];
2318
+ }
2319
+ const textOf = (item) => String(item?.[this.textField()] ?? '').trim().toLowerCase();
2320
+ return items.find((item) => textOf(item) === query) ?? items.find((item) => textOf(item).includes(query)) ?? items[0];
2321
+ }
2322
+ #whenSourceIdle(source) {
2323
+ if (!source.isLoading) {
2324
+ return Promise.resolve();
2325
+ }
2326
+ return new Promise((resolve) => {
2327
+ const sub = source.onLoadingChanged.subscribe((loading) => {
2328
+ if (!loading) {
2329
+ sub.unsubscribe();
2330
+ resolve();
2331
+ }
2332
+ });
2333
+ });
2334
+ }
2335
+ #flushPendingFilter() {
2336
+ if (!this.#searchDebounce) {
2337
+ return;
2338
+ }
2339
+ clearTimeout(this.#searchDebounce);
2340
+ this.#searchDebounce = undefined;
2341
+ this.#applyFilterNow(this.#currentSearchQuery());
2342
+ }
2343
+ #currentSearchQuery() {
2344
+ if (this.isSheetSearchEnabled()) {
2345
+ return (this.sheetSearchText() || this.#sheetSearchInputValue()).trim();
2346
+ }
2347
+ return this.searchText().trim();
2348
+ }
2349
+ #isTypedFilterQuery() {
2350
+ const query = this.#currentSearchQuery();
2351
+ if (!query) {
2352
+ return false;
2353
+ }
2354
+ if (!this.isSheetSearchEnabled() && !this.isMultiple()) {
2355
+ return query.toLowerCase() !== this.displayText().trim().toLowerCase();
2356
+ }
2357
+ return true;
2358
+ }
2359
+ #hasNoSearchMatches() {
2360
+ return this.#getSearchMatchCount() === 0;
2361
+ }
2362
+ #getSearchMatchCount() {
2363
+ const list = this.listView();
2364
+ if (list) {
2365
+ return list.matchCount();
2366
+ }
2367
+ const source = this.resolvedDataSource();
2368
+ if (source.isLoading) {
2369
+ return -1;
1469
2370
  }
2371
+ return source.totalCount;
1470
2372
  }
1471
2373
  /** Blocks typing when the trigger is not editable (keeps Tab / keyboard open working). */
1472
2374
  onBeforeInput(event) {
@@ -1475,9 +2377,13 @@ class AXLookupComponent extends NXValueComponent {
1475
2377
  }
1476
2378
  }
1477
2379
  /**
1478
- * Returns focus to the trigger input when list navigation requests it.
2380
+ * Returns focus to the search field when list navigation requests it.
1479
2381
  */
1480
2382
  onListNavigateOut(_reason) {
2383
+ if (this.isSheetSearchEnabled()) {
2384
+ this.sheetSearchRef()?.focus();
2385
+ return;
2386
+ }
1481
2387
  this.triggerSearchInput()?.nativeElement.focus();
1482
2388
  }
1483
2389
  focusListFirst() {
@@ -1500,11 +2406,17 @@ class AXLookupComponent extends NXValueComponent {
1500
2406
  onPopoverClosed() {
1501
2407
  this.expanded.set(false);
1502
2408
  this.searchText.set(this.isMultiple() ? '' : this.displayText());
2409
+ this.sheetSearchText.set('');
2410
+ this.#appliedSearchQuery.set('');
2411
+ this.#treeFilterQuery.set('');
2412
+ this.#treeFilterEpoch.update((value) => value + 1);
1503
2413
  if (this.#filterApplied) {
1504
2414
  this.#filterApplied = false;
1505
- const source = this.resolvedDataSource();
1506
- source.clearFilter();
1507
- source.refresh();
2415
+ if (!this.#isTreeOnlySearchMode()) {
2416
+ const source = this.resolvedDataSource();
2417
+ source.clearFilter();
2418
+ source.refresh();
2419
+ }
1508
2420
  }
1509
2421
  }
1510
2422
  /**
@@ -1539,8 +2451,14 @@ class AXLookupComponent extends NXValueComponent {
1539
2451
  this.expanded.set(true);
1540
2452
  this.#applyFilterDebounced(text);
1541
2453
  }
2454
+ /** Filters the datasource from the actionsheet search field (reads the input so delayed ngModel cannot block typing). */
2455
+ onSheetSearchInput() {
2456
+ const query = this.#sheetSearchInputValue();
2457
+ this.sheetSearchText.set(query);
2458
+ this.#applyFilterDebounced(query);
2459
+ }
1542
2460
  /**
1543
- * Commits a single pick (drop-down-list, drop-down-tree, multi-column) and closes the popup.
2461
+ * Commits a single pick (drop-down-list, drop-down-tree, multi-column, multi-column-tree) and closes the popup.
1544
2462
  */
1545
2463
  handleSinglePick(e) {
1546
2464
  this.#emitItemClick(e.item);
@@ -1567,7 +2485,10 @@ class AXLookupComponent extends NXValueComponent {
1567
2485
  const next = exists ? current.filter((v) => !(v == e.value)) : [...current, e.value];
1568
2486
  this.#isUserInteraction = true;
1569
2487
  this.value.set(next);
1570
- if (this.isEditableTrigger() && this.searchText()) {
2488
+ if (this.isSheetSearchEnabled() && this.sheetSearchText()) {
2489
+ this.#clearSheetSearch();
2490
+ }
2491
+ else if (this.isEditableTrigger() && this.searchText()) {
1571
2492
  this.searchText.set('');
1572
2493
  this.#applyFilterDebounced('');
1573
2494
  }
@@ -1586,6 +2507,13 @@ class AXLookupComponent extends NXValueComponent {
1586
2507
  }
1587
2508
  this.#isUserInteraction = true;
1588
2509
  this.value.set([...e.ids]);
2510
+ if (this.isSheetSearchEnabled() && this.sheetSearchText()) {
2511
+ this.#clearSheetSearch();
2512
+ }
2513
+ else if (this.isEditableTrigger() && this.searchText()) {
2514
+ this.searchText.set('');
2515
+ this.#applyFilterDebounced('');
2516
+ }
1589
2517
  }
1590
2518
  /** Forwards native focus from the trigger input. */
1591
2519
  emitOnFocus(e) {
@@ -1602,6 +2530,38 @@ class AXLookupComponent extends NXValueComponent {
1602
2530
  htmlElement: this.nativeElement,
1603
2531
  nativeEvent: e,
1604
2532
  });
2533
+ this.#scheduleCloseOnTriggerBlur(e);
2534
+ }
2535
+ /**
2536
+ * Closes the popup when the trigger input loses focus, unless focus moved into the
2537
+ * popover panel or another part of the trigger (e.g. sheet search or list navigation).
2538
+ */
2539
+ #scheduleCloseOnTriggerBlur(e) {
2540
+ if (!this.expanded()) {
2541
+ return;
2542
+ }
2543
+ const related = e.relatedTarget;
2544
+ if (related instanceof Node && this.#isFocusWithinPopupOrTrigger(related)) {
2545
+ return;
2546
+ }
2547
+ queueMicrotask(() => {
2548
+ if (!this.expanded()) {
2549
+ return;
2550
+ }
2551
+ const active = this.#document.activeElement;
2552
+ if (active instanceof Node && this.#isFocusWithinPopupOrTrigger(active)) {
2553
+ return;
2554
+ }
2555
+ this.close();
2556
+ });
2557
+ }
2558
+ #isFocusWithinPopupOrTrigger(node) {
2559
+ const popup = this.popupRef()?.nativeElement;
2560
+ if (popup?.contains(node)) {
2561
+ return true;
2562
+ }
2563
+ const origin = this.originRef()?.nativeElement;
2564
+ return Boolean(origin?.contains(node));
1605
2565
  }
1606
2566
  #emitItemClick(item) {
1607
2567
  this.onItemClick.emit({
@@ -1631,6 +2591,24 @@ class AXLookupComponent extends NXValueComponent {
1631
2591
  this.#isUserInteraction = true;
1632
2592
  this.value.set(this.selectedValues().filter((v) => !(v == value)));
1633
2593
  }
2594
+ /** Removes the last chip when Backspace is pressed with an empty trigger input (multi modes). */
2595
+ #removeLastChipOnBackspace(event) {
2596
+ if (!this.isMultiple() || !this.#isTriggerInputEmpty(event)) {
2597
+ return false;
2598
+ }
2599
+ const items = this.selectedItems();
2600
+ if (items.length === 0) {
2601
+ return false;
2602
+ }
2603
+ event.preventDefault();
2604
+ event.stopPropagation();
2605
+ this.removeChip(event, items[items.length - 1]);
2606
+ return true;
2607
+ }
2608
+ #isTriggerInputEmpty(event) {
2609
+ const input = event.target instanceof HTMLInputElement ? event.target : this.triggerSearchInput()?.nativeElement;
2610
+ return input ? input.value.length === 0 : !this.searchText();
2611
+ }
1634
2612
  /**
1635
2613
  * Seeds the item cache with known items so matching `value` keys resolve without `byKey`.
1636
2614
  * Useful after an async parent-entity load when `valueItems` is not bound.
@@ -1663,26 +2641,130 @@ class AXLookupComponent extends NXValueComponent {
1663
2641
  }
1664
2642
  this.#isUserInteraction = isUserInteraction;
1665
2643
  this.value.set(next);
1666
- if (this.isEditableTrigger() && this.searchText()) {
2644
+ if (this.isSheetSearchEnabled() && this.sheetSearchText()) {
2645
+ this.#clearSheetSearch();
2646
+ }
2647
+ else if (this.isEditableTrigger() && this.searchText()) {
1667
2648
  this.searchText.set('');
1668
2649
  this.#applyFilterDebounced('');
1669
2650
  }
1670
2651
  }
2652
+ #clearSheetSearch() {
2653
+ this.sheetSearchText.set('');
2654
+ this.sheetSearchRef()?.commitValue('', false);
2655
+ this.#applyFilterDebounced('');
2656
+ }
2657
+ #sheetSearchInputValue() {
2658
+ return this.sheetSearchRef()?.getHostElement()?.querySelector('input')?.value ?? '';
2659
+ }
2660
+ #tryFocusSheetSearch() {
2661
+ if (!this.isSheetSearchEnabled() || this.#sheetSearchFocused) {
2662
+ return;
2663
+ }
2664
+ const search = this.sheetSearchRef();
2665
+ if (!search) {
2666
+ return;
2667
+ }
2668
+ this.#sheetSearchFocused = true;
2669
+ search.focus();
2670
+ }
2671
+ #focusPopupSearchOrList() {
2672
+ if (this.isSheetSearchEnabled()) {
2673
+ this.#tryFocusSheetSearch();
2674
+ return;
2675
+ }
2676
+ this.focusListFirst();
2677
+ }
2678
+ #loadCachedTreeNodes(source, nodeId) {
2679
+ let byParent = this.#treeChildrenCache.get(source);
2680
+ if (!byParent) {
2681
+ byParent = new Map();
2682
+ this.#treeChildrenCache.set(source, byParent);
2683
+ }
2684
+ const key = nodeId ?? '';
2685
+ const cached = byParent.get(key);
2686
+ if (cached) {
2687
+ return cached;
2688
+ }
2689
+ const request = Promise.resolve(source(nodeId)).then((nodes) => nodes ?? [], (error) => {
2690
+ byParent.delete(key);
2691
+ throw error;
2692
+ });
2693
+ byParent.set(key, request);
2694
+ return request;
2695
+ }
2696
+ #nodeMayHaveChildren(node) {
2697
+ const raw = node['children'];
2698
+ if (Array.isArray(raw) && raw.length > 0) {
2699
+ return true;
2700
+ }
2701
+ const count = node['childrenCount'];
2702
+ if (typeof count === 'number' && count > 0) {
2703
+ return true;
2704
+ }
2705
+ return node['hasChild'] === true || node['hasChildren'] === true;
2706
+ }
2707
+ /**
2708
+ * Builds a nested tree for search by loading lazy children (using the existing cache)
2709
+ * so a query can match sub-items that have not been expanded yet.
2710
+ */
2711
+ async #hydrateTreeChildrenForSearch(source, nodes, visited = new Set()) {
2712
+ const valueField = this.valueField();
2713
+ return Promise.all(nodes.map(async (node) => {
2714
+ const raw = node['children'];
2715
+ const nested = Array.isArray(raw) && raw.length > 0 ? raw : undefined;
2716
+ if (nested) {
2717
+ const children = await this.#hydrateTreeChildrenForSearch(source, nested, visited);
2718
+ return { ...node, children };
2719
+ }
2720
+ const id = String(node[valueField] ?? '');
2721
+ if (!id || !this.#nodeMayHaveChildren(node) || visited.has(id)) {
2722
+ return node;
2723
+ }
2724
+ visited.add(id);
2725
+ const loaded = await this.#loadCachedTreeNodes(source, id);
2726
+ const children = await this.#hydrateTreeChildrenForSearch(source, loaded, visited);
2727
+ return { ...node, children };
2728
+ }));
2729
+ }
2730
+ async #loadFilteredCachedTreeNodes(source, nodeId, query) {
2731
+ const nodes = await this.#loadCachedTreeNodes(source, nodeId);
2732
+ const hydrated = await this.#hydrateTreeChildrenForSearch(source, nodes);
2733
+ return filterTreeNodes(hydrated, this.textField(), query);
2734
+ }
2735
+ #applyFilterNow(text) {
2736
+ const query = text?.trim() ?? '';
2737
+ this.#appliedSearchQuery.set(query);
2738
+ if (this.#isTreeOnlySearchMode()) {
2739
+ this.#treeFilterQuery.set(query);
2740
+ this.#treeFilterEpoch.update((value) => value + 1);
2741
+ this.#filterApplied = query.length > 0;
2742
+ return;
2743
+ }
2744
+ const source = this.resolvedDataSource();
2745
+ if (query) {
2746
+ source.filter({ field: this.textField(), value: query, operator: { type: 'contains' } });
2747
+ this.#filterApplied = true;
2748
+ }
2749
+ else {
2750
+ source.clearFilter();
2751
+ }
2752
+ source.refresh();
2753
+ }
1671
2754
  #applyFilterDebounced(text) {
1672
2755
  if (this.#searchDebounce) {
1673
2756
  clearTimeout(this.#searchDebounce);
2757
+ this.#searchDebounce = undefined;
2758
+ }
2759
+ const query = text?.trim() ?? '';
2760
+ // Restore the full tree immediately when the query is cleared.
2761
+ if (!query) {
2762
+ this.#applyFilterNow('');
2763
+ return;
1674
2764
  }
1675
2765
  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();
2766
+ this.#searchDebounce = undefined;
2767
+ this.#applyFilterNow(text);
1686
2768
  }, 300);
1687
2769
  }
1688
2770
  async #resolveSelectedItems(values) {
@@ -1698,7 +2780,7 @@ class AXLookupComponent extends NXValueComponent {
1698
2780
  component: this,
1699
2781
  htmlElement: this.nativeElement,
1700
2782
  isUserInteraction: this.#isUserInteraction,
1701
- items,
2783
+ items: items,
1702
2784
  value: this.value(),
1703
2785
  });
1704
2786
  }
@@ -1810,12 +2892,12 @@ class AXLookupComponent extends NXValueComponent {
1810
2892
  expanded ? this.onOpened.emit(event) : this.onClosed.emit(event);
1811
2893
  }
1812
2894
  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: [
2895
+ 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
2896
  { provide: AXComponent, useExisting: AXLookupComponent },
1815
2897
  { provide: AXClearableComponent, useExisting: AXLookupComponent },
1816
2898
  { provide: AXClosableComponent, useExisting: AXLookupComponent },
1817
2899
  { 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 }); }
2900
+ ], 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
2901
  }
1820
2902
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupComponent, decorators: [{
1821
2903
  type: Component,
@@ -1823,21 +2905,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
1823
2905
  NgTemplateOutlet,
1824
2906
  AsyncPipe,
1825
2907
  AXTranslatorPipe,
2908
+ AXButtonComponent,
1826
2909
  AXChipsComponent,
1827
2910
  AXDecoratorModule,
1828
2911
  AXPopoverComponent,
2912
+ AXSearchBoxComponent,
1829
2913
  AXLookupDropDownListComponent,
1830
2914
  AXLookupMultiSelectComponent,
1831
2915
  AXLookupDropDownTreeComponent,
1832
2916
  AXLookupMultiSelectTreeComponent,
1833
2917
  AXLookupMultiColumnComponent,
2918
+ AXLookupMultiColumnTreeComponent,
1834
2919
  ], providers: [
1835
2920
  { provide: AXComponent, useExisting: AXLookupComponent },
1836
2921
  { provide: AXClearableComponent, useExisting: AXLookupComponent },
1837
2922
  { provide: AXClosableComponent, useExisting: AXLookupComponent },
1838
2923
  { 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 }] }] } });
2924
+ ], 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"] }]
2925
+ }], 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
2926
 
1842
2927
  class AXLookupModule {
1843
2928
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
@@ -1846,18 +2931,21 @@ class AXLookupModule {
1846
2931
  AXLookupMultiSelectComponent,
1847
2932
  AXLookupDropDownTreeComponent,
1848
2933
  AXLookupMultiSelectTreeComponent,
1849
- AXLookupMultiColumnComponent], exports: [AXLookupComponent,
2934
+ AXLookupMultiColumnComponent,
2935
+ AXLookupMultiColumnTreeComponent], exports: [AXLookupComponent,
1850
2936
  AXLookupDropDownListComponent,
1851
2937
  AXLookupMultiSelectComponent,
1852
2938
  AXLookupDropDownTreeComponent,
1853
2939
  AXLookupMultiSelectTreeComponent,
1854
- AXLookupMultiColumnComponent] }); }
2940
+ AXLookupMultiColumnComponent,
2941
+ AXLookupMultiColumnTreeComponent] }); }
1855
2942
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupModule, imports: [AXLookupComponent,
1856
2943
  AXLookupDropDownListComponent,
1857
2944
  AXLookupMultiSelectComponent,
1858
2945
  AXLookupDropDownTreeComponent,
1859
2946
  AXLookupMultiSelectTreeComponent,
1860
- AXLookupMultiColumnComponent] }); }
2947
+ AXLookupMultiColumnComponent,
2948
+ AXLookupMultiColumnTreeComponent] }); }
1861
2949
  }
1862
2950
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupModule, decorators: [{
1863
2951
  type: NgModule,
@@ -1869,6 +2957,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
1869
2957
  AXLookupDropDownTreeComponent,
1870
2958
  AXLookupMultiSelectTreeComponent,
1871
2959
  AXLookupMultiColumnComponent,
2960
+ AXLookupMultiColumnTreeComponent,
1872
2961
  ],
1873
2962
  exports: [
1874
2963
  AXLookupComponent,
@@ -1877,6 +2966,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
1877
2966
  AXLookupDropDownTreeComponent,
1878
2967
  AXLookupMultiSelectTreeComponent,
1879
2968
  AXLookupMultiColumnComponent,
2969
+ AXLookupMultiColumnTreeComponent,
1880
2970
  ],
1881
2971
  }]
1882
2972
  }] });
@@ -1885,5 +2975,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
1885
2975
  * Generated bundle index. Do not edit.
1886
2976
  */
1887
2977
 
1888
- export { AXLookupComponent, AXLookupDropDownListComponent, AXLookupDropDownTreeComponent, AXLookupModule, AXLookupMultiColumnComponent, AXLookupMultiSelectComponent, AXLookupMultiSelectTreeComponent };
2978
+ export { AXLookupComponent, AXLookupDropDownListComponent, AXLookupDropDownTreeComponent, AXLookupModule, AXLookupMultiColumnComponent, AXLookupMultiColumnTreeComponent, AXLookupMultiSelectComponent, AXLookupMultiSelectTreeComponent };
1889
2979
  //# sourceMappingURL=acorex-components-lookup.mjs.map