@acorex/components 20.2.48 → 20.2.50

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.
@@ -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;
@@ -100,9 +117,39 @@ interface AXTreeViewItemTemplateContext {
100
117
  loading: boolean;
101
118
  }
102
119
  type AXTreeViewViewLook = 'default' | 'card' | 'with-line';
103
- type AXTreeViewDragMode = 'none' | 'handler' | 'item';
104
- type AXTreeViewDragOperationType = 'order-only' | 'move' | 'both';
105
- type AXTreeViewSelectMode = 'single' | 'multiple';
120
+ type AXTreeViewDragArea = 'handler' | 'item';
121
+ type AXTreeViewDragBehavior = 'none' | 'order-only' | 'move' | 'both';
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
  */
@@ -134,42 +181,62 @@ declare class AXTreeViewComponent {
134
181
  private readonly destroyRef;
135
182
  /** Tree data source - can be static array or lazy loading function */
136
183
  readonly datasource: _angular_core.ModelSignal<AXTreeViewDataSource>;
137
- /** Selection mode: 'single' (click to select) or 'multiple' (checkbox selection) */
184
+ /** Selection mode: 'single' (click to select) or 'multiple' (checkbox selection). Default: `'single'` */
138
185
  readonly selectMode: _angular_core.InputSignal<AXTreeViewSelectMode>;
139
- /** Whether to show checkboxes for selection (only applies to multiple mode) */
186
+ /** Whether to show checkboxes for selection (only applies to multiple mode). Default: `false`. When false and selectMode is not 'none', clicking on a node toggles its selection. */
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>;
145
- /** When true, clicking on a node toggles its selection (works for both single and multiple modes) */
146
- readonly checkOnClick: _angular_core.InputSignal<boolean>;
147
- /** Drag and drop mode: 'none' (disabled), 'handler' (drag handle), 'item' (entire item) */
148
- readonly dragMode: _angular_core.InputSignal<AXTreeViewDragMode>;
149
- /** Drag operation type: 'order-only' (reorder only), 'move' (move between parents), 'both' (allow both) */
150
- readonly dragOperationType: _angular_core.InputSignal<AXTreeViewDragOperationType>;
151
- /** Whether to show icons */
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). Default: `'intermediate'` */
189
+ readonly selectionBehavior: _angular_core.InputSignal<AXTreeViewSelectionBehavior>;
190
+ /** Drag area: 'handler' (drag handle), 'item' (entire item). Default: `'handler'` */
191
+ readonly dragArea: _angular_core.InputSignal<AXTreeViewDragArea>;
192
+ /** Drag behavior: 'none' (disabled), 'order-only' (reorder only), 'move' (move between parents), 'both' (allow both). Default: `'none'` */
193
+ readonly dragBehavior: _angular_core.InputSignal<AXTreeViewDragBehavior>;
194
+ /** Whether to show icons. Default: `true` */
152
195
  readonly showIcons: _angular_core.InputSignal<boolean>;
153
- /** Whether to show children count badge */
196
+ /** Whether to show children count badge. Default: `true` */
154
197
  readonly showChildrenBadge: _angular_core.InputSignal<boolean>;
155
- /** Custom icon for expanded nodes */
198
+ /** Custom icon for expanded nodes. Default: `'fa-solid fa-chevron-down'` */
156
199
  readonly expandedIcon: _angular_core.InputSignal<string>;
157
- /** Custom icon for collapsed nodes */
200
+ /** Custom icon for collapsed nodes. Default: `'fa-solid fa-chevron-right'` */
158
201
  readonly collapsedIcon: _angular_core.InputSignal<string>;
159
- /** Indent size in pixels for each level */
202
+ /** Indent size in pixels for each level. Default: `16` */
160
203
  readonly indentSize: _angular_core.InputSignal<number>;
161
- /** Node height in pixels */
162
- readonly nodeHeight: _angular_core.InputSignal<"compact" | "normal" | "comfortable">;
163
- /** Visual style variant */
204
+ /** Visual style variant. Default: `'default'` */
164
205
  readonly look: _angular_core.InputSignal<AXTreeViewViewLook>;
