@acorex/components 21.0.0-next.38 → 21.0.0-next.39

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.
@@ -29,7 +29,7 @@ declare class AXNumberBoxComponent extends AXNumberBoxComponent_base {
29
29
  protected mode: _angular_core.WritableSignal<"digits" | "thousandsSeparator" | "decimal">;
30
30
  private input;
31
31
  protected stringValue: _angular_core.WritableSignal<string>;
32
- protected internalValueChanged(value: number): void;
32
+ protected internalValueChanged(value: number | undefined): void;
33
33
  private plusValue;
34
34
  private minusValue;
35
35
  protected handleOnKeydownEvent(e: KeyboardEvent): void;
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "@acorex/components",
3
- "version": "21.0.0-next.38",
3
+ "version": "21.0.0-next.39",
4
4
  "peerDependencies": {
5
- "@acorex/core": "21.0.0-next.38",
6
- "@acorex/cdk": "21.0.0-next.38",
5
+ "@acorex/core": "21.0.0-next.39",
6
+ "@acorex/cdk": "21.0.0-next.39",
7
7
  "@angular/common": "^20.0.0",
8
8
  "@angular/core": "^20.0.0",
9
9
  "@angular/cdk": "^20.0.0",
@@ -64,19 +64,33 @@ interface AXTreeViewBeforeDropEvent extends AXEvent {
64
64
  currentIndex: number;
65
65
  canceled: boolean;
66
66
  }
67
+ /**
68
+ * Tree view node interface.
69
+ *
70
+ * By default, nodes should have the following structure:
71
+ * ```typescript
72
+ * {
73
+ * id: string; // Unique identifier for the node
74
+ * title: string; // Display text for the node
75
+ * tooltip?: string; // Optional tooltip text
76
+ * icon?: string; // Optional icon class name
77
+ * expanded?: boolean; // Whether the node is expanded
78
+ * selected?: boolean; // Whether the node is selected
79
+ * indeterminate?: boolean; // Whether the checkbox is in indeterminate state
80
+ * disabled?: boolean; // Whether the node is disabled
81
+ * hidden?: boolean; // Whether the node is hidden
82
+ * children?: AXTreeViewNode[]; // Child nodes
83
+ * childrenCount?: number; // Count of children (for lazy loading)
84
+ * data?: unknown; // Optional custom data
85
+ * }
86
+ * ```
87
+ *
88
+ * However, you can use custom field names by providing field name inputs
89
+ * (idField, titleField, etc.) to the component. The component will then
90
+ * use those field names to access node properties.
91
+ */
67
92
  interface AXTreeViewNode {
68
- id: string;
69
- label: string;
70
- icon?: string;
71
- expanded?: boolean;
72
- selected?: boolean;
73
- indeterminate?: boolean;
74
- disabled?: boolean;
75
- visible?: boolean;
76
- children?: AXTreeViewNode[];
77
- childrenCount?: number;
78
- loading?: boolean;
79
- data?: unknown;
93
+ [key: string]: unknown;
80
94
  }
81
95
  interface AXTreeViewNodeToggleEvent extends AXHtmlEvent {
82
96
  node: AXTreeViewNode;
@@ -84,6 +98,9 @@ interface AXTreeViewNodeToggleEvent extends AXHtmlEvent {
84
98
  interface AXTreeViewNodeSelectEvent extends AXHtmlEvent {
85
99
  node: AXTreeViewNode;
86
100
  }
101
+ interface AXTreeViewSelectionChangeEvent extends AXEvent {
102
+ selectedNodes: AXTreeViewNode[];
103
+ }
87
104
  interface AXTreeViewDropEvent extends AXEvent {
88
105
  node: AXTreeViewNode;
89
106
  previousParent?: AXTreeViewNode;
@@ -102,7 +119,37 @@ interface AXTreeViewItemTemplateContext {
102
119
  type AXTreeViewViewLook = 'default' | 'card' | 'with-line';
103
120
  type AXTreeViewDragMode = 'none' | 'handler' | 'item';
104
121
  type AXTreeViewDragOperationType = 'order-only' | 'move' | 'both';
105
- type AXTreeViewSelectMode = 'single' | 'multiple';
122
+ type AXTreeViewSelectMode = 'none' | 'single' | 'multiple';
123
+ /**
124
+ * Selection behavior mode for tree nodes.
125
+ *
126
+ * Controls how node selection behaves in the tree:
127
+ * - **'all'**: No restrictions or special behavior. Any node can be selected independently.
128
+ * - **'intermediate'**: When children are selected, parent nodes show indeterminate state.
129
+ * If all children are selected, parent becomes selected; if some are selected, parent shows indeterminate.
130
+ * - **'leaf'**: Only leaf nodes (nodes with no children) can be selected. Parent nodes cannot be selected.
131
+ * - **'nested'**: Selecting a parent node automatically selects all its children (cascading selection).
132
+ * - **'intermediate-nested'**: Combines both behaviors - selecting parent selects children AND children selection affects parent state.
133
+ *
134
+ * @example
135
+ * ```typescript
136
+ * // Allow any node to be selected
137
+ * <ax-tree-view [selectionBehavior]="'all'" />
138
+ *
139
+ * // Only leaf nodes can be selected
140
+ * <ax-tree-view [selectionBehavior]="'leaf'" />
141
+ *
142
+ * // Parent shows indeterminate when children are selected
143
+ * <ax-tree-view [selectionBehavior]="'intermediate'" />
144
+ *
145
+ * // Selecting parent selects all children
146
+ * <ax-tree-view [selectionBehavior]="'nested'" />
147
+ *
148
+ * // Both: selecting parent selects children AND children affect parent state
149
+ * <ax-tree-view [selectionBehavior]="'intermediate-nested'" />
150
+ * ```
151
+ */
152
+ type AXTreeViewSelectionBehavior = 'all' | 'intermediate' | 'leaf' | 'nested' | 'intermediate-nested';
106
153
  /**
107
154
  * Function type for lazy loading tree nodes
108
155
  */
@@ -138,10 +185,8 @@ declare class AXTreeViewComponent {
138
185
  readonly selectMode: _angular_core.InputSignal<AXTreeViewSelectMode>;
139
186
  /** Whether to show checkboxes for selection (only applies to multiple mode) */
140
187
  readonly showCheckbox: _angular_core.InputSignal<boolean>;
141
- /** When true, selecting a parent also selects all loaded children (only for multiple mode) */
142
- readonly checkChildrenOnSelect: _angular_core.InputSignal<boolean>;
143
- /** When true, selecting a child makes parents indeterminate (only for multiple mode) */
144
- readonly intermediateState: _angular_core.InputSignal<boolean>;
188
+ /** Selection behavior: 'all' (select anything, no special behavior), 'intermediate' (parent indeterminate state when children selected), 'leaf' (only leaf nodes selectable), 'nested' (selecting parent selects all children) */
189
+ readonly selectionBehavior: _angular_core.InputSignal<AXTreeViewSelectionBehavior>;
145
190
  /** When true, clicking on a node toggles its selection (works for both single and multiple modes) */
146
191
  readonly checkOnClick: _angular_core.InputSignal<boolean>;
147
192
  /** Drag and drop mode: 'none' (disabled), 'handler' (drag handle), 'item' (entire item) */
@@ -158,18 +203,42 @@ declare class AXTreeViewComponent {
158
203
  readonly collapsedIcon: _angular_core.InputSignal<string>;
159
204
  /** Indent size in pixels for each level */
160
205
  readonly indentSize: _angular_core.InputSignal<number>;
161
- /** Node height in pixels */
162
- readonly nodeHeight: _angular_core.InputSignal<"compact" | "normal" | "comfortable">;
163
206
  /** Visual style variant */
164
207
  readonly look: _angular_core.InputSignal<AXTreeViewViewLook>;
165
208
  /** Custom template for tree items */
166
- readonly itemTemplate: _angular_core.InputSignal<TemplateRef<AXTreeViewItemTemplateContext>>;
209
+ readonly nodeTemplate: _angular_core.InputSignal<TemplateRef<AXTreeViewItemTemplateContext>>;
210
+ /** Field name for node ID (default: 'id') */
211
+ readonly idField: _angular_core.InputSignal<string>;
212
+ /** Field name for node title (default: 'title') */
213
+ readonly titleField: _angular_core.InputSignal<string>;
214
+ /** Field name for node tooltip (default: 'tooltip') */
215
+ readonly tooltipField: _angular_core.InputSignal<string>;
216
+ /** Field name for node icon (default: 'icon') */
217
+ readonly iconField: _angular_core.InputSignal<string>;
218
+ /** Field name for expanded state (default: 'expanded') */
219
+ readonly expandedField: _angular_core.InputSignal<string>;
220
+ /** Field name for selected state (default: 'selected') */
221
+ readonly selectedField: _angular_core.InputSignal<string>;
222
+ /** Field name for indeterminate state (default: 'indeterminate') */
223
+ readonly indeterminateField: _angular_core.InputSignal<string>;
224
+ /** Field name for disabled state (default: 'disabled') */
225
+ readonly disabledField: _angular_core.InputSignal<string>;
226
+ /** Field name for hidden state (default: 'hidden') */
227
+ readonly hiddenField: _angular_core.InputSignal<string>;
228
+ /** Field name for children array (default: 'children') */
229
+ readonly childrenField: _angular_core.InputSignal<string>;
230
+ /** Field name for children count (default: 'childrenCount') */
231
+ readonly childrenCountField: _angular_core.InputSignal<string>;
232
+ /** Field name for custom data (default: 'data') */
233
+ readonly dataField: _angular_core.InputSignal<string>;
167
234
  /** Emitted before a drop operation - set canceled to true to prevent drop */
168
235
  readonly onBeforeDrop: _angular_core.OutputEmitterRef<AXTreeViewBeforeDropEvent>;
169
236
  /** Emitted when a node is toggled (expanded/collapsed) */
170
237
  readonly onNodeToggle: _angular_core.OutputEmitterRef<AXTreeViewNodeToggleEvent>;
171
238
  /** Emitted when a node is selected/deselected */
172
239
  readonly onNodeSelect: _angular_core.OutputEmitterRef<AXTreeViewNodeSelectEvent>;
240
+ /** Emitted when selection changes - returns all currently selected nodes */
241
+ readonly onSelectionChange: _angular_core.OutputEmitterRef<AXTreeViewSelectionChangeEvent>;
173
242
  /** Emitted when nodes are reordered within the same parent */
174
243
  readonly onOrderChange: _angular_core.OutputEmitterRef<AXTreeViewDropEvent>;
175
244
  /** Emitted when a node is moved to a different parent */
@@ -191,6 +260,84 @@ declare class AXTreeViewComponent {
191
260
  private isUpdatingFromDatasource;
192
261
  /** Computed to check if datasource is a function */
193
262
  private readonly isLazyDataSource;
263
+ /** Computed: Returns true when selection is restricted to leaf nodes only */
264
+ protected readonly isLeafOnlyMode: _angular_core.Signal<boolean>;
265
+ /** Computed: Returns true when selecting a parent automatically selects all its children */
266
+ protected readonly cascadesToChildren: _angular_core.Signal<boolean>;
267
+ /** Computed: Returns true when parent nodes show indeterminate state based on children selection */
268
+ protected readonly hasIntermediateState: _angular_core.Signal<boolean>;
269
+ /**
270
+ * Get a property value from a node using the configured field name
271
+ */
272
+ protected getNodeProp<T = unknown>(node: AXTreeViewNode, fieldName: string, defaultValue?: T): T;
273
+ /**
274
+ * Set a property value on a node using the configured field name
275
+ */
276
+ protected setNodeProp(node: AXTreeViewNode, fieldName: string, value: unknown): void;
277
+ /**
278
+ * Get node ID
279
+ */
280
+ protected getNodeId(node: AXTreeViewNode): string;
281
+ /**
282
+ * Get node title
283
+ */
284
+ protected getNodeTitle(node: AXTreeViewNode): string;
285
+ /**
286
+ * Get node tooltip
287
+ */
288
+ protected getNodeTooltip(node: AXTreeViewNode): string | undefined;
289
+ /**
290
+ * Get node icon
291
+ */
292
+ protected getNodeIcon(node: AXTreeViewNode): string | undefined;
293
+ /**
294
+ * Get node expanded state
295
+ */
296
+ protected getNodeExpanded(node: AXTreeViewNode): boolean;
297
+ /**
298
+ * Set node expanded state
299
+ */
300
+ protected setNodeExpanded(node: AXTreeViewNode, value: boolean): void;
301
+ /**
302
+ * Get node selected state
303
+ */
304
+ protected getNodeSelected(node: AXTreeViewNode): boolean;
305
+ /**
306
+ * Set node selected state
307
+ */
308
+ protected setNodeSelected(node: AXTreeViewNode, value: boolean): void;
309
+ /**
310
+ * Get node indeterminate state
311
+ */
312
+ protected getNodeIndeterminate(node: AXTreeViewNode): boolean;
313
+ /**
314
+ * Set node indeterminate state
315
+ */
316
+ protected setNodeIndeterminate(node: AXTreeViewNode, value: boolean): void;
317
+ /**
318
+ * Get node disabled state
319
+ */
320
+ protected getNodeDisabled(node: AXTreeViewNode): boolean;
321
+ /**
322
+ * Get node hidden state
323
+ */
324
+ protected getNodeHidden(node: AXTreeViewNode): boolean;
325
+ /**
326
+ * Get node children array
327
+ */
328
+ protected getNodeChildren(node: AXTreeViewNode): AXTreeViewNode[] | undefined;
329
+ /**
330
+ * Set node children array
331
+ */
332
+ protected setNodeChildren(node: AXTreeViewNode, value: AXTreeViewNode[] | undefined): void;
333
+ /**
334
+ * Get node children count
335
+ */
336
+ protected getNodeChildrenCount(node: AXTreeViewNode): number | undefined;
337
+ /**
338
+ * Set node children count
339
+ */
340
+ protected setNodeChildrenCount(node: AXTreeViewNode, value: number | undefined): void;
194
341
  /**
195
342
  * Expand all nodes in the tree (with lazy loading support)
196
343
  */
@@ -235,6 +382,142 @@ declare class AXTreeViewComponent {
235
382
  * Check if a node is currently loading
236
383
  */
237
384
  isNodeLoading(nodeId: string): boolean;
385
+ /**
386
+ * Get loading state for a node (internal state)
387
+ */
388
+ getNodeLoading(node: AXTreeViewNode): boolean;
389
+ /**
390
+ * Edit/update a node's properties
391
+ * @param nodeId - The ID of the node to edit
392
+ * @param updates - Partial node object with properties to update
393
+ * @returns true if node was found and updated, false otherwise
394
+ */
395
+ editNode(nodeId: string, updates: Partial<AXTreeViewNode>): boolean;
396
+ /**
397
+ * Add a child node to a parent node
398
+ * @param parentId - The ID of the parent node
399
+ * @param childNode - The child node to add
400
+ * @param index - Optional index to insert at (default: append to end)
401
+ * @returns true if parent was found and child was added, false otherwise
402
+ */
403
+ addChild(parentId: string, childNode: AXTreeViewNode, index?: number): boolean;
404
+ /**
405
+ * Remove a node from the tree
406
+ * @param nodeId - The ID of the node to remove
407
+ * @returns The removed node if found, null otherwise
408
+ */
409
+ removeNode(nodeId: string): AXTreeViewNode | null;
410
+ /**
411
+ * Expand a specific node
412
+ * @param nodeId - The ID of the node to expand
413
+ * @returns Promise that resolves when expansion is complete (if lazy loading)
414
+ */
415
+ expandNode(nodeId: string): Promise<void>;
416
+ /**
417
+ * Collapse a specific node
418
+ * @param nodeId - The ID of the node to collapse
419
+ */
420
+ collapseNode(nodeId: string): void;
421
+ /**
422
+ * Toggle expansion state of a specific node
423
+ * @param nodeId - The ID of the node to toggle
424
+ * @returns Promise that resolves when toggle is complete (if lazy loading)
425
+ */
426
+ toggleNodeExpansion(nodeId: string): Promise<void>;
427
+ /**
428
+ * Programmatically select a node
429
+ * @param nodeId - The ID of the node to select
430
+ * @returns true if node was found and selected, false otherwise
431
+ */
432
+ selectNode(nodeId: string): boolean;
433
+ /**
434
+ * Programmatically deselect a node
435
+ * @param nodeId - The ID of the node to deselect
436
+ * @returns true if node was found and deselected, false otherwise
437
+ */
438
+ deselectNode(nodeId: string): boolean;
439
+ /**
440
+ * Get parent node of a given node
441
+ * @param nodeId - The ID of the node
442
+ * @returns The parent node if found, null otherwise
443
+ */
444
+ getParent(nodeId: string): AXTreeViewNode | null;
445
+ /**
446
+ * Get children of a node
447
+ * @param nodeId - The ID of the parent node
448
+ * @returns Array of child nodes, or null if node not found
449
+ */
450
+ getChildren(nodeId: string): AXTreeViewNode[] | null;
451
+ /**
452
+ * Get all root nodes
453
+ * @returns Array of root nodes
454
+ */
455
+ getRootNodes(): AXTreeViewNode[];
456
+ /**
457
+ * Get all nodes in a flat array
458
+ * @returns Array of all nodes in the tree
459
+ */
460
+ getAllNodes(): AXTreeViewNode[];
461
+ /**
462
+ * Get the path to a node (array of parent IDs from root to node)
463
+ * @param nodeId - The ID of the node
464
+ * @returns Array of node IDs representing the path, or empty array if node not found
465
+ */
466
+ getNodePath(nodeId: string): string[];
467
+ /**
468
+ * Get the level/depth of a node (0 = root level)
469
+ * @param nodeId - The ID of the node
470
+ * @returns The level of the node, or -1 if node not found
471
+ */
472
+ getNodeLevel(nodeId: string): number;
473
+ /**
474
+ * Programmatically move a node to a new parent
475
+ * @param nodeId - The ID of the node to move
476
+ * @param newParentId - The ID of the new parent (undefined for root level)
477
+ * @param index - Optional index to insert at (default: append to end)
478
+ * @returns true if move was successful, false otherwise
479
+ */
480
+ moveNode(nodeId: string, newParentId?: string, index?: number): boolean;
481
+ /**
482
+ * Clone a node (creates a deep copy)
483
+ * @param nodeId - The ID of the node to clone
484
+ * @returns The cloned node, or null if node not found
485
+ */
486
+ cloneNode(nodeId: string): AXTreeViewNode | null;
487
+ /**
488
+ * Focus a specific node by ID
489
+ * @param nodeId - The ID of the node to focus
490
+ * @returns true if node was found and focused, false otherwise
491
+ */
492
+ focusNode(nodeId: string): boolean;
493
+ /**
494
+ * Get all expanded nodes
495
+ * @returns Array of expanded nodes
496
+ */
497
+ getExpandedNodes(): AXTreeViewNode[];
498
+ /**
499
+ * Get all collapsed nodes that have children
500
+ * @returns Array of collapsed nodes with children
501
+ */
502
+ getCollapsedNodes(): AXTreeViewNode[];
503
+ /**
504
+ * Check if a node is expanded
505
+ * @param nodeId - The ID of the node
506
+ * @returns true if node is expanded, false otherwise
507
+ */
508
+ isNodeExpanded(nodeId: string): boolean;
509
+ /**
510
+ * Check if a node is selected
511
+ * @param nodeId - The ID of the node
512
+ * @returns true if node is selected, false otherwise
513
+ */
514
+ isNodeSelected(nodeId: string): boolean;
515
+ /**
516
+ * Check if a node has children
517
+ * @param nodeId - The ID of the node
518
+ * @returns true if node has children, false otherwise
519
+ */
520
+ hasChildren(nodeId: string): boolean;
238
521
  /**
239
522
  * Get template context for a node
240
523
  */
@@ -251,6 +534,19 @@ declare class AXTreeViewComponent {
251
534
  * Check if checkboxes should be shown (only for multiple mode)
252
535
  */
253
536
  shouldShowCheckbox(): boolean;
537
+ /**
538
+ * Check if a node is a leaf (has no children)
539
+ * A node is a leaf if it has no loaded children AND no childrenCount (or childrenCount is 0)
540
+ */
541
+ isLeafNode(node: AXTreeViewNode): boolean;
542
+ /**
543
+ * Check if a node can be selected (considering selectMode and isLeafOnlyMode)
544
+ */
545
+ canSelectNode(node: AXTreeViewNode): boolean;
546
+ /**
547
+ * Check if checkbox should be shown for a specific node
548
+ */
549
+ shouldShowCheckboxForNode(node: AXTreeViewNode): boolean;
254
550
  /**
255
551
  * Generate unique list ID for each node
256
552
  */
@@ -271,6 +567,10 @@ declare class AXTreeViewComponent {
271
567
  * Get ARIA selected state for a node
272
568
  */
273
569
  getNodeAriaSelected(node: AXTreeViewNode): string | null;
570
+ /**
571
+ * Emit selection change event with all selected nodes
572
+ */
573
+ private emitSelectionChange;
274
574
  /**
275
575
  * Handle node click - for single selection mode or multiple mode with checkOnClick enabled
276
576
  */
@@ -397,7 +697,7 @@ declare class AXTreeViewComponent {
397
697
  */
398
698
  private handleError;
399
699
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXTreeViewComponent, never>;
400
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXTreeViewComponent, "ax-tree-view", never, { "datasource": { "alias": "datasource"; "required": true; "isSignal": true; }; "selectMode": { "alias": "selectMode"; "required": false; "isSignal": true; }; "showCheckbox": { "alias": "showCheckbox"; "required": false; "isSignal": true; }; "checkChildrenOnSelect": { "alias": "checkChildrenOnSelect"; "required": false; "isSignal": true; }; "intermediateState": { "alias": "intermediateState"; "required": false; "isSignal": true; }; "checkOnClick": { "alias": "checkOnClick"; "required": false; "isSignal": true; }; "dragMode": { "alias": "dragMode"; "required": false; "isSignal": true; }; "dragOperationType": { "alias": "dragOperationType"; "required": false; "isSignal": true; }; "showIcons": { "alias": "showIcons"; "required": false; "isSignal": true; }; "showChildrenBadge": { "alias": "showChildrenBadge"; "required": false; "isSignal": true; }; "expandedIcon": { "alias": "expandedIcon"; "required": false; "isSignal": true; }; "collapsedIcon": { "alias": "collapsedIcon"; "required": false; "isSignal": true; }; "indentSize": { "alias": "indentSize"; "required": false; "isSignal": true; }; "nodeHeight": { "alias": "nodeHeight"; "required": false; "isSignal": true; }; "look": { "alias": "look"; "required": false; "isSignal": true; }; "itemTemplate": { "alias": "itemTemplate"; "required": false; "isSignal": true; }; }, { "datasource": "datasourceChange"; "onBeforeDrop": "onBeforeDrop"; "onNodeToggle": "onNodeToggle"; "onNodeSelect": "onNodeSelect"; "onOrderChange": "onOrderChange"; "onMoveChange": "onMoveChange"; "onItemsChange": "onItemsChange"; }, never, never, true, never>;
700
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXTreeViewComponent, "ax-tree-view", never, { "datasource": { "alias": "datasource"; "required": true; "isSignal": true; }; "selectMode": { "alias": "selectMode"; "required": false; "isSignal": true; }; "showCheckbox": { "alias": "showCheckbox"; "required": false; "isSignal": true; }; "selectionBehavior": { "alias": "selectionBehavior"; "required": false; "isSignal": true; }; "checkOnClick": { "alias": "checkOnClick"; "required": false; "isSignal": true; }; "dragMode": { "alias": "dragMode"; "required": false; "isSignal": true; }; "dragOperationType": { "alias": "dragOperationType"; "required": false; "isSignal": true; }; "showIcons": { "alias": "showIcons"; "required": false; "isSignal": true; }; "showChildrenBadge": { "alias": "showChildrenBadge"; "required": false; "isSignal": true; }; "expandedIcon": { "alias": "expandedIcon"; "required": false; "isSignal": true; }; "collapsedIcon": { "alias": "collapsedIcon"; "required": false; "isSignal": true; }; "indentSize": { "alias": "indentSize"; "required": false; "isSignal": true; }; "look": { "alias": "look"; "required": false; "isSignal": true; }; "nodeTemplate": { "alias": "nodeTemplate"; "required": false; "isSignal": true; }; "idField": { "alias": "idField"; "required": false; "isSignal": true; }; "titleField": { "alias": "titleField"; "required": false; "isSignal": true; }; "tooltipField": { "alias": "tooltipField"; "required": false; "isSignal": true; }; "iconField": { "alias": "iconField"; "required": false; "isSignal": true; }; "expandedField": { "alias": "expandedField"; "required": false; "isSignal": true; }; "selectedField": { "alias": "selectedField"; "required": false; "isSignal": true; }; "indeterminateField": { "alias": "indeterminateField"; "required": false; "isSignal": true; }; "disabledField": { "alias": "disabledField"; "required": false; "isSignal": true; }; "hiddenField": { "alias": "hiddenField"; "required": false; "isSignal": true; }; "childrenField": { "alias": "childrenField"; "required": false; "isSignal": true; }; "childrenCountField": { "alias": "childrenCountField"; "required": false; "isSignal": true; }; "dataField": { "alias": "dataField"; "required": false; "isSignal": true; }; }, { "datasource": "datasourceChange"; "onBeforeDrop": "onBeforeDrop"; "onNodeToggle": "onNodeToggle"; "onNodeSelect": "onNodeSelect"; "onSelectionChange": "onSelectionChange"; "onOrderChange": "onOrderChange"; "onMoveChange": "onMoveChange"; "onItemsChange": "onItemsChange"; }, never, never, true, never>;
401
701
  }
402
702
 
403
703
  declare class AXTreeViewModule {
@@ -417,16 +717,16 @@ declare class AXTreeViewService {
417
717
  /**
418
718
  * Find a node by ID in the tree
419
719
  */
420
- findNodeById(nodes: AXTreeViewNode[], id: string): AXTreeViewNode | null;
720
+ findNodeById(nodes: AXTreeViewNode[], id: string, idField?: string): AXTreeViewNode | null;
421
721
  /**
422
722
  * Find parent node of a given node
423
723
  */
424
- findParentNode(nodes: AXTreeViewNode[], targetNode: AXTreeViewNode): AXTreeViewNode | undefined;
724
+ findParentNode(nodes: AXTreeViewNode[], targetNode: AXTreeViewNode, idField?: string, childrenField?: string): AXTreeViewNode | undefined;
425
725
  /**
426
726
  * Check if targetNode is a descendant of ancestorNode (or the same node)
427
727
  * Prevents circular references by checking if target exists in ancestor's children tree
428
728
  */
429
- isValidDropTarget(movedNode: AXTreeViewNode, targetNode: AXTreeViewNode): boolean;
729
+ isValidDropTarget(movedNode: AXTreeViewNode, targetNode: AXTreeViewNode, idField?: string, childrenField?: string): boolean;
430
730
  /**
431
731
  * Check if targetNode is a descendant of ancestorNode
432
732
  */
@@ -434,67 +734,67 @@ declare class AXTreeViewService {
434
734
  /**
435
735
  * Build a flat list of all visible focusable nodes
436
736
  */
437
- buildFlatNodeList(nodes: AXTreeViewNode[]): AXTreeViewFlatNode[];
737
+ buildFlatNodeList(nodes: AXTreeViewNode[], hiddenField?: string, disabledField?: string, expandedField?: string, childrenField?: string): AXTreeViewFlatNode[];
438
738
  /**
439
739
  * Check if node has children
440
740
  */
441
- hasChildren(node: AXTreeViewNode): boolean;
741
+ hasChildren(node: AXTreeViewNode, childrenField?: string): boolean;
442
742
  /**
443
743
  * Check if node can be lazy loaded
444
744
  */
445
- canLazyLoad(node: AXTreeViewNode, isLazyDataSource: boolean): boolean;
745
+ canLazyLoad(node: AXTreeViewNode, isLazyDataSource: boolean, childrenCountField?: string, childrenField?: string): boolean;
446
746
  /**
447
747
  * Recursively select/deselect all children
448
748
  */
449
- selectAllChildren(children: AXTreeViewNode[], selected: boolean): void;
749
+ selectAllChildren(children: AXTreeViewNode[], selected: boolean, selectedField?: string, indeterminateField?: string, childrenField?: string): void;
450
750
  /**
451
751
  * Get selection state of children
452
752
  */
453
- getChildrenSelectionState(children: AXTreeViewNode[]): AXTreeViewChildrenSelectionState;
753
+ getChildrenSelectionState(children: AXTreeViewNode[], selectedField?: string, indeterminateField?: string): AXTreeViewChildrenSelectionState;
454
754
  /**
455
755
  * Update parent node states based on children selection (with intermediate state support)
456
756
  */
457
- updateParentStates(nodes: AXTreeViewNode[], changedNode: AXTreeViewNode, intermediateState: boolean): void;
757
+ updateParentStates(nodes: AXTreeViewNode[], changedNode: AXTreeViewNode, intermediateState: boolean, idField?: string, childrenField?: string, selectedField?: string, indeterminateField?: string): void;
458
758
  /**
459
759
  * Recursively deselect all nodes
460
760
  */
461
- deselectAllNodes(nodes: AXTreeViewNode[]): void;
761
+ deselectAllNodes(nodes: AXTreeViewNode[], selectedField?: string, indeterminateField?: string, childrenField?: string): void;
462
762
  /**
463
763
  * Recursively set selection state for all nodes
464
764
  */
465
- setAllSelection(nodes: AXTreeViewNode[], selected: boolean): void;
765
+ setAllSelection(nodes: AXTreeViewNode[], selected: boolean, selectedField?: string, indeterminateField?: string, childrenField?: string): void;
466
766
  /**
467
767
  * Recursively count selected nodes
468
768
  */
469
- countSelected(nodes: AXTreeViewNode[]): number;
769
+ countSelected(nodes: AXTreeViewNode[], selectedField?: string, childrenField?: string): number;
470
770
  /**
471
771
  * Recursively collect selected nodes
472
772
  */
473
- collectSelected(nodes: AXTreeViewNode[], result: AXTreeViewNode[]): void;
773
+ collectSelected(nodes: AXTreeViewNode[], result: AXTreeViewNode[], selectedField?: string, childrenField?: string): void;
474
774
  /**
475
775
  * Recursively remove selected nodes
476
776
  */
477
- removeSelected(nodes: AXTreeViewNode[]): void;
777
+ removeSelected(nodes: AXTreeViewNode[], selectedField?: string, indeterminateField?: string, childrenField?: string): void;
478
778
  /**
479
779
  * Recursively update all parent states in the tree (used after deletion)
480
780
  */
481
- updateAllParentStates(nodes: AXTreeViewNode[], intermediateState: boolean): void;
781
+ updateAllParentStates(nodes: AXTreeViewNode[], intermediateState: boolean, childrenField?: string, selectedField?: string, indeterminateField?: string): void;
482
782
  /**
483
783
  * Recursively set expanded state (with lazy loading)
484
784
  */
485
- setExpandedState(nodes: AXTreeViewNode[], expanded: boolean, isLazyDataSource: boolean, loadNodeChildren: (node: AXTreeViewNode) => Promise<void>): Promise<void>;
785
+ setExpandedState(nodes: AXTreeViewNode[], expanded: boolean, isLazyDataSource: boolean, loadNodeChildren: (node: AXTreeViewNode) => Promise<void>, expandedField?: string, childrenField?: string, childrenCountField?: string): Promise<void>;
486
786
  /**
487
787
  * Get array reference by drop list ID
488
788
  */
489
- getArrayByListId(nodes: AXTreeViewNode[], listId: string): AXTreeViewNode[] | null;
789
+ getArrayByListId(nodes: AXTreeViewNode[], listId: string, idField?: string, childrenField?: string): AXTreeViewNode[] | null;
490
790
  /**
491
791
  * Find parent node by list ID
492
792
  */
493
- findParentByListId(nodes: AXTreeViewNode[], listId: string): AXTreeViewNode | undefined;
793
+ findParentByListId(nodes: AXTreeViewNode[], listId: string, idField?: string): AXTreeViewNode | undefined;
494
794
  /**
495
795
  * Generate unique list ID for each node
496
796
  */
497
- getListId(node?: AXTreeViewNode): string;
797
+ getListId(node: AXTreeViewNode | undefined, idField?: string): string;
498
798
  /**
499
799
  * Get root list ID constant
500
800
  */
@@ -507,9 +807,36 @@ declare class AXTreeViewService {
507
807
  * Get list prefix constant
508
808
  */
509
809
  getListPrefix(): string;
810
+ /**
811
+ * Get all nodes in a flat array
812
+ */
813
+ getAllNodes(nodes: AXTreeViewNode[], childrenField?: string): AXTreeViewNode[];
814
+ /**
815
+ * Get the path to a node (array of parent nodes from root to node)
816
+ */
817
+ getNodePath(nodes: AXTreeViewNode[], nodeId: string): AXTreeViewNode[];
818
+ /**
819
+ * Get the level/depth of a node (0 = root level)
820
+ */
821
+ getNodeLevel(nodes: AXTreeViewNode[], nodeId: string): number;
822
+ /**
823
+ * Get sibling nodes of a given node
824
+ */
825
+ getSiblings(nodes: AXTreeViewNode[], nodeId: string, idField?: string, childrenField?: string): AXTreeViewNode[];
826
+ /**
827
+ * Clone a node (creates a deep copy)
828
+ */
829
+ cloneNode(node: AXTreeViewNode, idField?: string, titleField?: string, tooltipField?: string, iconField?: string, expandedField?: string, selectedField?: string, indeterminateField?: string, disabledField?: string, hiddenField?: string, childrenCountField?: string, dataField?: string, childrenField?: string): AXTreeViewNode;
830
+ /**
831
+ * Validate node structure (check for required fields and circular references)
832
+ */
833
+ validateNode(node: AXTreeViewNode, visitedIds?: Set<string>, idField?: string, titleField?: string, childrenField?: string, childrenCountField?: string): {
834
+ valid: boolean;
835
+ errors: string[];
836
+ };
510
837
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXTreeViewService, never>;
511
838
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXTreeViewService>;
512
839
  }
513
840
 
514
841
  export { AXTreeViewComponent, AXTreeViewModule, AXTreeViewService };
515
- export type { AXTreeViewBeforeDropEvent, AXTreeViewCallback, AXTreeViewChildrenSelectionState, AXTreeViewDataSource, AXTreeViewDragMode, AXTreeViewDragOperationType, AXTreeViewDropEvent, AXTreeViewFlatNode, AXTreeViewItemTemplateContext, AXTreeViewNode, AXTreeViewNodeSelectEvent, AXTreeViewNodeToggleEvent, AXTreeViewSelectMode, AXTreeViewViewLook };
842
+ export type { AXTreeViewBeforeDropEvent, AXTreeViewCallback, AXTreeViewChildrenSelectionState, AXTreeViewDataSource, AXTreeViewDragMode, AXTreeViewDragOperationType, AXTreeViewDropEvent, AXTreeViewFlatNode, AXTreeViewItemTemplateContext, AXTreeViewNode, AXTreeViewNodeSelectEvent, AXTreeViewNodeToggleEvent, AXTreeViewSelectMode, AXTreeViewSelectionBehavior, AXTreeViewSelectionChangeEvent, AXTreeViewViewLook };