@ngstarter-ui/components 21.0.26 → 21.0.27

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.
@@ -10009,6 +10009,7 @@
10009
10009
  "Selectable tree",
10010
10010
  "Checkable tree",
10011
10011
  "Draggable tree",
10012
+ "Searchable tree",
10012
10013
  "Tree with dynamic data"
10013
10014
  ],
10014
10015
  "minimalExample": "<ngs-tree #tree [dataSource]=\"dataSource\" [childrenAccessor]=\"childrenAccessor\">\n <!-- This is the tree node template for leaf nodes -->\n <ngs-tree-node *ngsTreeNodeDef=\"let node\" ngsTreeNodePadding>\n <!-- use a disabled button to provide padding for tree leaf -->\n <button ngsIconButton disabled></button>\n {{node.name}}\n </ngs-tree-node>\n <!-- This is the tree node template for expandable nodes -->\n <ngs-tree-node *ngsTreeNodeDef=\"let node;when: hasChild\"\n ngsTreeNodePadding\n [cdkTreeNodeTypeaheadLabel]=\"node.name\">\n <button ngsIconButton ngsTreeNodeToggle [attr.aria-label]=\"'Toggle ' + node.name\">\n @if (tree.isExpanded(node)) {\n <ngs-icon name=\"fluent:chevron-down-24-regular\" class=\"size-4\"/>\n } @else {\n <ngs-icon name=\"fluent:chevron-right-24-regular\" class=\"size-4\"/>\n }\n </button>\n {{node.name}}\n </ngs-tree-node>\n</ngs-tree>",
@@ -10045,6 +10046,8 @@
10045
10046
  "exportedSymbols": [
10046
10047
  "NestedTreeNode",
10047
10048
  "Tree",
10049
+ "TreeFilterMode",
10050
+ "TreeFilterPredicate",
10048
10051
  "TreeNode",
10049
10052
  "TreeNodeDef",
10050
10053
  "TreeNodeDrop",
@@ -10058,6 +10061,8 @@
10058
10061
  "childrenKey",
10059
10062
  "disabled",
10060
10063
  "draggable",
10064
+ "filterMode",
10065
+ "filterValue",
10061
10066
  "ngsNestedTreeNode",
10062
10067
  "ngsTreeNode",
10063
10068
  "ngsTreeNodeDefWhen",
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { inject, ViewContainerRef, Directive, input, booleanAttribute, output, signal, ViewChild, ChangeDetectionStrategy, Component, createComponent, ElementRef, Renderer2, ApplicationRef, EnvironmentInjector, PLATFORM_ID, numberAttribute, HostAttributeToken, effect } from '@angular/core';
2
+ import { inject, ViewContainerRef, Directive, input, booleanAttribute, output, signal, effect, ViewChild, ChangeDetectionStrategy, Component, createComponent, ElementRef, Renderer2, ApplicationRef, EnvironmentInjector, PLATFORM_ID, numberAttribute, HostAttributeToken } from '@angular/core';
3
3
  import { CDK_TREE_NODE_OUTLET_NODE, CdkTreeNodeOutlet, CdkTree, CdkTreeNode, CdkNestedTreeNode, CdkTreeNodePadding, CdkTreeNodeToggle, CdkTreeNodeDef } from '@angular/cdk/tree';
4
4
  import { isPlatformBrowser } from '@angular/common';
5
5
  import { Checkbox } from '@ngstarter-ui/components/checkbox';
@@ -28,11 +28,38 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImpor
28
28
  standalone: true
29
29
  }]
30
30
  }] });
31
+ const NGS_TREE_DEFAULT_FILTER_PREDICATE = (node, filterValue) => {
32
+ const query = filterValue.trim().toLowerCase();
33
+ if (!query) {
34
+ return true;
35
+ }
36
+ const candidates = node && typeof node === 'object'
37
+ ? [
38
+ node['name'],
39
+ node['label'],
40
+ node['title'],
41
+ node['value'],
42
+ ]
43
+ : [node];
44
+ return candidates.some(value => value != null && String(value).toLowerCase().includes(query));
45
+ };
31
46
  class Tree extends CdkTree {
47
+ get dataSource() {
48
+ return this._sourceDataSource ?? [];
49
+ }
50
+ set dataSource(dataSource) {
51
+ if (this._sourceDataSource !== dataSource) {
52
+ this._sourceDataSource = dataSource;
53
+ this._applyFilteredDataSource();
54
+ }
55
+ }
32
56
  checkable = input(false, { ...(ngDevMode ? { debugName: "checkable" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
33
57
  selectable = input(false, { ...(ngDevMode ? { debugName: "selectable" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
34
58
  draggable = input(false, { ...(ngDevMode ? { debugName: "draggable" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
35
59
  childrenKey = input('children', ...(ngDevMode ? [{ debugName: "childrenKey" }] : /* istanbul ignore next */ []));
60
+ filterValue = input('', { ...(ngDevMode ? { debugName: "filterValue" } : /* istanbul ignore next */ {}), transform: (value) => value == null ? '' : String(value) });
61
+ filterPredicate = input(NGS_TREE_DEFAULT_FILTER_PREDICATE, ...(ngDevMode ? [{ debugName: "filterPredicate" }] : /* istanbul ignore next */ []));
62
+ filterMode = input('includeAncestors', ...(ngDevMode ? [{ debugName: "filterMode" }] : /* istanbul ignore next */ []));
36
63
  checkedChange = output();
37
64
  selectedChange = output();
38
65
  nodeDrop = output();
@@ -45,7 +72,18 @@ class Tree extends CdkTree {
45
72
  _disabledDataKeys = new Set();
46
73
  _enabledDataKeys = new Set();
47
74
  _draggedNode;
75
+ _sourceDataSource;
76
+ _filteredNodeOriginals = new WeakMap();
48
77
  _nodeOutlet = undefined;
78
+ constructor() {
79
+ super();
80
+ effect(() => {
81
+ this.filterValue();
82
+ this.filterPredicate();
83
+ this.filterMode();
84
+ this._applyFilteredDataSource();
85
+ });
86
+ }
49
87
  _toggleNodeChecked(node, checked) {
50
88
  if (this._isNodeDisabled(node)) {
51
89
  return;
@@ -327,6 +365,69 @@ class Tree extends CdkTree {
327
365
  }
328
366
  this.renderNodeChanges(rootNodes);
329
367
  }
368
+ _applyFilteredDataSource() {
369
+ const source = this._sourceDataSource;
370
+ if (!source) {
371
+ super.dataSource = [];
372
+ return;
373
+ }
374
+ super.dataSource = this._getFilteredDataSource(source);
375
+ }
376
+ _getFilteredDataSource(dataSource) {
377
+ this._filteredNodeOriginals = new WeakMap();
378
+ if (!Array.isArray(dataSource) || !this._isFilterActive()) {
379
+ return dataSource;
380
+ }
381
+ const filteredData = dataSource
382
+ .map(node => this._filterNode(node))
383
+ .filter((node) => node !== undefined);
384
+ this._expandFilteredNodes(filteredData);
385
+ return filteredData;
386
+ }
387
+ _filterNode(node) {
388
+ const filterValue = this.filterValue().trim();
389
+ const children = this._getDataNodeChildren(node) ?? [];
390
+ const matches = this.filterPredicate()(node, filterValue);
391
+ if (matches && this.filterMode() === 'includeDescendants') {
392
+ return node;
393
+ }
394
+ const filteredChildren = children
395
+ .map(child => this._filterNode(child))
396
+ .filter((child) => child !== undefined);
397
+ if (!matches && !filteredChildren.length) {
398
+ return undefined;
399
+ }
400
+ if (filteredChildren.length === children.length) {
401
+ return node;
402
+ }
403
+ return this._cloneNodeWithChildren(node, filteredChildren);
404
+ }
405
+ _cloneNodeWithChildren(node, children) {
406
+ const nodeRecord = node;
407
+ if (!nodeRecord || typeof nodeRecord !== 'object') {
408
+ return node;
409
+ }
410
+ const clone = {
411
+ ...nodeRecord,
412
+ [this.childrenKey()]: children,
413
+ };
414
+ this._filteredNodeOriginals.set(clone, node);
415
+ return clone;
416
+ }
417
+ _expandFilteredNodes(nodes) {
418
+ this._getExpansionModel?.();
419
+ for (const node of nodes) {
420
+ const children = this._getDataNodeChildren(node);
421
+ if (!children?.length) {
422
+ continue;
423
+ }
424
+ this.expand(node);
425
+ this._expandFilteredNodes(children);
426
+ }
427
+ }
428
+ _isFilterActive() {
429
+ return this.filterValue().trim().length > 0;
430
+ }
330
431
  _isNodeDescendantOf(node, maybeAncestor) {
331
432
  return this._getCheckableDescendants(maybeAncestor).some(item => this._isSameNode(item, node));
332
433
  }
@@ -452,20 +553,27 @@ class Tree extends CdkTree {
452
553
  return nodes;
453
554
  }
454
555
  _getTreeNodeKey(node) {
556
+ const originalNode = this._getOriginalFilterNode(node);
455
557
  const treeControl = this.treeControl;
456
558
  if (treeControl?.trackBy) {
457
- return treeControl.trackBy(node);
559
+ return treeControl.trackBy(originalNode);
458
560
  }
459
561
  if (this.expansionKey) {
460
- return this.expansionKey(node);
562
+ return this.expansionKey(originalNode);
461
563
  }
462
564
  if (this.trackBy) {
463
- return this.trackBy(-1, node);
565
+ return this.trackBy(-1, originalNode);
566
+ }
567
+ return originalNode;
568
+ }
569
+ _getOriginalFilterNode(node) {
570
+ if (node && typeof node === 'object') {
571
+ return this._filteredNodeOriginals.get(node) ?? node;
464
572
  }
465
573
  return node;
466
574
  }
467
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: Tree, deps: null, target: i0.ɵɵFactoryTarget.Component });
468
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.4", type: Tree, isStandalone: true, selector: "ngs-tree", inputs: { checkable: { classPropertyName: "checkable", publicName: "checkable", isSignal: true, isRequired: false, transformFunction: null }, selectable: { classPropertyName: "selectable", publicName: "selectable", isSignal: true, isRequired: false, transformFunction: null }, draggable: { classPropertyName: "draggable", publicName: "draggable", isSignal: true, isRequired: false, transformFunction: null }, childrenKey: { classPropertyName: "childrenKey", publicName: "childrenKey", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { checkedChange: "checkedChange", selectedChange: "selectedChange", nodeDrop: "nodeDrop" }, host: { classAttribute: "ngs-tree" }, providers: [{ provide: CdkTree, useExisting: Tree }], viewQueries: [{ propertyName: "_nodeOutlet", first: true, predicate: TreeNodeOutlet, descendants: true, static: true }], exportAs: ["ngsTree"], usesInheritance: true, ngImport: i0, template: `<ng-container ngsTreeNodeOutlet />`, isInline: true, styles: [":host{--ngs-tree-padding: calc(var(--spacing, .25rem) * 3) 0;--ngs-tree-node-padding: var(--ngs-nav-item-padding);--ngs-tree-node-min-height: var(--ngs-nav-item-height);--ngs-tree-node-hover-bg: var(--ngs-nav-item-hover-bg);--ngs-tree-node-active-bg: var(--ngs-nav-item-active-bg);--ngs-tree-node-active-color: var(--ngs-nav-item-active-color);--ngs-tree-node-disabled-opacity: .38;--ngs-tree-node-title-font-size: 1rem;--ngs-tree-node-font-size: var(--ngs-nav-item-font-size);--ngs-tree-node-gap: var(--ngs-nav-item-gap);--ngs-tree-node-radius: var(--ngs-nav-item-radius);--ngs-tree-node-color: var(--ngs-nav-item-color);--ngs-tree-node-hover-color: var(--ngs-nav-item-hover-color);--ngs-tree-gap: calc(var(--spacing, .25rem) * 1);--ngs-tree-node-line-color: var(--ngs-color-neutral);display:flex;flex-direction:column;gap:var(--ngs-tree-gap);padding:var(--ngs-tree-padding);background:var(--ngs-tree-container-background-color, transparent)}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "directive", type: TreeNodeOutlet, selector: "[ngsTreeNodeOutlet]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
575
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: Tree, deps: [], target: i0.ɵɵFactoryTarget.Component });
576
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.4", type: Tree, isStandalone: true, selector: "ngs-tree", inputs: { checkable: { classPropertyName: "checkable", publicName: "checkable", isSignal: true, isRequired: false, transformFunction: null }, selectable: { classPropertyName: "selectable", publicName: "selectable", isSignal: true, isRequired: false, transformFunction: null }, draggable: { classPropertyName: "draggable", publicName: "draggable", isSignal: true, isRequired: false, transformFunction: null }, childrenKey: { classPropertyName: "childrenKey", publicName: "childrenKey", isSignal: true, isRequired: false, transformFunction: null }, filterValue: { classPropertyName: "filterValue", publicName: "filterValue", isSignal: true, isRequired: false, transformFunction: null }, filterPredicate: { classPropertyName: "filterPredicate", publicName: "filterPredicate", isSignal: true, isRequired: false, transformFunction: null }, filterMode: { classPropertyName: "filterMode", publicName: "filterMode", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { checkedChange: "checkedChange", selectedChange: "selectedChange", nodeDrop: "nodeDrop" }, host: { classAttribute: "ngs-tree" }, providers: [{ provide: CdkTree, useExisting: Tree }], viewQueries: [{ propertyName: "_nodeOutlet", first: true, predicate: TreeNodeOutlet, descendants: true, static: true }], exportAs: ["ngsTree"], usesInheritance: true, ngImport: i0, template: `<ng-container ngsTreeNodeOutlet />`, isInline: true, styles: [":host{--ngs-tree-padding: calc(var(--spacing, .25rem) * 3) 0;--ngs-tree-node-padding: var(--ngs-nav-item-padding);--ngs-tree-node-min-height: var(--ngs-nav-item-height);--ngs-tree-node-hover-bg: var(--ngs-nav-item-hover-bg);--ngs-tree-node-active-bg: var(--ngs-nav-item-active-bg);--ngs-tree-node-active-color: var(--ngs-nav-item-active-color);--ngs-tree-node-disabled-opacity: .38;--ngs-tree-node-title-font-size: 1rem;--ngs-tree-node-font-size: var(--ngs-nav-item-font-size);--ngs-tree-node-gap: var(--ngs-nav-item-gap);--ngs-tree-node-radius: var(--ngs-nav-item-radius);--ngs-tree-node-color: var(--ngs-nav-item-color);--ngs-tree-node-hover-color: var(--ngs-nav-item-hover-color);--ngs-tree-gap: calc(var(--spacing, .25rem) * 1);--ngs-tree-node-line-color: var(--ngs-color-neutral);display:flex;flex-direction:column;gap:var(--ngs-tree-gap);padding:var(--ngs-tree-padding);background:var(--ngs-tree-container-background-color, transparent)}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "directive", type: TreeNodeOutlet, selector: "[ngsTreeNodeOutlet]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
469
577
  }
470
578
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: Tree, decorators: [{
471
579
  type: Component,
@@ -474,7 +582,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImpor
474
582
  ], template: `<ng-container ngsTreeNodeOutlet />`, changeDetection: ChangeDetectionStrategy.OnPush, providers: [{ provide: CdkTree, useExisting: Tree }], host: {
475
583
  'class': 'ngs-tree',
476
584
  }, styles: [":host{--ngs-tree-padding: calc(var(--spacing, .25rem) * 3) 0;--ngs-tree-node-padding: var(--ngs-nav-item-padding);--ngs-tree-node-min-height: var(--ngs-nav-item-height);--ngs-tree-node-hover-bg: var(--ngs-nav-item-hover-bg);--ngs-tree-node-active-bg: var(--ngs-nav-item-active-bg);--ngs-tree-node-active-color: var(--ngs-nav-item-active-color);--ngs-tree-node-disabled-opacity: .38;--ngs-tree-node-title-font-size: 1rem;--ngs-tree-node-font-size: var(--ngs-nav-item-font-size);--ngs-tree-node-gap: var(--ngs-nav-item-gap);--ngs-tree-node-radius: var(--ngs-nav-item-radius);--ngs-tree-node-color: var(--ngs-nav-item-color);--ngs-tree-node-hover-color: var(--ngs-nav-item-hover-color);--ngs-tree-gap: calc(var(--spacing, .25rem) * 1);--ngs-tree-node-line-color: var(--ngs-color-neutral);display:flex;flex-direction:column;gap:var(--ngs-tree-gap);padding:var(--ngs-tree-padding);background:var(--ngs-tree-container-background-color, transparent)}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] }]
477
- }], propDecorators: { checkable: [{ type: i0.Input, args: [{ isSignal: true, alias: "checkable", required: false }] }], selectable: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectable", required: false }] }], draggable: [{ type: i0.Input, args: [{ isSignal: true, alias: "draggable", required: false }] }], childrenKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "childrenKey", required: false }] }], checkedChange: [{ type: i0.Output, args: ["checkedChange"] }], selectedChange: [{ type: i0.Output, args: ["selectedChange"] }], nodeDrop: [{ type: i0.Output, args: ["nodeDrop"] }], _nodeOutlet: [{
585
+ }], ctorParameters: () => [], propDecorators: { checkable: [{ type: i0.Input, args: [{ isSignal: true, alias: "checkable", required: false }] }], selectable: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectable", required: false }] }], draggable: [{ type: i0.Input, args: [{ isSignal: true, alias: "draggable", required: false }] }], childrenKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "childrenKey", required: false }] }], filterValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterValue", required: false }] }], filterPredicate: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterPredicate", required: false }] }], filterMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterMode", required: false }] }], checkedChange: [{ type: i0.Output, args: ["checkedChange"] }], selectedChange: [{ type: i0.Output, args: ["selectedChange"] }], nodeDrop: [{ type: i0.Output, args: ["nodeDrop"] }], _nodeOutlet: [{
478
586
  type: ViewChild,
479
587
  args: [TreeNodeOutlet, { static: true }]
480
588
  }] } });