165
- /** Custom template for tree items */
166
- readonly itemTemplate: _angular_core.InputSignal<TemplateRef<AXTreeViewItemTemplateContext>>;
206
+ /** Custom template for tree items. Default: `undefined` */
207
+ readonly nodeTemplate: _angular_core.InputSignal<TemplateRef<AXTreeViewItemTemplateContext>>;
208
+ /** Field name for node ID. Default: `'id'` */
209
+ readonly idField: _angular_core.InputSignal<string>;
210
+ /** Field name for node title. Default: `'title'` */
211
+ readonly titleField: _angular_core.InputSignal<string>;
212
+ /** Field name for node tooltip. Default: `'tooltip'` */
213
+ readonly tooltipField: _angular_core.InputSignal<string>;
214
+ /** Field name for node icon. Default: `'icon'` */
215
+ readonly iconField: _angular_core.InputSignal<string>;
216
+ /** Field name for expanded state. Default: `'expanded'` */
217
+ readonly expandedField: _angular_core.InputSignal<string>;
218
+ /** Field name for selected state. Default: `'selected'` */
219
+ readonly selectedField: _angular_core.InputSignal<string>;
220
+ /** Field name for indeterminate state. Default: `'indeterminate'` */
221
+ readonly indeterminateField: _angular_core.InputSignal<string>;
222
+ /** Field name for disabled state. Default: `'disabled'` */
223
+ readonly disabledField: _angular_core.InputSignal<string>;
224
+ /** Field name for hidden state. Default: `'hidden'` */
225
+ readonly hiddenField: _angular_core.InputSignal<string>;
226
+ /** Field name for children array. Default: `'children'` */
227
+ readonly childrenField: _angular_core.InputSignal<string>;
228
+ /** Field name for children count. Default: `'childrenCount'` */
229
+ readonly childrenCountField: _angular_core.InputSignal<string>;
230
+ /** Field name for custom data. Default: `'data'` */
231
+ readonly dataField: _angular_core.InputSignal<string>;
167
232
  /** Emitted before a drop operation - set canceled to true to prevent drop */
168
233
  readonly onBeforeDrop: _angular_core.OutputEmitterRef<AXTreeViewBeforeDropEvent>;
169
234
  /** Emitted when a node is toggled (expanded/collapsed) */
170
235
  readonly onNodeToggle: _angular_core.OutputEmitterRef<AXTreeViewNodeToggleEvent>;
171
236
  /** Emitted when a node is selected/deselected */
172
237
  readonly onNodeSelect: _angular_core.OutputEmitterRef<AXTreeViewNodeSelectEvent>;
238
+ /** Emitted when selection changes - returns all currently selected nodes */
239
+ readonly onSelectionChange: _angular_core.OutputEmitterRef<AXTreeViewSelectionChangeEvent>;
173
240
  /** Emitted when nodes are reordered within the same parent */
174
241
  readonly onOrderChange: _angular_core.OutputEmitterRef<AXTreeViewDropEvent>;
175
242
  /** Emitted when a node is moved to a different parent */
