@acorex/components 22.1.0-next.9 → 22.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/fesm2022/acorex-components-alert.mjs +2 -2
  2. package/fesm2022/acorex-components-alert.mjs.map +1 -1
  3. package/fesm2022/acorex-components-audio-wave.mjs +15 -0
  4. package/fesm2022/acorex-components-audio-wave.mjs.map +1 -1
  5. package/fesm2022/acorex-components-calendar.mjs +321 -118
  6. package/fesm2022/acorex-components-calendar.mjs.map +1 -1
  7. package/fesm2022/acorex-components-combo-box.mjs +259 -37
  8. package/fesm2022/acorex-components-combo-box.mjs.map +1 -1
  9. package/fesm2022/acorex-components-conversation-acorex-components-conversation-BtkyQUlh.mjs +16548 -0
  10. package/fesm2022/acorex-components-conversation-acorex-components-conversation-BtkyQUlh.mjs.map +1 -0
  11. package/fesm2022/acorex-components-conversation-composer-action-choice-dialog.component-D4ca9Mvt.mjs +51 -0
  12. package/fesm2022/acorex-components-conversation-composer-action-choice-dialog.component-D4ca9Mvt.mjs.map +1 -0
  13. package/fesm2022/acorex-components-conversation-image-picker-editor-dialog.component-QVs1XWYf.mjs +85 -0
  14. package/fesm2022/acorex-components-conversation-image-picker-editor-dialog.component-QVs1XWYf.mjs.map +1 -0
  15. package/fesm2022/{acorex-components-conversation-open-composer-picker-for-files-BuNEjswI.mjs → acorex-components-conversation-open-composer-picker-for-files-BKKO_8x6.mjs} +7 -20
  16. package/fesm2022/acorex-components-conversation-open-composer-picker-for-files-BKKO_8x6.mjs.map +1 -0
  17. package/fesm2022/acorex-components-conversation-picker-rename-file-dialog.component-BNKFb5yO.mjs +65 -0
  18. package/fesm2022/acorex-components-conversation-picker-rename-file-dialog.component-BNKFb5yO.mjs.map +1 -0
  19. package/fesm2022/acorex-components-conversation.mjs +1 -17608
  20. package/fesm2022/acorex-components-conversation.mjs.map +1 -1
  21. package/fesm2022/acorex-components-data-table.mjs +57 -23
  22. package/fesm2022/acorex-components-data-table.mjs.map +1 -1
  23. package/fesm2022/acorex-components-decorators.mjs +2 -2
  24. package/fesm2022/acorex-components-decorators.mjs.map +1 -1
  25. package/fesm2022/acorex-components-dropdown.mjs +2 -2
  26. package/fesm2022/acorex-components-dropdown.mjs.map +1 -1
  27. package/fesm2022/acorex-components-fab.mjs +5 -5
  28. package/fesm2022/acorex-components-fab.mjs.map +1 -1
  29. package/fesm2022/acorex-components-image-editor.mjs +600 -409
  30. package/fesm2022/acorex-components-image-editor.mjs.map +1 -1
  31. package/fesm2022/acorex-components-lookup.mjs +1281 -177
  32. package/fesm2022/acorex-components-lookup.mjs.map +1 -1
  33. package/fesm2022/acorex-components-menu.mjs +11 -5
  34. package/fesm2022/acorex-components-menu.mjs.map +1 -1
  35. package/fesm2022/acorex-components-notification.mjs +6 -6
  36. package/fesm2022/acorex-components-notification.mjs.map +1 -1
  37. package/fesm2022/acorex-components-popover.mjs +33 -0
  38. package/fesm2022/acorex-components-popover.mjs.map +1 -1
  39. package/fesm2022/acorex-components-rail-navigation.mjs +2 -2
  40. package/fesm2022/acorex-components-rail-navigation.mjs.map +1 -1
  41. package/fesm2022/acorex-components-range-slider.mjs +2 -2
  42. package/fesm2022/acorex-components-range-slider.mjs.map +1 -1
  43. package/fesm2022/acorex-components-select-box.mjs +38 -11
  44. package/fesm2022/acorex-components-select-box.mjs.map +1 -1
  45. package/fesm2022/acorex-components-tabs.mjs +2 -2
  46. package/fesm2022/acorex-components-tabs.mjs.map +1 -1
  47. package/fesm2022/acorex-components-tree-view.mjs +52 -4
  48. package/fesm2022/acorex-components-tree-view.mjs.map +1 -1
  49. package/lookup/README.md +19 -8
  50. package/package.json +4 -3
  51. package/types/acorex-components-audio-wave.d.ts +3 -0
  52. package/types/acorex-components-calendar.d.ts +41 -9
  53. package/types/acorex-components-combo-box.d.ts +50 -10
  54. package/types/acorex-components-conversation.d.ts +1232 -1782
  55. package/types/acorex-components-data-table.d.ts +12 -2
  56. package/types/acorex-components-image-editor.d.ts +54 -49
  57. package/types/acorex-components-lookup.d.ts +290 -73
  58. package/types/acorex-components-popover.d.ts +8 -0
  59. package/types/acorex-components-select-box.d.ts +11 -0
  60. package/types/acorex-components-tree-view.d.ts +22 -2
  61. package/fesm2022/acorex-components-conversation-composer-action-choice-dialog.component-DCcRJYfF.mjs +0 -50
  62. package/fesm2022/acorex-components-conversation-composer-action-choice-dialog.component-DCcRJYfF.mjs.map +0 -1
  63. package/fesm2022/acorex-components-conversation-open-composer-picker-for-files-BuNEjswI.mjs.map +0 -1
@@ -2,7 +2,8 @@ import * as _angular_core from '@angular/core';
2
2
  import { TemplateRef, ElementRef } from '@angular/core';
3
3
  import { AXEvent, AXDataSource, AXListDataSource, AXHtmlEvent, NXValueComponent, AXStyleLookType, AXValueChangedEvent, AXFocusEvent, AXItemClickEvent, AXItemSelectedEvent } from '@acorex/cdk/common';
4
4
  import { AXPopoverComponent } from '@acorex/components/popover';
5
- import { AXTreeViewNode, AXTreeViewDataSource, AXTreeViewSelectionBehavior, AXTreeViewItemTemplateContext, AXTreeViewSelectionChangeEvent } from '@acorex/components/tree-view';
5
+ import { AXSearchBoxComponent } from '@acorex/components/search-box';
6
+ import { AXTreeViewDataSource, AXTreeViewItemTemplateContext, AXTreeViewSelectionChangeEvent, AXTreeViewSelectionBehavior, AXTreeViewNode } from '@acorex/components/tree-view';
6
7
  import { FormValueControl } from '@angular/forms/signals';
7
8
  import { AXListNavigationDirective, AXListNavigationItemDirective } from '@acorex/cdk/list-navigation';
