ngx-tethys 19.0.6 → 19.0.7

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.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,15 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [commit-and-tag-version](https://github.com/absolute-version/commit-and-tag-version) for commit guidelines.
4
4
 
5
+ ## [19.0.7](https://github.com/atinc/ngx-tethys/compare/19.0.6...19.0.7) (2025-04-24)
6
+
7
+
8
+ ### Bug Fixes
9
+
10
+ * **tree:** the parameters provided by IThyTreeService are incomplete #TINFR-1854 ([#3361](https://github.com/atinc/ngx-tethys/issues/3361)) ([40ae7ac](https://github.com/atinc/ngx-tethys/commit/40ae7ac1ba68592851bf43de0ddaade6b66cac85)), closes [#TINFR-1854](https://github.com/atinc/ngx-tethys/issues/TINFR-1854)
11
+
12
+
13
+
5
14
  ## [19.0.6](https://github.com/atinc/ngx-tethys/compare/19.0.5...19.0.6) (2025-04-23)
6
15
 
7
16
 
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-tethys-tree.mjs","sources":["../../../src/tree/tree-abstract.ts","../../../src/tree/tree.class.ts","../../../src/tree/tree.service.ts","../../../src/tree/tree-node.component.ts","../../../src/tree/tree-node.component.html","../../../src/tree/tree.pipe.ts","../../../src/tree/tree.component.ts","../../../src/tree/tree.component.html","../../../src/tree/tree.module.ts","../../../src/tree/ngx-tethys-tree.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { ThyTreeNode } from './tree.class';\nimport { ThyTreeBeforeDragDropContext, ThyTreeBeforeDragStartContext, ThyTreeDragDropEvent, ThyTreeIcons } from './tree.class';\n\nexport interface ThyTreeAbstractComponent {\n thyMultiple: boolean;\n thyDraggable: boolean;\n thyShowExpand: boolean;\n treeNodes: ThyTreeNode[];\n thyIcons: ThyTreeIcons;\n thyBeforeDragStart(e: ThyTreeBeforeDragStartContext): boolean;\n thyBeforeDragDrop(e: ThyTreeBeforeDragDropContext): boolean;\n onDragDrop(event: ThyTreeDragDropEvent): void;\n selectTreeNode(node: ThyTreeNode): void;\n toggleTreeNode(node: ThyTreeNode): void;\n isShowExpand(node: ThyTreeNode): boolean;\n trackByFn(number: string, node: ThyTreeNode): string | number;\n isSelected(node: ThyTreeNode): boolean;\n}\n\nexport const THY_TREE_ABSTRACT_TOKEN = new InjectionToken<ThyTreeAbstractComponent>('thy-tree-abstract-token');\n","import { helpers, isArray } from 'ngx-tethys/util';\nimport { Subject } from 'rxjs';\n\nexport enum ThyTreeNodeCheckState {\n unchecked = 0,\n checked = 1,\n indeterminate = 2\n}\n\nexport enum ThyTreeDropPosition {\n in = 'in',\n before = 'before',\n after = 'after'\n}\n\nexport interface ThyTreeNodeData<T = any> {\n key?: number | string;\n\n title?: string;\n\n icon?: string;\n\n iconStyle?: {\n [key: string]: any;\n };\n\n children?: ThyTreeNodeData<T>[];\n\n origin?: any;\n\n expanded?: boolean;\n\n disabled?: boolean;\n\n checked?: boolean;\n\n data?: T;\n\n itemClass?: string | string[];\n\n [key: string]: any;\n}\n\nexport interface ThyTreeEmitEvent<T = any> {\n eventName: string;\n\n node?: ThyTreeNode<T>;\n\n event?: Event | any;\n\n dragNode?: ThyTreeNode<T>;\n\n targetNode?: ThyTreeNode<T>;\n}\n\nexport interface ThyTreeBeforeDragStartContext {\n item: ThyTreeNode;\n}\n\nexport interface ThyTreeBeforeDragDropContext {\n item?: ThyTreeNode;\n containerItems?: ThyTreeNode[];\n previousItem?: ThyTreeNode;\n previousContainerItems?: ThyTreeNode[];\n position?: ThyTreeDropPosition;\n}\n\nexport interface ThyTreeDragDropEvent<T = any> {\n dragNode?: ThyTreeNode<T>;\n\n targetNode?: ThyTreeNode<T>;\n\n afterNode?: ThyTreeNode<T>;\n}\n\nexport class ThyTreeIcons {\n expand?: string;\n collapse?: string;\n}\n\nexport type ThyClickBehavior = 'default' | 'selectCheckbox';\n\nexport interface ThyTreeFormatEmitEvent {\n eventName: string;\n node: ThyTreeNode;\n event?: MouseEvent | DragEvent;\n}\n\nexport interface IThyTreeService {\n statusChange$: Subject<ThyTreeFormatEmitEvent>;\n syncFlattenTreeNodes: () => ThyTreeNode[];\n setNodeChecked: (node: ThyTreeNode, checked: boolean, propagateUp?: boolean, propagateDown?: boolean) => void;\n syncNodeCheckState: (node: ThyTreeNode) => void;\n checkStateResolve: (node: ThyTreeNode) => ThyTreeNodeCheckState;\n}\n\nexport class ThyTreeNode<T = any> {\n key?: number | string;\n\n title?: string;\n\n children: ThyTreeNode[];\n\n parentNode: ThyTreeNode;\n\n level = 0;\n\n origin: ThyTreeNodeData<T>;\n\n isExpanded: boolean;\n\n isChecked: ThyTreeNodeCheckState;\n\n isLoading: boolean;\n\n isDisabled: boolean;\n\n itemClass?: string[];\n\n private readonly service: IThyTreeService;\n\n get treeService(): IThyTreeService {\n if (this.service) {\n return this.service;\n } else if (this.parentNode) {\n return this.parentNode.treeService;\n }\n }\n\n constructor(node: ThyTreeNodeData, parent: ThyTreeNode = null, service?: IThyTreeService) {\n this.title = node.title;\n this.key = node.key;\n this.children = [];\n this.parentNode = parent;\n this.level = parent ? parent.level + 1 : this.level;\n this.origin = node;\n this.isDisabled = node.disabled || false;\n this.isExpanded = node.expanded || false;\n this.isChecked = node.checked ? ThyTreeNodeCheckState.checked : ThyTreeNodeCheckState.unchecked;\n this.isLoading = false;\n if (node.itemClass) {\n this.itemClass = isArray(node.itemClass) ? node.itemClass : [node.itemClass];\n }\n if (node.children) {\n node.children.forEach(childNode => {\n this.children.push(new ThyTreeNode(childNode, this, service));\n });\n }\n this.service = service;\n if (node.children && node.children.length && service) {\n this.isChecked = service.checkStateResolve(this);\n }\n }\n\n public setKey(key: string) {\n this.origin.key = key;\n this.key = key;\n }\n\n public setTitle(title: string) {\n this.origin.title = title;\n this.title = title;\n }\n\n public setLevel(level: number) {\n this.level = level;\n }\n\n private _setExpanded(expanded: boolean, propagate = false) {\n this.origin.expanded = expanded;\n this.isExpanded = expanded;\n if (propagate && this.children) {\n this.children.forEach(n => n._setExpanded(expanded, propagate));\n }\n }\n\n public setExpanded(expanded: boolean, propagate = false) {\n this._setExpanded(expanded, propagate);\n this.treeService.syncFlattenTreeNodes();\n }\n\n public setLoading(loading: boolean): void {\n this.isLoading = loading;\n this.treeService.syncFlattenTreeNodes();\n }\n\n public setChecked(checked: boolean, propagateUp = true, propagateDown = true) {\n this.treeService.setNodeChecked(this, checked, propagateUp, propagateDown);\n }\n\n public syncNodeCheckState() {\n this.treeService.syncNodeCheckState(this);\n }\n\n public getParentNode(): ThyTreeNode {\n return this.parentNode;\n }\n\n public getChildren(): ThyTreeNode[] {\n return this.children;\n }\n\n public addChildren(children: ThyTreeNodeData | ThyTreeNodeData[], index: number = -1): void {\n children = helpers.coerceArray(children);\n ((children as ThyTreeNodeData[]) || []).forEach((childNode: ThyTreeNodeData, i: number) => {\n if (index === -1) {\n this.children.push(new ThyTreeNode(childNode, this));\n } else {\n this.children.splice(index + i, 0, new ThyTreeNode(childNode, this, this.treeService));\n }\n });\n\n this.origin.children = this.getChildren().map(n => n.origin);\n this.setLoading(false);\n this.treeService.statusChange$.next({\n eventName: 'addChildren',\n node: this\n });\n }\n}\n","import { coerceArray, isFunction } from 'ngx-tethys/util';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport { Injectable, OnDestroy } from '@angular/core';\nimport { ThyTreeNodeCheckState, ThyTreeNodeData, ThyTreeNode, IThyTreeService, ThyTreeFormatEmitEvent } from './tree.class';\n\nfunction checkStateResolve(node: ThyTreeNode) {\n const checkedNodes = node.children.filter(n => n.isChecked === ThyTreeNodeCheckState.checked);\n const unCheckedNodes = node.children.filter(n => n.isChecked === ThyTreeNodeCheckState.unchecked);\n if (checkedNodes.length === node.children.length) {\n return ThyTreeNodeCheckState.checked;\n } else if (unCheckedNodes.length === node.children.length) {\n return ThyTreeNodeCheckState.unchecked;\n } else {\n return ThyTreeNodeCheckState.indeterminate;\n }\n}\n\ntype FlattenAllNodesCb = (treeNode: ThyTreeNode) => boolean;\n\n/**\n * @internal\n */\n@Injectable()\nexport class ThyTreeService implements IThyTreeService, OnDestroy {\n selectedNode!: ThyTreeNode;\n\n flattenNodes$ = new BehaviorSubject<ThyTreeNode[]>([]);\n\n flattenTreeNodes: ThyTreeNode[] = [];\n\n private originTreeNodes: ThyTreeNodeData[] = [];\n\n public treeNodes: ThyTreeNode[] = [];\n\n public checkStateResolve: (node: ThyTreeNode) => ThyTreeNodeCheckState = checkStateResolve;\n\n statusChange$ = new Subject<ThyTreeFormatEmitEvent>();\n\n constructor() {\n this.statusChange$.pipe().subscribe(event => {\n this.syncFlattenTreeNodes();\n this.syncNodeCheckState(event.node);\n });\n }\n\n public initializeTreeNodes(rootNodes: ThyTreeNodeData[]) {\n this.originTreeNodes = rootNodes || [];\n this.treeNodes = (rootNodes || []).map(node => new ThyTreeNode(node, null, this));\n }\n\n public syncFlattenTreeNodes(): ThyTreeNode[] {\n this.flattenTreeNodes = this.getParallelTreeNodes(this.treeNodes, false);\n this.flattenNodes$.next(this.flattenTreeNodes);\n return this.flattenTreeNodes;\n }\n\n private getParallelTreeNodes(rootTrees: ThyTreeNode[] = this.treeNodes, flattenAllNodes: boolean | FlattenAllNodesCb = true) {\n const flattenTreeData: ThyTreeNode[] = [];\n function _getParallelTreeNodes(list: ThyTreeNode[]) {\n return list.forEach((treeNode, index) => {\n flattenTreeData.push(treeNode);\n const flattenAllNodesFlag = isFunction(flattenAllNodes) ? flattenAllNodes(treeNode) : flattenAllNodes;\n if (flattenAllNodesFlag || treeNode.isExpanded) {\n _getParallelTreeNodes(treeNode.children);\n }\n });\n }\n _getParallelTreeNodes(rootTrees);\n return flattenTreeData;\n }\n\n setCheckStateResolve(resolve: (node: ThyTreeNode) => ThyTreeNodeCheckState = checkStateResolve) {\n this.checkStateResolve = resolve;\n }\n\n public resetSortedTreeNodes(treeNodes: ThyTreeNode[], parent?: ThyTreeNode) {\n treeNodes.forEach(node => {\n node.level = node.parentNode ? node.parentNode.level + 1 : 0;\n node.origin.children = node.children.map(n => n.origin);\n node.parentNode = parent;\n this.resetSortedTreeNodes(node.children, node);\n });\n }\n\n public getTreeNode(key: string | number) {\n const allNodes = this.getParallelTreeNodes(this.treeNodes);\n return allNodes.find(n => n.key === key);\n }\n\n public getExpandedNodes(): ThyTreeNode[] {\n const allNodes = this.getParallelTreeNodes(this.treeNodes);\n return allNodes.filter(n => n.isExpanded);\n }\n\n public getCheckedNodes(): ThyTreeNode[] {\n const allNodes = this.getParallelTreeNodes(this.treeNodes);\n return allNodes.filter(n => n.isChecked === ThyTreeNodeCheckState.checked);\n }\n\n public deleteTreeNode(node: ThyTreeNode) {\n if (node.parentNode) {\n const children = node.parentNode.children;\n const index = children.findIndex(n => n.key === node.key);\n if (index > -1) {\n children.splice(index, 1);\n node.parentNode.origin.children = children.map(item => item.origin);\n this.syncNodeCheckState(node.parentNode);\n }\n } else {\n const index = this.treeNodes.findIndex(n => n.key === node.key);\n if (index > -1) {\n this.treeNodes.splice(index, 1);\n this.originTreeNodes.splice(index, 1);\n }\n }\n }\n\n public addTreeNode(node: ThyTreeNode, parent?: ThyTreeNode, index = -1) {\n if (parent) {\n const insertNode = new ThyTreeNode(node.origin, parent, this);\n if (index > -1) {\n parent.children.splice(index, 0, insertNode);\n } else {\n parent.children.push(insertNode);\n }\n parent.origin.children = parent.children.map(item => item.origin);\n this.syncNodeCheckState(parent);\n } else {\n const insertNode = new ThyTreeNode(node.origin, null, this);\n if (index > -1) {\n this.treeNodes.splice(index, 0, insertNode);\n } else {\n this.treeNodes.push(insertNode);\n }\n this.originTreeNodes = this.treeNodes.map(item => item.origin);\n // this.syncNodeCheckState(insertNode);\n }\n }\n\n public expandTreeNodes(keyOrKeys: string | number | (string | number)[] | true) {\n const keys = keyOrKeys === true ? [] : coerceArray(keyOrKeys);\n const needExpandNodes = this.getParallelTreeNodes(this.treeNodes).filter(node => {\n return keys.indexOf(node.key) > -1 || keyOrKeys === true;\n });\n needExpandNodes.forEach(node => {\n node.setExpanded(true);\n });\n this.syncFlattenTreeNodes();\n }\n\n // 设置节点选中状态\n public setNodeChecked(node: ThyTreeNode, checked: boolean, propagateUp = true, propagateDown = true): void {\n this._setNodeChecked(node, checked, propagateUp, propagateDown);\n this.syncFlattenTreeNodes();\n }\n\n private _setNodeChecked(node: ThyTreeNode, checked: boolean, propagateUp = true, propagateDown = true) {\n if (propagateDown && node.children) {\n node.children.forEach(subNode => {\n this._setNodeChecked(subNode, checked, false, true);\n });\n }\n if (!node.isDisabled) {\n if (node.children.length) {\n if (checked) {\n const isAllChildrenChecked = node.children.every(item => item.isChecked === ThyTreeNodeCheckState.checked);\n node.isChecked = isAllChildrenChecked ? ThyTreeNodeCheckState.checked : ThyTreeNodeCheckState.indeterminate;\n node.origin.checked = isAllChildrenChecked && checked;\n } else {\n const isAllChildrenUnChecked = node.children.every(item => item.isChecked === ThyTreeNodeCheckState.unchecked);\n node.isChecked = isAllChildrenUnChecked ? ThyTreeNodeCheckState.unchecked : ThyTreeNodeCheckState.indeterminate;\n node.origin.checked = isAllChildrenUnChecked && checked;\n }\n } else {\n node.isChecked = checked ? ThyTreeNodeCheckState.checked : ThyTreeNodeCheckState.unchecked;\n node.origin.checked = checked;\n }\n }\n if (propagateUp) {\n this._syncNodeCheckState(node.parentNode);\n }\n }\n\n public syncNodeCheckState(node: ThyTreeNode): void {\n this._syncNodeCheckState(node);\n this.syncFlattenTreeNodes();\n }\n\n private _syncNodeCheckState(node: ThyTreeNode) {\n if (node) {\n node.isChecked = this.checkStateResolve(node);\n this._syncNodeCheckState(node.parentNode);\n }\n }\n\n ngOnDestroy(): void {\n this.statusChange$.complete();\n this.statusChange$ = null;\n }\n}\n","import { Subject } from 'rxjs';\nimport {\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n HostBinding,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n ViewEncapsulation,\n numberAttribute,\n inject\n} from '@angular/core';\n\nimport { THY_TREE_ABSTRACT_TOKEN } from './tree-abstract';\nimport { ThyTreeNode } from './tree.class';\nimport { ThyTreeEmitEvent, ThyTreeNodeCheckState, ThyClickBehavior } from './tree.class';\nimport { ThyTreeService } from './tree.service';\nimport { ThyLoading } from 'ngx-tethys/loading';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { NgClass, NgStyle, NgTemplateOutlet } from '@angular/common';\nimport { coerceBooleanProperty } from 'ngx-tethys/util';\n\n/**\n * 树形控件的节点组件\n * @private\n * @name thy-tree-node\n */\n@Component({\n selector: 'thy-tree-node',\n templateUrl: './tree-node.component.html',\n encapsulation: ViewEncapsulation.None,\n imports: [ThyIcon, NgClass, NgStyle, NgTemplateOutlet, ThyLoading]\n})\nexport class ThyTreeNodeComponent implements OnDestroy, OnInit, OnChanges {\n root = inject(THY_TREE_ABSTRACT_TOKEN);\n thyTreeService = inject(ThyTreeService);\n\n /**\n * node 节点展现所需的数据\n */\n @Input() node: ThyTreeNode;\n\n /**\n * 设置 TreeNode 是否支持异步加载\n */\n @Input({ transform: coerceBooleanProperty }) thyAsync = false;\n\n /**\n * 设置 TreeNode 是否支持多选节点\n */\n @Input({ transform: coerceBooleanProperty }) thyMultiple = false;\n\n /**\n * 设置 TreeNode 是否支持拖拽排序\n */\n @Input({ transform: coerceBooleanProperty }) thyDraggable = false;\n\n /**\n * 设置 TreeNode 是否支持 Checkbox 选择\n */\n @Input({ transform: coerceBooleanProperty }) thyCheckable = false;\n\n /**\n * 点击节点的行为,`default` 为选中当前节点,`selectCheckbox` 为选中节点的 Checkbox, `thyCheckable` 为 true 时生效。\n * @default default\n */\n @Input() thyClickBehavior: ThyClickBehavior;\n\n /**\n * 设置节点名称是否支持超出截取\n * @default false\n */\n @Input({ transform: coerceBooleanProperty }) thyTitleTruncate: boolean;\n\n /**\n * 设置 TreeNode 的渲染模板\n */\n @Input() templateRef: TemplateRef<any>;\n\n /**\n * 设置子的空数据渲染模板\n */\n @Input() emptyChildrenTemplateRef: TemplateRef<any>;\n\n /**\n * 设置 node 点击事件\n */\n @Output() thyOnClick: EventEmitter<ThyTreeEmitEvent> = new EventEmitter<ThyTreeEmitEvent>();\n\n /**\n * 双击 node 事件\n */\n @Output() thyDblClick: EventEmitter<ThyTreeEmitEvent> = new EventEmitter<ThyTreeEmitEvent>();\n\n /**\n * 点击展开触发事件\n */\n @Output() thyOnExpandChange: EventEmitter<ThyTreeEmitEvent> = new EventEmitter<ThyTreeEmitEvent>();\n\n /**\n * 设置 check 选择事件\n */\n @Output() thyOnCheckboxChange: EventEmitter<ThyTreeEmitEvent> = new EventEmitter<ThyTreeEmitEvent>();\n\n /**\n * 设置 childrenTree 的渲染模板\n */\n @ContentChild('childrenTree') childrenTreeTemplateRef: TemplateRef<any>;\n\n /** The native `<div class=\"thy-tree-node-wrapper thy-sortable-item\"></div>` element. */\n @ViewChild('treeNodeWrapper', { static: true }) treeNodeWrapper: ElementRef<HTMLElement>;\n\n @HostBinding('class.thy-tree-node') thyTreeNodeClass = true;\n\n @HostBinding('class') itemClass: string;\n\n /**\n * 开启虚拟滚动时,单行节点的高度,当`thySize`为`default`时,该参数才生效\n */\n @Input({ transform: numberAttribute }) thyItemSize = 44;\n\n /**\n * 设置节点缩进距离,缩进距离 = thyIndent * node.level\n */\n @Input({ transform: numberAttribute }) thyIndent = 25;\n\n public get nodeIcon() {\n return this.node.origin.icon;\n }\n\n public get nodeIconStyle() {\n return this.node.origin.iconStyle;\n }\n\n private destroy$ = new Subject<void>();\n\n checkState = ThyTreeNodeCheckState;\n\n public clickNode(event: Event) {\n if (this.node.isDisabled) {\n this.expandNode(event);\n } else {\n if (this.thyCheckable && this.thyClickBehavior === 'selectCheckbox') {\n this.clickNodeCheck(event);\n } else {\n if (this.root.thyMultiple) {\n this.root.toggleTreeNode(this.node);\n } else {\n this.root.selectTreeNode(this.node);\n }\n }\n }\n this.thyOnClick.emit({\n eventName: 'click',\n event: event,\n node: this.node\n });\n }\n\n public dbClickNode(event: Event) {\n this.thyDblClick.emit({\n eventName: 'dbclick',\n event: event,\n node: this.node\n });\n }\n\n public clickNodeCheck(event: Event) {\n event.stopPropagation();\n if (this.node.isChecked === ThyTreeNodeCheckState.unchecked) {\n this.node.setChecked(true);\n } else if (this.node.isChecked === ThyTreeNodeCheckState.checked) {\n this.node.setChecked(false);\n } else if (this.node.isChecked === ThyTreeNodeCheckState.indeterminate) {\n if (this.node.children?.length) {\n const activeChildren = this.node.children.filter(item => !item.isDisabled);\n const isAllActiveChildrenChecked = activeChildren.every(item => item.isChecked);\n this.node.setChecked(!isAllActiveChildrenChecked);\n } else {\n this.node.setChecked(true);\n }\n }\n this.thyOnCheckboxChange.emit({\n eventName: 'checkboxChange',\n event: event,\n node: this.node\n });\n }\n\n public expandNode(event: Event) {\n event.stopPropagation();\n this.node.setExpanded(!this.node.isExpanded);\n if (this.root.thyShowExpand) {\n this.thyOnExpandChange.emit({\n eventName: 'expand',\n event: event,\n node: this.node\n });\n if (this.thyAsync && this.node.children.length === 0) {\n this.node.setLoading(true);\n }\n }\n }\n\n public isShowExpand(node: ThyTreeNode) {\n return this.root.isShowExpand(node);\n }\n\n ngOnInit(): void {\n this.itemClass = this.node?.itemClass?.join(' ');\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.node && !changes.node.isFirstChange()) {\n this.itemClass = changes?.node?.currentValue.itemClass?.join(' ');\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n","<div\n #treeNodeWrapper\n class=\"thy-tree-node-wrapper\"\n [class.active]=\"root.isSelected(node)\"\n [class.disabled]=\"node.isDisabled\"\n [class.expand]=\"node.children.length\"\n [style.height]=\"thyItemSize + 'px'\"\n (click)=\"clickNode($event)\"\n >\n <span class=\"thy-tree-index\" [style.width.px]=\"node.level * thyIndent\"></span>\n <span class=\"thy-tree-drag-icon\">\n <thy-icon thyIconName=\"drag\"></thy-icon>\n </span>\n <span class=\"thy-tree-expand\" (click)=\"expandNode($event)\">\n @if (isShowExpand(node)) {\n @if ((node.children && node.children.length > 0) || thyAsync || emptyChildrenTemplateRef) {\n @if (root.thyIcons?.expand && root.thyIcons?.collapse) {\n <thy-icon\n class=\"thy-tree-expand-icon\"\n [thyIconName]=\"node.isExpanded ? root.thyIcons.expand : root.thyIcons.collapse\"\n ></thy-icon>\n } @else {\n <thy-icon class=\"thy-tree-expand-icon\" [class.collapse]=\"!node.isExpanded\" thyIconName=\"caret-right-down\"></thy-icon>\n }\n }\n }\n </span>\n\n <span class=\"thy-tree-node-content\" (dblclick)=\"dbClickNode($event)\">\n @if (thyCheckable) {\n <input\n type=\"checkbox\"\n class=\"thy-tree-node-check\"\n [class.form-check-indeterminate]=\"node.isChecked === checkState.indeterminate\"\n [class.form-unchecked]=\"node.isChecked === checkState.unchecked\"\n [checked]=\"node.isChecked === checkState.checked\"\n [disabled]=\"node.isDisabled\"\n (click)=\"clickNodeCheck($event)\"\n />\n }\n @if (!templateRef) {\n @if (nodeIcon) {\n <span class=\"thy-tree-node-icon\"> <i [ngClass]=\"nodeIcon\" [ngStyle]=\"nodeIconStyle\"></i></span>\n }\n <span [title]=\"node.title\" class=\"thy-tree-node-title\" [class.truncate]=\"thyTitleTruncate\"> {{ node.title }}</span>\n }\n @if (templateRef) {\n <ng-template\n [ngTemplateOutlet]=\"templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: node, node: node, origin: node?.origin }\"\n ></ng-template>\n }\n </span>\n</div>\n@if (thyAsync) {\n @if (node.isLoading) {\n <thy-loading [thyDone]=\"!node.isLoading\"></thy-loading>\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ThyTreeNode } from './tree.class';\nimport { ThyTreeBeforeDragStartContext } from './tree.class';\n\n/**\n * @private\n */\n@Pipe({\n name: 'treeNodeDraggable'\n})\nexport class ThyTreeNodeDraggablePipe implements PipeTransform {\n transform(node: ThyTreeNode, beforeDragStart: (e: ThyTreeBeforeDragStartContext) => boolean): boolean {\n if (beforeDragStart) {\n const draggable = beforeDragStart({ item: node } as ThyTreeBeforeDragStartContext);\n return draggable;\n } else {\n return true;\n }\n }\n}\n","import { coerceBooleanProperty, helpers } from 'ngx-tethys/util';\nimport { useHostRenderer } from '@tethys/cdk/dom';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { CdkVirtualScrollViewport, CdkFixedSizeVirtualScroll, CdkVirtualForOf } from '@angular/cdk/scrolling';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n EventEmitter,\n forwardRef,\n HostBinding,\n Input,\n numberAttribute,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n ViewChildren,\n ViewEncapsulation,\n inject\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { THY_TREE_ABSTRACT_TOKEN } from './tree-abstract';\nimport { ThyTreeNode } from './tree.class';\nimport {\n ThyTreeBeforeDragDropContext,\n ThyTreeBeforeDragStartContext,\n ThyClickBehavior,\n ThyTreeDragDropEvent,\n ThyTreeDropPosition,\n ThyTreeEmitEvent,\n ThyTreeIcons,\n ThyTreeNodeCheckState,\n ThyTreeNodeData\n} from './tree.class';\nimport { ThyTreeService } from './tree.service';\nimport { ThyTreeNodeComponent } from './tree-node.component';\nimport { DOCUMENT } from '@angular/common';\nimport { CdkDrag, CdkDragDrop, CdkDragEnd, CdkDragMove, CdkDragStart, CdkDropList } from '@angular/cdk/drag-drop';\nimport { filter, startWith, takeUntil } from 'rxjs/operators';\nimport { Subject } from 'rxjs';\nimport { ThyTreeNodeDraggablePipe } from './tree.pipe';\n\ntype ThyTreeSize = 'sm' | 'default';\n\ntype ThyTreeType = 'default' | 'especial';\n\nconst treeTypeClassMap = {\n default: ['thy-tree-default'],\n especial: ['thy-tree-especial']\n};\n\nconst treeItemSizeMap = {\n default: 44,\n sm: 42\n};\n\n/**\n * 树形控件组件\n * @name thy-tree\n */\n@Component({\n selector: 'thy-tree',\n templateUrl: './tree.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ThyTree),\n multi: true\n },\n {\n provide: THY_TREE_ABSTRACT_TOKEN,\n useExisting: forwardRef(() => ThyTree)\n },\n ThyTreeService\n ],\n imports: [\n CdkDrag,\n CdkDropList,\n CdkVirtualScrollViewport,\n CdkFixedSizeVirtualScroll,\n CdkVirtualForOf,\n ThyTreeNodeComponent,\n ThyTreeNodeDraggablePipe\n ]\n})\nexport class ThyTree implements ControlValueAccessor, OnInit, OnChanges, AfterViewInit, OnDestroy {\n thyTreeService = inject(ThyTreeService);\n private cdr = inject(ChangeDetectorRef);\n private document = inject(DOCUMENT);\n\n private _templateRef: TemplateRef<any>;\n\n private _emptyChildrenTemplateRef: TemplateRef<any>;\n\n private _draggable = false;\n\n private _expandedKeys: (string | number)[];\n\n private _selectedKeys: (string | number)[];\n\n private hostRenderer = useHostRenderer();\n\n private _onTouched: () => void = () => {};\n\n private _onChange: (value: any) => void = (_: any) => {};\n\n private destroy$ = new Subject<void>();\n\n // 缓存 Element 和 DragRef 的关系,方便在 Item 拖动时查找\n private nodeDragsMap = new Map<HTMLElement, CdkDrag<ThyTreeNode>>();\n\n private nodeDragMoved = new Subject<CdkDragMove>();\n\n // private startDragNodeExpanded: boolean;\n\n private startDragNodeClone: ThyTreeNode;\n\n // Node 拖动经过目标时临时记录目标id以及相对应目标的位置\n private nodeDropTarget: {\n position?: ThyTreeDropPosition;\n key?: number | string;\n };\n\n private dropEnterPredicate?: (context: { source: ThyTreeNode; target: ThyTreeNode; dropPosition: ThyTreeDropPosition }) => boolean =\n context => {\n return (\n this.isShowExpand(context.target) || (!this.isShowExpand(context.target) && context.dropPosition !== ThyTreeDropPosition.in)\n );\n };\n\n public _selectionModel: SelectionModel<ThyTreeNode>;\n\n public get treeNodes() {\n return this.thyTreeService.treeNodes;\n }\n\n public flattenTreeNodes: ThyTreeNode[] = [];\n\n /**\n * 虚拟化滚动的视口\n */\n @Output() @ViewChild('viewport', { static: false }) viewport: CdkVirtualScrollViewport;\n\n /**\n * TreeNode 展现所需的数据\n * @type ThyTreeNodeData[]\n */\n @Input() thyNodes: ThyTreeNodeData[];\n\n /**\n * 设置 TreeNode 是否支持展开\n * @type boolean | Function\n */\n @Input() thyShowExpand: boolean | ((_: ThyTreeNodeData) => boolean) = true;\n\n /**\n * 设置是否支持多选节点\n */\n @HostBinding(`class.thy-multiple-selection-list`)\n @Input({ transform: coerceBooleanProperty })\n thyMultiple = false;\n\n /**\n * 设置 TreeNode 是否支持拖拽排序\n * @default false\n */\n @HostBinding('class.thy-tree-draggable')\n @Input({ transform: coerceBooleanProperty })\n set thyDraggable(value: boolean) {\n this._draggable = value;\n }\n\n get thyDraggable() {\n return this._draggable;\n }\n\n /**\n * 设置 TreeNode 是否支持 Checkbox 选择\n * @default false\n */\n @Input({ transform: coerceBooleanProperty }) thyCheckable: boolean;\n\n /**\n * 点击节点的行为,`default` 为选中当前节点,`selectCheckbox` 为选中节点的 Checkbox, `thyCheckable` 为 true 时生效。\n */\n @Input() thyClickBehavior: ThyClickBehavior = 'default';\n\n /**\n * 设置 check 状态的计算策略\n */\n @Input() set thyCheckStateResolve(resolve: (node: ThyTreeNode) => ThyTreeNodeCheckState) {\n if (resolve) {\n this.thyTreeService.setCheckStateResolve(resolve);\n }\n }\n\n /**\n * 设置 TreeNode 是否支持异步加载\n */\n @Input({ transform: coerceBooleanProperty }) thyAsync = false;\n\n private _thyType: ThyTreeType = 'default';\n\n /**\n * 设置不同展示类型的 Tree,`default` 为小箭头展示, `especial` 为 加减号图标展示\n * @type ThyTreeType\n * @default default\n */\n @Input()\n set thyType(type: ThyTreeType) {\n this._thyType = type;\n if (type === 'especial') {\n this.thyIcons = { expand: 'minus-square', collapse: 'plus-square' };\n }\n }\n\n get thyType() {\n return this._thyType;\n }\n\n /**\n * 设置不同 Tree 展开折叠的图标,`expand` 为展开状态的图标,`collapse` 为折叠状态的图标\n * @type { expand: string, collapse: string }\n */\n @Input() thyIcons: ThyTreeIcons = {};\n\n private _thySize: ThyTreeSize = 'default';\n /**\n * 支持 `sm` | `default` 两种大小,默认值为 `default`\n * @type ThyTreeSize\n * @default default\n */\n @Input()\n set thySize(size: ThyTreeSize) {\n this._thySize = size;\n if (this._thySize) {\n this._thyItemSize = treeItemSizeMap[this._thySize];\n } else {\n this._thyItemSize = treeItemSizeMap.default;\n }\n }\n\n get thySize() {\n return this._thySize;\n }\n\n /**\n * 设置是否开启虚拟滚动\n */\n @HostBinding('class.thy-virtual-scrolling-tree')\n @Input({ transform: coerceBooleanProperty })\n thyVirtualScroll = false;\n\n private _thyItemSize = 44;\n\n /**\n * 开启虚拟滚动时,单行节点的高度,当`thySize`为`default`时,该参数才生效\n * @default 44\n */\n @Input({ transform: numberAttribute })\n set thyItemSize(itemSize: number) {\n if (this.thySize !== 'default') {\n throw new Error('setting thySize and thyItemSize at the same time is not allowed');\n }\n this._thyItemSize = itemSize;\n }\n\n get thyItemSize() {\n return this._thyItemSize;\n }\n\n /**\n * 设置节点名称是否支持超出截取\n * @type boolean\n */\n @Input({ transform: coerceBooleanProperty }) thyTitleTruncate = true;\n\n /**\n * 已选中的 node 节点集合\n * @default []\n */\n @Input() thySelectedKeys: string[];\n\n /**\n * 展开指定的树节点\n */\n @Input() thyExpandedKeys: (string | number)[];\n\n /**\n * 是否展开所有树节点\n */\n @Input({ transform: coerceBooleanProperty }) thyExpandAll: boolean = false;\n\n /**\n * 设置缩进距离,缩进距离 = thyIndent * node.level\n * @type number\n */\n @Input({ transform: numberAttribute }) thyIndent = 25;\n\n /**\n * 拖拽之前的回调,函数返回 false 则阻止拖拽\n */\n @Input() thyBeforeDragStart: (context: ThyTreeBeforeDragStartContext) => boolean;\n\n /**\n * 拖放到元素时回调,函数返回 false 则阻止拖放到当前元素\n */\n @Input() thyBeforeDragDrop: (context: ThyTreeBeforeDragDropContext) => boolean;\n\n /**\n * 设置子 TreeNode 点击事件\n */\n @Output() thyOnClick: EventEmitter<ThyTreeEmitEvent> = new EventEmitter<ThyTreeEmitEvent>();\n\n /**\n * 设置 check 选择事件\n */\n @Output() thyOnCheckboxChange: EventEmitter<ThyTreeEmitEvent> = new EventEmitter<ThyTreeEmitEvent>();\n\n /**\n * 设置点击展开触发事件\n */\n @Output() thyOnExpandChange: EventEmitter<ThyTreeEmitEvent> = new EventEmitter<ThyTreeEmitEvent>();\n\n /**\n * 设置 TreeNode 拖拽事件\n */\n @Output() thyOnDragDrop: EventEmitter<ThyTreeDragDropEvent> = new EventEmitter<ThyTreeDragDropEvent>();\n\n /**\n * 双击 TreeNode 事件\n */\n @Output() thyDblClick: EventEmitter<ThyTreeEmitEvent> = new EventEmitter<ThyTreeEmitEvent>();\n\n /**\n * 设置 TreeNode 的渲染模板\n */\n @ContentChild('treeNodeTemplate', { static: true })\n set templateRef(template: TemplateRef<any>) {\n if (template) {\n this._templateRef = template;\n }\n }\n\n get templateRef() {\n return this._templateRef;\n }\n\n /**\n * 设置子的空数据渲染模板\n */\n @ContentChild('emptyChildrenTemplate', { static: true }) emptyChildrenTemplate: TemplateRef<any>;\n set emptyChildrenTemplateRef(template: TemplateRef<any>) {\n if (template) {\n this._emptyChildrenTemplateRef = template;\n }\n }\n\n get emptyChildrenTemplateRef() {\n return this._emptyChildrenTemplateRef;\n }\n\n @HostBinding('class.thy-tree')\n thyTreeClass = true;\n\n @HostBinding('class.thy-tree-dragging')\n dragging: boolean;\n\n @ViewChildren(CdkDrag) cdkDrags: QueryList<CdkDrag<ThyTreeNode>>;\n\n ngOnInit(): void {\n this._initThyNodes();\n this._setTreeType();\n this._setTreeSize();\n this._instanceSelectionModel();\n this._selectTreeNodes(this.thySelectedKeys);\n\n this.thyTreeService.flattenNodes$.subscribe(flattenTreeNodes => {\n this.flattenTreeNodes = flattenTreeNodes;\n this.cdr.markForCheck();\n });\n }\n\n ngAfterViewInit(): void {\n this.cdkDrags.changes\n .pipe(startWith(this.cdkDrags), takeUntil(this.destroy$))\n .subscribe((drags: QueryList<CdkDrag<ThyTreeNode>>) => {\n this.nodeDragsMap.clear();\n drags.forEach(drag => {\n if (drag.data) {\n // cdkDrag 变化时,缓存 Element 与 DragRef 的关系,方便 Drag Move 时查找\n this.nodeDragsMap.set(drag.element.nativeElement, drag);\n }\n });\n });\n\n this.nodeDragMoved\n .pipe(\n // auditTime(30),\n // auditTime 可能会导致拖动结束后仍然执行 moved ,所以通过判断 dragging 状态来过滤无效 moved\n filter((event: CdkDragMove) => event.source._dragRef.isDragging()),\n takeUntil(this.destroy$)\n )\n .subscribe(event => {\n this.onDragMoved(event);\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.thyNodes && !changes.thyNodes.isFirstChange()) {\n this._initThyNodes();\n }\n if (changes.thyType && !changes.thyType.isFirstChange()) {\n this._setTreeType();\n }\n if (changes.thyMultiple && !changes.thyMultiple.isFirstChange()) {\n this._instanceSelectionModel();\n }\n\n if (changes.thySelectedKeys && !changes.thySelectedKeys.isFirstChange()) {\n this._selectedKeys = changes.thySelectedKeys.currentValue;\n this._selectTreeNodes(changes.thySelectedKeys.currentValue);\n }\n\n if (changes.thyExpandedKeys && !changes.thyExpandedKeys.isFirstChange()) {\n this._handleExpandedKeys();\n }\n if (changes.thyExpandAll && !changes.thyExpandAll.isFirstChange()) {\n this._handleExpandedKeys();\n }\n }\n\n renderView = () => {};\n\n eventTriggerChanged(event: ThyTreeEmitEvent): void {\n switch (event.eventName) {\n case 'expand':\n this.thyOnExpandChange.emit(event);\n break;\n\n case 'checkboxChange':\n this.thyOnCheckboxChange.emit(event);\n break;\n }\n }\n\n private _initThyNodes() {\n this._expandedKeys = this.getExpandedNodes().map(node => node.key);\n this._selectedKeys = this.getSelectedNodes().map(node => node.key);\n this.thyTreeService.initializeTreeNodes(this.thyNodes);\n this.flattenTreeNodes = this.thyTreeService.flattenTreeNodes;\n this._selectTreeNodes(this._selectedKeys);\n this._handleExpandedKeys();\n }\n\n private _handleExpandedKeys() {\n if (this.thyExpandedKeys?.length) {\n this._expandedKeys = helpers.concatArray(\n this.thyExpandedKeys.filter(key => !this._expandedKeys.includes(key)),\n this._expandedKeys\n );\n }\n this.thyTreeService.expandTreeNodes(this.thyExpandAll || this._expandedKeys);\n }\n\n private _setTreeType() {\n if (this.thyType && treeTypeClassMap[this.thyType]) {\n treeTypeClassMap[this.thyType].forEach(className => {\n this.hostRenderer.addClass(className);\n });\n }\n }\n\n private _setTreeSize() {\n if (this.thySize) {\n this.hostRenderer.addClass(`thy-tree-${this.thySize}`);\n }\n }\n\n private _instanceSelectionModel() {\n this._selectionModel = new SelectionModel<any>(this.thyMultiple);\n }\n\n private _selectTreeNodes(keys: (string | number)[]) {\n (keys || []).forEach(key => {\n const node = this.thyTreeService.getTreeNode(key);\n if (node) {\n this.selectTreeNode(this.thyTreeService.getTreeNode(key));\n }\n });\n }\n\n isSelected(node: ThyTreeNode) {\n return this._selectionModel.isSelected(node);\n }\n\n toggleTreeNode(node: ThyTreeNode) {\n if (node && !node.isDisabled) {\n this._selectionModel.toggle(node);\n }\n }\n\n trackByFn(index: number, item: any) {\n return item.key || index;\n }\n\n isShowExpand(node: ThyTreeNode) {\n if (helpers.isFunction(this.thyShowExpand)) {\n return (this.thyShowExpand as Function)(node);\n } else {\n return this.thyShowExpand;\n }\n }\n\n writeValue(value: ThyTreeNodeData[]): void {\n if (value) {\n this.thyNodes = value;\n this._initThyNodes();\n }\n }\n\n registerOnChange(fn: any): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this._onTouched = fn;\n }\n\n onDragStarted(event: CdkDragStart<ThyTreeNode>) {\n this.dragging = true;\n this.startDragNodeClone = Object.assign({}, event.source.data);\n if (event.source.data.isExpanded) {\n event.source.data.setExpanded(false);\n }\n }\n\n emitDragMoved(event: CdkDragMove) {\n this.nodeDragMoved.next(event);\n }\n\n onDragMoved(event: CdkDragMove<ThyTreeNode>) {\n // 通过鼠标位置查找对应的目标 Item 元素\n let currentPointElement = this.document.elementFromPoint(event.pointerPosition.x, event.pointerPosition.y) as HTMLElement;\n if (!currentPointElement) {\n this.cleanupDragArtifacts();\n return;\n }\n let targetElement = currentPointElement.classList.contains('thy-tree-node')\n ? currentPointElement\n : (currentPointElement.closest('.thy-tree-node') as HTMLElement);\n if (!targetElement) {\n this.cleanupDragArtifacts();\n return;\n }\n // 缓存放置目标Id 并计算鼠标相对应的位置\n this.nodeDropTarget = {\n key: this.nodeDragsMap.get(targetElement)?.data.key,\n position: this.getTargetPosition(targetElement, event)\n };\n // 执行外部传入的 dropEnterPredicate 判断是否允许拖入目标项\n if (this.dropEnterPredicate) {\n const targetDragRef = this.nodeDragsMap.get(targetElement);\n if (\n this.dropEnterPredicate({\n source: event.source.data,\n target: targetDragRef.data,\n dropPosition: this.nodeDropTarget.position\n })\n ) {\n this.showDropPositionPlaceholder(targetElement);\n } else {\n this.nodeDropTarget = null;\n this.cleanupDragArtifacts();\n }\n } else {\n this.showDropPositionPlaceholder(targetElement);\n }\n }\n\n onDragEnded(event: CdkDragEnd<ThyTreeNode>) {\n this.dragging = false;\n // 拖拽结束后恢复原始的展开状态\n event.source.data.setExpanded(this.startDragNodeClone.isExpanded);\n setTimeout(() => {\n this.startDragNodeClone = null;\n });\n }\n\n onListDropped(event: CdkDragDrop<ThyTreeNode[], ThyTreeNode[], ThyTreeNode>) {\n if (!this.nodeDropTarget) {\n return;\n }\n if (!this.isShowExpand(this.startDragNodeClone) && this.nodeDropTarget.position === ThyTreeDropPosition.in) {\n this.cleanupDragArtifacts();\n return;\n }\n\n const sourceNode = this.startDragNodeClone;\n const sourceNodeParent = sourceNode.parentNode;\n const targetDragRef = this.cdkDrags.find(item => item.data?.key === this.nodeDropTarget.key);\n const targetNode = targetDragRef?.data;\n const targetNodeParent = targetNode.parentNode;\n\n const beforeDragDropContext: ThyTreeBeforeDragDropContext = {\n previousItem: sourceNode,\n previousContainerItems: sourceNodeParent?.children,\n item: targetNode,\n containerItems: targetNodeParent?.children,\n position: this.nodeDropTarget.position\n };\n\n if (this.thyBeforeDragDrop && !this.thyBeforeDragDrop(beforeDragDropContext)) {\n this.cleanupDragArtifacts();\n return;\n }\n\n this.thyTreeService.deleteTreeNode(sourceNode);\n\n switch (this.nodeDropTarget.position) {\n case 'before':\n const beforeInsertIndex = (targetNodeParent?.children || this.treeNodes).indexOf(targetNode);\n this.thyTreeService.addTreeNode(sourceNode, targetNodeParent, beforeInsertIndex);\n break;\n case 'after':\n const afterInsertIndex = (targetNodeParent?.children || this.treeNodes).indexOf(targetNode) + 1;\n this.thyTreeService.addTreeNode(sourceNode, targetNodeParent, afterInsertIndex);\n break;\n case 'in':\n this.thyTreeService.addTreeNode(sourceNode, targetNode);\n break;\n }\n\n this.thyTreeService.syncFlattenTreeNodes();\n\n let after: ThyTreeNode = null;\n let targe: ThyTreeNode = null;\n if (beforeDragDropContext.position === ThyTreeDropPosition.before) {\n const targetContainerNodes = targetNodeParent?.children || this.treeNodes;\n after = targetContainerNodes[targetContainerNodes.indexOf(targetNode) - 2];\n targe = targetNodeParent;\n } else if (beforeDragDropContext.position === ThyTreeDropPosition.after) {\n after = targetNode;\n targe = targetNodeParent;\n } else {\n after = targetNode.children?.length > 0 ? targetNode.children[targetNode.children.length - 2] : null;\n targe = targetNode;\n }\n\n this.thyOnDragDrop.emit({\n dragNode: this.thyTreeService.getTreeNode(sourceNode.key),\n targetNode: targe,\n afterNode: after\n });\n\n this.cleanupDragArtifacts();\n }\n\n private getTargetPosition(target: HTMLElement, event: CdkDragMove) {\n const targetRect = target.getBoundingClientRect();\n const beforeOrAfterGap = targetRect.height * 0.3;\n // 将 Node 高度分为上中下三段,其中上下的 Gap 为 height 的 30%,通过判断鼠标位置在哪一段 gap 来计算对应的位置\n if (event.pointerPosition.y - targetRect.top < beforeOrAfterGap) {\n return ThyTreeDropPosition.before;\n } else if (event.pointerPosition.y >= targetRect.bottom - beforeOrAfterGap) {\n return ThyTreeDropPosition.after;\n } else {\n return ThyTreeDropPosition.in;\n }\n }\n\n private showDropPositionPlaceholder(targetElement: HTMLElement) {\n this.cleanupDropPositionPlaceholder();\n if (this.nodeDropTarget && targetElement) {\n targetElement.classList.add(`drop-position-${this.nodeDropTarget.position}`);\n }\n }\n\n private cleanupDropPositionPlaceholder() {\n this.document.querySelectorAll('.drop-position-before').forEach(element => element.classList.remove('drop-position-before'));\n this.document.querySelectorAll('.drop-position-after').forEach(element => element.classList.remove('drop-position-after'));\n this.document.querySelectorAll('.drop-position-in').forEach(element => element.classList.remove('drop-position-in'));\n }\n\n private cleanupDragArtifacts() {\n this.nodeDropTarget = null;\n this.cleanupDropPositionPlaceholder();\n }\n\n // region Public Functions\n\n selectTreeNode(node: ThyTreeNode) {\n if (node && !node.isDisabled) {\n this._selectionModel.select(node);\n this.thyTreeService.syncFlattenTreeNodes();\n }\n }\n\n getRootNodes(): ThyTreeNode[] {\n return this.treeNodes;\n }\n\n getTreeNode(key: string) {\n return this.thyTreeService.getTreeNode(key);\n }\n\n getSelectedNode(): ThyTreeNode {\n return this._selectionModel ? this._selectionModel.selected[0] : null;\n }\n\n getSelectedNodes(): ThyTreeNode[] {\n return this._selectionModel ? this._selectionModel.selected : [];\n }\n\n getExpandedNodes(): ThyTreeNode[] {\n return this.thyTreeService.getExpandedNodes();\n }\n\n getCheckedNodes(): ThyTreeNode[] {\n return this.thyTreeService.getCheckedNodes();\n }\n\n addTreeNode(node: ThyTreeNodeData, parent?: ThyTreeNode, index = -1) {\n this.thyTreeService.addTreeNode(new ThyTreeNode(node, null, this.thyTreeService), parent, index);\n this.thyTreeService.syncFlattenTreeNodes();\n }\n\n deleteTreeNode(node: ThyTreeNode) {\n if (this.isSelected(node)) {\n this._selectionModel.toggle(node);\n }\n this.thyTreeService.deleteTreeNode(node);\n this.thyTreeService.syncFlattenTreeNodes();\n }\n\n expandAllNodes() {\n const nodes = this.getRootNodes();\n nodes.forEach(n => n.setExpanded(true, true));\n }\n\n collapsedAllNodes() {\n const nodes = this.getRootNodes();\n nodes.forEach(n => n.setExpanded(false, true));\n }\n\n // endregion\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n","@if (thyVirtualScroll) {\n <cdk-virtual-scroll-viewport\n #viewport\n [itemSize]=\"thyItemSize\"\n [style.height]=\"'100%'\"\n cdkDropList\n [cdkDropListAutoScrollStep]=\"6\"\n [cdkDropListData]=\"flattenTreeNodes\"\n [cdkDropListSortingDisabled]=\"true\"\n (cdkDropListDropped)=\"onListDropped($event)\"\n >\n <div class=\"virtual-trees-container\">\n <thy-tree-node\n *cdkVirtualFor=\"let node of flattenTreeNodes; trackBy: trackByFn; let i = index\"\n cdkDrag\n [cdkDragData]=\"node\"\n [cdkDragDisabled]=\"!thyDraggable || !(node | treeNodeDraggable : thyBeforeDragStart)\"\n (cdkDragStarted)=\"onDragStarted($event)\"\n (cdkDragEnded)=\"onDragEnded($event)\"\n (cdkDragMoved)=\"emitDragMoved($event)\"\n [node]=\"node\"\n [templateRef]=\"templateRef\"\n [emptyChildrenTemplateRef]=\"emptyChildrenTemplate\"\n [thyAsync]=\"thyAsync\"\n [thyDraggable]=\"thyDraggable\"\n [thyCheckable]=\"thyCheckable\"\n [thyMultiple]=\"thyMultiple\"\n [thyClickBehavior]=\"thyClickBehavior\"\n [thyTitleTruncate]=\"thyTitleTruncate\"\n [thyItemSize]=\"thyItemSize\"\n [thyIndent]=\"thyIndent\"\n (thyOnClick)=\"thyOnClick.emit($event)\"\n (thyDblClick)=\"thyDblClick.emit($event)\"\n (thyOnExpandChange)=\"eventTriggerChanged($event)\"\n (thyOnCheckboxChange)=\"eventTriggerChanged($event)\">\n </thy-tree-node>\n </div>\n </cdk-virtual-scroll-viewport>\n}\n\n@if (!thyVirtualScroll) {\n <div\n cdkDropList\n [cdkDropListAutoScrollStep]=\"6\"\n [cdkDropListData]=\"flattenTreeNodes\"\n [cdkDropListSortingDisabled]=\"true\"\n (cdkDropListDropped)=\"onListDropped($event)\">\n @for (node of flattenTreeNodes; track trackByFn(i, node); let i = $index) {\n <thy-tree-node\n cdkDrag\n [cdkDragData]=\"node\"\n [cdkDragDisabled]=\"!thyDraggable || !(node | treeNodeDraggable : thyBeforeDragStart)\"\n (cdkDragStarted)=\"onDragStarted($event)\"\n (cdkDragEnded)=\"onDragEnded($event)\"\n (cdkDragMoved)=\"emitDragMoved($event)\"\n [node]=\"node\"\n [templateRef]=\"templateRef\"\n [emptyChildrenTemplateRef]=\"emptyChildrenTemplate\"\n [thyAsync]=\"thyAsync\"\n [thyDraggable]=\"thyDraggable\"\n [thyCheckable]=\"thyCheckable\"\n [thyMultiple]=\"thyMultiple\"\n [thyTitleTruncate]=\"thyTitleTruncate\"\n [thyItemSize]=\"thyItemSize\"\n [thyClickBehavior]=\"thyClickBehavior\"\n [thyIndent]=\"thyIndent\"\n (thyOnClick)=\"thyOnClick.emit($event)\"\n (thyDblClick)=\"thyDblClick.emit($event)\"\n (thyOnExpandChange)=\"eventTriggerChanged($event)\"\n (thyOnCheckboxChange)=\"thyOnCheckboxChange.emit($event)\">\n </thy-tree-node>\n }\n </div>\n}\n","import { ThyButtonModule } from 'ngx-tethys/button';\nimport { ThyCheckboxModule } from 'ngx-tethys/checkbox';\nimport { ThyIconModule } from 'ngx-tethys/icon';\nimport { ThyInputModule } from 'ngx-tethys/input';\nimport { ThyListModule } from 'ngx-tethys/list';\nimport { ThyLoadingModule } from 'ngx-tethys/loading';\nimport { ThyOptionModule, ThySharedModule } from 'ngx-tethys/shared';\n\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { ThyTreeNodeComponent } from './tree-node.component';\nimport { ThyTree } from './tree.component';\nimport { ThyTreeService } from './tree.service';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { ThyTreeNodeDraggablePipe } from './tree.pipe';\n\n@NgModule({\n imports: [\n DragDropModule,\n CommonModule,\n ThyInputModule,\n ThyButtonModule,\n ThySharedModule,\n FormsModule,\n ThyListModule,\n ThyOptionModule,\n ThyLoadingModule,\n ThyIconModule,\n ThyCheckboxModule,\n ScrollingModule,\n ThyTree,\n ThyTreeNodeComponent,\n ThyTreeNodeDraggablePipe\n ],\n exports: [ThyTree, ThyTreeNodeComponent],\n providers: [ThyTreeService]\n})\nexport class ThyTreeModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngx-tethys-tree.mjs","sources":["../../../src/tree/tree-abstract.ts","../../../src/tree/tree.class.ts","../../../src/tree/tree.service.ts","../../../src/tree/tree-node.component.ts","../../../src/tree/tree-node.component.html","../../../src/tree/tree.pipe.ts","../../../src/tree/tree.component.ts","../../../src/tree/tree.component.html","../../../src/tree/tree.module.ts","../../../src/tree/ngx-tethys-tree.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { ThyTreeNode } from './tree.class';\nimport { ThyTreeBeforeDragDropContext, ThyTreeBeforeDragStartContext, ThyTreeDragDropEvent, ThyTreeIcons } from './tree.class';\n\nexport interface ThyTreeAbstractComponent {\n thyMultiple: boolean;\n thyDraggable: boolean;\n thyShowExpand: boolean;\n treeNodes: ThyTreeNode[];\n thyIcons: ThyTreeIcons;\n thyBeforeDragStart(e: ThyTreeBeforeDragStartContext): boolean;\n thyBeforeDragDrop(e: ThyTreeBeforeDragDropContext): boolean;\n onDragDrop(event: ThyTreeDragDropEvent): void;\n selectTreeNode(node: ThyTreeNode): void;\n toggleTreeNode(node: ThyTreeNode): void;\n isShowExpand(node: ThyTreeNode): boolean;\n trackByFn(number: string, node: ThyTreeNode): string | number;\n isSelected(node: ThyTreeNode): boolean;\n}\n\nexport const THY_TREE_ABSTRACT_TOKEN = new InjectionToken<ThyTreeAbstractComponent>('thy-tree-abstract-token');\n","import { helpers, isArray } from 'ngx-tethys/util';\nimport { BehaviorSubject, Subject } from 'rxjs';\n\nexport enum ThyTreeNodeCheckState {\n unchecked = 0,\n checked = 1,\n indeterminate = 2\n}\n\nexport enum ThyTreeDropPosition {\n in = 'in',\n before = 'before',\n after = 'after'\n}\n\nexport interface ThyTreeNodeData<T = any> {\n key?: number | string;\n\n title?: string;\n\n icon?: string;\n\n iconStyle?: {\n [key: string]: any;\n };\n\n children?: ThyTreeNodeData<T>[];\n\n origin?: any;\n\n expanded?: boolean;\n\n disabled?: boolean;\n\n checked?: boolean;\n\n data?: T;\n\n itemClass?: string | string[];\n\n [key: string]: any;\n}\n\nexport interface ThyTreeEmitEvent<T = any> {\n eventName: string;\n\n node?: ThyTreeNode<T>;\n\n event?: Event | any;\n\n dragNode?: ThyTreeNode<T>;\n\n targetNode?: ThyTreeNode<T>;\n}\n\nexport interface ThyTreeBeforeDragStartContext {\n item: ThyTreeNode;\n}\n\nexport interface ThyTreeBeforeDragDropContext {\n item?: ThyTreeNode;\n containerItems?: ThyTreeNode[];\n previousItem?: ThyTreeNode;\n previousContainerItems?: ThyTreeNode[];\n position?: ThyTreeDropPosition;\n}\n\nexport interface ThyTreeDragDropEvent<T = any> {\n dragNode?: ThyTreeNode<T>;\n\n targetNode?: ThyTreeNode<T>;\n\n afterNode?: ThyTreeNode<T>;\n}\n\nexport class ThyTreeIcons {\n expand?: string;\n collapse?: string;\n}\n\nexport type ThyClickBehavior = 'default' | 'selectCheckbox';\n\nexport interface ThyTreeFormatEmitEvent {\n eventName: string;\n node: ThyTreeNode;\n event?: MouseEvent | DragEvent;\n}\n\nexport interface IThyTreeService {\n selectedNode: ThyTreeNode;\n flattenNodes$: BehaviorSubject<ThyTreeNode[]>;\n flattenTreeNodes: ThyTreeNode[];\n treeNodes: ThyTreeNode[];\n statusChange$: Subject<ThyTreeFormatEmitEvent>;\n initializeTreeNodes: (rootNodes: ThyTreeNodeData[]) => void;\n syncFlattenTreeNodes: () => ThyTreeNode[];\n setCheckStateResolve: (resolve: (node: ThyTreeNode) => ThyTreeNodeCheckState) => void;\n resetSortedTreeNodes: (treeNodes: ThyTreeNode[], parent?: ThyTreeNode) => void;\n getTreeNode: (key: string | number) => ThyTreeNode;\n getExpandedNodes: () => ThyTreeNode[];\n getCheckedNodes: () => ThyTreeNode[];\n deleteTreeNode: (node: ThyTreeNode) => void;\n addTreeNode: (node: ThyTreeNode, parent?: ThyTreeNode, index?: number) => void;\n expandTreeNodes: (keyOrKeys: string | number | (string | number)[] | true) => void;\n setNodeChecked: (node: ThyTreeNode, checked: boolean, propagateUp?: boolean, propagateDown?: boolean) => void;\n syncNodeCheckState: (node: ThyTreeNode) => void;\n checkStateResolve: (node: ThyTreeNode) => ThyTreeNodeCheckState;\n}\n\nexport class ThyTreeNode<T = any> {\n key?: number | string;\n\n title?: string;\n\n children: ThyTreeNode[];\n\n parentNode: ThyTreeNode;\n\n level = 0;\n\n origin: ThyTreeNodeData<T>;\n\n isExpanded: boolean;\n\n isChecked: ThyTreeNodeCheckState;\n\n isLoading: boolean;\n\n isDisabled: boolean;\n\n itemClass?: string[];\n\n private readonly service: IThyTreeService;\n\n get treeService(): IThyTreeService {\n if (this.service) {\n return this.service;\n } else if (this.parentNode) {\n return this.parentNode.treeService;\n }\n }\n\n constructor(node: ThyTreeNodeData, parent: ThyTreeNode = null, service?: IThyTreeService) {\n this.title = node.title;\n this.key = node.key;\n this.children = [];\n this.parentNode = parent;\n this.level = parent ? parent.level + 1 : this.level;\n this.origin = node;\n this.isDisabled = node.disabled || false;\n this.isExpanded = node.expanded || false;\n this.isChecked = node.checked ? ThyTreeNodeCheckState.checked : ThyTreeNodeCheckState.unchecked;\n this.isLoading = false;\n if (node.itemClass) {\n this.itemClass = isArray(node.itemClass) ? node.itemClass : [node.itemClass];\n }\n if (node.children) {\n node.children.forEach(childNode => {\n this.children.push(new ThyTreeNode(childNode, this, service));\n });\n }\n this.service = service;\n if (node.children && node.children.length && service) {\n this.isChecked = service.checkStateResolve(this);\n }\n }\n\n public setKey(key: string) {\n this.origin.key = key;\n this.key = key;\n }\n\n public setTitle(title: string) {\n this.origin.title = title;\n this.title = title;\n }\n\n public setLevel(level: number) {\n this.level = level;\n }\n\n private _setExpanded(expanded: boolean, propagate = false) {\n this.origin.expanded = expanded;\n this.isExpanded = expanded;\n if (propagate && this.children) {\n this.children.forEach(n => n._setExpanded(expanded, propagate));\n }\n }\n\n public setExpanded(expanded: boolean, propagate = false) {\n this._setExpanded(expanded, propagate);\n this.treeService.syncFlattenTreeNodes();\n }\n\n public setLoading(loading: boolean): void {\n this.isLoading = loading;\n this.treeService.syncFlattenTreeNodes();\n }\n\n public setChecked(checked: boolean, propagateUp = true, propagateDown = true) {\n this.treeService.setNodeChecked(this, checked, propagateUp, propagateDown);\n }\n\n public syncNodeCheckState() {\n this.treeService.syncNodeCheckState(this);\n }\n\n public getParentNode(): ThyTreeNode {\n return this.parentNode;\n }\n\n public getChildren(): ThyTreeNode[] {\n return this.children;\n }\n\n public addChildren(children: ThyTreeNodeData | ThyTreeNodeData[], index: number = -1): void {\n children = helpers.coerceArray(children);\n ((children as ThyTreeNodeData[]) || []).forEach((childNode: ThyTreeNodeData, i: number) => {\n if (index === -1) {\n this.children.push(new ThyTreeNode(childNode, this));\n } else {\n this.children.splice(index + i, 0, new ThyTreeNode(childNode, this, this.treeService));\n }\n });\n\n this.origin.children = this.getChildren().map(n => n.origin);\n this.setLoading(false);\n this.treeService.statusChange$.next({\n eventName: 'addChildren',\n node: this\n });\n }\n}\n","import { coerceArray, isFunction } from 'ngx-tethys/util';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport { Injectable, OnDestroy } from '@angular/core';\nimport { ThyTreeNodeCheckState, ThyTreeNodeData, ThyTreeNode, IThyTreeService, ThyTreeFormatEmitEvent } from './tree.class';\n\nfunction checkStateResolve(node: ThyTreeNode) {\n const checkedNodes = node.children.filter(n => n.isChecked === ThyTreeNodeCheckState.checked);\n const unCheckedNodes = node.children.filter(n => n.isChecked === ThyTreeNodeCheckState.unchecked);\n if (checkedNodes.length === node.children.length) {\n return ThyTreeNodeCheckState.checked;\n } else if (unCheckedNodes.length === node.children.length) {\n return ThyTreeNodeCheckState.unchecked;\n } else {\n return ThyTreeNodeCheckState.indeterminate;\n }\n}\n\ntype FlattenAllNodesCb = (treeNode: ThyTreeNode) => boolean;\n\n/**\n * @internal\n */\n@Injectable()\nexport class ThyTreeService implements IThyTreeService, OnDestroy {\n selectedNode!: ThyTreeNode;\n\n flattenNodes$ = new BehaviorSubject<ThyTreeNode[]>([]);\n\n flattenTreeNodes: ThyTreeNode[] = [];\n\n private originTreeNodes: ThyTreeNodeData[] = [];\n\n public treeNodes: ThyTreeNode[] = [];\n\n public checkStateResolve: (node: ThyTreeNode) => ThyTreeNodeCheckState = checkStateResolve;\n\n statusChange$ = new Subject<ThyTreeFormatEmitEvent>();\n\n constructor() {\n this.statusChange$.pipe().subscribe(event => {\n this.syncFlattenTreeNodes();\n this.syncNodeCheckState(event.node);\n });\n }\n\n public initializeTreeNodes(rootNodes: ThyTreeNodeData[]) {\n this.originTreeNodes = rootNodes || [];\n this.treeNodes = (rootNodes || []).map(node => new ThyTreeNode(node, null, this));\n }\n\n public syncFlattenTreeNodes(): ThyTreeNode[] {\n this.flattenTreeNodes = this.getParallelTreeNodes(this.treeNodes, false);\n this.flattenNodes$.next(this.flattenTreeNodes);\n return this.flattenTreeNodes;\n }\n\n private getParallelTreeNodes(rootTrees: ThyTreeNode[] = this.treeNodes, flattenAllNodes: boolean | FlattenAllNodesCb = true) {\n const flattenTreeData: ThyTreeNode[] = [];\n function _getParallelTreeNodes(list: ThyTreeNode[]) {\n return list.forEach((treeNode, index) => {\n flattenTreeData.push(treeNode);\n const flattenAllNodesFlag = isFunction(flattenAllNodes) ? flattenAllNodes(treeNode) : flattenAllNodes;\n if (flattenAllNodesFlag || treeNode.isExpanded) {\n _getParallelTreeNodes(treeNode.children);\n }\n });\n }\n _getParallelTreeNodes(rootTrees);\n return flattenTreeData;\n }\n\n setCheckStateResolve(resolve: (node: ThyTreeNode) => ThyTreeNodeCheckState = checkStateResolve) {\n this.checkStateResolve = resolve;\n }\n\n public resetSortedTreeNodes(treeNodes: ThyTreeNode[], parent?: ThyTreeNode) {\n treeNodes.forEach(node => {\n node.level = node.parentNode ? node.parentNode.level + 1 : 0;\n node.origin.children = node.children.map(n => n.origin);\n node.parentNode = parent;\n this.resetSortedTreeNodes(node.children, node);\n });\n }\n\n public getTreeNode(key: string | number): ThyTreeNode {\n const allNodes = this.getParallelTreeNodes(this.treeNodes);\n return allNodes.find(n => n.key === key);\n }\n\n public getExpandedNodes(): ThyTreeNode[] {\n const allNodes = this.getParallelTreeNodes(this.treeNodes);\n return allNodes.filter(n => n.isExpanded);\n }\n\n public getCheckedNodes(): ThyTreeNode[] {\n const allNodes = this.getParallelTreeNodes(this.treeNodes);\n return allNodes.filter(n => n.isChecked === ThyTreeNodeCheckState.checked);\n }\n\n public deleteTreeNode(node: ThyTreeNode) {\n if (node.parentNode) {\n const children = node.parentNode.children;\n const index = children.findIndex(n => n.key === node.key);\n if (index > -1) {\n children.splice(index, 1);\n node.parentNode.origin.children = children.map(item => item.origin);\n this.syncNodeCheckState(node.parentNode);\n }\n } else {\n const index = this.treeNodes.findIndex(n => n.key === node.key);\n if (index > -1) {\n this.treeNodes.splice(index, 1);\n this.originTreeNodes.splice(index, 1);\n }\n }\n }\n\n public addTreeNode(node: ThyTreeNode, parent?: ThyTreeNode, index = -1) {\n if (parent) {\n const insertNode = new ThyTreeNode(node.origin, parent, this);\n if (index > -1) {\n parent.children.splice(index, 0, insertNode);\n } else {\n parent.children.push(insertNode);\n }\n parent.origin.children = parent.children.map(item => item.origin);\n this.syncNodeCheckState(parent);\n } else {\n const insertNode = new ThyTreeNode(node.origin, null, this);\n if (index > -1) {\n this.treeNodes.splice(index, 0, insertNode);\n } else {\n this.treeNodes.push(insertNode);\n }\n this.originTreeNodes = this.treeNodes.map(item => item.origin);\n // this.syncNodeCheckState(insertNode);\n }\n }\n\n public expandTreeNodes(keyOrKeys: string | number | (string | number)[] | true) {\n const keys = keyOrKeys === true ? [] : coerceArray(keyOrKeys);\n const needExpandNodes = this.getParallelTreeNodes(this.treeNodes).filter(node => {\n return keys.indexOf(node.key) > -1 || keyOrKeys === true;\n });\n needExpandNodes.forEach(node => {\n node.setExpanded(true);\n });\n this.syncFlattenTreeNodes();\n }\n\n // 设置节点选中状态\n public setNodeChecked(node: ThyTreeNode, checked: boolean, propagateUp = true, propagateDown = true): void {\n this._setNodeChecked(node, checked, propagateUp, propagateDown);\n this.syncFlattenTreeNodes();\n }\n\n private _setNodeChecked(node: ThyTreeNode, checked: boolean, propagateUp = true, propagateDown = true) {\n if (propagateDown && node.children) {\n node.children.forEach(subNode => {\n this._setNodeChecked(subNode, checked, false, true);\n });\n }\n if (!node.isDisabled) {\n if (node.children.length) {\n if (checked) {\n const isAllChildrenChecked = node.children.every(item => item.isChecked === ThyTreeNodeCheckState.checked);\n node.isChecked = isAllChildrenChecked ? ThyTreeNodeCheckState.checked : ThyTreeNodeCheckState.indeterminate;\n node.origin.checked = isAllChildrenChecked && checked;\n } else {\n const isAllChildrenUnChecked = node.children.every(item => item.isChecked === ThyTreeNodeCheckState.unchecked);\n node.isChecked = isAllChildrenUnChecked ? ThyTreeNodeCheckState.unchecked : ThyTreeNodeCheckState.indeterminate;\n node.origin.checked = isAllChildrenUnChecked && checked;\n }\n } else {\n node.isChecked = checked ? ThyTreeNodeCheckState.checked : ThyTreeNodeCheckState.unchecked;\n node.origin.checked = checked;\n }\n }\n if (propagateUp) {\n this._syncNodeCheckState(node.parentNode);\n }\n }\n\n public syncNodeCheckState(node: ThyTreeNode): void {\n this._syncNodeCheckState(node);\n this.syncFlattenTreeNodes();\n }\n\n private _syncNodeCheckState(node: ThyTreeNode) {\n if (node) {\n node.isChecked = this.checkStateResolve(node);\n this._syncNodeCheckState(node.parentNode);\n }\n }\n\n ngOnDestroy(): void {\n this.statusChange$.complete();\n this.statusChange$ = null;\n }\n}\n","import { Subject } from 'rxjs';\nimport {\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n HostBinding,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n ViewEncapsulation,\n numberAttribute,\n inject\n} from '@angular/core';\n\nimport { THY_TREE_ABSTRACT_TOKEN } from './tree-abstract';\nimport { ThyTreeNode } from './tree.class';\nimport { ThyTreeEmitEvent, ThyTreeNodeCheckState, ThyClickBehavior } from './tree.class';\nimport { ThyTreeService } from './tree.service';\nimport { ThyLoading } from 'ngx-tethys/loading';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { NgClass, NgStyle, NgTemplateOutlet } from '@angular/common';\nimport { coerceBooleanProperty } from 'ngx-tethys/util';\n\n/**\n * 树形控件的节点组件\n * @private\n * @name thy-tree-node\n */\n@Component({\n selector: 'thy-tree-node',\n templateUrl: './tree-node.component.html',\n encapsulation: ViewEncapsulation.None,\n imports: [ThyIcon, NgClass, NgStyle, NgTemplateOutlet, ThyLoading]\n})\nexport class ThyTreeNodeComponent implements OnDestroy, OnInit, OnChanges {\n root = inject(THY_TREE_ABSTRACT_TOKEN);\n thyTreeService = inject(ThyTreeService);\n\n /**\n * node 节点展现所需的数据\n */\n @Input() node: ThyTreeNode;\n\n /**\n * 设置 TreeNode 是否支持异步加载\n */\n @Input({ transform: coerceBooleanProperty }) thyAsync = false;\n\n /**\n * 设置 TreeNode 是否支持多选节点\n */\n @Input({ transform: coerceBooleanProperty }) thyMultiple = false;\n\n /**\n * 设置 TreeNode 是否支持拖拽排序\n */\n @Input({ transform: coerceBooleanProperty }) thyDraggable = false;\n\n /**\n * 设置 TreeNode 是否支持 Checkbox 选择\n */\n @Input({ transform: coerceBooleanProperty }) thyCheckable = false;\n\n /**\n * 点击节点的行为,`default` 为选中当前节点,`selectCheckbox` 为选中节点的 Checkbox, `thyCheckable` 为 true 时生效。\n * @default default\n */\n @Input() thyClickBehavior: ThyClickBehavior;\n\n /**\n * 设置节点名称是否支持超出截取\n * @default false\n */\n @Input({ transform: coerceBooleanProperty }) thyTitleTruncate: boolean;\n\n /**\n * 设置 TreeNode 的渲染模板\n */\n @Input() templateRef: TemplateRef<any>;\n\n /**\n * 设置子的空数据渲染模板\n */\n @Input() emptyChildrenTemplateRef: TemplateRef<any>;\n\n /**\n * 设置 node 点击事件\n */\n @Output() thyOnClick: EventEmitter<ThyTreeEmitEvent> = new EventEmitter<ThyTreeEmitEvent>();\n\n /**\n * 双击 node 事件\n */\n @Output() thyDblClick: EventEmitter<ThyTreeEmitEvent> = new EventEmitter<ThyTreeEmitEvent>();\n\n /**\n * 点击展开触发事件\n */\n @Output() thyOnExpandChange: EventEmitter<ThyTreeEmitEvent> = new EventEmitter<ThyTreeEmitEvent>();\n\n /**\n * 设置 check 选择事件\n */\n @Output() thyOnCheckboxChange: EventEmitter<ThyTreeEmitEvent> = new EventEmitter<ThyTreeEmitEvent>();\n\n /**\n * 设置 childrenTree 的渲染模板\n */\n @ContentChild('childrenTree') childrenTreeTemplateRef: TemplateRef<any>;\n\n /** The native `<div class=\"thy-tree-node-wrapper thy-sortable-item\"></div>` element. */\n @ViewChild('treeNodeWrapper', { static: true }) treeNodeWrapper: ElementRef<HTMLElement>;\n\n @HostBinding('class.thy-tree-node') thyTreeNodeClass = true;\n\n @HostBinding('class') itemClass: string;\n\n /**\n * 开启虚拟滚动时,单行节点的高度,当`thySize`为`default`时,该参数才生效\n */\n @Input({ transform: numberAttribute }) thyItemSize = 44;\n\n /**\n * 设置节点缩进距离,缩进距离 = thyIndent * node.level\n */\n @Input({ transform: numberAttribute }) thyIndent = 25;\n\n public get nodeIcon() {\n return this.node.origin.icon;\n }\n\n public get nodeIconStyle() {\n return this.node.origin.iconStyle;\n }\n\n private destroy$ = new Subject<void>();\n\n checkState = ThyTreeNodeCheckState;\n\n public clickNode(event: Event) {\n if (this.node.isDisabled) {\n this.expandNode(event);\n } else {\n if (this.thyCheckable && this.thyClickBehavior === 'selectCheckbox') {\n this.clickNodeCheck(event);\n } else {\n if (this.root.thyMultiple) {\n this.root.toggleTreeNode(this.node);\n } else {\n this.root.selectTreeNode(this.node);\n }\n }\n }\n this.thyOnClick.emit({\n eventName: 'click',\n event: event,\n node: this.node\n });\n }\n\n public dbClickNode(event: Event) {\n this.thyDblClick.emit({\n eventName: 'dbclick',\n event: event,\n node: this.node\n });\n }\n\n public clickNodeCheck(event: Event) {\n event.stopPropagation();\n if (this.node.isChecked === ThyTreeNodeCheckState.unchecked) {\n this.node.setChecked(true);\n } else if (this.node.isChecked === ThyTreeNodeCheckState.checked) {\n this.node.setChecked(false);\n } else if (this.node.isChecked === ThyTreeNodeCheckState.indeterminate) {\n if (this.node.children?.length) {\n const activeChildren = this.node.children.filter(item => !item.isDisabled);\n const isAllActiveChildrenChecked = activeChildren.every(item => item.isChecked);\n this.node.setChecked(!isAllActiveChildrenChecked);\n } else {\n this.node.setChecked(true);\n }\n }\n this.thyOnCheckboxChange.emit({\n eventName: 'checkboxChange',\n event: event,\n node: this.node\n });\n }\n\n public expandNode(event: Event) {\n event.stopPropagation();\n this.node.setExpanded(!this.node.isExpanded);\n if (this.root.thyShowExpand) {\n this.thyOnExpandChange.emit({\n eventName: 'expand',\n event: event,\n node: this.node\n });\n if (this.thyAsync && this.node.children.length === 0) {\n this.node.setLoading(true);\n }\n }\n }\n\n public isShowExpand(node: ThyTreeNode) {\n return this.root.isShowExpand(node);\n }\n\n ngOnInit(): void {\n this.itemClass = this.node?.itemClass?.join(' ');\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.node && !changes.node.isFirstChange()) {\n this.itemClass = changes?.node?.currentValue.itemClass?.join(' ');\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n","<div\n #treeNodeWrapper\n class=\"thy-tree-node-wrapper\"\n [class.active]=\"root.isSelected(node)\"\n [class.disabled]=\"node.isDisabled\"\n [class.expand]=\"node.children.length\"\n [style.height]=\"thyItemSize + 'px'\"\n (click)=\"clickNode($event)\"\n >\n <span class=\"thy-tree-index\" [style.width.px]=\"node.level * thyIndent\"></span>\n <span class=\"thy-tree-drag-icon\">\n <thy-icon thyIconName=\"drag\"></thy-icon>\n </span>\n <span class=\"thy-tree-expand\" (click)=\"expandNode($event)\">\n @if (isShowExpand(node)) {\n @if ((node.children && node.children.length > 0) || thyAsync || emptyChildrenTemplateRef) {\n @if (root.thyIcons?.expand && root.thyIcons?.collapse) {\n <thy-icon\n class=\"thy-tree-expand-icon\"\n [thyIconName]=\"node.isExpanded ? root.thyIcons.expand : root.thyIcons.collapse\"\n ></thy-icon>\n } @else {\n <thy-icon class=\"thy-tree-expand-icon\" [class.collapse]=\"!node.isExpanded\" thyIconName=\"caret-right-down\"></thy-icon>\n }\n }\n }\n </span>\n\n <span class=\"thy-tree-node-content\" (dblclick)=\"dbClickNode($event)\">\n @if (thyCheckable) {\n <input\n type=\"checkbox\"\n class=\"thy-tree-node-check\"\n [class.form-check-indeterminate]=\"node.isChecked === checkState.indeterminate\"\n [class.form-unchecked]=\"node.isChecked === checkState.unchecked\"\n [checked]=\"node.isChecked === checkState.checked\"\n [disabled]=\"node.isDisabled\"\n (click)=\"clickNodeCheck($event)\"\n />\n }\n @if (!templateRef) {\n @if (nodeIcon) {\n <span class=\"thy-tree-node-icon\"> <i [ngClass]=\"nodeIcon\" [ngStyle]=\"nodeIconStyle\"></i></span>\n }\n <span [title]=\"node.title\" class=\"thy-tree-node-title\" [class.truncate]=\"thyTitleTruncate\"> {{ node.title }}</span>\n }\n @if (templateRef) {\n <ng-template\n [ngTemplateOutlet]=\"templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: node, node: node, origin: node?.origin }\"\n ></ng-template>\n }\n </span>\n</div>\n@if (thyAsync) {\n @if (node.isLoading) {\n <thy-loading [thyDone]=\"!node.isLoading\"></thy-loading>\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ThyTreeNode } from './tree.class';\nimport { ThyTreeBeforeDragStartContext } from './tree.class';\n\n/**\n * @private\n */\n@Pipe({\n name: 'treeNodeDraggable'\n})\nexport class ThyTreeNodeDraggablePipe implements PipeTransform {\n transform(node: ThyTreeNode, beforeDragStart: (e: ThyTreeBeforeDragStartContext) => boolean): boolean {\n if (beforeDragStart) {\n const draggable = beforeDragStart({ item: node } as ThyTreeBeforeDragStartContext);\n return draggable;\n } else {\n return true;\n }\n }\n}\n","import { coerceBooleanProperty, helpers } from 'ngx-tethys/util';\nimport { useHostRenderer } from '@tethys/cdk/dom';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { CdkVirtualScrollViewport, CdkFixedSizeVirtualScroll, CdkVirtualForOf } from '@angular/cdk/scrolling';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n EventEmitter,\n forwardRef,\n HostBinding,\n Input,\n numberAttribute,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n ViewChildren,\n ViewEncapsulation,\n inject\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { THY_TREE_ABSTRACT_TOKEN } from './tree-abstract';\nimport { ThyTreeNode } from './tree.class';\nimport {\n ThyTreeBeforeDragDropContext,\n ThyTreeBeforeDragStartContext,\n ThyClickBehavior,\n ThyTreeDragDropEvent,\n ThyTreeDropPosition,\n ThyTreeEmitEvent,\n ThyTreeIcons,\n ThyTreeNodeCheckState,\n ThyTreeNodeData\n} from './tree.class';\nimport { ThyTreeService } from './tree.service';\nimport { ThyTreeNodeComponent } from './tree-node.component';\nimport { DOCUMENT } from '@angular/common';\nimport { CdkDrag, CdkDragDrop, CdkDragEnd, CdkDragMove, CdkDragStart, CdkDropList } from '@angular/cdk/drag-drop';\nimport { filter, startWith, takeUntil } from 'rxjs/operators';\nimport { Subject } from 'rxjs';\nimport { ThyTreeNodeDraggablePipe } from './tree.pipe';\n\ntype ThyTreeSize = 'sm' | 'default';\n\ntype ThyTreeType = 'default' | 'especial';\n\nconst treeTypeClassMap = {\n default: ['thy-tree-default'],\n especial: ['thy-tree-especial']\n};\n\nconst treeItemSizeMap = {\n default: 44,\n sm: 42\n};\n\n/**\n * 树形控件组件\n * @name thy-tree\n */\n@Component({\n selector: 'thy-tree',\n templateUrl: './tree.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ThyTree),\n multi: true\n },\n {\n provide: THY_TREE_ABSTRACT_TOKEN,\n useExisting: forwardRef(() => ThyTree)\n },\n ThyTreeService\n ],\n imports: [\n CdkDrag,\n CdkDropList,\n CdkVirtualScrollViewport,\n CdkFixedSizeVirtualScroll,\n CdkVirtualForOf,\n ThyTreeNodeComponent,\n ThyTreeNodeDraggablePipe\n ]\n})\nexport class ThyTree implements ControlValueAccessor, OnInit, OnChanges, AfterViewInit, OnDestroy {\n thyTreeService = inject(ThyTreeService);\n private cdr = inject(ChangeDetectorRef);\n private document = inject(DOCUMENT);\n\n private _templateRef: TemplateRef<any>;\n\n private _emptyChildrenTemplateRef: TemplateRef<any>;\n\n private _draggable = false;\n\n private _expandedKeys: (string | number)[];\n\n private _selectedKeys: (string | number)[];\n\n private hostRenderer = useHostRenderer();\n\n private _onTouched: () => void = () => {};\n\n private _onChange: (value: any) => void = (_: any) => {};\n\n private destroy$ = new Subject<void>();\n\n // 缓存 Element 和 DragRef 的关系,方便在 Item 拖动时查找\n private nodeDragsMap = new Map<HTMLElement, CdkDrag<ThyTreeNode>>();\n\n private nodeDragMoved = new Subject<CdkDragMove>();\n\n // private startDragNodeExpanded: boolean;\n\n private startDragNodeClone: ThyTreeNode;\n\n // Node 拖动经过目标时临时记录目标id以及相对应目标的位置\n private nodeDropTarget: {\n position?: ThyTreeDropPosition;\n key?: number | string;\n };\n\n private dropEnterPredicate?: (context: { source: ThyTreeNode; target: ThyTreeNode; dropPosition: ThyTreeDropPosition }) => boolean =\n context => {\n return (\n this.isShowExpand(context.target) || (!this.isShowExpand(context.target) && context.dropPosition !== ThyTreeDropPosition.in)\n );\n };\n\n public _selectionModel: SelectionModel<ThyTreeNode>;\n\n public get treeNodes() {\n return this.thyTreeService.treeNodes;\n }\n\n public flattenTreeNodes: ThyTreeNode[] = [];\n\n /**\n * 虚拟化滚动的视口\n */\n @Output() @ViewChild('viewport', { static: false }) viewport: CdkVirtualScrollViewport;\n\n /**\n * TreeNode 展现所需的数据\n * @type ThyTreeNodeData[]\n */\n @Input() thyNodes: ThyTreeNodeData[];\n\n /**\n * 设置 TreeNode 是否支持展开\n * @type boolean | Function\n */\n @Input() thyShowExpand: boolean | ((_: ThyTreeNodeData) => boolean) = true;\n\n /**\n * 设置是否支持多选节点\n */\n @HostBinding(`class.thy-multiple-selection-list`)\n @Input({ transform: coerceBooleanProperty })\n thyMultiple = false;\n\n /**\n * 设置 TreeNode 是否支持拖拽排序\n * @default false\n */\n @HostBinding('class.thy-tree-draggable')\n @Input({ transform: coerceBooleanProperty })\n set thyDraggable(value: boolean) {\n this._draggable = value;\n }\n\n get thyDraggable() {\n return this._draggable;\n }\n\n /**\n * 设置 TreeNode 是否支持 Checkbox 选择\n * @default false\n */\n @Input({ transform: coerceBooleanProperty }) thyCheckable: boolean;\n\n /**\n * 点击节点的行为,`default` 为选中当前节点,`selectCheckbox` 为选中节点的 Checkbox, `thyCheckable` 为 true 时生效。\n */\n @Input() thyClickBehavior: ThyClickBehavior = 'default';\n\n /**\n * 设置 check 状态的计算策略\n */\n @Input() set thyCheckStateResolve(resolve: (node: ThyTreeNode) => ThyTreeNodeCheckState) {\n if (resolve) {\n this.thyTreeService.setCheckStateResolve(resolve);\n }\n }\n\n /**\n * 设置 TreeNode 是否支持异步加载\n */\n @Input({ transform: coerceBooleanProperty }) thyAsync = false;\n\n private _thyType: ThyTreeType = 'default';\n\n /**\n * 设置不同展示类型的 Tree,`default` 为小箭头展示, `especial` 为 加减号图标展示\n * @type ThyTreeType\n * @default default\n */\n @Input()\n set thyType(type: ThyTreeType) {\n this._thyType = type;\n if (type === 'especial') {\n this.thyIcons = { expand: 'minus-square', collapse: 'plus-square' };\n }\n }\n\n get thyType() {\n return this._thyType;\n }\n\n /**\n * 设置不同 Tree 展开折叠的图标,`expand` 为展开状态的图标,`collapse` 为折叠状态的图标\n * @type { expand: string, collapse: string }\n */\n @Input() thyIcons: ThyTreeIcons = {};\n\n private _thySize: ThyTreeSize = 'default';\n /**\n * 支持 `sm` | `default` 两种大小,默认值为 `default`\n * @type ThyTreeSize\n * @default default\n */\n @Input()\n set thySize(size: ThyTreeSize) {\n this._thySize = size;\n if (this._thySize) {\n this._thyItemSize = treeItemSizeMap[this._thySize];\n } else {\n this._thyItemSize = treeItemSizeMap.default;\n }\n }\n\n get thySize() {\n return this._thySize;\n }\n\n /**\n * 设置是否开启虚拟滚动\n */\n @HostBinding('class.thy-virtual-scrolling-tree')\n @Input({ transform: coerceBooleanProperty })\n thyVirtualScroll = false;\n\n private _thyItemSize = 44;\n\n /**\n * 开启虚拟滚动时,单行节点的高度,当`thySize`为`default`时,该参数才生效\n * @default 44\n */\n @Input({ transform: numberAttribute })\n set thyItemSize(itemSize: number) {\n if (this.thySize !== 'default') {\n throw new Error('setting thySize and thyItemSize at the same time is not allowed');\n }\n this._thyItemSize = itemSize;\n }\n\n get thyItemSize() {\n return this._thyItemSize;\n }\n\n /**\n * 设置节点名称是否支持超出截取\n * @type boolean\n */\n @Input({ transform: coerceBooleanProperty }) thyTitleTruncate = true;\n\n /**\n * 已选中的 node 节点集合\n * @default []\n */\n @Input() thySelectedKeys: string[];\n\n /**\n * 展开指定的树节点\n */\n @Input() thyExpandedKeys: (string | number)[];\n\n /**\n * 是否展开所有树节点\n */\n @Input({ transform: coerceBooleanProperty }) thyExpandAll: boolean = false;\n\n /**\n * 设置缩进距离,缩进距离 = thyIndent * node.level\n * @type number\n */\n @Input({ transform: numberAttribute }) thyIndent = 25;\n\n /**\n * 拖拽之前的回调,函数返回 false 则阻止拖拽\n */\n @Input() thyBeforeDragStart: (context: ThyTreeBeforeDragStartContext) => boolean;\n\n /**\n * 拖放到元素时回调,函数返回 false 则阻止拖放到当前元素\n */\n @Input() thyBeforeDragDrop: (context: ThyTreeBeforeDragDropContext) => boolean;\n\n /**\n * 设置子 TreeNode 点击事件\n */\n @Output() thyOnClick: EventEmitter<ThyTreeEmitEvent> = new EventEmitter<ThyTreeEmitEvent>();\n\n /**\n * 设置 check 选择事件\n */\n @Output() thyOnCheckboxChange: EventEmitter<ThyTreeEmitEvent> = new EventEmitter<ThyTreeEmitEvent>();\n\n /**\n * 设置点击展开触发事件\n */\n @Output() thyOnExpandChange: EventEmitter<ThyTreeEmitEvent> = new EventEmitter<ThyTreeEmitEvent>();\n\n /**\n * 设置 TreeNode 拖拽事件\n */\n @Output() thyOnDragDrop: EventEmitter<ThyTreeDragDropEvent> = new EventEmitter<ThyTreeDragDropEvent>();\n\n /**\n * 双击 TreeNode 事件\n */\n @Output() thyDblClick: EventEmitter<ThyTreeEmitEvent> = new EventEmitter<ThyTreeEmitEvent>();\n\n /**\n * 设置 TreeNode 的渲染模板\n */\n @ContentChild('treeNodeTemplate', { static: true })\n set templateRef(template: TemplateRef<any>) {\n if (template) {\n this._templateRef = template;\n }\n }\n\n get templateRef() {\n return this._templateRef;\n }\n\n /**\n * 设置子的空数据渲染模板\n */\n @ContentChild('emptyChildrenTemplate', { static: true }) emptyChildrenTemplate: TemplateRef<any>;\n set emptyChildrenTemplateRef(template: TemplateRef<any>) {\n if (template) {\n this._emptyChildrenTemplateRef = template;\n }\n }\n\n get emptyChildrenTemplateRef() {\n return this._emptyChildrenTemplateRef;\n }\n\n @HostBinding('class.thy-tree')\n thyTreeClass = true;\n\n @HostBinding('class.thy-tree-dragging')\n dragging: boolean;\n\n @ViewChildren(CdkDrag) cdkDrags: QueryList<CdkDrag<ThyTreeNode>>;\n\n ngOnInit(): void {\n this._initThyNodes();\n this._setTreeType();\n this._setTreeSize();\n this._instanceSelectionModel();\n this._selectTreeNodes(this.thySelectedKeys);\n\n this.thyTreeService.flattenNodes$.subscribe(flattenTreeNodes => {\n this.flattenTreeNodes = flattenTreeNodes;\n this.cdr.markForCheck();\n });\n }\n\n ngAfterViewInit(): void {\n this.cdkDrags.changes\n .pipe(startWith(this.cdkDrags), takeUntil(this.destroy$))\n .subscribe((drags: QueryList<CdkDrag<ThyTreeNode>>) => {\n this.nodeDragsMap.clear();\n drags.forEach(drag => {\n if (drag.data) {\n // cdkDrag 变化时,缓存 Element 与 DragRef 的关系,方便 Drag Move 时查找\n this.nodeDragsMap.set(drag.element.nativeElement, drag);\n }\n });\n });\n\n this.nodeDragMoved\n .pipe(\n // auditTime(30),\n // auditTime 可能会导致拖动结束后仍然执行 moved ,所以通过判断 dragging 状态来过滤无效 moved\n filter((event: CdkDragMove) => event.source._dragRef.isDragging()),\n takeUntil(this.destroy$)\n )\n .subscribe(event => {\n this.onDragMoved(event);\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.thyNodes && !changes.thyNodes.isFirstChange()) {\n this._initThyNodes();\n }\n if (changes.thyType && !changes.thyType.isFirstChange()) {\n this._setTreeType();\n }\n if (changes.thyMultiple && !changes.thyMultiple.isFirstChange()) {\n this._instanceSelectionModel();\n }\n\n if (changes.thySelectedKeys && !changes.thySelectedKeys.isFirstChange()) {\n this._selectedKeys = changes.thySelectedKeys.currentValue;\n this._selectTreeNodes(changes.thySelectedKeys.currentValue);\n }\n\n if (changes.thyExpandedKeys && !changes.thyExpandedKeys.isFirstChange()) {\n this._handleExpandedKeys();\n }\n if (changes.thyExpandAll && !changes.thyExpandAll.isFirstChange()) {\n this._handleExpandedKeys();\n }\n }\n\n renderView = () => {};\n\n eventTriggerChanged(event: ThyTreeEmitEvent): void {\n switch (event.eventName) {\n case 'expand':\n this.thyOnExpandChange.emit(event);\n break;\n\n case 'checkboxChange':\n this.thyOnCheckboxChange.emit(event);\n break;\n }\n }\n\n private _initThyNodes() {\n this._expandedKeys = this.getExpandedNodes().map(node => node.key);\n this._selectedKeys = this.getSelectedNodes().map(node => node.key);\n this.thyTreeService.initializeTreeNodes(this.thyNodes);\n this.flattenTreeNodes = this.thyTreeService.flattenTreeNodes;\n this._selectTreeNodes(this._selectedKeys);\n this._handleExpandedKeys();\n }\n\n private _handleExpandedKeys() {\n if (this.thyExpandedKeys?.length) {\n this._expandedKeys = helpers.concatArray(\n this.thyExpandedKeys.filter(key => !this._expandedKeys.includes(key)),\n this._expandedKeys\n );\n }\n this.thyTreeService.expandTreeNodes(this.thyExpandAll || this._expandedKeys);\n }\n\n private _setTreeType() {\n if (this.thyType && treeTypeClassMap[this.thyType]) {\n treeTypeClassMap[this.thyType].forEach(className => {\n this.hostRenderer.addClass(className);\n });\n }\n }\n\n private _setTreeSize() {\n if (this.thySize) {\n this.hostRenderer.addClass(`thy-tree-${this.thySize}`);\n }\n }\n\n private _instanceSelectionModel() {\n this._selectionModel = new SelectionModel<any>(this.thyMultiple);\n }\n\n private _selectTreeNodes(keys: (string | number)[]) {\n (keys || []).forEach(key => {\n const node = this.thyTreeService.getTreeNode(key);\n if (node) {\n this.selectTreeNode(this.thyTreeService.getTreeNode(key));\n }\n });\n }\n\n isSelected(node: ThyTreeNode) {\n return this._selectionModel.isSelected(node);\n }\n\n toggleTreeNode(node: ThyTreeNode) {\n if (node && !node.isDisabled) {\n this._selectionModel.toggle(node);\n }\n }\n\n trackByFn(index: number, item: any) {\n return item.key || index;\n }\n\n isShowExpand(node: ThyTreeNode) {\n if (helpers.isFunction(this.thyShowExpand)) {\n return (this.thyShowExpand as Function)(node);\n } else {\n return this.thyShowExpand;\n }\n }\n\n writeValue(value: ThyTreeNodeData[]): void {\n if (value) {\n this.thyNodes = value;\n this._initThyNodes();\n }\n }\n\n registerOnChange(fn: any): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this._onTouched = fn;\n }\n\n onDragStarted(event: CdkDragStart<ThyTreeNode>) {\n this.dragging = true;\n this.startDragNodeClone = Object.assign({}, event.source.data);\n if (event.source.data.isExpanded) {\n event.source.data.setExpanded(false);\n }\n }\n\n emitDragMoved(event: CdkDragMove) {\n this.nodeDragMoved.next(event);\n }\n\n onDragMoved(event: CdkDragMove<ThyTreeNode>) {\n // 通过鼠标位置查找对应的目标 Item 元素\n let currentPointElement = this.document.elementFromPoint(event.pointerPosition.x, event.pointerPosition.y) as HTMLElement;\n if (!currentPointElement) {\n this.cleanupDragArtifacts();\n return;\n }\n let targetElement = currentPointElement.classList.contains('thy-tree-node')\n ? currentPointElement\n : (currentPointElement.closest('.thy-tree-node') as HTMLElement);\n if (!targetElement) {\n this.cleanupDragArtifacts();\n return;\n }\n // 缓存放置目标Id 并计算鼠标相对应的位置\n this.nodeDropTarget = {\n key: this.nodeDragsMap.get(targetElement)?.data.key,\n position: this.getTargetPosition(targetElement, event)\n };\n // 执行外部传入的 dropEnterPredicate 判断是否允许拖入目标项\n if (this.dropEnterPredicate) {\n const targetDragRef = this.nodeDragsMap.get(targetElement);\n if (\n this.dropEnterPredicate({\n source: event.source.data,\n target: targetDragRef.data,\n dropPosition: this.nodeDropTarget.position\n })\n ) {\n this.showDropPositionPlaceholder(targetElement);\n } else {\n this.nodeDropTarget = null;\n this.cleanupDragArtifacts();\n }\n } else {\n this.showDropPositionPlaceholder(targetElement);\n }\n }\n\n onDragEnded(event: CdkDragEnd<ThyTreeNode>) {\n this.dragging = false;\n // 拖拽结束后恢复原始的展开状态\n event.source.data.setExpanded(this.startDragNodeClone.isExpanded);\n setTimeout(() => {\n this.startDragNodeClone = null;\n });\n }\n\n onListDropped(event: CdkDragDrop<ThyTreeNode[], ThyTreeNode[], ThyTreeNode>) {\n if (!this.nodeDropTarget) {\n return;\n }\n if (!this.isShowExpand(this.startDragNodeClone) && this.nodeDropTarget.position === ThyTreeDropPosition.in) {\n this.cleanupDragArtifacts();\n return;\n }\n\n const sourceNode = this.startDragNodeClone;\n const sourceNodeParent = sourceNode.parentNode;\n const targetDragRef = this.cdkDrags.find(item => item.data?.key === this.nodeDropTarget.key);\n const targetNode = targetDragRef?.data;\n const targetNodeParent = targetNode.parentNode;\n\n const beforeDragDropContext: ThyTreeBeforeDragDropContext = {\n previousItem: sourceNode,\n previousContainerItems: sourceNodeParent?.children,\n item: targetNode,\n containerItems: targetNodeParent?.children,\n position: this.nodeDropTarget.position\n };\n\n if (this.thyBeforeDragDrop && !this.thyBeforeDragDrop(beforeDragDropContext)) {\n this.cleanupDragArtifacts();\n return;\n }\n\n this.thyTreeService.deleteTreeNode(sourceNode);\n\n switch (this.nodeDropTarget.position) {\n case 'before':\n const beforeInsertIndex = (targetNodeParent?.children || this.treeNodes).indexOf(targetNode);\n this.thyTreeService.addTreeNode(sourceNode, targetNodeParent, beforeInsertIndex);\n break;\n case 'after':\n const afterInsertIndex = (targetNodeParent?.children || this.treeNodes).indexOf(targetNode) + 1;\n this.thyTreeService.addTreeNode(sourceNode, targetNodeParent, afterInsertIndex);\n break;\n case 'in':\n this.thyTreeService.addTreeNode(sourceNode, targetNode);\n break;\n }\n\n this.thyTreeService.syncFlattenTreeNodes();\n\n let after: ThyTreeNode = null;\n let targe: ThyTreeNode = null;\n if (beforeDragDropContext.position === ThyTreeDropPosition.before) {\n const targetContainerNodes = targetNodeParent?.children || this.treeNodes;\n after = targetContainerNodes[targetContainerNodes.indexOf(targetNode) - 2];\n targe = targetNodeParent;\n } else if (beforeDragDropContext.position === ThyTreeDropPosition.after) {\n after = targetNode;\n targe = targetNodeParent;\n } else {\n after = targetNode.children?.length > 0 ? targetNode.children[targetNode.children.length - 2] : null;\n targe = targetNode;\n }\n\n this.thyOnDragDrop.emit({\n dragNode: this.thyTreeService.getTreeNode(sourceNode.key),\n targetNode: targe,\n afterNode: after\n });\n\n this.cleanupDragArtifacts();\n }\n\n private getTargetPosition(target: HTMLElement, event: CdkDragMove) {\n const targetRect = target.getBoundingClientRect();\n const beforeOrAfterGap = targetRect.height * 0.3;\n // 将 Node 高度分为上中下三段,其中上下的 Gap 为 height 的 30%,通过判断鼠标位置在哪一段 gap 来计算对应的位置\n if (event.pointerPosition.y - targetRect.top < beforeOrAfterGap) {\n return ThyTreeDropPosition.before;\n } else if (event.pointerPosition.y >= targetRect.bottom - beforeOrAfterGap) {\n return ThyTreeDropPosition.after;\n } else {\n return ThyTreeDropPosition.in;\n }\n }\n\n private showDropPositionPlaceholder(targetElement: HTMLElement) {\n this.cleanupDropPositionPlaceholder();\n if (this.nodeDropTarget && targetElement) {\n targetElement.classList.add(`drop-position-${this.nodeDropTarget.position}`);\n }\n }\n\n private cleanupDropPositionPlaceholder() {\n this.document.querySelectorAll('.drop-position-before').forEach(element => element.classList.remove('drop-position-before'));\n this.document.querySelectorAll('.drop-position-after').forEach(element => element.classList.remove('drop-position-after'));\n this.document.querySelectorAll('.drop-position-in').forEach(element => element.classList.remove('drop-position-in'));\n }\n\n private cleanupDragArtifacts() {\n this.nodeDropTarget = null;\n this.cleanupDropPositionPlaceholder();\n }\n\n // region Public Functions\n\n selectTreeNode(node: ThyTreeNode) {\n if (node && !node.isDisabled) {\n this._selectionModel.select(node);\n this.thyTreeService.syncFlattenTreeNodes();\n }\n }\n\n getRootNodes(): ThyTreeNode[] {\n return this.treeNodes;\n }\n\n getTreeNode(key: string) {\n return this.thyTreeService.getTreeNode(key);\n }\n\n getSelectedNode(): ThyTreeNode {\n return this._selectionModel ? this._selectionModel.selected[0] : null;\n }\n\n getSelectedNodes(): ThyTreeNode[] {\n return this._selectionModel ? this._selectionModel.selected : [];\n }\n\n getExpandedNodes(): ThyTreeNode[] {\n return this.thyTreeService.getExpandedNodes();\n }\n\n getCheckedNodes(): ThyTreeNode[] {\n return this.thyTreeService.getCheckedNodes();\n }\n\n addTreeNode(node: ThyTreeNodeData, parent?: ThyTreeNode, index = -1) {\n this.thyTreeService.addTreeNode(new ThyTreeNode(node, null, this.thyTreeService), parent, index);\n this.thyTreeService.syncFlattenTreeNodes();\n }\n\n deleteTreeNode(node: ThyTreeNode) {\n if (this.isSelected(node)) {\n this._selectionModel.toggle(node);\n }\n this.thyTreeService.deleteTreeNode(node);\n this.thyTreeService.syncFlattenTreeNodes();\n }\n\n expandAllNodes() {\n const nodes = this.getRootNodes();\n nodes.forEach(n => n.setExpanded(true, true));\n }\n\n collapsedAllNodes() {\n const nodes = this.getRootNodes();\n nodes.forEach(n => n.setExpanded(false, true));\n }\n\n // endregion\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n","@if (thyVirtualScroll) {\n <cdk-virtual-scroll-viewport\n #viewport\n [itemSize]=\"thyItemSize\"\n [style.height]=\"'100%'\"\n cdkDropList\n [cdkDropListAutoScrollStep]=\"6\"\n [cdkDropListData]=\"flattenTreeNodes\"\n [cdkDropListSortingDisabled]=\"true\"\n (cdkDropListDropped)=\"onListDropped($event)\"\n >\n <div class=\"virtual-trees-container\">\n <thy-tree-node\n *cdkVirtualFor=\"let node of flattenTreeNodes; trackBy: trackByFn; let i = index\"\n cdkDrag\n [cdkDragData]=\"node\"\n [cdkDragDisabled]=\"!thyDraggable || !(node | treeNodeDraggable : thyBeforeDragStart)\"\n (cdkDragStarted)=\"onDragStarted($event)\"\n (cdkDragEnded)=\"onDragEnded($event)\"\n (cdkDragMoved)=\"emitDragMoved($event)\"\n [node]=\"node\"\n [templateRef]=\"templateRef\"\n [emptyChildrenTemplateRef]=\"emptyChildrenTemplate\"\n [thyAsync]=\"thyAsync\"\n [thyDraggable]=\"thyDraggable\"\n [thyCheckable]=\"thyCheckable\"\n [thyMultiple]=\"thyMultiple\"\n [thyClickBehavior]=\"thyClickBehavior\"\n [thyTitleTruncate]=\"thyTitleTruncate\"\n [thyItemSize]=\"thyItemSize\"\n [thyIndent]=\"thyIndent\"\n (thyOnClick)=\"thyOnClick.emit($event)\"\n (thyDblClick)=\"thyDblClick.emit($event)\"\n (thyOnExpandChange)=\"eventTriggerChanged($event)\"\n (thyOnCheckboxChange)=\"eventTriggerChanged($event)\">\n </thy-tree-node>\n </div>\n </cdk-virtual-scroll-viewport>\n}\n\n@if (!thyVirtualScroll) {\n <div\n cdkDropList\n [cdkDropListAutoScrollStep]=\"6\"\n [cdkDropListData]=\"flattenTreeNodes\"\n [cdkDropListSortingDisabled]=\"true\"\n (cdkDropListDropped)=\"onListDropped($event)\">\n @for (node of flattenTreeNodes; track trackByFn(i, node); let i = $index) {\n <thy-tree-node\n cdkDrag\n [cdkDragData]=\"node\"\n [cdkDragDisabled]=\"!thyDraggable || !(node | treeNodeDraggable : thyBeforeDragStart)\"\n (cdkDragStarted)=\"onDragStarted($event)\"\n (cdkDragEnded)=\"onDragEnded($event)\"\n (cdkDragMoved)=\"emitDragMoved($event)\"\n [node]=\"node\"\n [templateRef]=\"templateRef\"\n [emptyChildrenTemplateRef]=\"emptyChildrenTemplate\"\n [thyAsync]=\"thyAsync\"\n [thyDraggable]=\"thyDraggable\"\n [thyCheckable]=\"thyCheckable\"\n [thyMultiple]=\"thyMultiple\"\n [thyTitleTruncate]=\"thyTitleTruncate\"\n [thyItemSize]=\"thyItemSize\"\n [thyClickBehavior]=\"thyClickBehavior\"\n [thyIndent]=\"thyIndent\"\n (thyOnClick)=\"thyOnClick.emit($event)\"\n (thyDblClick)=\"thyDblClick.emit($event)\"\n (thyOnExpandChange)=\"eventTriggerChanged($event)\"\n (thyOnCheckboxChange)=\"thyOnCheckboxChange.emit($event)\">\n </thy-tree-node>\n }\n </div>\n}\n","import { ThyButtonModule } from 'ngx-tethys/button';\nimport { ThyCheckboxModule } from 'ngx-tethys/checkbox';\nimport { ThyIconModule } from 'ngx-tethys/icon';\nimport { ThyInputModule } from 'ngx-tethys/input';\nimport { ThyListModule } from 'ngx-tethys/list';\nimport { ThyLoadingModule } from 'ngx-tethys/loading';\nimport { ThyOptionModule, ThySharedModule } from 'ngx-tethys/shared';\n\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { ThyTreeNodeComponent } from './tree-node.component';\nimport { ThyTree } from './tree.component';\nimport { ThyTreeService } from './tree.service';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { ThyTreeNodeDraggablePipe } from './tree.pipe';\n\n@NgModule({\n imports: [\n DragDropModule,\n CommonModule,\n ThyInputModule,\n ThyButtonModule,\n ThySharedModule,\n FormsModule,\n ThyListModule,\n ThyOptionModule,\n ThyLoadingModule,\n ThyIconModule,\n ThyCheckboxModule,\n ScrollingModule,\n ThyTree,\n ThyTreeNodeComponent,\n ThyTreeNodeDraggablePipe\n ],\n exports: [ThyTree, ThyTreeNodeComponent],\n providers: [ThyTreeService]\n})\nexport class ThyTreeModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { Version } from '@angular/core';
2
2
 
3
- const VERSION = new Version('19.0.6');
3
+ const VERSION = new Version('19.0.7');
4
4
 
5
5
  /**
6
6
  * Generated bundle index. Do not edit.
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-tethys.mjs","sources":["../../../src/version.ts","../../../src/ngx-tethys.ts"],"sourcesContent":["import { Version } from '@angular/core';\n\nexport const VERSION = new Version('19.0.6');\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;MAEa,OAAO,GAAG,IAAI,OAAO,CAAC,QAAQ;;ACF3C;;AAEG;;;;"}
1
+ {"version":3,"file":"ngx-tethys.mjs","sources":["../../../src/version.ts","../../../src/ngx-tethys.ts"],"sourcesContent":["import { Version } from '@angular/core';\n\nexport const VERSION = new Version('19.0.7');\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;MAEa,OAAO,GAAG,IAAI,OAAO,CAAC,QAAQ;;ACF3C;;AAEG;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngx-tethys",
3
- "version": "19.0.6",
3
+ "version": "19.0.7",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+ssh://git@github.com/atinc/ngx-tethys.git"
@@ -1 +1 @@
1
- export declare const VERSION = "19.0.6";
1
+ export declare const VERSION = "19.0.7";
@@ -1,4 +1,4 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.VERSION = void 0;
4
- exports.VERSION = '19.0.6';
4
+ exports.VERSION = '19.0.7';
@@ -1,4 +1,4 @@
1
- import { Subject } from 'rxjs';
1
+ import { BehaviorSubject, Subject } from 'rxjs';
2
2
  export declare enum ThyTreeNodeCheckState {
3
3
  unchecked = 0,
4
4
  checked = 1,
@@ -58,8 +58,21 @@ export interface ThyTreeFormatEmitEvent {
58
58
  event?: MouseEvent | DragEvent;
59
59
  }
60
60
  export interface IThyTreeService {
61
+ selectedNode: ThyTreeNode;
62
+ flattenNodes$: BehaviorSubject<ThyTreeNode[]>;
63
+ flattenTreeNodes: ThyTreeNode[];
64
+ treeNodes: ThyTreeNode[];
61
65
  statusChange$: Subject<ThyTreeFormatEmitEvent>;
66
+ initializeTreeNodes: (rootNodes: ThyTreeNodeData[]) => void;
62
67
  syncFlattenTreeNodes: () => ThyTreeNode[];
68
+ setCheckStateResolve: (resolve: (node: ThyTreeNode) => ThyTreeNodeCheckState) => void;
69
+ resetSortedTreeNodes: (treeNodes: ThyTreeNode[], parent?: ThyTreeNode) => void;
70
+ getTreeNode: (key: string | number) => ThyTreeNode;
71
+ getExpandedNodes: () => ThyTreeNode[];
72
+ getCheckedNodes: () => ThyTreeNode[];
73
+ deleteTreeNode: (node: ThyTreeNode) => void;
74
+ addTreeNode: (node: ThyTreeNode, parent?: ThyTreeNode, index?: number) => void;
75
+ expandTreeNodes: (keyOrKeys: string | number | (string | number)[] | true) => void;
63
76
  setNodeChecked: (node: ThyTreeNode, checked: boolean, propagateUp?: boolean, propagateDown?: boolean) => void;
64
77
  syncNodeCheckState: (node: ThyTreeNode) => void;
65
78
  checkStateResolve: (node: ThyTreeNode) => ThyTreeNodeCheckState;
@@ -19,7 +19,7 @@ export declare class ThyTreeService implements IThyTreeService, OnDestroy {
19
19
  private getParallelTreeNodes;
20
20
  setCheckStateResolve(resolve?: (node: ThyTreeNode) => ThyTreeNodeCheckState): void;
21
21
  resetSortedTreeNodes(treeNodes: ThyTreeNode[], parent?: ThyTreeNode): void;
22
- getTreeNode(key: string | number): ThyTreeNode<any>;
22
+ getTreeNode(key: string | number): ThyTreeNode;
23
23
  getExpandedNodes(): ThyTreeNode[];
24
24
  getCheckedNodes(): ThyTreeNode[];
25
25
  deleteTreeNode(node: ThyTreeNode): void;