@acorex/components 22.0.0-next.32 → 22.0.0-next.34

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.
@@ -0,0 +1,1279 @@
1
+ import { AXListDataSource, NXComponent, convertArrayToDataSource, AXComponent } from '@acorex/cdk/common';
2
+ import { AXPopoverComponent } from '@acorex/components/popover';
3
+ import * as i0 from '@angular/core';
4
+ import { input, output, signal, computed, viewChild, inject, NgZone, effect, untracked, Directive, ViewEncapsulation, ChangeDetectionStrategy, Component, model, linkedSignal, NgModule } from '@angular/core';
5
+ import { NgTemplateOutlet, AsyncPipe } from '@angular/common';
6
+ import { AXTranslatorPipe } from '@acorex/core/translation';
7
+ import * as i1 from '@angular/cdk/scrolling';
8
+ import { CdkVirtualScrollViewport, ScrollingModule } from '@angular/cdk/scrolling';
9
+ import { AXTreeViewComponent } from '@acorex/components/tree-view';
10
+
11
+ /**
12
+ * Shared `AXDataSource` + CDK virtual scroll plumbing for the list-based lookup views
13
+ * (`ax-lookup-drop-down-list`, `ax-lookup-multi-select`, `ax-lookup-multi-column`).
14
+ */
15
+ class AXLookupListViewBase {
16
+ #ngZone;
17
+ constructor() {
18
+ /**
19
+ * The datasource providing the items (paged, remote-capable).
20
+ */
21
+ this.dataSource = input.required(/* @ts-ignore */
22
+ ...(ngDevMode ? [{ debugName: "dataSource" }] : /* istanbul ignore next */ []));
23
+ /**
24
+ * The item property used as the selection value.
25
+ */
26
+ this.valueField = input('id', /* @ts-ignore */
27
+ ...(ngDevMode ? [{ debugName: "valueField" }] : /* istanbul ignore next */ []));
28
+ /**
29
+ * The item property used as the display text.
30
+ */
31
+ this.textField = input('text', /* @ts-ignore */
32
+ ...(ngDevMode ? [{ debugName: "textField" }] : /* istanbul ignore next */ []));
33
+ /**
34
+ * The item property marking an item as disabled.
35
+ */
36
+ this.disabledField = input('disabled', /* @ts-ignore */
37
+ ...(ngDevMode ? [{ debugName: "disabledField" }] : /* istanbul ignore next */ []));
38
+ /**
39
+ * Currently selected values (always an array, even for single selection).
40
+ */
41
+ this.selectedValues = input([], /* @ts-ignore */
42
+ ...(ngDevMode ? [{ debugName: "selectedValues" }] : /* istanbul ignore next */ []));
43
+ /**
44
+ * The fixed row height in pixels used by the virtual scroll viewport.
45
+ */
46
+ this.itemHeight = input(40, /* @ts-ignore */
47
+ ...(ngDevMode ? [{ debugName: "itemHeight" }] : /* istanbul ignore next */ []));
48
+ /**
49
+ * The maximum number of rows visible before the popup scrolls.
50
+ */
51
+ this.maxVisibleItems = input(8, /* @ts-ignore */
52
+ ...(ngDevMode ? [{ debugName: "maxVisibleItems" }] : /* istanbul ignore next */ []));
53
+ /**
54
+ * Custom template rendered for each item. Context: `$implicit` is the item.
55
+ */
56
+ this.itemTemplate = input(undefined, /* @ts-ignore */
57
+ ...(ngDevMode ? [{ debugName: "itemTemplate" }] : /* istanbul ignore next */ []));
58
+ /**
59
+ * Custom template rendered when the datasource has no items.
60
+ */
61
+ this.emptyTemplate = input(undefined, /* @ts-ignore */
62
+ ...(ngDevMode ? [{ debugName: "emptyTemplate" }] : /* istanbul ignore next */ []));
63
+ /**
64
+ * Custom template rendered for rows whose page is still loading.
65
+ */
66
+ this.loadingTemplate = input(undefined, /* @ts-ignore */
67
+ ...(ngDevMode ? [{ debugName: "loadingTemplate" }] : /* istanbul ignore next */ []));
68
+ /**
69
+ * Emitted when the user picks (or toggles) an item.
70
+ */
71
+ this.itemClick = output();
72
+ /** CDK virtual scroll adapter over the datasource. */
73
+ this.listDataSource = signal(null, /* @ts-ignore */
74
+ ...(ngDevMode ? [{ debugName: "listDataSource" }] : /* istanbul ignore next */ []));
75
+ this.totalCount = signal(0, /* @ts-ignore */
76
+ ...(ngDevMode ? [{ debugName: "totalCount" }] : /* istanbul ignore next */ []));
77
+ this.isLoading = signal(true, /* @ts-ignore */
78
+ ...(ngDevMode ? [{ debugName: "isLoading" }] : /* istanbul ignore next */ []));
79
+ this.isEmpty = computed(() => this.totalCount() === 0 && !this.isLoading(), /* @ts-ignore */
80
+ ...(ngDevMode ? [{ debugName: "isEmpty" }] : /* istanbul ignore next */ []));
81
+ /** Viewport height so the popup grows with the items up to `maxVisibleItems`. */
82
+ this.viewportHeight = computed(() => {
83
+ const count = this.totalCount() || (this.isLoading() ? 3 : 1);
84
+ return Math.min(count, this.maxVisibleItems()) * this.itemHeight();
85
+ }, /* @ts-ignore */
86
+ ...(ngDevMode ? [{ debugName: "viewportHeight" }] : /* istanbul ignore next */ []));
87
+ this.viewportRef = viewChild(CdkVirtualScrollViewport, /* @ts-ignore */
88
+ ...(ngDevMode ? [{ debugName: "viewportRef" }] : /* istanbul ignore next */ []));
89
+ this.#ngZone = inject(NgZone);
90
+ this.trackByIndex = (index) => index;
91
+ // CDK measures the viewport size only once, when it initializes. Inside the popover the
92
+ // panel is still animating/positioning at that moment (and the height also changes when
93
+ // the loading placeholder is replaced by the real item count), so the measurement is stale
94
+ // and CDK renders too few rows, leaving empty space. A ResizeObserver on the viewport
95
+ // element re-measures on every actual size change, covering all of these cases.
96
+ effect((onCleanup) => {
97
+ const viewport = this.viewportRef();
98
+ if (!viewport || typeof ResizeObserver === 'undefined') {
99
+ return;
100
+ }
101
+ const observer = new ResizeObserver(() => {
102
+ this.#ngZone.run(() => viewport.checkViewportSize());
103
+ });
104
+ observer.observe(viewport.elementRef.nativeElement);
105
+ onCleanup(() => observer.disconnect());
106
+ });
107
+ effect((onCleanup) => {
108
+ const source = this.dataSource();
109
+ const list = new AXListDataSource({ source });
110
+ untracked(() => {
111
+ this.totalCount.set(source.totalCount);
112
+ this.isLoading.set(source.totalCount > 0 ? source.isLoading : true);
113
+ this.listDataSource.set(list);
114
+ });
115
+ const loadingSub = source.onLoadingChanged.subscribe((value) => this.isLoading.set(value));
116
+ const changedSub = source.onChanged.subscribe((e) => this.totalCount.set(e.totalCount));
117
+ onCleanup(() => {
118
+ loadingSub.unsubscribe();
119
+ changedSub.unsubscribe();
120
+ });
121
+ });
122
+ }
123
+ getValue(item) {
124
+ return item?.[this.valueField()];
125
+ }
126
+ getText(item) {
127
+ return String(item?.[this.textField()] ?? '');
128
+ }
129
+ isSelected(item) {
130
+ const value = this.getValue(item);
131
+ return this.selectedValues().some((v) => v == value);
132
+ }
133
+ isDisabled(item) {
134
+ return Boolean(item?.[this.disabledField()]);
135
+ }
136
+ handleItemClick(item) {
137
+ if (!item || this.isDisabled(item)) {
138
+ return;
139
+ }
140
+ this.itemClick.emit({ item, value: this.getValue(item) });
141
+ }
142
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupListViewBase, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
143
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "22.0.8", type: AXLookupListViewBase, isStandalone: true, inputs: { dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: true, transformFunction: null }, valueField: { classPropertyName: "valueField", publicName: "valueField", isSignal: true, isRequired: false, transformFunction: null }, textField: { classPropertyName: "textField", publicName: "textField", isSignal: true, isRequired: false, transformFunction: null }, disabledField: { classPropertyName: "disabledField", publicName: "disabledField", isSignal: true, isRequired: false, transformFunction: null }, selectedValues: { classPropertyName: "selectedValues", publicName: "selectedValues", isSignal: true, isRequired: false, transformFunction: null }, itemHeight: { classPropertyName: "itemHeight", publicName: "itemHeight", isSignal: true, isRequired: false, transformFunction: null }, maxVisibleItems: { classPropertyName: "maxVisibleItems", publicName: "maxVisibleItems", isSignal: true, isRequired: false, transformFunction: null }, itemTemplate: { classPropertyName: "itemTemplate", publicName: "itemTemplate", isSignal: true, isRequired: false, transformFunction: null }, emptyTemplate: { classPropertyName: "emptyTemplate", publicName: "emptyTemplate", isSignal: true, isRequired: false, transformFunction: null }, loadingTemplate: { classPropertyName: "loadingTemplate", publicName: "loadingTemplate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemClick: "itemClick" }, viewQueries: [{ propertyName: "viewportRef", first: true, predicate: CdkVirtualScrollViewport, descendants: true, isSignal: true }], ngImport: i0 }); }
144
+ }
145
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupListViewBase, decorators: [{
146
+ type: Directive
147
+ }], ctorParameters: () => [], propDecorators: { dataSource: [{ type: i0.Input, args: [{ isSignal: true, alias: "dataSource", required: true }] }], valueField: [{ type: i0.Input, args: [{ isSignal: true, alias: "valueField", required: false }] }], textField: [{ type: i0.Input, args: [{ isSignal: true, alias: "textField", required: false }] }], disabledField: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabledField", required: false }] }], selectedValues: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedValues", required: false }] }], itemHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemHeight", required: false }] }], maxVisibleItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxVisibleItems", required: false }] }], itemTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemTemplate", required: false }] }], emptyTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "emptyTemplate", required: false }] }], loadingTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "loadingTemplate", required: false }] }], itemClick: [{ type: i0.Output, args: ["itemClick"] }], viewportRef: [{ type: i0.ViewChild, args: [i0.forwardRef(() => CdkVirtualScrollViewport), { isSignal: true }] }] } });
148
+
149
+ /**
150
+ * Internal mini component for the `drop-down-list` lookup mode:
151
+ * a predefined, virtualized list of options for picking single values.
152
+ *
153
+ * @category Components
154
+ */
155
+ class AXLookupDropDownListComponent extends AXLookupListViewBase {
156
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupDropDownListComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
157
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXLookupDropDownListComponent, isStandalone: true, selector: "ax-lookup-drop-down-list", usesInheritance: true, ngImport: i0, template: `
158
+ @if (isEmpty()) {
159
+ <div class="ax-lookup-empty">
160
+ @if (emptyTemplate()) {
161
+ <ng-container [ngTemplateOutlet]="emptyTemplate()!" />
162
+ } @else {
163
+ {{ '@acorex:common.general.no-result-found' | translate | async }}
164
+ }
165
+ </div>
166
+ } @else {
167
+ <cdk-virtual-scroll-viewport
168
+ class="ax-lookup-viewport"
169
+ role="listbox"
170
+ [itemSize]="itemHeight()"
171
+ [style.height.px]="viewportHeight()"
172
+ >
173
+ <div
174
+ *cdkVirtualFor="let item of listDataSource(); trackBy: trackByIndex"
175
+ role="option"
176
+ class="ax-lookup-option"
177
+ [style.height.px]="itemHeight()"
178
+ [class.ax-state-selected]="item != null && isSelected(item)"
179
+ [class.ax-state-disabled]="item != null && isDisabled(item)"
180
+ [attr.aria-selected]="item != null ? isSelected(item) : null"
181
+ (click)="handleItemClick(item)"
182
+ >
183
+ @if (item != null) {
184
+ @if (itemTemplate()) {
185
+ <ng-container [ngTemplateOutlet]="itemTemplate()!" [ngTemplateOutletContext]="{ $implicit: item }" />
186
+ } @else {
187
+ <span class="ax-lookup-option-text">{{ getText(item) }}</span>
188
+ <span class="ax-lookup-option-check" aria-hidden="true"></span>
189
+ }
190
+ } @else {
191
+ <ng-container [ngTemplateOutlet]="loadingRow" />
192
+ }
193
+ </div>
194
+ </cdk-virtual-scroll-viewport>
195
+ }
196
+
197
+ <ng-template #loadingRow>
198
+ @if (loadingTemplate()) {
199
+ <ng-container [ngTemplateOutlet]="loadingTemplate()!" />
200
+ } @else {
201
+ <span class="ax-lookup-option-loading">{{ '@acorex:common.status.loading' | translate | async }}</span>
202
+ }
203
+ </ng-template>
204
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i1.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i1.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i1.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
205
+ }
206
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupDropDownListComponent, decorators: [{
207
+ type: Component,
208
+ args: [{
209
+ selector: 'ax-lookup-drop-down-list',
210
+ changeDetection: ChangeDetectionStrategy.OnPush,
211
+ encapsulation: ViewEncapsulation.None,
212
+ imports: [ScrollingModule, NgTemplateOutlet, AXTranslatorPipe, AsyncPipe],
213
+ template: `
214
+ @if (isEmpty()) {
215
+ <div class="ax-lookup-empty">
216
+ @if (emptyTemplate()) {
217
+ <ng-container [ngTemplateOutlet]="emptyTemplate()!" />
218
+ } @else {
219
+ {{ '@acorex:common.general.no-result-found' | translate | async }}
220
+ }
221
+ </div>
222
+ } @else {
223
+ <cdk-virtual-scroll-viewport
224
+ class="ax-lookup-viewport"
225
+ role="listbox"
226
+ [itemSize]="itemHeight()"
227
+ [style.height.px]="viewportHeight()"
228
+ >
229
+ <div
230
+ *cdkVirtualFor="let item of listDataSource(); trackBy: trackByIndex"
231
+ role="option"
232
+ class="ax-lookup-option"
233
+ [style.height.px]="itemHeight()"
234
+ [class.ax-state-selected]="item != null && isSelected(item)"
235
+ [class.ax-state-disabled]="item != null && isDisabled(item)"
236
+ [attr.aria-selected]="item != null ? isSelected(item) : null"
237
+ (click)="handleItemClick(item)"
238
+ >
239
+ @if (item != null) {
240
+ @if (itemTemplate()) {
241
+ <ng-container [ngTemplateOutlet]="itemTemplate()!" [ngTemplateOutletContext]="{ $implicit: item }" />
242
+ } @else {
243
+ <span class="ax-lookup-option-text">{{ getText(item) }}</span>
244
+ <span class="ax-lookup-option-check" aria-hidden="true"></span>
245
+ }
246
+ } @else {
247
+ <ng-container [ngTemplateOutlet]="loadingRow" />
248
+ }
249
+ </div>
250
+ </cdk-virtual-scroll-viewport>
251
+ }
252
+
253
+ <ng-template #loadingRow>
254
+ @if (loadingTemplate()) {
255
+ <ng-container [ngTemplateOutlet]="loadingTemplate()!" />
256
+ } @else {
257
+ <span class="ax-lookup-option-loading">{{ '@acorex:common.status.loading' | translate | async }}</span>
258
+ }
259
+ </ng-template>
260
+ `,
261
+ }]
262
+ }] });
263
+
264
+ /**
265
+ * Internal mini component for the `drop-down-tree` lookup mode:
266
+ * a predefined list rendered in a tree-like structure for single item selection.
267
+ *
268
+ * @category Components
269
+ */
270
+ class AXLookupDropDownTreeComponent {
271
+ constructor() {
272
+ /**
273
+ * The tree datasource: an array of nodes or a lazy children callback.
274
+ */
275
+ this.dataSource = input.required(/* @ts-ignore */
276
+ ...(ngDevMode ? [{ debugName: "dataSource" }] : /* istanbul ignore next */ []));
277
+ /**
278
+ * The node property used as the selection value (tree `idField`).
279
+ */
280
+ this.valueField = input('id', /* @ts-ignore */
281
+ ...(ngDevMode ? [{ debugName: "valueField" }] : /* istanbul ignore next */ []));
282
+ /**
283
+ * The node property used as the display text (tree `titleField`).
284
+ */
285
+ this.textField = input('title', /* @ts-ignore */
286
+ ...(ngDevMode ? [{ debugName: "textField" }] : /* istanbul ignore next */ []));
287
+ /**
288
+ * The node property marking a node as disabled.
289
+ */
290
+ this.disabledField = input('disabled', /* @ts-ignore */
291
+ ...(ngDevMode ? [{ debugName: "disabledField" }] : /* istanbul ignore next */ []));
292
+ /**
293
+ * Currently selected values (at most one for single selection).
294
+ */
295
+ this.selectedValues = input([], /* @ts-ignore */
296
+ ...(ngDevMode ? [{ debugName: "selectedValues" }] : /* istanbul ignore next */ []));
297
+ /**
298
+ * Custom template rendered for each tree node.
299
+ */
300
+ this.nodeTemplate = input(undefined, /* @ts-ignore */
301
+ ...(ngDevMode ? [{ debugName: "nodeTemplate" }] : /* istanbul ignore next */ []));
302
+ /**
303
+ * Emitted when the user selects a node.
304
+ */
305
+ this.itemClick = output();
306
+ this.selectedIds = computed(() => this.selectedValues().map((v) => String(v)), /* @ts-ignore */
307
+ ...(ngDevMode ? [{ debugName: "selectedIds" }] : /* istanbul ignore next */ []));
308
+ }
309
+ handleSelectionChange(e) {
310
+ if (e.source !== 'user') {
311
+ return;
312
+ }
313
+ const node = e.selectedNodes[0];
314
+ if (!node) {
315
+ return;
316
+ }
317
+ this.itemClick.emit({ item: node, value: node[this.valueField()] });
318
+ }
319
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupDropDownTreeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
320
+ 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: `
321
+ <div class="ax-lookup-tree">
322
+ <ax-tree-view
323
+ [datasource]="dataSource()"
324
+ selectMode="single"
325
+ selectionBehavior="all"
326
+ [controlledSelection]="true"
327
+ [selectedIds]="selectedIds()"
328
+ [idField]="valueField()"
329
+ [titleField]="textField()"
330
+ [disabledField]="disabledField()"
331
+ [nodeTemplate]="nodeTemplate()"
332
+ (onSelectionChange)="handleSelectionChange($event)"
333
+ />
334
+ </div>
335
+ `, 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 }); }
336
+ }
337
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupDropDownTreeComponent, decorators: [{
338
+ type: Component,
339
+ args: [{
340
+ selector: 'ax-lookup-drop-down-tree',
341
+ changeDetection: ChangeDetectionStrategy.OnPush,
342
+ encapsulation: ViewEncapsulation.None,
343
+ imports: [AXTreeViewComponent],
344
+ template: `
345
+ <div class="ax-lookup-tree">
346
+ <ax-tree-view
347
+ [datasource]="dataSource()"
348
+ selectMode="single"
349
+ selectionBehavior="all"
350
+ [controlledSelection]="true"
351
+ [selectedIds]="selectedIds()"
352
+ [idField]="valueField()"
353
+ [titleField]="textField()"
354
+ [disabledField]="disabledField()"
355
+ [nodeTemplate]="nodeTemplate()"
356
+ (onSelectionChange)="handleSelectionChange($event)"
357
+ />
358
+ </div>
359
+ `,
360
+ }]
361
+ }], 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"] }] } });
362
+
363
+ /**
364
+ * Internal mini component for the `multi-column` lookup mode:
365
+ * a table-structured, virtualized list with a sticky header row.
366
+ *
367
+ * @category Components
368
+ */
369
+ class AXLookupMultiColumnComponent extends AXLookupListViewBase {
370
+ constructor() {
371
+ super(...arguments);
372
+ /**
373
+ * Column definitions rendered as a sticky header plus one grid cell per row.
374
+ */
375
+ this.columns = input([], /* @ts-ignore */
376
+ ...(ngDevMode ? [{ debugName: "columns" }] : /* istanbul ignore next */ []));
377
+ /** CSS grid track list built from the column widths. */
378
+ this.gridTemplate = computed(() => this.columns()
379
+ .map((column) => column.width ?? '1fr')
380
+ .join(' '), /* @ts-ignore */
381
+ ...(ngDevMode ? [{ debugName: "gridTemplate" }] : /* istanbul ignore next */ []));
382
+ }
383
+ getCellText(item, column) {
384
+ return String(item?.[column.field] ?? '');
385
+ }
386
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupMultiColumnComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
387
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXLookupMultiColumnComponent, isStandalone: true, selector: "ax-lookup-multi-column", inputs: { columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: `
388
+ @if (isEmpty()) {
389
+ <div class="ax-lookup-empty">
390
+ @if (emptyTemplate()) {
391
+ <ng-container [ngTemplateOutlet]="emptyTemplate()!" />
392
+ } @else {
393
+ {{ '@acorex:common.general.no-result-found' | translate | async }}
394
+ }
395
+ </div>
396
+ } @else {
397
+ <div class="ax-lookup-column-header" role="row" [style.grid-template-columns]="gridTemplate()">
398
+ @for (column of columns(); track column.field) {
399
+ <span class="ax-lookup-column-header-cell" role="columnheader">{{ column.title }}</span>
400
+ }
401
+ </div>
402
+ <cdk-virtual-scroll-viewport
403
+ class="ax-lookup-viewport"
404
+ role="listbox"
405
+ [itemSize]="itemHeight()"
406
+ [style.height.px]="viewportHeight()"
407
+ >
408
+ <div
409
+ *cdkVirtualFor="let item of listDataSource(); trackBy: trackByIndex"
410
+ role="option"
411
+ class="ax-lookup-option ax-lookup-column-row"
412
+ [style.height.px]="itemHeight()"
413
+ [style.grid-template-columns]="gridTemplate()"
414
+ [class.ax-state-selected]="item != null && isSelected(item)"
415
+ [class.ax-state-disabled]="item != null && isDisabled(item)"
416
+ [attr.aria-selected]="item != null ? isSelected(item) : null"
417
+ (click)="handleItemClick(item)"
418
+ >
419
+ @if (item != null) {
420
+ @if (itemTemplate()) {
421
+ <ng-container [ngTemplateOutlet]="itemTemplate()!" [ngTemplateOutletContext]="{ $implicit: item }" />
422
+ } @else {
423
+ @for (column of columns(); track column.field) {
424
+ <span class="ax-lookup-column-cell">{{ getCellText(item, column) }}</span>
425
+ }
426
+ }
427
+ } @else {
428
+ <ng-container [ngTemplateOutlet]="loadingRow" />
429
+ }
430
+ </div>
431
+ </cdk-virtual-scroll-viewport>
432
+ }
433
+
434
+ <ng-template #loadingRow>
435
+ @if (loadingTemplate()) {
436
+ <ng-container [ngTemplateOutlet]="loadingTemplate()!" />
437
+ } @else {
438
+ <span class="ax-lookup-option-loading">{{ '@acorex:common.status.loading' | translate | async }}</span>
439
+ }
440
+ </ng-template>
441
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i1.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i1.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i1.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
442
+ }
443
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupMultiColumnComponent, decorators: [{
444
+ type: Component,
445
+ args: [{
446
+ selector: 'ax-lookup-multi-column',
447
+ changeDetection: ChangeDetectionStrategy.OnPush,
448
+ encapsulation: ViewEncapsulation.None,
449
+ imports: [ScrollingModule, NgTemplateOutlet, AXTranslatorPipe, AsyncPipe],
450
+ template: `
451
+ @if (isEmpty()) {
452
+ <div class="ax-lookup-empty">
453
+ @if (emptyTemplate()) {
454
+ <ng-container [ngTemplateOutlet]="emptyTemplate()!" />
455
+ } @else {
456
+ {{ '@acorex:common.general.no-result-found' | translate | async }}
457
+ }
458
+ </div>
459
+ } @else {
460
+ <div class="ax-lookup-column-header" role="row" [style.grid-template-columns]="gridTemplate()">
461
+ @for (column of columns(); track column.field) {
462
+ <span class="ax-lookup-column-header-cell" role="columnheader">{{ column.title }}</span>
463
+ }
464
+ </div>
465
+ <cdk-virtual-scroll-viewport
466
+ class="ax-lookup-viewport"
467
+ role="listbox"
468
+ [itemSize]="itemHeight()"
469
+ [style.height.px]="viewportHeight()"
470
+ >
471
+ <div
472
+ *cdkVirtualFor="let item of listDataSource(); trackBy: trackByIndex"
473
+ role="option"
474
+ class="ax-lookup-option ax-lookup-column-row"
475
+ [style.height.px]="itemHeight()"
476
+ [style.grid-template-columns]="gridTemplate()"
477
+ [class.ax-state-selected]="item != null && isSelected(item)"
478
+ [class.ax-state-disabled]="item != null && isDisabled(item)"
479
+ [attr.aria-selected]="item != null ? isSelected(item) : null"
480
+ (click)="handleItemClick(item)"
481
+ >
482
+ @if (item != null) {
483
+ @if (itemTemplate()) {
484
+ <ng-container [ngTemplateOutlet]="itemTemplate()!" [ngTemplateOutletContext]="{ $implicit: item }" />
485
+ } @else {
486
+ @for (column of columns(); track column.field) {
487
+ <span class="ax-lookup-column-cell">{{ getCellText(item, column) }}</span>
488
+ }
489
+ }
490
+ } @else {
491
+ <ng-container [ngTemplateOutlet]="loadingRow" />
492
+ }
493
+ </div>
494
+ </cdk-virtual-scroll-viewport>
495
+ }
496
+
497
+ <ng-template #loadingRow>
498
+ @if (loadingTemplate()) {
499
+ <ng-container [ngTemplateOutlet]="loadingTemplate()!" />
500
+ } @else {
501
+ <span class="ax-lookup-option-loading">{{ '@acorex:common.status.loading' | translate | async }}</span>
502
+ }
503
+ </ng-template>
504
+ `,
505
+ }]
506
+ }], propDecorators: { columns: [{ type: i0.Input, args: [{ isSignal: true, alias: "columns", required: false }] }] } });
507
+
508
+ /**
509
+ * Internal mini component for the `multi-select-tree` lookup mode:
510
+ * a predefined list rendered in a tree-like structure for multiple item selection.
511
+ *
512
+ * @category Components
513
+ */
514
+ class AXLookupMultiSelectTreeComponent {
515
+ constructor() {
516
+ /**
517
+ * The tree datasource: an array of nodes or a lazy children callback.
518
+ */
519
+ this.dataSource = input.required(/* @ts-ignore */
520
+ ...(ngDevMode ? [{ debugName: "dataSource" }] : /* istanbul ignore next */ []));
521
+ /**
522
+ * The node property used as the selection value (tree `idField`).
523
+ */
524
+ this.valueField = input('id', /* @ts-ignore */
525
+ ...(ngDevMode ? [{ debugName: "valueField" }] : /* istanbul ignore next */ []));
526
+ /**
527
+ * The node property used as the display text (tree `titleField`).
528
+ */
529
+ this.textField = input('title', /* @ts-ignore */
530
+ ...(ngDevMode ? [{ debugName: "textField" }] : /* istanbul ignore next */ []));
531
+ /**
532
+ * The node property marking a node as disabled.
533
+ */
534
+ this.disabledField = input('disabled', /* @ts-ignore */
535
+ ...(ngDevMode ? [{ debugName: "disabledField" }] : /* istanbul ignore next */ []));
536
+ /**
537
+ * Currently selected values.
538
+ */
539
+ this.selectedValues = input([], /* @ts-ignore */
540
+ ...(ngDevMode ? [{ debugName: "selectedValues" }] : /* istanbul ignore next */ []));
541
+ /**
542
+ * How selecting parent/child nodes affects each other. Passed through to the tree-view.
543
+ */
544
+ this.selectionBehavior = input('all', /* @ts-ignore */
545
+ ...(ngDevMode ? [{ debugName: "selectionBehavior" }] : /* istanbul ignore next */ []));
546
+ /**
547
+ * Custom template rendered for each tree node.
548
+ */
549
+ this.nodeTemplate = input(undefined, /* @ts-ignore */
550
+ ...(ngDevMode ? [{ debugName: "nodeTemplate" }] : /* istanbul ignore next */ []));
551
+ /**
552
+ * Emitted when the user changes the tree selection.
553
+ */
554
+ this.selectionChange = output();
555
+ this.selectedIds = computed(() => this.selectedValues().map((v) => String(v)), /* @ts-ignore */
556
+ ...(ngDevMode ? [{ debugName: "selectedIds" }] : /* istanbul ignore next */ []));
557
+ }
558
+ handleSelectionChange(e) {
559
+ if (e.source !== 'user') {
560
+ return;
561
+ }
562
+ this.selectionChange.emit({ ids: e.selectedIds, nodes: e.selectedNodes });
563
+ }
564
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupMultiSelectTreeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
565
+ 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: `
566
+ <div class="ax-lookup-tree">
567
+ <ax-tree-view
568
+ [datasource]="dataSource()"
569
+ selectMode="multiple"
570
+ [selectionBehavior]="selectionBehavior()"
571
+ [controlledSelection]="true"
572
+ [selectedIds]="selectedIds()"
573
+ [idField]="valueField()"
574
+ [titleField]="textField()"
575
+ [disabledField]="disabledField()"
576
+ [nodeTemplate]="nodeTemplate()"
577
+ (onSelectionChange)="handleSelectionChange($event)"
578
+ />
579
+ </div>
580
+ `, 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 }); }
581
+ }
582
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupMultiSelectTreeComponent, decorators: [{
583
+ type: Component,
584
+ args: [{
585
+ selector: 'ax-lookup-multi-select-tree',
586
+ changeDetection: ChangeDetectionStrategy.OnPush,
587
+ encapsulation: ViewEncapsulation.None,
588
+ imports: [AXTreeViewComponent],
589
+ template: `
590
+ <div class="ax-lookup-tree">
591
+ <ax-tree-view
592
+ [datasource]="dataSource()"
593
+ selectMode="multiple"
594
+ [selectionBehavior]="selectionBehavior()"
595
+ [controlledSelection]="true"
596
+ [selectedIds]="selectedIds()"
597
+ [idField]="valueField()"
598
+ [titleField]="textField()"
599
+ [disabledField]="disabledField()"
600
+ [nodeTemplate]="nodeTemplate()"
601
+ (onSelectionChange)="handleSelectionChange($event)"
602
+ />
603
+ </div>
604
+ `,
605
+ }]
606
+ }], 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"] }] } });
607
+
608
+ /**
609
+ * Internal mini component for the `multi-select` lookup mode:
610
+ * a predefined, virtualized list of options with checkboxes for multiple item selection.
611
+ *
612
+ * @category Components
613
+ */
614
+ class AXLookupMultiSelectComponent extends AXLookupListViewBase {
615
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupMultiSelectComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
616
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXLookupMultiSelectComponent, isStandalone: true, selector: "ax-lookup-multi-select", usesInheritance: true, ngImport: i0, template: `
617
+ @if (isEmpty()) {
618
+ <div class="ax-lookup-empty">
619
+ @if (emptyTemplate()) {
620
+ <ng-container [ngTemplateOutlet]="emptyTemplate()!" />
621
+ } @else {
622
+ {{ '@acorex:common.general.no-result-found' | translate | async }}
623
+ }
624
+ </div>
625
+ } @else {
626
+ <cdk-virtual-scroll-viewport
627
+ class="ax-lookup-viewport"
628
+ role="listbox"
629
+ aria-multiselectable="true"
630
+ [itemSize]="itemHeight()"
631
+ [style.height.px]="viewportHeight()"
632
+ >
633
+ <div
634
+ *cdkVirtualFor="let item of listDataSource(); trackBy: trackByIndex"
635
+ role="option"
636
+ class="ax-lookup-option"
637
+ [style.height.px]="itemHeight()"
638
+ [class.ax-state-selected]="item != null && isSelected(item)"
639
+ [class.ax-state-disabled]="item != null && isDisabled(item)"
640
+ [attr.aria-selected]="item != null ? isSelected(item) : null"
641
+ (click)="handleItemClick(item)"
642
+ >
643
+ @if (item != null) {
644
+ <input
645
+ type="checkbox"
646
+ class="ax-lookup-checkbox"
647
+ tabindex="-1"
648
+ [checked]="isSelected(item)"
649
+ [disabled]="isDisabled(item)"
650
+ />
651
+ @if (itemTemplate()) {
652
+ <ng-container [ngTemplateOutlet]="itemTemplate()!" [ngTemplateOutletContext]="{ $implicit: item }" />
653
+ } @else {
654
+ <span class="ax-lookup-option-text">{{ getText(item) }}</span>
655
+ }
656
+ } @else {
657
+ <ng-container [ngTemplateOutlet]="loadingRow" />
658
+ }
659
+ </div>
660
+ </cdk-virtual-scroll-viewport>
661
+ }
662
+
663
+ <ng-template #loadingRow>
664
+ @if (loadingTemplate()) {
665
+ <ng-container [ngTemplateOutlet]="loadingTemplate()!" />
666
+ } @else {
667
+ <span class="ax-lookup-option-loading">{{ '@acorex:common.status.loading' | translate | async }}</span>
668
+ }
669
+ </ng-template>
670
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i1.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i1.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i1.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
671
+ }
672
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupMultiSelectComponent, decorators: [{
673
+ type: Component,
674
+ args: [{
675
+ selector: 'ax-lookup-multi-select',
676
+ changeDetection: ChangeDetectionStrategy.OnPush,
677
+ encapsulation: ViewEncapsulation.None,
678
+ imports: [ScrollingModule, NgTemplateOutlet, AXTranslatorPipe, AsyncPipe],
679
+ template: `
680
+ @if (isEmpty()) {
681
+ <div class="ax-lookup-empty">
682
+ @if (emptyTemplate()) {
683
+ <ng-container [ngTemplateOutlet]="emptyTemplate()!" />
684
+ } @else {
685
+ {{ '@acorex:common.general.no-result-found' | translate | async }}
686
+ }
687
+ </div>
688
+ } @else {
689
+ <cdk-virtual-scroll-viewport
690
+ class="ax-lookup-viewport"
691
+ role="listbox"
692
+ aria-multiselectable="true"
693
+ [itemSize]="itemHeight()"
694
+ [style.height.px]="viewportHeight()"
695
+ >
696
+ <div
697
+ *cdkVirtualFor="let item of listDataSource(); trackBy: trackByIndex"
698
+ role="option"
699
+ class="ax-lookup-option"
700
+ [style.height.px]="itemHeight()"
701
+ [class.ax-state-selected]="item != null && isSelected(item)"
702
+ [class.ax-state-disabled]="item != null && isDisabled(item)"
703
+ [attr.aria-selected]="item != null ? isSelected(item) : null"
704
+ (click)="handleItemClick(item)"
705
+ >
706
+ @if (item != null) {
707
+ <input
708
+ type="checkbox"
709
+ class="ax-lookup-checkbox"
710
+ tabindex="-1"
711
+ [checked]="isSelected(item)"
712
+ [disabled]="isDisabled(item)"
713
+ />
714
+ @if (itemTemplate()) {
715
+ <ng-container [ngTemplateOutlet]="itemTemplate()!" [ngTemplateOutletContext]="{ $implicit: item }" />
716
+ } @else {
717
+ <span class="ax-lookup-option-text">{{ getText(item) }}</span>
718
+ }
719
+ } @else {
720
+ <ng-container [ngTemplateOutlet]="loadingRow" />
721
+ }
722
+ </div>
723
+ </cdk-virtual-scroll-viewport>
724
+ }
725
+
726
+ <ng-template #loadingRow>
727
+ @if (loadingTemplate()) {
728
+ <ng-container [ngTemplateOutlet]="loadingTemplate()!" />
729
+ } @else {
730
+ <span class="ax-lookup-option-loading">{{ '@acorex:common.status.loading' | translate | async }}</span>
731
+ }
732
+ </ng-template>
733
+ `,
734
+ }]
735
+ }] });
736
+
737
+ /**
738
+ * An advanced drop-down (lookup) editor with five modes, `AXDataSource` support, and virtual scrolling.
739
+ *
740
+ * Modes (each rendered by its own internal mini component):
741
+ * - `drop-down-list` — a predefined list of options for picking single values.
742
+ * - `multi-select` — a predefined list of options for multiple item selection (chips in the trigger).
743
+ * - `drop-down-tree` — a predefined list rendered in a tree-like structure for single item selection.
744
+ * - `multi-select-tree` — a tree-like structure for multiple item selection.
745
+ * - `multi-column` — a table-structured list with an editable typeahead input.
746
+ *
747
+ * @category Components
748
+ */
749
+ class AXLookupComponent extends NXComponent {
750
+ #itemsCache;
751
+ #isUserInteraction;
752
+ #lastValue;
753
+ #lastExpanded;
754
+ #resolveRevision;
755
+ #selectionInitialized;
756
+ #filterApplied;
757
+ #searchDebounce;
758
+ constructor() {
759
+ super();
760
+ /**
761
+ * The lookup rendering mode. Selects which mini component renders in the popup.
762
+ */
763
+ this.mode = input('drop-down-list', /* @ts-ignore */
764
+ ...(ngDevMode ? [{ debugName: "mode" }] : /* istanbul ignore next */ []));
765
+ /**
766
+ * The items source for list-based modes (`drop-down-list`, `multi-select`, `multi-column`).
767
+ * Accepts an `AXDataSource` (remote paging, `byKey`, server-side filter) or a plain array.
768
+ */
769
+ this.dataSource = input(undefined, /* @ts-ignore */
770
+ ...(ngDevMode ? [{ debugName: "dataSource" }] : /* istanbul ignore next */ []));
771
+ /**
772
+ * The nodes source for tree modes (`drop-down-tree`, `multi-select-tree`):
773
+ * an array of nodes or a lazy children callback.
774
+ */
775
+ this.treeDataSource = input(undefined, /* @ts-ignore */
776
+ ...(ngDevMode ? [{ debugName: "treeDataSource" }] : /* istanbul ignore next */ []));
777
+ /**
778
+ * The item property used as the selection value. Maps to the tree `idField` in tree modes.
779
+ */
780
+ this.valueField = input('id', /* @ts-ignore */
781
+ ...(ngDevMode ? [{ debugName: "valueField" }] : /* istanbul ignore next */ []));
782
+ /**
783
+ * The item property used as the display text. Maps to the tree `titleField` in tree modes
784
+ * (set it to `title` when your nodes use the default tree shape).
785
+ */
786
+ this.textField = input('text', /* @ts-ignore */
787
+ ...(ngDevMode ? [{ debugName: "textField" }] : /* istanbul ignore next */ []));
788
+ /**
789
+ * The item property marking an item as disabled.
790
+ */
791
+ this.disabledField = input('disabled', /* @ts-ignore */
792
+ ...(ngDevMode ? [{ debugName: "disabledField" }] : /* istanbul ignore next */ []));
793
+ /**
794
+ * Column definitions for the `multi-column` mode.
795
+ */
796
+ this.columns = input([], /* @ts-ignore */
797
+ ...(ngDevMode ? [{ debugName: "columns" }] : /* istanbul ignore next */ []));
798
+ /**
799
+ * Whether typed text filters the datasource. Shows a search box inside the popup for
800
+ * `drop-down-list` / `multi-select`; in `multi-column` mode the trigger input itself filters.
801
+ */
802
+ this.searchable = input(true, /* @ts-ignore */
803
+ ...(ngDevMode ? [{ debugName: "searchable" }] : /* istanbul ignore next */ []));
804
+ /**
805
+ * The placeholder of the popup search box.
806
+ */
807
+ this.searchPlaceholder = input('Search...', /* @ts-ignore */
808
+ ...(ngDevMode ? [{ debugName: "searchPlaceholder" }] : /* istanbul ignore next */ []));
809
+ /**
810
+ * The placeholder text shown when no value is selected.
811
+ */
812
+ this.placeholder = input('', /* @ts-ignore */
813
+ ...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
814
+ /**
815
+ * Whether the lookup is disabled.
816
+ */
817
+ this.disabled = model(false, /* @ts-ignore */
818
+ ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
819
+ /**
820
+ * Whether the lookup is readonly.
821
+ */
822
+ this.readonly = model(false, /* @ts-ignore */
823
+ ...(ngDevMode ? [{ debugName: "readonly" }] : /* istanbul ignore next */ []));
824
+ /**
825
+ * Predefined look scheme of the editor container. Same looks as other editor components like ax-text-box.
826
+ */
827
+ this.look = model('solid', /* @ts-ignore */
828
+ ...(ngDevMode ? [{ debugName: "look" }] : /* istanbul ignore next */ []));
829
+ /**
830
+ * The fixed row height in pixels used by the virtual scroll viewport (list-based modes).
831
+ */
832
+ this.itemHeight = input(40, /* @ts-ignore */
833
+ ...(ngDevMode ? [{ debugName: "itemHeight" }] : /* istanbul ignore next */ []));
834
+ /**
835
+ * The maximum number of rows visible before the popup scrolls (list-based modes).
836
+ */
837
+ this.maxVisibleItems = input(8, /* @ts-ignore */
838
+ ...(ngDevMode ? [{ debugName: "maxVisibleItems" }] : /* istanbul ignore next */ []));
839
+ /**
840
+ * How selecting parent/child nodes affects each other in `multi-select-tree` mode.
841
+ */
842
+ this.treeSelectionBehavior = input('all', /* @ts-ignore */
843
+ ...(ngDevMode ? [{ debugName: "treeSelectionBehavior" }] : /* istanbul ignore next */ []));
844
+ /**
845
+ * Custom template rendered for each item/node. Context: `$implicit` is the item.
846
+ */
847
+ this.itemTemplate = input(undefined, /* @ts-ignore */
848
+ ...(ngDevMode ? [{ debugName: "itemTemplate" }] : /* istanbul ignore next */ []));
849
+ /**
850
+ * Custom template for the selected item display (trigger text / chips). Context: `$implicit` is the item.
851
+ */
852
+ this.selectedTemplate = input(undefined, /* @ts-ignore */
853
+ ...(ngDevMode ? [{ debugName: "selectedTemplate" }] : /* istanbul ignore next */ []));
854
+ /**
855
+ * Custom template rendered when the datasource has no items.
856
+ */
857
+ this.emptyTemplate = input(undefined, /* @ts-ignore */
858
+ ...(ngDevMode ? [{ debugName: "emptyTemplate" }] : /* istanbul ignore next */ []));
859
+ /**
860
+ * Custom template rendered for rows whose page is still loading.
861
+ */
862
+ this.loadingTemplate = input(undefined, /* @ts-ignore */
863
+ ...(ngDevMode ? [{ debugName: "loadingTemplate" }] : /* istanbul ignore next */ []));
864
+ /**
865
+ * The selected value(s): a scalar in single modes, an array in
866
+ * `multi-select` / `multi-select-tree`. Supports two-way binding.
867
+ */
868
+ this.value = model(null, /* @ts-ignore */
869
+ ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
870
+ /**
871
+ * Emitted when the selected value changes.
872
+ */
873
+ this.onValueChanged = output();
874
+ /**
875
+ * Emitted when the selection changes, carrying the resolved selected items.
876
+ */
877
+ this.onSelectionChanged = output();
878
+ /**
879
+ * Emitted when the popup opens.
880
+ */
881
+ this.onOpened = output();
882
+ /**
883
+ * Emitted when the popup closes.
884
+ */
885
+ this.onClosed = output();
886
+ /** Whether the popup is expanded. */
887
+ this.expanded = signal(false, /* @ts-ignore */
888
+ ...(ngDevMode ? [{ debugName: "expanded" }] : /* istanbul ignore next */ []));
889
+ /** Whether the current mode selects multiple values. */
890
+ this.isMultiple = computed(() => this.mode() === 'multi-select' || this.mode() === 'multi-select-tree', /* @ts-ignore */
891
+ ...(ngDevMode ? [{ debugName: "isMultiple" }] : /* istanbul ignore next */ []));
892
+ /** Whether the current mode renders a tree. */
893
+ this.isTreeMode = computed(() => this.mode() === 'drop-down-tree' || this.mode() === 'multi-select-tree', /* @ts-ignore */
894
+ ...(ngDevMode ? [{ debugName: "isTreeMode" }] : /* istanbul ignore next */ []));
895
+ /** Whether the trigger input is editable (multi-column typeahead). */
896
+ this.isEditableTrigger = computed(() => this.mode() === 'multi-column' && this.searchable() && !this.readonly(), /* @ts-ignore */
897
+ ...(ngDevMode ? [{ debugName: "isEditableTrigger" }] : /* istanbul ignore next */ []));
898
+ /** Whether the popup shows a search box row. */
899
+ this.showPopupSearch = computed(() => this.searchable() && (this.mode() === 'drop-down-list' || this.mode() === 'multi-select'), /* @ts-ignore */
900
+ ...(ngDevMode ? [{ debugName: "showPopupSearch" }] : /* istanbul ignore next */ []));
901
+ /** The datasource for list-based modes; plain arrays are converted. */
902
+ this.resolvedDataSource = computed(() => {
903
+ const source = this.dataSource();
904
+ if (!source) {
905
+ return convertArrayToDataSource([], { key: this.valueField(), pageSize: 20 });
906
+ }
907
+ return Array.isArray(source)
908
+ ? convertArrayToDataSource(source, { key: this.valueField(), pageSize: 20 })
909
+ : source;
910
+ }, /* @ts-ignore */
911
+ ...(ngDevMode ? [{ debugName: "resolvedDataSource" }] : /* istanbul ignore next */ []));
912
+ /** The current selection normalized to an array. */
913
+ this.selectedValues = computed(() => {
914
+ const value = this.value();
915
+ if (value == null) {
916
+ return [];
917
+ }
918
+ return Array.isArray(value) ? value : [value];
919
+ }, /* @ts-ignore */
920
+ ...(ngDevMode ? [{ debugName: "selectedValues" }] : /* istanbul ignore next */ []));
921
+ /** The resolved selected items (via cache, datasource `find`/`byKey`, or tree node lookup). */
922
+ this.selectedItems = signal([], /* @ts-ignore */
923
+ ...(ngDevMode ? [{ debugName: "selectedItems" }] : /* istanbul ignore next */ []));
924
+ /** Display text shown in the trigger for single modes. */
925
+ this.displayText = computed(() => {
926
+ const item = this.selectedItems()[0];
927
+ return item ? this.getItemText(item) : '';
928
+ }, /* @ts-ignore */
929
+ ...(ngDevMode ? [{ debugName: "displayText" }] : /* istanbul ignore next */ []));
930
+ /** The text typed in the editable (multi-column) trigger input. */
931
+ this.searchText = linkedSignal(() => this.displayText(), /* @ts-ignore */
932
+ ...(ngDevMode ? [{ debugName: "searchText" }] : /* istanbul ignore next */ []));
933
+ /** The text typed in the popup search box. */
934
+ this.popupSearchText = signal('', /* @ts-ignore */
935
+ ...(ngDevMode ? [{ debugName: "popupSearchText" }] : /* istanbul ignore next */ []));
936
+ this.popoverRef = viewChild(AXPopoverComponent, /* @ts-ignore */
937
+ ...(ngDevMode ? [{ debugName: "popoverRef" }] : /* istanbul ignore next */ []));
938
+ this.#itemsCache = new Map();
939
+ this.#isUserInteraction = false;
940
+ this.#lastValue = undefined;
941
+ this.#lastExpanded = undefined;
942
+ this.#resolveRevision = 0;
943
+ this.#selectionInitialized = false;
944
+ this.#filterApplied = false;
945
+ effect(() => this.#emitValueChanged(this.value()));
946
+ effect(() => this.#emitOpenedOrClosed(this.expanded()));
947
+ // Resolve selected items whenever the value (or the sources) change.
948
+ effect(() => {
949
+ const values = this.selectedValues();
950
+ this.mode();
951
+ this.dataSource();
952
+ this.treeDataSource();
953
+ untracked(() => void this.#resolveSelectedItems(values));
954
+ });
955
+ // Keep the popover in sync with the expanded state.
956
+ effect(() => {
957
+ const expanded = this.expanded();
958
+ const popover = this.popoverRef();
959
+ if (!popover) {
960
+ return;
961
+ }
962
+ untracked(() => {
963
+ if (expanded && !popover.isOpen) {
964
+ void popover.open();
965
+ }
966
+ else if (!expanded && popover.isOpen) {
967
+ popover.close();
968
+ }
969
+ });
970
+ });
971
+ }
972
+ /** Returns the display text of an item using the `textField` mapping. */
973
+ getItemText(item) {
974
+ return String(item?.[this.textField()] ?? '');
975
+ }
976
+ /**
977
+ * Opens (editable trigger) or toggles the popup on trigger click.
978
+ */
979
+ onTriggerClick() {
980
+ if (this.disabled() || this.readonly()) {
981
+ return;
982
+ }
983
+ if (this.isEditableTrigger()) {
984
+ this.expanded.set(true);
985
+ return;
986
+ }
987
+ this.expanded.update((open) => !open);
988
+ }
989
+ /**
990
+ * Keeps the expanded state in sync when the popover closes (e.g. click outside),
991
+ * and clears any applied search filter.
992
+ */
993
+ onPopoverClosed() {
994
+ this.expanded.set(false);
995
+ this.popupSearchText.set('');
996
+ this.searchText.set(this.displayText());
997
+ if (this.#filterApplied) {
998
+ this.#filterApplied = false;
999
+ const source = this.resolvedDataSource();
1000
+ source.clearFilter();
1001
+ source.refresh();
1002
+ }
1003
+ }
1004
+ /**
1005
+ * Closes the popup.
1006
+ */
1007
+ close() {
1008
+ this.expanded.set(false);
1009
+ }
1010
+ /**
1011
+ * Opens the popup.
1012
+ */
1013
+ open() {
1014
+ if (this.disabled() || this.readonly()) {
1015
+ return;
1016
+ }
1017
+ this.expanded.set(true);
1018
+ }
1019
+ /**
1020
+ * Handles typing in the editable (multi-column) trigger input.
1021
+ */
1022
+ onTriggerSearchInput(text) {
1023
+ this.searchText.set(text);
1024
+ this.expanded.set(true);
1025
+ this.#applyFilterDebounced(text);
1026
+ }
1027
+ /**
1028
+ * Handles typing in the popup search box.
1029
+ */
1030
+ onPopupSearchInput(text) {
1031
+ this.popupSearchText.set(text);
1032
+ this.#applyFilterDebounced(text);
1033
+ }
1034
+ /**
1035
+ * Commits a single pick (drop-down-list, drop-down-tree, multi-column) and closes the popup.
1036
+ */
1037
+ handleSinglePick(e) {
1038
+ this.#itemsCache.set(e.value, e.item);
1039
+ if (!this.#valuesEqual(e.value, this.value())) {
1040
+ this.#isUserInteraction = true;
1041
+ this.value.set(e.value);
1042
+ }
1043
+ this.close();
1044
+ }
1045
+ /**
1046
+ * Toggles an item in the multi-select list; the popup stays open.
1047
+ */
1048
+ handleMultiToggle(e) {
1049
+ this.#itemsCache.set(e.value, e.item);
1050
+ const current = this.selectedValues();
1051
+ const exists = current.some((v) => v == e.value);
1052
+ const next = exists ? current.filter((v) => !(v == e.value)) : [...current, e.value];
1053
+ this.#isUserInteraction = true;
1054
+ this.value.set(next);
1055
+ }
1056
+ /**
1057
+ * Applies the multi-select-tree selection to the value; the popup stays open.
1058
+ */
1059
+ handleTreeSelectionChange(e) {
1060
+ for (const node of e.nodes) {
1061
+ this.#itemsCache.set(String(node[this.valueField()]), node);
1062
+ }
1063
+ this.#isUserInteraction = true;
1064
+ this.value.set([...e.ids]);
1065
+ }
1066
+ /**
1067
+ * Removes a single chip from the multi selection.
1068
+ */
1069
+ removeChip(event, item) {
1070
+ event.stopPropagation();
1071
+ if (this.disabled() || this.readonly()) {
1072
+ return;
1073
+ }
1074
+ const value = item?.[this.valueField()];
1075
+ this.#isUserInteraction = true;
1076
+ this.value.set(this.selectedValues().filter((v) => !(v == value)));
1077
+ }
1078
+ /**
1079
+ * Clears the whole selection.
1080
+ */
1081
+ clearAll(event) {
1082
+ event.stopPropagation();
1083
+ if (this.disabled() || this.readonly()) {
1084
+ return;
1085
+ }
1086
+ this.#isUserInteraction = true;
1087
+ this.value.set(this.isMultiple() ? [] : null);
1088
+ }
1089
+ #applyFilterDebounced(text) {
1090
+ if (this.#searchDebounce) {
1091
+ clearTimeout(this.#searchDebounce);
1092
+ }
1093
+ this.#searchDebounce = setTimeout(() => {
1094
+ const source = this.resolvedDataSource();
1095
+ const query = text?.trim() ?? '';
1096
+ if (query) {
1097
+ source.filter({ field: this.textField(), value: query, operator: { type: 'contains' } });
1098
+ this.#filterApplied = true;
1099
+ }
1100
+ else {
1101
+ source.clearFilter();
1102
+ }
1103
+ source.refresh();
1104
+ }, 300);
1105
+ }
1106
+ async #resolveSelectedItems(values) {
1107
+ const revision = ++this.#resolveRevision;
1108
+ const resolved = await Promise.all(values.map((value) => Promise.resolve(this.#resolveItem(value))));
1109
+ if (revision !== this.#resolveRevision) {
1110
+ return;
1111
+ }
1112
+ const items = resolved.filter((item) => item != null);
1113
+ this.selectedItems.set(items);
1114
+ if (this.#selectionInitialized) {
1115
+ this.onSelectionChanged.emit({
1116
+ component: this,
1117
+ htmlElement: this.nativeElement,
1118
+ isUserInteraction: this.#isUserInteraction,
1119
+ items,
1120
+ value: this.value(),
1121
+ });
1122
+ }
1123
+ this.#selectionInitialized = true;
1124
+ }
1125
+ #resolveItem(value) {
1126
+ const cached = this.#itemsCache.get(value) ?? this.#itemsCache.get(String(value));
1127
+ if (cached) {
1128
+ return cached;
1129
+ }
1130
+ if (this.isTreeMode()) {
1131
+ const nodes = this.treeDataSource();
1132
+ if (Array.isArray(nodes)) {
1133
+ const found = this.#findTreeNode(nodes, value);
1134
+ if (found) {
1135
+ this.#itemsCache.set(value, found);
1136
+ return found;
1137
+ }
1138
+ }
1139
+ return this.#fallbackItem(value);
1140
+ }
1141
+ const source = this.resolvedDataSource();
1142
+ const result = source.find(value);
1143
+ if (result == null) {
1144
+ return this.#fallbackItem(value);
1145
+ }
1146
+ if (result instanceof Promise) {
1147
+ return result.then((item) => {
1148
+ if (item) {
1149
+ this.#itemsCache.set(value, item);
1150
+ return item;
1151
+ }
1152
+ return this.#fallbackItem(value);
1153
+ });
1154
+ }
1155
+ this.#itemsCache.set(value, result);
1156
+ return result;
1157
+ }
1158
+ #fallbackItem(value) {
1159
+ return { [this.valueField()]: value, [this.textField()]: String(value) };
1160
+ }
1161
+ #findTreeNode(nodes, value) {
1162
+ for (const node of nodes) {
1163
+ if (String(node[this.valueField()]) === String(value)) {
1164
+ return node;
1165
+ }
1166
+ const children = node['children'];
1167
+ if (Array.isArray(children)) {
1168
+ const found = this.#findTreeNode(children, value);
1169
+ if (found) {
1170
+ return found;
1171
+ }
1172
+ }
1173
+ }
1174
+ return null;
1175
+ }
1176
+ #valuesEqual(a, b) {
1177
+ if (a === b) {
1178
+ return true;
1179
+ }
1180
+ if (Array.isArray(a) && Array.isArray(b)) {
1181
+ return a.length === b.length && a.every((item, index) => item == b[index]);
1182
+ }
1183
+ return false;
1184
+ }
1185
+ /** Emits onValueChanged when the value actually changes (skips the initial value). */
1186
+ #emitValueChanged(value) {
1187
+ const previous = this.#lastValue;
1188
+ this.#lastValue = value;
1189
+ if (previous === undefined || this.#valuesEqual(previous, value)) {
1190
+ return;
1191
+ }
1192
+ this.onValueChanged.emit({
1193
+ component: this,
1194
+ htmlElement: this.nativeElement,
1195
+ name: 'value',
1196
+ value,
1197
+ oldValue: previous,
1198
+ isUserInteraction: this.#isUserInteraction,
1199
+ });
1200
+ this.#isUserInteraction = false;
1201
+ }
1202
+ /** Emits onOpened/onClosed when the expanded state actually changes (skips the initial state). */
1203
+ #emitOpenedOrClosed(expanded) {
1204
+ const previous = this.#lastExpanded;
1205
+ this.#lastExpanded = expanded;
1206
+ if (previous === undefined || previous === expanded) {
1207
+ return;
1208
+ }
1209
+ const event = {
1210
+ component: this,
1211
+ htmlElement: this.nativeElement,
1212
+ isUserInteraction: true,
1213
+ };
1214
+ expanded ? this.onOpened.emit(event) : this.onClosed.emit(event);
1215
+ }
1216
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1217
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXLookupComponent, isStandalone: true, selector: "ax-lookup", inputs: { mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: false, transformFunction: null }, treeDataSource: { classPropertyName: "treeDataSource", publicName: "treeDataSource", isSignal: true, isRequired: false, transformFunction: null }, valueField: { classPropertyName: "valueField", publicName: "valueField", isSignal: true, isRequired: false, transformFunction: null }, textField: { classPropertyName: "textField", publicName: "textField", isSignal: true, isRequired: false, transformFunction: null }, disabledField: { classPropertyName: "disabledField", publicName: "disabledField", isSignal: true, isRequired: false, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, searchable: { classPropertyName: "searchable", publicName: "searchable", isSignal: true, isRequired: false, transformFunction: null }, searchPlaceholder: { classPropertyName: "searchPlaceholder", publicName: "searchPlaceholder", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, look: { classPropertyName: "look", publicName: "look", isSignal: true, isRequired: false, transformFunction: null }, itemHeight: { classPropertyName: "itemHeight", publicName: "itemHeight", isSignal: true, isRequired: false, transformFunction: null }, maxVisibleItems: { classPropertyName: "maxVisibleItems", publicName: "maxVisibleItems", isSignal: true, isRequired: false, transformFunction: null }, treeSelectionBehavior: { classPropertyName: "treeSelectionBehavior", publicName: "treeSelectionBehavior", isSignal: true, isRequired: false, transformFunction: null }, itemTemplate: { classPropertyName: "itemTemplate", publicName: "itemTemplate", isSignal: true, isRequired: false, transformFunction: null }, selectedTemplate: { classPropertyName: "selectedTemplate", publicName: "selectedTemplate", isSignal: true, isRequired: false, transformFunction: null }, emptyTemplate: { classPropertyName: "emptyTemplate", publicName: "emptyTemplate", isSignal: true, isRequired: false, transformFunction: null }, loadingTemplate: { classPropertyName: "loadingTemplate", publicName: "loadingTemplate", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { disabled: "disabledChange", readonly: "readonlyChange", look: "lookChange", value: "valueChange", onValueChanged: "onValueChanged", onSelectionChanged: "onSelectionChanged", onOpened: "onOpened", onClosed: "onClosed" }, providers: [{ provide: AXComponent, useExisting: AXLookupComponent }], viewQueries: [{ propertyName: "popoverRef", first: true, predicate: AXPopoverComponent, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div\n #origin\n class=\"ax-editor-container ax-{{ look() }} ax-default ax-lookup-trigger\"\n [class.ax-lookup-trigger-multiple]=\"isMultiple()\"\n [class.ax-state-disabled]=\"disabled()\"\n [class.ax-state-readonly]=\"readonly()\"\n (click)=\"onTriggerClick()\"\n (keydown.escape)=\"close()\"\n>\n <ng-content select=\"ax-prefix\"></ng-content>\n\n @if (isMultiple()) {\n <div class=\"ax-lookup-chips\">\n @for (item of selectedItems(); track $index) {\n <span class=\"ax-lookup-chip\">\n @if (selectedTemplate()) {\n <ng-container [ngTemplateOutlet]=\"selectedTemplate()!\" [ngTemplateOutletContext]=\"{ $implicit: item }\" />\n } @else {\n <span class=\"ax-lookup-chip-text\">{{ getItemText(item) }}</span>\n }\n <button\n type=\"button\"\n class=\"ax-lookup-chip-remove\"\n tabindex=\"-1\"\n [disabled]=\"disabled() || readonly()\"\n (click)=\"removeChip($event, item)\"\n >\n <span class=\"ax-icon ax-icon-close\"></span>\n </button>\n </span>\n } @empty {\n <span class=\"ax-lookup-placeholder\">{{ placeholder() }}</span>\n }\n </div>\n @if (selectedItems().length > 0) {\n <button\n type=\"button\"\n class=\"ax-general-button-icon\"\n tabindex=\"-1\"\n [disabled]=\"disabled() || readonly()\"\n (click)=\"clearAll($event)\"\n >\n <span class=\"ax-icon ax-icon-close\"></span>\n </button>\n }\n } @else if (isEditableTrigger()) {\n <input\n type=\"text\"\n class=\"ax-input\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [value]=\"searchText()\"\n (input)=\"onTriggerSearchInput($any($event.target).value)\"\n />\n } @else {\n @if (selectedTemplate() && selectedItems().length > 0) {\n <div class=\"ax-lookup-selected-content\">\n <ng-container\n [ngTemplateOutlet]=\"selectedTemplate()!\"\n [ngTemplateOutletContext]=\"{ $implicit: selectedItems()[0] }\"\n />\n </div>\n } @else {\n <input\n type=\"text\"\n class=\"ax-input ax-lookup-select-input\"\n readonly\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [value]=\"displayText()\"\n />\n }\n }\n\n <button\n type=\"button\"\n class=\"ax-general-button-icon\"\n tabindex=\"-1\"\n [disabled]=\"disabled() || readonly()\"\n >\n <span\n class=\"ax-icon\"\n [class.ax-icon-chevron-down]=\"!expanded()\"\n [class.ax-icon-chevron-up]=\"expanded()\"\n ></span>\n </button>\n <ng-content select=\"ax-suffix\"></ng-content>\n</div>\n\n<ax-popover\n [target]=\"origin\"\n [openOn]=\"'manual'\"\n [closeOn]=\"'clickOut'\"\n [placement]=\"'bottom-start'\"\n [width]=\"origin.offsetWidth + 'px'\"\n [disabled]=\"disabled() || readonly()\"\n (onClosed)=\"onPopoverClosed()\"\n>\n <div class=\"ax-lookup-popup\" (keydown.escape)=\"close()\">\n @if (showPopupSearch()) {\n <div class=\"ax-lookup-search\">\n <span class=\"ax-icon ax-icon-search\"></span>\n <input\n type=\"text\"\n class=\"ax-lookup-search-input\"\n [placeholder]=\"searchPlaceholder()\"\n [value]=\"popupSearchText()\"\n (input)=\"onPopupSearchInput($any($event.target).value)\"\n />\n </div>\n }\n\n @switch (mode()) {\n @case ('drop-down-list') {\n <ax-lookup-drop-down-list\n [dataSource]=\"resolvedDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [itemHeight]=\"itemHeight()\"\n [maxVisibleItems]=\"maxVisibleItems()\"\n [itemTemplate]=\"itemTemplate()\"\n [emptyTemplate]=\"emptyTemplate()\"\n [loadingTemplate]=\"loadingTemplate()\"\n (itemClick)=\"handleSinglePick($event)\"\n />\n }\n @case ('multi-select') {\n <ax-lookup-multi-select\n [dataSource]=\"resolvedDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [itemHeight]=\"itemHeight()\"\n [maxVisibleItems]=\"maxVisibleItems()\"\n [itemTemplate]=\"itemTemplate()\"\n [emptyTemplate]=\"emptyTemplate()\"\n [loadingTemplate]=\"loadingTemplate()\"\n (itemClick)=\"handleMultiToggle($event)\"\n />\n }\n @case ('drop-down-tree') {\n <ax-lookup-drop-down-tree\n [dataSource]=\"treeDataSource()!\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [nodeTemplate]=\"$any(itemTemplate())\"\n (itemClick)=\"handleSinglePick($event)\"\n />\n }\n @case ('multi-select-tree') {\n <ax-lookup-multi-select-tree\n [dataSource]=\"treeDataSource()!\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [selectionBehavior]=\"treeSelectionBehavior()\"\n [nodeTemplate]=\"$any(itemTemplate())\"\n (selectionChange)=\"handleTreeSelectionChange($event)\"\n />\n }\n @case ('multi-column') {\n <ax-lookup-multi-column\n [dataSource]=\"resolvedDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [itemHeight]=\"itemHeight()\"\n [maxVisibleItems]=\"maxVisibleItems()\"\n [columns]=\"columns()\"\n [itemTemplate]=\"itemTemplate()\"\n [emptyTemplate]=\"emptyTemplate()\"\n [loadingTemplate]=\"loadingTemplate()\"\n (itemClick)=\"handleSinglePick($event)\"\n />\n }\n }\n </div>\n</ax-popover>\n", styles: ["@layer properties;@layer components{ax-lookup{display:block;width:100%}ax-lookup .ax-editor-container{justify-content:flex-start;gap:calc(var(--spacing, .25rem) * 1)}ax-lookup .ax-editor-container ax-prefix,ax-lookup .ax-editor-container ax-suffix{display:flex;width:calc(var(--spacing, .25rem) * 6);height:calc(var(--spacing, .25rem) * 6);flex-shrink:0;align-items:center;justify-content:center;gap:calc(var(--spacing, .25rem) * 0);align-self:center;padding:calc(var(--spacing, .25rem) * 0);padding-inline-end:calc(var(--spacing, .25rem) * 0)}:is(ax-lookup .ax-editor-container ax-prefix,ax-lookup .ax-editor-container ax-suffix)>ax-icon,:is(ax-lookup .ax-editor-container ax-prefix,ax-lookup .ax-editor-container ax-suffix)>ax-text{display:inline-flex;max-height:100%;max-width:100%;align-items:center;justify-content:center;--tw-leading: 1;line-height:1}:is(ax-lookup .ax-editor-container ax-prefix,ax-lookup .ax-editor-container ax-suffix)>ax-icon{width:calc(var(--spacing, .25rem) * 4);height:calc(var(--spacing, .25rem) * 4);font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)))}ax-lookup .ax-editor-container.ax-state-disabled{cursor:not-allowed;opacity:50%}ax-lookup .ax-editor-container.ax-state-disabled .ax-input,ax-lookup .ax-editor-container.ax-state-disabled .ax-editor{cursor:not-allowed}ax-lookup .ax-editor-container.ax-state-readonly{opacity:75%}ax-lookup .ax-lookup-trigger{cursor:pointer;--tw-outline-style: none;outline-style:none;-webkit-user-select:none;user-select:none}ax-lookup .ax-lookup-trigger-multiple{height:auto;min-height:calc(var(--spacing, .25rem) * 9);padding-block:calc(var(--spacing, .25rem) * 1)}ax-lookup .ax-lookup-select-input{cursor:pointer;caret-color:transparent;-webkit-user-select:none;user-select:none}ax-lookup .ax-lookup-selected-content{display:flex;min-width:calc(var(--spacing, .25rem) * 0);flex:1;align-items:center;overflow:hidden}ax-lookup .ax-lookup-chips{display:flex;min-width:calc(var(--spacing, .25rem) * 0);flex:1;flex-wrap:wrap;align-items:center;gap:calc(var(--spacing, .25rem) * 1)}ax-lookup .ax-lookup-placeholder{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){ax-lookup .ax-lookup-placeholder{color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 50%,transparent)}}ax-lookup .ax-lookup-chip{display:inline-flex;max-width:100%;align-items:center;gap:calc(var(--spacing, .25rem) * 1);border-radius:var(--ax-sys-border-radius);background-color:rgba(var(--ax-sys-color-on-surface));padding-inline:calc(var(--spacing, .25rem) * 2);padding-block:calc(var(--spacing, .25rem) * .5);font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)))}@supports (color: color-mix(in lab,red,red)){ax-lookup .ax-lookup-chip{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 10%,transparent)}}ax-lookup .ax-lookup-chip .ax-lookup-chip-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}ax-lookup .ax-lookup-chip .ax-lookup-chip-remove{display:flex;width:calc(var(--spacing, .25rem) * 4);height:calc(var(--spacing, .25rem) * 4);flex-shrink:0;cursor:pointer;align-items:center;justify-content:center;border-radius:calc(infinity * 1px);border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding:calc(var(--spacing, .25rem) * 0)}ax-lookup .ax-lookup-chip .ax-lookup-chip-remove:hover{background-color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){ax-lookup .ax-lookup-chip .ax-lookup-chip-remove:hover{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 15%,transparent)}}ax-lookup .ax-lookup-chip .ax-lookup-chip-remove .ax-icon{font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));--tw-leading: 1;line-height:1}.ax-lookup-popup{box-sizing:border-box;display:flex;width:100%;flex-direction:column;overflow:hidden;border-radius:var(--ax-sys-border-radius);border-style:var(--tw-border-style);border-width:1px;border-color:rgba(var(--ax-sys-color-border-surface));background-color:rgba(var(--ax-sys-color-lightest-surface));--tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ax-lookup-popup:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:rgba(var(--ax-sys-color-darkest-surface))}.ax-lookup-search{display:flex;align-items:center;gap:calc(var(--spacing, .25rem) * 2);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:rgba(var(--ax-sys-color-border-surface));padding-inline:calc(var(--spacing, .25rem) * 3);padding-block:calc(var(--spacing, .25rem) * 2)}.ax-lookup-search>.ax-icon{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-search>.ax-icon{color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 50%,transparent)}}.ax-lookup-search .ax-lookup-search-input{width:100%;border-style:var(--tw-border-style);border-width:0px;background-color:transparent;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-search .ax-lookup-search-input::placeholder{color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-search .ax-lookup-search-input::placeholder{color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 50%,transparent)}}.ax-lookup-viewport{width:100%}.ax-lookup-empty{display:flex;min-height:calc(var(--spacing, .25rem) * 12);width:100%;align-items:center;justify-content:center;padding-inline:calc(var(--spacing, .25rem) * 3);padding-block:calc(var(--spacing, .25rem) * 3);text-align:center;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-empty{color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 60%,transparent)}}.ax-lookup-option{box-sizing:border-box;display:flex;cursor:pointer;align-items:center;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 2);border-style:var(--tw-border-style);border-width:1px;border-color:transparent;padding-inline:calc(var(--spacing, .25rem) * 3);font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgba(var(--ax-sys-color-on-surface));--tw-outline-style: none;outline-style:none}.ax-lookup-option:hover{background-color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-option:hover{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 5%,transparent)}}.ax-lookup-option.ax-state-selected{background-color:rgba(var(--ax-sys-color-primary-lightest-surface));color:rgba(var(--ax-sys-color-primary-surface))}.ax-lookup-option.ax-state-selected:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:rgba(var(--ax-sys-color-primary-darkest-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-option.ax-state-selected:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-darkest-surface)) 25%,transparent)}}.ax-lookup-option.ax-state-selected .ax-lookup-option-check{display:block;width:calc(var(--spacing, .25rem) * 2);height:calc(var(--spacing, .25rem) * 2);rotate:45deg;border-right-style:var(--tw-border-style);border-right-width:2px;border-bottom-style:var(--tw-border-style);border-bottom-width:2px;border-color:rgba(var(--ax-sys-color-primary-surface))}.ax-lookup-option.ax-state-disabled{cursor:not-allowed;opacity:50%}.ax-lookup-option .ax-lookup-option-text{min-width:calc(var(--spacing, .25rem) * 0);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ax-lookup-option .ax-lookup-option-check{display:none;flex-shrink:0}.ax-lookup-option .ax-lookup-option-loading{width:100%;color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-option .ax-lookup-option-loading{color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 50%,transparent)}}.ax-lookup-option .ax-lookup-checkbox{pointer-events:none;width:calc(var(--spacing, .25rem) * 4);height:calc(var(--spacing, .25rem) * 4);flex-shrink:0;accent-color:rgba(var(--ax-sys-color-primary-surface))}.ax-lookup-column-header{display:grid;width:100%;gap:calc(var(--spacing, .25rem) * 2);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:rgba(var(--ax-sys-color-border-surface));background-color:rgba(var(--ax-sys-color-on-surface));padding-inline:calc(var(--spacing, .25rem) * 3);padding-block:calc(var(--spacing, .25rem) * 2);font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600);color:rgba(var(--ax-sys-color-on-surface));text-transform:uppercase}@supports (color: color-mix(in lab,red,red)){.ax-lookup-column-header{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 5%,transparent)}}@supports (color: color-mix(in lab,red,red)){.ax-lookup-column-header{color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 70%,transparent)}}.ax-lookup-column-row{display:grid;gap:calc(var(--spacing, .25rem) * 2)}.ax-lookup-column-row .ax-lookup-column-cell{min-width:calc(var(--spacing, .25rem) * 0);align-self:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ax-lookup-tree{max-height:calc(var(--spacing, .25rem) * 80);overflow:auto;padding:calc(var(--spacing, .25rem) * 2)}}@property --tw-leading{syntax: \"*\"; inherits: false;}@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-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-leading: initial;--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-font-weight: initial}}}\n/*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disablePanelClass", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "closeOnScroll", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "component", type: AXLookupDropDownListComponent, selector: "ax-lookup-drop-down-list" }, { kind: "component", type: AXLookupMultiSelectComponent, selector: "ax-lookup-multi-select" }, { kind: "component", type: AXLookupDropDownTreeComponent, selector: "ax-lookup-drop-down-tree", inputs: ["dataSource", "valueField", "textField", "disabledField", "selectedValues", "nodeTemplate"], outputs: ["itemClick"] }, { kind: "component", type: AXLookupMultiSelectTreeComponent, selector: "ax-lookup-multi-select-tree", inputs: ["dataSource", "valueField", "textField", "disabledField", "selectedValues", "selectionBehavior", "nodeTemplate"], outputs: ["selectionChange"] }, { kind: "component", type: AXLookupMultiColumnComponent, selector: "ax-lookup-multi-column", inputs: ["columns"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
1218
+ }
1219
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupComponent, decorators: [{
1220
+ type: Component,
1221
+ args: [{ selector: 'ax-lookup', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
1222
+ NgTemplateOutlet,
1223
+ AXPopoverComponent,
1224
+ AXLookupDropDownListComponent,
1225
+ AXLookupMultiSelectComponent,
1226
+ AXLookupDropDownTreeComponent,
1227
+ AXLookupMultiSelectTreeComponent,
1228
+ AXLookupMultiColumnComponent,
1229
+ ], providers: [{ provide: AXComponent, useExisting: AXLookupComponent }], template: "<div\n #origin\n class=\"ax-editor-container ax-{{ look() }} ax-default ax-lookup-trigger\"\n [class.ax-lookup-trigger-multiple]=\"isMultiple()\"\n [class.ax-state-disabled]=\"disabled()\"\n [class.ax-state-readonly]=\"readonly()\"\n (click)=\"onTriggerClick()\"\n (keydown.escape)=\"close()\"\n>\n <ng-content select=\"ax-prefix\"></ng-content>\n\n @if (isMultiple()) {\n <div class=\"ax-lookup-chips\">\n @for (item of selectedItems(); track $index) {\n <span class=\"ax-lookup-chip\">\n @if (selectedTemplate()) {\n <ng-container [ngTemplateOutlet]=\"selectedTemplate()!\" [ngTemplateOutletContext]=\"{ $implicit: item }\" />\n } @else {\n <span class=\"ax-lookup-chip-text\">{{ getItemText(item) }}</span>\n }\n <button\n type=\"button\"\n class=\"ax-lookup-chip-remove\"\n tabindex=\"-1\"\n [disabled]=\"disabled() || readonly()\"\n (click)=\"removeChip($event, item)\"\n >\n <span class=\"ax-icon ax-icon-close\"></span>\n </button>\n </span>\n } @empty {\n <span class=\"ax-lookup-placeholder\">{{ placeholder() }}</span>\n }\n </div>\n @if (selectedItems().length > 0) {\n <button\n type=\"button\"\n class=\"ax-general-button-icon\"\n tabindex=\"-1\"\n [disabled]=\"disabled() || readonly()\"\n (click)=\"clearAll($event)\"\n >\n <span class=\"ax-icon ax-icon-close\"></span>\n </button>\n }\n } @else if (isEditableTrigger()) {\n <input\n type=\"text\"\n class=\"ax-input\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [value]=\"searchText()\"\n (input)=\"onTriggerSearchInput($any($event.target).value)\"\n />\n } @else {\n @if (selectedTemplate() && selectedItems().length > 0) {\n <div class=\"ax-lookup-selected-content\">\n <ng-container\n [ngTemplateOutlet]=\"selectedTemplate()!\"\n [ngTemplateOutletContext]=\"{ $implicit: selectedItems()[0] }\"\n />\n </div>\n } @else {\n <input\n type=\"text\"\n class=\"ax-input ax-lookup-select-input\"\n readonly\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [value]=\"displayText()\"\n />\n }\n }\n\n <button\n type=\"button\"\n class=\"ax-general-button-icon\"\n tabindex=\"-1\"\n [disabled]=\"disabled() || readonly()\"\n >\n <span\n class=\"ax-icon\"\n [class.ax-icon-chevron-down]=\"!expanded()\"\n [class.ax-icon-chevron-up]=\"expanded()\"\n ></span>\n </button>\n <ng-content select=\"ax-suffix\"></ng-content>\n</div>\n\n<ax-popover\n [target]=\"origin\"\n [openOn]=\"'manual'\"\n [closeOn]=\"'clickOut'\"\n [placement]=\"'bottom-start'\"\n [width]=\"origin.offsetWidth + 'px'\"\n [disabled]=\"disabled() || readonly()\"\n (onClosed)=\"onPopoverClosed()\"\n>\n <div class=\"ax-lookup-popup\" (keydown.escape)=\"close()\">\n @if (showPopupSearch()) {\n <div class=\"ax-lookup-search\">\n <span class=\"ax-icon ax-icon-search\"></span>\n <input\n type=\"text\"\n class=\"ax-lookup-search-input\"\n [placeholder]=\"searchPlaceholder()\"\n [value]=\"popupSearchText()\"\n (input)=\"onPopupSearchInput($any($event.target).value)\"\n />\n </div>\n }\n\n @switch (mode()) {\n @case ('drop-down-list') {\n <ax-lookup-drop-down-list\n [dataSource]=\"resolvedDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [itemHeight]=\"itemHeight()\"\n [maxVisibleItems]=\"maxVisibleItems()\"\n [itemTemplate]=\"itemTemplate()\"\n [emptyTemplate]=\"emptyTemplate()\"\n [loadingTemplate]=\"loadingTemplate()\"\n (itemClick)=\"handleSinglePick($event)\"\n />\n }\n @case ('multi-select') {\n <ax-lookup-multi-select\n [dataSource]=\"resolvedDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [itemHeight]=\"itemHeight()\"\n [maxVisibleItems]=\"maxVisibleItems()\"\n [itemTemplate]=\"itemTemplate()\"\n [emptyTemplate]=\"emptyTemplate()\"\n [loadingTemplate]=\"loadingTemplate()\"\n (itemClick)=\"handleMultiToggle($event)\"\n />\n }\n @case ('drop-down-tree') {\n <ax-lookup-drop-down-tree\n [dataSource]=\"treeDataSource()!\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [nodeTemplate]=\"$any(itemTemplate())\"\n (itemClick)=\"handleSinglePick($event)\"\n />\n }\n @case ('multi-select-tree') {\n <ax-lookup-multi-select-tree\n [dataSource]=\"treeDataSource()!\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [selectionBehavior]=\"treeSelectionBehavior()\"\n [nodeTemplate]=\"$any(itemTemplate())\"\n (selectionChange)=\"handleTreeSelectionChange($event)\"\n />\n }\n @case ('multi-column') {\n <ax-lookup-multi-column\n [dataSource]=\"resolvedDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [itemHeight]=\"itemHeight()\"\n [maxVisibleItems]=\"maxVisibleItems()\"\n [columns]=\"columns()\"\n [itemTemplate]=\"itemTemplate()\"\n [emptyTemplate]=\"emptyTemplate()\"\n [loadingTemplate]=\"loadingTemplate()\"\n (itemClick)=\"handleSinglePick($event)\"\n />\n }\n }\n </div>\n</ax-popover>\n", styles: ["@layer properties;@layer components{ax-lookup{display:block;width:100%}ax-lookup .ax-editor-container{justify-content:flex-start;gap:calc(var(--spacing, .25rem) * 1)}ax-lookup .ax-editor-container ax-prefix,ax-lookup .ax-editor-container ax-suffix{display:flex;width:calc(var(--spacing, .25rem) * 6);height:calc(var(--spacing, .25rem) * 6);flex-shrink:0;align-items:center;justify-content:center;gap:calc(var(--spacing, .25rem) * 0);align-self:center;padding:calc(var(--spacing, .25rem) * 0);padding-inline-end:calc(var(--spacing, .25rem) * 0)}:is(ax-lookup .ax-editor-container ax-prefix,ax-lookup .ax-editor-container ax-suffix)>ax-icon,:is(ax-lookup .ax-editor-container ax-prefix,ax-lookup .ax-editor-container ax-suffix)>ax-text{display:inline-flex;max-height:100%;max-width:100%;align-items:center;justify-content:center;--tw-leading: 1;line-height:1}:is(ax-lookup .ax-editor-container ax-prefix,ax-lookup .ax-editor-container ax-suffix)>ax-icon{width:calc(var(--spacing, .25rem) * 4);height:calc(var(--spacing, .25rem) * 4);font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)))}ax-lookup .ax-editor-container.ax-state-disabled{cursor:not-allowed;opacity:50%}ax-lookup .ax-editor-container.ax-state-disabled .ax-input,ax-lookup .ax-editor-container.ax-state-disabled .ax-editor{cursor:not-allowed}ax-lookup .ax-editor-container.ax-state-readonly{opacity:75%}ax-lookup .ax-lookup-trigger{cursor:pointer;--tw-outline-style: none;outline-style:none;-webkit-user-select:none;user-select:none}ax-lookup .ax-lookup-trigger-multiple{height:auto;min-height:calc(var(--spacing, .25rem) * 9);padding-block:calc(var(--spacing, .25rem) * 1)}ax-lookup .ax-lookup-select-input{cursor:pointer;caret-color:transparent;-webkit-user-select:none;user-select:none}ax-lookup .ax-lookup-selected-content{display:flex;min-width:calc(var(--spacing, .25rem) * 0);flex:1;align-items:center;overflow:hidden}ax-lookup .ax-lookup-chips{display:flex;min-width:calc(var(--spacing, .25rem) * 0);flex:1;flex-wrap:wrap;align-items:center;gap:calc(var(--spacing, .25rem) * 1)}ax-lookup .ax-lookup-placeholder{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){ax-lookup .ax-lookup-placeholder{color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 50%,transparent)}}ax-lookup .ax-lookup-chip{display:inline-flex;max-width:100%;align-items:center;gap:calc(var(--spacing, .25rem) * 1);border-radius:var(--ax-sys-border-radius);background-color:rgba(var(--ax-sys-color-on-surface));padding-inline:calc(var(--spacing, .25rem) * 2);padding-block:calc(var(--spacing, .25rem) * .5);font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)))}@supports (color: color-mix(in lab,red,red)){ax-lookup .ax-lookup-chip{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 10%,transparent)}}ax-lookup .ax-lookup-chip .ax-lookup-chip-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}ax-lookup .ax-lookup-chip .ax-lookup-chip-remove{display:flex;width:calc(var(--spacing, .25rem) * 4);height:calc(var(--spacing, .25rem) * 4);flex-shrink:0;cursor:pointer;align-items:center;justify-content:center;border-radius:calc(infinity * 1px);border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding:calc(var(--spacing, .25rem) * 0)}ax-lookup .ax-lookup-chip .ax-lookup-chip-remove:hover{background-color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){ax-lookup .ax-lookup-chip .ax-lookup-chip-remove:hover{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 15%,transparent)}}ax-lookup .ax-lookup-chip .ax-lookup-chip-remove .ax-icon{font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));--tw-leading: 1;line-height:1}.ax-lookup-popup{box-sizing:border-box;display:flex;width:100%;flex-direction:column;overflow:hidden;border-radius:var(--ax-sys-border-radius);border-style:var(--tw-border-style);border-width:1px;border-color:rgba(var(--ax-sys-color-border-surface));background-color:rgba(var(--ax-sys-color-lightest-surface));--tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ax-lookup-popup:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:rgba(var(--ax-sys-color-darkest-surface))}.ax-lookup-search{display:flex;align-items:center;gap:calc(var(--spacing, .25rem) * 2);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:rgba(var(--ax-sys-color-border-surface));padding-inline:calc(var(--spacing, .25rem) * 3);padding-block:calc(var(--spacing, .25rem) * 2)}.ax-lookup-search>.ax-icon{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-search>.ax-icon{color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 50%,transparent)}}.ax-lookup-search .ax-lookup-search-input{width:100%;border-style:var(--tw-border-style);border-width:0px;background-color:transparent;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-search .ax-lookup-search-input::placeholder{color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-search .ax-lookup-search-input::placeholder{color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 50%,transparent)}}.ax-lookup-viewport{width:100%}.ax-lookup-empty{display:flex;min-height:calc(var(--spacing, .25rem) * 12);width:100%;align-items:center;justify-content:center;padding-inline:calc(var(--spacing, .25rem) * 3);padding-block:calc(var(--spacing, .25rem) * 3);text-align:center;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-empty{color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 60%,transparent)}}.ax-lookup-option{box-sizing:border-box;display:flex;cursor:pointer;align-items:center;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 2);border-style:var(--tw-border-style);border-width:1px;border-color:transparent;padding-inline:calc(var(--spacing, .25rem) * 3);font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgba(var(--ax-sys-color-on-surface));--tw-outline-style: none;outline-style:none}.ax-lookup-option:hover{background-color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-option:hover{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 5%,transparent)}}.ax-lookup-option.ax-state-selected{background-color:rgba(var(--ax-sys-color-primary-lightest-surface));color:rgba(var(--ax-sys-color-primary-surface))}.ax-lookup-option.ax-state-selected:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:rgba(var(--ax-sys-color-primary-darkest-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-option.ax-state-selected:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-darkest-surface)) 25%,transparent)}}.ax-lookup-option.ax-state-selected .ax-lookup-option-check{display:block;width:calc(var(--spacing, .25rem) * 2);height:calc(var(--spacing, .25rem) * 2);rotate:45deg;border-right-style:var(--tw-border-style);border-right-width:2px;border-bottom-style:var(--tw-border-style);border-bottom-width:2px;border-color:rgba(var(--ax-sys-color-primary-surface))}.ax-lookup-option.ax-state-disabled{cursor:not-allowed;opacity:50%}.ax-lookup-option .ax-lookup-option-text{min-width:calc(var(--spacing, .25rem) * 0);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ax-lookup-option .ax-lookup-option-check{display:none;flex-shrink:0}.ax-lookup-option .ax-lookup-option-loading{width:100%;color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-option .ax-lookup-option-loading{color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 50%,transparent)}}.ax-lookup-option .ax-lookup-checkbox{pointer-events:none;width:calc(var(--spacing, .25rem) * 4);height:calc(var(--spacing, .25rem) * 4);flex-shrink:0;accent-color:rgba(var(--ax-sys-color-primary-surface))}.ax-lookup-column-header{display:grid;width:100%;gap:calc(var(--spacing, .25rem) * 2);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:rgba(var(--ax-sys-color-border-surface));background-color:rgba(var(--ax-sys-color-on-surface));padding-inline:calc(var(--spacing, .25rem) * 3);padding-block:calc(var(--spacing, .25rem) * 2);font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600);color:rgba(var(--ax-sys-color-on-surface));text-transform:uppercase}@supports (color: color-mix(in lab,red,red)){.ax-lookup-column-header{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 5%,transparent)}}@supports (color: color-mix(in lab,red,red)){.ax-lookup-column-header{color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 70%,transparent)}}.ax-lookup-column-row{display:grid;gap:calc(var(--spacing, .25rem) * 2)}.ax-lookup-column-row .ax-lookup-column-cell{min-width:calc(var(--spacing, .25rem) * 0);align-self:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ax-lookup-tree{max-height:calc(var(--spacing, .25rem) * 80);overflow:auto;padding:calc(var(--spacing, .25rem) * 2)}}@property --tw-leading{syntax: \"*\"; inherits: false;}@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-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-leading: initial;--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-font-weight: initial}}}\n/*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */\n"] }]
1230
+ }], ctorParameters: () => [], propDecorators: { mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], dataSource: [{ type: i0.Input, args: [{ isSignal: true, alias: "dataSource", required: false }] }], treeDataSource: [{ type: i0.Input, args: [{ isSignal: true, alias: "treeDataSource", required: false }] }], valueField: [{ type: i0.Input, args: [{ isSignal: true, alias: "valueField", required: false }] }], textField: [{ type: i0.Input, args: [{ isSignal: true, alias: "textField", required: false }] }], disabledField: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabledField", required: false }] }], columns: [{ type: i0.Input, args: [{ isSignal: true, alias: "columns", required: false }] }], searchable: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchable", required: false }] }], searchPlaceholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchPlaceholder", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }, { type: i0.Output, args: ["disabledChange"] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }, { type: i0.Output, args: ["readonlyChange"] }], look: [{ type: i0.Input, args: [{ isSignal: true, alias: "look", required: false }] }, { type: i0.Output, args: ["lookChange"] }], itemHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemHeight", required: false }] }], maxVisibleItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxVisibleItems", required: false }] }], treeSelectionBehavior: [{ type: i0.Input, args: [{ isSignal: true, alias: "treeSelectionBehavior", required: false }] }], itemTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemTemplate", required: false }] }], selectedTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedTemplate", required: false }] }], emptyTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "emptyTemplate", required: false }] }], loadingTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "loadingTemplate", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], onValueChanged: [{ type: i0.Output, args: ["onValueChanged"] }], onSelectionChanged: [{ type: i0.Output, args: ["onSelectionChanged"] }], onOpened: [{ type: i0.Output, args: ["onOpened"] }], onClosed: [{ type: i0.Output, args: ["onClosed"] }], popoverRef: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXPopoverComponent), { isSignal: true }] }] } });
1231
+
1232
+ class AXLookupModule {
1233
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
1234
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.0.8", ngImport: i0, type: AXLookupModule, imports: [AXLookupComponent,
1235
+ AXLookupDropDownListComponent,
1236
+ AXLookupMultiSelectComponent,
1237
+ AXLookupDropDownTreeComponent,
1238
+ AXLookupMultiSelectTreeComponent,
1239
+ AXLookupMultiColumnComponent], exports: [AXLookupComponent,
1240
+ AXLookupDropDownListComponent,
1241
+ AXLookupMultiSelectComponent,
1242
+ AXLookupDropDownTreeComponent,
1243
+ AXLookupMultiSelectTreeComponent,
1244
+ AXLookupMultiColumnComponent] }); }
1245
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupModule, imports: [AXLookupComponent,
1246
+ AXLookupDropDownListComponent,
1247
+ AXLookupMultiSelectComponent,
1248
+ AXLookupDropDownTreeComponent,
1249
+ AXLookupMultiSelectTreeComponent,
1250
+ AXLookupMultiColumnComponent] }); }
1251
+ }
1252
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupModule, decorators: [{
1253
+ type: NgModule,
1254
+ args: [{
1255
+ imports: [
1256
+ AXLookupComponent,
1257
+ AXLookupDropDownListComponent,
1258
+ AXLookupMultiSelectComponent,
1259
+ AXLookupDropDownTreeComponent,
1260
+ AXLookupMultiSelectTreeComponent,
1261
+ AXLookupMultiColumnComponent,
1262
+ ],
1263
+ exports: [
1264
+ AXLookupComponent,
1265
+ AXLookupDropDownListComponent,
1266
+ AXLookupMultiSelectComponent,
1267
+ AXLookupDropDownTreeComponent,
1268
+ AXLookupMultiSelectTreeComponent,
1269
+ AXLookupMultiColumnComponent,
1270
+ ],
1271
+ }]
1272
+ }] });
1273
+
1274
+ /**
1275
+ * Generated bundle index. Do not edit.
1276
+ */
1277
+
1278
+ export { AXLookupComponent, AXLookupDropDownListComponent, AXLookupDropDownTreeComponent, AXLookupModule, AXLookupMultiColumnComponent, AXLookupMultiSelectComponent, AXLookupMultiSelectTreeComponent };
1279
+ //# sourceMappingURL=acorex-components-lookup.mjs.map