8
9
  import { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';
@@ -16,19 +17,25 @@ import { AXDataTableComponent, AXDataTableRowClick } from '@acorex/components/da
16
17
  * - `drop-down-tree` — a tree-like structure for single item selection.
17
18
  * - `multi-select-tree` — a tree-like structure for multiple item selection.
18
19
  * - `multi-column` — a table-structured list for single selection.
20
+ * - `multi-column-tree` — a multi-column table with a drop-down tree inside it (expandable rows).
19
21
  */
20
- type AXLookupMode = 'drop-down-list' | 'multi-select' | 'drop-down-tree' | 'multi-select-tree' | 'multi-column';
22
+ type AXLookupMode = 'drop-down-list' | 'multi-select' | 'drop-down-tree' | 'multi-select-tree' | 'multi-column' | 'multi-column-tree';
21
23
  /**
22
- * A column definition for the `multi-column` lookup mode (rendered via `ax-data-table`).
24
+ * A column definition for the `multi-column` and `multi-column-tree` lookup modes
25
+ * (rendered via `ax-data-table`).
23
26
  *
24
27
  * - `field` — the item property rendered in this column (`ax-text-column` `dataField`).
25
28
  * - `title` — the header text of the column (`ax-text-column` `caption`).
26
29
  * - `width` — optional column width (`120px`, `20%`, or `auto`). Defaults to `auto`.
30
+ * - `expandHandler` — when `true`, this column shows the tree expand/collapse control
31
+ * (`multi-column-tree` only). If omitted, the column matching `textField` (or the first
32
+ * column) is used.
27
33
  */
28
34
  interface AXLookupColumn {
29
35
  field: string;
30
36
  title: string;
31
37
  width?: string;
38
+ expandHandler?: boolean;
32
39
  }
33
40
  /**
34
41
  * A lookup item. Items are plain records; the lookup reads them through
@@ -45,11 +52,75 @@ interface AXLookupItemClickEvent {
45
52
  /**
46
53
  * Emitted by `ax-lookup` when the selection changes, carrying the resolved selected items.
47
54
  */
48
- interface AXLookupSelectionChangedEvent extends AXEvent {
49
- items: AXLookupItem[];
55
+ interface AXLookupSelectionChangedEvent<TItem = any> extends AXEvent {
56
+ items: TItem[];
50
57
  value: unknown | unknown[] | null;
51
58
  }
52
59
 
60
+ /**
61
+ * Internal mini component for the `drop-down-tree` lookup mode:
62
+ * a predefined list rendered in a tree-like structure for single item selection.
63
+ *
64
+ * @category Components
65
+ */
66
+ declare class AXLookupDropDownTreeComponent {
67
+ /**
68
+ * The tree datasource: an array of nodes or a lazy children callback.
69
+ */
70
+ dataSource: _angular_core.InputSignal<AXTreeViewDataSource>;
71
+ /**
72
+ * The node property used as the selection value (tree `idField`).
73
+ */
74
+ valueField: _angular_core.InputSignal<string>;
75
+ /**
76
+ * The node property used as the display text (tree `titleField`).
77
+ */
78
+ textField: _angular_core.InputSignal<string>;
79
+ /**
80
+ * The node property marking a node as disabled.
81
+ */
82
+ disabledField: _angular_core.InputSignal<string>;
83
+ /**
84
+ * Currently selected values (at most one for single selection).
85
+ */
86
+ selectedValues: _angular_core.InputSignal<unknown[]>;
87
+ /**
88
+ * Custom template rendered for each tree node.
89
+ */
90
+ nodeTemplate: _angular_core.InputSignal<TemplateRef<AXTreeViewItemTemplateContext>>;
91
+ /**
92
+ * Custom template rendered when the filtered tree has no nodes.
93
+ */
94
+ emptyTemplate: _angular_core.InputSignal<TemplateRef<unknown>>;
95
+ /**
96
+ * When `true`, visible tree nodes use alternating background colors.
97
+ */
98
+ alternate: _angular_core.InputSignal<boolean>;
99
+ /**
100
+ * Unique id that changes on every search apply so a new tree instance is created.
101
+ */
102
+ filterKey: _angular_core.InputSignal<string>;
103
+ /**
104
+ * When set, matching characters in the default node label are highlighted.
105
+ */
106
+ highlightText: _angular_core.InputSignal<string>;
107
+ /**
108
+ * Emitted when the user selects a node.
109
+ */
110
+ itemClick: _angular_core.OutputEmitterRef<AXLookupItemClickEvent>;
111
+ protected selectedIds: _angular_core.Signal<string[]>;
112
+ protected isEmpty: _angular_core.Signal<boolean>;
113
+ protected treeInstances: _angular_core.Signal<{
114
+ id: string;
115
+ source: AXTreeViewDataSource;
116
+ }[]>;
117
+ /** Whether the filtered tree currently has no nodes. */
118
+ hasNoMatches(): boolean;
119
+ protected handleSelectionChange(e: AXTreeViewSelectionChangeEvent): void;
120
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXLookupDropDownTreeComponent, never>;
121
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXLookupDropDownTreeComponent, "ax-lookup-drop-down-tree", never, { "dataSource": { "alias": "dataSource"; "required": true; "isSignal": true; }; "valueField": { "alias": "valueField"; "required": false; "isSignal": true; }; "textField": { "alias": "textField"; "required": false; "isSignal": true; }; "disabledField": { "alias": "disabledField"; "required": false; "isSignal": true; }; "selectedValues": { "alias": "selectedValues"; "required": false; "isSignal": true; }; "nodeTemplate": { "alias": "nodeTemplate"; "required": false; "isSignal": true; }; "emptyTemplate": { "alias": "emptyTemplate"; "required": false; "isSignal": true; }; "alternate": { "alias": "alternate"; "required": false; "isSignal": true; }; "filterKey": { "alias": "filterKey"; "required": false; "isSignal": true; }; "highlightText": { "alias": "highlightText"; "required": false; "isSignal": true; }; }, { "itemClick": "itemClick"; }, never, never, true, never>;
122
+ }
123
+
53
124
  /**
54
125
  * Shared `AXDataSource` + CDK virtual scroll plumbing for the list-based lookup views
55
126
  * (`ax-lookup-drop-down-list`, `ax-lookup-multi-select`).
@@ -85,7 +156,9 @@ declare abstract class AXLookupListViewBase {
85
156
  */
86
157
  maxVisibleItems: _angular_core.InputSignal<number>;
87
158
  /**
88
- * Custom template rendered for each item. Context: `$implicit` is the item.
159
+ * Custom template rendered for each item. Context: `$implicit` is the item;
160
+ * `highlightText` is the active search query when result highlighting is enabled.
161
+ * Default option chrome is not applied on top of the template.
89
162
  */
90
163
  itemTemplate: _angular_core.InputSignal<TemplateRef<unknown>>;
91
164
  /**
@@ -100,6 +173,10 @@ declare abstract class AXLookupListViewBase {
100
173
  * When `true`, list rows use alternating background colors for easier scanning.
101
174
  */
102
175
  alternate: _angular_core.InputSignal<boolean>;
176
+ /**
177
+ * When set, matching characters in the default option label are highlighted.
178
+ */
179
+ highlightText: _angular_core.InputSignal<string>;
103
180
  /**
104
181
  * Emitted when the user picks (or toggles) an item.
105
182
  */
@@ -114,6 +191,10 @@ declare abstract class AXLookupListViewBase {
114
191
  protected totalCount: _angular_core.WritableSignal<number>;
115
192
  protected isLoading: _angular_core.WritableSignal<boolean>;
116
193
  protected isEmpty: _angular_core.Signal<boolean>;
194
+ /** Whether the filtered datasource currently has no items. */
195
+ hasNoMatches(): boolean;
196
+ /** Number of items in the current filtered result set. */
197
+ matchCount(): number;
117
198
  /** Viewport height so the popup grows with the items up to `maxVisibleItems`. */
118
199
  protected viewportHeight: _angular_core.Signal<number>;
119
200
  protected viewportRef: _angular_core.Signal<CdkVirtualScrollViewport>;
@@ -137,7 +218,7 @@ declare abstract class AXLookupListViewBase {
137
218
  protected activateNavItem(nav: AXListNavigationDirective, item: AXListNavigationItemDirective): void;
138
219
  protected trackByIndex: (index: number) => number;
139
220
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXLookupListViewBase, never>;
140
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<AXLookupListViewBase, never, never, { "dataSource": { "alias": "dataSource"; "required": true; "isSignal": true; }; "valueField": { "alias": "valueField"; "required": false; "isSignal": true; }; "textField": { "alias": "textField"; "required": false; "isSignal": true; }; "disabledField": { "alias": "disabledField"; "required": false; "isSignal": true; }; "selectedValues": { "alias": "selectedValues"; "required": false; "isSignal": true; }; "itemHeight": { "alias": "itemHeight"; "required": false; "isSignal": true; }; "maxVisibleItems": { "alias": "maxVisibleItems"; "required": false; "isSignal": true; }; "itemTemplate": { "alias": "itemTemplate"; "required": false; "isSignal": true; }; "emptyTemplate": { "alias": "emptyTemplate"; "required": false; "isSignal": true; }; "loadingTemplate": { "alias": "loadingTemplate"; "required": false; "isSignal": true; }; "alternate": { "alias": "alternate"; "required": false; "isSignal": true; }; }, { "itemClick": "itemClick"; "navigateOut": "navigateOut"; }, never, never, true, never>;
221
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<AXLookupListViewBase, never, never, { "dataSource": { "alias": "dataSource"; "required": true; "isSignal": true; }; "valueField": { "alias": "valueField"; "required": false; "isSignal": true; }; "textField": { "alias": "textField"; "required": false; "isSignal": true; }; "disabledField": { "alias": "disabledField"; "required": false; "isSignal": true; }; "selectedValues": { "alias": "selectedValues"; "required": false; "isSignal": true; }; "itemHeight": { "alias": "itemHeight"; "required": false; "isSignal": true; }; "maxVisibleItems": { "alias": "maxVisibleItems"; "required": false; "isSignal": true; }; "itemTemplate": { "alias": "itemTemplate"; "required": false; "isSignal": true; }; "emptyTemplate": { "alias": "emptyTemplate"; "required": false; "isSignal": true; }; "loadingTemplate": { "alias": "loadingTemplate"; "required": false; "isSignal": true; }; "alternate": { "alias": "alternate"; "required": false; "isSignal": true; }; "highlightText": { "alias": "highlightText"; "required": false; "isSignal": true; }; }, { "itemClick": "itemClick"; "navigateOut": "navigateOut"; }, never, never, true, never>;
141
222
  }
142
223
 
143
224
  /**
@@ -182,25 +263,54 @@ declare class AXLookupMultiSelectTreeComponent {
182
263
  * Custom template rendered for each tree node.
183
264
  */
184
265
  nodeTemplate: _angular_core.InputSignal<TemplateRef<AXTreeViewItemTemplateContext>>;
266
+ /**
267
+ * Custom template rendered when the filtered tree has no nodes.
268
+ */
269
+ emptyTemplate: _angular_core.InputSignal<TemplateRef<unknown>>;
270
+ /**
271
+ * When `true`, visible tree nodes use alternating background colors.
272
+ */
273
+ alternate: _angular_core.InputSignal<boolean>;
274
+ /**
275
+ * Unique id that changes on every search apply so a new tree instance is created.
276
+ */
277
+ filterKey: _angular_core.InputSignal<string>;
278
+ /**
279
+ * When set, matching characters in the default node label are highlighted.
280
+ */
281
+ highlightText: _angular_core.InputSignal<string>;
185
282
  /**
186
283
  * Emitted when the user changes the tree selection.
187
284
  */
188
285
  selectionChange: _angular_core.OutputEmitterRef<AXLookupTreeSelectionEvent>;
189
286
  protected selectedIds: _angular_core.Signal<string[]>;
287
+ protected isEmpty: _angular_core.Signal<boolean>;
288
+ protected treeInstances: _angular_core.Signal<{
289
+ id: string;
290
+ source: AXTreeViewDataSource;
291
+ }[]>;
292
+ /** Whether the filtered tree currently has no nodes. */
293
+ hasNoMatches(): boolean;
190
294
  protected handleSelectionChange(e: AXTreeViewSelectionChangeEvent): void;
191
295
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXLookupMultiSelectTreeComponent, never>;
192
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXLookupMultiSelectTreeComponent, "ax-lookup-multi-select-tree", never, { "dataSource": { "alias": "dataSource"; "required": true; "isSignal": true; }; "valueField": { "alias": "valueField"; "required": false; "isSignal": true; }; "textField": { "alias": "textField"; "required": false; "isSignal": true; }; "disabledField": { "alias": "disabledField"; "required": false; "isSignal": true; }; "selectedValues": { "alias": "selectedValues"; "required": false; "isSignal": true; }; "selectionBehavior": { "alias": "selectionBehavior"; "required": false; "isSignal": true; }; "nodeTemplate": { "alias": "nodeTemplate"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; }, never, never, true, never>;
296
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXLookupMultiSelectTreeComponent, "ax-lookup-multi-select-tree", never, { "dataSource": { "alias": "dataSource"; "required": true; "isSignal": true; }; "valueField": { "alias": "valueField"; "required": false; "isSignal": true; }; "textField": { "alias": "textField"; "required": false; "isSignal": true; }; "disabledField": { "alias": "disabledField"; "required": false; "isSignal": true; }; "selectedValues": { "alias": "selectedValues"; "required": false; "isSignal": true; }; "selectionBehavior": { "alias": "selectionBehavior"; "required": false; "isSignal": true; }; "nodeTemplate": { "alias": "nodeTemplate"; "required": false; "isSignal": true; }; "emptyTemplate": { "alias": "emptyTemplate"; "required": false; "isSignal": true; }; "alternate": { "alias": "alternate"; "required": false; "isSignal": true; }; "filterKey": { "alias": "filterKey"; "required": false; "isSignal": true; }; "highlightText": { "alias": "highlightText"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; }, never, never, true, never>;
193
297
  }
194
298
 
195
299
  /**
196
- * An advanced drop-down (lookup) editor with five modes, `AXDataSource` support, and virtual scrolling.
300
+ * An advanced drop-down (lookup) editor with six modes, `AXDataSource` support, and virtual scrolling.
197
301
  *
198
302
  * Modes (each rendered by its own internal mini component):
199
303
  * - `drop-down-list` — a predefined list of options for picking single values.
200
304
  * - `multi-select` — a predefined list of options for multiple item selection (chips in the trigger).
201
- * - `drop-down-tree` — a predefined list rendered in a tree-like structure for single item selection.
202
- * - `multi-select-tree` — a tree-like structure for multiple item selection.
203
- * - `multi-column` — an `ax-data-table` grid; when searchable, the trigger input filters as you type.
305
+ * In multi modes, Backspace with an empty trigger input removes the last chip; repeated presses clear
306
+ * the whole selection.
307
+ * - `drop-down-tree` — a tree-like structure for single item selection; when searchable, the trigger
308
+ * input filters nested nodes as you type (on small screens the search field is inside the actionsheet).
309
+ * - `multi-select-tree` — a tree-like structure for multiple item selection; searchable the same way.
310
+ * - `multi-column` — an `ax-data-table` grid; when searchable, the trigger input filters as you type
311
+ * (on small screens the search field is inside the actionsheet).
312
+ * - `multi-column-tree` — a multi-column `ax-data-table` with a drop-down tree inside it
313
+ * (expandable hierarchical rows). Uses `treeDataSource` + `columns`, or a hierarchical `dataSource`.
204
314
  *
205
315
  * With `adaptivityEnabled` (default `true`), the list opens as a bottom actionsheet on small
206
316
  * screens instead of an anchored dropdown — the same alternate presentation as `ax-select-box`.
@@ -210,7 +320,7 @@ declare class AXLookupMultiSelectTreeComponent {
210
320
  *
211
321
  * @category Components
212
322
  */
213
- declare class AXLookupComponent extends NXValueComponent implements FormValueControl<unknown | unknown[] | null> {
323
+ declare class AXLookupComponent<T = AXLookupItem> extends NXValueComponent implements FormValueControl<unknown | unknown[] | null> {
214
324
  #private;
215
325
  /**
216
326
  * The name of the form field, used by validation rules and `ax-form.validate(names)`.
@@ -221,12 +331,13 @@ declare class AXLookupComponent extends NXValueComponent implements FormValueCon
221
331
  */
222
332
  mode: _angular_core.InputSignal<AXLookupMode>;
223
333
  /**
224
- * The items source for list-based modes (`drop-down-list`, `multi-select`, `multi-column`).
334
+ * The items source for list-based modes (`drop-down-list`, `multi-select`, `multi-column`)
335
+ * and for `multi-column-tree` when `treeDataSource` is not set.
225
336
  * Accepts an `AXDataSource` (remote paging, `byKey`, server-side filter) or a plain array.
226
337
  */
227
- dataSource: _angular_core.InputSignal<AXLookupItem[] | AXDataSource<AXLookupItem>>;
338
+ dataSource: _angular_core.InputSignal<AXDataSource<T> | T[]>;
228
339
  /**
229
- * The nodes source for tree modes (`drop-down-tree`, `multi-select-tree`):
340
+ * The nodes source for tree modes (`drop-down-tree`, `multi-select-tree`, `multi-column-tree`):
230
341
  * an array of nodes or a lazy children callback.
231
342
  */
232
343
  treeDataSource: _angular_core.InputSignal<AXTreeViewDataSource>;
@@ -244,18 +355,32 @@ declare class AXLookupComponent extends NXValueComponent implements FormValueCon
244
355
  */
245
356
  disabledField: _angular_core.InputSignal<string>;
246
357
  /**
247
- * Column definitions for the `multi-column` mode (rendered as `ax-text-column` in `ax-data-table`).
358
+ * Column definitions for the `multi-column` and `multi-column-tree` modes
359
+ * (rendered as `ax-text-column` in `ax-data-table`).
248
360
  */
249
361
  columns: _angular_core.InputSignal<AXLookupColumn[]>;
362
+ /**
363
+ * Field used by `multi-column-tree` to fetch children when a row is expanded
364
+ * (`AXDataSource` filter). Defaults to `parentId`. Nested `children` arrays are also supported.
365
+ */
366
+ treeParentField: _angular_core.InputSignal<string>;
367
+ /**
368
+ * Field used by `multi-column-tree` to decide whether a row shows an expand control.
369
+ * Defaults to `hasChild`. Nodes with `children` / `childrenCount` are mapped automatically
370
+ * when using `treeDataSource`.
371
+ */
372
+ hasChildrenField: _angular_core.InputSignal<string>;
250
373
  /**
251
374
  * Whether the trigger accepts typing and filters the datasource (`true`),
252
375
  * or is select-only with no writable input (`false`).
253
- * Applies to `drop-down-list`, `multi-select`, and `multi-column`. Tree modes ignore this.
376
+ * Applies to all modes, including `drop-down-tree` and `multi-select-tree`.
377
+ * On small screens with `adaptivityEnabled`, search is typed in the actionsheet instead of the trigger.
254
378
  */
255
379
  searchable: _angular_core.InputSignal<boolean>;
256
380
  /**
257
381
  * When `true` (default), the popup list uses the alternate actionsheet presentation on small
258
- * screens (`SM`). When `false`, the list always opens as an anchored dropdown.
382
+ * screens (`SM`). Searchable list modes then show a search field inside the sheet. When `false`,
383
+ * the list always opens as an anchored dropdown.
259
384
  */
260
385
  adaptivityEnabled: _angular_core.InputSignal<boolean>;
261
386
  /**
@@ -264,12 +389,13 @@ declare class AXLookupComponent extends NXValueComponent implements FormValueCon
264
389
  caption: _angular_core.InputSignal<string>;
265
390
  /**
266
391
  * When `true`, list rows use alternating background colors for easier scanning
267
- * (`drop-down-list`, `multi-select`, and `multi-column` modes).
392
+ * (all lookup modes, including drop-down-tree and multi-select-tree).
268
393
  */
269
394
  alternate: _angular_core.InputSignal<boolean>;
270
395
  /**
271
396
  * Placeholder for the trigger search input when items are already selected
272
- * (mainly useful in `multi-select`). Falls back to `placeholder` when the selection is empty.
397
+ * (mainly useful in `multi-select` / `multi-select-tree`), and for the in-sheet search field on small screens.
398
+ * Falls back to `placeholder` when the selection is empty on desktop.
273
399
  */
274
400
  searchPlaceholder: _angular_core.InputSignal<string>;
275
401
  /**
@@ -301,7 +427,15 @@ declare class AXLookupComponent extends NXValueComponent implements FormValueCon
301
427
  */
302
428
  treeSelectionBehavior: _angular_core.InputSignal<AXTreeViewSelectionBehavior>;
303
429
  /**
304
- * Custom template rendered for each item/node. Context: `$implicit` is the item.
430
+ * When `true` (default), matching characters in popup result items are highlighted
431
+ * while the user searches.
432
+ */
433
+ highlightSearch: _angular_core.InputSignalWithTransform<boolean, unknown>;
434
+ /**
435
+ * Custom template rendered for each item/node. Context: `$implicit` is the item;
436
+ * `highlightText` is the active search query when result highlighting is enabled.
437
+ * Default option chrome (padding, typography, check icon) is not applied; only the
438
+ * template's styles are used. Selection and hover backgrounds remain on the row.
305
439
  */
306
440
  itemTemplate: _angular_core.InputSignal<TemplateRef<unknown>>;
307
441
  /**
@@ -327,15 +461,15 @@ declare class AXLookupComponent extends NXValueComponent implements FormValueCon
327
461
  * Use when the parent already has the selected entity (e.g. edit forms). Seeds the internal
328
462
  * item cache; missing keys still fall through to `find` / `byKey`.
329
463
  */
330
- valueItems: _angular_core.InputSignal<AXLookupItem[]>;
464
+ valueItems: _angular_core.InputSignal<T[]>;
331
465
  /**
332
466
  * Emitted when the selected value changes.
333
467
  */
334
- onValueChanged: _angular_core.OutputEmitterRef<AXValueChangedEvent<unknown>>;
468
+ onValueChanged: _angular_core.OutputEmitterRef<AXValueChangedEvent<any>>;
335
469
  /**
336
470
  * Emitted when the selection changes, carrying the resolved selected items.
337
471
  */
338
- onSelectionChanged: _angular_core.OutputEmitterRef<AXLookupSelectionChangedEvent>;
472
+ onSelectionChanged: _angular_core.OutputEmitterRef<AXLookupSelectionChangedEvent<T>>;
339
473
  /**
340
474
  * Emitted when the trigger receives focus.
341
475
  */
@@ -368,10 +502,21 @@ declare class AXLookupComponent extends NXValueComponent implements FormValueCon
368
502
  protected isMultiple: _angular_core.Signal<boolean>;
369
503
  /** Whether the current mode renders a tree. */
370
504
  protected isTreeMode: _angular_core.Signal<boolean>;
371
- /** Whether the trigger input is writable and filters as you type. */
505
+ /** Whether the current mode can filter as you type (list, table, or tree). */
506
+ protected isListSearchMode: _angular_core.Signal<boolean>;
507
+ /** Whether the trigger input is writable and filters as you type (desktop only). */
372
508
  protected isEditableTrigger: _angular_core.Signal<boolean>;
509
+ /** Whether search is typed in the actionsheet instead of the trigger. */
510
+ protected isSheetSearchEnabled: _angular_core.Signal<boolean>;
511
+ /** Query typed in the actionsheet search field (independent of the trigger display text). */
512
+ protected sheetSearchText: _angular_core.WritableSignal<string>;
513
+ /** Increments on every tree filter apply so the tree view remounts with a new instance. */
514
+ protected treeFilterKey: _angular_core.Signal<string>;
515
+ /** Query passed to result-item highlighting (empty when disabled). */
516
+ protected highlightQuery: _angular_core.Signal<string>;
373
517
  /** The datasource for list-based modes; plain arrays are converted. */
374
518
  protected resolvedDataSource: _angular_core.Signal<AXDataSource<AXLookupItem>>;
519
+ protected resolvedTreeDataSource: _angular_core.Signal<AXTreeViewDataSource>;
375
520
  /** The current selection normalized to an array. */
376
521
  protected selectedValues: _angular_core.Signal<unknown[]>;
377
522
  /** The resolved selected items (via cache, datasource `find`/`byKey`, or tree node lookup). */
@@ -389,9 +534,16 @@ declare class AXLookupComponent extends NXValueComponent implements FormValueCon
389
534
  * the selected display text (same pattern as combo-box).
390
535
  */
391
536
  protected showSelectedTemplate: _angular_core.Signal<boolean>;
537
+ /** Placeholder for the editable trigger search input. */
538
+ protected triggerSearchPlaceholder: _angular_core.Signal<string>;
392
539
  protected popoverRef: _angular_core.Signal<AXPopoverComponent>;
540
+ protected originRef: _angular_core.Signal<ElementRef<HTMLElement>>;
541
+ protected popupRef: _angular_core.Signal<ElementRef<HTMLElement>>;
393
542
  protected triggerSearchInput: _angular_core.Signal<ElementRef<HTMLInputElement>>;
394
543
  protected listView: _angular_core.Signal<AXLookupListViewBase>;
544
+ protected dropDownTreeView: _angular_core.Signal<AXLookupDropDownTreeComponent>;
545
+ protected multiSelectTreeView: _angular_core.Signal<AXLookupMultiSelectTreeComponent>;
546
+ protected sheetSearchRef: _angular_core.Signal<AXSearchBoxComponent>;
395
547
  constructor();
396
548
  /** Returns the display text of an item using the `textField` mapping. */
397
549
  protected getItemText(item: AXLookupItem): string;
@@ -407,12 +559,16 @@ declare class AXLookupComponent extends NXValueComponent implements FormValueCon
407
559
  focus(options?: FocusOptions): void;
408
560
  /**
409
561
  * Handles keyboard interaction on the trigger input.
562
+ * In multi modes, Backspace with an empty trigger input removes the last chip; repeated presses
563
+ * clear the whole selection.
410
564
  */
411
565
  protected onTriggerKeydown(e: KeyboardEvent): void;
566
+ /** Filters the datasource from the actionsheet search field and handles Enter with no matches. */
567
+ protected onSheetSearchKeydown(e: AXHtmlEvent<KeyboardEvent>): void;
412
568
  /** Blocks typing when the trigger is not editable (keeps Tab / keyboard open working). */
413
569
  protected onBeforeInput(event: Event): void;
414
570
  /**
415
- * Returns focus to the trigger input when list navigation requests it.
571
+ * Returns focus to the search field when list navigation requests it.
416
572
  */
417
573
  protected onListNavigateOut(_reason: 'up' | 'typeahead'): void;
418
574
  protected focusListFirst(): void;
@@ -437,10 +593,10 @@ declare class AXLookupComponent extends NXValueComponent implements FormValueCon
437
593
  * Handles typing in the editable trigger input.
438
594
  */
439
595
  protected onTriggerSearchInput(text: string): void;
440
- /** Placeholder for the editable trigger search input. */
441
- protected triggerSearchPlaceholder: _angular_core.Signal<string>;
596
+ /** Filters the datasource from the actionsheet search field (reads the input so delayed ngModel cannot block typing). */
597
+ protected onSheetSearchInput(): void;
442
598
  /**
443
- * Commits a single pick (drop-down-list, drop-down-tree, multi-column) and closes the popup.
599
+ * Commits a single pick (drop-down-list, drop-down-tree, multi-column, multi-column-tree) and closes the popup.
444
600
  */
445
601
  protected handleSinglePick(e: AXLookupItemClickEvent): void;
446
602
  /**
@@ -466,7 +622,7 @@ declare class AXLookupComponent extends NXValueComponent implements FormValueCon
466
622
  *
467
623
  * @param items - Full items that include `valueField` (and ideally `textField`) properties.
468
624
  */
469
- seedItems(items: AXLookupItem[]): void;
625
+ seedItems(items: T[]): void;
470
626
  /**
471
627
  * Clears the whole selection.
472
628
  * Sets `null` in single modes and `[]` in multi modes. Used by projected `ax-clear-button`.
@@ -474,8 +630,8 @@ declare class AXLookupComponent extends NXValueComponent implements FormValueCon
474
630
  * @param isUserInteraction - Whether the clear was triggered by the user.
475
631
  */
476
632
  reset(isUserInteraction?: boolean): void;
477
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXLookupComponent, never>;
478
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXLookupComponent, "ax-lookup", never, { "name": { "alias": "name"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "dataSource": { "alias": "dataSource"; "required": false; "isSignal": true; }; "treeDataSource": { "alias": "treeDataSource"; "required": false; "isSignal": true; }; "valueField": { "alias": "valueField"; "required": false; "isSignal": true; }; "textField": { "alias": "textField"; "required": false; "isSignal": true; }; "disabledField": { "alias": "disabledField"; "required": false; "isSignal": true; }; "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "adaptivityEnabled": { "alias": "adaptivityEnabled"; "required": false; "isSignal": true; }; "caption": { "alias": "caption"; "required": false; "isSignal": true; }; "alternate": { "alias": "alternate"; "required": false; "isSignal": true; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "look": { "alias": "look"; "required": false; "isSignal": true; }; "itemHeight": { "alias": "itemHeight"; "required": false; "isSignal": true; }; "maxVisibleItems": { "alias": "maxVisibleItems"; "required": false; "isSignal": true; }; "treeSelectionBehavior": { "alias": "treeSelectionBehavior"; "required": false; "isSignal": true; }; "itemTemplate": { "alias": "itemTemplate"; "required": false; "isSignal": true; }; "selectedTemplate": { "alias": "selectedTemplate"; "required": false; "isSignal": true; }; "emptyTemplate": { "alias": "emptyTemplate"; "required": false; "isSignal": true; }; "loadingTemplate": { "alias": "loadingTemplate"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "valueItems": { "alias": "valueItems"; "required": false; "isSignal": true; }; }, { "look": "lookChange"; "value": "valueChange"; "onValueChanged": "onValueChanged"; "onSelectionChanged": "onSelectionChanged"; "onFocus": "onFocus"; "onBlur": "onBlur"; "onItemClick": "onItemClick"; "onItemSelected": "onItemSelected"; "onOpened": "onOpened"; "onClosed": "onClosed"; }, never, ["ax-prefix", "ax-clear-button", "ax-suffix", "ax-header", "ax-footer", "ax-validation-rule"], true, never>;
633
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXLookupComponent<any>, never>;
634
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXLookupComponent<any>, "ax-lookup", never, { "name": { "alias": "name"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "dataSource": { "alias": "dataSource"; "required": false; "isSignal": true; }; "treeDataSource": { "alias": "treeDataSource"; "required": false; "isSignal": true; }; "valueField": { "alias": "valueField"; "required": false; "isSignal": true; }; "textField": { "alias": "textField"; "required": false; "isSignal": true; }; "disabledField": { "alias": "disabledField"; "required": false; "isSignal": true; }; "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "treeParentField": { "alias": "treeParentField"; "required": false; "isSignal": true; }; "hasChildrenField": { "alias": "hasChildrenField"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "adaptivityEnabled": { "alias": "adaptivityEnabled"; "required": false; "isSignal": true; }; "caption": { "alias": "caption"; "required": false; "isSignal": true; }; "alternate": { "alias": "alternate"; "required": false; "isSignal": true; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "look": { "alias": "look"; "required": false; "isSignal": true; }; "itemHeight": { "alias": "itemHeight"; "required": false; "isSignal": true; }; "maxVisibleItems": { "alias": "maxVisibleItems"; "required": false; "isSignal": true; }; "treeSelectionBehavior": { "alias": "treeSelectionBehavior"; "required": false; "isSignal": true; }; "highlightSearch": { "alias": "highlightSearch"; "required": false; "isSignal": true; }; "itemTemplate": { "alias": "itemTemplate"; "required": false; "isSignal": true; }; "selectedTemplate": { "alias": "selectedTemplate"; "required": false; "isSignal": true; }; "emptyTemplate": { "alias": "emptyTemplate"; "required": false; "isSignal": true; }; "loadingTemplate": { "alias": "loadingTemplate"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "valueItems": { "alias": "valueItems"; "required": false; "isSignal": true; }; }, { "look": "lookChange"; "value": "valueChange"; "onValueChanged": "onValueChanged"; "onSelectionChanged": "onSelectionChanged"; "onFocus": "onFocus"; "onBlur": "onBlur"; "onItemClick": "onItemClick"; "onItemSelected": "onItemSelected"; "onOpened": "onOpened"; "onClosed": "onClosed"; }, never, ["ax-prefix", "ax-clear-button", "ax-suffix", "ax-header", "ax-footer", "ax-validation-rule"], true, never>;
479
635
  }
480
636
 
481
637
  /**
@@ -501,72 +657,138 @@ declare class AXLookupMultiSelectComponent extends AXLookupListViewBase {
501
657
  }
502
658
 
503
659
  /**
504
- * Internal mini component for the `drop-down-tree` lookup mode:
505
- * a predefined list rendered in a tree-like structure for single item selection.
660
+ * Internal mini component for the `multi-column` lookup mode:
661
+ * renders selectable rows in an `ax-data-table` grid and loads further
662
+ * pages as the user scrolls (no pager UI).
506
663
  *
507
664
  * @category Components
508
665
  */
509
- declare class AXLookupDropDownTreeComponent {
666
+ declare class AXLookupMultiColumnComponent {
667
+ #private;
510
668
  /**
511
- * The tree datasource: an array of nodes or a lazy children callback.
669
+ * The datasource providing the grid rows (paged, remote-capable).
670
+ * Pages are fetched on demand as the user scrolls the table body.
512
671
  */
513
- dataSource: _angular_core.InputSignal<AXTreeViewDataSource>;
672
+ dataSource: _angular_core.InputSignal<AXDataSource<AXLookupItem>>;
514
673
  /**
515
- * The node property used as the selection value (tree `idField`).
674
+ * The item property used as the selection value.
516
675
  */
517
676
  valueField: _angular_core.InputSignal<string>;
518
677
  /**
519
- * The node property used as the display text (tree `titleField`).
678
+ * The item property used as the display text.
520
679
  */
521
680
  textField: _angular_core.InputSignal<string>;
522
681
  /**
523
- * The node property marking a node as disabled.
682
+ * The item property marking an item as disabled.
524
683
  */
525
684
  disabledField: _angular_core.InputSignal<string>;
526
685
  /**
527
- * Currently selected values (at most one for single selection).
686
+ * Currently selected values (always an array, even for single selection).
528
687
  */
529
688
  selectedValues: _angular_core.InputSignal<unknown[]>;
530
689
  /**
531
- * Custom template rendered for each tree node.
690
+ * The fixed row height in pixels passed to the data table.
532
691
  */
533
- nodeTemplate: _angular_core.InputSignal<TemplateRef<AXTreeViewItemTemplateContext>>;
692
+ itemHeight: _angular_core.InputSignal<number>;
534
693
  /**
535
- * Emitted when the user selects a node.
694
+ * The maximum number of body rows visible before the table scrolls.
695
+ */
696
+ maxVisibleItems: _angular_core.InputSignal<number>;
697
+ /**
698
+ * Column definitions rendered as `ax-text-column` instances.
699
+ */
700
+ columns: _angular_core.InputSignal<AXLookupColumn[]>;
701
+ /**
702
+ * Optional custom row content. Context: `$implicit` is the row item.
703
+ * When set, replaces the default multi-column cell layout.
704
+ */
705
+ itemTemplate: _angular_core.InputSignal<TemplateRef<unknown>>;
706
+ /**
707
+ * Custom template rendered when the datasource has no items.
708
+ */
709
+ emptyTemplate: _angular_core.InputSignal<TemplateRef<unknown>>;
710
+ /**
711
+ * Custom template rendered while the table is loading.
712
+ */
713
+ loadingTemplate: _angular_core.InputSignal<TemplateRef<unknown>>;
714
+ /**
715
+ * When `true`, table rows use alternating background colors for easier scanning.
716
+ */
717
+ alternate: _angular_core.InputSignal<boolean>;
718
+ /**
719
+ * When set, matching text in table cells is highlighted.
720
+ */
721
+ highlightText: _angular_core.InputSignal<string>;
722
+ /**
723
+ * Emitted when the user picks a row.
536
724
  */
537
725
  itemClick: _angular_core.OutputEmitterRef<AXLookupItemClickEvent>;
538
- protected selectedIds: _angular_core.Signal<string[]>;
539
- protected handleSelectionChange(e: AXTreeViewSelectionChangeEvent): void;
540
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXLookupDropDownTreeComponent, never>;
541
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXLookupDropDownTreeComponent, "ax-lookup-drop-down-tree", never, { "dataSource": { "alias": "dataSource"; "required": true; "isSignal": true; }; "valueField": { "alias": "valueField"; "required": false; "isSignal": true; }; "textField": { "alias": "textField"; "required": false; "isSignal": true; }; "disabledField": { "alias": "disabledField"; "required": false; "isSignal": true; }; "selectedValues": { "alias": "selectedValues"; "required": false; "isSignal": true; }; "nodeTemplate": { "alias": "nodeTemplate"; "required": false; "isSignal": true; }; }, { "itemClick": "itemClick"; }, never, never, true, never>;
726
+ protected tableRef: _angular_core.Signal<AXDataTableComponent>;
727
+ /**
728
+ * Local table source: one page of whatever has been scrolled in so far.
729
+ * Kept as a stable instance so the table host is not recreated on each page load.
730
+ * `pageSize` grows with `#loadedItems` — never seed with a huge empty array (data-table
731
+ * initializes `displayedRows` as `new Array(pageSize)`, which caused NG0955-level jank).
732
+ */
733
+ protected readonly tableDataSource: AXDataSource<AXLookupItem>;
734
+ /**
735
+ * Header (~40px) + body rows. Grows with results up to `maxVisibleItems`,
736
+ * then the table body scrolls for the rest.
737
+ */
738
+ protected tableHeight: _angular_core.Signal<number>;
739
+ protected loadingConfig: _angular_core.Signal<{
740
+ enabled: boolean;
741
+ animation: boolean;
742
+ loadingTemplate: TemplateRef<unknown>;
743
+ }>;
744
+ constructor();
745
+ /** Stable unique key for `@for` — avoids NG0955 when `field` is missing or duplicated. */
746
+ protected trackColumnKey(index: number, column: AXLookupColumn): string;
747
+ protected resolveColumnWidth(column: AXLookupColumn): string | number | 'auto';
748
+ protected resolveRowCssClass: (row: unknown) => string;
749
+ protected handleRowClick(event: AXDataTableRowClick): void;
750
+ protected handleItemClick(item: AXLookupItem | null | undefined): void;
751
+ protected handleItemMouseDown(event: Event, item: AXLookupItem | null | undefined): void;
752
+ protected isSelected(item: AXLookupItem): boolean;
753
+ protected isDisabled(item: AXLookupItem): boolean;
754
+ private getValue;
755
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXLookupMultiColumnComponent, never>;
756
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXLookupMultiColumnComponent, "ax-lookup-multi-column", never, { "dataSource": { "alias": "dataSource"; "required": true; "isSignal": true; }; "valueField": { "alias": "valueField"; "required": false; "isSignal": true; }; "textField": { "alias": "textField"; "required": false; "isSignal": true; }; "disabledField": { "alias": "disabledField"; "required": false; "isSignal": true; }; "selectedValues": { "alias": "selectedValues"; "required": false; "isSignal": true; }; "itemHeight": { "alias": "itemHeight"; "required": false; "isSignal": true; }; "maxVisibleItems": { "alias": "maxVisibleItems"; "required": false; "isSignal": true; }; "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "itemTemplate": { "alias": "itemTemplate"; "required": false; "isSignal": true; }; "emptyTemplate": { "alias": "emptyTemplate"; "required": false; "isSignal": true; }; "loadingTemplate": { "alias": "loadingTemplate"; "required": false; "isSignal": true; }; "alternate": { "alias": "alternate"; "required": false; "isSignal": true; }; "highlightText": { "alias": "highlightText"; "required": false; "isSignal": true; }; }, { "itemClick": "itemClick"; }, never, never, true, never>;
542
757
  }
543
758
 
544
759
  /**
545
- * Internal mini component for the `multi-column` lookup mode:
546
- * renders selectable rows in an `ax-data-table` grid and loads further
547
- * pages as the user scrolls (no pager UI).
760
+ * Internal mini component for the `multi-column-tree` lookup mode:
761
+ * a multi-column `ax-data-table` with a drop-down tree inside it.
762
+ * Rows expand/collapse via the data-table hierarchy (`parentField` / nested `children`).
548
763
  *
549
764
  * @category Components
550
765
  */
551
- declare class AXLookupMultiColumnComponent {
552
- #private;
766
+ declare class AXLookupMultiColumnTreeComponent {
553
767
  /**
554
- * The datasource providing the grid rows (paged, remote-capable).
555
- * Pages are fetched on demand as the user scrolls the table body.
768
+ * The datasource providing hierarchical rows (roots on load, children via `parentField`).
556
769
  */
557
770
  dataSource: _angular_core.InputSignal<AXDataSource<AXLookupItem>>;
558
771
  /**
559
- * The item property used as the selection value.
772
+ * The item property used as the selection value (also the data-table row key).
560
773
  */
561
774
  valueField: _angular_core.InputSignal<string>;
562
775
  /**
563
- * The item property used as the display text.
776
+ * The item property used as the display text. The matching column shows the expand control
777
+ * unless another column sets `expandHandler`.
564
778
  */
565
779
  textField: _angular_core.InputSignal<string>;
566
780
  /**
567
781
  * The item property marking an item as disabled.
568
782
  */
569
783
  disabledField: _angular_core.InputSignal<string>;
784
+ /**
785
+ * Field used by the data table to fetch children (`AXDataSource` filter on expand).
786
+ */
787
+ parentField: _angular_core.InputSignal<string>;
788
+ /**
789
+ * Field used by the data table to decide whether a row can expand.
790
+ */
791
+ hasChildrenField: _angular_core.InputSignal<string>;
570
792
  /**
571
793
  * Currently selected values (always an array, even for single selection).
572
794
  */
@@ -601,20 +823,15 @@ declare class AXLookupMultiColumnComponent {
601
823
  */
602
824
  alternate: _angular_core.InputSignal<boolean>;
603
825
  /**
604
- * Emitted when the user picks a row.
826
+ * When set, matching text in table cells is highlighted.
605
827
  */
606
- itemClick: _angular_core.OutputEmitterRef<AXLookupItemClickEvent>;
607
- protected tableRef: _angular_core.Signal<AXDataTableComponent>;
828
+ highlightText: _angular_core.InputSignal<string>;
608
829
  /**
609
- * Local table source: one page of whatever has been scrolled in so far.
610
- * Kept as a stable instance so the table host is not recreated on each page load.
611
- * `pageSize` grows with `#loadedItems` — never seed with a huge empty array (data-table
612
- * initializes `displayedRows` as `new Array(pageSize)`, which caused NG0955-level jank).
830
+ * Emitted when the user picks a row (not when expanding/collapsing).
613
831
  */
614
- protected readonly tableDataSource: AXDataSource<AXLookupItem>;
832
+ itemClick: _angular_core.OutputEmitterRef<AXLookupItemClickEvent>;
615
833
  /**
616
- * Header (~40px) + body rows. Grows with results up to `maxVisibleItems`,
617
- * then the table body scrolls for the rest.
834
+ * Header (~40px) + up to `maxVisibleItems` body rows. Expanded children scroll inside.
618
835
  */
619
836
  protected tableHeight: _angular_core.Signal<number>;
620
837
  protected loadingConfig: _angular_core.Signal<{
@@ -622,10 +839,10 @@ declare class AXLookupMultiColumnComponent {
622
839
  animation: boolean;
623
840
  loadingTemplate: TemplateRef<unknown>;
624
841
  }>;
625
- constructor();
626
842
  /** Stable unique key for `@for` — avoids NG0955 when `field` is missing or duplicated. */
627
843
  protected trackColumnKey(index: number, column: AXLookupColumn): string;
628
844
  protected resolveColumnWidth(column: AXLookupColumn): string | number | 'auto';
845
+ protected isExpandColumn(index: number, column: AXLookupColumn): boolean;
629
846
  protected resolveRowCssClass: (row: unknown) => string;
630
847
  protected handleRowClick(event: AXDataTableRowClick): void;
631
848
  protected handleItemClick(item: AXLookupItem | null | undefined): void;
@@ -633,15 +850,15 @@ declare class AXLookupMultiColumnComponent {
633
850
  protected isSelected(item: AXLookupItem): boolean;
634
851
  protected isDisabled(item: AXLookupItem): boolean;
635
852
  private getValue;
636
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXLookupMultiColumnComponent, never>;
637
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXLookupMultiColumnComponent, "ax-lookup-multi-column", never, { "dataSource": { "alias": "dataSource"; "required": true; "isSignal": true; }; "valueField": { "alias": "valueField"; "required": false; "isSignal": true; }; "textField": { "alias": "textField"; "required": false; "isSignal": true; }; "disabledField": { "alias": "disabledField"; "required": false; "isSignal": true; }; "selectedValues": { "alias": "selectedValues"; "required": false; "isSignal": true; }; "itemHeight": { "alias": "itemHeight"; "required": false; "isSignal": true; }; "maxVisibleItems": { "alias": "maxVisibleItems"; "required": false; "isSignal": true; }; "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "itemTemplate": { "alias": "itemTemplate"; "required": false; "isSignal": true; }; "emptyTemplate": { "alias": "emptyTemplate"; "required": false; "isSignal": true; }; "loadingTemplate": { "alias": "loadingTemplate"; "required": false; "isSignal": true; }; "alternate": { "alias": "alternate"; "required": false; "isSignal": true; }; }, { "itemClick": "itemClick"; }, never, never, true, never>;
853
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXLookupMultiColumnTreeComponent, never>;
854
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXLookupMultiColumnTreeComponent, "ax-lookup-multi-column-tree", never, { "dataSource": { "alias": "dataSource"; "required": true; "isSignal": true; }; "valueField": { "alias": "valueField"; "required": false; "isSignal": true; }; "textField": { "alias": "textField"; "required": false; "isSignal": true; }; "disabledField": { "alias": "disabledField"; "required": false; "isSignal": true; }; "parentField": { "alias": "parentField"; "required": false; "isSignal": true; }; "hasChildrenField": { "alias": "hasChildrenField"; "required": false; "isSignal": true; }; "selectedValues": { "alias": "selectedValues"; "required": false; "isSignal": true; }; "itemHeight": { "alias": "itemHeight"; "required": false; "isSignal": true; }; "maxVisibleItems": { "alias": "maxVisibleItems"; "required": false; "isSignal": true; }; "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "itemTemplate": { "alias": "itemTemplate"; "required": false; "isSignal": true; }; "emptyTemplate": { "alias": "emptyTemplate"; "required": false; "isSignal": true; }; "loadingTemplate": { "alias": "loadingTemplate"; "required": false; "isSignal": true; }; "alternate": { "alias": "alternate"; "required": false; "isSignal": true; }; "highlightText": { "alias": "highlightText"; "required": false; "isSignal": true; }; }, { "itemClick": "itemClick"; }, never, never, true, never>;
638
855
  }
639
856
 
640
857
  declare class AXLookupModule {
641
858
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXLookupModule, never>;
642
- static ɵmod: _angular_core.ɵɵNgModuleDeclaration<AXLookupModule, never, [typeof AXLookupComponent, typeof AXLookupDropDownListComponent, typeof AXLookupMultiSelectComponent, typeof AXLookupDropDownTreeComponent, typeof AXLookupMultiSelectTreeComponent, typeof AXLookupMultiColumnComponent], [typeof AXLookupComponent, typeof AXLookupDropDownListComponent, typeof AXLookupMultiSelectComponent, typeof AXLookupDropDownTreeComponent, typeof AXLookupMultiSelectTreeComponent, typeof AXLookupMultiColumnComponent]>;
859
+ static ɵmod: _angular_core.ɵɵNgModuleDeclaration<AXLookupModule, never, [typeof AXLookupComponent, typeof AXLookupDropDownListComponent, typeof AXLookupMultiSelectComponent, typeof AXLookupDropDownTreeComponent, typeof AXLookupMultiSelectTreeComponent, typeof AXLookupMultiColumnComponent, typeof AXLookupMultiColumnTreeComponent], [typeof AXLookupComponent, typeof AXLookupDropDownListComponent, typeof AXLookupMultiSelectComponent, typeof AXLookupDropDownTreeComponent, typeof AXLookupMultiSelectTreeComponent, typeof AXLookupMultiColumnComponent, typeof AXLookupMultiColumnTreeComponent]>;
643
860
  static ɵinj: _angular_core.ɵɵInjectorDeclaration<AXLookupModule>;
644
861
  }
645
862
 
646
- export { AXLookupComponent, AXLookupDropDownListComponent, AXLookupDropDownTreeComponent, AXLookupModule, AXLookupMultiColumnComponent, AXLookupMultiSelectComponent, AXLookupMultiSelectTreeComponent };
863
+ export { AXLookupComponent, AXLookupDropDownListComponent, AXLookupDropDownTreeComponent, AXLookupModule, AXLookupMultiColumnComponent, AXLookupMultiColumnTreeComponent, AXLookupMultiSelectComponent, AXLookupMultiSelectTreeComponent };
647
864
  export type { AXLookupColumn, AXLookupItem, AXLookupItemClickEvent, AXLookupMode, AXLookupSelectionChangedEvent, AXLookupTreeSelectionEvent };