@@ -191,6 +258,84 @@ declare class AXTreeViewComponent {
191
258
  private isUpdatingFromDatasource;
192
259
  /** Computed to check if datasource is a function */
193
260
  private readonly isLazyDataSource;
261
+ /** Computed: Returns true when selection is restricted to leaf nodes only */
262
+ protected readonly isLeafOnlyMode: _angular_core.Signal<boolean>;
263
+ /** Computed: Returns true when selecting a parent automatically selects all its children */
264
+ protected readonly cascadesToChildren: _angular_core.Signal<boolean>;
265
+ /** Computed: Returns true when parent nodes show indeterminate state based on children selection */
266
+ protected readonly hasIntermediateState: _angular_core.Signal<boolean>;
267
+ /**
268
+ * Get a property value from a node using the configured field name
269
+ */
270
+ protected getNodeProp<T = unknown>(node: AXTreeViewNode, fieldName: string, defaultValue?: T): T;
271
+ /**
272
+ * Set a property value on a node using the configured field name
273
+ */
274
+ protected setNodeProp(node: AXTreeViewNode, fieldName: string, value: unknown): void;
275
+ /**
276
+ * Get node ID
277
+ */
278
+ protected getNodeId(node: AXTreeViewNode): string;
279
+ /**
280
+ * Get node title
281
+ */
282
+ protected getNodeTitle(node: AXTreeViewNode): string;
283
+ /**
284
+ * Get node tooltip
285
+ */
286
+ protected getNodeTooltip(node: AXTreeViewNode): string | undefined;
287
+ /**
288
+ * Get node icon
289
+ */
290
+ protected getNodeIcon(node: AXTreeViewNode): string | undefined;
291
+ /**
292
+ * Get node expanded state
293
+ */
294
+ protected getNodeExpanded(node: AXTreeViewNode): boolean;
295
+ /**
296
+ * Set node expanded state
297
+ */
298
+ protected setNodeExpanded(node: AXTreeViewNode, value: boolean): void;
299
+ /**
300
+ * Get node selected state
301
+ */
302
+ protected getNodeSelected(node: AXTreeViewNode): boolean;
303
+ /**
304
+ * Set node selected state
305
+ */
306
+ protected setNodeSelected(node: AXTreeViewNode, value: boolean): void;
307
+ /**
308
+ * Get node indeterminate state
309
+ */
310
+ protected getNodeIndeterminate(node: AXTreeViewNode): boolean;
311
+ /**
312
+ * Set node indeterminate state
313
+ */
314
+ protected setNodeIndeterminate(node: AXTreeViewNode, value: boolean): void;
315
+ /**
316
+ * Get node disabled state
317
+ */
318
+ protected getNodeDisabled(node: AXTreeViewNode): boolean;
319
+ /**
320
+ * Get node hidden state
321
+ */
322
+ protected getNodeHidden(node: AXTreeViewNode): boolean;
323
+ /**
324
+ * Get node children array
325
+ */
326
+ protected getNodeChildren(node: AXTreeViewNode): AXTreeViewNode[] | undefined;
327
+ /**
328
+ * Set node children array
329
+ */
330
+ protected setNodeChildren(node: AXTreeViewNode, value: AXTreeViewNode[] | undefined): void;
331
+ /**
332
+ * Get node children count
333
+ */
334
+ protected getNodeChildrenCount(node: AXTreeViewNode): number | undefined;
335
+ /**
336
+ * Set node children count
337
+ */
338
+ protected setNodeChildrenCount(node: AXTreeViewNode, value: number | undefined): void;
194
339
  /**
195
340
  * Expand all nodes in the tree (with lazy loading support)
196
341
  */
@@ -235,6 +380,142 @@ declare class AXTreeViewComponent {
235
380
  * Check if a node is currently loading
236
381
  */
237
382
  isNodeLoading(nodeId: string): boolean;
383
+ /**
384
+ * Get loading state for a node (internal state)
385
+ */
386
+ getNodeLoading(node: AXTreeViewNode): boolean;
387
+ /**
388
+ * Edit/update a node's properties
389
+ * @param nodeId - The ID of the node to edit
390
+ * @param updates - Partial node object with properties to update
391
+ * @returns true if node was found and updated, false otherwise
392
+ */
393
+ editNode(nodeId: string, updates: Partial<AXTreeViewNode>): boolean;
394
+ /**
395
+ * Add a child node to a parent node
396
+ * @param parentId - The ID of the parent node
397
+ * @param childNode - The child node to add
398
+ * @param index - Optional index to insert at (default: append to end)
399
+ * @returns true if parent was found and child was added, false otherwise
400
+ */
401
+ addChild(parentId: string, childNode: AXTreeViewNode, index?: number): boolean;
402
+ /**
403
+ * Remove a node from the tree
404
+ * @param nodeId - The ID of the node to remove
405
+ * @returns The removed node if found, null otherwise
406
+ */
407
+ removeNode(nodeId: string): AXTreeViewNode | null;
408
+ /**
409
+ * Expand a specific node
410
+ * @param nodeId - The ID of the node to expand
411
+ * @returns Promise that resolves when expansion is complete (if lazy loading)
412
+ */
413
+ expandNode(nodeId: string): Promise<void>;
414
+ /**
415
+ * Collapse a specific node
416
+ * @param nodeId - The ID of the node to collapse
417
+ */
418
+ collapseNode(nodeId: string): void;
419
+ /**
420
+ * Toggle expansion state of a specific node
421
+ * @param nodeId - The ID of the node to toggle
422
+ * @returns Promise that resolves when toggle is complete (if lazy loading)
423
+ */
424
+ toggleNodeExpansion(nodeId: string): Promise<void>;
425
+ /**
426
+ * Programmatically select a node
427
+ * @param nodeId - The ID of the node to select
428
+ * @returns true if node was found and selected, false otherwise
429
+ */
430
+ selectNode(nodeId: string): boolean;
431
+ /**
432
+ * Programmatically deselect a node
433
+ * @param nodeId - The ID of the node to deselect
434
+ * @returns true if node was found and deselected, false otherwise
435
+ */
436
+ deselectNode(nodeId: string): boolean;
437
+ /**
438
+ * Get parent node of a given node
439
+ * @param nodeId - The ID of the node
440
+ * @returns The parent node if found, null otherwise
441
+ */
442
+ getParent(nodeId: string): AXTreeViewNode | null;
443
+ /**
444
+ * Get children of a node
445
+ * @param nodeId - The ID of the parent node
446
+ * @returns Array of child nodes, or null if node not found
447
+ */
448
+ getChildren(nodeId: string): AXTreeViewNode[] | null;
449
+ /**
450
+ * Get all root nodes
451
+ * @returns Array of root nodes
452
+ */
453
+ getRootNodes(): AXTreeViewNode[];
454
+ /**
455
+ * Get all nodes in a flat array
456
+ * @returns Array of all nodes in the tree
457
+ */
458
+ getAllNodes(): AXTreeViewNode[];
459
+ /**
460
+ * Get the path to a node (array of parent IDs from root to node)
461
+ * @param nodeId - The ID of the node
462
+ * @returns Array of node IDs representing the path, or empty array if node not found
463
+ */
464
+ getNodePath(nodeId: string): string[];
465
+ /**
466
+ * Get the level/depth of a node (0 = root level)
467
+ * @param nodeId - The ID of the node
468
+ * @returns The level of the node, or -1 if node not found
469
+ */
470
+ getNodeLevel(nodeId: string): number;
471
+ /**
472
+ * Programmatically move a node to a new parent
473
+ * @param nodeId - The ID of the node to move
474
+ * @param newParentId - The ID of the new parent (undefined for root level)
475
+ * @param index - Optional index to insert at (default: append to end)
476
+ * @returns true if move was successful, false otherwise
477
+ */
478
+ moveNode(nodeId: string, newParentId?: string, index?: number): boolean;
479
+ /**
480
+ * Clone a node (creates a deep copy)
481
+ * @param nodeId - The ID of the node to clone
482
+ * @returns The cloned node, or null if node not found
483
+ */
484
+ cloneNode(nodeId: string): AXTreeViewNode | null;
485
+ /**
486
+ * Focus a specific node by ID
487
+ * @param nodeId - The ID of the node to focus
488
+ * @returns true if node was found and focused, false otherwise
489
+ */
490
+ focusNode(nodeId: string): boolean;
491
+ /**
492
+ * Get all expanded nodes
493
+ * @returns Array of expanded nodes
494
+ */
495
+ getExpandedNodes(): AXTreeViewNode[];
496
+ /**
497
+ * Get all collapsed nodes that have children
498
+ * @returns Array of collapsed nodes with children
499
+ */
500
+ getCollapsedNodes(): AXTreeViewNode[];
501
+ /**
502
+ * Check if a node is expanded
503
+ * @param nodeId - The ID of the node
504
+ * @returns true if node is expanded, false otherwise
505
+ */
506
+ isNodeExpanded(nodeId: string): boolean;
507
+ /**
508
+ * Check if a node is selected
509
+ * @param nodeId - The ID of the node
510
+ * @returns true if node is selected, false otherwise
511
+ */
512
+ isNodeSelected(nodeId: string): boolean;
513
+ /**
514
+ * Check if a node has children
515
+ * @param nodeId - The ID of the node
516
+ * @returns true if node has children, false otherwise
517
+ */
518
+ hasChildren(nodeId: string): boolean;
238
519
  /**
239
520
  * Get template context for a node
240
521
  */
@@ -251,6 +532,19 @@ declare class AXTreeViewComponent {
251
532
  * Check if checkboxes should be shown (only for multiple mode)
252
533
  */
253
534
  shouldShowCheckbox(): boolean;
535
+ /**
536
+ * Check if a node is a leaf (has no children)
537
+ * A node is a leaf if it has no loaded children AND no childrenCount (or childrenCount is 0)
538
+ */
539
+ isLeafNode(node: AXTreeViewNode): boolean;
540
+ /**
541
+ * Check if a node can be selected (considering selectMode and isLeafOnlyMode)
542
+ */
543
+ canSelectNode(node: AXTreeViewNode): boolean;
544
+ /**
545
+ * Check if checkbox should be shown for a specific node
546
+ */
547
+ shouldShowCheckboxForNode(node: AXTreeViewNode): boolean;
254
548
  /**
255
549
  * Generate unique list ID for each node
256
550
  */
@@ -272,7 +566,11 @@ declare class AXTreeViewComponent {
272
566
  */
273
567
  getNodeAriaSelected(node: AXTreeViewNode): string | null;
274
568
  /**
275
- * Handle node click - for single selection mode or multiple mode with checkOnClick enabled
569
+ * Emit selection change event with all selected nodes
570
+ */
571
+ private emitSelectionChange;
572
+ /**
573
+ * Handle node click - for single selection mode or multiple mode when showCheckbox is false
276
574
  */
277
575
  onNodeClick(node: AXTreeViewNode, event: Event): void;
278
576
  /**
@@ -317,14 +615,20 @@ declare class AXTreeViewComponent {
317
615
  private loadNodeChildren;
318
616
  /**
319
617
  * Internal method to refresh nodes signal and sync back to datasource if it's an array
618
+ * Creates new array references for all nested children to ensure reactivity
320
619
  */
321
620
  private refreshNodes;
621
+ /**
622
+ * Recursively ensure all children arrays have new references to trigger change detection
623
+ * Mutates the tree structure by replacing children arrays with new array references
624
+ */
625
+ private ensureNewArrayReferences;
322
626
  /**
323
627
  * Handle single selection mode
324
628
  */
325
629
  private handleSingleSelection;
326
630
  /**
327
- * Handle multiple selection mode with checkOnClick
631
+ * Handle multiple selection mode when showCheckbox is false (click to toggle)
328
632
  */
329
633
  private handleMultipleSelection;
330
634
  /**
@@ -336,11 +640,11 @@ declare class AXTreeViewComponent {
336
640
  */
337
641
  private findParentByListId;
338
642
  /**
339
- * Check if move operation is allowed based on dragOperationType
643
+ * Check if move operation is allowed based on dragBehavior
340
644
  */
341
645
  private canMoveToParent;
342
646
  /**
343
- * Check if reorder operation is allowed based on dragOperationType
647
+ * Check if reorder operation is allowed based on dragBehavior
344
648
  */
345
649
  private canReorder;
346
650
  /**
@@ -372,10 +676,14 @@ declare class AXTreeViewComponent {
372
676
  private handleNavigationKey;
373
677
  /**
374
678
  * Handle Space key selection
679
+ * In single mode: replaces selection (deselects all, selects this node)
680
+ * In multiple mode: toggles selection
375
681
  */
376
682
  private handleSpaceKeySelection;
377
683
  /**
378
684
  * Handle Enter key selection
685
+ * In single mode: replaces selection (deselects all, selects this node)
686
+ * In multiple mode: replaces selection (deselects all, selects this node and respects selectionBehavior)
379
687
  */
380
688
  private handleEnterKeySelection;
381
689
  /**
@@ -391,7 +699,7 @@ declare class AXTreeViewComponent {
391
699
  */
392
700
  private handleError;
393
701
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXTreeViewComponent, never>;
394
- 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>;
702
+ 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; }; "dragArea": { "alias": "dragArea"; "required": false; "isSignal": true; }; "dragBehavior": { "alias": "dragBehavior"; "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>;
395
703
  }
396
704
 
397
705
  declare class AXTreeViewModule {
@@ -411,16 +719,16 @@ declare class AXTreeViewService {
411
719
  /**
412
720
  * Find a node by ID in the tree
413
721
  */
414
- findNodeById(nodes: AXTreeViewNode[], id: string): AXTreeViewNode | null;
722
+ findNodeById(nodes: AXTreeViewNode[], id: string, idField?: string): AXTreeViewNode | null;
415
723
  /**
416
724
  * Find parent node of a given node
417
725
  */
418
- findParentNode(nodes: AXTreeViewNode[], targetNode: AXTreeViewNode): AXTreeViewNode | undefined;
726
+ findParentNode(nodes: AXTreeViewNode[], targetNode: AXTreeViewNode, idField?: string, childrenField?: string): AXTreeViewNode | undefined;
419
727
  /**
420
728
  * Check if targetNode is a descendant of ancestorNode (or the same node)
421
729
  * Prevents circular references by checking if target exists in ancestor's children tree
422
730
  */
423
- isValidDropTarget(movedNode: AXTreeViewNode, targetNode: AXTreeViewNode): boolean;
731
+ isValidDropTarget(movedNode: AXTreeViewNode, targetNode: AXTreeViewNode, idField?: string, childrenField?: string): boolean;
424
732
  /**
425
733
  * Check if targetNode is a descendant of ancestorNode
426
734
  */
@@ -428,67 +736,67 @@ declare class AXTreeViewService {
428
736
  /**
429
737
  * Build a flat list of all visible focusable nodes
430
738
  */
431
- buildFlatNodeList(nodes: AXTreeViewNode[]): AXTreeViewFlatNode[];
739
+ buildFlatNodeList(nodes: AXTreeViewNode[], hiddenField?: string, disabledField?: string, expandedField?: string, childrenField?: string): AXTreeViewFlatNode[];
432
740
  /**
433
741
  * Check if node has children
434
742
  */
435
- hasChildren(node: AXTreeViewNode): boolean;
743
+ hasChildren(node: AXTreeViewNode, childrenField?: string): boolean;
436
744
  /**
437
745
  * Check if node can be lazy loaded
438
746
  */
439
- canLazyLoad(node: AXTreeViewNode, isLazyDataSource: boolean): boolean;
747
+ canLazyLoad(node: AXTreeViewNode, isLazyDataSource: boolean, childrenCountField?: string, childrenField?: string): boolean;
440
748
  /**
441
749
  * Recursively select/deselect all children
442
750
  */
443
- selectAllChildren(children: AXTreeViewNode[], selected: boolean): void;
751
+ selectAllChildren(children: AXTreeViewNode[], selected: boolean, selectedField?: string, indeterminateField?: string, childrenField?: string): void;
444
752
  /**
445
753
  * Get selection state of children
446
754
  */
447
- getChildrenSelectionState(children: AXTreeViewNode[]): AXTreeViewChildrenSelectionState;
755
+ getChildrenSelectionState(children: AXTreeViewNode[], selectedField?: string, indeterminateField?: string): AXTreeViewChildrenSelectionState;
448
756
  /**
449
757
  * Update parent node states based on children selection (with intermediate state support)
450
758
  */
451
- updateParentStates(nodes: AXTreeViewNode[], changedNode: AXTreeViewNode, intermediateState: boolean): void;
759
+ updateParentStates(nodes: AXTreeViewNode[], changedNode: AXTreeViewNode, intermediateState: boolean, idField?: string, childrenField?: string, selectedField?: string, indeterminateField?: string): void;
452
760
  /**
453
761
  * Recursively deselect all nodes
454
762
  */
455
- deselectAllNodes(nodes: AXTreeViewNode[]): void;
763
+ deselectAllNodes(nodes: AXTreeViewNode[], selectedField?: string, indeterminateField?: string, childrenField?: string): void;
456
764
  /**
457
765
  * Recursively set selection state for all nodes
458
766
  */
459
- setAllSelection(nodes: AXTreeViewNode[], selected: boolean): void;
767
+ setAllSelection(nodes: AXTreeViewNode[], selected: boolean, selectedField?: string, indeterminateField?: string, childrenField?: string): void;
460
768
  /**
461
769
  * Recursively count selected nodes
462
770
  */
463
- countSelected(nodes: AXTreeViewNode[]): number;
771
+ countSelected(nodes: AXTreeViewNode[], selectedField?: string, childrenField?: string): number;
464
772
  /**
465
773
  * Recursively collect selected nodes
466
774
  */
467
- collectSelected(nodes: AXTreeViewNode[], result: AXTreeViewNode[]): void;
775
+ collectSelected(nodes: AXTreeViewNode[], result: AXTreeViewNode[], selectedField?: string, childrenField?: string): void;
468
776
  /**
469
777
  * Recursively remove selected nodes
470
778
  */
471
- removeSelected(nodes: AXTreeViewNode[]): void;
779
+ removeSelected(nodes: AXTreeViewNode[], selectedField?: string, indeterminateField?: string, childrenField?: string): void;
472
780
  /**
473
781
  * Recursively update all parent states in the tree (used after deletion)
474
782
  */
475
- updateAllParentStates(nodes: AXTreeViewNode[], intermediateState: boolean): void;
783
+ updateAllParentStates(nodes: AXTreeViewNode[], intermediateState: boolean, childrenField?: string, selectedField?: string, indeterminateField?: string): void;
476
784
  /**
477
785
  * Recursively set expanded state (with lazy loading)
478
786
  */
479
- setExpandedState(nodes: AXTreeViewNode[], expanded: boolean, isLazyDataSource: boolean, loadNodeChildren: (node: AXTreeViewNode) => Promise<void>): Promise<void>;
787
+ setExpandedState(nodes: AXTreeViewNode[], expanded: boolean, isLazyDataSource: boolean, loadNodeChildren: (node: AXTreeViewNode) => Promise<void>, expandedField?: string, childrenField?: string, childrenCountField?: string): Promise<void>;
480
788
  /**
481
789
  * Get array reference by drop list ID
482
790
  */
483
- getArrayByListId(nodes: AXTreeViewNode[], listId: string): AXTreeViewNode[] | null;
791
+ getArrayByListId(nodes: AXTreeViewNode[], listId: string, idField?: string, childrenField?: string): AXTreeViewNode[] | null;
484
792
  /**
485
793
  * Find parent node by list ID
486
794
  */
487
- findParentByListId(nodes: AXTreeViewNode[], listId: string): AXTreeViewNode | undefined;
795
+ findParentByListId(nodes: AXTreeViewNode[], listId: string, idField?: string): AXTreeViewNode | undefined;
488
796
  /**
489
797
  * Generate unique list ID for each node
490
798
  */
491
- getListId(node?: AXTreeViewNode): string;
799
+ getListId(node: AXTreeViewNode | undefined, idField?: string): string;
492
800
  /**
493
801
  * Get root list ID constant
494
802
  */
@@ -501,9 +809,90 @@ declare class AXTreeViewService {
501
809
  * Get list prefix constant
502
810
  */
503
811
  getListPrefix(): string;
812
+ /**
813
+ * Get all nodes in a flat array
814
+ */
815
+ getAllNodes(nodes: AXTreeViewNode[], childrenField?: string): AXTreeViewNode[];
816
+ /**
817
+ * Get the path to a node (array of parent nodes from root to node)
818
+ */
819
+ getNodePath(nodes: AXTreeViewNode[], nodeId: string, idField?: string, childrenField?: string): AXTreeViewNode[];
820
+ /**
821
+ * Get the level/depth of a node (0 = root level)
822
+ */
823
+ getNodeLevel(nodes: AXTreeViewNode[], nodeId: string, idField?: string, childrenField?: string): number;
824
+ /**
825
+ * Get sibling nodes of a given node
826
+ */
827
+ getSiblings(nodes: AXTreeViewNode[], nodeId: string, idField?: string, childrenField?: string): AXTreeViewNode[];
828
+ /**
829
+ * Clone a node (creates a deep copy)
830
+ */
831
+ 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;
832
+ /**
833
+ * Move a node to a new parent in the tree
834
+ * @param nodes - Root nodes array
835
+ * @param nodeId - The ID of the node to move
836
+ * @param newParentId - The ID of the new parent (undefined for root level)
837
+ * @param index - Optional index to insert at (default: append to end)
838
+ * @param idField - Field name for node ID
839
+ * @param childrenField - Field name for children array
840
+ * @param childrenCountField - Field name for children count
841
+ * @param expandedField - Field name for expanded state
842
+ * @returns Object with success status, moved node, previous parent, new parent, and indices
843
+ */
844
+ moveNode(nodes: AXTreeViewNode[], nodeId: string, newParentId: string | undefined, index: number | undefined, idField?: string, childrenField?: string, childrenCountField?: string, expandedField?: string): {
845
+ success: boolean;
846
+ movedNode?: AXTreeViewNode;
847
+ previousParent?: AXTreeViewNode;
848
+ newParent?: AXTreeViewNode;
849
+ previousIndex: number;
850
+ currentIndex: number;
851
+ };
852
+ /**
853
+ * Edit/update a node's properties
854
+ * @param nodes - Root nodes array
855
+ * @param nodeId - The ID of the node to edit
856
+ * @param updates - Partial node object with properties to update
857
+ * @param idField - Field name for node ID
858
+ * @param childrenField - Field name for children array
859
+ * @param childrenCountField - Field name for children count
860
+ * @returns The updated node if found, null otherwise
861
+ */
862
+ editNode(nodes: AXTreeViewNode[], nodeId: string, updates: Partial<AXTreeViewNode>, idField?: string, childrenField?: string, childrenCountField?: string): AXTreeViewNode | null;
863
+ /**
864
+ * Add a child node to a parent node
865
+ * @param nodes - Root nodes array
866
+ * @param parentId - The ID of the parent node
867
+ * @param childNode - The child node to add
868
+ * @param index - Optional index to insert at (default: append to end)
869
+ * @param idField - Field name for node ID
870
+ * @param childrenField - Field name for children array
871
+ * @param childrenCountField - Field name for children count
872
+ * @param expandedField - Field name for expanded state
873
+ * @returns The parent node if found and child was added, null otherwise
874
+ */
875
+ addChild(nodes: AXTreeViewNode[], parentId: string, childNode: AXTreeViewNode, index: number | undefined, idField?: string, childrenField?: string, childrenCountField?: string, expandedField?: string): AXTreeViewNode | null;
876
+ /**
877
+ * Remove a node from the tree
878
+ * @param nodes - Root nodes array
879
+ * @param nodeId - The ID of the node to remove
880
+ * @param idField - Field name for node ID
881
+ * @param childrenField - Field name for children array
882
+ * @param childrenCountField - Field name for children count
883
+ * @returns The removed node if found, null otherwise
884
+ */
885
+ removeNode(nodes: AXTreeViewNode[], nodeId: string, idField?: string, childrenField?: string, childrenCountField?: string): AXTreeViewNode | null;
886
+ /**
887
+ * Validate node structure (check for required fields and circular references)
888
+ */
889
+ validateNode(node: AXTreeViewNode, visitedIds?: Set<string>, idField?: string, titleField?: string, childrenField?: string, childrenCountField?: string): {
890
+ valid: boolean;
891
+ errors: string[];
892
+ };
504
893
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXTreeViewService, never>;
505
894
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXTreeViewService>;
506
895
  }
507
896
 
508
897
  export { AXTreeViewComponent, AXTreeViewModule, AXTreeViewService };
509
- export type { AXTreeViewBeforeDropEvent, AXTreeViewCallback, AXTreeViewChildrenSelectionState, AXTreeViewDataSource, AXTreeViewDragMode, AXTreeViewDragOperationType, AXTreeViewDropEvent, AXTreeViewFlatNode, AXTreeViewItemTemplateContext, AXTreeViewNode, AXTreeViewNodeSelectEvent, AXTreeViewNodeToggleEvent, AXTreeViewSelectMode, AXTreeViewViewLook };
898
+ export type { AXTreeViewBeforeDropEvent, AXTreeViewCallback, AXTreeViewChildrenSelectionState, AXTreeViewDataSource, AXTreeViewDragArea, AXTreeViewDragBehavior, AXTreeViewDropEvent, AXTreeViewFlatNode, AXTreeViewItemTemplateContext, AXTreeViewNode, AXTreeViewNodeSelectEvent, AXTreeViewNodeToggleEvent, AXTreeViewSelectMode, AXTreeViewSelectionBehavior, AXTreeViewSelectionChangeEvent, AXTreeViewViewLook };