@acorex/components 22.1.0-next.2 → 22.1.0-next.21
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.
- package/fesm2022/acorex-components-accordion.mjs +2 -2
- package/fesm2022/acorex-components-accordion.mjs.map +1 -1
- package/fesm2022/acorex-components-button.mjs +2 -2
- package/fesm2022/acorex-components-button.mjs.map +1 -1
- package/fesm2022/acorex-components-check-box.mjs +2 -2
- package/fesm2022/acorex-components-check-box.mjs.map +1 -1
- package/fesm2022/acorex-components-combo-box.mjs +114 -20
- package/fesm2022/acorex-components-combo-box.mjs.map +1 -1
- package/fesm2022/{acorex-components-conversation-open-composer-picker-for-files-BuNEjswI.mjs → acorex-components-conversation-open-composer-picker-for-files-DnSW908R.mjs} +6 -19
- package/fesm2022/acorex-components-conversation-open-composer-picker-for-files-DnSW908R.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation.mjs +7299 -9510
- package/fesm2022/acorex-components-conversation.mjs.map +1 -1
- package/fesm2022/acorex-components-data-table.mjs +33 -18
- package/fesm2022/acorex-components-data-table.mjs.map +1 -1
- package/fesm2022/acorex-components-dropdown.mjs +2 -2
- package/fesm2022/acorex-components-dropdown.mjs.map +1 -1
- package/fesm2022/acorex-components-form.mjs +21 -5
- package/fesm2022/acorex-components-form.mjs.map +1 -1
- package/fesm2022/acorex-components-label.mjs +2 -2
- package/fesm2022/acorex-components-label.mjs.map +1 -1
- package/fesm2022/acorex-components-list.mjs +2 -2
- package/fesm2022/acorex-components-list.mjs.map +1 -1
- package/fesm2022/acorex-components-loading-dialog.mjs +59 -42
- package/fesm2022/acorex-components-loading-dialog.mjs.map +1 -1
- package/fesm2022/acorex-components-lookup.mjs +765 -98
- package/fesm2022/acorex-components-lookup.mjs.map +1 -1
- package/fesm2022/acorex-components-notification.mjs +4 -6
- package/fesm2022/acorex-components-notification.mjs.map +1 -1
- package/fesm2022/acorex-components-password-box.mjs +2 -2
- package/fesm2022/acorex-components-password-box.mjs.map +1 -1
- package/fesm2022/acorex-components-popover.mjs +22 -0
- package/fesm2022/acorex-components-popover.mjs.map +1 -1
- package/fesm2022/acorex-components-radio.mjs +2 -2
- package/fesm2022/acorex-components-radio.mjs.map +1 -1
- package/fesm2022/acorex-components-range-slider.mjs +2 -2
- package/fesm2022/acorex-components-range-slider.mjs.map +1 -1
- package/fesm2022/acorex-components-select-box.mjs +38 -11
- package/fesm2022/acorex-components-select-box.mjs.map +1 -1
- package/fesm2022/acorex-components-selection-list.mjs +2 -2
- package/fesm2022/acorex-components-selection-list.mjs.map +1 -1
- package/fesm2022/acorex-components-switch.mjs +2 -2
- package/fesm2022/acorex-components-switch.mjs.map +1 -1
- package/fesm2022/acorex-components-tabs.mjs +2 -2
- package/fesm2022/acorex-components-tabs.mjs.map +1 -1
- package/fesm2022/acorex-components-tag-box.mjs +2 -2
- package/fesm2022/acorex-components-tag-box.mjs.map +1 -1
- package/lookup/README.md +29 -7
- package/package.json +4 -7
- package/types/acorex-components-combo-box.d.ts +38 -8
- package/types/acorex-components-conversation.d.ts +543 -1019
- package/types/acorex-components-data-table.d.ts +3 -2
- package/types/acorex-components-loading-dialog.d.ts +12 -4
- package/types/acorex-components-lookup.d.ts +181 -21
- package/types/acorex-components-popover.d.ts +6 -0
- package/types/acorex-components-select-box.d.ts +11 -0
- package/fesm2022/acorex-components-conversation-open-composer-picker-for-files-BuNEjswI.mjs.map +0 -1
- package/fesm2022/acorex-components-selection-list-2.mjs +0 -168
- package/fesm2022/acorex-components-selection-list-2.mjs.map +0 -1
- package/selection-list-2/README.md +0 -3
- package/types/acorex-components-selection-list-2.d.ts +0 -52
|
@@ -1,15 +1,16 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { AXDataSource, AXListDataSource, NXValueComponent, convertArrayToDataSource, AXComponent, AXClearableComponent, AXClosableComponent, AXValuableComponent } from '@acorex/cdk/common';
|
|
2
2
|
import { AXChipsComponent } from '@acorex/components/chips';
|
|
3
3
|
import * as i1$1 from '@acorex/components/decorators';
|
|
4
4
|
import { AXDecoratorModule } from '@acorex/components/decorators';
|
|
5
5
|
import { AXPopoverComponent } from '@acorex/components/popover';
|
|
6
|
+
import { AXSearchBoxComponent } from '@acorex/components/search-box';
|
|
6
7
|
import { AXPlatform } from '@acorex/core/platform';
|
|
7
8
|
import { AXTranslatorPipe } from '@acorex/core/translation';
|
|
8
9
|
import { NgTemplateOutlet, AsyncPipe } from '@angular/common';
|
|
9
10
|
import * as i0 from '@angular/core';
|
|
10
|
-
import { input, output, signal, computed, viewChild, viewChildren, inject, NgZone, effect, untracked, Directive, ViewEncapsulation, ChangeDetectionStrategy, Component, ElementRef, DestroyRef, model, linkedSignal, NgModule } from '@angular/core';
|
|
11
|
+
import { input, output, signal, computed, viewChild, viewChildren, inject, NgZone, effect, untracked, afterRenderEffect, Directive, ViewEncapsulation, ChangeDetectionStrategy, Component, ElementRef, DestroyRef, model, linkedSignal, NgModule } from '@angular/core';
|
|
11
12
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
12
|
-
import * as
|
|
13
|
+
import * as i2 from '@acorex/cdk/list-navigation';
|
|
13
14
|
import { AXListNavigationDirective, AXListNavigationItemDirective, AXListNavigationModule } from '@acorex/cdk/list-navigation';
|
|
14
15
|
import * as i1 from '@angular/cdk/scrolling';
|
|
15
16
|
import { CdkVirtualScrollViewport, ScrollingModule } from '@angular/cdk/scrolling';
|
|
@@ -17,6 +18,108 @@ import { AXTreeViewComponent } from '@acorex/components/tree-view';
|
|
|
17
18
|
import { AXDataTableComponent, AXDataTableTextColumnComponent } from '@acorex/components/data-table';
|
|
18
19
|
import { fromEvent, auditTime } from 'rxjs';
|
|
19
20
|
|
|
21
|
+
/**
|
|
22
|
+
* Converts a drop-down-tree datasource (nested array or lazy callback) into an
|
|
23
|
+
* `AXDataSource` that a multi-column data table can load and expand.
|
|
24
|
+
*/
|
|
25
|
+
function createLookupTreeTableDataSource(source, options) {
|
|
26
|
+
const isCallback = typeof source === 'function';
|
|
27
|
+
return new AXDataSource({
|
|
28
|
+
pageSize: 8,
|
|
29
|
+
key: options.valueField,
|
|
30
|
+
load: (query) => loadTreeTableRows(source, options, query, isCallback),
|
|
31
|
+
byKey: (key) => findTreeTableItem(source, options.valueField, key),
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
async function loadTreeTableRows(source, options, query, isCallback) {
|
|
35
|
+
const parentFilter = query.filter?.field === options.parentField ? query.filter : undefined;
|
|
36
|
+
const textFilter = query.filter && query.filter.field !== options.parentField ? query.filter : undefined;
|
|
37
|
+
if (parentFilter) {
|
|
38
|
+
const children = await loadChildren(source, options, parentFilter.value, isCallback);
|
|
39
|
+
return { items: children, total: children.length };
|
|
40
|
+
}
|
|
41
|
+
const roots = mapTreeNodes(await loadRoots(source, isCallback), options);
|
|
42
|
+
const items = textFilter ? filterTreeNodes(roots, options.textField, String(textFilter.value ?? '')) : roots;
|
|
43
|
+
return { items, total: items.length };
|
|
44
|
+
}
|
|
45
|
+
async function loadRoots(source, isCallback) {
|
|
46
|
+
if (!isCallback) {
|
|
47
|
+
return source ?? [];
|
|
48
|
+
}
|
|
49
|
+
return (await source()) ?? [];
|
|
50
|
+
}
|
|
51
|
+
async function loadChildren(source, options, parentId, isCallback) {
|
|
52
|
+
if (isCallback) {
|
|
53
|
+
const nodes = (await source(String(parentId))) ?? [];
|
|
54
|
+
return mapTreeNodes(nodes, options);
|
|
55
|
+
}
|
|
56
|
+
const parent = findTreeNode(source, options.valueField, parentId);
|
|
57
|
+
const children = Array.isArray(parent?.['children']) ? parent['children'] : [];
|
|
58
|
+
return mapTreeNodes(children, options);
|
|
59
|
+
}
|
|
60
|
+
function mapTreeNodes(nodes, options) {
|
|
61
|
+
return nodes.map((node) => mapTreeNode(node, options));
|
|
62
|
+
}
|
|
63
|
+
function mapTreeNode(node, options) {
|
|
64
|
+
const rawChildren = node['children'];
|
|
65
|
+
const children = Array.isArray(rawChildren) ? mapTreeNodes(rawChildren, options) : undefined;
|
|
66
|
+
const childrenCount = node['childrenCount'];
|
|
67
|
+
const hasChildren = (children?.length ?? 0) > 0 ||
|
|
68
|
+
(typeof childrenCount === 'number' && childrenCount > 0) ||
|
|
69
|
+
node['hasChild'] === true ||
|
|
70
|
+
node['hasChildren'] === true;
|
|
71
|
+
return {
|
|
72
|
+
...node,
|
|
73
|
+
[options.hasChildrenField]: hasChildren,
|
|
74
|
+
...(children && children.length > 0 ? { children } : {}),
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
function filterTreeNodes(nodes, textField, query) {
|
|
78
|
+
const needle = query.trim().toLowerCase();
|
|
79
|
+
if (!needle) {
|
|
80
|
+
return nodes;
|
|
81
|
+
}
|
|
82
|
+
const result = [];
|
|
83
|
+
for (const node of nodes) {
|
|
84
|
+
const rawChildren = node['children'];
|
|
85
|
+
const children = Array.isArray(rawChildren) ? filterTreeNodes(rawChildren, textField, needle) : undefined;
|
|
86
|
+
const selfMatch = String(node[textField] ?? '')
|
|
87
|
+
.toLowerCase()
|
|
88
|
+
.includes(needle);
|
|
89
|
+
if (selfMatch) {
|
|
90
|
+
result.push(node);
|
|
91
|
+
}
|
|
92
|
+
else if (children && children.length > 0) {
|
|
93
|
+
result.push({
|
|
94
|
+
...node,
|
|
95
|
+
children,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return result;
|
|
100
|
+
}
|
|
101
|
+
function findTreeTableItem(source, valueField, key) {
|
|
102
|
+
if (typeof source === 'function' || !Array.isArray(source)) {
|
|
103
|
+
return undefined;
|
|
104
|
+
}
|
|
105
|
+
return findTreeNode(source, valueField, key) ?? undefined;
|
|
106
|
+
}
|
|
107
|
+
function findTreeNode(nodes, valueField, key) {
|
|
108
|
+
for (const node of nodes) {
|
|
109
|
+
if (String(node[valueField]) === String(key)) {
|
|
110
|
+
return node;
|
|
111
|
+
}
|
|
112
|
+
const children = node['children'];
|
|
113
|
+
if (Array.isArray(children)) {
|
|
114
|
+
const found = findTreeNode(children, valueField, key);
|
|
115
|
+
if (found) {
|
|
116
|
+
return found;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return null;
|
|
121
|
+
}
|
|
122
|
+
|
|
20
123
|
/**
|
|
21
124
|
* Shared `AXDataSource` + CDK virtual scroll plumbing for the list-based lookup views
|
|
22
125
|
* (`ax-lookup-drop-down-list`, `ax-lookup-multi-select`).
|
|
@@ -95,8 +198,15 @@ class AXLookupListViewBase {
|
|
|
95
198
|
...(ngDevMode ? [{ debugName: "totalCount" }] : /* istanbul ignore next */ []));
|
|
96
199
|
this.isLoading = signal(true, /* @ts-ignore */
|
|
97
200
|
...(ngDevMode ? [{ debugName: "isLoading" }] : /* istanbul ignore next */ []));
|
|
201
|
+
this.loadingPlaceholderIndexes = [0, 1, 2];
|
|
98
202
|
this.isEmpty = computed(() => this.totalCount() === 0 && !this.isLoading(), /* @ts-ignore */
|
|
99
203
|
...(ngDevMode ? [{ debugName: "isEmpty" }] : /* istanbul ignore next */ []));
|
|
204
|
+
/**
|
|
205
|
+
* Overlay popovers often measure as 0px on first open, so CDK virtual scroll
|
|
206
|
+
* renders no rows. Paint these placeholders outside the viewport until data arrives.
|
|
207
|
+
*/
|
|
208
|
+
this.showLoadingPlaceholder = computed(() => this.isLoading() && this.totalCount() === 0, /* @ts-ignore */
|
|
209
|
+
...(ngDevMode ? [{ debugName: "showLoadingPlaceholder" }] : /* istanbul ignore next */ []));
|
|
100
210
|
/** Viewport height so the popup grows with the items up to `maxVisibleItems`. */
|
|
101
211
|
this.viewportHeight = computed(() => {
|
|
102
212
|
const count = this.totalCount() || (this.isLoading() ? 3 : 1);
|
|
@@ -130,18 +240,49 @@ class AXLookupListViewBase {
|
|
|
130
240
|
effect((onCleanup) => {
|
|
131
241
|
const source = this.dataSource();
|
|
132
242
|
const list = new AXListDataSource({ source });
|
|
243
|
+
const hasRows = source.cachedItems.some((item) => item != null);
|
|
133
244
|
untracked(() => {
|
|
134
245
|
this.totalCount.set(source.totalCount);
|
|
135
|
-
this.isLoading.set(
|
|
246
|
+
this.isLoading.set(hasRows ? source.isLoading : true);
|
|
136
247
|
this.listDataSource.set(list);
|
|
137
248
|
});
|
|
138
249
|
const loadingSub = source.onLoadingChanged.subscribe((value) => this.isLoading.set(value));
|
|
139
|
-
const changedSub = source.onChanged.subscribe((e) =>
|
|
250
|
+
const changedSub = source.onChanged.subscribe((e) => {
|
|
251
|
+
const loaded = e.cachedItems.filter((item) => item != null).length;
|
|
252
|
+
this.totalCount.set(Math.max(e.totalCount || 0, loaded, e.items?.length ?? 0));
|
|
253
|
+
this.isLoading.set(false);
|
|
254
|
+
this.#checkViewportSize();
|
|
255
|
+
});
|
|
256
|
+
// Overlay first-open often emits viewChange { start: 0, end: 0 }, which never
|
|
257
|
+
// pages. Kick page 0 when the source is cold; reuse real rows on remount.
|
|
258
|
+
queueMicrotask(() => {
|
|
259
|
+
if (source.cachedItems.some((item) => item != null)) {
|
|
260
|
+
const loaded = source.cachedItems.filter((item) => item != null).length;
|
|
261
|
+
this.totalCount.set(Math.max(source.totalCount || 0, loaded));
|
|
262
|
+
this.isLoading.set(false);
|
|
263
|
+
this.#checkViewportSize();
|
|
264
|
+
return;
|
|
265
|
+
}
|
|
266
|
+
source.setPage(0);
|
|
267
|
+
});
|
|
140
268
|
onCleanup(() => {
|
|
141
269
|
loadingSub.unsubscribe();
|
|
142
270
|
changedSub.unsubscribe();
|
|
143
271
|
});
|
|
144
272
|
});
|
|
273
|
+
afterRenderEffect(() => {
|
|
274
|
+
this.viewportRef();
|
|
275
|
+
this.totalCount();
|
|
276
|
+
this.isLoading();
|
|
277
|
+
this.#checkViewportSize();
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
#checkViewportSize() {
|
|
281
|
+
const viewport = this.viewportRef();
|
|
282
|
+
if (!viewport) {
|
|
283
|
+
return;
|
|
284
|
+
}
|
|
285
|
+
this.#ngZone.run(() => viewport.checkViewportSize());
|
|
145
286
|
}
|
|
146
287
|
/** Moves keyboard focus to the first rendered list option. */
|
|
147
288
|
focusFirst() {
|
|
@@ -166,6 +307,15 @@ class AXLookupListViewBase {
|
|
|
166
307
|
}
|
|
167
308
|
this.itemClick.emit({ item, value: this.getValue(item) });
|
|
168
309
|
}
|
|
310
|
+
/**
|
|
311
|
+
* Commit on mousedown (not click) so a searchable trigger blur cannot destroy the
|
|
312
|
+
* list before the pick is applied.
|
|
313
|
+
*/
|
|
314
|
+
handleItemMouseDown(event, item) {
|
|
315
|
+
event.preventDefault();
|
|
316
|
+
event.stopPropagation();
|
|
317
|
+
this.handleItemClick(item);
|
|
318
|
+
}
|
|
169
319
|
handleItemKeypress(e, item) {
|
|
170
320
|
if (e.nativeEvent.key === 'Enter' || e.nativeEvent.code === 'Space') {
|
|
171
321
|
e.nativeEvent.stopPropagation();
|
|
@@ -232,7 +382,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
232
382
|
class AXLookupDropDownListComponent extends AXLookupListViewBase {
|
|
233
383
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupDropDownListComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
234
384
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXLookupDropDownListComponent, isStandalone: true, selector: "ax-lookup-drop-down-list", providers: [{ provide: AXLookupListViewBase, useExisting: AXLookupDropDownListComponent }], usesInheritance: true, ngImport: i0, template: `
|
|
235
|
-
@if (
|
|
385
|
+
@if (showLoadingPlaceholder()) {
|
|
386
|
+
<div class="ax-lookup-viewport" role="listbox">
|
|
387
|
+
@for (index of loadingPlaceholderIndexes; track index) {
|
|
388
|
+
<div class="ax-lookup-option-host ax-lookup-option" [style.height.px]="itemHeight()">
|
|
389
|
+
<ng-container [ngTemplateOutlet]="loadingRow" />
|
|
390
|
+
</div>
|
|
391
|
+
}
|
|
392
|
+
</div>
|
|
393
|
+
} @else if (isEmpty()) {
|
|
236
394
|
@if (emptyTemplate()) {
|
|
237
395
|
<ng-container [ngTemplateOutlet]="emptyTemplate()!" />
|
|
238
396
|
} @else {
|
|
@@ -253,18 +411,17 @@ class AXLookupDropDownListComponent extends AXLookupListViewBase {
|
|
|
253
411
|
<div
|
|
254
412
|
*cdkVirtualFor="let item of listDataSource(); let i = index; trackBy: trackByIndex"
|
|
255
413
|
role="option"
|
|
256
|
-
class="ax-lookup-option-host"
|
|
414
|
+
class="ax-lookup-option-host ax-lookup-option"
|
|
257
415
|
axListNavigationItem
|
|
258
416
|
#navItem="axListNavigationItem"
|
|
259
417
|
[style.height.px]="itemHeight()"
|
|
260
|
-
[class.ax-lookup-option]="!itemTemplate()"
|
|
261
418
|
[class.ax-state-alternate]="alternate() && i % 2 === 1"
|
|
262
419
|
[class.ax-state-selected]="item != null && isSelected(item)"
|
|
263
420
|
[class.ax-state-disabled]="item != null && isDisabled(item)"
|
|
264
421
|
[class.ax-state-active]="navItem.isActive()"
|
|
265
422
|
[attr.aria-selected]="item != null ? isSelected(item) : null"
|
|
266
423
|
(mouseenter)="activateNavItem(nav, navItem)"
|
|
267
|
-
(
|
|
424
|
+
(mousedown)="handleItemMouseDown($event, item)"
|
|
268
425
|
(onKeypress)="handleItemKeypress($event, item)"
|
|
269
426
|
>
|
|
270
427
|
@if (item != null) {
|
|
@@ -272,9 +429,10 @@ class AXLookupDropDownListComponent extends AXLookupListViewBase {
|
|
|
272
429
|
<ng-container [ngTemplateOutlet]="itemTemplate()!" [ngTemplateOutletContext]="{ $implicit: item }" />
|
|
273
430
|
} @else {
|
|
274
431
|
<span class="ax-lookup-option-text">{{ getText(item) }}</span>
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
432
|
+
}
|
|
433
|
+
<!-- Keep check outside itemTemplate so custom rows (platform widgets) still show selection. -->
|
|
434
|
+
@if (isSelected(item)) {
|
|
435
|
+
<span class="ax-lookup-option-check ax-icon ax-icon-check text-primary" aria-hidden="true"></span>
|
|
278
436
|
}
|
|
279
437
|
} @else {
|
|
280
438
|
<ng-container [ngTemplateOutlet]="loadingRow" />
|
|
@@ -290,7 +448,7 @@ class AXLookupDropDownListComponent extends AXLookupListViewBase {
|
|
|
290
448
|
<span class="ax-lookup-option-loading">{{ '@acorex:common.status.loading' | translate | async }}</span>
|
|
291
449
|
}
|
|
292
450
|
</ng-template>
|
|
293
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i1.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i1.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i1.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type:
|
|
451
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i1.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i1.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i1.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: AXListNavigationModule }, { kind: "directive", type: i2.AXListNavigationDirective, selector: "[axListNavigation]", inputs: ["orientation"], outputs: ["onNavigationChanged", "onKeypress"], exportAs: ["axListNavigation"] }, { kind: "directive", type: i2.AXListNavigationItemDirective, selector: "[axListNavigationItem]", outputs: ["onKeypress"], exportAs: ["axListNavigationItem"] }, { kind: "pipe", type: AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
294
452
|
}
|
|
295
453
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupDropDownListComponent, decorators: [{
|
|
296
454
|
type: Component,
|
|
@@ -298,17 +456,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
298
456
|
selector: 'ax-lookup-drop-down-list',
|
|
299
457
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
300
458
|
encapsulation: ViewEncapsulation.None,
|
|
301
|
-
imports: [
|
|
302
|
-
ScrollingModule,
|
|
303
|
-
NgTemplateOutlet,
|
|
304
|
-
AXTranslatorPipe,
|
|
305
|
-
AsyncPipe,
|
|
306
|
-
AXDecoratorModule,
|
|
307
|
-
AXListNavigationModule,
|
|
308
|
-
],
|
|
459
|
+
imports: [ScrollingModule, NgTemplateOutlet, AXTranslatorPipe, AsyncPipe, AXListNavigationModule],
|
|
309
460
|
providers: [{ provide: AXLookupListViewBase, useExisting: AXLookupDropDownListComponent }],
|
|
310
461
|
template: `
|
|
311
|
-
@if (
|
|
462
|
+
@if (showLoadingPlaceholder()) {
|
|
463
|
+
<div class="ax-lookup-viewport" role="listbox">
|
|
464
|
+
@for (index of loadingPlaceholderIndexes; track index) {
|
|
465
|
+
<div class="ax-lookup-option-host ax-lookup-option" [style.height.px]="itemHeight()">
|
|
466
|
+
<ng-container [ngTemplateOutlet]="loadingRow" />
|
|
467
|
+
</div>
|
|
468
|
+
}
|
|
469
|
+
</div>
|
|
470
|
+
} @else if (isEmpty()) {
|
|
312
471
|
@if (emptyTemplate()) {
|
|
313
472
|
<ng-container [ngTemplateOutlet]="emptyTemplate()!" />
|
|
314
473
|
} @else {
|
|
@@ -329,18 +488,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
329
488
|
<div
|
|
330
489
|
*cdkVirtualFor="let item of listDataSource(); let i = index; trackBy: trackByIndex"
|
|
331
490
|
role="option"
|
|
332
|
-
class="ax-lookup-option-host"
|
|
491
|
+
class="ax-lookup-option-host ax-lookup-option"
|
|
333
492
|
axListNavigationItem
|
|
334
493
|
#navItem="axListNavigationItem"
|
|
335
494
|
[style.height.px]="itemHeight()"
|
|
336
|
-
[class.ax-lookup-option]="!itemTemplate()"
|
|
337
495
|
[class.ax-state-alternate]="alternate() && i % 2 === 1"
|
|
338
496
|
[class.ax-state-selected]="item != null && isSelected(item)"
|
|
339
497
|
[class.ax-state-disabled]="item != null && isDisabled(item)"
|
|
340
498
|
[class.ax-state-active]="navItem.isActive()"
|
|
341
499
|
[attr.aria-selected]="item != null ? isSelected(item) : null"
|
|
342
500
|
(mouseenter)="activateNavItem(nav, navItem)"
|
|
343
|
-
(
|
|
501
|
+
(mousedown)="handleItemMouseDown($event, item)"
|
|
344
502
|
(onKeypress)="handleItemKeypress($event, item)"
|
|
345
503
|
>
|
|
346
504
|
@if (item != null) {
|
|
@@ -348,9 +506,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
348
506
|
<ng-container [ngTemplateOutlet]="itemTemplate()!" [ngTemplateOutletContext]="{ $implicit: item }" />
|
|
349
507
|
} @else {
|
|
350
508
|
<span class="ax-lookup-option-text">{{ getText(item) }}</span>
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
509
|
+
}
|
|
510
|
+
<!-- Keep check outside itemTemplate so custom rows (platform widgets) still show selection. -->
|
|
511
|
+
@if (isSelected(item)) {
|
|
512
|
+
<span class="ax-lookup-option-check ax-icon ax-icon-check text-primary" aria-hidden="true"></span>
|
|
354
513
|
}
|
|
355
514
|
} @else {
|
|
356
515
|
<ng-container [ngTemplateOutlet]="loadingRow" />
|
|
@@ -469,6 +628,280 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
469
628
|
}]
|
|
470
629
|
}], 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"] }] } });
|
|
471
630
|
|
|
631
|
+
/**
|
|
632
|
+
* Internal mini component for the `multi-column-tree` lookup mode:
|
|
633
|
+
* a multi-column `ax-data-table` with a drop-down tree inside it.
|
|
634
|
+
* Rows expand/collapse via the data-table hierarchy (`parentField` / nested `children`).
|
|
635
|
+
*
|
|
636
|
+
* @category Components
|
|
637
|
+
*/
|
|
638
|
+
class AXLookupMultiColumnTreeComponent {
|
|
639
|
+
constructor() {
|
|
640
|
+
/**
|
|
641
|
+
* The datasource providing hierarchical rows (roots on load, children via `parentField`).
|
|
642
|
+
*/
|
|
643
|
+
this.dataSource = input.required(/* @ts-ignore */
|
|
644
|
+
...(ngDevMode ? [{ debugName: "dataSource" }] : /* istanbul ignore next */ []));
|
|
645
|
+
/**
|
|
646
|
+
* The item property used as the selection value (also the data-table row key).
|
|
647
|
+
*/
|
|
648
|
+
this.valueField = input('id', /* @ts-ignore */
|
|
649
|
+
...(ngDevMode ? [{ debugName: "valueField" }] : /* istanbul ignore next */ []));
|
|
650
|
+
/**
|
|
651
|
+
* The item property used as the display text. The matching column shows the expand control
|
|
652
|
+
* unless another column sets `expandHandler`.
|
|
653
|
+
*/
|
|
654
|
+
this.textField = input('text', /* @ts-ignore */
|
|
655
|
+
...(ngDevMode ? [{ debugName: "textField" }] : /* istanbul ignore next */ []));
|
|
656
|
+
/**
|
|
657
|
+
* The item property marking an item as disabled.
|
|
658
|
+
*/
|
|
659
|
+
this.disabledField = input('disabled', /* @ts-ignore */
|
|
660
|
+
...(ngDevMode ? [{ debugName: "disabledField" }] : /* istanbul ignore next */ []));
|
|
661
|
+
/**
|
|
662
|
+
* Field used by the data table to fetch children (`AXDataSource` filter on expand).
|
|
663
|
+
*/
|
|
664
|
+
this.parentField = input('parentId', /* @ts-ignore */
|
|
665
|
+
...(ngDevMode ? [{ debugName: "parentField" }] : /* istanbul ignore next */ []));
|
|
666
|
+
/**
|
|
667
|
+
* Field used by the data table to decide whether a row can expand.
|
|
668
|
+
*/
|
|
669
|
+
this.hasChildrenField = input('hasChild', /* @ts-ignore */
|
|
670
|
+
...(ngDevMode ? [{ debugName: "hasChildrenField" }] : /* istanbul ignore next */ []));
|
|
671
|
+
/**
|
|
672
|
+
* Currently selected values (always an array, even for single selection).
|
|
673
|
+
*/
|
|
674
|
+
this.selectedValues = input([], /* @ts-ignore */
|
|
675
|
+
...(ngDevMode ? [{ debugName: "selectedValues" }] : /* istanbul ignore next */ []));
|
|
676
|
+
/**
|
|
677
|
+
* The fixed row height in pixels passed to the data table.
|
|
678
|
+
*/
|
|
679
|
+
this.itemHeight = input(40, /* @ts-ignore */
|
|
680
|
+
...(ngDevMode ? [{ debugName: "itemHeight" }] : /* istanbul ignore next */ []));
|
|
681
|
+
/**
|
|
682
|
+
* The maximum number of body rows visible before the table scrolls.
|
|
683
|
+
*/
|
|
684
|
+
this.maxVisibleItems = input(8, /* @ts-ignore */
|
|
685
|
+
...(ngDevMode ? [{ debugName: "maxVisibleItems" }] : /* istanbul ignore next */ []));
|
|
686
|
+
/**
|
|
687
|
+
* Column definitions rendered as `ax-text-column` instances.
|
|
688
|
+
*/
|
|
689
|
+
this.columns = input([], /* @ts-ignore */
|
|
690
|
+
...(ngDevMode ? [{ debugName: "columns" }] : /* istanbul ignore next */ []));
|
|
691
|
+
/**
|
|
692
|
+
* Optional custom row content. Context: `$implicit` is the row item.
|
|
693
|
+
* When set, replaces the default multi-column cell layout.
|
|
694
|
+
*/
|
|
695
|
+
this.itemTemplate = input(undefined, /* @ts-ignore */
|
|
696
|
+
...(ngDevMode ? [{ debugName: "itemTemplate" }] : /* istanbul ignore next */ []));
|
|
697
|
+
/**
|
|
698
|
+
* Custom template rendered when the datasource has no items.
|
|
699
|
+
*/
|
|
700
|
+
this.emptyTemplate = input(undefined, /* @ts-ignore */
|
|
701
|
+
...(ngDevMode ? [{ debugName: "emptyTemplate" }] : /* istanbul ignore next */ []));
|
|
702
|
+
/**
|
|
703
|
+
* Custom template rendered while the table is loading.
|
|
704
|
+
*/
|
|
705
|
+
this.loadingTemplate = input(undefined, /* @ts-ignore */
|
|
706
|
+
...(ngDevMode ? [{ debugName: "loadingTemplate" }] : /* istanbul ignore next */ []));
|
|
707
|
+
/**
|
|
708
|
+
* When `true`, table rows use alternating background colors for easier scanning.
|
|
709
|
+
*/
|
|
710
|
+
this.alternate = input(false, /* @ts-ignore */
|
|
711
|
+
...(ngDevMode ? [{ debugName: "alternate" }] : /* istanbul ignore next */ []));
|
|
712
|
+
/**
|
|
713
|
+
* Emitted when the user picks a row (not when expanding/collapsing).
|
|
714
|
+
*/
|
|
715
|
+
this.itemClick = output();
|
|
716
|
+
/**
|
|
717
|
+
* Header (~40px) + up to `maxVisibleItems` body rows. Expanded children scroll inside.
|
|
718
|
+
*/
|
|
719
|
+
this.tableHeight = computed(() => 40 + this.maxVisibleItems() * this.itemHeight(), /* @ts-ignore */
|
|
720
|
+
...(ngDevMode ? [{ debugName: "tableHeight" }] : /* istanbul ignore next */ []));
|
|
721
|
+
this.loadingConfig = computed(() => ({
|
|
722
|
+
enabled: true,
|
|
723
|
+
animation: true,
|
|
724
|
+
loadingTemplate: this.loadingTemplate(),
|
|
725
|
+
}), /* @ts-ignore */
|
|
726
|
+
...(ngDevMode ? [{ debugName: "loadingConfig" }] : /* istanbul ignore next */ []));
|
|
727
|
+
this.resolveRowCssClass = (row) => {
|
|
728
|
+
const item = row;
|
|
729
|
+
if (!item) {
|
|
730
|
+
return '';
|
|
731
|
+
}
|
|
732
|
+
const classes = [];
|
|
733
|
+
if (this.isSelected(item)) {
|
|
734
|
+
classes.push('ax-state-selected');
|
|
735
|
+
}
|
|
736
|
+
if (this.isDisabled(item)) {
|
|
737
|
+
classes.push('ax-state-disabled');
|
|
738
|
+
}
|
|
739
|
+
return classes.join(' ');
|
|
740
|
+
};
|
|
741
|
+
}
|
|
742
|
+
/** Stable unique key for `@for` — avoids NG0955 when `field` is missing or duplicated. */
|
|
743
|
+
trackColumnKey(index, column) {
|
|
744
|
+
return `${column?.field ?? ''}::${index}`;
|
|
745
|
+
}
|
|
746
|
+
resolveColumnWidth(column) {
|
|
747
|
+
const width = column.width?.trim();
|
|
748
|
+
if (!width || width.includes('fr')) {
|
|
749
|
+
return 'auto';
|
|
750
|
+
}
|
|
751
|
+
return width;
|
|
752
|
+
}
|
|
753
|
+
isExpandColumn(index, column) {
|
|
754
|
+
if (column.expandHandler === true) {
|
|
755
|
+
return true;
|
|
756
|
+
}
|
|
757
|
+
if (this.columns().some((item) => item.expandHandler === true)) {
|
|
758
|
+
return false;
|
|
759
|
+
}
|
|
760
|
+
const textIndex = this.columns().findIndex((item) => item.field === this.textField());
|
|
761
|
+
return (textIndex === -1 ? 0 : textIndex) === index;
|
|
762
|
+
}
|
|
763
|
+
handleRowClick(event) {
|
|
764
|
+
this.handleItemClick(event.data);
|
|
765
|
+
}
|
|
766
|
+
handleItemClick(item) {
|
|
767
|
+
if (!item || this.isDisabled(item)) {
|
|
768
|
+
return;
|
|
769
|
+
}
|
|
770
|
+
this.itemClick.emit({ item, value: this.getValue(item) });
|
|
771
|
+
}
|
|
772
|
+
handleItemMouseDown(event, item) {
|
|
773
|
+
event.preventDefault();
|
|
774
|
+
event.stopPropagation();
|
|
775
|
+
this.handleItemClick(item);
|
|
776
|
+
}
|
|
777
|
+
isSelected(item) {
|
|
778
|
+
const value = this.getValue(item);
|
|
779
|
+
return this.selectedValues().some((v) => v == value);
|
|
780
|
+
}
|
|
781
|
+
isDisabled(item) {
|
|
782
|
+
return Boolean(item?.[this.disabledField()]);
|
|
783
|
+
}
|
|
784
|
+
getValue(item) {
|
|
785
|
+
return item?.[this.valueField()];
|
|
786
|
+
}
|
|
787
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupMultiColumnTreeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
788
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXLookupMultiColumnTreeComponent, isStandalone: true, selector: "ax-lookup-multi-column-tree", inputs: { dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: true, transformFunction: null }, valueField: { classPropertyName: "valueField", publicName: "valueField", isSignal: true, isRequired: false, transformFunction: null }, textField: { classPropertyName: "textField", publicName: "textField", isSignal: true, isRequired: false, transformFunction: null }, disabledField: { classPropertyName: "disabledField", publicName: "disabledField", isSignal: true, isRequired: false, transformFunction: null }, parentField: { classPropertyName: "parentField", publicName: "parentField", isSignal: true, isRequired: false, transformFunction: null }, hasChildrenField: { classPropertyName: "hasChildrenField", publicName: "hasChildrenField", isSignal: true, isRequired: false, transformFunction: null }, selectedValues: { classPropertyName: "selectedValues", publicName: "selectedValues", isSignal: true, isRequired: false, transformFunction: null }, itemHeight: { classPropertyName: "itemHeight", publicName: "itemHeight", isSignal: true, isRequired: false, transformFunction: null }, maxVisibleItems: { classPropertyName: "maxVisibleItems", publicName: "maxVisibleItems", isSignal: true, isRequired: false, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, itemTemplate: { classPropertyName: "itemTemplate", publicName: "itemTemplate", isSignal: true, isRequired: false, transformFunction: null }, emptyTemplate: { classPropertyName: "emptyTemplate", publicName: "emptyTemplate", isSignal: true, isRequired: false, transformFunction: null }, loadingTemplate: { classPropertyName: "loadingTemplate", publicName: "loadingTemplate", isSignal: true, isRequired: false, transformFunction: null }, alternate: { classPropertyName: "alternate", publicName: "alternate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemClick: "itemClick" }, host: { properties: { "style.height.px": "tableHeight()" }, classAttribute: "ax-lookup-multi-column ax-lookup-multi-column-tree" }, ngImport: i0, template: `
|
|
789
|
+
<ax-data-table
|
|
790
|
+
class="ax-lookup-multi-column-table"
|
|
791
|
+
look="minimal"
|
|
792
|
+
[dataSource]="dataSource()"
|
|
793
|
+
[parentField]="parentField()"
|
|
794
|
+
[hasChildrenField]="hasChildrenField()"
|
|
795
|
+
[itemHeight]="itemHeight()"
|
|
796
|
+
[alternative]="alternate()"
|
|
797
|
+
[emptyTemplate]="emptyTemplate()"
|
|
798
|
+
[loading]="loadingConfig()"
|
|
799
|
+
[paging]="false"
|
|
800
|
+
[showHeader]="true"
|
|
801
|
+
[fixedHeader]="true"
|
|
802
|
+
[showFooter]="false"
|
|
803
|
+
[allowReordering]="false"
|
|
804
|
+
[rowTemplate]="itemTemplate() ? customRowTemplate : undefined"
|
|
805
|
+
[rowCssClass]="resolveRowCssClass"
|
|
806
|
+
(onRowClick)="handleRowClick($event)"
|
|
807
|
+
>
|
|
808
|
+
@for (column of columns(); track trackColumnKey($index, column)) {
|
|
809
|
+
<ax-text-column
|
|
810
|
+
[dataField]="column.field"
|
|
811
|
+
[caption]="column.title"
|
|
812
|
+
[width]="resolveColumnWidth(column)"
|
|
813
|
+
[expandHandler]="isExpandColumn($index, column)"
|
|
814
|
+
[allowSorting]="false"
|
|
815
|
+
[allowResizing]="false"
|
|
816
|
+
/>
|
|
817
|
+
}
|
|
818
|
+
</ax-data-table>
|
|
819
|
+
|
|
820
|
+
<ng-template #customRowTemplate let-ctx>
|
|
821
|
+
<tr
|
|
822
|
+
[class.ax-state-selected]="ctx.data != null && isSelected(ctx.data)"
|
|
823
|
+
[class.ax-state-disabled]="ctx.data != null && isDisabled(ctx.data)"
|
|
824
|
+
[style.height.px]="itemHeight()"
|
|
825
|
+
[style.max-height.px]="itemHeight()"
|
|
826
|
+
(mousedown)="handleItemMouseDown($event, ctx.data)"
|
|
827
|
+
>
|
|
828
|
+
<td [attr.colspan]="columns().length || 1">
|
|
829
|
+
@if (ctx.data != null && itemTemplate()) {
|
|
830
|
+
<ng-container
|
|
831
|
+
[ngTemplateOutlet]="itemTemplate()!"
|
|
832
|
+
[ngTemplateOutletContext]="{ $implicit: ctx.data }"
|
|
833
|
+
/>
|
|
834
|
+
}
|
|
835
|
+
</td>
|
|
836
|
+
</tr>
|
|
837
|
+
</ng-template>
|
|
838
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: AXDataTableComponent, selector: "ax-data-table", inputs: ["dataSource", "selectedRows", "parentField", "hasChildrenField", "rowDetailsTemplate", "rowCssClass", "cellCssClass", "highlightText", "look", "rowTemplate", "emptyTemplate", "noDataTemplate", "alternative", "showHeader", "fixedHeader", "showFooter", "fixedFooter", "itemHeight", "allowReordering", "paging", "fetchDataMode", "loading", "focusedRow"], outputs: ["selectedRowsChange", "focusedRowChange", "onRowClick", "onRowDbClick", "onColumnsOrderChanged", "onColumnSizeChanged", "onPageChanged"] }, { kind: "component", type: AXDataTableTextColumnComponent, selector: "ax-text-column", inputs: ["width", "caption", "allowSorting", "allowResizing", "fixed", "hasTitle", "customExpandIcon", "customCollapseIcon", "dataField", "expandHandler", "wrapText", "cellTemplate", "footerTemplate", "headerTemplate", "format", "formatOptions"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
839
|
+
}
|
|
840
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupMultiColumnTreeComponent, decorators: [{
|
|
841
|
+
type: Component,
|
|
842
|
+
args: [{
|
|
843
|
+
selector: 'ax-lookup-multi-column-tree',
|
|
844
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
845
|
+
encapsulation: ViewEncapsulation.None,
|
|
846
|
+
imports: [NgTemplateOutlet, AXDataTableComponent, AXDataTableTextColumnComponent],
|
|
847
|
+
host: {
|
|
848
|
+
class: 'ax-lookup-multi-column ax-lookup-multi-column-tree',
|
|
849
|
+
'[style.height.px]': 'tableHeight()',
|
|
850
|
+
},
|
|
851
|
+
template: `
|
|
852
|
+
<ax-data-table
|
|
853
|
+
class="ax-lookup-multi-column-table"
|
|
854
|
+
look="minimal"
|
|
855
|
+
[dataSource]="dataSource()"
|
|
856
|
+
[parentField]="parentField()"
|
|
857
|
+
[hasChildrenField]="hasChildrenField()"
|
|
858
|
+
[itemHeight]="itemHeight()"
|
|
859
|
+
[alternative]="alternate()"
|
|
860
|
+
[emptyTemplate]="emptyTemplate()"
|
|
861
|
+
[loading]="loadingConfig()"
|
|
862
|
+
[paging]="false"
|
|
863
|
+
[showHeader]="true"
|
|
864
|
+
[fixedHeader]="true"
|
|
865
|
+
[showFooter]="false"
|
|
866
|
+
[allowReordering]="false"
|
|
867
|
+
[rowTemplate]="itemTemplate() ? customRowTemplate : undefined"
|
|
868
|
+
[rowCssClass]="resolveRowCssClass"
|
|
869
|
+
(onRowClick)="handleRowClick($event)"
|
|
870
|
+
>
|
|
871
|
+
@for (column of columns(); track trackColumnKey($index, column)) {
|
|
872
|
+
<ax-text-column
|
|
873
|
+
[dataField]="column.field"
|
|
874
|
+
[caption]="column.title"
|
|
875
|
+
[width]="resolveColumnWidth(column)"
|
|
876
|
+
[expandHandler]="isExpandColumn($index, column)"
|
|
877
|
+
[allowSorting]="false"
|
|
878
|
+
[allowResizing]="false"
|
|
879
|
+
/>
|
|
880
|
+
}
|
|
881
|
+
</ax-data-table>
|
|
882
|
+
|
|
883
|
+
<ng-template #customRowTemplate let-ctx>
|
|
884
|
+
<tr
|
|
885
|
+
[class.ax-state-selected]="ctx.data != null && isSelected(ctx.data)"
|
|
886
|
+
[class.ax-state-disabled]="ctx.data != null && isDisabled(ctx.data)"
|
|
887
|
+
[style.height.px]="itemHeight()"
|
|
888
|
+
[style.max-height.px]="itemHeight()"
|
|
889
|
+
(mousedown)="handleItemMouseDown($event, ctx.data)"
|
|
890
|
+
>
|
|
891
|
+
<td [attr.colspan]="columns().length || 1">
|
|
892
|
+
@if (ctx.data != null && itemTemplate()) {
|
|
893
|
+
<ng-container
|
|
894
|
+
[ngTemplateOutlet]="itemTemplate()!"
|
|
895
|
+
[ngTemplateOutletContext]="{ $implicit: ctx.data }"
|
|
896
|
+
/>
|
|
897
|
+
}
|
|
898
|
+
</td>
|
|
899
|
+
</tr>
|
|
900
|
+
</ng-template>
|
|
901
|
+
`,
|
|
902
|
+
}]
|
|
903
|
+
}], propDecorators: { dataSource: [{ type: i0.Input, args: [{ isSignal: true, alias: "dataSource", required: true }] }], valueField: [{ type: i0.Input, args: [{ isSignal: true, alias: "valueField", required: false }] }], textField: [{ type: i0.Input, args: [{ isSignal: true, alias: "textField", required: false }] }], disabledField: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabledField", required: false }] }], parentField: [{ type: i0.Input, args: [{ isSignal: true, alias: "parentField", required: false }] }], hasChildrenField: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasChildrenField", required: false }] }], selectedValues: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedValues", required: false }] }], itemHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemHeight", required: false }] }], maxVisibleItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxVisibleItems", required: false }] }], columns: [{ type: i0.Input, args: [{ isSignal: true, alias: "columns", required: false }] }], itemTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemTemplate", required: false }] }], emptyTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "emptyTemplate", required: false }] }], loadingTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "loadingTemplate", required: false }] }], alternate: [{ type: i0.Input, args: [{ isSignal: true, alias: "alternate", required: false }] }], itemClick: [{ type: i0.Output, args: ["itemClick"] }] } });
|
|
904
|
+
|
|
472
905
|
/**
|
|
473
906
|
* Internal mini component for the `multi-column` lookup mode:
|
|
474
907
|
* renders selectable rows in an `ax-data-table` grid and loads further
|
|
@@ -606,19 +1039,18 @@ class AXLookupMultiColumnComponent {
|
|
|
606
1039
|
const source = this.dataSource();
|
|
607
1040
|
this.tableDataSource.config.key = source.config.key || this.valueField();
|
|
608
1041
|
untracked(() => {
|
|
609
|
-
this.#
|
|
610
|
-
this.#totalCount.set(0);
|
|
611
|
-
this.#syncTablePageSize();
|
|
612
|
-
this.tableDataSource.refresh({ reset: true });
|
|
1042
|
+
this.#applyLoadedItems(source.cachedItems, source.totalCount);
|
|
613
1043
|
});
|
|
614
1044
|
const changedSub = source.onChanged.subscribe((event) => {
|
|
615
|
-
this.#
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
1045
|
+
this.#applyLoadedItems(event.cachedItems, event.totalCount);
|
|
1046
|
+
});
|
|
1047
|
+
// Fetch page 0 only when the source has never loaded. Reopen remounts this
|
|
1048
|
+
// view; setPage(0) is a no-op on a warm source and must not force a new API call.
|
|
1049
|
+
queueMicrotask(() => {
|
|
1050
|
+
if (!source.cachedItems.some((item) => item != null)) {
|
|
1051
|
+
source.setPage(0);
|
|
1052
|
+
}
|
|
619
1053
|
});
|
|
620
|
-
// Kick the first page; later pages come from scroll.
|
|
621
|
-
queueMicrotask(() => source.setPage(0));
|
|
622
1054
|
onCleanup(() => changedSub.unsubscribe());
|
|
623
1055
|
});
|
|
624
1056
|
effect((onCleanup) => {
|
|
@@ -653,6 +1085,12 @@ class AXLookupMultiColumnComponent {
|
|
|
653
1085
|
}
|
|
654
1086
|
return width;
|
|
655
1087
|
}
|
|
1088
|
+
#applyLoadedItems(cachedItems, totalCount) {
|
|
1089
|
+
this.#loadedItems = cachedItems.filter((item) => item != null);
|
|
1090
|
+
this.#totalCount.set(totalCount);
|
|
1091
|
+
this.#syncTablePageSize();
|
|
1092
|
+
this.tableDataSource.refresh({ reset: true });
|
|
1093
|
+
}
|
|
656
1094
|
#syncTablePageSize() {
|
|
657
1095
|
this.tableDataSource.config.pageSize = Math.max(this.#loadedItems.length, 1);
|
|
658
1096
|
}
|
|
@@ -665,6 +1103,11 @@ class AXLookupMultiColumnComponent {
|
|
|
665
1103
|
}
|
|
666
1104
|
this.itemClick.emit({ item, value: this.getValue(item) });
|
|
667
1105
|
}
|
|
1106
|
+
handleItemMouseDown(event, item) {
|
|
1107
|
+
event.preventDefault();
|
|
1108
|
+
event.stopPropagation();
|
|
1109
|
+
this.handleItemClick(item);
|
|
1110
|
+
}
|
|
668
1111
|
isSelected(item) {
|
|
669
1112
|
const value = this.getValue(item);
|
|
670
1113
|
return this.selectedValues().some((v) => v == value);
|
|
@@ -727,7 +1170,7 @@ class AXLookupMultiColumnComponent {
|
|
|
727
1170
|
[class.ax-state-disabled]="ctx.data != null && isDisabled(ctx.data)"
|
|
728
1171
|
[style.height.px]="itemHeight()"
|
|
729
1172
|
[style.max-height.px]="itemHeight()"
|
|
730
|
-
(
|
|
1173
|
+
(mousedown)="handleItemMouseDown($event, ctx.data)"
|
|
731
1174
|
>
|
|
732
1175
|
<td [attr.colspan]="columns().length || 1">
|
|
733
1176
|
@if (ctx.data != null && itemTemplate()) {
|
|
@@ -787,7 +1230,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
787
1230
|
[class.ax-state-disabled]="ctx.data != null && isDisabled(ctx.data)"
|
|
788
1231
|
[style.height.px]="itemHeight()"
|
|
789
1232
|
[style.max-height.px]="itemHeight()"
|
|
790
|
-
(
|
|
1233
|
+
(mousedown)="handleItemMouseDown($event, ctx.data)"
|
|
791
1234
|
>
|
|
792
1235
|
<td [attr.colspan]="columns().length || 1">
|
|
793
1236
|
@if (ctx.data != null && itemTemplate()) {
|
|
@@ -912,7 +1355,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
912
1355
|
class AXLookupMultiSelectComponent extends AXLookupListViewBase {
|
|
913
1356
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupMultiSelectComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
914
1357
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXLookupMultiSelectComponent, isStandalone: true, selector: "ax-lookup-multi-select", providers: [{ provide: AXLookupListViewBase, useExisting: AXLookupMultiSelectComponent }], usesInheritance: true, ngImport: i0, template: `
|
|
915
|
-
@if (
|
|
1358
|
+
@if (showLoadingPlaceholder()) {
|
|
1359
|
+
<div class="ax-lookup-viewport" role="listbox" aria-multiselectable="true">
|
|
1360
|
+
@for (index of loadingPlaceholderIndexes; track index) {
|
|
1361
|
+
<div class="ax-lookup-option-host ax-lookup-option" [style.height.px]="itemHeight()">
|
|
1362
|
+
<ng-container [ngTemplateOutlet]="loadingRow" />
|
|
1363
|
+
</div>
|
|
1364
|
+
}
|
|
1365
|
+
</div>
|
|
1366
|
+
} @else if (isEmpty()) {
|
|
916
1367
|
@if (emptyTemplate()) {
|
|
917
1368
|
<ng-container [ngTemplateOutlet]="emptyTemplate()!" />
|
|
918
1369
|
} @else {
|
|
@@ -934,11 +1385,10 @@ class AXLookupMultiSelectComponent extends AXLookupListViewBase {
|
|
|
934
1385
|
<div
|
|
935
1386
|
*cdkVirtualFor="let item of listDataSource(); let i = index; trackBy: trackByIndex"
|
|
936
1387
|
role="option"
|
|
937
|
-
class="ax-lookup-option-host"
|
|
1388
|
+
class="ax-lookup-option-host ax-lookup-option"
|
|
938
1389
|
axListNavigationItem
|
|
939
1390
|
#navItem="axListNavigationItem"
|
|
940
1391
|
[style.height.px]="itemHeight()"
|
|
941
|
-
[class.ax-lookup-option]="!itemTemplate()"
|
|
942
1392
|
[class.ax-lookup-option-host--check]="!!itemTemplate()"
|
|
943
1393
|
[class.ax-state-alternate]="alternate() && i % 2 === 1"
|
|
944
1394
|
[class.ax-state-selected]="item != null && isSelected(item)"
|
|
@@ -946,7 +1396,7 @@ class AXLookupMultiSelectComponent extends AXLookupListViewBase {
|
|
|
946
1396
|
[class.ax-state-active]="navItem.isActive()"
|
|
947
1397
|
[attr.aria-selected]="item != null ? isSelected(item) : null"
|
|
948
1398
|
(mouseenter)="activateNavItem(nav, navItem)"
|
|
949
|
-
(
|
|
1399
|
+
(mousedown)="handleItemMouseDown($event, item)"
|
|
950
1400
|
(onKeypress)="handleItemKeypress($event, item)"
|
|
951
1401
|
>
|
|
952
1402
|
@if (item != null) {
|
|
@@ -976,7 +1426,7 @@ class AXLookupMultiSelectComponent extends AXLookupListViewBase {
|
|
|
976
1426
|
<span class="ax-lookup-option-loading">{{ '@acorex:common.status.loading' | translate | async }}</span>
|
|
977
1427
|
}
|
|
978
1428
|
</ng-template>
|
|
979
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i1.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i1.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i1.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: AXListNavigationModule }, { kind: "directive", type:
|
|
1429
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i1.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i1.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i1.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: AXListNavigationModule }, { kind: "directive", type: i2.AXListNavigationDirective, selector: "[axListNavigation]", inputs: ["orientation"], outputs: ["onNavigationChanged", "onKeypress"], exportAs: ["axListNavigation"] }, { kind: "directive", type: i2.AXListNavigationItemDirective, selector: "[axListNavigationItem]", outputs: ["onKeypress"], exportAs: ["axListNavigationItem"] }, { kind: "pipe", type: AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
980
1430
|
}
|
|
981
1431
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupMultiSelectComponent, decorators: [{
|
|
982
1432
|
type: Component,
|
|
@@ -987,7 +1437,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
987
1437
|
imports: [ScrollingModule, NgTemplateOutlet, AXTranslatorPipe, AsyncPipe, AXListNavigationModule],
|
|
988
1438
|
providers: [{ provide: AXLookupListViewBase, useExisting: AXLookupMultiSelectComponent }],
|
|
989
1439
|
template: `
|
|
990
|
-
@if (
|
|
1440
|
+
@if (showLoadingPlaceholder()) {
|
|
1441
|
+
<div class="ax-lookup-viewport" role="listbox" aria-multiselectable="true">
|
|
1442
|
+
@for (index of loadingPlaceholderIndexes; track index) {
|
|
1443
|
+
<div class="ax-lookup-option-host ax-lookup-option" [style.height.px]="itemHeight()">
|
|
1444
|
+
<ng-container [ngTemplateOutlet]="loadingRow" />
|
|
1445
|
+
</div>
|
|
1446
|
+
}
|
|
1447
|
+
</div>
|
|
1448
|
+
} @else if (isEmpty()) {
|
|
991
1449
|
@if (emptyTemplate()) {
|
|
992
1450
|
<ng-container [ngTemplateOutlet]="emptyTemplate()!" />
|
|
993
1451
|
} @else {
|
|
@@ -1009,11 +1467,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
1009
1467
|
<div
|
|
1010
1468
|
*cdkVirtualFor="let item of listDataSource(); let i = index; trackBy: trackByIndex"
|
|
1011
1469
|
role="option"
|
|
1012
|
-
class="ax-lookup-option-host"
|
|
1470
|
+
class="ax-lookup-option-host ax-lookup-option"
|
|
1013
1471
|
axListNavigationItem
|
|
1014
1472
|
#navItem="axListNavigationItem"
|
|
1015
1473
|
[style.height.px]="itemHeight()"
|
|
1016
|
-
[class.ax-lookup-option]="!itemTemplate()"
|
|
1017
1474
|
[class.ax-lookup-option-host--check]="!!itemTemplate()"
|
|
1018
1475
|
[class.ax-state-alternate]="alternate() && i % 2 === 1"
|
|
1019
1476
|
[class.ax-state-selected]="item != null && isSelected(item)"
|
|
@@ -1021,7 +1478,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
1021
1478
|
[class.ax-state-active]="navItem.isActive()"
|
|
1022
1479
|
[attr.aria-selected]="item != null ? isSelected(item) : null"
|
|
1023
1480
|
(mouseenter)="activateNavItem(nav, navItem)"
|
|
1024
|
-
(
|
|
1481
|
+
(mousedown)="handleItemMouseDown($event, item)"
|
|
1025
1482
|
(onKeypress)="handleItemKeypress($event, item)"
|
|
1026
1483
|
>
|
|
1027
1484
|
@if (item != null) {
|
|
@@ -1056,14 +1513,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
1056
1513
|
}] });
|
|
1057
1514
|
|
|
1058
1515
|
/**
|
|
1059
|
-
* An advanced drop-down (lookup) editor with
|
|
1516
|
+
* An advanced drop-down (lookup) editor with six modes, `AXDataSource` support, and virtual scrolling.
|
|
1060
1517
|
*
|
|
1061
1518
|
* Modes (each rendered by its own internal mini component):
|
|
1062
1519
|
* - `drop-down-list` — a predefined list of options for picking single values.
|
|
1063
1520
|
* - `multi-select` — a predefined list of options for multiple item selection (chips in the trigger).
|
|
1064
1521
|
* - `drop-down-tree` — a predefined list rendered in a tree-like structure for single item selection.
|
|
1065
1522
|
* - `multi-select-tree` — a tree-like structure for multiple item selection.
|
|
1066
|
-
* - `multi-column` — an `ax-data-table` grid; when searchable, the trigger input filters as you type
|
|
1523
|
+
* - `multi-column` — an `ax-data-table` grid; when searchable, the trigger input filters as you type
|
|
1524
|
+
* (on small screens the search field is inside the actionsheet).
|
|
1525
|
+
* - `multi-column-tree` — a multi-column `ax-data-table` with a drop-down tree inside it
|
|
1526
|
+
* (expandable hierarchical rows). Uses `treeDataSource` + `columns`, or a hierarchical `dataSource`.
|
|
1067
1527
|
*
|
|
1068
1528
|
* With `adaptivityEnabled` (default `true`), the list opens as a bottom actionsheet on small
|
|
1069
1529
|
* screens instead of an anchored dropdown — the same alternate presentation as `ax-select-box`.
|
|
@@ -1073,9 +1533,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
1073
1533
|
*
|
|
1074
1534
|
* @category Components
|
|
1075
1535
|
*/
|
|
1076
|
-
class AXLookupComponent extends
|
|
1536
|
+
class AXLookupComponent extends NXValueComponent {
|
|
1077
1537
|
#platform;
|
|
1078
1538
|
#destroyRef;
|
|
1539
|
+
/** Reused so closing/reopening the popup does not create a new AXDataSource (which would miss cache). */
|
|
1540
|
+
#multiColumnTreeTableSource;
|
|
1541
|
+
#multiColumnTreeTableKey;
|
|
1542
|
+
#multiColumnTreeInput;
|
|
1543
|
+
/**
|
|
1544
|
+
* Tree callback results keyed by parent id. Survives popup remount so
|
|
1545
|
+
* drop-down-tree / multi-select-tree do not refetch on every open.
|
|
1546
|
+
*/
|
|
1547
|
+
#treeChildrenCache;
|
|
1079
1548
|
#itemsCache;
|
|
1080
1549
|
#isUserInteraction;
|
|
1081
1550
|
#lastValue;
|
|
@@ -1084,23 +1553,30 @@ class AXLookupComponent extends NXComponent {
|
|
|
1084
1553
|
#selectionInitialized;
|
|
1085
1554
|
#filterApplied;
|
|
1086
1555
|
#searchDebounce;
|
|
1556
|
+
#sheetSearchFocused;
|
|
1087
1557
|
constructor() {
|
|
1088
1558
|
super();
|
|
1089
1559
|
this.#platform = inject(AXPlatform);
|
|
1090
1560
|
this.#destroyRef = inject(DestroyRef);
|
|
1561
|
+
/**
|
|
1562
|
+
* The name of the form field, used by validation rules and `ax-form.validate(names)`.
|
|
1563
|
+
*/
|
|
1564
|
+
this.name = input('', /* @ts-ignore */
|
|
1565
|
+
...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
|
|
1091
1566
|
/**
|
|
1092
1567
|
* The lookup rendering mode. Selects which mini component renders in the popup.
|
|
1093
1568
|
*/
|
|
1094
1569
|
this.mode = input('drop-down-list', /* @ts-ignore */
|
|
1095
1570
|
...(ngDevMode ? [{ debugName: "mode" }] : /* istanbul ignore next */ []));
|
|
1096
1571
|
/**
|
|
1097
|
-
* The items source for list-based modes (`drop-down-list`, `multi-select`, `multi-column`)
|
|
1572
|
+
* The items source for list-based modes (`drop-down-list`, `multi-select`, `multi-column`)
|
|
1573
|
+
* and for `multi-column-tree` when `treeDataSource` is not set.
|
|
1098
1574
|
* Accepts an `AXDataSource` (remote paging, `byKey`, server-side filter) or a plain array.
|
|
1099
1575
|
*/
|
|
1100
1576
|
this.dataSource = input(undefined, /* @ts-ignore */
|
|
1101
1577
|
...(ngDevMode ? [{ debugName: "dataSource" }] : /* istanbul ignore next */ []));
|
|
1102
1578
|
/**
|
|
1103
|
-
* The nodes source for tree modes (`drop-down-tree`, `multi-select-tree`):
|
|
1579
|
+
* The nodes source for tree modes (`drop-down-tree`, `multi-select-tree`, `multi-column-tree`):
|
|
1104
1580
|
* an array of nodes or a lazy children callback.
|
|
1105
1581
|
*/
|
|
1106
1582
|
this.treeDataSource = input(undefined, /* @ts-ignore */
|
|
@@ -1122,20 +1598,37 @@ class AXLookupComponent extends NXComponent {
|
|
|
1122
1598
|
this.disabledField = input('disabled', /* @ts-ignore */
|
|
1123
1599
|
...(ngDevMode ? [{ debugName: "disabledField" }] : /* istanbul ignore next */ []));
|
|
1124
1600
|
/**
|
|
1125
|
-
* Column definitions for the `multi-column`
|
|
1601
|
+
* Column definitions for the `multi-column` and `multi-column-tree` modes
|
|
1602
|
+
* (rendered as `ax-text-column` in `ax-data-table`).
|
|
1126
1603
|
*/
|
|
1127
1604
|
this.columns = input([], /* @ts-ignore */
|
|
1128
1605
|
...(ngDevMode ? [{ debugName: "columns" }] : /* istanbul ignore next */ []));
|
|
1606
|
+
/**
|
|
1607
|
+
* Field used by `multi-column-tree` to fetch children when a row is expanded
|
|
1608
|
+
* (`AXDataSource` filter). Defaults to `parentId`. Nested `children` arrays are also supported.
|
|
1609
|
+
*/
|
|
1610
|
+
this.treeParentField = input('parentId', /* @ts-ignore */
|
|
1611
|
+
...(ngDevMode ? [{ debugName: "treeParentField" }] : /* istanbul ignore next */ []));
|
|
1612
|
+
/**
|
|
1613
|
+
* Field used by `multi-column-tree` to decide whether a row shows an expand control.
|
|
1614
|
+
* Defaults to `hasChild`. Nodes with `children` / `childrenCount` are mapped automatically
|
|
1615
|
+
* when using `treeDataSource`.
|
|
1616
|
+
*/
|
|
1617
|
+
this.hasChildrenField = input('hasChild', /* @ts-ignore */
|
|
1618
|
+
...(ngDevMode ? [{ debugName: "hasChildrenField" }] : /* istanbul ignore next */ []));
|
|
1129
1619
|
/**
|
|
1130
1620
|
* Whether the trigger accepts typing and filters the datasource (`true`),
|
|
1131
1621
|
* or is select-only with no writable input (`false`).
|
|
1132
|
-
* Applies to `drop-down-list`, `multi-select`, and `multi-column`.
|
|
1622
|
+
* Applies to `drop-down-list`, `multi-select`, `multi-column`, and `multi-column-tree`.
|
|
1623
|
+
* Tree-only modes (`drop-down-tree`, `multi-select-tree`) ignore this.
|
|
1624
|
+
* On small screens with `adaptivityEnabled`, search is typed in the actionsheet instead of the trigger.
|
|
1133
1625
|
*/
|
|
1134
1626
|
this.searchable = input(true, /* @ts-ignore */
|
|
1135
1627
|
...(ngDevMode ? [{ debugName: "searchable" }] : /* istanbul ignore next */ []));
|
|
1136
1628
|
/**
|
|
1137
1629
|
* When `true` (default), the popup list uses the alternate actionsheet presentation on small
|
|
1138
|
-
* screens (`SM`).
|
|
1630
|
+
* screens (`SM`). Searchable list modes then show a search field inside the sheet. When `false`,
|
|
1631
|
+
* the list always opens as an anchored dropdown.
|
|
1139
1632
|
*/
|
|
1140
1633
|
this.adaptivityEnabled = input(true, /* @ts-ignore */
|
|
1141
1634
|
...(ngDevMode ? [{ debugName: "adaptivityEnabled" }] : /* istanbul ignore next */ []));
|
|
@@ -1146,13 +1639,14 @@ class AXLookupComponent extends NXComponent {
|
|
|
1146
1639
|
...(ngDevMode ? [{ debugName: "caption" }] : /* istanbul ignore next */ []));
|
|
1147
1640
|
/**
|
|
1148
1641
|
* When `true`, list rows use alternating background colors for easier scanning
|
|
1149
|
-
* (`drop-down-list`, `multi-select`, and `multi-column` modes).
|
|
1642
|
+
* (`drop-down-list`, `multi-select`, `multi-column`, and `multi-column-tree` modes).
|
|
1150
1643
|
*/
|
|
1151
1644
|
this.alternate = input(false, /* @ts-ignore */
|
|
1152
1645
|
...(ngDevMode ? [{ debugName: "alternate" }] : /* istanbul ignore next */ []));
|
|
1153
1646
|
/**
|
|
1154
1647
|
* Placeholder for the trigger search input when items are already selected
|
|
1155
|
-
* (mainly useful in `multi-select`)
|
|
1648
|
+
* (mainly useful in `multi-select`), and for the in-sheet search field on small screens.
|
|
1649
|
+
* Falls back to `placeholder` when the selection is empty on desktop.
|
|
1156
1650
|
*/
|
|
1157
1651
|
this.searchPlaceholder = input('Search...', /* @ts-ignore */
|
|
1158
1652
|
...(ngDevMode ? [{ debugName: "searchPlaceholder" }] : /* istanbul ignore next */ []));
|
|
@@ -1218,6 +1712,13 @@ class AXLookupComponent extends NXComponent {
|
|
|
1218
1712
|
*/
|
|
1219
1713
|
this.value = model(null, /* @ts-ignore */
|
|
1220
1714
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
1715
|
+
/**
|
|
1716
|
+
* Full items that resolve the current `value` key(s) without calling datasource `byKey`.
|
|
1717
|
+
* Use when the parent already has the selected entity (e.g. edit forms). Seeds the internal
|
|
1718
|
+
* item cache; missing keys still fall through to `find` / `byKey`.
|
|
1719
|
+
*/
|
|
1720
|
+
this.valueItems = input([], /* @ts-ignore */
|
|
1721
|
+
...(ngDevMode ? [{ debugName: "valueItems" }] : /* istanbul ignore next */ []));
|
|
1221
1722
|
/**
|
|
1222
1723
|
* Emitted when the selected value changes.
|
|
1223
1724
|
*/
|
|
@@ -1260,19 +1761,51 @@ class AXLookupComponent extends NXComponent {
|
|
|
1260
1761
|
this.isMultiple = computed(() => this.mode() === 'multi-select' || this.mode() === 'multi-select-tree', /* @ts-ignore */
|
|
1261
1762
|
...(ngDevMode ? [{ debugName: "isMultiple" }] : /* istanbul ignore next */ []));
|
|
1262
1763
|
/** Whether the current mode renders a tree. */
|
|
1263
|
-
this.isTreeMode = computed(() =>
|
|
1764
|
+
this.isTreeMode = computed(() => {
|
|
1765
|
+
const mode = this.mode();
|
|
1766
|
+
return (mode === 'drop-down-tree' ||
|
|
1767
|
+
mode === 'multi-select-tree' ||
|
|
1768
|
+
(mode === 'multi-column-tree' && this.treeDataSource() != null));
|
|
1769
|
+
}, /* @ts-ignore */
|
|
1264
1770
|
...(ngDevMode ? [{ debugName: "isTreeMode" }] : /* istanbul ignore next */ []));
|
|
1265
|
-
/** Whether the
|
|
1266
|
-
this.
|
|
1267
|
-
if (!this.searchable() || this.readonly()) {
|
|
1268
|
-
return false;
|
|
1269
|
-
}
|
|
1771
|
+
/** Whether the current mode can filter a list/table as you type. */
|
|
1772
|
+
this.isListSearchMode = computed(() => {
|
|
1270
1773
|
const mode = this.mode();
|
|
1271
|
-
return mode === 'drop-down-list' || mode === 'multi-select' || mode === 'multi-column';
|
|
1774
|
+
return (mode === 'drop-down-list' || mode === 'multi-select' || mode === 'multi-column' || mode === 'multi-column-tree');
|
|
1272
1775
|
}, /* @ts-ignore */
|
|
1776
|
+
...(ngDevMode ? [{ debugName: "isListSearchMode" }] : /* istanbul ignore next */ []));
|
|
1777
|
+
/** Whether the trigger input is writable and filters as you type (desktop only). */
|
|
1778
|
+
this.isEditableTrigger = computed(() => this.searchable() && !this.readonly() && !this.isActionsheetStyle() && this.isListSearchMode(), /* @ts-ignore */
|
|
1273
1779
|
...(ngDevMode ? [{ debugName: "isEditableTrigger" }] : /* istanbul ignore next */ []));
|
|
1780
|
+
/** Whether search is typed in the actionsheet instead of the trigger. */
|
|
1781
|
+
this.isSheetSearchEnabled = computed(() => this.searchable() && !this.readonly() && this.isActionsheetStyle() && this.isListSearchMode(), /* @ts-ignore */
|
|
1782
|
+
...(ngDevMode ? [{ debugName: "isSheetSearchEnabled" }] : /* istanbul ignore next */ []));
|
|
1783
|
+
/** Query typed in the actionsheet search field (independent of the trigger display text). */
|
|
1784
|
+
this.sheetSearchText = signal('', /* @ts-ignore */
|
|
1785
|
+
...(ngDevMode ? [{ debugName: "sheetSearchText" }] : /* istanbul ignore next */ []));
|
|
1274
1786
|
/** The datasource for list-based modes; plain arrays are converted. */
|
|
1275
1787
|
this.resolvedDataSource = computed(() => {
|
|
1788
|
+
const tree = this.treeDataSource();
|
|
1789
|
+
if (this.mode() === 'multi-column-tree' && tree) {
|
|
1790
|
+
const key = `${this.valueField()}|${this.textField()}|${this.treeParentField()}|${this.hasChildrenField()}`;
|
|
1791
|
+
if (this.#multiColumnTreeTableSource &&
|
|
1792
|
+
this.#multiColumnTreeInput === tree &&
|
|
1793
|
+
this.#multiColumnTreeTableKey === key) {
|
|
1794
|
+
return this.#multiColumnTreeTableSource;
|
|
1795
|
+
}
|
|
1796
|
+
const cachedTree = Array.isArray(tree)
|
|
1797
|
+
? tree
|
|
1798
|
+
: (nodeId) => this.#loadCachedTreeNodes(tree, nodeId);
|
|
1799
|
+
this.#multiColumnTreeInput = tree;
|
|
1800
|
+
this.#multiColumnTreeTableKey = key;
|
|
1801
|
+
this.#multiColumnTreeTableSource = createLookupTreeTableDataSource(cachedTree, {
|
|
1802
|
+
valueField: this.valueField(),
|
|
1803
|
+
textField: this.textField(),
|
|
1804
|
+
parentField: this.treeParentField(),
|
|
1805
|
+
hasChildrenField: this.hasChildrenField(),
|
|
1806
|
+
});
|
|
1807
|
+
return this.#multiColumnTreeTableSource;
|
|
1808
|
+
}
|
|
1276
1809
|
const source = this.dataSource();
|
|
1277
1810
|
if (!source) {
|
|
1278
1811
|
return convertArrayToDataSource([], { key: this.valueField(), pageSize: 20 });
|
|
@@ -1282,6 +1815,22 @@ class AXLookupComponent extends NXComponent {
|
|
|
1282
1815
|
: source;
|
|
1283
1816
|
}, /* @ts-ignore */
|
|
1284
1817
|
...(ngDevMode ? [{ debugName: "resolvedDataSource" }] : /* istanbul ignore next */ []));
|
|
1818
|
+
/**
|
|
1819
|
+
* Tree callback results keyed by parent id. Survives popup remount so
|
|
1820
|
+
* drop-down-tree / multi-select-tree do not refetch on every open.
|
|
1821
|
+
*/
|
|
1822
|
+
this.#treeChildrenCache = new WeakMap();
|
|
1823
|
+
this.resolvedTreeDataSource = computed(() => {
|
|
1824
|
+
const source = this.treeDataSource();
|
|
1825
|
+
if (!source) {
|
|
1826
|
+
return [];
|
|
1827
|
+
}
|
|
1828
|
+
if (Array.isArray(source)) {
|
|
1829
|
+
return source;
|
|
1830
|
+
}
|
|
1831
|
+
return (nodeId) => this.#loadCachedTreeNodes(source, nodeId);
|
|
1832
|
+
}, /* @ts-ignore */
|
|
1833
|
+
...(ngDevMode ? [{ debugName: "resolvedTreeDataSource" }] : /* istanbul ignore next */ []));
|
|
1285
1834
|
/** The current selection normalized to an array. */
|
|
1286
1835
|
this.selectedValues = computed(() => {
|
|
1287
1836
|
const value = this.value();
|
|
@@ -1304,7 +1853,7 @@ class AXLookupComponent extends NXComponent {
|
|
|
1304
1853
|
* Text typed in the editable trigger input.
|
|
1305
1854
|
* Multi-select starts empty; single modes sync from the selected display text.
|
|
1306
1855
|
*/
|
|
1307
|
-
this.searchText = linkedSignal(() => (this.
|
|
1856
|
+
this.searchText = linkedSignal(() => (this.isMultiple() ? '' : this.displayText()), /* @ts-ignore */
|
|
1308
1857
|
...(ngDevMode ? [{ debugName: "searchText" }] : /* istanbul ignore next */ []));
|
|
1309
1858
|
/**
|
|
1310
1859
|
* Whether the trigger should render `selectedTemplate` instead of the plain input text.
|
|
@@ -1321,12 +1870,25 @@ class AXLookupComponent extends NXComponent {
|
|
|
1321
1870
|
return !this.expanded() && this.searchText() === this.displayText();
|
|
1322
1871
|
}, /* @ts-ignore */
|
|
1323
1872
|
...(ngDevMode ? [{ debugName: "showSelectedTemplate" }] : /* istanbul ignore next */ []));
|
|
1873
|
+
/** Placeholder for the editable trigger search input. */
|
|
1874
|
+
this.triggerSearchPlaceholder = computed(() => {
|
|
1875
|
+
if (this.isActionsheetStyle()) {
|
|
1876
|
+
return this.mode() === 'multi-select' && this.selectedItems().length > 0 ? '' : this.placeholder();
|
|
1877
|
+
}
|
|
1878
|
+
if (this.mode() === 'multi-select' && this.selectedItems().length > 0) {
|
|
1879
|
+
return this.searchPlaceholder();
|
|
1880
|
+
}
|
|
1881
|
+
return this.placeholder();
|
|
1882
|
+
}, /* @ts-ignore */
|
|
1883
|
+
...(ngDevMode ? [{ debugName: "triggerSearchPlaceholder" }] : /* istanbul ignore next */ []));
|
|
1324
1884
|
this.popoverRef = viewChild(AXPopoverComponent, /* @ts-ignore */
|
|
1325
1885
|
...(ngDevMode ? [{ debugName: "popoverRef" }] : /* istanbul ignore next */ []));
|
|
1326
1886
|
this.triggerSearchInput = viewChild('triggerSearchInput', /* @ts-ignore */
|
|
1327
1887
|
...(ngDevMode ? [{ debugName: "triggerSearchInput" }] : /* istanbul ignore next */ []));
|
|
1328
1888
|
this.listView = viewChild(AXLookupListViewBase, /* @ts-ignore */
|
|
1329
1889
|
...(ngDevMode ? [{ debugName: "listView" }] : /* istanbul ignore next */ []));
|
|
1890
|
+
this.sheetSearchRef = viewChild('sheetSearch', /* @ts-ignore */
|
|
1891
|
+
...(ngDevMode ? [{ debugName: "sheetSearchRef" }] : /* istanbul ignore next */ []));
|
|
1330
1892
|
this.#itemsCache = new Map();
|
|
1331
1893
|
this.#isUserInteraction = false;
|
|
1332
1894
|
this.#lastValue = undefined;
|
|
@@ -1334,14 +1896,7 @@ class AXLookupComponent extends NXComponent {
|
|
|
1334
1896
|
this.#resolveRevision = 0;
|
|
1335
1897
|
this.#selectionInitialized = false;
|
|
1336
1898
|
this.#filterApplied = false;
|
|
1337
|
-
|
|
1338
|
-
this.triggerSearchPlaceholder = computed(() => {
|
|
1339
|
-
if (this.mode() === 'multi-select' && this.selectedItems().length > 0) {
|
|
1340
|
-
return this.searchPlaceholder();
|
|
1341
|
-
}
|
|
1342
|
-
return this.placeholder();
|
|
1343
|
-
}, /* @ts-ignore */
|
|
1344
|
-
...(ngDevMode ? [{ debugName: "triggerSearchPlaceholder" }] : /* istanbul ignore next */ []));
|
|
1899
|
+
this.#sheetSearchFocused = false;
|
|
1345
1900
|
effect(() => this.#emitValueChanged(this.value()));
|
|
1346
1901
|
effect(() => this.#emitOpenedOrClosed(this.expanded()));
|
|
1347
1902
|
effect(() => {
|
|
@@ -1357,13 +1912,18 @@ class AXLookupComponent extends NXComponent {
|
|
|
1357
1912
|
});
|
|
1358
1913
|
// Seed the actionsheet flag once.
|
|
1359
1914
|
this.#syncActionsheetStyle();
|
|
1360
|
-
//
|
|
1915
|
+
// Seed the item cache from valueItems, then resolve selection.
|
|
1361
1916
|
effect(() => {
|
|
1917
|
+
const seeded = this.valueItems();
|
|
1362
1918
|
const values = this.selectedValues();
|
|
1919
|
+
this.valueField();
|
|
1363
1920
|
this.mode();
|
|
1364
1921
|
this.dataSource();
|
|
1365
1922
|
this.treeDataSource();
|
|
1366
|
-
untracked(() =>
|
|
1923
|
+
untracked(() => {
|
|
1924
|
+
this.#seedItemsCache(seeded);
|
|
1925
|
+
void this.#resolveSelectedItems(values);
|
|
1926
|
+
});
|
|
1367
1927
|
});
|
|
1368
1928
|
// Keep the popover in sync with the expanded state.
|
|
1369
1929
|
effect(() => {
|
|
@@ -1381,6 +1941,13 @@ class AXLookupComponent extends NXComponent {
|
|
|
1381
1941
|
}
|
|
1382
1942
|
});
|
|
1383
1943
|
});
|
|
1944
|
+
afterRenderEffect(() => {
|
|
1945
|
+
if (!this.expanded()) {
|
|
1946
|
+
this.#sheetSearchFocused = false;
|
|
1947
|
+
return;
|
|
1948
|
+
}
|
|
1949
|
+
this.#tryFocusSheetSearch();
|
|
1950
|
+
});
|
|
1384
1951
|
}
|
|
1385
1952
|
#syncActionsheetStyle() {
|
|
1386
1953
|
this.isActionsheetStyle.set(this.adaptivityEnabled() && this.#platform.is('SM'));
|
|
@@ -1410,7 +1977,7 @@ class AXLookupComponent extends NXComponent {
|
|
|
1410
1977
|
if (!this.expanded()) {
|
|
1411
1978
|
return;
|
|
1412
1979
|
}
|
|
1413
|
-
queueMicrotask(() => this
|
|
1980
|
+
queueMicrotask(() => this.#focusPopupSearchOrList());
|
|
1414
1981
|
}
|
|
1415
1982
|
/**
|
|
1416
1983
|
* Focuses the lookup trigger input.
|
|
@@ -1435,14 +2002,14 @@ class AXLookupComponent extends NXComponent {
|
|
|
1435
2002
|
if (e.key === 'ArrowDown') {
|
|
1436
2003
|
e.preventDefault();
|
|
1437
2004
|
this.expanded.set(true);
|
|
1438
|
-
queueMicrotask(() => this
|
|
2005
|
+
queueMicrotask(() => this.#focusPopupSearchOrList());
|
|
1439
2006
|
return;
|
|
1440
2007
|
}
|
|
1441
2008
|
if (!this.isEditableTrigger() && (e.key === 'Enter' || e.key === ' ')) {
|
|
1442
2009
|
e.preventDefault();
|
|
1443
2010
|
this.expanded.update((open) => !open);
|
|
1444
2011
|
if (this.expanded()) {
|
|
1445
|
-
queueMicrotask(() => this
|
|
2012
|
+
queueMicrotask(() => this.#focusPopupSearchOrList());
|
|
1446
2013
|
}
|
|
1447
2014
|
}
|
|
1448
2015
|
}
|
|
@@ -1453,9 +2020,13 @@ class AXLookupComponent extends NXComponent {
|
|
|
1453
2020
|
}
|
|
1454
2021
|
}
|
|
1455
2022
|
/**
|
|
1456
|
-
* Returns focus to the
|
|
2023
|
+
* Returns focus to the search field when list navigation requests it.
|
|
1457
2024
|
*/
|
|
1458
2025
|
onListNavigateOut(_reason) {
|
|
2026
|
+
if (this.isSheetSearchEnabled()) {
|
|
2027
|
+
this.sheetSearchRef()?.focus();
|
|
2028
|
+
return;
|
|
2029
|
+
}
|
|
1459
2030
|
this.triggerSearchInput()?.nativeElement.focus();
|
|
1460
2031
|
}
|
|
1461
2032
|
focusListFirst() {
|
|
@@ -1478,6 +2049,7 @@ class AXLookupComponent extends NXComponent {
|
|
|
1478
2049
|
onPopoverClosed() {
|
|
1479
2050
|
this.expanded.set(false);
|
|
1480
2051
|
this.searchText.set(this.isMultiple() ? '' : this.displayText());
|
|
2052
|
+
this.sheetSearchText.set('');
|
|
1481
2053
|
if (this.#filterApplied) {
|
|
1482
2054
|
this.#filterApplied = false;
|
|
1483
2055
|
const source = this.resolvedDataSource();
|
|
@@ -1517,17 +2089,23 @@ class AXLookupComponent extends NXComponent {
|
|
|
1517
2089
|
this.expanded.set(true);
|
|
1518
2090
|
this.#applyFilterDebounced(text);
|
|
1519
2091
|
}
|
|
2092
|
+
/** Filters the datasource from the actionsheet search field (reads the input so delayed ngModel cannot block typing). */
|
|
2093
|
+
onSheetSearchInput() {
|
|
2094
|
+
const query = this.#sheetSearchInputValue();
|
|
2095
|
+
this.sheetSearchText.set(query);
|
|
2096
|
+
this.#applyFilterDebounced(query);
|
|
2097
|
+
}
|
|
1520
2098
|
/**
|
|
1521
|
-
* Commits a single pick (drop-down-list, drop-down-tree, multi-column) and closes the popup.
|
|
2099
|
+
* Commits a single pick (drop-down-list, drop-down-tree, multi-column, multi-column-tree) and closes the popup.
|
|
1522
2100
|
*/
|
|
1523
2101
|
handleSinglePick(e) {
|
|
1524
2102
|
this.#emitItemClick(e.item);
|
|
1525
2103
|
this.#emitItemSelected(e.item);
|
|
1526
2104
|
this.#itemsCache.set(e.value, e.item);
|
|
1527
|
-
|
|
1528
|
-
|
|
1529
|
-
|
|
1530
|
-
|
|
2105
|
+
this.selectedItems.set([e.item]);
|
|
2106
|
+
this.searchText.set(this.getItemText(e.item));
|
|
2107
|
+
this.#isUserInteraction = true;
|
|
2108
|
+
this.value.set(e.value);
|
|
1531
2109
|
this.close();
|
|
1532
2110
|
}
|
|
1533
2111
|
/**
|
|
@@ -1545,7 +2123,10 @@ class AXLookupComponent extends NXComponent {
|
|
|
1545
2123
|
const next = exists ? current.filter((v) => !(v == e.value)) : [...current, e.value];
|
|
1546
2124
|
this.#isUserInteraction = true;
|
|
1547
2125
|
this.value.set(next);
|
|
1548
|
-
if (this.
|
|
2126
|
+
if (this.isSheetSearchEnabled() && this.sheetSearchText()) {
|
|
2127
|
+
this.#clearSheetSearch();
|
|
2128
|
+
}
|
|
2129
|
+
else if (this.isEditableTrigger() && this.searchText()) {
|
|
1549
2130
|
this.searchText.set('');
|
|
1550
2131
|
this.#applyFilterDebounced('');
|
|
1551
2132
|
}
|
|
@@ -1609,6 +2190,16 @@ class AXLookupComponent extends NXComponent {
|
|
|
1609
2190
|
this.#isUserInteraction = true;
|
|
1610
2191
|
this.value.set(this.selectedValues().filter((v) => !(v == value)));
|
|
1611
2192
|
}
|
|
2193
|
+
/**
|
|
2194
|
+
* Seeds the item cache with known items so matching `value` keys resolve without `byKey`.
|
|
2195
|
+
* Useful after an async parent-entity load when `valueItems` is not bound.
|
|
2196
|
+
*
|
|
2197
|
+
* @param items - Full items that include `valueField` (and ideally `textField`) properties.
|
|
2198
|
+
*/
|
|
2199
|
+
seedItems(items) {
|
|
2200
|
+
this.#seedItemsCache(items);
|
|
2201
|
+
void this.#resolveSelectedItems(this.selectedValues());
|
|
2202
|
+
}
|
|
1612
2203
|
/**
|
|
1613
2204
|
* Clears the whole selection.
|
|
1614
2205
|
* Sets `null` in single modes and `[]` in multi modes. Used by projected `ax-clear-button`.
|
|
@@ -1631,11 +2222,58 @@ class AXLookupComponent extends NXComponent {
|
|
|
1631
2222
|
}
|
|
1632
2223
|
this.#isUserInteraction = isUserInteraction;
|
|
1633
2224
|
this.value.set(next);
|
|
1634
|
-
if (this.
|
|
2225
|
+
if (this.isSheetSearchEnabled() && this.sheetSearchText()) {
|
|
2226
|
+
this.#clearSheetSearch();
|
|
2227
|
+
}
|
|
2228
|
+
else if (this.isEditableTrigger() && this.searchText()) {
|
|
1635
2229
|
this.searchText.set('');
|
|
1636
2230
|
this.#applyFilterDebounced('');
|
|
1637
2231
|
}
|
|
1638
2232
|
}
|
|
2233
|
+
#clearSheetSearch() {
|
|
2234
|
+
this.sheetSearchText.set('');
|
|
2235
|
+
this.sheetSearchRef()?.commitValue('', false);
|
|
2236
|
+
this.#applyFilterDebounced('');
|
|
2237
|
+
}
|
|
2238
|
+
#sheetSearchInputValue() {
|
|
2239
|
+
return this.sheetSearchRef()?.getHostElement()?.querySelector('input')?.value ?? '';
|
|
2240
|
+
}
|
|
2241
|
+
#tryFocusSheetSearch() {
|
|
2242
|
+
if (!this.isSheetSearchEnabled() || this.#sheetSearchFocused) {
|
|
2243
|
+
return;
|
|
2244
|
+
}
|
|
2245
|
+
const search = this.sheetSearchRef();
|
|
2246
|
+
if (!search) {
|
|
2247
|
+
return;
|
|
2248
|
+
}
|
|
2249
|
+
this.#sheetSearchFocused = true;
|
|
2250
|
+
search.focus();
|
|
2251
|
+
}
|
|
2252
|
+
#focusPopupSearchOrList() {
|
|
2253
|
+
if (this.isSheetSearchEnabled()) {
|
|
2254
|
+
this.#tryFocusSheetSearch();
|
|
2255
|
+
return;
|
|
2256
|
+
}
|
|
2257
|
+
this.focusListFirst();
|
|
2258
|
+
}
|
|
2259
|
+
#loadCachedTreeNodes(source, nodeId) {
|
|
2260
|
+
let byParent = this.#treeChildrenCache.get(source);
|
|
2261
|
+
if (!byParent) {
|
|
2262
|
+
byParent = new Map();
|
|
2263
|
+
this.#treeChildrenCache.set(source, byParent);
|
|
2264
|
+
}
|
|
2265
|
+
const key = nodeId ?? '';
|
|
2266
|
+
const cached = byParent.get(key);
|
|
2267
|
+
if (cached) {
|
|
2268
|
+
return cached;
|
|
2269
|
+
}
|
|
2270
|
+
const request = Promise.resolve(source(nodeId)).then((nodes) => nodes ?? [], (error) => {
|
|
2271
|
+
byParent.delete(key);
|
|
2272
|
+
throw error;
|
|
2273
|
+
});
|
|
2274
|
+
byParent.set(key, request);
|
|
2275
|
+
return request;
|
|
2276
|
+
}
|
|
1639
2277
|
#applyFilterDebounced(text) {
|
|
1640
2278
|
if (this.#searchDebounce) {
|
|
1641
2279
|
clearTimeout(this.#searchDebounce);
|
|
@@ -1646,10 +2284,16 @@ class AXLookupComponent extends NXComponent {
|
|
|
1646
2284
|
if (query) {
|
|
1647
2285
|
source.filter({ field: this.textField(), value: query, operator: { type: 'contains' } });
|
|
1648
2286
|
this.#filterApplied = true;
|
|
2287
|
+
source.refresh();
|
|
2288
|
+
return;
|
|
1649
2289
|
}
|
|
1650
|
-
|
|
1651
|
-
|
|
2290
|
+
source.clearFilter();
|
|
2291
|
+
// Opening a searchable trigger can emit an empty input event. Do not reset
|
|
2292
|
+
// an in-flight first page unless the user actually typed a search.
|
|
2293
|
+
if (!this.#filterApplied) {
|
|
2294
|
+
return;
|
|
1652
2295
|
}
|
|
2296
|
+
this.#filterApplied = false;
|
|
1653
2297
|
source.refresh();
|
|
1654
2298
|
}, 300);
|
|
1655
2299
|
}
|
|
@@ -1672,6 +2316,20 @@ class AXLookupComponent extends NXComponent {
|
|
|
1672
2316
|
}
|
|
1673
2317
|
this.#selectionInitialized = true;
|
|
1674
2318
|
}
|
|
2319
|
+
#seedItemsCache(items) {
|
|
2320
|
+
if (!items?.length) {
|
|
2321
|
+
return;
|
|
2322
|
+
}
|
|
2323
|
+
const field = this.valueField();
|
|
2324
|
+
for (const item of items) {
|
|
2325
|
+
const key = item?.[field];
|
|
2326
|
+
if (key == null) {
|
|
2327
|
+
continue;
|
|
2328
|
+
}
|
|
2329
|
+
this.#itemsCache.set(key, item);
|
|
2330
|
+
this.#itemsCache.set(String(key), item);
|
|
2331
|
+
}
|
|
2332
|
+
}
|
|
1675
2333
|
#resolveItem(value) {
|
|
1676
2334
|
const cached = this.#itemsCache.get(value) ?? this.#itemsCache.get(String(value));
|
|
1677
2335
|
if (cached) {
|
|
@@ -1764,11 +2422,12 @@ class AXLookupComponent extends NXComponent {
|
|
|
1764
2422
|
expanded ? this.onOpened.emit(event) : this.onClosed.emit(event);
|
|
1765
2423
|
}
|
|
1766
2424
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1767
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXLookupComponent, isStandalone: true, selector: "ax-lookup", inputs: { mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: false, transformFunction: null }, treeDataSource: { classPropertyName: "treeDataSource", publicName: "treeDataSource", isSignal: true, isRequired: false, transformFunction: null }, valueField: { classPropertyName: "valueField", publicName: "valueField", isSignal: true, isRequired: false, transformFunction: null }, textField: { classPropertyName: "textField", publicName: "textField", isSignal: true, isRequired: false, transformFunction: null }, disabledField: { classPropertyName: "disabledField", publicName: "disabledField", isSignal: true, isRequired: false, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, searchable: { classPropertyName: "searchable", publicName: "searchable", isSignal: true, isRequired: false, transformFunction: null }, adaptivityEnabled: { classPropertyName: "adaptivityEnabled", publicName: "adaptivityEnabled", isSignal: true, isRequired: false, transformFunction: null }, caption: { classPropertyName: "caption", publicName: "caption", isSignal: true, isRequired: false, transformFunction: null }, alternate: { classPropertyName: "alternate", publicName: "alternate", isSignal: true, isRequired: false, transformFunction: null }, searchPlaceholder: { classPropertyName: "searchPlaceholder", publicName: "searchPlaceholder", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, look: { classPropertyName: "look", publicName: "look", isSignal: true, isRequired: false, transformFunction: null }, itemHeight: { classPropertyName: "itemHeight", publicName: "itemHeight", isSignal: true, isRequired: false, transformFunction: null }, maxVisibleItems: { classPropertyName: "maxVisibleItems", publicName: "maxVisibleItems", isSignal: true, isRequired: false, transformFunction: null }, treeSelectionBehavior: { classPropertyName: "treeSelectionBehavior", publicName: "treeSelectionBehavior", isSignal: true, isRequired: false, transformFunction: null }, itemTemplate: { classPropertyName: "itemTemplate", publicName: "itemTemplate", isSignal: true, isRequired: false, transformFunction: null }, selectedTemplate: { classPropertyName: "selectedTemplate", publicName: "selectedTemplate", isSignal: true, isRequired: false, transformFunction: null }, emptyTemplate: { classPropertyName: "emptyTemplate", publicName: "emptyTemplate", isSignal: true, isRequired: false, transformFunction: null }, loadingTemplate: { classPropertyName: "loadingTemplate", publicName: "loadingTemplate", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { look: "lookChange", value: "valueChange", onValueChanged: "onValueChanged", onSelectionChanged: "onSelectionChanged", onFocus: "onFocus", onBlur: "onBlur", onItemClick: "onItemClick", onItemSelected: "onItemSelected", onOpened: "onOpened", onClosed: "onClosed" }, providers: [
|
|
2425
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXLookupComponent, isStandalone: true, selector: "ax-lookup", inputs: { name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: false, transformFunction: null }, treeDataSource: { classPropertyName: "treeDataSource", publicName: "treeDataSource", isSignal: true, isRequired: false, transformFunction: null }, valueField: { classPropertyName: "valueField", publicName: "valueField", isSignal: true, isRequired: false, transformFunction: null }, textField: { classPropertyName: "textField", publicName: "textField", isSignal: true, isRequired: false, transformFunction: null }, disabledField: { classPropertyName: "disabledField", publicName: "disabledField", isSignal: true, isRequired: false, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, treeParentField: { classPropertyName: "treeParentField", publicName: "treeParentField", isSignal: true, isRequired: false, transformFunction: null }, hasChildrenField: { classPropertyName: "hasChildrenField", publicName: "hasChildrenField", isSignal: true, isRequired: false, transformFunction: null }, searchable: { classPropertyName: "searchable", publicName: "searchable", isSignal: true, isRequired: false, transformFunction: null }, adaptivityEnabled: { classPropertyName: "adaptivityEnabled", publicName: "adaptivityEnabled", isSignal: true, isRequired: false, transformFunction: null }, caption: { classPropertyName: "caption", publicName: "caption", isSignal: true, isRequired: false, transformFunction: null }, alternate: { classPropertyName: "alternate", publicName: "alternate", isSignal: true, isRequired: false, transformFunction: null }, searchPlaceholder: { classPropertyName: "searchPlaceholder", publicName: "searchPlaceholder", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, look: { classPropertyName: "look", publicName: "look", isSignal: true, isRequired: false, transformFunction: null }, itemHeight: { classPropertyName: "itemHeight", publicName: "itemHeight", isSignal: true, isRequired: false, transformFunction: null }, maxVisibleItems: { classPropertyName: "maxVisibleItems", publicName: "maxVisibleItems", isSignal: true, isRequired: false, transformFunction: null }, treeSelectionBehavior: { classPropertyName: "treeSelectionBehavior", publicName: "treeSelectionBehavior", isSignal: true, isRequired: false, transformFunction: null }, itemTemplate: { classPropertyName: "itemTemplate", publicName: "itemTemplate", isSignal: true, isRequired: false, transformFunction: null }, selectedTemplate: { classPropertyName: "selectedTemplate", publicName: "selectedTemplate", isSignal: true, isRequired: false, transformFunction: null }, emptyTemplate: { classPropertyName: "emptyTemplate", publicName: "emptyTemplate", isSignal: true, isRequired: false, transformFunction: null }, loadingTemplate: { classPropertyName: "loadingTemplate", publicName: "loadingTemplate", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, valueItems: { classPropertyName: "valueItems", publicName: "valueItems", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { look: "lookChange", value: "valueChange", onValueChanged: "onValueChanged", onSelectionChanged: "onSelectionChanged", onFocus: "onFocus", onBlur: "onBlur", onItemClick: "onItemClick", onItemSelected: "onItemSelected", onOpened: "onOpened", onClosed: "onClosed" }, providers: [
|
|
1768
2426
|
{ provide: AXComponent, useExisting: AXLookupComponent },
|
|
1769
2427
|
{ provide: AXClearableComponent, useExisting: AXLookupComponent },
|
|
1770
2428
|
{ provide: AXClosableComponent, useExisting: AXLookupComponent },
|
|
1771
|
-
], viewQueries: [{ propertyName: "popoverRef", first: true, predicate: AXPopoverComponent, descendants: true, isSignal: true }, { propertyName: "triggerSearchInput", first: true, predicate: ["triggerSearchInput"], descendants: true, isSignal: true }, { propertyName: "listView", first: true, predicate: AXLookupListViewBase, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div\n #origin\n class=\"ax-editor-container ax-{{ look() }} ax-default\"\n [class.ax-lookup-trigger]=\"!isEditableTrigger()\"\n [class.ax-lookup-trigger-multiple]=\"isMultiple()\"\n [class.ax-state-disabled]=\"disabled()\"\n [class.ax-state-readonly]=\"readonly()\"\n (click)=\"onTriggerClick()\"\n>\n <ng-content select=\"ax-prefix\"></ng-content>\n\n @if (isMultiple()) {\n <div class=\"ax-lookup-chips\">\n @for (item of selectedItems(); track trackSelectedKey(item)) {\n <ax-chips class=\"ax-sm\" color=\"primary\" look=\"twotone\" [text]=\"selectedTemplate() ? '' : getItemText(item)\">\n @if (selectedTemplate()) {\n <ax-prefix>\n <ng-container\n [ngTemplateOutlet]=\"selectedTemplate()!\"\n [ngTemplateOutletContext]=\"{ $implicit: item }\"\n />\n </ax-prefix>\n }\n @if (!disabled() && !readonly()) {\n <ax-suffix>\n <button type=\"button\" tabindex=\"-1\" (click)=\"removeChip($event, item)\">\n <span class=\"ax-icon ax-icon-close\"></span>\n </button>\n </ax-suffix>\n }\n </ax-chips>\n }\n <input\n #triggerSearchInput\n type=\"text\"\n class=\"ax-input ax-lookup-trigger-search\"\n [class.ax-lookup-select-input]=\"!isEditableTrigger()\"\n [placeholder]=\"triggerSearchPlaceholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly() || !isEditableTrigger()\"\n [attr.inputmode]=\"isEditableTrigger() ? null : 'none'\"\n [value]=\"searchText()\"\n (input)=\"onTriggerSearchInput($any($event.target).value)\"\n (keydown)=\"onTriggerKeydown($event)\"\n (beforeinput)=\"onBeforeInput($event)\"\n (focus)=\"emitOnFocus($event)\"\n (blur)=\"emitOnBlur($event)\"\n />\n </div>\n } @else {\n <div class=\"ax-lookup-value\">\n @if (showSelectedTemplate()) {\n <div class=\"ax-lookup-selected-content\" aria-hidden=\"true\">\n <ng-container\n [ngTemplateOutlet]=\"selectedTemplate()!\"\n [ngTemplateOutletContext]=\"{ $implicit: selectedItems()[0] }\"\n />\n </div>\n }\n <input\n #triggerSearchInput\n type=\"text\"\n class=\"ax-input\"\n [class.ax-lookup-select-input]=\"!isEditableTrigger()\"\n [class.ax-lookup-input-overlay]=\"showSelectedTemplate()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly() || !isEditableTrigger()\"\n [attr.inputmode]=\"isEditableTrigger() ? null : 'none'\"\n [value]=\"searchText()\"\n (input)=\"onTriggerSearchInput($any($event.target).value)\"\n (keydown)=\"onTriggerKeydown($event)\"\n (beforeinput)=\"onBeforeInput($event)\"\n (focus)=\"emitOnFocus($event)\"\n (blur)=\"emitOnBlur($event)\"\n />\n </div>\n }\n\n @if (selectedValues().length > 0 && !disabled() && !readonly()) {\n <ng-content select=\"ax-clear-button\"></ng-content>\n }\n\n <button\n type=\"button\"\n class=\"ax-general-button-icon\"\n tabindex=\"-1\"\n [disabled]=\"disabled() || readonly()\"\n >\n <span\n class=\"ax-icon\"\n [class.ax-icon-chevron-down]=\"!expanded()\"\n [class.ax-icon-chevron-up]=\"expanded()\"\n ></span>\n </button>\n <ng-content select=\"ax-suffix\"></ng-content>\n</div>\n\n<ax-popover\n [target]=\"origin\"\n [openOn]=\"'manual'\"\n [closeOn]=\"'clickOut'\"\n [placement]=\"'bottom-start'\"\n [width]=\"isActionsheetStyle() ? '100%' : origin.offsetWidth + 'px'\"\n [adaptivityEnabled]=\"isActionsheetStyle()\"\n [disabled]=\"disabled() || readonly()\"\n (onClosed)=\"onPopoverClosed()\"\n>\n <div class=\"ax-lookup-popup\" [class.ax-is-actionsheet]=\"isActionsheetStyle()\" [class.ax-is-alternate]=\"alternate()\" (keydown.escape)=\"close()\">\n @if (isActionsheetStyle()) {\n <ax-header class=\"ax-solid\">\n <ax-title>{{ caption() || placeholder() || ('@acorex:selectbox.popover.title' | translate | async) }}</ax-title>\n <ax-close-button [icon]=\"isMultiple() ? 'ax-icon ax-icon-check' : 'ax-icon ax-icon-close'\"></ax-close-button>\n </ax-header>\n }\n <ng-content select=\"ax-header\"></ng-content>\n @if (expanded()) {\n @switch (mode()) {\n @case ('drop-down-list') {\n <ax-lookup-drop-down-list\n [dataSource]=\"resolvedDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [itemHeight]=\"itemHeight()\"\n [maxVisibleItems]=\"maxVisibleItems()\"\n [itemTemplate]=\"itemTemplate()\"\n [emptyTemplate]=\"emptyTemplate()\"\n [loadingTemplate]=\"loadingTemplate()\"\n [alternate]=\"alternate()\"\n (itemClick)=\"handleSinglePick($event)\"\n (navigateOut)=\"onListNavigateOut($event)\"\n />\n }\n @case ('multi-select') {\n <ax-lookup-multi-select\n [dataSource]=\"resolvedDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [itemHeight]=\"itemHeight()\"\n [maxVisibleItems]=\"maxVisibleItems()\"\n [itemTemplate]=\"itemTemplate()\"\n [emptyTemplate]=\"emptyTemplate()\"\n [loadingTemplate]=\"loadingTemplate()\"\n [alternate]=\"alternate()\"\n (itemClick)=\"handleMultiToggle($event)\"\n (navigateOut)=\"onListNavigateOut($event)\"\n />\n }\n @case ('drop-down-tree') {\n <ax-lookup-drop-down-tree\n [dataSource]=\"treeDataSource()!\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [nodeTemplate]=\"$any(itemTemplate())\"\n (itemClick)=\"handleSinglePick($event)\"\n />\n }\n @case ('multi-select-tree') {\n <ax-lookup-multi-select-tree\n [dataSource]=\"treeDataSource()!\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [selectionBehavior]=\"treeSelectionBehavior()\"\n [nodeTemplate]=\"$any(itemTemplate())\"\n (selectionChange)=\"handleTreeSelectionChange($event)\"\n />\n }\n @case ('multi-column') {\n <ax-lookup-multi-column\n [dataSource]=\"resolvedDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [itemHeight]=\"itemHeight()\"\n [maxVisibleItems]=\"maxVisibleItems()\"\n [columns]=\"columns()\"\n [itemTemplate]=\"itemTemplate()\"\n [emptyTemplate]=\"emptyTemplate()\"\n [loadingTemplate]=\"loadingTemplate()\"\n [alternate]=\"alternate()\"\n (itemClick)=\"handleSinglePick($event)\"\n />\n }\n }\n }\n <ng-content select=\"ax-footer\"></ng-content>\n </div>\n</ax-popover>\n", styles: ["@layer properties;@layer components{ax-lookup{display:block;width:100%}ax-lookup .ax-editor-container{justify-content:flex-start;gap:calc(var(--spacing, .25rem) * 1)}ax-lookup .ax-editor-container.ax-state-disabled{cursor:not-allowed;opacity:50%}ax-lookup .ax-editor-container.ax-state-disabled .ax-input,ax-lookup .ax-editor-container.ax-state-disabled .ax-editor{cursor:not-allowed}ax-lookup .ax-editor-container.ax-state-readonly{opacity:75%}ax-lookup .ax-lookup-trigger{cursor:pointer;-webkit-user-select:none;user-select:none}ax-lookup .ax-lookup-trigger-multiple{height:auto;min-height:calc(var(--spacing, .25rem) * 9);padding-block:calc(var(--spacing, .25rem) * 1)}ax-lookup .ax-lookup-value{position:relative;display:flex;min-width:calc(var(--spacing, .25rem) * 0);flex:1;align-items:center;overflow:hidden}ax-lookup .ax-lookup-select-input{cursor:pointer;caret-color:transparent;-webkit-user-select:none;user-select:none}ax-lookup .ax-lookup-selected-content{pointer-events:none;position:relative;z-index:0;display:flex;min-width:calc(var(--spacing, .25rem) * 0);flex:1;align-items:center;overflow:hidden}ax-lookup .ax-lookup-input-overlay{position:absolute;inset:calc(var(--spacing, .25rem) * 0);z-index:10;margin:calc(var(--spacing, .25rem) * 0)!important;height:100%;width:100%;border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding:calc(var(--spacing, .25rem) * 0)!important;color:transparent;caret-color:transparent}ax-lookup .ax-lookup-chips{display:flex;min-width:calc(var(--spacing, .25rem) * 0);flex:1;flex-wrap:wrap;align-items:center;gap:calc(var(--spacing, .25rem) * 1)}ax-lookup .ax-lookup-trigger-search{margin:calc(var(--spacing, .25rem) * 0)!important;height:calc(var(--spacing, .25rem) * 7.5);width:auto!important;min-width:calc(var(--spacing, .25rem) * 16);flex:1;flex-basis:calc(var(--spacing, .25rem) * 16)}ax-lookup .ax-lookup-placeholder{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){ax-lookup .ax-lookup-placeholder{color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 50%,transparent)}}ax-lookup ax-chips ax-prefix,ax-lookup ax-chips ax-suffix{padding:calc(var(--spacing, .25rem) * 0)!important}ax-lookup ax-chips ax-suffix button{display:flex;cursor:pointer;align-items:center;border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding:calc(var(--spacing, .25rem) * 0)}.ax-lookup-popup{box-sizing:border-box;display:flex;width:100%;flex-direction:column;overflow:hidden;border-radius:var(--ax-sys-border-radius);border-style:var(--tw-border-style);border-width:1px;border-color:rgba(var(--ax-sys-color-border-surface));background-color:rgba(var(--ax-sys-color-lightest-surface));--tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ax-lookup-popup:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:rgba(var(--ax-sys-color-darkest-surface))}.ax-lookup-popup.ax-is-actionsheet{border-bottom-right-radius:0;border-bottom-left-radius:0;--tw-shadow: 0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ax-lookup-popup.ax-is-actionsheet>ax-header.ax-solid{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:rgba(var(--ax-sys-color-border-lightest-surface))}.ax-lookup-popup.ax-is-actionsheet>ax-header.ax-solid .ax-icon-check{color:rgba(var(--ax-sys-color-primary-surface))}.ax-lookup-popup.ax-is-actionsheet>ax-header.ax-solid ax-title{font-size:var(--text-base, 1rem);line-height:var(--tw-leading, var(--text-base--line-height, 1.5 ));--tw-leading: calc(var(--spacing, .25rem) * 6);line-height:calc(var(--spacing, .25rem) * 6);--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500)}.ax-lookup-popup>ax-header:not(.ax-solid),.ax-lookup-popup>ax-footer{flex-shrink:0;border-color:rgba(var(--ax-sys-color-border-lightest-surface))}.ax-lookup-popup>ax-header:not(.ax-solid){border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.ax-lookup-popup>ax-footer{border-top-style:var(--tw-border-style);border-top-width:1px}.ax-lookup-viewport{width:100%}.ax-lookup-empty{display:flex;min-height:calc(var(--spacing, .25rem) * 12);width:100%;align-items:center;justify-content:center;padding-inline:calc(var(--spacing, .25rem) * 3);padding-block:calc(var(--spacing, .25rem) * 3);text-align:center;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-empty{color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 60%,transparent)}}.ax-lookup-option-host{box-sizing:border-box;cursor:pointer;border-style:var(--tw-border-style);border-width:1px;border-color:transparent;--tw-outline-style: none;outline-style:none}.ax-lookup-option-host.ax-state-alternate{background-color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-option-host.ax-state-alternate{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 5%,transparent)}}.ax-lookup-option-host:hover,.ax-lookup-option-host.ax-state-active{background-color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-option-host:hover,.ax-lookup-option-host.ax-state-active{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 10%,transparent)}}.ax-lookup-option-host.ax-state-alternate:hover,.ax-lookup-option-host.ax-state-alternate.ax-state-active{background-color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-option-host.ax-state-alternate:hover,.ax-lookup-option-host.ax-state-alternate.ax-state-active{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 15%,transparent)}}.ax-lookup-option-host.ax-state-selected,.ax-lookup-option-host.ax-state-selected:hover,.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate,.ax-lookup-option-host.ax-state-selected.ax-state-alternate:hover,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active{background-color:rgba(var(--ax-sys-color-primary-lightest-surface))}:is(.ax-lookup-option-host.ax-state-selected,.ax-lookup-option-host.ax-state-selected:hover,.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate,.ax-lookup-option-host.ax-state-selected.ax-state-alternate:hover,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active):where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:rgba(var(--ax-sys-color-primary-darkest-surface))}@supports (color: color-mix(in lab,red,red)){:is(.ax-lookup-option-host.ax-state-selected,.ax-lookup-option-host.ax-state-selected:hover,.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate,.ax-lookup-option-host.ax-state-selected.ax-state-alternate:hover,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active):where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-darkest-surface)) 25%,transparent)}}.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active{background-color:rgba(var(--ax-sys-color-primary-lightest-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-lightest-surface)) 80%,transparent)}}:is(.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active):where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:rgba(var(--ax-sys-color-primary-darkest-surface))}@supports (color: color-mix(in lab,red,red)){:is(.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active):where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-darkest-surface)) 40%,transparent)}}.ax-lookup-option-host.ax-state-disabled{cursor:not-allowed;opacity:50%}.ax-lookup-option-host.ax-lookup-option-host--check{display:flex;align-items:center;gap:calc(var(--spacing, .25rem) * 2);padding-inline:calc(var(--spacing, .25rem) * 3)}.ax-lookup-option-host .ax-lookup-checkbox{pointer-events:none;width:calc(var(--spacing, .25rem) * 4);height:calc(var(--spacing, .25rem) * 4);flex-shrink:0;accent-color:rgba(var(--ax-sys-color-primary-surface))}.ax-lookup-option-host .ax-lookup-option-loading{width:100%;padding-inline:calc(var(--spacing, .25rem) * 3);font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-option-host .ax-lookup-option-loading{color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 50%,transparent)}}.ax-lookup-option{display:flex;align-items:center;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 2);padding-inline:calc(var(--spacing, .25rem) * 3);font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgba(var(--ax-sys-color-on-surface))}.ax-lookup-option.ax-state-selected{color:rgba(var(--ax-sys-color-primary-surface))}.ax-lookup-option .ax-lookup-option-text{min-width:calc(var(--spacing, .25rem) * 0);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ax-lookup-option .ax-lookup-option-check{flex-shrink:0;color:rgba(var(--ax-sys-color-primary-surface))}ax-lookup-multi-column,.ax-lookup-multi-column{display:block;min-height:calc(var(--spacing, .25rem) * 0);width:100%}:is(ax-lookup-multi-column,.ax-lookup-multi-column) .ax-lookup-multi-column-table,:is(ax-lookup-multi-column,.ax-lookup-multi-column) ax-data-table{height:100%;min-height:calc(var(--spacing, .25rem) * 0);border-style:var(--tw-border-style)!important;border-width:0px!important}:is(ax-lookup-multi-column,.ax-lookup-multi-column) tr.ax-state-selected{background-color:rgba(var(--ax-sys-color-primary-surface))}@supports (color: color-mix(in lab,red,red)){:is(ax-lookup-multi-column,.ax-lookup-multi-column) tr.ax-state-selected{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-surface)) 10%,transparent)}}:is(ax-lookup-multi-column,.ax-lookup-multi-column) tr.ax-state-disabled{pointer-events:none;opacity:50%}.ax-lookup-tree{max-height:calc(var(--spacing, .25rem) * 80);overflow:auto;padding:calc(var(--spacing, .25rem) * 2)}}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-inset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-inset-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-ring-color{syntax: \"*\"; inherits: false;}@property --tw-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-ring-color{syntax: \"*\"; inherits: false;}@property --tw-inset-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-ring-inset{syntax: \"*\"; inherits: false;}@property --tw-ring-offset-width{syntax: \"<length>\"; inherits: false; initial-value: 0px;}@property --tw-ring-offset-color{syntax: \"*\"; inherits: false; initial-value: #fff;}@property --tw-ring-offset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-leading{syntax: \"*\"; inherits: false;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid;--tw-shadow: 0 0 #0000;--tw-shadow-color: initial;--tw-shadow-alpha: 100%;--tw-inset-shadow: 0 0 #0000;--tw-inset-shadow-color: initial;--tw-inset-shadow-alpha: 100%;--tw-ring-color: initial;--tw-ring-shadow: 0 0 #0000;--tw-inset-ring-color: initial;--tw-inset-ring-shadow: 0 0 #0000;--tw-ring-inset: initial;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-offset-shadow: 0 0 #0000;--tw-leading: initial;--tw-font-weight: initial}}}\n/*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: AXChipsComponent, selector: "ax-chips", inputs: ["tabIndex", "color", "look", "text"], outputs: ["textChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i1$1.AXDecoratorCloseButtonComponent, selector: "ax-close-button", inputs: ["closeAll", "icon"] }, { kind: "component", type: i1$1.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "component", type: AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disablePanelClass", "visualContextScope", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "closeOnScroll", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "component", type: AXLookupDropDownListComponent, selector: "ax-lookup-drop-down-list" }, { kind: "component", type: AXLookupMultiSelectComponent, selector: "ax-lookup-multi-select" }, { kind: "component", type: AXLookupDropDownTreeComponent, selector: "ax-lookup-drop-down-tree", inputs: ["dataSource", "valueField", "textField", "disabledField", "selectedValues", "nodeTemplate"], outputs: ["itemClick"] }, { kind: "component", type: AXLookupMultiSelectTreeComponent, selector: "ax-lookup-multi-select-tree", inputs: ["dataSource", "valueField", "textField", "disabledField", "selectedValues", "selectionBehavior", "nodeTemplate"], outputs: ["selectionChange"] }, { kind: "component", type: AXLookupMultiColumnComponent, selector: "ax-lookup-multi-column", inputs: ["dataSource", "valueField", "textField", "disabledField", "selectedValues", "itemHeight", "maxVisibleItems", "columns", "itemTemplate", "emptyTemplate", "loadingTemplate", "alternate"], outputs: ["itemClick"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
2429
|
+
{ provide: AXValuableComponent, useExisting: AXLookupComponent },
|
|
2430
|
+
], viewQueries: [{ propertyName: "popoverRef", first: true, predicate: AXPopoverComponent, descendants: true, isSignal: true }, { propertyName: "triggerSearchInput", first: true, predicate: ["triggerSearchInput"], descendants: true, isSignal: true }, { propertyName: "listView", first: true, predicate: AXLookupListViewBase, descendants: true, isSignal: true }, { propertyName: "sheetSearchRef", first: true, predicate: ["sheetSearch"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div\n #origin\n class=\"ax-editor-container ax-{{ look() }} ax-default\"\n [class.ax-lookup-trigger]=\"!isEditableTrigger()\"\n [class.ax-lookup-trigger-multiple]=\"isMultiple()\"\n [class.ax-state-disabled]=\"disabled()\"\n [class.ax-state-readonly]=\"readonly()\"\n (click)=\"onTriggerClick()\"\n>\n <ng-content select=\"ax-prefix\"></ng-content>\n\n @if (isMultiple()) {\n <div class=\"ax-lookup-chips\">\n @for (item of selectedItems(); track trackSelectedKey(item)) {\n <ax-chips class=\"ax-sm\" color=\"primary\" look=\"twotone\" [text]=\"selectedTemplate() ? '' : getItemText(item)\">\n @if (selectedTemplate()) {\n <ax-prefix>\n <ng-container\n [ngTemplateOutlet]=\"selectedTemplate()!\"\n [ngTemplateOutletContext]=\"{ $implicit: item }\"\n />\n </ax-prefix>\n }\n @if (!disabled() && !readonly()) {\n <ax-suffix>\n <button type=\"button\" tabindex=\"-1\" (click)=\"removeChip($event, item)\">\n <span class=\"ax-icon ax-icon-close\"></span>\n </button>\n </ax-suffix>\n }\n </ax-chips>\n }\n <input\n #triggerSearchInput\n type=\"text\"\n class=\"ax-input ax-lookup-trigger-search\"\n [class.ax-lookup-select-input]=\"!isEditableTrigger()\"\n [placeholder]=\"triggerSearchPlaceholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly() || !isEditableTrigger()\"\n [attr.inputmode]=\"isEditableTrigger() ? null : 'none'\"\n [value]=\"searchText()\"\n (input)=\"onTriggerSearchInput($any($event.target).value)\"\n (keydown)=\"onTriggerKeydown($event)\"\n (beforeinput)=\"onBeforeInput($event)\"\n (focus)=\"emitOnFocus($event)\"\n (blur)=\"emitOnBlur($event)\"\n />\n </div>\n } @else {\n <div class=\"ax-lookup-value\">\n @if (showSelectedTemplate()) {\n <div class=\"ax-lookup-selected-content\" aria-hidden=\"true\">\n <ng-container\n [ngTemplateOutlet]=\"selectedTemplate()!\"\n [ngTemplateOutletContext]=\"{ $implicit: selectedItems()[0] }\"\n />\n </div>\n }\n <input\n #triggerSearchInput\n type=\"text\"\n class=\"ax-input\"\n [class.ax-lookup-select-input]=\"!isEditableTrigger()\"\n [class.ax-lookup-input-overlay]=\"showSelectedTemplate()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly() || !isEditableTrigger()\"\n [attr.inputmode]=\"isEditableTrigger() ? null : 'none'\"\n [value]=\"searchText()\"\n (input)=\"onTriggerSearchInput($any($event.target).value)\"\n (keydown)=\"onTriggerKeydown($event)\"\n (beforeinput)=\"onBeforeInput($event)\"\n (focus)=\"emitOnFocus($event)\"\n (blur)=\"emitOnBlur($event)\"\n />\n </div>\n }\n\n @if (selectedValues().length > 0 && !disabled() && !readonly()) {\n <ng-content select=\"ax-clear-button\"></ng-content>\n }\n\n <button\n type=\"button\"\n class=\"ax-general-button-icon\"\n tabindex=\"-1\"\n [disabled]=\"disabled() || readonly()\"\n >\n <span\n class=\"ax-icon\"\n [class.ax-icon-chevron-down]=\"!expanded()\"\n [class.ax-icon-chevron-up]=\"expanded()\"\n ></span>\n </button>\n <ng-content select=\"ax-suffix\"></ng-content>\n</div>\n\n<ax-popover\n [target]=\"origin\"\n [openOn]=\"'manual'\"\n [closeOn]=\"'clickOut'\"\n [placement]=\"'bottom-start'\"\n [width]=\"isActionsheetStyle() ? '100%' : origin.offsetWidth + 'px'\"\n [adaptivityEnabled]=\"isActionsheetStyle()\"\n [disabled]=\"disabled() || readonly()\"\n (onClosed)=\"onPopoverClosed()\"\n>\n <div class=\"ax-lookup-popup\" [class.ax-is-actionsheet]=\"isActionsheetStyle()\" [class.ax-is-alternate]=\"alternate()\" (keydown.escape)=\"close()\">\n @if (isActionsheetStyle()) {\n <ax-header class=\"ax-solid\">\n <ax-title>{{ caption() || placeholder() || ('@acorex:selectbox.popover.title' | translate | async) }}</ax-title>\n <ax-close-button [icon]=\"isMultiple() ? 'ax-icon ax-icon-check' : 'ax-icon ax-icon-close'\"></ax-close-button>\n </ax-header>\n }\n @if (isSheetSearchEnabled()) {\n <div class=\"ax-lookup-sheet-search\">\n <ax-search-box\n #sheetSearch\n class=\"ax-sm\"\n look=\"fill\"\n [autoSearch]=\"false\"\n [delayTime]=\"0\"\n [placeholder]=\"searchPlaceholder()\"\n (onValueChanged)=\"onSheetSearchInput()\"\n (onKeyUp)=\"onSheetSearchInput()\"\n >\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n </div>\n }\n <ng-content select=\"ax-header\"></ng-content>\n @if (expanded()) {\n @switch (mode()) {\n @case ('drop-down-list') {\n <ax-lookup-drop-down-list\n [dataSource]=\"resolvedDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [itemHeight]=\"itemHeight()\"\n [maxVisibleItems]=\"maxVisibleItems()\"\n [itemTemplate]=\"itemTemplate()\"\n [emptyTemplate]=\"emptyTemplate()\"\n [loadingTemplate]=\"loadingTemplate()\"\n [alternate]=\"alternate()\"\n (itemClick)=\"handleSinglePick($event)\"\n (navigateOut)=\"onListNavigateOut($event)\"\n />\n }\n @case ('multi-select') {\n <ax-lookup-multi-select\n [dataSource]=\"resolvedDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [itemHeight]=\"itemHeight()\"\n [maxVisibleItems]=\"maxVisibleItems()\"\n [itemTemplate]=\"itemTemplate()\"\n [emptyTemplate]=\"emptyTemplate()\"\n [loadingTemplate]=\"loadingTemplate()\"\n [alternate]=\"alternate()\"\n (itemClick)=\"handleMultiToggle($event)\"\n (navigateOut)=\"onListNavigateOut($event)\"\n />\n }\n @case ('drop-down-tree') {\n <ax-lookup-drop-down-tree\n [dataSource]=\"resolvedTreeDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [nodeTemplate]=\"$any(itemTemplate())\"\n (itemClick)=\"handleSinglePick($event)\"\n />\n }\n @case ('multi-select-tree') {\n <ax-lookup-multi-select-tree\n [dataSource]=\"resolvedTreeDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [selectionBehavior]=\"treeSelectionBehavior()\"\n [nodeTemplate]=\"$any(itemTemplate())\"\n (selectionChange)=\"handleTreeSelectionChange($event)\"\n />\n }\n @case ('multi-column') {\n <ax-lookup-multi-column\n [dataSource]=\"resolvedDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [itemHeight]=\"itemHeight()\"\n [maxVisibleItems]=\"maxVisibleItems()\"\n [columns]=\"columns()\"\n [itemTemplate]=\"itemTemplate()\"\n [emptyTemplate]=\"emptyTemplate()\"\n [loadingTemplate]=\"loadingTemplate()\"\n [alternate]=\"alternate()\"\n (itemClick)=\"handleSinglePick($event)\"\n />\n }\n @case ('multi-column-tree') {\n <ax-lookup-multi-column-tree\n [dataSource]=\"resolvedDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [parentField]=\"treeParentField()\"\n [hasChildrenField]=\"hasChildrenField()\"\n [selectedValues]=\"selectedValues()\"\n [itemHeight]=\"itemHeight()\"\n [maxVisibleItems]=\"maxVisibleItems()\"\n [columns]=\"columns()\"\n [itemTemplate]=\"itemTemplate()\"\n [emptyTemplate]=\"emptyTemplate()\"\n [loadingTemplate]=\"loadingTemplate()\"\n [alternate]=\"alternate()\"\n (itemClick)=\"handleSinglePick($event)\"\n />\n }\n }\n }\n <ng-content select=\"ax-footer\"></ng-content>\n </div>\n</ax-popover>\n<ng-content select=\"ax-validation-rule\"></ng-content>\n", styles: ["@layer properties;@layer components{ax-lookup{display:block;width:100%}ax-lookup .ax-editor-container{justify-content:flex-start;gap:calc(var(--spacing, .25rem) * 1)}ax-lookup .ax-lookup-trigger{cursor:pointer;-webkit-user-select:none;user-select:none}ax-lookup .ax-lookup-trigger-multiple{height:auto;min-height:calc(var(--spacing, .25rem) * 9);padding-block:calc(var(--spacing, .25rem) * 1)}ax-lookup .ax-lookup-value{position:relative;display:flex;min-width:calc(var(--spacing, .25rem) * 0);flex:1;align-items:center;overflow:hidden}ax-lookup .ax-lookup-select-input{cursor:pointer;caret-color:transparent;-webkit-user-select:none;user-select:none}ax-lookup .ax-lookup-selected-content{pointer-events:none;position:relative;z-index:0;display:flex;min-width:calc(var(--spacing, .25rem) * 0);flex:1;align-items:center;overflow:hidden}ax-lookup .ax-lookup-input-overlay{position:absolute;inset:calc(var(--spacing, .25rem) * 0);z-index:10;margin:calc(var(--spacing, .25rem) * 0)!important;height:100%;width:100%;border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding:calc(var(--spacing, .25rem) * 0)!important;color:transparent;caret-color:transparent}ax-lookup .ax-lookup-chips{display:flex;min-width:calc(var(--spacing, .25rem) * 0);flex:1;flex-wrap:wrap;align-items:center;gap:calc(var(--spacing, .25rem) * 1)}ax-lookup .ax-lookup-trigger-search{margin:calc(var(--spacing, .25rem) * 0)!important;height:calc(var(--spacing, .25rem) * 7.5);width:auto!important;min-width:calc(var(--spacing, .25rem) * 16);flex:1;flex-basis:calc(var(--spacing, .25rem) * 16)}ax-lookup .ax-lookup-placeholder{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){ax-lookup .ax-lookup-placeholder{color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 50%,transparent)}}ax-lookup ax-chips ax-prefix,ax-lookup ax-chips ax-suffix{padding:calc(var(--spacing, .25rem) * 0)!important}ax-lookup ax-chips ax-suffix button{display:flex;cursor:pointer;align-items:center;border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding:calc(var(--spacing, .25rem) * 0)}.ax-lookup-popup{box-sizing:border-box;display:flex;width:100%;flex-direction:column;overflow:hidden;border-radius:var(--ax-sys-border-radius);border-style:var(--tw-border-style);border-width:1px;border-color:rgba(var(--ax-sys-color-border-surface));background-color:rgba(var(--ax-sys-color-lightest-surface));--tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ax-lookup-popup:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:rgba(var(--ax-sys-color-darkest-surface))}.ax-lookup-popup.ax-is-actionsheet{border-bottom-right-radius:0;border-bottom-left-radius:0;--tw-shadow: 0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ax-lookup-popup.ax-is-actionsheet>ax-header.ax-solid{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:rgba(var(--ax-sys-color-border-lightest-surface))}.ax-lookup-popup.ax-is-actionsheet>ax-header.ax-solid .ax-icon-check{color:rgba(var(--ax-sys-color-primary-surface))}.ax-lookup-popup.ax-is-actionsheet>ax-header.ax-solid ax-title{font-size:var(--text-base, 1rem);line-height:var(--tw-leading, var(--text-base--line-height, 1.5 ));--tw-leading: calc(var(--spacing, .25rem) * 6);line-height:calc(var(--spacing, .25rem) * 6);--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500)}.ax-lookup-popup .ax-lookup-sheet-search{flex-shrink:0;border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:rgba(var(--ax-sys-color-border-lightest-surface));padding-inline:calc(var(--spacing, .25rem) * 3);padding-block:calc(var(--spacing, .25rem) * 2)}.ax-lookup-popup>ax-header:not(.ax-solid),.ax-lookup-popup>ax-footer{flex-shrink:0;border-color:rgba(var(--ax-sys-color-border-lightest-surface))}.ax-lookup-popup>ax-header:not(.ax-solid){border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.ax-lookup-popup>ax-footer{border-top-style:var(--tw-border-style);border-top-width:1px}.ax-lookup-viewport{width:100%}.ax-lookup-empty{display:flex;min-height:calc(var(--spacing, .25rem) * 12);width:100%;align-items:center;justify-content:center;padding-inline:calc(var(--spacing, .25rem) * 3);padding-block:calc(var(--spacing, .25rem) * 3);text-align:center;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-empty{color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 60%,transparent)}}.ax-lookup-option-host{box-sizing:border-box;display:flex;cursor:pointer;align-items:center;gap:calc(var(--spacing, .25rem) * 2);border-style:var(--tw-border-style);border-width:1px;border-color:transparent;padding-inline:calc(var(--spacing, .25rem) * 3);font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgba(var(--ax-sys-color-on-surface));--tw-outline-style: none;outline-style:none}.ax-lookup-option-host.ax-state-alternate{background-color:rgba(var(--ax-sys-color-light-surface))}.ax-lookup-option-host.ax-state-alternate:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:rgba(var(--ax-sys-color-surface))}.ax-lookup-option-host:hover,.ax-lookup-option-host.ax-state-active{background-color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-option-host:hover,.ax-lookup-option-host.ax-state-active{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 10%,transparent)}}.ax-lookup-option-host.ax-state-alternate:hover,.ax-lookup-option-host.ax-state-alternate.ax-state-active{background-color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-option-host.ax-state-alternate:hover,.ax-lookup-option-host.ax-state-alternate.ax-state-active{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 15%,transparent)}}.ax-lookup-option-host.ax-state-selected,.ax-lookup-option-host.ax-state-selected:hover,.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate,.ax-lookup-option-host.ax-state-selected.ax-state-alternate:hover,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active{background-color:rgba(var(--ax-sys-color-primary-lightest-surface))}:is(.ax-lookup-option-host.ax-state-selected,.ax-lookup-option-host.ax-state-selected:hover,.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate,.ax-lookup-option-host.ax-state-selected.ax-state-alternate:hover,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active):where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:rgba(var(--ax-sys-color-primary-darkest-surface))}@supports (color: color-mix(in lab,red,red)){:is(.ax-lookup-option-host.ax-state-selected,.ax-lookup-option-host.ax-state-selected:hover,.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate,.ax-lookup-option-host.ax-state-selected.ax-state-alternate:hover,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active):where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-darkest-surface)) 25%,transparent)}}.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active{background-color:rgba(var(--ax-sys-color-primary-lightest-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-lightest-surface)) 80%,transparent)}}:is(.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active):where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:rgba(var(--ax-sys-color-primary-darkest-surface))}@supports (color: color-mix(in lab,red,red)){:is(.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active):where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-darkest-surface)) 40%,transparent)}}.ax-lookup-option-host .ax-lookup-checkbox{pointer-events:none;width:calc(var(--spacing, .25rem) * 4);height:calc(var(--spacing, .25rem) * 4);flex-shrink:0;accent-color:rgba(var(--ax-sys-color-primary-surface))}.ax-lookup-option-host .ax-lookup-option-loading{width:100%;padding-inline:calc(var(--spacing, .25rem) * 3);font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-option-host .ax-lookup-option-loading{color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 50%,transparent)}}.ax-lookup-option{justify-content:space-between}.ax-lookup-option-host.ax-state-selected,.ax-lookup-option.ax-state-selected{color:rgba(var(--ax-sys-color-primary-surface))!important}.ax-lookup-option-host.ax-state-selected .ax-lookup-option-text,.ax-lookup-option-host.ax-state-selected .ax-lookup-option-check,.ax-lookup-option-host.ax-state-selected ax-icon{color:rgba(var(--ax-sys-color-primary-surface))!important}.ax-lookup-option-text{min-width:calc(var(--spacing, .25rem) * 0);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ax-lookup-option-check{margin-inline-start:auto;flex-shrink:0;color:rgba(var(--ax-sys-color-primary-surface))!important}ax-lookup-multi-column,ax-lookup-multi-column-tree,.ax-lookup-multi-column,.ax-lookup-multi-column-tree{display:block;min-height:calc(var(--spacing, .25rem) * 0);width:100%}:is(ax-lookup-multi-column,ax-lookup-multi-column-tree,.ax-lookup-multi-column,.ax-lookup-multi-column-tree) .ax-lookup-multi-column-table,:is(ax-lookup-multi-column,ax-lookup-multi-column-tree,.ax-lookup-multi-column,.ax-lookup-multi-column-tree) ax-data-table{height:100%;min-height:calc(var(--spacing, .25rem) * 0);border-style:var(--tw-border-style)!important;border-width:0px!important}:is(ax-lookup-multi-column,ax-lookup-multi-column-tree,.ax-lookup-multi-column,.ax-lookup-multi-column-tree) tr.ax-state-selected{background-color:rgba(var(--ax-sys-color-primary-surface))}@supports (color: color-mix(in lab,red,red)){:is(ax-lookup-multi-column,ax-lookup-multi-column-tree,.ax-lookup-multi-column,.ax-lookup-multi-column-tree) tr.ax-state-selected{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-surface)) 10%,transparent)}}:is(ax-lookup-multi-column,ax-lookup-multi-column-tree,.ax-lookup-multi-column,.ax-lookup-multi-column-tree) tr.ax-state-disabled{pointer-events:none;opacity:50%}.ax-lookup-tree{max-height:calc(var(--spacing, .25rem) * 80);overflow:auto;padding:calc(var(--spacing, .25rem) * 2)}}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-inset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-inset-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-ring-color{syntax: \"*\"; inherits: false;}@property --tw-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-ring-color{syntax: \"*\"; inherits: false;}@property --tw-inset-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-ring-inset{syntax: \"*\"; inherits: false;}@property --tw-ring-offset-width{syntax: \"<length>\"; inherits: false; initial-value: 0px;}@property --tw-ring-offset-color{syntax: \"*\"; inherits: false; initial-value: #fff;}@property --tw-ring-offset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-leading{syntax: \"*\"; inherits: false;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid;--tw-shadow: 0 0 #0000;--tw-shadow-color: initial;--tw-shadow-alpha: 100%;--tw-inset-shadow: 0 0 #0000;--tw-inset-shadow-color: initial;--tw-inset-shadow-alpha: 100%;--tw-ring-color: initial;--tw-ring-shadow: 0 0 #0000;--tw-inset-ring-color: initial;--tw-inset-ring-shadow: 0 0 #0000;--tw-ring-inset: initial;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-offset-shadow: 0 0 #0000;--tw-leading: initial;--tw-font-weight: initial}}}\n/*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: AXChipsComponent, selector: "ax-chips", inputs: ["tabIndex", "color", "look", "text"], outputs: ["textChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i1$1.AXDecoratorClearButtonComponent, selector: "ax-clear-button", inputs: ["icon"] }, { kind: "component", type: i1$1.AXDecoratorCloseButtonComponent, selector: "ax-close-button", inputs: ["closeAll", "icon"] }, { kind: "component", type: i1$1.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "component", type: AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disablePanelClass", "visualContextScope", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "closeOnScroll", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "component", type: AXSearchBoxComponent, selector: "ax-search-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "class", "delayTime", "type", "autoSearch"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "component", type: AXLookupDropDownListComponent, selector: "ax-lookup-drop-down-list" }, { kind: "component", type: AXLookupMultiSelectComponent, selector: "ax-lookup-multi-select" }, { kind: "component", type: AXLookupDropDownTreeComponent, selector: "ax-lookup-drop-down-tree", inputs: ["dataSource", "valueField", "textField", "disabledField", "selectedValues", "nodeTemplate"], outputs: ["itemClick"] }, { kind: "component", type: AXLookupMultiSelectTreeComponent, selector: "ax-lookup-multi-select-tree", inputs: ["dataSource", "valueField", "textField", "disabledField", "selectedValues", "selectionBehavior", "nodeTemplate"], outputs: ["selectionChange"] }, { kind: "component", type: AXLookupMultiColumnComponent, selector: "ax-lookup-multi-column", inputs: ["dataSource", "valueField", "textField", "disabledField", "selectedValues", "itemHeight", "maxVisibleItems", "columns", "itemTemplate", "emptyTemplate", "loadingTemplate", "alternate"], outputs: ["itemClick"] }, { kind: "component", type: AXLookupMultiColumnTreeComponent, selector: "ax-lookup-multi-column-tree", inputs: ["dataSource", "valueField", "textField", "disabledField", "parentField", "hasChildrenField", "selectedValues", "itemHeight", "maxVisibleItems", "columns", "itemTemplate", "emptyTemplate", "loadingTemplate", "alternate"], outputs: ["itemClick"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
1772
2431
|
}
|
|
1773
2432
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupComponent, decorators: [{
|
|
1774
2433
|
type: Component,
|
|
@@ -1779,17 +2438,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
1779
2438
|
AXChipsComponent,
|
|
1780
2439
|
AXDecoratorModule,
|
|
1781
2440
|
AXPopoverComponent,
|
|
2441
|
+
AXSearchBoxComponent,
|
|
1782
2442
|
AXLookupDropDownListComponent,
|
|
1783
2443
|
AXLookupMultiSelectComponent,
|
|
1784
2444
|
AXLookupDropDownTreeComponent,
|
|
1785
2445
|
AXLookupMultiSelectTreeComponent,
|
|
1786
2446
|
AXLookupMultiColumnComponent,
|
|
2447
|
+
AXLookupMultiColumnTreeComponent,
|
|
1787
2448
|
], providers: [
|
|
1788
2449
|
{ provide: AXComponent, useExisting: AXLookupComponent },
|
|
1789
2450
|
{ provide: AXClearableComponent, useExisting: AXLookupComponent },
|
|
1790
2451
|
{ provide: AXClosableComponent, useExisting: AXLookupComponent },
|
|
1791
|
-
], template: "<div\n #origin\n class=\"ax-editor-container ax-{{ look() }} ax-default\"\n [class.ax-lookup-trigger]=\"!isEditableTrigger()\"\n [class.ax-lookup-trigger-multiple]=\"isMultiple()\"\n [class.ax-state-disabled]=\"disabled()\"\n [class.ax-state-readonly]=\"readonly()\"\n (click)=\"onTriggerClick()\"\n>\n <ng-content select=\"ax-prefix\"></ng-content>\n\n @if (isMultiple()) {\n <div class=\"ax-lookup-chips\">\n @for (item of selectedItems(); track trackSelectedKey(item)) {\n <ax-chips class=\"ax-sm\" color=\"primary\" look=\"twotone\" [text]=\"selectedTemplate() ? '' : getItemText(item)\">\n @if (selectedTemplate()) {\n <ax-prefix>\n <ng-container\n [ngTemplateOutlet]=\"selectedTemplate()!\"\n [ngTemplateOutletContext]=\"{ $implicit: item }\"\n />\n </ax-prefix>\n }\n @if (!disabled() && !readonly()) {\n <ax-suffix>\n <button type=\"button\" tabindex=\"-1\" (click)=\"removeChip($event, item)\">\n <span class=\"ax-icon ax-icon-close\"></span>\n </button>\n </ax-suffix>\n }\n </ax-chips>\n }\n <input\n #triggerSearchInput\n type=\"text\"\n class=\"ax-input ax-lookup-trigger-search\"\n [class.ax-lookup-select-input]=\"!isEditableTrigger()\"\n [placeholder]=\"triggerSearchPlaceholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly() || !isEditableTrigger()\"\n [attr.inputmode]=\"isEditableTrigger() ? null : 'none'\"\n [value]=\"searchText()\"\n (input)=\"onTriggerSearchInput($any($event.target).value)\"\n (keydown)=\"onTriggerKeydown($event)\"\n (beforeinput)=\"onBeforeInput($event)\"\n (focus)=\"emitOnFocus($event)\"\n (blur)=\"emitOnBlur($event)\"\n />\n </div>\n } @else {\n <div class=\"ax-lookup-value\">\n @if (showSelectedTemplate()) {\n <div class=\"ax-lookup-selected-content\" aria-hidden=\"true\">\n <ng-container\n [ngTemplateOutlet]=\"selectedTemplate()!\"\n [ngTemplateOutletContext]=\"{ $implicit: selectedItems()[0] }\"\n />\n </div>\n }\n <input\n #triggerSearchInput\n type=\"text\"\n class=\"ax-input\"\n [class.ax-lookup-select-input]=\"!isEditableTrigger()\"\n [class.ax-lookup-input-overlay]=\"showSelectedTemplate()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly() || !isEditableTrigger()\"\n [attr.inputmode]=\"isEditableTrigger() ? null : 'none'\"\n [value]=\"searchText()\"\n (input)=\"onTriggerSearchInput($any($event.target).value)\"\n (keydown)=\"onTriggerKeydown($event)\"\n (beforeinput)=\"onBeforeInput($event)\"\n (focus)=\"emitOnFocus($event)\"\n (blur)=\"emitOnBlur($event)\"\n />\n </div>\n }\n\n @if (selectedValues().length > 0 && !disabled() && !readonly()) {\n <ng-content select=\"ax-clear-button\"></ng-content>\n }\n\n <button\n type=\"button\"\n class=\"ax-general-button-icon\"\n tabindex=\"-1\"\n [disabled]=\"disabled() || readonly()\"\n >\n <span\n class=\"ax-icon\"\n [class.ax-icon-chevron-down]=\"!expanded()\"\n [class.ax-icon-chevron-up]=\"expanded()\"\n ></span>\n </button>\n <ng-content select=\"ax-suffix\"></ng-content>\n</div>\n\n<ax-popover\n [target]=\"origin\"\n [openOn]=\"'manual'\"\n [closeOn]=\"'clickOut'\"\n [placement]=\"'bottom-start'\"\n [width]=\"isActionsheetStyle() ? '100%' : origin.offsetWidth + 'px'\"\n [adaptivityEnabled]=\"isActionsheetStyle()\"\n [disabled]=\"disabled() || readonly()\"\n (onClosed)=\"onPopoverClosed()\"\n>\n <div class=\"ax-lookup-popup\" [class.ax-is-actionsheet]=\"isActionsheetStyle()\" [class.ax-is-alternate]=\"alternate()\" (keydown.escape)=\"close()\">\n @if (isActionsheetStyle()) {\n <ax-header class=\"ax-solid\">\n <ax-title>{{ caption() || placeholder() || ('@acorex:selectbox.popover.title' | translate | async) }}</ax-title>\n <ax-close-button [icon]=\"isMultiple() ? 'ax-icon ax-icon-check' : 'ax-icon ax-icon-close'\"></ax-close-button>\n </ax-header>\n }\n <ng-content select=\"ax-header\"></ng-content>\n @if (expanded()) {\n @switch (mode()) {\n @case ('drop-down-list') {\n <ax-lookup-drop-down-list\n [dataSource]=\"resolvedDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [itemHeight]=\"itemHeight()\"\n [maxVisibleItems]=\"maxVisibleItems()\"\n [itemTemplate]=\"itemTemplate()\"\n [emptyTemplate]=\"emptyTemplate()\"\n [loadingTemplate]=\"loadingTemplate()\"\n [alternate]=\"alternate()\"\n (itemClick)=\"handleSinglePick($event)\"\n (navigateOut)=\"onListNavigateOut($event)\"\n />\n }\n @case ('multi-select') {\n <ax-lookup-multi-select\n [dataSource]=\"resolvedDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [itemHeight]=\"itemHeight()\"\n [maxVisibleItems]=\"maxVisibleItems()\"\n [itemTemplate]=\"itemTemplate()\"\n [emptyTemplate]=\"emptyTemplate()\"\n [loadingTemplate]=\"loadingTemplate()\"\n [alternate]=\"alternate()\"\n (itemClick)=\"handleMultiToggle($event)\"\n (navigateOut)=\"onListNavigateOut($event)\"\n />\n }\n @case ('drop-down-tree') {\n <ax-lookup-drop-down-tree\n [dataSource]=\"treeDataSource()!\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [nodeTemplate]=\"$any(itemTemplate())\"\n (itemClick)=\"handleSinglePick($event)\"\n />\n }\n @case ('multi-select-tree') {\n <ax-lookup-multi-select-tree\n [dataSource]=\"treeDataSource()!\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [selectionBehavior]=\"treeSelectionBehavior()\"\n [nodeTemplate]=\"$any(itemTemplate())\"\n (selectionChange)=\"handleTreeSelectionChange($event)\"\n />\n }\n @case ('multi-column') {\n <ax-lookup-multi-column\n [dataSource]=\"resolvedDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [itemHeight]=\"itemHeight()\"\n [maxVisibleItems]=\"maxVisibleItems()\"\n [columns]=\"columns()\"\n [itemTemplate]=\"itemTemplate()\"\n [emptyTemplate]=\"emptyTemplate()\"\n [loadingTemplate]=\"loadingTemplate()\"\n [alternate]=\"alternate()\"\n (itemClick)=\"handleSinglePick($event)\"\n />\n }\n }\n }\n <ng-content select=\"ax-footer\"></ng-content>\n </div>\n</ax-popover>\n", styles: ["@layer properties;@layer components{ax-lookup{display:block;width:100%}ax-lookup .ax-editor-container{justify-content:flex-start;gap:calc(var(--spacing, .25rem) * 1)}ax-lookup .ax-editor-container.ax-state-disabled{cursor:not-allowed;opacity:50%}ax-lookup .ax-editor-container.ax-state-disabled .ax-input,ax-lookup .ax-editor-container.ax-state-disabled .ax-editor{cursor:not-allowed}ax-lookup .ax-editor-container.ax-state-readonly{opacity:75%}ax-lookup .ax-lookup-trigger{cursor:pointer;-webkit-user-select:none;user-select:none}ax-lookup .ax-lookup-trigger-multiple{height:auto;min-height:calc(var(--spacing, .25rem) * 9);padding-block:calc(var(--spacing, .25rem) * 1)}ax-lookup .ax-lookup-value{position:relative;display:flex;min-width:calc(var(--spacing, .25rem) * 0);flex:1;align-items:center;overflow:hidden}ax-lookup .ax-lookup-select-input{cursor:pointer;caret-color:transparent;-webkit-user-select:none;user-select:none}ax-lookup .ax-lookup-selected-content{pointer-events:none;position:relative;z-index:0;display:flex;min-width:calc(var(--spacing, .25rem) * 0);flex:1;align-items:center;overflow:hidden}ax-lookup .ax-lookup-input-overlay{position:absolute;inset:calc(var(--spacing, .25rem) * 0);z-index:10;margin:calc(var(--spacing, .25rem) * 0)!important;height:100%;width:100%;border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding:calc(var(--spacing, .25rem) * 0)!important;color:transparent;caret-color:transparent}ax-lookup .ax-lookup-chips{display:flex;min-width:calc(var(--spacing, .25rem) * 0);flex:1;flex-wrap:wrap;align-items:center;gap:calc(var(--spacing, .25rem) * 1)}ax-lookup .ax-lookup-trigger-search{margin:calc(var(--spacing, .25rem) * 0)!important;height:calc(var(--spacing, .25rem) * 7.5);width:auto!important;min-width:calc(var(--spacing, .25rem) * 16);flex:1;flex-basis:calc(var(--spacing, .25rem) * 16)}ax-lookup .ax-lookup-placeholder{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){ax-lookup .ax-lookup-placeholder{color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 50%,transparent)}}ax-lookup ax-chips ax-prefix,ax-lookup ax-chips ax-suffix{padding:calc(var(--spacing, .25rem) * 0)!important}ax-lookup ax-chips ax-suffix button{display:flex;cursor:pointer;align-items:center;border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding:calc(var(--spacing, .25rem) * 0)}.ax-lookup-popup{box-sizing:border-box;display:flex;width:100%;flex-direction:column;overflow:hidden;border-radius:var(--ax-sys-border-radius);border-style:var(--tw-border-style);border-width:1px;border-color:rgba(var(--ax-sys-color-border-surface));background-color:rgba(var(--ax-sys-color-lightest-surface));--tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ax-lookup-popup:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:rgba(var(--ax-sys-color-darkest-surface))}.ax-lookup-popup.ax-is-actionsheet{border-bottom-right-radius:0;border-bottom-left-radius:0;--tw-shadow: 0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ax-lookup-popup.ax-is-actionsheet>ax-header.ax-solid{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:rgba(var(--ax-sys-color-border-lightest-surface))}.ax-lookup-popup.ax-is-actionsheet>ax-header.ax-solid .ax-icon-check{color:rgba(var(--ax-sys-color-primary-surface))}.ax-lookup-popup.ax-is-actionsheet>ax-header.ax-solid ax-title{font-size:var(--text-base, 1rem);line-height:var(--tw-leading, var(--text-base--line-height, 1.5 ));--tw-leading: calc(var(--spacing, .25rem) * 6);line-height:calc(var(--spacing, .25rem) * 6);--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500)}.ax-lookup-popup>ax-header:not(.ax-solid),.ax-lookup-popup>ax-footer{flex-shrink:0;border-color:rgba(var(--ax-sys-color-border-lightest-surface))}.ax-lookup-popup>ax-header:not(.ax-solid){border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.ax-lookup-popup>ax-footer{border-top-style:var(--tw-border-style);border-top-width:1px}.ax-lookup-viewport{width:100%}.ax-lookup-empty{display:flex;min-height:calc(var(--spacing, .25rem) * 12);width:100%;align-items:center;justify-content:center;padding-inline:calc(var(--spacing, .25rem) * 3);padding-block:calc(var(--spacing, .25rem) * 3);text-align:center;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-empty{color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 60%,transparent)}}.ax-lookup-option-host{box-sizing:border-box;cursor:pointer;border-style:var(--tw-border-style);border-width:1px;border-color:transparent;--tw-outline-style: none;outline-style:none}.ax-lookup-option-host.ax-state-alternate{background-color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-option-host.ax-state-alternate{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 5%,transparent)}}.ax-lookup-option-host:hover,.ax-lookup-option-host.ax-state-active{background-color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-option-host:hover,.ax-lookup-option-host.ax-state-active{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 10%,transparent)}}.ax-lookup-option-host.ax-state-alternate:hover,.ax-lookup-option-host.ax-state-alternate.ax-state-active{background-color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-option-host.ax-state-alternate:hover,.ax-lookup-option-host.ax-state-alternate.ax-state-active{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 15%,transparent)}}.ax-lookup-option-host.ax-state-selected,.ax-lookup-option-host.ax-state-selected:hover,.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate,.ax-lookup-option-host.ax-state-selected.ax-state-alternate:hover,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active{background-color:rgba(var(--ax-sys-color-primary-lightest-surface))}:is(.ax-lookup-option-host.ax-state-selected,.ax-lookup-option-host.ax-state-selected:hover,.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate,.ax-lookup-option-host.ax-state-selected.ax-state-alternate:hover,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active):where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:rgba(var(--ax-sys-color-primary-darkest-surface))}@supports (color: color-mix(in lab,red,red)){:is(.ax-lookup-option-host.ax-state-selected,.ax-lookup-option-host.ax-state-selected:hover,.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate,.ax-lookup-option-host.ax-state-selected.ax-state-alternate:hover,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active):where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-darkest-surface)) 25%,transparent)}}.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active{background-color:rgba(var(--ax-sys-color-primary-lightest-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-lightest-surface)) 80%,transparent)}}:is(.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active):where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:rgba(var(--ax-sys-color-primary-darkest-surface))}@supports (color: color-mix(in lab,red,red)){:is(.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active):where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-darkest-surface)) 40%,transparent)}}.ax-lookup-option-host.ax-state-disabled{cursor:not-allowed;opacity:50%}.ax-lookup-option-host.ax-lookup-option-host--check{display:flex;align-items:center;gap:calc(var(--spacing, .25rem) * 2);padding-inline:calc(var(--spacing, .25rem) * 3)}.ax-lookup-option-host .ax-lookup-checkbox{pointer-events:none;width:calc(var(--spacing, .25rem) * 4);height:calc(var(--spacing, .25rem) * 4);flex-shrink:0;accent-color:rgba(var(--ax-sys-color-primary-surface))}.ax-lookup-option-host .ax-lookup-option-loading{width:100%;padding-inline:calc(var(--spacing, .25rem) * 3);font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-option-host .ax-lookup-option-loading{color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 50%,transparent)}}.ax-lookup-option{display:flex;align-items:center;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 2);padding-inline:calc(var(--spacing, .25rem) * 3);font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgba(var(--ax-sys-color-on-surface))}.ax-lookup-option.ax-state-selected{color:rgba(var(--ax-sys-color-primary-surface))}.ax-lookup-option .ax-lookup-option-text{min-width:calc(var(--spacing, .25rem) * 0);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ax-lookup-option .ax-lookup-option-check{flex-shrink:0;color:rgba(var(--ax-sys-color-primary-surface))}ax-lookup-multi-column,.ax-lookup-multi-column{display:block;min-height:calc(var(--spacing, .25rem) * 0);width:100%}:is(ax-lookup-multi-column,.ax-lookup-multi-column) .ax-lookup-multi-column-table,:is(ax-lookup-multi-column,.ax-lookup-multi-column) ax-data-table{height:100%;min-height:calc(var(--spacing, .25rem) * 0);border-style:var(--tw-border-style)!important;border-width:0px!important}:is(ax-lookup-multi-column,.ax-lookup-multi-column) tr.ax-state-selected{background-color:rgba(var(--ax-sys-color-primary-surface))}@supports (color: color-mix(in lab,red,red)){:is(ax-lookup-multi-column,.ax-lookup-multi-column) tr.ax-state-selected{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-surface)) 10%,transparent)}}:is(ax-lookup-multi-column,.ax-lookup-multi-column) tr.ax-state-disabled{pointer-events:none;opacity:50%}.ax-lookup-tree{max-height:calc(var(--spacing, .25rem) * 80);overflow:auto;padding:calc(var(--spacing, .25rem) * 2)}}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-inset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-inset-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-ring-color{syntax: \"*\"; inherits: false;}@property --tw-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-ring-color{syntax: \"*\"; inherits: false;}@property --tw-inset-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-ring-inset{syntax: \"*\"; inherits: false;}@property --tw-ring-offset-width{syntax: \"<length>\"; inherits: false; initial-value: 0px;}@property --tw-ring-offset-color{syntax: \"*\"; inherits: false; initial-value: #fff;}@property --tw-ring-offset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-leading{syntax: \"*\"; inherits: false;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid;--tw-shadow: 0 0 #0000;--tw-shadow-color: initial;--tw-shadow-alpha: 100%;--tw-inset-shadow: 0 0 #0000;--tw-inset-shadow-color: initial;--tw-inset-shadow-alpha: 100%;--tw-ring-color: initial;--tw-ring-shadow: 0 0 #0000;--tw-inset-ring-color: initial;--tw-inset-ring-shadow: 0 0 #0000;--tw-ring-inset: initial;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-offset-shadow: 0 0 #0000;--tw-leading: initial;--tw-font-weight: initial}}}\n/*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */\n"] }]
|
|
1792
|
-
}], ctorParameters: () => [], propDecorators: { mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], dataSource: [{ type: i0.Input, args: [{ isSignal: true, alias: "dataSource", required: false }] }], treeDataSource: [{ type: i0.Input, args: [{ isSignal: true, alias: "treeDataSource", required: false }] }], valueField: [{ type: i0.Input, args: [{ isSignal: true, alias: "valueField", required: false }] }], textField: [{ type: i0.Input, args: [{ isSignal: true, alias: "textField", required: false }] }], disabledField: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabledField", required: false }] }], columns: [{ type: i0.Input, args: [{ isSignal: true, alias: "columns", required: false }] }], searchable: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchable", required: false }] }], adaptivityEnabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "adaptivityEnabled", required: false }] }], caption: [{ type: i0.Input, args: [{ isSignal: true, alias: "caption", required: false }] }], alternate: [{ type: i0.Input, args: [{ isSignal: true, alias: "alternate", required: false }] }], searchPlaceholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchPlaceholder", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], look: [{ type: i0.Input, args: [{ isSignal: true, alias: "look", required: false }] }, { type: i0.Output, args: ["lookChange"] }], itemHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemHeight", required: false }] }], maxVisibleItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxVisibleItems", required: false }] }], treeSelectionBehavior: [{ type: i0.Input, args: [{ isSignal: true, alias: "treeSelectionBehavior", required: false }] }], itemTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemTemplate", required: false }] }], selectedTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedTemplate", required: false }] }], emptyTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "emptyTemplate", required: false }] }], loadingTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "loadingTemplate", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], onValueChanged: [{ type: i0.Output, args: ["onValueChanged"] }], onSelectionChanged: [{ type: i0.Output, args: ["onSelectionChanged"] }], onFocus: [{ type: i0.Output, args: ["onFocus"] }], onBlur: [{ type: i0.Output, args: ["onBlur"] }], onItemClick: [{ type: i0.Output, args: ["onItemClick"] }], onItemSelected: [{ type: i0.Output, args: ["onItemSelected"] }], onOpened: [{ type: i0.Output, args: ["onOpened"] }], onClosed: [{ type: i0.Output, args: ["onClosed"] }], popoverRef: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXPopoverComponent), { isSignal: true }] }], triggerSearchInput: [{ type: i0.ViewChild, args: ['triggerSearchInput', { isSignal: true }] }], listView: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXLookupListViewBase), { isSignal: true }] }] } });
|
|
2452
|
+
{ provide: AXValuableComponent, useExisting: AXLookupComponent },
|
|
2453
|
+
], template: "<div\n #origin\n class=\"ax-editor-container ax-{{ look() }} ax-default\"\n [class.ax-lookup-trigger]=\"!isEditableTrigger()\"\n [class.ax-lookup-trigger-multiple]=\"isMultiple()\"\n [class.ax-state-disabled]=\"disabled()\"\n [class.ax-state-readonly]=\"readonly()\"\n (click)=\"onTriggerClick()\"\n>\n <ng-content select=\"ax-prefix\"></ng-content>\n\n @if (isMultiple()) {\n <div class=\"ax-lookup-chips\">\n @for (item of selectedItems(); track trackSelectedKey(item)) {\n <ax-chips class=\"ax-sm\" color=\"primary\" look=\"twotone\" [text]=\"selectedTemplate() ? '' : getItemText(item)\">\n @if (selectedTemplate()) {\n <ax-prefix>\n <ng-container\n [ngTemplateOutlet]=\"selectedTemplate()!\"\n [ngTemplateOutletContext]=\"{ $implicit: item }\"\n />\n </ax-prefix>\n }\n @if (!disabled() && !readonly()) {\n <ax-suffix>\n <button type=\"button\" tabindex=\"-1\" (click)=\"removeChip($event, item)\">\n <span class=\"ax-icon ax-icon-close\"></span>\n </button>\n </ax-suffix>\n }\n </ax-chips>\n }\n <input\n #triggerSearchInput\n type=\"text\"\n class=\"ax-input ax-lookup-trigger-search\"\n [class.ax-lookup-select-input]=\"!isEditableTrigger()\"\n [placeholder]=\"triggerSearchPlaceholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly() || !isEditableTrigger()\"\n [attr.inputmode]=\"isEditableTrigger() ? null : 'none'\"\n [value]=\"searchText()\"\n (input)=\"onTriggerSearchInput($any($event.target).value)\"\n (keydown)=\"onTriggerKeydown($event)\"\n (beforeinput)=\"onBeforeInput($event)\"\n (focus)=\"emitOnFocus($event)\"\n (blur)=\"emitOnBlur($event)\"\n />\n </div>\n } @else {\n <div class=\"ax-lookup-value\">\n @if (showSelectedTemplate()) {\n <div class=\"ax-lookup-selected-content\" aria-hidden=\"true\">\n <ng-container\n [ngTemplateOutlet]=\"selectedTemplate()!\"\n [ngTemplateOutletContext]=\"{ $implicit: selectedItems()[0] }\"\n />\n </div>\n }\n <input\n #triggerSearchInput\n type=\"text\"\n class=\"ax-input\"\n [class.ax-lookup-select-input]=\"!isEditableTrigger()\"\n [class.ax-lookup-input-overlay]=\"showSelectedTemplate()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly() || !isEditableTrigger()\"\n [attr.inputmode]=\"isEditableTrigger() ? null : 'none'\"\n [value]=\"searchText()\"\n (input)=\"onTriggerSearchInput($any($event.target).value)\"\n (keydown)=\"onTriggerKeydown($event)\"\n (beforeinput)=\"onBeforeInput($event)\"\n (focus)=\"emitOnFocus($event)\"\n (blur)=\"emitOnBlur($event)\"\n />\n </div>\n }\n\n @if (selectedValues().length > 0 && !disabled() && !readonly()) {\n <ng-content select=\"ax-clear-button\"></ng-content>\n }\n\n <button\n type=\"button\"\n class=\"ax-general-button-icon\"\n tabindex=\"-1\"\n [disabled]=\"disabled() || readonly()\"\n >\n <span\n class=\"ax-icon\"\n [class.ax-icon-chevron-down]=\"!expanded()\"\n [class.ax-icon-chevron-up]=\"expanded()\"\n ></span>\n </button>\n <ng-content select=\"ax-suffix\"></ng-content>\n</div>\n\n<ax-popover\n [target]=\"origin\"\n [openOn]=\"'manual'\"\n [closeOn]=\"'clickOut'\"\n [placement]=\"'bottom-start'\"\n [width]=\"isActionsheetStyle() ? '100%' : origin.offsetWidth + 'px'\"\n [adaptivityEnabled]=\"isActionsheetStyle()\"\n [disabled]=\"disabled() || readonly()\"\n (onClosed)=\"onPopoverClosed()\"\n>\n <div class=\"ax-lookup-popup\" [class.ax-is-actionsheet]=\"isActionsheetStyle()\" [class.ax-is-alternate]=\"alternate()\" (keydown.escape)=\"close()\">\n @if (isActionsheetStyle()) {\n <ax-header class=\"ax-solid\">\n <ax-title>{{ caption() || placeholder() || ('@acorex:selectbox.popover.title' | translate | async) }}</ax-title>\n <ax-close-button [icon]=\"isMultiple() ? 'ax-icon ax-icon-check' : 'ax-icon ax-icon-close'\"></ax-close-button>\n </ax-header>\n }\n @if (isSheetSearchEnabled()) {\n <div class=\"ax-lookup-sheet-search\">\n <ax-search-box\n #sheetSearch\n class=\"ax-sm\"\n look=\"fill\"\n [autoSearch]=\"false\"\n [delayTime]=\"0\"\n [placeholder]=\"searchPlaceholder()\"\n (onValueChanged)=\"onSheetSearchInput()\"\n (onKeyUp)=\"onSheetSearchInput()\"\n >\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n </div>\n }\n <ng-content select=\"ax-header\"></ng-content>\n @if (expanded()) {\n @switch (mode()) {\n @case ('drop-down-list') {\n <ax-lookup-drop-down-list\n [dataSource]=\"resolvedDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [itemHeight]=\"itemHeight()\"\n [maxVisibleItems]=\"maxVisibleItems()\"\n [itemTemplate]=\"itemTemplate()\"\n [emptyTemplate]=\"emptyTemplate()\"\n [loadingTemplate]=\"loadingTemplate()\"\n [alternate]=\"alternate()\"\n (itemClick)=\"handleSinglePick($event)\"\n (navigateOut)=\"onListNavigateOut($event)\"\n />\n }\n @case ('multi-select') {\n <ax-lookup-multi-select\n [dataSource]=\"resolvedDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [itemHeight]=\"itemHeight()\"\n [maxVisibleItems]=\"maxVisibleItems()\"\n [itemTemplate]=\"itemTemplate()\"\n [emptyTemplate]=\"emptyTemplate()\"\n [loadingTemplate]=\"loadingTemplate()\"\n [alternate]=\"alternate()\"\n (itemClick)=\"handleMultiToggle($event)\"\n (navigateOut)=\"onListNavigateOut($event)\"\n />\n }\n @case ('drop-down-tree') {\n <ax-lookup-drop-down-tree\n [dataSource]=\"resolvedTreeDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [nodeTemplate]=\"$any(itemTemplate())\"\n (itemClick)=\"handleSinglePick($event)\"\n />\n }\n @case ('multi-select-tree') {\n <ax-lookup-multi-select-tree\n [dataSource]=\"resolvedTreeDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [selectionBehavior]=\"treeSelectionBehavior()\"\n [nodeTemplate]=\"$any(itemTemplate())\"\n (selectionChange)=\"handleTreeSelectionChange($event)\"\n />\n }\n @case ('multi-column') {\n <ax-lookup-multi-column\n [dataSource]=\"resolvedDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [selectedValues]=\"selectedValues()\"\n [itemHeight]=\"itemHeight()\"\n [maxVisibleItems]=\"maxVisibleItems()\"\n [columns]=\"columns()\"\n [itemTemplate]=\"itemTemplate()\"\n [emptyTemplate]=\"emptyTemplate()\"\n [loadingTemplate]=\"loadingTemplate()\"\n [alternate]=\"alternate()\"\n (itemClick)=\"handleSinglePick($event)\"\n />\n }\n @case ('multi-column-tree') {\n <ax-lookup-multi-column-tree\n [dataSource]=\"resolvedDataSource()\"\n [valueField]=\"valueField()\"\n [textField]=\"textField()\"\n [disabledField]=\"disabledField()\"\n [parentField]=\"treeParentField()\"\n [hasChildrenField]=\"hasChildrenField()\"\n [selectedValues]=\"selectedValues()\"\n [itemHeight]=\"itemHeight()\"\n [maxVisibleItems]=\"maxVisibleItems()\"\n [columns]=\"columns()\"\n [itemTemplate]=\"itemTemplate()\"\n [emptyTemplate]=\"emptyTemplate()\"\n [loadingTemplate]=\"loadingTemplate()\"\n [alternate]=\"alternate()\"\n (itemClick)=\"handleSinglePick($event)\"\n />\n }\n }\n }\n <ng-content select=\"ax-footer\"></ng-content>\n </div>\n</ax-popover>\n<ng-content select=\"ax-validation-rule\"></ng-content>\n", styles: ["@layer properties;@layer components{ax-lookup{display:block;width:100%}ax-lookup .ax-editor-container{justify-content:flex-start;gap:calc(var(--spacing, .25rem) * 1)}ax-lookup .ax-lookup-trigger{cursor:pointer;-webkit-user-select:none;user-select:none}ax-lookup .ax-lookup-trigger-multiple{height:auto;min-height:calc(var(--spacing, .25rem) * 9);padding-block:calc(var(--spacing, .25rem) * 1)}ax-lookup .ax-lookup-value{position:relative;display:flex;min-width:calc(var(--spacing, .25rem) * 0);flex:1;align-items:center;overflow:hidden}ax-lookup .ax-lookup-select-input{cursor:pointer;caret-color:transparent;-webkit-user-select:none;user-select:none}ax-lookup .ax-lookup-selected-content{pointer-events:none;position:relative;z-index:0;display:flex;min-width:calc(var(--spacing, .25rem) * 0);flex:1;align-items:center;overflow:hidden}ax-lookup .ax-lookup-input-overlay{position:absolute;inset:calc(var(--spacing, .25rem) * 0);z-index:10;margin:calc(var(--spacing, .25rem) * 0)!important;height:100%;width:100%;border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding:calc(var(--spacing, .25rem) * 0)!important;color:transparent;caret-color:transparent}ax-lookup .ax-lookup-chips{display:flex;min-width:calc(var(--spacing, .25rem) * 0);flex:1;flex-wrap:wrap;align-items:center;gap:calc(var(--spacing, .25rem) * 1)}ax-lookup .ax-lookup-trigger-search{margin:calc(var(--spacing, .25rem) * 0)!important;height:calc(var(--spacing, .25rem) * 7.5);width:auto!important;min-width:calc(var(--spacing, .25rem) * 16);flex:1;flex-basis:calc(var(--spacing, .25rem) * 16)}ax-lookup .ax-lookup-placeholder{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){ax-lookup .ax-lookup-placeholder{color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 50%,transparent)}}ax-lookup ax-chips ax-prefix,ax-lookup ax-chips ax-suffix{padding:calc(var(--spacing, .25rem) * 0)!important}ax-lookup ax-chips ax-suffix button{display:flex;cursor:pointer;align-items:center;border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding:calc(var(--spacing, .25rem) * 0)}.ax-lookup-popup{box-sizing:border-box;display:flex;width:100%;flex-direction:column;overflow:hidden;border-radius:var(--ax-sys-border-radius);border-style:var(--tw-border-style);border-width:1px;border-color:rgba(var(--ax-sys-color-border-surface));background-color:rgba(var(--ax-sys-color-lightest-surface));--tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ax-lookup-popup:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:rgba(var(--ax-sys-color-darkest-surface))}.ax-lookup-popup.ax-is-actionsheet{border-bottom-right-radius:0;border-bottom-left-radius:0;--tw-shadow: 0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ax-lookup-popup.ax-is-actionsheet>ax-header.ax-solid{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:rgba(var(--ax-sys-color-border-lightest-surface))}.ax-lookup-popup.ax-is-actionsheet>ax-header.ax-solid .ax-icon-check{color:rgba(var(--ax-sys-color-primary-surface))}.ax-lookup-popup.ax-is-actionsheet>ax-header.ax-solid ax-title{font-size:var(--text-base, 1rem);line-height:var(--tw-leading, var(--text-base--line-height, 1.5 ));--tw-leading: calc(var(--spacing, .25rem) * 6);line-height:calc(var(--spacing, .25rem) * 6);--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500)}.ax-lookup-popup .ax-lookup-sheet-search{flex-shrink:0;border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:rgba(var(--ax-sys-color-border-lightest-surface));padding-inline:calc(var(--spacing, .25rem) * 3);padding-block:calc(var(--spacing, .25rem) * 2)}.ax-lookup-popup>ax-header:not(.ax-solid),.ax-lookup-popup>ax-footer{flex-shrink:0;border-color:rgba(var(--ax-sys-color-border-lightest-surface))}.ax-lookup-popup>ax-header:not(.ax-solid){border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.ax-lookup-popup>ax-footer{border-top-style:var(--tw-border-style);border-top-width:1px}.ax-lookup-viewport{width:100%}.ax-lookup-empty{display:flex;min-height:calc(var(--spacing, .25rem) * 12);width:100%;align-items:center;justify-content:center;padding-inline:calc(var(--spacing, .25rem) * 3);padding-block:calc(var(--spacing, .25rem) * 3);text-align:center;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-empty{color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 60%,transparent)}}.ax-lookup-option-host{box-sizing:border-box;display:flex;cursor:pointer;align-items:center;gap:calc(var(--spacing, .25rem) * 2);border-style:var(--tw-border-style);border-width:1px;border-color:transparent;padding-inline:calc(var(--spacing, .25rem) * 3);font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgba(var(--ax-sys-color-on-surface));--tw-outline-style: none;outline-style:none}.ax-lookup-option-host.ax-state-alternate{background-color:rgba(var(--ax-sys-color-light-surface))}.ax-lookup-option-host.ax-state-alternate:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:rgba(var(--ax-sys-color-surface))}.ax-lookup-option-host:hover,.ax-lookup-option-host.ax-state-active{background-color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-option-host:hover,.ax-lookup-option-host.ax-state-active{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 10%,transparent)}}.ax-lookup-option-host.ax-state-alternate:hover,.ax-lookup-option-host.ax-state-alternate.ax-state-active{background-color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-option-host.ax-state-alternate:hover,.ax-lookup-option-host.ax-state-alternate.ax-state-active{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 15%,transparent)}}.ax-lookup-option-host.ax-state-selected,.ax-lookup-option-host.ax-state-selected:hover,.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate,.ax-lookup-option-host.ax-state-selected.ax-state-alternate:hover,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active{background-color:rgba(var(--ax-sys-color-primary-lightest-surface))}:is(.ax-lookup-option-host.ax-state-selected,.ax-lookup-option-host.ax-state-selected:hover,.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate,.ax-lookup-option-host.ax-state-selected.ax-state-alternate:hover,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active):where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:rgba(var(--ax-sys-color-primary-darkest-surface))}@supports (color: color-mix(in lab,red,red)){:is(.ax-lookup-option-host.ax-state-selected,.ax-lookup-option-host.ax-state-selected:hover,.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate,.ax-lookup-option-host.ax-state-selected.ax-state-alternate:hover,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active):where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-darkest-surface)) 25%,transparent)}}.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active{background-color:rgba(var(--ax-sys-color-primary-lightest-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-lightest-surface)) 80%,transparent)}}:is(.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active):where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:rgba(var(--ax-sys-color-primary-darkest-surface))}@supports (color: color-mix(in lab,red,red)){:is(.ax-lookup-option-host.ax-state-selected.ax-state-active,.ax-lookup-option-host.ax-state-selected.ax-state-alternate.ax-state-active):where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-darkest-surface)) 40%,transparent)}}.ax-lookup-option-host .ax-lookup-checkbox{pointer-events:none;width:calc(var(--spacing, .25rem) * 4);height:calc(var(--spacing, .25rem) * 4);flex-shrink:0;accent-color:rgba(var(--ax-sys-color-primary-surface))}.ax-lookup-option-host .ax-lookup-option-loading{width:100%;padding-inline:calc(var(--spacing, .25rem) * 3);font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgba(var(--ax-sys-color-on-surface))}@supports (color: color-mix(in lab,red,red)){.ax-lookup-option-host .ax-lookup-option-loading{color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 50%,transparent)}}.ax-lookup-option{justify-content:space-between}.ax-lookup-option-host.ax-state-selected,.ax-lookup-option.ax-state-selected{color:rgba(var(--ax-sys-color-primary-surface))!important}.ax-lookup-option-host.ax-state-selected .ax-lookup-option-text,.ax-lookup-option-host.ax-state-selected .ax-lookup-option-check,.ax-lookup-option-host.ax-state-selected ax-icon{color:rgba(var(--ax-sys-color-primary-surface))!important}.ax-lookup-option-text{min-width:calc(var(--spacing, .25rem) * 0);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ax-lookup-option-check{margin-inline-start:auto;flex-shrink:0;color:rgba(var(--ax-sys-color-primary-surface))!important}ax-lookup-multi-column,ax-lookup-multi-column-tree,.ax-lookup-multi-column,.ax-lookup-multi-column-tree{display:block;min-height:calc(var(--spacing, .25rem) * 0);width:100%}:is(ax-lookup-multi-column,ax-lookup-multi-column-tree,.ax-lookup-multi-column,.ax-lookup-multi-column-tree) .ax-lookup-multi-column-table,:is(ax-lookup-multi-column,ax-lookup-multi-column-tree,.ax-lookup-multi-column,.ax-lookup-multi-column-tree) ax-data-table{height:100%;min-height:calc(var(--spacing, .25rem) * 0);border-style:var(--tw-border-style)!important;border-width:0px!important}:is(ax-lookup-multi-column,ax-lookup-multi-column-tree,.ax-lookup-multi-column,.ax-lookup-multi-column-tree) tr.ax-state-selected{background-color:rgba(var(--ax-sys-color-primary-surface))}@supports (color: color-mix(in lab,red,red)){:is(ax-lookup-multi-column,ax-lookup-multi-column-tree,.ax-lookup-multi-column,.ax-lookup-multi-column-tree) tr.ax-state-selected{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-surface)) 10%,transparent)}}:is(ax-lookup-multi-column,ax-lookup-multi-column-tree,.ax-lookup-multi-column,.ax-lookup-multi-column-tree) tr.ax-state-disabled{pointer-events:none;opacity:50%}.ax-lookup-tree{max-height:calc(var(--spacing, .25rem) * 80);overflow:auto;padding:calc(var(--spacing, .25rem) * 2)}}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-inset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-inset-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-ring-color{syntax: \"*\"; inherits: false;}@property --tw-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-ring-color{syntax: \"*\"; inherits: false;}@property --tw-inset-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-ring-inset{syntax: \"*\"; inherits: false;}@property --tw-ring-offset-width{syntax: \"<length>\"; inherits: false; initial-value: 0px;}@property --tw-ring-offset-color{syntax: \"*\"; inherits: false; initial-value: #fff;}@property --tw-ring-offset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-leading{syntax: \"*\"; inherits: false;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid;--tw-shadow: 0 0 #0000;--tw-shadow-color: initial;--tw-shadow-alpha: 100%;--tw-inset-shadow: 0 0 #0000;--tw-inset-shadow-color: initial;--tw-inset-shadow-alpha: 100%;--tw-ring-color: initial;--tw-ring-shadow: 0 0 #0000;--tw-inset-ring-color: initial;--tw-inset-ring-shadow: 0 0 #0000;--tw-ring-inset: initial;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-offset-shadow: 0 0 #0000;--tw-leading: initial;--tw-font-weight: initial}}}\n/*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */\n"] }]
|
|
2454
|
+
}], ctorParameters: () => [], propDecorators: { name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], dataSource: [{ type: i0.Input, args: [{ isSignal: true, alias: "dataSource", required: false }] }], treeDataSource: [{ type: i0.Input, args: [{ isSignal: true, alias: "treeDataSource", required: false }] }], valueField: [{ type: i0.Input, args: [{ isSignal: true, alias: "valueField", required: false }] }], textField: [{ type: i0.Input, args: [{ isSignal: true, alias: "textField", required: false }] }], disabledField: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabledField", required: false }] }], columns: [{ type: i0.Input, args: [{ isSignal: true, alias: "columns", required: false }] }], treeParentField: [{ type: i0.Input, args: [{ isSignal: true, alias: "treeParentField", required: false }] }], hasChildrenField: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasChildrenField", required: false }] }], searchable: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchable", required: false }] }], adaptivityEnabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "adaptivityEnabled", required: false }] }], caption: [{ type: i0.Input, args: [{ isSignal: true, alias: "caption", required: false }] }], alternate: [{ type: i0.Input, args: [{ isSignal: true, alias: "alternate", required: false }] }], searchPlaceholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchPlaceholder", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], look: [{ type: i0.Input, args: [{ isSignal: true, alias: "look", required: false }] }, { type: i0.Output, args: ["lookChange"] }], itemHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemHeight", required: false }] }], maxVisibleItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxVisibleItems", required: false }] }], treeSelectionBehavior: [{ type: i0.Input, args: [{ isSignal: true, alias: "treeSelectionBehavior", required: false }] }], itemTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemTemplate", required: false }] }], selectedTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedTemplate", required: false }] }], emptyTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "emptyTemplate", required: false }] }], loadingTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "loadingTemplate", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], valueItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "valueItems", required: false }] }], onValueChanged: [{ type: i0.Output, args: ["onValueChanged"] }], onSelectionChanged: [{ type: i0.Output, args: ["onSelectionChanged"] }], onFocus: [{ type: i0.Output, args: ["onFocus"] }], onBlur: [{ type: i0.Output, args: ["onBlur"] }], onItemClick: [{ type: i0.Output, args: ["onItemClick"] }], onItemSelected: [{ type: i0.Output, args: ["onItemSelected"] }], onOpened: [{ type: i0.Output, args: ["onOpened"] }], onClosed: [{ type: i0.Output, args: ["onClosed"] }], popoverRef: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXPopoverComponent), { isSignal: true }] }], triggerSearchInput: [{ type: i0.ViewChild, args: ['triggerSearchInput', { isSignal: true }] }], listView: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXLookupListViewBase), { isSignal: true }] }], sheetSearchRef: [{ type: i0.ViewChild, args: ['sheetSearch', { isSignal: true }] }] } });
|
|
1793
2455
|
|
|
1794
2456
|
class AXLookupModule {
|
|
1795
2457
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
@@ -1798,18 +2460,21 @@ class AXLookupModule {
|
|
|
1798
2460
|
AXLookupMultiSelectComponent,
|
|
1799
2461
|
AXLookupDropDownTreeComponent,
|
|
1800
2462
|
AXLookupMultiSelectTreeComponent,
|
|
1801
|
-
AXLookupMultiColumnComponent
|
|
2463
|
+
AXLookupMultiColumnComponent,
|
|
2464
|
+
AXLookupMultiColumnTreeComponent], exports: [AXLookupComponent,
|
|
1802
2465
|
AXLookupDropDownListComponent,
|
|
1803
2466
|
AXLookupMultiSelectComponent,
|
|
1804
2467
|
AXLookupDropDownTreeComponent,
|
|
1805
2468
|
AXLookupMultiSelectTreeComponent,
|
|
1806
|
-
AXLookupMultiColumnComponent
|
|
2469
|
+
AXLookupMultiColumnComponent,
|
|
2470
|
+
AXLookupMultiColumnTreeComponent] }); }
|
|
1807
2471
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupModule, imports: [AXLookupComponent,
|
|
1808
2472
|
AXLookupDropDownListComponent,
|
|
1809
2473
|
AXLookupMultiSelectComponent,
|
|
1810
2474
|
AXLookupDropDownTreeComponent,
|
|
1811
2475
|
AXLookupMultiSelectTreeComponent,
|
|
1812
|
-
AXLookupMultiColumnComponent
|
|
2476
|
+
AXLookupMultiColumnComponent,
|
|
2477
|
+
AXLookupMultiColumnTreeComponent] }); }
|
|
1813
2478
|
}
|
|
1814
2479
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXLookupModule, decorators: [{
|
|
1815
2480
|
type: NgModule,
|
|
@@ -1821,6 +2486,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
1821
2486
|
AXLookupDropDownTreeComponent,
|
|
1822
2487
|
AXLookupMultiSelectTreeComponent,
|
|
1823
2488
|
AXLookupMultiColumnComponent,
|
|
2489
|
+
AXLookupMultiColumnTreeComponent,
|
|
1824
2490
|
],
|
|
1825
2491
|
exports: [
|
|
1826
2492
|
AXLookupComponent,
|
|
@@ -1829,6 +2495,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
1829
2495
|
AXLookupDropDownTreeComponent,
|
|
1830
2496
|
AXLookupMultiSelectTreeComponent,
|
|
1831
2497
|
AXLookupMultiColumnComponent,
|
|
2498
|
+
AXLookupMultiColumnTreeComponent,
|
|
1832
2499
|
],
|
|
1833
2500
|
}]
|
|
1834
2501
|
}] });
|
|
@@ -1837,5 +2504,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
1837
2504
|
* Generated bundle index. Do not edit.
|
|
1838
2505
|
*/
|
|
1839
2506
|
|
|
1840
|
-
export { AXLookupComponent, AXLookupDropDownListComponent, AXLookupDropDownTreeComponent, AXLookupModule, AXLookupMultiColumnComponent, AXLookupMultiSelectComponent, AXLookupMultiSelectTreeComponent };
|
|
2507
|
+
export { AXLookupComponent, AXLookupDropDownListComponent, AXLookupDropDownTreeComponent, AXLookupModule, AXLookupMultiColumnComponent, AXLookupMultiColumnTreeComponent, AXLookupMultiSelectComponent, AXLookupMultiSelectTreeComponent };
|
|
1841
2508
|
//# sourceMappingURL=acorex-components-lookup.mjs.map
|