@acorex/components 22.1.0-next.8 → 22.1.0

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