@@ -1 +1 @@
1
- {"version":3,"file":"ngstarter-ui-components-tree.mjs","sources":["../../../projects/components/tree/src/tree/tree.ts","../../../projects/components/tree/src/tree-node/tree-node.ts","../../../projects/components/tree/src/tree-node-padding.ts","../../../projects/components/tree/src/tree-node-toggle.ts","../../../projects/components/tree/src/tree-node-def.ts","../../../projects/components/tree/ngstarter-ui-components-tree.ts"],"sourcesContent":["import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n Directive,\n inject,\n input,\n output,\n signal,\n ViewContainerRef,\n ViewChild\n} from '@angular/core';\nimport { CDK_TREE_NODE_OUTLET_NODE, CdkTree, CdkTreeNodeOutlet } from '@angular/cdk/tree';\n\n@Directive({\n selector: '[ngsTreeNodeOutlet]',\n providers: [\n {\n provide: CdkTreeNodeOutlet,\n useExisting: TreeNodeOutlet,\n },\n ],\n standalone: true\n})\nexport class TreeNodeOutlet implements CdkTreeNodeOutlet {\n viewContainer = inject(ViewContainerRef);\n _node = inject(CDK_TREE_NODE_OUTLET_NODE, { optional: true });\n}\n\nexport interface TreeNodeDrop<T> {\n source: T;\n target: T;\n position: TreeNodeDropPosition;\n sourceValue: unknown;\n targetValue: unknown;\n dataSource: T[];\n}\n\nexport type TreeNodeDropPosition = 'before' | 'inside' | 'after';\n\n@Component({\n selector: 'ngs-tree',\n exportAs: 'ngsTree',\n imports: [\n TreeNodeOutlet\n ],\n template: `<ng-container ngsTreeNodeOutlet />`,\n styleUrl: './tree.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: CdkTree, useExisting: Tree }],\n host: {\n 'class': 'ngs-tree',\n },\n})\nexport class Tree<T, K = T> extends CdkTree<T, K> {\n checkable = input(false, {\n transform: booleanAttribute\n });\n\n selectable = input(false, {\n transform: booleanAttribute\n });\n\n draggable = input(false, {\n transform: booleanAttribute\n });\n\n childrenKey = input('children');\n\n readonly checkedChange = output<unknown[]>();\n readonly selectedChange = output<unknown>();\n readonly nodeDrop = output<TreeNodeDrop<T>>();\n\n readonly _checkStateVersion = signal(0);\n readonly _selectedKey = signal<unknown>(undefined);\n readonly _dropTargetKey = signal<unknown>(undefined);\n readonly _dropTargetPosition = signal<TreeNodeDropPosition | undefined>(undefined);\n private _checkedKeys = new Set<unknown>();\n private _nodeValueByDataKey = new Map<unknown, unknown>();\n private _disabledDataKeys = new Set<unknown>();\n private _enabledDataKeys = new Set<unknown>();\n private _draggedNode?: T;\n\n @ViewChild(TreeNodeOutlet, { static: true })\n override _nodeOutlet: TreeNodeOutlet = undefined!;\n\n _toggleNodeChecked(node: T, checked: boolean) {\n if (this._isNodeDisabled(node)) {\n return;\n }\n\n const nodes = [node, ...this._getCheckableDescendants(node)].filter(item => !this._isNodeDisabled(item));\n for (const item of nodes) {\n const key = this._getCheckableNodeKey(item);\n if (checked) {\n this._checkedKeys.add(key);\n } else {\n this._checkedKeys.delete(key);\n }\n }\n this._syncCheckedParentKeys();\n this._checkStateVersion.update(value => value + 1);\n this.checkedChange.emit(this._getCheckedValues());\n }\n\n _isNodeChecked(node: T): boolean {\n if (this._isNodeDisabled(node)) {\n return false;\n }\n\n const descendants = this._getCheckableDescendants(node).filter(item => !this._isNodeDisabled(item));\n if (!descendants.length) {\n return this._checkedKeys.has(this._getCheckableNodeKey(node));\n }\n\n return descendants.every(item => this._checkedKeys.has(this._getCheckableNodeKey(item)));\n }\n\n _isNodeIndeterminate(node: T): boolean {\n if (this._isNodeDisabled(node)) {\n return false;\n }\n\n const descendants = this._getCheckableDescendants(node).filter(item => !this._isNodeDisabled(item));\n if (!descendants.length) {\n return false;\n }\n\n const selectedCount = descendants.filter(item => this._checkedKeys.has(this._getCheckableNodeKey(item))).length;\n return selectedCount > 0 && selectedCount < descendants.length;\n }\n\n _selectNode(node: T) {\n if (this._isNodeDisabled(node)) {\n return;\n }\n\n const value = this._getTreeNodeValue(node);\n if (Object.is(this._selectedKey(), value)) {\n return;\n }\n\n this._selectedKey.set(value);\n this.selectedChange.emit(value);\n }\n\n _isNodeSelected(node: T): boolean {\n return !this._isNodeDisabled(node) && Object.is(this._selectedKey(), this._getTreeNodeValue(node));\n }\n\n _canDragNode(node: T): boolean {\n return node !== undefined && this.draggable() && !this._isNodeDisabled(node);\n }\n\n _isNodeDropTarget(node: T): boolean {\n return node !== undefined && Object.is(this._dropTargetKey(), this._getTreeNodeDataKey(node));\n }\n\n _isNodeDropTargetPosition(node: T, position: TreeNodeDropPosition): boolean {\n return this._isNodeDropTarget(node) && this._dropTargetPosition() === position;\n }\n\n _startNodeDrag(node: T, event: DragEvent) {\n if (!this._canDragNode(node)) {\n event.preventDefault();\n return;\n }\n\n this._draggedNode = node;\n if (event.dataTransfer) {\n event.dataTransfer.effectAllowed = 'move';\n event.dataTransfer.setData('text/plain', String(this._getTreeNodeValue(node) ?? ''));\n }\n }\n\n _dragNodeOver(node: T, event: DragEvent) {\n const position = this._getDropPosition(event);\n if (!this._canDropNode(node, position)) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n if (event.dataTransfer) {\n event.dataTransfer.dropEffect = 'move';\n }\n this._dropTargetKey.set(this._getTreeNodeDataKey(node));\n this._dropTargetPosition.set(position);\n }\n\n _dragNodeLeave(node: T, event: DragEvent) {\n event.stopPropagation();\n if (Object.is(this._dropTargetKey(), this._getTreeNodeDataKey(node))) {\n this._dropTargetKey.set(undefined);\n this._dropTargetPosition.set(undefined);\n }\n }\n\n _dropNodeInto(node: T, event: DragEvent) {\n const position = this._dropTargetPosition() ?? this._getDropPosition(event);\n if (!this._canDropNode(node, position)) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n const source = this._draggedNode!;\n const moved = this._moveNode(source, node, position);\n this._clearNodeDrag();\n\n if (moved) {\n this.nodeDrop.emit({\n source,\n target: node,\n position,\n sourceValue: this._getTreeNodeValue(source),\n targetValue: this._getTreeNodeValue(node),\n dataSource: this._getRootNodes() ?? [],\n });\n }\n }\n\n _endNodeDrag() {\n this._clearNodeDrag();\n }\n\n _registerNodeValue(node: T, value: unknown) {\n const key = this._getTreeNodeDataKey(node);\n this._nodeValueByDataKey.set(key, value);\n }\n\n _unregisterNodeValueByDataKey(key: unknown) {\n this._nodeValueByDataKey.delete(key);\n }\n\n _registerNodeDisabled(node: T, disabled: boolean) {\n const key = this._getTreeNodeDataKey(node);\n if (disabled) {\n const checkedKey = this._getCheckableNodeKey(node);\n const wasChecked = this._checkedKeys.has(checkedKey);\n this._disabledDataKeys.add(key);\n this._enabledDataKeys.delete(key);\n this._checkedKeys.delete(checkedKey);\n if (Object.is(this._selectedKey(), this._getTreeNodeValue(node))) {\n this._selectedKey.set(undefined);\n this.selectedChange.emit(undefined);\n }\n if (wasChecked) {\n this._syncCheckedParentKeys();\n this._checkStateVersion.update(value => value + 1);\n this.checkedChange.emit(this._getCheckedValues());\n }\n } else {\n this._disabledDataKeys.delete(key);\n this._enabledDataKeys.add(key);\n }\n }\n\n _unregisterNodeDisabledByDataKey(key: unknown) {\n this._disabledDataKeys.delete(key);\n this._enabledDataKeys.delete(key);\n }\n\n _isNodeDisabled(node: T): boolean {\n const key = this._getTreeNodeDataKey(node);\n if (this._enabledDataKeys.has(key)) {\n return false;\n }\n\n return this._disabledDataKeys.has(key) || (node as { disabled?: boolean } | null | undefined)?.disabled === true;\n }\n\n _getTreeNodeDataKey(node: T): unknown {\n return this._getTreeNodeKey(node);\n }\n\n _getTreeNodeValue(node: T): unknown {\n const key = this._getTreeNodeDataKey(node);\n return this._nodeValueByDataKey.has(key) ? this._nodeValueByDataKey.get(key) : key;\n }\n\n private _canDropNode(target: T, position: TreeNodeDropPosition): boolean {\n const source = this._draggedNode;\n return !!source\n && this.draggable()\n && !this._isNodeDisabled(target)\n && !this._isSameNode(source, target)\n && !this._isNodeDescendantOf(target, source);\n }\n\n private _moveNode(source: T, target: T, position: TreeNodeDropPosition): boolean {\n const rootNodes = this._getRootNodes();\n if (!rootNodes) {\n return false;\n }\n\n const moved = position === 'inside'\n ? this._moveNodeInto(source, target, rootNodes)\n : this._moveNodeBeside(source, target, position, rootNodes);\n if (!moved) {\n return false;\n }\n\n this._refreshTreeData(rootNodes);\n this._syncCheckedParentKeys();\n this._checkStateVersion.update(value => value + 1);\n return true;\n }\n\n private _moveNodeInto(source: T, target: T, rootNodes: T[]): boolean {\n const sourceLocation = this._removeNodeFrom(rootNodes, source);\n if (!sourceLocation) {\n return false;\n }\n\n const targetChildren = this._getMutableNodeChildren(target);\n if (!targetChildren) {\n sourceLocation.items.splice(sourceLocation.index, 0, source);\n return false;\n }\n\n targetChildren.push(source);\n (this as { expand?: (node: T) => void }).expand?.(target);\n return true;\n }\n\n private _moveNodeBeside(\n source: T,\n target: T,\n position: Exclude<TreeNodeDropPosition, 'inside'>,\n rootNodes: T[],\n ): boolean {\n const sourceLocation = this._removeNodeFrom(rootNodes, source);\n if (!sourceLocation) {\n return false;\n }\n\n const targetLocation = this._findNodeLocation(rootNodes, target);\n if (!targetLocation) {\n sourceLocation.items.splice(sourceLocation.index, 0, source);\n return false;\n }\n\n const insertIndex = position === 'before' ? targetLocation.index : targetLocation.index + 1;\n targetLocation.items.splice(insertIndex, 0, source);\n return true;\n }\n\n private _findNodeLocation(nodes: T[], target: T): { items: T[]; index: number } | undefined {\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n if (this._isSameNode(node, target)) {\n return { items: nodes, index: i };\n }\n\n const children = this._getDataNodeChildren(node);\n if (Array.isArray(children)) {\n const location = this._findNodeLocation(children, target);\n if (location) {\n return location;\n }\n }\n }\n\n return undefined;\n }\n\n private _removeNodeFrom(nodes: T[], source: T): { items: T[]; index: number } | undefined {\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n if (this._isSameNode(node, source)) {\n nodes.splice(i, 1);\n return { items: nodes, index: i };\n }\n\n const children = this._getDataNodeChildren(node);\n if (Array.isArray(children)) {\n const location = this._removeNodeFrom(children, source);\n if (location) {\n return location;\n }\n }\n }\n\n return undefined;\n }\n\n private _getRootNodes(): T[] | undefined {\n return Array.isArray(this.dataSource) ? this.dataSource : undefined;\n }\n\n private _getDataNodeChildren(node: T): T[] | undefined {\n const childrenAccessor = this.childrenAccessor as ((node: T) => T[] | undefined | null) | undefined;\n const children = childrenAccessor?.(node);\n return Array.isArray(children) ? children : undefined;\n }\n\n private _getMutableNodeChildren(node: T): T[] | undefined {\n const existingChildren = this._getDataNodeChildren(node);\n if (existingChildren?.length) {\n return existingChildren;\n }\n\n const childrenKey = this.childrenKey();\n const nodeRecord = node as Record<string, unknown> | null | undefined;\n if (!nodeRecord || typeof nodeRecord !== 'object') {\n return existingChildren;\n }\n\n if (!Array.isArray(nodeRecord[childrenKey])) {\n nodeRecord[childrenKey] = [];\n }\n\n return nodeRecord[childrenKey] as T[];\n }\n\n private _refreshTreeData(rootNodes: T[]) {\n if (Array.isArray(this.dataSource)) {\n this.dataSource = [];\n this.dataSource = [...rootNodes];\n return;\n }\n\n this.renderNodeChanges(rootNodes);\n }\n\n private _isNodeDescendantOf(node: T, maybeAncestor: T): boolean {\n return this._getCheckableDescendants(maybeAncestor).some(item => this._isSameNode(item, node));\n }\n\n private _isSameNode(first: T, second: T): boolean {\n return first === second || Object.is(this._getTreeNodeDataKey(first), this._getTreeNodeDataKey(second));\n }\n\n private _getDropPosition(event: DragEvent): TreeNodeDropPosition {\n const element = event.currentTarget instanceof HTMLElement\n ? event.currentTarget\n : event.target instanceof HTMLElement\n ? event.target\n : null;\n const rect = element?.getBoundingClientRect();\n if (!rect?.height) {\n return 'inside';\n }\n\n const relativeY = event.clientY - rect.top;\n if (relativeY < rect.height * 0.25) {\n return 'before';\n }\n\n if (relativeY > rect.height * 0.75) {\n return 'after';\n }\n\n return 'inside';\n }\n\n private _clearNodeDrag() {\n this._draggedNode = undefined;\n this._dropTargetKey.set(undefined);\n this._dropTargetPosition.set(undefined);\n }\n\n private _getCheckableDescendants(node: T): T[] {\n const treeControl = this.treeControl as {\n dataNodes?: T[];\n getDescendants?: (node: T) => T[];\n getLevel?: (node: T) => number;\n } | undefined;\n const flatNodes = treeControl?.dataNodes?.length\n ? treeControl.dataNodes\n : ((this as any)._keyManagerNodes?.value ?? (this as any)._flattenedNodes?.value ?? []) as T[];\n\n if (flatNodes.length && treeControl?.getLevel) {\n const nodeKey = this._getTreeNodeKey(node);\n const startIndex = flatNodes.findIndex(item => (\n item === node || this._getTreeNodeKey(item) === nodeKey\n ));\n\n if (startIndex > -1) {\n const descendants: T[] = [];\n const level = treeControl.getLevel(flatNodes[startIndex]);\n for (\n let i = startIndex + 1;\n i < flatNodes.length && treeControl.getLevel(flatNodes[i]) > level;\n i++\n ) {\n descendants.push(flatNodes[i]);\n }\n return descendants;\n }\n }\n\n if (treeControl?.getDescendants) {\n return treeControl.getDescendants(node);\n }\n\n const childrenAccessor = this.childrenAccessor as ((node: T) => T[] | undefined | null) | undefined;\n if (!childrenAccessor) {\n return [];\n }\n\n const descendants: T[] = [];\n const collect = (current: T) => {\n const children = childrenAccessor(current);\n if (!Array.isArray(children)) {\n return;\n }\n\n for (const child of children) {\n descendants.push(child);\n collect(child);\n }\n };\n\n collect(node);\n return descendants;\n }\n\n private _getCheckableNodeKey(node: T): unknown {\n return this._getTreeNodeValue(node);\n }\n\n private _getCheckedValues(): unknown[] {\n return Array.from(this._checkedKeys);\n }\n\n private _syncCheckedParentKeys() {\n const nodes = this._getCheckableNodes();\n for (let i = nodes.length - 1; i >= 0; i--) {\n const node = nodes[i];\n if (this._isNodeDisabled(node)) {\n this._checkedKeys.delete(this._getCheckableNodeKey(node));\n continue;\n }\n\n const descendants = this._getCheckableDescendants(node).filter(item => !this._isNodeDisabled(item));\n if (!descendants.length) {\n continue;\n }\n\n const key = this._getCheckableNodeKey(node);\n if (descendants.every(item => this._checkedKeys.has(this._getCheckableNodeKey(item)))) {\n this._checkedKeys.add(key);\n } else {\n this._checkedKeys.delete(key);\n }\n }\n }\n\n private _getCheckableNodes(): T[] {\n const treeControl = this.treeControl as { dataNodes?: T[] } | undefined;\n const flatNodes = treeControl?.dataNodes?.length\n ? treeControl.dataNodes\n : ((this as any)._keyManagerNodes?.value ?? (this as any)._flattenedNodes?.value ?? []) as T[];\n\n if (flatNodes.length) {\n return flatNodes;\n }\n\n const data = this.dataSource;\n if (!Array.isArray(data)) {\n return [];\n }\n\n const childrenAccessor = this.childrenAccessor as ((node: T) => T[] | undefined | null) | undefined;\n if (!childrenAccessor) {\n return data;\n }\n\n const nodes: T[] = [];\n const collect = (items: T[]) => {\n for (const item of items) {\n nodes.push(item);\n const children = childrenAccessor(item);\n if (Array.isArray(children)) {\n collect(children);\n }\n }\n };\n\n collect(data);\n return nodes;\n }\n\n private _getTreeNodeKey(node: T): unknown {\n const treeControl = this.treeControl as { trackBy?: (node: T) => K } | undefined;\n if (treeControl?.trackBy) {\n return treeControl.trackBy(node);\n }\n\n if (this.expansionKey) {\n return this.expansionKey(node);\n }\n\n if (this.trackBy) {\n return this.trackBy(-1, node);\n }\n\n return node;\n }\n}\n","import {\n CDK_TREE_NODE_OUTLET_NODE, CdkNestedTreeNode,\n CdkTreeNode,\n} from '@angular/cdk/tree';\nimport {\n ApplicationRef,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n ComponentRef,\n createComponent,\n ElementRef,\n EnvironmentInjector,\n HostAttributeToken,\n inject,\n input,\n numberAttribute,\n OnDestroy,\n OnInit,\n PLATFORM_ID,\n effect,\n Renderer2\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { Checkbox, CheckboxChange } from '@ngstarter-ui/components/checkbox';\nimport { Tree } from '../tree/tree';\n\nconst NGS_TREE_NODE_VALUE_UNSET = Symbol('ngs-tree-node-value-unset');\n\nfunction isNoopTreeKeyManager(keyManager: any) {\n return !!keyManager._isNoopTreeKeyManager;\n}\n\nfunction isTreeNodeControlClick(event: MouseEvent, host: HTMLElement): boolean {\n const target = event.target;\n if (!(target instanceof Element)) {\n return false;\n }\n\n const control = target.closest(\n '.ngs-tree-node-checkbox, [ngsTreeNodeToggle], [ngstreenodetoggle]',\n );\n\n return !!control && control !== host;\n}\n\nclass TreeNodeCheckbox<T, K = T> {\n private _isReady = false;\n private _wrapperElement?: HTMLElement;\n private _componentRef?: ComponentRef<Checkbox>;\n private _unlistenClick?: () => void;\n private _unlistenKeydown?: () => void;\n private _changeSubscription?: { unsubscribe: () => void };\n\n constructor(\n private _node: CdkTreeNode<T, K>,\n private _tree: Tree<T, K>,\n private _elementRef: ElementRef<HTMLElement>,\n private _renderer: Renderer2,\n private _appRef: ApplicationRef,\n private _environmentInjector: EnvironmentInjector,\n private _disabled: () => boolean,\n ) {}\n\n enable() {\n this._isReady = true;\n this.sync();\n }\n\n sync() {\n if (!this._isReady) {\n return;\n }\n\n if (!this._tree.checkable()) {\n this.destroy();\n return;\n }\n\n const checkbox = this._ensureCheckbox();\n const node = this._node.data;\n const checked = this._tree._isNodeChecked(node);\n const indeterminate = this._tree._isNodeIndeterminate(node);\n\n checkbox.checked.set(checked);\n checkbox.indeterminate.set(indeterminate);\n checkbox.disabled.set(this._disabled());\n this._componentRef?.changeDetectorRef.detectChanges();\n }\n\n destroy() {\n this._unlistenClick?.();\n this._unlistenClick = undefined;\n this._unlistenKeydown?.();\n this._unlistenKeydown = undefined;\n this._changeSubscription?.unsubscribe();\n this._changeSubscription = undefined;\n if (this._componentRef) {\n this._appRef.detachView(this._componentRef.hostView);\n this._componentRef.destroy();\n this._componentRef = undefined;\n }\n this._wrapperElement?.remove();\n this._wrapperElement = undefined;\n }\n\n private _ensureCheckbox(): Checkbox {\n if (this._componentRef) {\n return this._componentRef.instance;\n }\n\n const existingWrapper = this._elementRef.nativeElement.querySelector(\n ':scope > .ngs-tree-node-checkbox',\n ) as HTMLElement | null;\n const wrapper = existingWrapper ?? this._renderer.createElement('span') as HTMLElement;\n let checkboxHost = wrapper.querySelector(':scope > ngs-checkbox') as HTMLElement | null;\n\n if (!existingWrapper) {\n this._renderer.addClass(wrapper, 'ngs-tree-node-checkbox');\n checkboxHost = this._renderer.createElement('ngs-checkbox') as HTMLElement;\n this._renderer.appendChild(wrapper, checkboxHost);\n this._renderer.insertBefore(\n this._elementRef.nativeElement,\n wrapper,\n this._getCheckboxInsertionReference(),\n );\n } else if (!checkboxHost) {\n checkboxHost = this._renderer.createElement('ngs-checkbox') as HTMLElement;\n this._renderer.appendChild(wrapper, checkboxHost);\n }\n\n while (checkboxHost.firstChild) {\n checkboxHost.firstChild.remove();\n }\n\n this._wrapperElement = wrapper;\n this._componentRef = createComponent(Checkbox, {\n environmentInjector: this._environmentInjector,\n hostElement: checkboxHost,\n });\n this._componentRef.setInput('aria-label', 'Select tree node');\n this._componentRef.setInput('tabIndex', -1);\n this._appRef.attachView(this._componentRef.hostView);\n this._bindCheckboxEvents(wrapper, this._componentRef);\n\n return this._componentRef.instance;\n }\n\n private _getCheckboxInsertionReference(): ChildNode | null {\n const host = this._elementRef.nativeElement;\n const firstElement = host.firstElementChild;\n if (\n firstElement?.matches(\n 'button, [ngsTreeNodeToggle], [ngstreenodetoggle], [ngsIconButton], [ngsiconbutton]',\n )\n ) {\n return firstElement.nextSibling;\n }\n\n return host.firstChild;\n }\n\n private _bindCheckboxEvents(checkboxElement: HTMLElement, checkboxRef: ComponentRef<Checkbox>) {\n this._unlistenClick = this._renderer.listen(checkboxElement, 'click', (event: Event) => {\n event.stopPropagation();\n });\n this._unlistenKeydown = this._renderer.listen(checkboxElement, 'keydown', (event: Event) => {\n event.stopPropagation();\n });\n this._changeSubscription = checkboxRef.instance.change.subscribe((event: CheckboxChange) => {\n this._tree._toggleNodeChecked(this._node.data, event.checked);\n });\n }\n}\n\n@Component({\n selector: 'ngs-tree-node',\n exportAs: 'ngsTreeNode',\n template: '<ng-content />',\n styleUrl: './tree-node.scss',\n standalone: true,\n outputs: ['activation', 'expandedChange'],\n providers: [{ provide: CdkTreeNode, useExisting: TreeNode }],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'ngs-tree-node',\n '[class.ngs-tree-node-selectable]': '_isSelectable()',\n '[class.ngs-tree-node-selected]': '_isSelected()',\n '[class.ngs-tree-node-disabled]': 'disabled()',\n '[class.ngs-tree-node-draggable]': '_isDraggable()',\n '[class.ngs-tree-node-drop-target]': '_isDropTarget()',\n '[class.ngs-tree-node-drop-before]': '_isDropTargetPosition(\"before\")',\n '[class.ngs-tree-node-drop-inside]': '_isDropTargetPosition(\"inside\")',\n '[class.ngs-tree-node-drop-after]': '_isDropTargetPosition(\"after\")',\n '[attr.draggable]': '_getDraggableAttribute()',\n '[attr.aria-expanded]': '_getAriaExpanded()',\n '[attr.aria-level]': 'level + 1',\n '[attr.aria-posinset]': '_getPositionInSet()',\n '[attr.aria-setsize]': '_getSetSize()',\n '[attr.aria-selected]': '_getAriaSelected()',\n '[attr.aria-disabled]': 'disabled()',\n '[attr.aria-grabbed]': '_getAriaGrabbed()',\n '(click)': '_handleNodeClick($event)',\n '(dragstart)': '_handleDragStart($event)',\n '(dragover)': '_handleDragOver($event)',\n '(dragleave)': '_handleDragLeave($event)',\n '(drop)': '_handleDrop($event)',\n '(dragend)': '_handleDragEnd()',\n '[tabindex]': '_getTabindexAttribute()',\n },\n})\nexport class TreeNode<T, K = T> extends CdkTreeNode<T, K> implements OnInit, OnDestroy {\n private _hostElementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private _renderer = inject(Renderer2);\n private _appRef = inject(ApplicationRef);\n private _environmentInjector = inject(EnvironmentInjector);\n private _platformId = inject(PLATFORM_ID);\n private _checkbox: TreeNodeCheckbox<T, K>;\n private _dataChangesSubscription?: { unsubscribe: () => void };\n private _checkboxEnableHandle?: ReturnType<typeof setTimeout>;\n private _registeredDataKey: unknown = NGS_TREE_NODE_VALUE_UNSET;\n\n tabIndexInputBinding = input<number, any>(0, {\n transform: (value: unknown) => (value == null ? 0 : numberAttribute(value)),\n alias: 'tabIndex',\n });\n\n value = input<unknown>(NGS_TREE_NODE_VALUE_UNSET);\n\n disabled = input(false, {\n transform: booleanAttribute\n });\n\n defaultTabIndex = 0;\n\n constructor() {\n super();\n const tree = this._tree as Tree<T, K>;\n this._checkbox = new TreeNodeCheckbox(\n this,\n tree,\n this._hostElementRef,\n this._renderer,\n this._appRef,\n this._environmentInjector,\n () => this.disabled(),\n );\n this._dataChangesSubscription = this._dataChanges.subscribe(() => this._syncNodeState());\n if (isPlatformBrowser(this._platformId)) {\n this._checkboxEnableHandle = setTimeout(() => this._checkbox.enable());\n }\n const tabIndex = inject(new HostAttributeToken('tabindex'), { optional: true });\n (this as any)._tabIndexInputBinding = Number(tabIndex) || this.defaultTabIndex;\n effect(() => {\n this.isDisabled = this.disabled();\n });\n effect(() => {\n tree.checkable();\n tree._checkStateVersion();\n this.disabled();\n this._syncNodeDisabledRegistration();\n this._checkbox.sync();\n });\n effect(() => {\n this.value();\n this._syncNodeState();\n });\n }\n\n _getTabindexAttribute() {\n if (isNoopTreeKeyManager((this._tree as any)._keyManager)) {\n return this.tabIndexInputBinding();\n }\n return (this as any)._tabindex;\n }\n\n _handleNodeClick(event: MouseEvent) {\n this._focusItem();\n this._selectNodeFromEvent(event);\n }\n\n _isSelectable(): boolean {\n return (this._tree as Tree<T, K>).selectable() && !this.disabled();\n }\n\n _isSelected(): boolean {\n const tree = this._tree as Tree<T, K>;\n return tree.selectable() && tree._isNodeSelected(this.data);\n }\n\n _getAriaSelected(): boolean | null {\n return (this._tree as Tree<T, K>).selectable() ? this._isSelected() : null;\n }\n\n _isDraggable(): boolean {\n return (this._tree as Tree<T, K>)._canDragNode(this.data);\n }\n\n _isDropTarget(): boolean {\n return (this._tree as Tree<T, K>)._isNodeDropTarget(this.data);\n }\n\n _isDropTargetPosition(position: 'before' | 'inside' | 'after'): boolean {\n return (this._tree as Tree<T, K>)._isNodeDropTargetPosition(this.data, position);\n }\n\n _getDraggableAttribute(): true | null {\n return this._isDraggable() ? true : null;\n }\n\n _getAriaGrabbed(): boolean | null {\n return (this._tree as Tree<T, K>).draggable() ? false : null;\n }\n\n _handleDragStart(event: DragEvent) {\n (this._tree as Tree<T, K>)._startNodeDrag(this.data, event);\n }\n\n _handleDragOver(event: DragEvent) {\n (this._tree as Tree<T, K>)._dragNodeOver(this.data, event);\n }\n\n _handleDragLeave(event: DragEvent) {\n (this._tree as Tree<T, K>)._dragNodeLeave(this.data, event);\n }\n\n _handleDrop(event: DragEvent) {\n (this._tree as Tree<T, K>)._dropNodeInto(this.data, event);\n }\n\n _handleDragEnd() {\n (this._tree as Tree<T, K>)._endNodeDrag();\n }\n\n private _selectNodeFromEvent(event: MouseEvent) {\n if (!this._isSelectable() || this._isTreeControlClick(event)) {\n return;\n }\n\n (this._tree as Tree<T, K>)._selectNode(this.data);\n }\n\n private _isTreeControlClick(event: MouseEvent): boolean {\n return isTreeNodeControlClick(event, this._hostElementRef.nativeElement);\n }\n\n private _syncNodeState() {\n this._syncNodeValueRegistration();\n this._syncNodeDisabledRegistration();\n this._checkbox.sync();\n }\n\n private _syncNodeValueRegistration() {\n if (this.data === undefined) {\n return;\n }\n\n const tree = this._tree as Tree<T, K>;\n const key = tree._getTreeNodeDataKey(this.data);\n if (this._registeredDataKey !== NGS_TREE_NODE_VALUE_UNSET && !Object.is(this._registeredDataKey, key)) {\n tree._unregisterNodeValueByDataKey(this._registeredDataKey);\n tree._unregisterNodeDisabledByDataKey(this._registeredDataKey);\n }\n\n this._registeredDataKey = key;\n if (this.value() === NGS_TREE_NODE_VALUE_UNSET) {\n tree._unregisterNodeValueByDataKey(key);\n } else {\n tree._registerNodeValue(this.data, this.value());\n }\n }\n\n private _syncNodeDisabledRegistration() {\n if (this.data === undefined) {\n return;\n }\n\n (this._tree as Tree<T, K>)._registerNodeDisabled(this.data, this.disabled());\n }\n\n override ngOnInit() {\n super.ngOnInit();\n this._syncNodeState();\n }\n\n override ngOnDestroy() {\n if (this._checkboxEnableHandle) {\n clearTimeout(this._checkboxEnableHandle);\n }\n this._dataChangesSubscription?.unsubscribe();\n if (this._registeredDataKey !== NGS_TREE_NODE_VALUE_UNSET) {\n (this._tree as Tree<T, K>)._unregisterNodeValueByDataKey(this._registeredDataKey);\n (this._tree as Tree<T, K>)._unregisterNodeDisabledByDataKey(this._registeredDataKey);\n }\n this._checkbox.destroy();\n super.ngOnDestroy();\n }\n}\n\n@Component({\n selector: 'ngs-nested-tree-node',\n exportAs: 'ngsNestedTreeNode',\n template: '<ng-content />',\n styleUrl: './tree-node.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n outputs: ['activation', 'expandedChange'],\n providers: [\n { provide: CdkNestedTreeNode, useExisting: NestedTreeNode },\n { provide: CdkTreeNode, useExisting: NestedTreeNode },\n { provide: CDK_TREE_NODE_OUTLET_NODE, useExisting: NestedTreeNode },\n ],\n host: {\n 'class': 'ngs-nested-tree-node',\n '[class.ngs-tree-node-selectable]': '_isSelectable()',\n '[class.ngs-tree-node-selected]': '_isSelected()',\n '[class.ngs-tree-node-disabled]': 'disabled()',\n '[class.ngs-tree-node-draggable]': '_isDraggable()',\n '[class.ngs-tree-node-drop-target]': '_isDropTarget()',\n '[class.ngs-tree-node-drop-before]': '_isDropTargetPosition(\"before\")',\n '[class.ngs-tree-node-drop-inside]': '_isDropTargetPosition(\"inside\")',\n '[class.ngs-tree-node-drop-after]': '_isDropTargetPosition(\"after\")',\n '[attr.draggable]': '_getDraggableAttribute()',\n '[attr.aria-selected]': '_getAriaSelected()',\n '[attr.aria-disabled]': 'disabled()',\n '[attr.aria-grabbed]': '_getAriaGrabbed()',\n '(click)': '_handleNodeClick($event)',\n '(dragstart)': '_handleDragStart($event)',\n '(dragover)': '_handleDragOver($event)',\n '(dragleave)': '_handleDragLeave($event)',\n '(drop)': '_handleDrop($event)',\n '(dragend)': '_handleDragEnd()',\n },\n})\nexport class NestedTreeNode<T, K = T> extends CdkNestedTreeNode<T, K> implements OnInit, OnDestroy {\n private _hostElementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private _renderer = inject(Renderer2);\n private _appRef = inject(ApplicationRef);\n private _environmentInjector = inject(EnvironmentInjector);\n private _platformId = inject(PLATFORM_ID);\n private _checkbox: TreeNodeCheckbox<T, K>;\n private _dataChangesSubscription?: { unsubscribe: () => void };\n private _checkboxEnableHandle?: ReturnType<typeof setTimeout>;\n private _registeredDataKey: unknown = NGS_TREE_NODE_VALUE_UNSET;\n\n node = input<T>(undefined!, {\n alias: 'ngsNestedTreeNode'\n });\n\n value = input<unknown>(NGS_TREE_NODE_VALUE_UNSET);\n\n disabled = input(false, {\n transform: booleanAttribute\n });\n\n tabIndexInput = input<number, any>(0, {\n alias: 'tabIndex',\n transform: (value: any) => (value == null ? 0 : numberAttribute(value))\n });\n\n constructor() {\n super();\n const tree = this._tree as Tree<T, K>;\n this._checkbox = new TreeNodeCheckbox(\n this,\n tree,\n this._hostElementRef,\n this._renderer,\n this._appRef,\n this._environmentInjector,\n () => this.disabled(),\n );\n this._dataChangesSubscription = this._dataChanges.subscribe(() => this._syncNodeState());\n if (isPlatformBrowser(this._platformId)) {\n this._checkboxEnableHandle = setTimeout(() => this._checkbox.enable());\n }\n effect(() => {\n this.isDisabled = this.disabled();\n });\n effect(() => {\n tree.checkable();\n tree._checkStateVersion();\n this.disabled();\n this._syncNodeDisabledRegistration();\n this._checkbox.sync();\n });\n effect(() => {\n this.value();\n this._syncNodeState();\n });\n }\n\n get tabIndex(): number {\n return this.isDisabled ? -1 : this.tabIndexInput();\n }\n\n _handleNodeClick(event: MouseEvent) {\n (this as any)._focusItem?.();\n this._selectNodeFromEvent(event);\n }\n\n _isSelectable(): boolean {\n return (this._tree as Tree<T, K>).selectable() && !this.disabled();\n }\n\n _isSelected(): boolean {\n const tree = this._tree as Tree<T, K>;\n return tree.selectable() && tree._isNodeSelected(this.data);\n }\n\n _getAriaSelected(): boolean | null {\n return (this._tree as Tree<T, K>).selectable() ? this._isSelected() : null;\n }\n\n _isDraggable(): boolean {\n return (this._tree as Tree<T, K>)._canDragNode(this.data);\n }\n\n _isDropTarget(): boolean {\n return (this._tree as Tree<T, K>)._isNodeDropTarget(this.data);\n }\n\n _isDropTargetPosition(position: 'before' | 'inside' | 'after'): boolean {\n return (this._tree as Tree<T, K>)._isNodeDropTargetPosition(this.data, position);\n }\n\n _getDraggableAttribute(): true | null {\n return this._isDraggable() ? true : null;\n }\n\n _getAriaGrabbed(): boolean | null {\n return (this._tree as Tree<T, K>).draggable() ? false : null;\n }\n\n _handleDragStart(event: DragEvent) {\n (this._tree as Tree<T, K>)._startNodeDrag(this.data, event);\n }\n\n _handleDragOver(event: DragEvent) {\n (this._tree as Tree<T, K>)._dragNodeOver(this.data, event);\n }\n\n _handleDragLeave(event: DragEvent) {\n (this._tree as Tree<T, K>)._dragNodeLeave(this.data, event);\n }\n\n _handleDrop(event: DragEvent) {\n (this._tree as Tree<T, K>)._dropNodeInto(this.data, event);\n }\n\n _handleDragEnd() {\n (this._tree as Tree<T, K>)._endNodeDrag();\n }\n\n private _selectNodeFromEvent(event: MouseEvent) {\n if (!this._isSelectable() || this._isTreeControlClick(event)) {\n return;\n }\n\n (this._tree as Tree<T, K>)._selectNode(this.data);\n }\n\n private _isTreeControlClick(event: MouseEvent): boolean {\n return isTreeNodeControlClick(event, this._hostElementRef.nativeElement);\n }\n\n private _syncNodeState() {\n this._syncNodeValueRegistration();\n this._syncNodeDisabledRegistration();\n this._checkbox.sync();\n }\n\n private _syncNodeValueRegistration() {\n if (this.data === undefined) {\n return;\n }\n\n const tree = this._tree as Tree<T, K>;\n const key = tree._getTreeNodeDataKey(this.data);\n if (this._registeredDataKey !== NGS_TREE_NODE_VALUE_UNSET && !Object.is(this._registeredDataKey, key)) {\n tree._unregisterNodeValueByDataKey(this._registeredDataKey);\n tree._unregisterNodeDisabledByDataKey(this._registeredDataKey);\n }\n\n this._registeredDataKey = key;\n if (this.value() === NGS_TREE_NODE_VALUE_UNSET) {\n tree._unregisterNodeValueByDataKey(key);\n } else {\n tree._registerNodeValue(this.data, this.value());\n }\n }\n\n private _syncNodeDisabledRegistration() {\n if (this.data === undefined) {\n return;\n }\n\n (this._tree as Tree<T, K>)._registerNodeDisabled(this.data, this.disabled());\n }\n\n override ngOnInit() {\n super.ngOnInit();\n this._syncNodeState();\n }\n\n override ngAfterContentInit() {\n super.ngAfterContentInit();\n }\n\n override ngOnDestroy() {\n if (this._checkboxEnableHandle) {\n clearTimeout(this._checkboxEnableHandle);\n }\n this._dataChangesSubscription?.unsubscribe();\n if (this._registeredDataKey !== NGS_TREE_NODE_VALUE_UNSET) {\n (this._tree as Tree<T, K>)._unregisterNodeValueByDataKey(this._registeredDataKey);\n (this._tree as Tree<T, K>)._unregisterNodeDisabledByDataKey(this._registeredDataKey);\n }\n this._checkbox.destroy();\n super.ngOnDestroy();\n }\n}\n","import { CdkTreeNodePadding } from '@angular/cdk/tree';\nimport { Directive, effect, input, numberAttribute } from '@angular/core';\n\n@Directive({\n selector: '[ngsTreeNodePadding]',\n providers: [{ provide: CdkTreeNodePadding, useExisting: TreeNodePadding }],\n standalone: true\n})\nexport class TreeNodePadding<T, K = T> extends CdkTreeNodePadding<T, K> {\n levelInput = input<number, any>(0, {\n alias: 'ngsTreeNodePadding',\n transform: numberAttribute\n });\n\n indentInput = input<number | string>(40, {\n alias: 'ngsTreeNodePaddingIndent'\n });\n\n constructor() {\n super();\n effect(() => {\n this.level = this.levelInput();\n });\n effect(() => {\n this._setIndentInput(this.indentInput());\n });\n }\n}\n","import { CdkTreeNodeToggle } from '@angular/cdk/tree';\nimport { Directive, Input } from '@angular/core';\n\n@Directive({\n selector: '[ngsTreeNodeToggle]',\n providers: [{ provide: CdkTreeNodeToggle, useExisting: TreeNodeToggle }],\n inputs: [{ name: 'recursive', alias: 'ngsTreeNodeToggleRecursive' }],\n standalone: true\n})\nexport class TreeNodeToggle<T, K = T> extends CdkTreeNodeToggle<T, K> {\n}\n","import { CdkTreeNodeDef } from '@angular/cdk/tree';\nimport { Directive, input } from '@angular/core';\n\n@Directive({\n selector: '[ngsTreeNodeDef]',\n inputs: [{ name: 'when', alias: 'ngsTreeNodeDefWhen' }],\n providers: [{ provide: CdkTreeNodeDef, useExisting: TreeNodeDef }],\n standalone: true\n})\nexport class TreeNodeDef<T> extends CdkTreeNodeDef<T> {\n data = input<T>(undefined!, {\n alias: 'ngsTreeNode'\n });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngstarter-ui-components-tree.mjs","sources":["../../../projects/components/tree/src/tree/tree.ts","../../../projects/components/tree/src/tree-node/tree-node.ts","../../../projects/components/tree/src/tree-node-padding.ts","../../../projects/components/tree/src/tree-node-toggle.ts","../../../projects/components/tree/src/tree-node-def.ts","../../../projects/components/tree/ngstarter-ui-components-tree.ts"],"sourcesContent":["import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n Directive,\n effect,\n inject,\n input,\n output,\n signal,\n ViewContainerRef,\n ViewChild\n} from '@angular/core';\nimport { DataSource } from '@angular/cdk/collections';\nimport { CDK_TREE_NODE_OUTLET_NODE, CdkTree, CdkTreeNodeOutlet } from '@angular/cdk/tree';\nimport { Observable } from 'rxjs';\n\n@Directive({\n selector: '[ngsTreeNodeOutlet]',\n providers: [\n {\n provide: CdkTreeNodeOutlet,\n useExisting: TreeNodeOutlet,\n },\n ],\n standalone: true\n})\nexport class TreeNodeOutlet implements CdkTreeNodeOutlet {\n viewContainer = inject(ViewContainerRef);\n _node = inject(CDK_TREE_NODE_OUTLET_NODE, { optional: true });\n}\n\nexport interface TreeNodeDrop<T> {\n source: T;\n target: T;\n position: TreeNodeDropPosition;\n sourceValue: unknown;\n targetValue: unknown;\n dataSource: T[];\n}\n\nexport type TreeNodeDropPosition = 'before' | 'inside' | 'after';\nexport type TreeFilterMode = 'includeAncestors' | 'includeDescendants';\nexport type TreeFilterPredicate<T> = (node: T, filterValue: string) => boolean;\n\nconst NGS_TREE_DEFAULT_FILTER_PREDICATE = <T,>(node: T, filterValue: string): boolean => {\n const query = filterValue.trim().toLowerCase();\n if (!query) {\n return true;\n }\n\n const candidates = node && typeof node === 'object'\n ? [\n (node as Record<string, unknown>)['name'],\n (node as Record<string, unknown>)['label'],\n (node as Record<string, unknown>)['title'],\n (node as Record<string, unknown>)['value'],\n ]\n : [node];\n\n return candidates.some(value => value != null && String(value).toLowerCase().includes(query));\n};\n\n@Component({\n selector: 'ngs-tree',\n exportAs: 'ngsTree',\n imports: [\n TreeNodeOutlet\n ],\n template: `<ng-container ngsTreeNodeOutlet />`,\n styleUrl: './tree.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: CdkTree, useExisting: Tree }],\n host: {\n 'class': 'ngs-tree',\n },\n})\nexport class Tree<T, K = T> extends CdkTree<T, K> {\n override get dataSource(): DataSource<T> | Observable<T[]> | T[] {\n return this._sourceDataSource ?? [];\n }\n\n override set dataSource(dataSource: DataSource<T> | Observable<T[]> | T[]) {\n if (this._sourceDataSource !== dataSource) {\n this._sourceDataSource = dataSource;\n this._applyFilteredDataSource();\n }\n }\n\n checkable = input(false, {\n transform: booleanAttribute\n });\n\n selectable = input(false, {\n transform: booleanAttribute\n });\n\n draggable = input(false, {\n transform: booleanAttribute\n });\n\n childrenKey = input('children');\n\n filterValue = input('', {\n transform: (value: unknown) => value == null ? '' : String(value)\n });\n\n filterPredicate = input<TreeFilterPredicate<T>>(NGS_TREE_DEFAULT_FILTER_PREDICATE);\n\n filterMode = input<TreeFilterMode>('includeAncestors');\n\n readonly checkedChange = output<unknown[]>();\n readonly selectedChange = output<unknown>();\n readonly nodeDrop = output<TreeNodeDrop<T>>();\n\n readonly _checkStateVersion = signal(0);\n readonly _selectedKey = signal<unknown>(undefined);\n readonly _dropTargetKey = signal<unknown>(undefined);\n readonly _dropTargetPosition = signal<TreeNodeDropPosition | undefined>(undefined);\n private _checkedKeys = new Set<unknown>();\n private _nodeValueByDataKey = new Map<unknown, unknown>();\n private _disabledDataKeys = new Set<unknown>();\n private _enabledDataKeys = new Set<unknown>();\n private _draggedNode?: T;\n private _sourceDataSource?: DataSource<T> | Observable<T[]> | T[];\n private _filteredNodeOriginals = new WeakMap<object, T>();\n\n @ViewChild(TreeNodeOutlet, { static: true })\n override _nodeOutlet: TreeNodeOutlet = undefined!;\n\n constructor() {\n super();\n effect(() => {\n this.filterValue();\n this.filterPredicate();\n this.filterMode();\n this._applyFilteredDataSource();\n });\n }\n\n _toggleNodeChecked(node: T, checked: boolean) {\n if (this._isNodeDisabled(node)) {\n return;\n }\n\n const nodes = [node, ...this._getCheckableDescendants(node)].filter(item => !this._isNodeDisabled(item));\n for (const item of nodes) {\n const key = this._getCheckableNodeKey(item);\n if (checked) {\n this._checkedKeys.add(key);\n } else {\n this._checkedKeys.delete(key);\n }\n }\n this._syncCheckedParentKeys();\n this._checkStateVersion.update(value => value + 1);\n this.checkedChange.emit(this._getCheckedValues());\n }\n\n _isNodeChecked(node: T): boolean {\n if (this._isNodeDisabled(node)) {\n return false;\n }\n\n const descendants = this._getCheckableDescendants(node).filter(item => !this._isNodeDisabled(item));\n if (!descendants.length) {\n return this._checkedKeys.has(this._getCheckableNodeKey(node));\n }\n\n return descendants.every(item => this._checkedKeys.has(this._getCheckableNodeKey(item)));\n }\n\n _isNodeIndeterminate(node: T): boolean {\n if (this._isNodeDisabled(node)) {\n return false;\n }\n\n const descendants = this._getCheckableDescendants(node).filter(item => !this._isNodeDisabled(item));\n if (!descendants.length) {\n return false;\n }\n\n const selectedCount = descendants.filter(item => this._checkedKeys.has(this._getCheckableNodeKey(item))).length;\n return selectedCount > 0 && selectedCount < descendants.length;\n }\n\n _selectNode(node: T) {\n if (this._isNodeDisabled(node)) {\n return;\n }\n\n const value = this._getTreeNodeValue(node);\n if (Object.is(this._selectedKey(), value)) {\n return;\n }\n\n this._selectedKey.set(value);\n this.selectedChange.emit(value);\n }\n\n _isNodeSelected(node: T): boolean {\n return !this._isNodeDisabled(node) && Object.is(this._selectedKey(), this._getTreeNodeValue(node));\n }\n\n _canDragNode(node: T): boolean {\n return node !== undefined && this.draggable() && !this._isNodeDisabled(node);\n }\n\n _isNodeDropTarget(node: T): boolean {\n return node !== undefined && Object.is(this._dropTargetKey(), this._getTreeNodeDataKey(node));\n }\n\n _isNodeDropTargetPosition(node: T, position: TreeNodeDropPosition): boolean {\n return this._isNodeDropTarget(node) && this._dropTargetPosition() === position;\n }\n\n _startNodeDrag(node: T, event: DragEvent) {\n if (!this._canDragNode(node)) {\n event.preventDefault();\n return;\n }\n\n this._draggedNode = node;\n if (event.dataTransfer) {\n event.dataTransfer.effectAllowed = 'move';\n event.dataTransfer.setData('text/plain', String(this._getTreeNodeValue(node) ?? ''));\n }\n }\n\n _dragNodeOver(node: T, event: DragEvent) {\n const position = this._getDropPosition(event);\n if (!this._canDropNode(node, position)) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n if (event.dataTransfer) {\n event.dataTransfer.dropEffect = 'move';\n }\n this._dropTargetKey.set(this._getTreeNodeDataKey(node));\n this._dropTargetPosition.set(position);\n }\n\n _dragNodeLeave(node: T, event: DragEvent) {\n event.stopPropagation();\n if (Object.is(this._dropTargetKey(), this._getTreeNodeDataKey(node))) {\n this._dropTargetKey.set(undefined);\n this._dropTargetPosition.set(undefined);\n }\n }\n\n _dropNodeInto(node: T, event: DragEvent) {\n const position = this._dropTargetPosition() ?? this._getDropPosition(event);\n if (!this._canDropNode(node, position)) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n const source = this._draggedNode!;\n const moved = this._moveNode(source, node, position);\n this._clearNodeDrag();\n\n if (moved) {\n this.nodeDrop.emit({\n source,\n target: node,\n position,\n sourceValue: this._getTreeNodeValue(source),\n targetValue: this._getTreeNodeValue(node),\n dataSource: this._getRootNodes() ?? [],\n });\n }\n }\n\n _endNodeDrag() {\n this._clearNodeDrag();\n }\n\n _registerNodeValue(node: T, value: unknown) {\n const key = this._getTreeNodeDataKey(node);\n this._nodeValueByDataKey.set(key, value);\n }\n\n _unregisterNodeValueByDataKey(key: unknown) {\n this._nodeValueByDataKey.delete(key);\n }\n\n _registerNodeDisabled(node: T, disabled: boolean) {\n const key = this._getTreeNodeDataKey(node);\n if (disabled) {\n const checkedKey = this._getCheckableNodeKey(node);\n const wasChecked = this._checkedKeys.has(checkedKey);\n this._disabledDataKeys.add(key);\n this._enabledDataKeys.delete(key);\n this._checkedKeys.delete(checkedKey);\n if (Object.is(this._selectedKey(), this._getTreeNodeValue(node))) {\n this._selectedKey.set(undefined);\n this.selectedChange.emit(undefined);\n }\n if (wasChecked) {\n this._syncCheckedParentKeys();\n this._checkStateVersion.update(value => value + 1);\n this.checkedChange.emit(this._getCheckedValues());\n }\n } else {\n this._disabledDataKeys.delete(key);\n this._enabledDataKeys.add(key);\n }\n }\n\n _unregisterNodeDisabledByDataKey(key: unknown) {\n this._disabledDataKeys.delete(key);\n this._enabledDataKeys.delete(key);\n }\n\n _isNodeDisabled(node: T): boolean {\n const key = this._getTreeNodeDataKey(node);\n if (this._enabledDataKeys.has(key)) {\n return false;\n }\n\n return this._disabledDataKeys.has(key) || (node as { disabled?: boolean } | null | undefined)?.disabled === true;\n }\n\n _getTreeNodeDataKey(node: T): unknown {\n return this._getTreeNodeKey(node);\n }\n\n _getTreeNodeValue(node: T): unknown {\n const key = this._getTreeNodeDataKey(node);\n return this._nodeValueByDataKey.has(key) ? this._nodeValueByDataKey.get(key) : key;\n }\n\n private _canDropNode(target: T, position: TreeNodeDropPosition): boolean {\n const source = this._draggedNode;\n return !!source\n && this.draggable()\n && !this._isNodeDisabled(target)\n && !this._isSameNode(source, target)\n && !this._isNodeDescendantOf(target, source);\n }\n\n private _moveNode(source: T, target: T, position: TreeNodeDropPosition): boolean {\n const rootNodes = this._getRootNodes();\n if (!rootNodes) {\n return false;\n }\n\n const moved = position === 'inside'\n ? this._moveNodeInto(source, target, rootNodes)\n : this._moveNodeBeside(source, target, position, rootNodes);\n if (!moved) {\n return false;\n }\n\n this._refreshTreeData(rootNodes);\n this._syncCheckedParentKeys();\n this._checkStateVersion.update(value => value + 1);\n return true;\n }\n\n private _moveNodeInto(source: T, target: T, rootNodes: T[]): boolean {\n const sourceLocation = this._removeNodeFrom(rootNodes, source);\n if (!sourceLocation) {\n return false;\n }\n\n const targetChildren = this._getMutableNodeChildren(target);\n if (!targetChildren) {\n sourceLocation.items.splice(sourceLocation.index, 0, source);\n return false;\n }\n\n targetChildren.push(source);\n (this as { expand?: (node: T) => void }).expand?.(target);\n return true;\n }\n\n private _moveNodeBeside(\n source: T,\n target: T,\n position: Exclude<TreeNodeDropPosition, 'inside'>,\n rootNodes: T[],\n ): boolean {\n const sourceLocation = this._removeNodeFrom(rootNodes, source);\n if (!sourceLocation) {\n return false;\n }\n\n const targetLocation = this._findNodeLocation(rootNodes, target);\n if (!targetLocation) {\n sourceLocation.items.splice(sourceLocation.index, 0, source);\n return false;\n }\n\n const insertIndex = position === 'before' ? targetLocation.index : targetLocation.index + 1;\n targetLocation.items.splice(insertIndex, 0, source);\n return true;\n }\n\n private _findNodeLocation(nodes: T[], target: T): { items: T[]; index: number } | undefined {\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n if (this._isSameNode(node, target)) {\n return { items: nodes, index: i };\n }\n\n const children = this._getDataNodeChildren(node);\n if (Array.isArray(children)) {\n const location = this._findNodeLocation(children, target);\n if (location) {\n return location;\n }\n }\n }\n\n return undefined;\n }\n\n private _removeNodeFrom(nodes: T[], source: T): { items: T[]; index: number } | undefined {\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n if (this._isSameNode(node, source)) {\n nodes.splice(i, 1);\n return { items: nodes, index: i };\n }\n\n const children = this._getDataNodeChildren(node);\n if (Array.isArray(children)) {\n const location = this._removeNodeFrom(children, source);\n if (location) {\n return location;\n }\n }\n }\n\n return undefined;\n }\n\n private _getRootNodes(): T[] | undefined {\n return Array.isArray(this.dataSource) ? this.dataSource : undefined;\n }\n\n private _getDataNodeChildren(node: T): T[] | undefined {\n const childrenAccessor = this.childrenAccessor as ((node: T) => T[] | undefined | null) | undefined;\n const children = childrenAccessor?.(node);\n return Array.isArray(children) ? children : undefined;\n }\n\n private _getMutableNodeChildren(node: T): T[] | undefined {\n const existingChildren = this._getDataNodeChildren(node);\n if (existingChildren?.length) {\n return existingChildren;\n }\n\n const childrenKey = this.childrenKey();\n const nodeRecord = node as Record<string, unknown> | null | undefined;\n if (!nodeRecord || typeof nodeRecord !== 'object') {\n return existingChildren;\n }\n\n if (!Array.isArray(nodeRecord[childrenKey])) {\n nodeRecord[childrenKey] = [];\n }\n\n return nodeRecord[childrenKey] as T[];\n }\n\n private _refreshTreeData(rootNodes: T[]) {\n if (Array.isArray(this.dataSource)) {\n this.dataSource = [];\n this.dataSource = [...rootNodes];\n return;\n }\n\n this.renderNodeChanges(rootNodes);\n }\n\n private _applyFilteredDataSource() {\n const source = this._sourceDataSource;\n if (!source) {\n super.dataSource = [];\n return;\n }\n\n super.dataSource = this._getFilteredDataSource(source);\n }\n\n private _getFilteredDataSource(dataSource: DataSource<T> | Observable<T[]> | T[]): DataSource<T> | Observable<T[]> | T[] {\n this._filteredNodeOriginals = new WeakMap<object, T>();\n if (!Array.isArray(dataSource) || !this._isFilterActive()) {\n return dataSource;\n }\n\n const filteredData = dataSource\n .map(node => this._filterNode(node))\n .filter((node): node is T => node !== undefined);\n this._expandFilteredNodes(filteredData);\n return filteredData;\n }\n\n private _filterNode(node: T): T | undefined {\n const filterValue = this.filterValue().trim();\n const children = this._getDataNodeChildren(node) ?? [];\n const matches = this.filterPredicate()(node, filterValue);\n\n if (matches && this.filterMode() === 'includeDescendants') {\n return node;\n }\n\n const filteredChildren = children\n .map(child => this._filterNode(child))\n .filter((child): child is T => child !== undefined);\n if (!matches && !filteredChildren.length) {\n return undefined;\n }\n\n if (filteredChildren.length === children.length) {\n return node;\n }\n\n return this._cloneNodeWithChildren(node, filteredChildren);\n }\n\n private _cloneNodeWithChildren(node: T, children: T[]): T {\n const nodeRecord = node as Record<string, unknown> | null | undefined;\n if (!nodeRecord || typeof nodeRecord !== 'object') {\n return node;\n }\n\n const clone = {\n ...nodeRecord,\n [this.childrenKey()]: children,\n } as T;\n this._filteredNodeOriginals.set(clone as object, node);\n return clone;\n }\n\n private _expandFilteredNodes(nodes: T[]) {\n (this as any)._getExpansionModel?.();\n for (const node of nodes) {\n const children = this._getDataNodeChildren(node);\n if (!children?.length) {\n continue;\n }\n\n this.expand(node);\n this._expandFilteredNodes(children);\n }\n }\n\n private _isFilterActive(): boolean {\n return this.filterValue().trim().length > 0;\n }\n\n private _isNodeDescendantOf(node: T, maybeAncestor: T): boolean {\n return this._getCheckableDescendants(maybeAncestor).some(item => this._isSameNode(item, node));\n }\n\n private _isSameNode(first: T, second: T): boolean {\n return first === second || Object.is(this._getTreeNodeDataKey(first), this._getTreeNodeDataKey(second));\n }\n\n private _getDropPosition(event: DragEvent): TreeNodeDropPosition {\n const element = event.currentTarget instanceof HTMLElement\n ? event.currentTarget\n : event.target instanceof HTMLElement\n ? event.target\n : null;\n const rect = element?.getBoundingClientRect();\n if (!rect?.height) {\n return 'inside';\n }\n\n const relativeY = event.clientY - rect.top;\n if (relativeY < rect.height * 0.25) {\n return 'before';\n }\n\n if (relativeY > rect.height * 0.75) {\n return 'after';\n }\n\n return 'inside';\n }\n\n private _clearNodeDrag() {\n this._draggedNode = undefined;\n this._dropTargetKey.set(undefined);\n this._dropTargetPosition.set(undefined);\n }\n\n private _getCheckableDescendants(node: T): T[] {\n const treeControl = this.treeControl as {\n dataNodes?: T[];\n getDescendants?: (node: T) => T[];\n getLevel?: (node: T) => number;\n } | undefined;\n const flatNodes = treeControl?.dataNodes?.length\n ? treeControl.dataNodes\n : ((this as any)._keyManagerNodes?.value ?? (this as any)._flattenedNodes?.value ?? []) as T[];\n\n if (flatNodes.length && treeControl?.getLevel) {\n const nodeKey = this._getTreeNodeKey(node);\n const startIndex = flatNodes.findIndex(item => (\n item === node || this._getTreeNodeKey(item) === nodeKey\n ));\n\n if (startIndex > -1) {\n const descendants: T[] = [];\n const level = treeControl.getLevel(flatNodes[startIndex]);\n for (\n let i = startIndex + 1;\n i < flatNodes.length && treeControl.getLevel(flatNodes[i]) > level;\n i++\n ) {\n descendants.push(flatNodes[i]);\n }\n return descendants;\n }\n }\n\n if (treeControl?.getDescendants) {\n return treeControl.getDescendants(node);\n }\n\n const childrenAccessor = this.childrenAccessor as ((node: T) => T[] | undefined | null) | undefined;\n if (!childrenAccessor) {\n return [];\n }\n\n const descendants: T[] = [];\n const collect = (current: T) => {\n const children = childrenAccessor(current);\n if (!Array.isArray(children)) {\n return;\n }\n\n for (const child of children) {\n descendants.push(child);\n collect(child);\n }\n };\n\n collect(node);\n return descendants;\n }\n\n private _getCheckableNodeKey(node: T): unknown {\n return this._getTreeNodeValue(node);\n }\n\n private _getCheckedValues(): unknown[] {\n return Array.from(this._checkedKeys);\n }\n\n private _syncCheckedParentKeys() {\n const nodes = this._getCheckableNodes();\n for (let i = nodes.length - 1; i >= 0; i--) {\n const node = nodes[i];\n if (this._isNodeDisabled(node)) {\n this._checkedKeys.delete(this._getCheckableNodeKey(node));\n continue;\n }\n\n const descendants = this._getCheckableDescendants(node).filter(item => !this._isNodeDisabled(item));\n if (!descendants.length) {\n continue;\n }\n\n const key = this._getCheckableNodeKey(node);\n if (descendants.every(item => this._checkedKeys.has(this._getCheckableNodeKey(item)))) {\n this._checkedKeys.add(key);\n } else {\n this._checkedKeys.delete(key);\n }\n }\n }\n\n private _getCheckableNodes(): T[] {\n const treeControl = this.treeControl as { dataNodes?: T[] } | undefined;\n const flatNodes = treeControl?.dataNodes?.length\n ? treeControl.dataNodes\n : ((this as any)._keyManagerNodes?.value ?? (this as any)._flattenedNodes?.value ?? []) as T[];\n\n if (flatNodes.length) {\n return flatNodes;\n }\n\n const data = this.dataSource;\n if (!Array.isArray(data)) {\n return [];\n }\n\n const childrenAccessor = this.childrenAccessor as ((node: T) => T[] | undefined | null) | undefined;\n if (!childrenAccessor) {\n return data;\n }\n\n const nodes: T[] = [];\n const collect = (items: T[]) => {\n for (const item of items) {\n nodes.push(item);\n const children = childrenAccessor(item);\n if (Array.isArray(children)) {\n collect(children);\n }\n }\n };\n\n collect(data);\n return nodes;\n }\n\n private _getTreeNodeKey(node: T): unknown {\n const originalNode = this._getOriginalFilterNode(node);\n const treeControl = this.treeControl as { trackBy?: (node: T) => K } | undefined;\n if (treeControl?.trackBy) {\n return treeControl.trackBy(originalNode);\n }\n\n if (this.expansionKey) {\n return this.expansionKey(originalNode);\n }\n\n if (this.trackBy) {\n return this.trackBy(-1, originalNode);\n }\n\n return originalNode;\n }\n\n private _getOriginalFilterNode(node: T): T {\n if (node && typeof node === 'object') {\n return this._filteredNodeOriginals.get(node as object) ?? node;\n }\n\n return node;\n }\n}\n","import {\n CDK_TREE_NODE_OUTLET_NODE, CdkNestedTreeNode,\n CdkTreeNode,\n} from '@angular/cdk/tree';\nimport {\n ApplicationRef,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n ComponentRef,\n createComponent,\n ElementRef,\n EnvironmentInjector,\n HostAttributeToken,\n inject,\n input,\n numberAttribute,\n OnDestroy,\n OnInit,\n PLATFORM_ID,\n effect,\n Renderer2\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { Checkbox, CheckboxChange } from '@ngstarter-ui/components/checkbox';\nimport { Tree } from '../tree/tree';\n\nconst NGS_TREE_NODE_VALUE_UNSET = Symbol('ngs-tree-node-value-unset');\n\nfunction isNoopTreeKeyManager(keyManager: any) {\n return !!keyManager._isNoopTreeKeyManager;\n}\n\nfunction isTreeNodeControlClick(event: MouseEvent, host: HTMLElement): boolean {\n const target = event.target;\n if (!(target instanceof Element)) {\n return false;\n }\n\n const control = target.closest(\n '.ngs-tree-node-checkbox, [ngsTreeNodeToggle], [ngstreenodetoggle]',\n );\n\n return !!control && control !== host;\n}\n\nclass TreeNodeCheckbox<T, K = T> {\n private _isReady = false;\n private _wrapperElement?: HTMLElement;\n private _componentRef?: ComponentRef<Checkbox>;\n private _unlistenClick?: () => void;\n private _unlistenKeydown?: () => void;\n private _changeSubscription?: { unsubscribe: () => void };\n\n constructor(\n private _node: CdkTreeNode<T, K>,\n private _tree: Tree<T, K>,\n private _elementRef: ElementRef<HTMLElement>,\n private _renderer: Renderer2,\n private _appRef: ApplicationRef,\n private _environmentInjector: EnvironmentInjector,\n private _disabled: () => boolean,\n ) {}\n\n enable() {\n this._isReady = true;\n this.sync();\n }\n\n sync() {\n if (!this._isReady) {\n return;\n }\n\n if (!this._tree.checkable()) {\n this.destroy();\n return;\n }\n\n const checkbox = this._ensureCheckbox();\n const node = this._node.data;\n const checked = this._tree._isNodeChecked(node);\n const indeterminate = this._tree._isNodeIndeterminate(node);\n\n checkbox.checked.set(checked);\n checkbox.indeterminate.set(indeterminate);\n checkbox.disabled.set(this._disabled());\n this._componentRef?.changeDetectorRef.detectChanges();\n }\n\n destroy() {\n this._unlistenClick?.();\n this._unlistenClick = undefined;\n this._unlistenKeydown?.();\n this._unlistenKeydown = undefined;\n this._changeSubscription?.unsubscribe();\n this._changeSubscription = undefined;\n if (this._componentRef) {\n this._appRef.detachView(this._componentRef.hostView);\n this._componentRef.destroy();\n this._componentRef = undefined;\n }\n this._wrapperElement?.remove();\n this._wrapperElement = undefined;\n }\n\n private _ensureCheckbox(): Checkbox {\n if (this._componentRef) {\n return this._componentRef.instance;\n }\n\n const existingWrapper = this._elementRef.nativeElement.querySelector(\n ':scope > .ngs-tree-node-checkbox',\n ) as HTMLElement | null;\n const wrapper = existingWrapper ?? this._renderer.createElement('span') as HTMLElement;\n let checkboxHost = wrapper.querySelector(':scope > ngs-checkbox') as HTMLElement | null;\n\n if (!existingWrapper) {\n this._renderer.addClass(wrapper, 'ngs-tree-node-checkbox');\n checkboxHost = this._renderer.createElement('ngs-checkbox') as HTMLElement;\n this._renderer.appendChild(wrapper, checkboxHost);\n this._renderer.insertBefore(\n this._elementRef.nativeElement,\n wrapper,\n this._getCheckboxInsertionReference(),\n );\n } else if (!checkboxHost) {\n checkboxHost = this._renderer.createElement('ngs-checkbox') as HTMLElement;\n this._renderer.appendChild(wrapper, checkboxHost);\n }\n\n while (checkboxHost.firstChild) {\n checkboxHost.firstChild.remove();\n }\n\n this._wrapperElement = wrapper;\n this._componentRef = createComponent(Checkbox, {\n environmentInjector: this._environmentInjector,\n hostElement: checkboxHost,\n });\n this._componentRef.setInput('aria-label', 'Select tree node');\n this._componentRef.setInput('tabIndex', -1);\n this._appRef.attachView(this._componentRef.hostView);\n this._bindCheckboxEvents(wrapper, this._componentRef);\n\n return this._componentRef.instance;\n }\n\n private _getCheckboxInsertionReference(): ChildNode | null {\n const host = this._elementRef.nativeElement;\n const firstElement = host.firstElementChild;\n if (\n firstElement?.matches(\n 'button, [ngsTreeNodeToggle], [ngstreenodetoggle], [ngsIconButton], [ngsiconbutton]',\n )\n ) {\n return firstElement.nextSibling;\n }\n\n return host.firstChild;\n }\n\n private _bindCheckboxEvents(checkboxElement: HTMLElement, checkboxRef: ComponentRef<Checkbox>) {\n this._unlistenClick = this._renderer.listen(checkboxElement, 'click', (event: Event) => {\n event.stopPropagation();\n });\n this._unlistenKeydown = this._renderer.listen(checkboxElement, 'keydown', (event: Event) => {\n event.stopPropagation();\n });\n this._changeSubscription = checkboxRef.instance.change.subscribe((event: CheckboxChange) => {\n this._tree._toggleNodeChecked(this._node.data, event.checked);\n });\n }\n}\n\n@Component({\n selector: 'ngs-tree-node',\n exportAs: 'ngsTreeNode',\n template: '<ng-content />',\n styleUrl: './tree-node.scss',\n standalone: true,\n outputs: ['activation', 'expandedChange'],\n providers: [{ provide: CdkTreeNode, useExisting: TreeNode }],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'ngs-tree-node',\n '[class.ngs-tree-node-selectable]': '_isSelectable()',\n '[class.ngs-tree-node-selected]': '_isSelected()',\n '[class.ngs-tree-node-disabled]': 'disabled()',\n '[class.ngs-tree-node-draggable]': '_isDraggable()',\n '[class.ngs-tree-node-drop-target]': '_isDropTarget()',\n '[class.ngs-tree-node-drop-before]': '_isDropTargetPosition(\"before\")',\n '[class.ngs-tree-node-drop-inside]': '_isDropTargetPosition(\"inside\")',\n '[class.ngs-tree-node-drop-after]': '_isDropTargetPosition(\"after\")',\n '[attr.draggable]': '_getDraggableAttribute()',\n '[attr.aria-expanded]': '_getAriaExpanded()',\n '[attr.aria-level]': 'level + 1',\n '[attr.aria-posinset]': '_getPositionInSet()',\n '[attr.aria-setsize]': '_getSetSize()',\n '[attr.aria-selected]': '_getAriaSelected()',\n '[attr.aria-disabled]': 'disabled()',\n '[attr.aria-grabbed]': '_getAriaGrabbed()',\n '(click)': '_handleNodeClick($event)',\n '(dragstart)': '_handleDragStart($event)',\n '(dragover)': '_handleDragOver($event)',\n '(dragleave)': '_handleDragLeave($event)',\n '(drop)': '_handleDrop($event)',\n '(dragend)': '_handleDragEnd()',\n '[tabindex]': '_getTabindexAttribute()',\n },\n})\nexport class TreeNode<T, K = T> extends CdkTreeNode<T, K> implements OnInit, OnDestroy {\n private _hostElementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private _renderer = inject(Renderer2);\n private _appRef = inject(ApplicationRef);\n private _environmentInjector = inject(EnvironmentInjector);\n private _platformId = inject(PLATFORM_ID);\n private _checkbox: TreeNodeCheckbox<T, K>;\n private _dataChangesSubscription?: { unsubscribe: () => void };\n private _checkboxEnableHandle?: ReturnType<typeof setTimeout>;\n private _registeredDataKey: unknown = NGS_TREE_NODE_VALUE_UNSET;\n\n tabIndexInputBinding = input<number, any>(0, {\n transform: (value: unknown) => (value == null ? 0 : numberAttribute(value)),\n alias: 'tabIndex',\n });\n\n value = input<unknown>(NGS_TREE_NODE_VALUE_UNSET);\n\n disabled = input(false, {\n transform: booleanAttribute\n });\n\n defaultTabIndex = 0;\n\n constructor() {\n super();\n const tree = this._tree as Tree<T, K>;\n this._checkbox = new TreeNodeCheckbox(\n this,\n tree,\n this._hostElementRef,\n this._renderer,\n this._appRef,\n this._environmentInjector,\n () => this.disabled(),\n );\n this._dataChangesSubscription = this._dataChanges.subscribe(() => this._syncNodeState());\n if (isPlatformBrowser(this._platformId)) {\n this._checkboxEnableHandle = setTimeout(() => this._checkbox.enable());\n }\n const tabIndex = inject(new HostAttributeToken('tabindex'), { optional: true });\n (this as any)._tabIndexInputBinding = Number(tabIndex) || this.defaultTabIndex;\n effect(() => {\n this.isDisabled = this.disabled();\n });\n effect(() => {\n tree.checkable();\n tree._checkStateVersion();\n this.disabled();\n this._syncNodeDisabledRegistration();\n this._checkbox.sync();\n });\n effect(() => {\n this.value();\n this._syncNodeState();\n });\n }\n\n _getTabindexAttribute() {\n if (isNoopTreeKeyManager((this._tree as any)._keyManager)) {\n return this.tabIndexInputBinding();\n }\n return (this as any)._tabindex;\n }\n\n _handleNodeClick(event: MouseEvent) {\n this._focusItem();\n this._selectNodeFromEvent(event);\n }\n\n _isSelectable(): boolean {\n return (this._tree as Tree<T, K>).selectable() && !this.disabled();\n }\n\n _isSelected(): boolean {\n const tree = this._tree as Tree<T, K>;\n return tree.selectable() && tree._isNodeSelected(this.data);\n }\n\n _getAriaSelected(): boolean | null {\n return (this._tree as Tree<T, K>).selectable() ? this._isSelected() : null;\n }\n\n _isDraggable(): boolean {\n return (this._tree as Tree<T, K>)._canDragNode(this.data);\n }\n\n _isDropTarget(): boolean {\n return (this._tree as Tree<T, K>)._isNodeDropTarget(this.data);\n }\n\n _isDropTargetPosition(position: 'before' | 'inside' | 'after'): boolean {\n return (this._tree as Tree<T, K>)._isNodeDropTargetPosition(this.data, position);\n }\n\n _getDraggableAttribute(): true | null {\n return this._isDraggable() ? true : null;\n }\n\n _getAriaGrabbed(): boolean | null {\n return (this._tree as Tree<T, K>).draggable() ? false : null;\n }\n\n _handleDragStart(event: DragEvent) {\n (this._tree as Tree<T, K>)._startNodeDrag(this.data, event);\n }\n\n _handleDragOver(event: DragEvent) {\n (this._tree as Tree<T, K>)._dragNodeOver(this.data, event);\n }\n\n _handleDragLeave(event: DragEvent) {\n (this._tree as Tree<T, K>)._dragNodeLeave(this.data, event);\n }\n\n _handleDrop(event: DragEvent) {\n (this._tree as Tree<T, K>)._dropNodeInto(this.data, event);\n }\n\n _handleDragEnd() {\n (this._tree as Tree<T, K>)._endNodeDrag();\n }\n\n private _selectNodeFromEvent(event: MouseEvent) {\n if (!this._isSelectable() || this._isTreeControlClick(event)) {\n return;\n }\n\n (this._tree as Tree<T, K>)._selectNode(this.data);\n }\n\n private _isTreeControlClick(event: MouseEvent): boolean {\n return isTreeNodeControlClick(event, this._hostElementRef.nativeElement);\n }\n\n private _syncNodeState() {\n this._syncNodeValueRegistration();\n this._syncNodeDisabledRegistration();\n this._checkbox.sync();\n }\n\n private _syncNodeValueRegistration() {\n if (this.data === undefined) {\n return;\n }\n\n const tree = this._tree as Tree<T, K>;\n const key = tree._getTreeNodeDataKey(this.data);\n if (this._registeredDataKey !== NGS_TREE_NODE_VALUE_UNSET && !Object.is(this._registeredDataKey, key)) {\n tree._unregisterNodeValueByDataKey(this._registeredDataKey);\n tree._unregisterNodeDisabledByDataKey(this._registeredDataKey);\n }\n\n this._registeredDataKey = key;\n if (this.value() === NGS_TREE_NODE_VALUE_UNSET) {\n tree._unregisterNodeValueByDataKey(key);\n } else {\n tree._registerNodeValue(this.data, this.value());\n }\n }\n\n private _syncNodeDisabledRegistration() {\n if (this.data === undefined) {\n return;\n }\n\n (this._tree as Tree<T, K>)._registerNodeDisabled(this.data, this.disabled());\n }\n\n override ngOnInit() {\n super.ngOnInit();\n this._syncNodeState();\n }\n\n override ngOnDestroy() {\n if (this._checkboxEnableHandle) {\n clearTimeout(this._checkboxEnableHandle);\n }\n this._dataChangesSubscription?.unsubscribe();\n if (this._registeredDataKey !== NGS_TREE_NODE_VALUE_UNSET) {\n (this._tree as Tree<T, K>)._unregisterNodeValueByDataKey(this._registeredDataKey);\n (this._tree as Tree<T, K>)._unregisterNodeDisabledByDataKey(this._registeredDataKey);\n }\n this._checkbox.destroy();\n super.ngOnDestroy();\n }\n}\n\n@Component({\n selector: 'ngs-nested-tree-node',\n exportAs: 'ngsNestedTreeNode',\n template: '<ng-content />',\n styleUrl: './tree-node.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n outputs: ['activation', 'expandedChange'],\n providers: [\n { provide: CdkNestedTreeNode, useExisting: NestedTreeNode },\n { provide: CdkTreeNode, useExisting: NestedTreeNode },\n { provide: CDK_TREE_NODE_OUTLET_NODE, useExisting: NestedTreeNode },\n ],\n host: {\n 'class': 'ngs-nested-tree-node',\n '[class.ngs-tree-node-selectable]': '_isSelectable()',\n '[class.ngs-tree-node-selected]': '_isSelected()',\n '[class.ngs-tree-node-disabled]': 'disabled()',\n '[class.ngs-tree-node-draggable]': '_isDraggable()',\n '[class.ngs-tree-node-drop-target]': '_isDropTarget()',\n '[class.ngs-tree-node-drop-before]': '_isDropTargetPosition(\"before\")',\n '[class.ngs-tree-node-drop-inside]': '_isDropTargetPosition(\"inside\")',\n '[class.ngs-tree-node-drop-after]': '_isDropTargetPosition(\"after\")',\n '[attr.draggable]': '_getDraggableAttribute()',\n '[attr.aria-selected]': '_getAriaSelected()',\n '[attr.aria-disabled]': 'disabled()',\n '[attr.aria-grabbed]': '_getAriaGrabbed()',\n '(click)': '_handleNodeClick($event)',\n '(dragstart)': '_handleDragStart($event)',\n '(dragover)': '_handleDragOver($event)',\n '(dragleave)': '_handleDragLeave($event)',\n '(drop)': '_handleDrop($event)',\n '(dragend)': '_handleDragEnd()',\n },\n})\nexport class NestedTreeNode<T, K = T> extends CdkNestedTreeNode<T, K> implements OnInit, OnDestroy {\n private _hostElementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private _renderer = inject(Renderer2);\n private _appRef = inject(ApplicationRef);\n private _environmentInjector = inject(EnvironmentInjector);\n private _platformId = inject(PLATFORM_ID);\n private _checkbox: TreeNodeCheckbox<T, K>;\n private _dataChangesSubscription?: { unsubscribe: () => void };\n private _checkboxEnableHandle?: ReturnType<typeof setTimeout>;\n private _registeredDataKey: unknown = NGS_TREE_NODE_VALUE_UNSET;\n\n node = input<T>(undefined!, {\n alias: 'ngsNestedTreeNode'\n });\n\n value = input<unknown>(NGS_TREE_NODE_VALUE_UNSET);\n\n disabled = input(false, {\n transform: booleanAttribute\n });\n\n tabIndexInput = input<number, any>(0, {\n alias: 'tabIndex',\n transform: (value: any) => (value == null ? 0 : numberAttribute(value))\n });\n\n constructor() {\n super();\n const tree = this._tree as Tree<T, K>;\n this._checkbox = new TreeNodeCheckbox(\n this,\n tree,\n this._hostElementRef,\n this._renderer,\n this._appRef,\n this._environmentInjector,\n () => this.disabled(),\n );\n this._dataChangesSubscription = this._dataChanges.subscribe(() => this._syncNodeState());\n if (isPlatformBrowser(this._platformId)) {\n this._checkboxEnableHandle = setTimeout(() => this._checkbox.enable());\n }\n effect(() => {\n this.isDisabled = this.disabled();\n });\n effect(() => {\n tree.checkable();\n tree._checkStateVersion();\n this.disabled();\n this._syncNodeDisabledRegistration();\n this._checkbox.sync();\n });\n effect(() => {\n this.value();\n this._syncNodeState();\n });\n }\n\n get tabIndex(): number {\n return this.isDisabled ? -1 : this.tabIndexInput();\n }\n\n _handleNodeClick(event: MouseEvent) {\n (this as any)._focusItem?.();\n this._selectNodeFromEvent(event);\n }\n\n _isSelectable(): boolean {\n return (this._tree as Tree<T, K>).selectable() && !this.disabled();\n }\n\n _isSelected(): boolean {\n const tree = this._tree as Tree<T, K>;\n return tree.selectable() && tree._isNodeSelected(this.data);\n }\n\n _getAriaSelected(): boolean | null {\n return (this._tree as Tree<T, K>).selectable() ? this._isSelected() : null;\n }\n\n _isDraggable(): boolean {\n return (this._tree as Tree<T, K>)._canDragNode(this.data);\n }\n\n _isDropTarget(): boolean {\n return (this._tree as Tree<T, K>)._isNodeDropTarget(this.data);\n }\n\n _isDropTargetPosition(position: 'before' | 'inside' | 'after'): boolean {\n return (this._tree as Tree<T, K>)._isNodeDropTargetPosition(this.data, position);\n }\n\n _getDraggableAttribute(): true | null {\n return this._isDraggable() ? true : null;\n }\n\n _getAriaGrabbed(): boolean | null {\n return (this._tree as Tree<T, K>).draggable() ? false : null;\n }\n\n _handleDragStart(event: DragEvent) {\n (this._tree as Tree<T, K>)._startNodeDrag(this.data, event);\n }\n\n _handleDragOver(event: DragEvent) {\n (this._tree as Tree<T, K>)._dragNodeOver(this.data, event);\n }\n\n _handleDragLeave(event: DragEvent) {\n (this._tree as Tree<T, K>)._dragNodeLeave(this.data, event);\n }\n\n _handleDrop(event: DragEvent) {\n (this._tree as Tree<T, K>)._dropNodeInto(this.data, event);\n }\n\n _handleDragEnd() {\n (this._tree as Tree<T, K>)._endNodeDrag();\n }\n\n private _selectNodeFromEvent(event: MouseEvent) {\n if (!this._isSelectable() || this._isTreeControlClick(event)) {\n return;\n }\n\n (this._tree as Tree<T, K>)._selectNode(this.data);\n }\n\n private _isTreeControlClick(event: MouseEvent): boolean {\n return isTreeNodeControlClick(event, this._hostElementRef.nativeElement);\n }\n\n private _syncNodeState() {\n this._syncNodeValueRegistration();\n this._syncNodeDisabledRegistration();\n this._checkbox.sync();\n }\n\n private _syncNodeValueRegistration() {\n if (this.data === undefined) {\n return;\n }\n\n const tree = this._tree as Tree<T, K>;\n const key = tree._getTreeNodeDataKey(this.data);\n if (this._registeredDataKey !== NGS_TREE_NODE_VALUE_UNSET && !Object.is(this._registeredDataKey, key)) {\n tree._unregisterNodeValueByDataKey(this._registeredDataKey);\n tree._unregisterNodeDisabledByDataKey(this._registeredDataKey);\n }\n\n this._registeredDataKey = key;\n if (this.value() === NGS_TREE_NODE_VALUE_UNSET) {\n tree._unregisterNodeValueByDataKey(key);\n } else {\n tree._registerNodeValue(this.data, this.value());\n }\n }\n\n private _syncNodeDisabledRegistration() {\n if (this.data === undefined) {\n return;\n }\n\n (this._tree as Tree<T, K>)._registerNodeDisabled(this.data, this.disabled());\n }\n\n override ngOnInit() {\n super.ngOnInit();\n this._syncNodeState();\n }\n\n override ngAfterContentInit() {\n super.ngAfterContentInit();\n }\n\n override ngOnDestroy() {\n if (this._checkboxEnableHandle) {\n clearTimeout(this._checkboxEnableHandle);\n }\n this._dataChangesSubscription?.unsubscribe();\n if (this._registeredDataKey !== NGS_TREE_NODE_VALUE_UNSET) {\n (this._tree as Tree<T, K>)._unregisterNodeValueByDataKey(this._registeredDataKey);\n (this._tree as Tree<T, K>)._unregisterNodeDisabledByDataKey(this._registeredDataKey);\n }\n this._checkbox.destroy();\n super.ngOnDestroy();\n }\n}\n","import { CdkTreeNodePadding } from '@angular/cdk/tree';\nimport { Directive, effect, input, numberAttribute } from '@angular/core';\n\n@Directive({\n selector: '[ngsTreeNodePadding]',\n providers: [{ provide: CdkTreeNodePadding, useExisting: TreeNodePadding }],\n standalone: true\n})\nexport class TreeNodePadding<T, K = T> extends CdkTreeNodePadding<T, K> {\n levelInput = input<number, any>(0, {\n alias: 'ngsTreeNodePadding',\n transform: numberAttribute\n });\n\n indentInput = input<number | string>(40, {\n alias: 'ngsTreeNodePaddingIndent'\n });\n\n constructor() {\n super();\n effect(() => {\n this.level = this.levelInput();\n });\n effect(() => {\n this._setIndentInput(this.indentInput());\n });\n }\n}\n","import { CdkTreeNodeToggle } from '@angular/cdk/tree';\nimport { Directive, Input } from '@angular/core';\n\n@Directive({\n selector: '[ngsTreeNodeToggle]',\n providers: [{ provide: CdkTreeNodeToggle, useExisting: TreeNodeToggle }],\n inputs: [{ name: 'recursive', alias: 'ngsTreeNodeToggleRecursive' }],\n standalone: true\n})\nexport class TreeNodeToggle<T, K = T> extends CdkTreeNodeToggle<T, K> {\n}\n","import { CdkTreeNodeDef } from '@angular/cdk/tree';\nimport { Directive, input } from '@angular/core';\n\n@Directive({\n selector: '[ngsTreeNodeDef]',\n inputs: [{ name: 'when', alias: 'ngsTreeNodeDefWhen' }],\n providers: [{ provide: CdkTreeNodeDef, useExisting: TreeNodeDef }],\n standalone: true\n})\nexport class TreeNodeDef<T> extends CdkTreeNodeDef<T> {\n data = input<T>(undefined!, {\n alias: 'ngsTreeNode'\n });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ngstarter-ui/components",
3
3
  "description": "NgStarter - AI-friendly Enterprise Angular UI Components and Admin Panel",
4
- "version": "21.0.26",
4
+ "version": "21.0.27",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "https://github.com/elementarlabsdev/ngstarter.git"
@@ -1,6 +1,8 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
  import { ViewContainerRef, OnInit, OnDestroy } from '@angular/core';
3
+ import { DataSource } from '@angular/cdk/collections';
3
4
  import { CdkTree, CdkTreeNodeOutlet, CdkNestedTreeNode, CdkTreeNode, CdkTreeNodePadding, CdkTreeNodeToggle, CdkTreeNodeDef } from '@angular/cdk/tree';
5
+ import { Observable } from 'rxjs';
4
6
 
5
7
  declare class TreeNodeOutlet implements CdkTreeNodeOutlet {
6
8
  viewContainer: ViewContainerRef;
@@ -17,11 +19,18 @@ interface TreeNodeDrop<T> {
17
19
  dataSource: T[];
18
20
  }
19
21
  type TreeNodeDropPosition = 'before' | 'inside' | 'after';
22
+ type TreeFilterMode = 'includeAncestors' | 'includeDescendants';
23
+ type TreeFilterPredicate<T> = (node: T, filterValue: string) => boolean;
20
24
  declare class Tree<T, K = T> extends CdkTree<T, K> {
25
+ get dataSource(): DataSource<T> | Observable<T[]> | T[];
26
+ set dataSource(dataSource: DataSource<T> | Observable<T[]> | T[]);
21
27
  checkable: _angular_core.InputSignalWithTransform<boolean, unknown>;
22
28
  selectable: _angular_core.InputSignalWithTransform<boolean, unknown>;
23
29
  draggable: _angular_core.InputSignalWithTransform<boolean, unknown>;
24
30
  childrenKey: _angular_core.InputSignal<string>;
31
+ filterValue: _angular_core.InputSignalWithTransform<string, unknown>;
32
+ filterPredicate: _angular_core.InputSignal<TreeFilterPredicate<T>>;
33
+ filterMode: _angular_core.InputSignal<TreeFilterMode>;
25
34
  readonly checkedChange: _angular_core.OutputEmitterRef<unknown[]>;
26
35
  readonly selectedChange: _angular_core.OutputEmitterRef<unknown>;
27
36
  readonly nodeDrop: _angular_core.OutputEmitterRef<TreeNodeDrop<T>>;
@@ -34,7 +43,10 @@ declare class Tree<T, K = T> extends CdkTree<T, K> {
34
43
  private _disabledDataKeys;
35
44
  private _enabledDataKeys;
36
45
  private _draggedNode?;
46
+ private _sourceDataSource?;
47
+ private _filteredNodeOriginals;
37
48
  _nodeOutlet: TreeNodeOutlet;
49
+ constructor();
38
50
  _toggleNodeChecked(node: T, checked: boolean): void;
39
51
  _isNodeChecked(node: T): boolean;
40
52
  _isNodeIndeterminate(node: T): boolean;
@@ -65,6 +77,12 @@ declare class Tree<T, K = T> extends CdkTree<T, K> {
65
77
  private _getDataNodeChildren;
66
78
  private _getMutableNodeChildren;
67
79
  private _refreshTreeData;
80
+ private _applyFilteredDataSource;
81
+ private _getFilteredDataSource;
82
+ private _filterNode;
83
+ private _cloneNodeWithChildren;
84
+ private _expandFilteredNodes;
85
+ private _isFilterActive;
68
86
  private _isNodeDescendantOf;
69
87
  private _isSameNode;
70
88
  private _getDropPosition;
@@ -75,8 +93,9 @@ declare class Tree<T, K = T> extends CdkTree<T, K> {
75
93
  private _syncCheckedParentKeys;
76
94
  private _getCheckableNodes;
77
95
  private _getTreeNodeKey;
96
+ private _getOriginalFilterNode;
78
97
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<Tree<any, any>, never>;
79
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<Tree<any, any>, "ngs-tree", ["ngsTree"], { "checkable": { "alias": "checkable"; "required": false; "isSignal": true; }; "selectable": { "alias": "selectable"; "required": false; "isSignal": true; }; "draggable": { "alias": "draggable"; "required": false; "isSignal": true; }; "childrenKey": { "alias": "childrenKey"; "required": false; "isSignal": true; }; }, { "checkedChange": "checkedChange"; "selectedChange": "selectedChange"; "nodeDrop": "nodeDrop"; }, never, never, true, never>;
98
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<Tree<any, any>, "ngs-tree", ["ngsTree"], { "checkable": { "alias": "checkable"; "required": false; "isSignal": true; }; "selectable": { "alias": "selectable"; "required": false; "isSignal": true; }; "draggable": { "alias": "draggable"; "required": false; "isSignal": true; }; "childrenKey": { "alias": "childrenKey"; "required": false; "isSignal": true; }; "filterValue": { "alias": "filterValue"; "required": false; "isSignal": true; }; "filterPredicate": { "alias": "filterPredicate"; "required": false; "isSignal": true; }; "filterMode": { "alias": "filterMode"; "required": false; "isSignal": true; }; }, { "checkedChange": "checkedChange"; "selectedChange": "selectedChange"; "nodeDrop": "nodeDrop"; }, never, never, true, never>;
80
99
  }
81
100
 
82
101
  declare class TreeNode<T, K = T> extends CdkTreeNode<T, K> implements OnInit, OnDestroy {
@@ -181,4 +200,4 @@ declare class TreeNodeDef<T> extends CdkTreeNodeDef<T> {
181
200
  }
182
201
 
183
202
  export { NestedTreeNode, Tree, TreeNode, TreeNodeDef, TreeNodeOutlet, TreeNodePadding, TreeNodeToggle };
184
- export type { TreeNodeDrop, TreeNodeDropPosition };
203
+ export type { TreeFilterMode, TreeFilterPredicate, TreeNodeDrop, TreeNodeDropPosition };