@ali-hm/angular-tree-component 21.0.0 → 21.0.3

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.
@@ -1 +1 @@
1
- {"version":3,"file":"ali-hm-angular-tree-component.mjs","sources":["../../../projects/angular-tree-component/src/lib/constants/keys.ts","../../../projects/angular-tree-component/src/lib/models/tree-options.model.ts","../../../projects/angular-tree-component/src/lib/constants/events.ts","../../../projects/angular-tree-component/src/lib/models/tree-node.model.ts","../../../projects/angular-tree-component/src/lib/models/tree.model.ts","../../../projects/angular-tree-component/src/lib/models/tree-dragged-element.model.ts","../../../projects/angular-tree-component/src/lib/models/tree-virtual-scroll.model.ts","../../../projects/angular-tree-component/src/lib/components/loading.component.ts","../../../projects/angular-tree-component/src/lib/components/tree-viewport.component.ts","../../../projects/angular-tree-component/src/lib/directives/tree-drop.directive.ts","../../../projects/angular-tree-component/src/lib/components/tree-node-drop-slot.component.ts","../../../projects/angular-tree-component/src/lib/components/tree-node-checkbox.component.ts","../../../projects/angular-tree-component/src/lib/components/tree-node-expander.component.ts","../../../projects/angular-tree-component/src/lib/directives/tree-drag.directive.ts","../../../projects/angular-tree-component/src/lib/components/tree-node-content.component.ts","../../../projects/angular-tree-component/src/lib/components/tree-node-wrapper.component.ts","../../../projects/angular-tree-component/src/lib/directives/tree-animate-open.directive.ts","../../../projects/angular-tree-component/src/lib/components/tree-node-collection.component.ts","../../../projects/angular-tree-component/src/lib/components/tree.component.ts","../../../projects/angular-tree-component/src/lib/angular-tree-component.module.ts","../../../projects/angular-tree-component/src/public-api.ts","../../../projects/angular-tree-component/src/ali-hm-angular-tree-component.ts"],"sourcesContent":["export const KEYS = {\r\n LEFT: 37,\r\n UP: 38,\r\n RIGHT: 39,\r\n DOWN: 40,\r\n ENTER: 13,\r\n SPACE: 32,\r\n CONTEXT_MENU: 32\r\n};\r\n","import { TreeNode } from './tree-node.model';\r\nimport { TreeModel } from './tree.model';\r\nimport { KEYS } from '../constants/keys';\r\nimport { ITreeOptions } from '../defs/api';\r\n\r\nexport interface IActionHandler {\r\n (tree: TreeModel, node: TreeNode, $event: any, ...rest);\r\n}\r\n\r\nexport const TREE_ACTIONS = {\r\n TOGGLE_ACTIVE: (tree: TreeModel, node: TreeNode, $event: any) => node && node.toggleActivated(),\r\n TOGGLE_ACTIVE_MULTI: (tree: TreeModel, node: TreeNode, $event: any) => node && node.toggleActivated(true),\r\n TOGGLE_SELECTED: (tree: TreeModel, node: TreeNode, $event: any) => node && node.toggleSelected(),\r\n ACTIVATE: (tree: TreeModel, node: TreeNode, $event: any) => node.setIsActive(true),\r\n DEACTIVATE: (tree: TreeModel, node: TreeNode, $event: any) => node.setIsActive(false),\r\n SELECT: (tree: TreeModel, node: TreeNode, $event: any) => node.setIsSelected(true),\r\n DESELECT: (tree: TreeModel, node: TreeNode, $event: any) => node.setIsSelected(false),\r\n FOCUS: (tree: TreeModel, node: TreeNode, $event: any) => node.focus(),\r\n TOGGLE_EXPANDED: (tree: TreeModel, node: TreeNode, $event: any) => node.hasChildren && node.toggleExpanded(),\r\n EXPAND: (tree: TreeModel, node: TreeNode, $event: any) => node.expand(),\r\n COLLAPSE: (tree: TreeModel, node: TreeNode, $event: any) => node.collapse(),\r\n DRILL_DOWN: (tree: TreeModel, node: TreeNode, $event: any) => tree.focusDrillDown(),\r\n DRILL_UP: (tree: TreeModel, node: TreeNode, $event: any) => tree.focusDrillUp(),\r\n NEXT_NODE: (tree: TreeModel, node: TreeNode, $event: any) => tree.focusNextNode(),\r\n PREVIOUS_NODE: (tree: TreeModel, node: TreeNode, $event: any) => tree.focusPreviousNode(),\r\n MOVE_NODE: (tree: TreeModel, node: TreeNode, $event: any, {from , to}: {from: any, to: any}) => {\r\n // default action assumes from = node, to = {parent, index}\r\n if ($event.ctrlKey) {\r\n tree.copyNode(from, to);\r\n } else {\r\n tree.moveNode(from, to);\r\n }\r\n }\r\n};\r\n\r\nconst defaultActionMapping: IActionMapping = {\r\n mouse: {\r\n click: TREE_ACTIONS.TOGGLE_ACTIVE,\r\n dblClick: null,\r\n contextMenu: null,\r\n expanderClick: TREE_ACTIONS.TOGGLE_EXPANDED,\r\n checkboxClick: TREE_ACTIONS.TOGGLE_SELECTED,\r\n drop: TREE_ACTIONS.MOVE_NODE\r\n },\r\n keys: {\r\n [KEYS.RIGHT]: TREE_ACTIONS.DRILL_DOWN,\r\n [KEYS.LEFT]: TREE_ACTIONS.DRILL_UP,\r\n [KEYS.DOWN]: TREE_ACTIONS.NEXT_NODE,\r\n [KEYS.UP]: TREE_ACTIONS.PREVIOUS_NODE,\r\n [KEYS.SPACE]: TREE_ACTIONS.TOGGLE_ACTIVE,\r\n [KEYS.ENTER]: TREE_ACTIONS.TOGGLE_ACTIVE\r\n }\r\n};\r\n\r\nexport interface IActionMapping {\r\n mouse?: {\r\n click?: IActionHandler,\r\n dblClick?: IActionHandler,\r\n contextMenu?: IActionHandler,\r\n expanderClick?: IActionHandler,\r\n checkboxClick?: IActionHandler,\r\n dragStart?: IActionHandler,\r\n drag?: IActionHandler,\r\n dragEnd?: IActionHandler,\r\n dragOver?: IActionHandler,\r\n dragLeave?: IActionHandler,\r\n dragEnter?: IActionHandler,\r\n drop?: IActionHandler,\r\n mouseOver?: IActionHandler,\r\n mouseOut?: IActionHandler\r\n };\r\n keys?: {\r\n [key: number]: IActionHandler\r\n };\r\n}\r\n\r\nexport class TreeOptions {\r\n get hasChildrenField(): string { return this.options.hasChildrenField || 'hasChildren'; }\r\n get childrenField(): string { return this.options.childrenField || 'children'; }\r\n get displayField(): string { return this.options.displayField || 'name'; }\r\n get idField(): string { return this.options.idField || 'id'; }\r\n get isExpandedField(): string { return this.options.isExpandedField || 'isExpanded'; }\r\n get getChildren(): any { return this.options.getChildren; }\r\n get levelPadding(): number { return this.options.levelPadding || 0; }\r\n get useVirtualScroll(): boolean { return this.options.useVirtualScroll; }\r\n get animateExpand(): boolean { return this.options.animateExpand; }\r\n get animateSpeed(): number { return this.options.animateSpeed || 1; }\r\n get animateAcceleration(): number { return this.options.animateAcceleration || 1.2; }\r\n get scrollOnActivate(): boolean { return this.options.scrollOnActivate === undefined ? true : this.options.scrollOnActivate; }\r\n get rtl(): boolean { return !!this.options.rtl; }\r\n get rootId(): any {return this.options.rootId; }\r\n get useCheckbox(): boolean { return this.options.useCheckbox; }\r\n get useTriState(): boolean { return this.options.useTriState === undefined ? true : this.options.useTriState; }\r\n get scrollContainer(): HTMLElement { return this.options.scrollContainer; }\r\n get allowDragoverStyling(): boolean { return this.options.allowDragoverStyling === undefined ? true : this.options.allowDragoverStyling; }\r\n actionMapping: IActionMapping;\r\n\r\n constructor(private options: ITreeOptions = {}) {\r\n this.actionMapping = {\r\n mouse: {\r\n click: this.options?.actionMapping?.mouse?.click ?? defaultActionMapping.mouse.click,\r\n dblClick: this.options?.actionMapping?.mouse?.dblClick ?? defaultActionMapping.mouse.dblClick,\r\n contextMenu: this.options?.actionMapping?.mouse?.contextMenu ?? defaultActionMapping.mouse.contextMenu,\r\n expanderClick: this.options?.actionMapping?.mouse?.expanderClick ?? defaultActionMapping.mouse.expanderClick,\r\n checkboxClick: this.options?.actionMapping?.mouse?.checkboxClick ?? defaultActionMapping.mouse.checkboxClick,\r\n drop: this.options?.actionMapping?.mouse?.drop ?? defaultActionMapping.mouse.drop,\r\n dragStart: this.options?.actionMapping?.mouse?.dragStart ?? undefined,\r\n drag: this.options?.actionMapping?.mouse?.drag ?? undefined,\r\n dragEnd: this.options?.actionMapping?.mouse?.dragEnd ?? undefined,\r\n dragOver: this.options?.actionMapping?.mouse?.dragOver ?? undefined,\r\n dragLeave: this.options?.actionMapping?.mouse?.dragLeave ?? undefined,\r\n dragEnter: this.options?.actionMapping?.mouse?.dragEnter ?? undefined,\r\n mouseOver: this.options?.actionMapping?.mouse?.mouseOver ?? undefined,\r\n mouseOut: this.options?.actionMapping?.mouse?.mouseOut ?? undefined,\r\n },\r\n keys: {\r\n [KEYS.RIGHT]: TREE_ACTIONS.DRILL_DOWN,\r\n [KEYS.LEFT]: TREE_ACTIONS.DRILL_UP,\r\n [KEYS.DOWN]: TREE_ACTIONS.NEXT_NODE,\r\n [KEYS.UP]: TREE_ACTIONS.PREVIOUS_NODE,\r\n [KEYS.SPACE]: TREE_ACTIONS.TOGGLE_ACTIVE,\r\n [KEYS.ENTER]: TREE_ACTIONS.TOGGLE_ACTIVE\r\n }\r\n }\r\n\r\n if (this.options?.actionMapping?.keys) {\r\n this.actionMapping.keys = {\r\n ...this.actionMapping.keys,\r\n ...this.options.actionMapping.keys\r\n }\r\n }\r\n\r\n if (options.rtl) {\r\n this.actionMapping.keys[KEYS.RIGHT] = <IActionHandler>options.actionMapping?.keys[KEYS.RIGHT] || TREE_ACTIONS.DRILL_UP;\r\n this.actionMapping.keys[KEYS.LEFT] = <IActionHandler>options.actionMapping?.keys[KEYS.LEFT] || TREE_ACTIONS.DRILL_DOWN;\r\n }\r\n }\r\n\r\n getNodeClone(node: TreeNode): any {\r\n if (this.options.getNodeClone) {\r\n return this.options.getNodeClone(node);\r\n }\r\n\r\n // remove id from clone\r\n // keeping ie11 compatibility\r\n const nodeClone = Object.assign({}, node.data);\r\n if (nodeClone.id) {\r\n delete nodeClone.id;\r\n }\r\n return nodeClone;\r\n }\r\n\r\n allowDrop(element, to, $event?): boolean {\r\n if (this.options.allowDrop instanceof Function) {\r\n return this.options.allowDrop(element, to, $event);\r\n }\r\n else {\r\n return this.options.allowDrop === undefined ? true : this.options.allowDrop;\r\n }\r\n }\r\n\r\n allowDrag(node: TreeNode): boolean {\r\n if (this.options.allowDrag instanceof Function) {\r\n return this.options.allowDrag(node);\r\n } else {\r\n return this.options.allowDrag;\r\n }\r\n }\r\n\r\n nodeClass(node: TreeNode): string {\r\n return this.options.nodeClass ? this.options.nodeClass(node) : '';\r\n }\r\n\r\n nodeHeight(node: TreeNode): number {\r\n if (node.data.virtual) {\r\n return 0;\r\n }\r\n\r\n let nodeHeight = this.options.nodeHeight || 22;\r\n\r\n if (typeof nodeHeight === 'function') {\r\n nodeHeight = nodeHeight(node);\r\n }\r\n\r\n // account for drop slots:\r\n return nodeHeight + (node.index === 0 ? 2 : 1) * this.dropSlotHeight;\r\n }\r\n\r\n get dropSlotHeight(): number {\r\n return typeof this.options.dropSlotHeight === 'number' ? this.options.dropSlotHeight : 2;\r\n }\r\n}\r\n","export const TREE_EVENTS = {\r\n toggleExpanded: 'toggleExpanded',\r\n activate: 'activate',\r\n deactivate: 'deactivate',\r\n nodeActivate: 'nodeActivate',\r\n nodeDeactivate: 'nodeDeactivate',\r\n select: 'select',\r\n deselect: 'deselect',\r\n focus: 'focus',\r\n blur: 'blur',\r\n initialized: 'initialized',\r\n updateData: 'updateData',\r\n moveNode: 'moveNode',\r\n copyNode: 'copyNode',\r\n event: 'event',\r\n loadNodeChildren: 'loadNodeChildren',\r\n changeFilter: 'changeFilter',\r\n stateChange: 'stateChange'\r\n};\r\n","import { signal } from '@angular/core';\r\nimport { TreeModel } from './tree.model';\r\nimport { TreeOptions } from './tree-options.model';\r\nimport { ITreeNode } from '../defs/api';\r\nimport { TREE_EVENTS } from '../constants/events';\r\n\r\nexport class TreeNode implements ITreeNode {\r\n private _isLoadingChildren = false;\r\n\r\n // Private signals\r\n private _children = signal<TreeNode[]>(undefined);\r\n private _index = signal<number>(undefined);\r\n private _position = signal<number>(0);\r\n private _height = signal<number>(undefined);\r\n\r\n // Public getters/setters for API compatibility\r\n get children(): TreeNode[] { return this._children(); }\r\n set children(value: TreeNode[]) { this._children.set(value); }\r\n\r\n get index(): number { return this._index(); }\r\n set index(value: number) { this._index.set(value); }\r\n\r\n get position(): number { return this._position(); }\r\n set position(value: number) { this._position.set(value); }\r\n\r\n get height(): number { return this._height(); }\r\n set height(value: number) { this._height.set(value); }\r\n\r\n // Computed properties\r\n get isHidden() { return this.treeModel.isHidden(this); }\r\n get isExpanded() { return this.treeModel.isExpanded(this); }\r\n get isActive() { return this.treeModel.isActive(this); }\r\n get isFocused() { return this.treeModel.isNodeFocused(this); }\r\n\r\n get isSelected() {\r\n if (this.isSelectable()) {\r\n return this.treeModel.isSelected(this);\r\n } else {\r\n return this.children?.some((node: TreeNode) => node.isSelected);\r\n }\r\n }\r\n\r\n get isAllSelected() {\r\n if (this.isSelectable()) {\r\n return this.treeModel.isSelected(this);\r\n } else {\r\n return this.children?.every((node: TreeNode) => node.isAllSelected);\r\n }\r\n }\r\n\r\n get isPartiallySelected() {\r\n return this.isSelected && !this.isAllSelected;\r\n }\r\n\r\n get level(): number {\r\n return this.parent ? this.parent.level + 1 : 0;\r\n }\r\n\r\n get path(): string[] {\r\n return this.parent ? [...this.parent.path, this.id] : [];\r\n }\r\n\r\n get elementRef(): any {\r\n throw `Element Ref is no longer supported since introducing virtual scroll\\n\r\n You may use a template to obtain a reference to the element`;\r\n }\r\n\r\n private _originalNode: any;\r\n get originalNode() { return this._originalNode; };\r\n\r\n constructor(public data: any, public parent: TreeNode, public treeModel: TreeModel, index: number) {\r\n if (this.id === undefined || this.id === null) {\r\n this.id = uuid();\r\n } // Make sure there's a unique id without overriding existing ids to work with immutable data structures\r\n this.index = index;\r\n\r\n if (this.getField('children')) {\r\n this._initChildren();\r\n }\r\n this.autoLoadChildren();\r\n }\r\n\r\n // helper get functions:\r\n get hasChildren(): boolean {\r\n return !!(this.getField('hasChildren') || (this.children && this.children.length > 0));\r\n }\r\n get isCollapsed(): boolean { return !this.isExpanded; }\r\n get isLeaf(): boolean { return !this.hasChildren; }\r\n get isRoot(): boolean { return this.parent.data.virtual; }\r\n get realParent(): TreeNode { return this.isRoot ? null : this.parent; }\r\n\r\n // proxy functions:\r\n get options(): TreeOptions { return this.treeModel.options; }\r\n fireEvent(event) { this.treeModel.fireEvent(event); }\r\n\r\n // field accessors:\r\n get displayField() {\r\n return this.getField('display');\r\n }\r\n\r\n get id() {\r\n return this.getField('id');\r\n }\r\n\r\n set id(value) {\r\n this.setField('id', value);\r\n }\r\n\r\n getField(key) {\r\n return this.data[this.options[`${key}Field`]];\r\n }\r\n\r\n setField(key, value) {\r\n this.data[this.options[`${key}Field`]] = value;\r\n }\r\n\r\n // traversing:\r\n _findAdjacentSibling(steps, skipHidden = false) {\r\n const siblings = this._getParentsChildren(skipHidden);\r\n const index = siblings.indexOf(this);\r\n\r\n return siblings.length > index + steps ? siblings[index + steps] : null;\r\n }\r\n\r\n findNextSibling(skipHidden = false) {\r\n return this._findAdjacentSibling(+1, skipHidden);\r\n }\r\n\r\n findPreviousSibling(skipHidden = false) {\r\n return this._findAdjacentSibling(-1, skipHidden);\r\n }\r\n\r\n getVisibleChildren() {\r\n return this.visibleChildren;\r\n }\r\n\r\n get visibleChildren() {\r\n return (this.children || []).filter((node) => !node.isHidden);\r\n }\r\n\r\n getFirstChild(skipHidden = false) {\r\n let children = skipHidden ? this.visibleChildren : this.children;\r\n\r\n return children != null && children.length ? children[0] : null;\r\n }\r\n\r\n getLastChild(skipHidden = false) {\r\n let children = skipHidden ? this.visibleChildren : this.children;\r\n\r\n return children != null && children.length ? children[children.length - 1] : null;\r\n }\r\n\r\n findNextNode(goInside = true, skipHidden = false) {\r\n return goInside && this.isExpanded && this.getFirstChild(skipHidden) ||\r\n this.findNextSibling(skipHidden) ||\r\n this.parent && this.parent.findNextNode(false, skipHidden);\r\n }\r\n\r\n findPreviousNode(skipHidden = false) {\r\n let previousSibling = this.findPreviousSibling(skipHidden);\r\n if (!previousSibling) {\r\n return this.realParent;\r\n }\r\n return previousSibling._getLastOpenDescendant(skipHidden);\r\n }\r\n\r\n _getLastOpenDescendant(skipHidden = false) {\r\n const lastChild = this.getLastChild(skipHidden);\r\n return (this.isCollapsed || !lastChild)\r\n ? this\r\n : lastChild._getLastOpenDescendant(skipHidden);\r\n }\r\n\r\n private _getParentsChildren(skipHidden = false): any[] {\r\n const children = this.parent &&\r\n (skipHidden ? this.parent.getVisibleChildren() : this.parent.children);\r\n\r\n return children || [];\r\n }\r\n\r\n private getIndexInParent(skipHidden = false) {\r\n return this._getParentsChildren(skipHidden).indexOf(this);\r\n }\r\n\r\n isDescendantOf(node: TreeNode) {\r\n if (this === node) return true;\r\n else return this.parent && this.parent.isDescendantOf(node);\r\n }\r\n\r\n getNodePadding(): string {\r\n return this.options.levelPadding * (this.level - 1) + 'px';\r\n }\r\n\r\n getClass(): string {\r\n return [this.options.nodeClass(this), `tree-node-level-${ this.level }`].join(' ');\r\n }\r\n\r\n onDrop($event) {\r\n this.mouseAction('drop', $event.event, {\r\n from: $event.element,\r\n to: { parent: this, index: 0, dropOnNode: true }\r\n });\r\n }\r\n\r\n allowDrop = (element, $event?) => {\r\n return this.options.allowDrop(element, { parent: this, index: 0 }, $event);\r\n }\r\n\r\n allowDragoverStyling = () => {\r\n return this.options.allowDragoverStyling;\r\n }\r\n\r\n allowDrag() {\r\n return this.options.allowDrag(this);\r\n }\r\n\r\n\r\n // helper methods:\r\n loadNodeChildren() {\r\n if (!this.options.getChildren) {\r\n return Promise.resolve(); // Not getChildren method - for using redux\r\n }\r\n return Promise.resolve(this.options.getChildren(this))\r\n .then((children) => {\r\n if (children) {\r\n this.setField('children', children);\r\n this._initChildren();\r\n if (this.options.useTriState && this.treeModel.isSelected(this)) {\r\n this.setIsSelected(true);\r\n }\r\n this.children.forEach((child) => {\r\n if (child.getField('isExpanded') && child.hasChildren) {\r\n child.expand();\r\n }\r\n });\r\n }}).then(() => {\r\n this.fireEvent({\r\n eventName: TREE_EVENTS.loadNodeChildren,\r\n node: this\r\n });\r\n });\r\n }\r\n\r\n expand() {\r\n if (!this.isExpanded) {\r\n this.toggleExpanded();\r\n }\r\n\r\n return this;\r\n }\r\n\r\n collapse() {\r\n if (this.isExpanded) {\r\n this.toggleExpanded();\r\n }\r\n\r\n return this;\r\n }\r\n\r\n doForAll(fn: (node: ITreeNode) => any) {\r\n Promise.resolve(fn(this)).then(() => {\r\n if (this.children) {\r\n this.children.forEach((child) => child.doForAll(fn));\r\n }\r\n });\r\n }\r\n\r\n expandAll() {\r\n this.doForAll((node) => node.expand());\r\n }\r\n\r\n collapseAll() {\r\n this.doForAll((node) => node.collapse());\r\n }\r\n\r\n ensureVisible() {\r\n if (this.realParent) {\r\n this.realParent.expand();\r\n this.realParent.ensureVisible();\r\n }\r\n\r\n return this;\r\n }\r\n\r\n toggleExpanded() {\r\n this.setIsExpanded(!this.isExpanded);\r\n\r\n return this;\r\n }\r\n\r\n setIsExpanded(value) {\r\n if (this.hasChildren) {\r\n this.treeModel.setExpandedNode(this, value);\r\n \r\n // Load children when expanding if they haven't been loaded yet\r\n if (value && !this.children && this.hasChildren && !this._isLoadingChildren) {\r\n this._isLoadingChildren = true;\r\n this.loadNodeChildren().finally(() => {\r\n this._isLoadingChildren = false;\r\n });\r\n }\r\n }\r\n\r\n return this;\r\n };\r\n\r\n autoLoadChildren() {\r\n // Instead of using effect, we'll load children when the node is expanded\r\n // This is handled by the toggleExpanded and setIsExpanded methods\r\n // Check immediately if we should load\r\n if (this.isExpanded && !this.children && this.hasChildren) {\r\n this.loadNodeChildren();\r\n }\r\n }\r\n\r\n dispose() {\r\n if (this.children) {\r\n this.children.forEach((child) => child.dispose());\r\n }\r\n this.parent = null;\r\n this.children = null;\r\n }\r\n\r\n setIsActive(value, multi = false) {\r\n this.treeModel.setActiveNode(this, value, multi);\r\n if (value) {\r\n this.focus(this.options.scrollOnActivate);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n isSelectable() {\r\n return this.isLeaf || !this.children || !this.options.useTriState;\r\n }\r\n\r\n setIsSelected(value) {\r\n if (this.isSelectable()) {\r\n this.treeModel.setSelectedNode(this, value);\r\n } else {\r\n this.visibleChildren.forEach((child) => child.setIsSelected(value));\r\n }\r\n\r\n return this;\r\n }\r\n\r\n toggleSelected() {\r\n this.setIsSelected(!this.isSelected);\r\n\r\n return this;\r\n }\r\n\r\n toggleActivated(multi = false) {\r\n this.setIsActive(!this.isActive, multi);\r\n\r\n return this;\r\n }\r\n\r\n setActiveAndVisible(multi = false) {\r\n this.setIsActive(true, multi)\r\n .ensureVisible();\r\n\r\n setTimeout(this.scrollIntoView.bind(this));\r\n\r\n return this;\r\n }\r\n\r\n scrollIntoView(force = false) {\r\n this.treeModel.virtualScroll.scrollIntoView(this, force);\r\n }\r\n\r\n focus(scroll = true) {\r\n let previousNode = this.treeModel.getFocusedNode();\r\n this.treeModel.setFocusedNode(this);\r\n if (scroll) {\r\n this.scrollIntoView();\r\n }\r\n if (previousNode) {\r\n this.fireEvent({ eventName: TREE_EVENTS.blur, node: previousNode });\r\n }\r\n this.fireEvent({ eventName: TREE_EVENTS.focus, node: this });\r\n\r\n return this;\r\n }\r\n\r\n blur() {\r\n let previousNode = this.treeModel.getFocusedNode();\r\n this.treeModel.setFocusedNode(null);\r\n if (previousNode) {\r\n this.fireEvent({ eventName: TREE_EVENTS.blur, node: this });\r\n }\r\n\r\n return this;\r\n }\r\n\r\n setIsHidden(value) {\r\n this.treeModel.setIsHidden(this, value);\r\n }\r\n\r\n hide() {\r\n this.setIsHidden(true);\r\n }\r\n\r\n show() {\r\n this.setIsHidden(false);\r\n }\r\n\r\n mouseAction(actionName: string, $event, data: any = null) {\r\n this.treeModel.setFocus(true);\r\n\r\n const actionMapping = this.options.actionMapping.mouse;\r\n const mouseAction = actionMapping[actionName];\r\n\r\n if (mouseAction) {\r\n mouseAction(this.treeModel, this, $event, data);\r\n }\r\n }\r\n\r\n getSelfHeight() {\r\n return this.options.nodeHeight(this);\r\n }\r\n\r\n _initChildren() {\r\n this.children = this.getField('children')\r\n .map((c, index) => new TreeNode(c, this, this.treeModel, index));\r\n }\r\n}\r\n\r\nfunction uuid() {\r\n return Math.floor(Math.random() * 10000000000000);\r\n}\r\n","import { Injectable, OnDestroy, signal, computed, effect } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { TreeNode } from './tree-node.model';\r\nimport { TreeOptions } from './tree-options.model';\r\nimport { TreeVirtualScroll } from './tree-virtual-scroll.model';\r\nimport { ITreeModel, IDType, IDTypeDictionary } from '../defs/api';\r\nimport { TREE_EVENTS } from '../constants/events';\r\n\r\n@Injectable()\r\nexport class TreeModel implements ITreeModel, OnDestroy {\r\n static focusedTree = null;\r\n\r\n options: TreeOptions = new TreeOptions();\r\n nodes: any[];\r\n eventNames = Object.keys(TREE_EVENTS);\r\n virtualScroll: TreeVirtualScroll;\r\n\r\n // Private signals\r\n private _roots = signal<TreeNode[]>(undefined);\r\n private _expandedNodeIds = signal<IDTypeDictionary>({});\r\n private _selectedLeafNodeIds = signal<IDTypeDictionary>({});\r\n private _activeNodeIds = signal<IDTypeDictionary>({});\r\n private _hiddenNodeIds = signal<IDTypeDictionary>({});\r\n private _focusedNodeId = signal<IDType>(null);\r\n private _virtualRoot = signal<TreeNode>(undefined);\r\n\r\n // Public getters/setters to maintain API compatibility\r\n get roots(): TreeNode[] { return this._roots(); }\r\n private set roots(value: TreeNode[]) { this._roots.set(value); }\r\n\r\n get virtualRoot(): TreeNode { return this._virtualRoot(); }\r\n\r\n get focusedNode(): TreeNode {\r\n const id = this._focusedNodeId();\r\n return id ? this.getNodeById(id) : null;\r\n }\r\n\r\n get expandedNodes(): TreeNode[] {\r\n const ids = this._expandedNodeIds();\r\n const nodes = Object.keys(ids)\r\n .filter((id) => ids[id])\r\n .map((id) => this.getNodeById(id));\r\n return nodes.filter(Boolean);\r\n }\r\n\r\n get activeNodes(): TreeNode[] {\r\n const ids = this._activeNodeIds();\r\n const nodes = Object.keys(ids)\r\n .filter((id) => ids[id])\r\n .map((id) => this.getNodeById(id));\r\n return nodes.filter(Boolean);\r\n }\r\n\r\n get hiddenNodes(): TreeNode[] {\r\n const ids = this._hiddenNodeIds();\r\n const nodes = Object.keys(ids)\r\n .filter((id) => ids[id])\r\n .map((id) => this.getNodeById(id));\r\n return nodes.filter(Boolean);\r\n }\r\n\r\n get selectedLeafNodes(): TreeNode[] {\r\n const ids = this._selectedLeafNodeIds();\r\n const nodes = Object.keys(ids)\r\n .filter((id) => ids[id])\r\n .map((id) => this.getNodeById(id));\r\n return nodes.filter(Boolean);\r\n }\r\n\r\n private firstUpdate = true;\r\n private events: any;\r\n private subscriptions: Subscription[] = [];\r\n\r\n // events\r\n fireEvent(event) {\r\n event.treeModel = this;\r\n this.events[event.eventName].emit(event);\r\n this.events.event.emit(event);\r\n }\r\n\r\n subscribe(eventName, fn) {\r\n const subscription = this.events[eventName].subscribe(fn);\r\n this.subscriptions.push(subscription);\r\n }\r\n\r\n\r\n // getters\r\n getFocusedNode(): TreeNode {\r\n return this.focusedNode;\r\n }\r\n\r\n getActiveNode(): TreeNode {\r\n return this.activeNodes[0];\r\n }\r\n\r\n getActiveNodes(): TreeNode[] {\r\n return this.activeNodes;\r\n }\r\n\r\n getVisibleRoots() {\r\n return this._virtualRoot()?.visibleChildren;\r\n }\r\n\r\n getFirstRoot(skipHidden = false) {\r\n const root = skipHidden ? this.getVisibleRoots() : this.roots;\r\n return root != null && root.length ? root[0] : null;\r\n }\r\n\r\n getLastRoot(skipHidden = false) {\r\n const root = skipHidden ? this.getVisibleRoots() : this.roots;\r\n return root != null && root.length ? root[root.length - 1] : null;\r\n }\r\n\r\n get isFocused() {\r\n return TreeModel.focusedTree === this;\r\n }\r\n\r\n isNodeFocused(node) {\r\n return this.focusedNode === node;\r\n }\r\n\r\n isEmptyTree(): boolean {\r\n const rootNodes = this.roots;\r\n return rootNodes && rootNodes.length === 0;\r\n }\r\n\r\n // locating nodes\r\n getNodeByPath(path: any[], startNode= null): TreeNode {\r\n if (!path) return null;\r\n\r\n startNode = startNode || this._virtualRoot();\r\n if (path.length === 0) return startNode;\r\n\r\n if (!startNode.children) return null;\r\n\r\n const childId = path.shift();\r\n const childNode = startNode.children.find(c => c.id === childId);\r\n\r\n if (!childNode) return null;\r\n\r\n return this.getNodeByPath(path, childNode);\r\n }\r\n\r\n getNodeById(id) {\r\n const idStr = id.toString();\r\n\r\n return this.getNodeBy((node) => node.id.toString() === idStr);\r\n }\r\n\r\n getNodeBy(predicate, startNode = null) {\r\n startNode = startNode || this._virtualRoot();\r\n\r\n if (!startNode.children) return null;\r\n\r\n const found = startNode.children.find(predicate);\r\n\r\n if (found) { // found in children\r\n return found;\r\n } else { // look in children's children\r\n for (let child of startNode.children) {\r\n const foundInChildren = this.getNodeBy(predicate, child);\r\n if (foundInChildren) return foundInChildren;\r\n }\r\n }\r\n }\r\n\r\n isExpanded(node) {\r\n return this._expandedNodeIds()[node.id];\r\n }\r\n\r\n isHidden(node) {\r\n return this._hiddenNodeIds()[node.id];\r\n }\r\n\r\n isActive(node) {\r\n return this._activeNodeIds()[node.id];\r\n }\r\n\r\n isSelected(node) {\r\n return this._selectedLeafNodeIds()[node.id];\r\n }\r\n\r\n ngOnDestroy() {\r\n this.dispose();\r\n this.unsubscribeAll();\r\n }\r\n\r\n dispose() {\r\n // Dispose reactions of the replaced nodes\r\n const vRoot = this._virtualRoot();\r\n if (vRoot) {\r\n vRoot.dispose();\r\n }\r\n }\r\n\r\n unsubscribeAll() {\r\n this.subscriptions.forEach(subscription => subscription.unsubscribe());\r\n this.subscriptions = [];\r\n }\r\n\r\n // actions\r\n setData({ nodes, options = null, events = null }: {nodes: any, options: any, events: any}) {\r\n if (options) {\r\n this.options = new TreeOptions(options);\r\n }\r\n if (events) {\r\n this.events = events;\r\n }\r\n if (nodes) {\r\n this.nodes = nodes;\r\n }\r\n\r\n this.update();\r\n }\r\n\r\n update() {\r\n // Rebuild tree:\r\n let virtualRootConfig = {\r\n id: this.options.rootId,\r\n virtual: true,\r\n [this.options.childrenField]: this.nodes\r\n };\r\n\r\n this.dispose();\r\n\r\n const newVirtualRoot = new TreeNode(virtualRootConfig, null, this, 0);\r\n this._virtualRoot.set(newVirtualRoot);\r\n this.roots = newVirtualRoot.children;\r\n\r\n // Fire event:\r\n const currentRoots = this.roots;\r\n if (this.firstUpdate) {\r\n if (currentRoots) {\r\n this.firstUpdate = false;\r\n this._calculateExpandedNodes();\r\n }\r\n } else {\r\n this.fireEvent({ eventName: TREE_EVENTS.updateData });\r\n }\r\n }\r\n\r\n\r\n setFocusedNode(node) {\r\n this._focusedNodeId.set(node ? node.id : null);\r\n }\r\n\r\n setFocus(value) {\r\n TreeModel.focusedTree = value ? this : null;\r\n }\r\n\r\n doForAll(fn) {\r\n this.roots.forEach((root) => root.doForAll(fn));\r\n }\r\n\r\n focusNextNode() {\r\n let previousNode = this.getFocusedNode();\r\n let nextNode = previousNode ? previousNode.findNextNode(true, true) : this.getFirstRoot(true);\r\n if (nextNode) nextNode.focus();\r\n }\r\n\r\n focusPreviousNode() {\r\n let previousNode = this.getFocusedNode();\r\n let nextNode = previousNode ? previousNode.findPreviousNode(true) : this.getLastRoot(true);\r\n if (nextNode) nextNode.focus();\r\n }\r\n\r\n focusDrillDown() {\r\n let previousNode = this.getFocusedNode();\r\n if (previousNode && previousNode.isCollapsed && previousNode.hasChildren) {\r\n previousNode.toggleExpanded();\r\n }\r\n else {\r\n let nextNode = previousNode ? previousNode.getFirstChild(true) : this.getFirstRoot(true);\r\n if (nextNode) nextNode.focus();\r\n }\r\n }\r\n\r\n focusDrillUp() {\r\n let previousNode = this.getFocusedNode();\r\n if (!previousNode) return;\r\n if (previousNode.isExpanded) {\r\n previousNode.toggleExpanded();\r\n }\r\n else {\r\n let nextNode = previousNode.realParent;\r\n if (nextNode) nextNode.focus();\r\n }\r\n }\r\n\r\n setActiveNode(node, value, multi = false) {\r\n if (multi) {\r\n this._setActiveNodeMulti(node, value);\r\n }\r\n else {\r\n this._setActiveNodeSingle(node, value);\r\n }\r\n\r\n if (value) {\r\n node.focus(this.options.scrollOnActivate);\r\n this.fireEvent({ eventName: TREE_EVENTS.activate, node });\r\n this.fireEvent({ eventName: TREE_EVENTS.nodeActivate, node }); // For IE11\r\n } else {\r\n this.fireEvent({ eventName: TREE_EVENTS.deactivate, node });\r\n this.fireEvent({ eventName: TREE_EVENTS.nodeDeactivate, node }); // For IE11\r\n }\r\n }\r\n\r\n setSelectedNode(node, value) {\r\n this._selectedLeafNodeIds.update(ids => ({...ids, [node.id]: value}));\r\n\r\n if (value) {\r\n node.focus();\r\n this.fireEvent({ eventName: TREE_EVENTS.select, node });\r\n } else {\r\n this.fireEvent({ eventName: TREE_EVENTS.deselect, node });\r\n }\r\n }\r\n\r\n setExpandedNode(node, value) {\r\n this._expandedNodeIds.update(ids => ({...ids, [node.id]: value}));\r\n this.fireEvent({ eventName: TREE_EVENTS.toggleExpanded, node, isExpanded: value });\r\n }\r\n\r\n expandAll() {\r\n this.roots.forEach((root) => root.expandAll());\r\n }\r\n\r\n collapseAll() {\r\n this.roots.forEach((root) => root.collapseAll());\r\n }\r\n\r\n setIsHidden(node, value) {\r\n this._hiddenNodeIds.update(ids => ({...ids, [node.id]: value}));\r\n }\r\n\r\n setHiddenNodeIds(nodeIds) {\r\n const ids = nodeIds.reduce((hiddenNodeIds, id) => ({\r\n ...hiddenNodeIds,\r\n [id]: true\r\n }), {});\r\n this._hiddenNodeIds.set(ids);\r\n }\r\n\r\n performKeyAction(node, $event) {\r\n const keyAction = this.options.actionMapping.keys[$event.keyCode];\r\n if (keyAction) {\r\n $event.preventDefault();\r\n keyAction(this, node, $event);\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n filterNodes(filter, autoShow = true) {\r\n let filterFn;\r\n\r\n if (!filter) {\r\n return this.clearFilter();\r\n }\r\n\r\n // support function and string filter\r\n if (filter && typeof filter.valueOf() === 'string') {\r\n filterFn = (node) => node.displayField.toLowerCase().indexOf(filter.toLowerCase()) !== -1;\r\n }\r\n else if (filter && typeof filter === 'function') {\r\n filterFn = filter;\r\n }\r\n else {\r\n console.error('Don\\'t know what to do with filter', filter);\r\n console.error('Should be either a string or function');\r\n return;\r\n }\r\n\r\n const ids = {};\r\n this.roots.forEach((node) => this._filterNode(ids, node, filterFn, autoShow));\r\n this._hiddenNodeIds.set(ids);\r\n this.fireEvent({ eventName: TREE_EVENTS.changeFilter });\r\n }\r\n\r\n clearFilter() {\r\n this._hiddenNodeIds.set({});\r\n this.fireEvent({ eventName: TREE_EVENTS.changeFilter });\r\n }\r\n\r\n moveNode(node, to) {\r\n const fromIndex = node.getIndexInParent();\r\n const fromParent = node.parent;\r\n\r\n if (!this.canMoveNode(node, to, fromIndex)) return;\r\n\r\n const fromChildren = fromParent.getField('children');\r\n\r\n // If node doesn't have children - create children array\r\n if (!to.parent.getField('children')) {\r\n to.parent.setField('children', []);\r\n }\r\n const toChildren = to.parent.getField('children');\r\n\r\n const originalNode = fromChildren.splice(fromIndex, 1)[0];\r\n\r\n // Compensate for index if already removed from parent:\r\n let toIndex = (fromParent === to.parent && to.index > fromIndex) ? to.index - 1 : to.index;\r\n\r\n toChildren.splice(toIndex, 0, originalNode);\r\n\r\n fromParent.treeModel.update();\r\n if (to.parent.treeModel !== fromParent.treeModel) {\r\n to.parent.treeModel.update();\r\n }\r\n\r\n this.fireEvent({\r\n eventName: TREE_EVENTS.moveNode,\r\n node: originalNode,\r\n to: { parent: to.parent.data, index: toIndex },\r\n from: { parent: fromParent.data, index: fromIndex}\r\n });\r\n }\r\n\r\n copyNode(node, to) {\r\n const fromIndex = node.getIndexInParent();\r\n\r\n if (!this.canMoveNode(node, to, fromIndex)) return;\r\n\r\n // If node doesn't have children - create children array\r\n if (!to.parent.getField('children')) {\r\n to.parent.setField('children', []);\r\n }\r\n const toChildren = to.parent.getField('children');\r\n\r\n const nodeCopy = this.options.getNodeClone(node);\r\n\r\n toChildren.splice(to.index, 0, nodeCopy);\r\n\r\n node.treeModel.update();\r\n if (to.parent.treeModel !== node.treeModel) {\r\n to.parent.treeModel.update();\r\n }\r\n\r\n this.fireEvent({ eventName: TREE_EVENTS.copyNode, node: nodeCopy, to: { parent: to.parent.data, index: to.index } });\r\n }\r\n\r\n getState() {\r\n return {\r\n expandedNodeIds: this._expandedNodeIds(),\r\n selectedLeafNodeIds: this._selectedLeafNodeIds(),\r\n activeNodeIds: this._activeNodeIds(),\r\n hiddenNodeIds: this._hiddenNodeIds(),\r\n focusedNodeId: this._focusedNodeId()\r\n };\r\n }\r\n\r\n setState(state) {\r\n if (!state) return;\r\n\r\n this._expandedNodeIds.set(state.expandedNodeIds || {});\r\n this._selectedLeafNodeIds.set(state.selectedLeafNodeIds || {});\r\n this._activeNodeIds.set(state.activeNodeIds || {});\r\n this._hiddenNodeIds.set(state.hiddenNodeIds || {});\r\n this._focusedNodeId.set(state.focusedNodeId);\r\n }\r\n\r\n subscribeToState(fn) {\r\n effect(() => fn(this.getState()));\r\n }\r\n\r\n canMoveNode(node, to, fromIndex = undefined) {\r\n const fromNodeIndex = fromIndex || node.getIndexInParent();\r\n\r\n // same node:\r\n if (node.parent === to.parent && fromIndex === to.index) {\r\n return false;\r\n }\r\n\r\n return !to.parent.isDescendantOf(node);\r\n }\r\n\r\n calculateExpandedNodes() {\r\n this._calculateExpandedNodes();\r\n }\r\n\r\n // private methods\r\n private _filterNode(ids, node, filterFn, autoShow) {\r\n // if node passes function then it's visible\r\n let isVisible = filterFn(node);\r\n\r\n if (node.children) {\r\n // if one of node's children passes filter then this node is also visible\r\n node.children.forEach((child) => {\r\n if (this._filterNode(ids, child, filterFn, autoShow)) {\r\n isVisible = true;\r\n }\r\n });\r\n }\r\n\r\n // mark node as hidden\r\n if (!isVisible) {\r\n ids[node.id] = true;\r\n }\r\n // auto expand parents to make sure the filtered nodes are visible\r\n if (autoShow && isVisible) {\r\n node.ensureVisible();\r\n }\r\n return isVisible;\r\n }\r\n\r\n private _calculateExpandedNodes(startNode = null) {\r\n startNode = startNode || this._virtualRoot();\r\n\r\n if (startNode.data[this.options.isExpandedField]) {\r\n this._expandedNodeIds.update(ids => ({...ids, [startNode.id]: true}));\r\n }\r\n if (startNode.children) {\r\n startNode.children.forEach((child) => this._calculateExpandedNodes(child));\r\n }\r\n }\r\n\r\n private _setActiveNodeSingle(node, value) {\r\n // Deactivate all other nodes:\r\n this.activeNodes\r\n .filter((activeNode) => activeNode !== node)\r\n .forEach((activeNode) => {\r\n this.fireEvent({ eventName: TREE_EVENTS.deactivate, node: activeNode });\r\n this.fireEvent({ eventName: TREE_EVENTS.nodeDeactivate, node: activeNode }); // For IE11\r\n });\r\n\r\n if (value) {\r\n this._activeNodeIds.set({[node.id]: true});\r\n }\r\n else {\r\n this._activeNodeIds.set({});\r\n }\r\n }\r\n\r\n private _setActiveNodeMulti(node, value) {\r\n this._activeNodeIds.update(ids => ({...ids, [node.id]: value}));\r\n }\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TreeDraggedElement {\r\n _draggedElement: any = null;\r\n\r\n set(draggedElement: any) {\r\n this._draggedElement = draggedElement;\r\n }\r\n\r\n get(): any {\r\n return this._draggedElement;\r\n }\r\n\r\n isDragging() {\r\n return !!this.get();\r\n }\r\n}\r\n","import { Injectable, Injector, inject } from '@angular/core';\r\nimport { signal, effect } from '@angular/core';\r\nimport { TreeModel } from './tree.model';\r\nimport { TREE_EVENTS } from '../constants/events';\r\n\r\nconst Y_OFFSET = 500; // Extra pixels outside the viewport, in each direction, to render nodes in\r\nconst Y_EPSILON = 150; // Minimum pixel change required to recalculate the rendered nodes\r\n\r\n@Injectable()\r\nexport class TreeVirtualScroll {\r\n private treeModel = inject(TreeModel);\r\n\r\n private _dispose: (() => void)[] = [];\r\n\r\n private _yBlocks = signal<number>(0);\r\n private _x = signal<number>(0);\r\n private _viewportHeight = signal<number | null>(null);\r\n viewport = null;\r\n\r\n get yBlocks() { return this._yBlocks(); }\r\n set yBlocks(value: number) { this._yBlocks.set(value); }\r\n\r\n get x() { return this._x(); }\r\n set x(value: number) { this._x.set(value); }\r\n\r\n get viewportHeight() { return this._viewportHeight(); }\r\n set viewportHeight(value: number | null) { this._viewportHeight.set(value); }\r\n\r\n get y() {\r\n return this.yBlocks * Y_EPSILON;\r\n }\r\n\r\n get totalHeight() {\r\n const vRoot = this.treeModel['_virtualRoot']();\r\n return vRoot ? vRoot.height : 0;\r\n }\r\n\r\n constructor() {\r\n const treeModel = this.treeModel;\r\n\r\n treeModel.virtualScroll = this;\r\n }\r\n\r\n fireEvent(event) {\r\n this.treeModel.fireEvent(event);\r\n }\r\n\r\n init() {\r\n const fn = this.recalcPositions.bind(this);\r\n\r\n fn();\r\n this.treeModel.subscribe(TREE_EVENTS.loadNodeChildren, fn);\r\n }\r\n\r\n setupWatchers(injector: Injector) {\r\n const fn = this.recalcPositions.bind(this);\r\n \r\n const fixScrollEffect = effect(() => {\r\n const yBlocks = this._yBlocks();\r\n const totalHeight = this.totalHeight;\r\n const viewportHeight = this._viewportHeight();\r\n \r\n this.fixScroll();\r\n }, { injector });\r\n \r\n const rootsEffect = effect(() => {\r\n const roots = this.treeModel.roots;\r\n fn();\r\n }, { injector });\r\n \r\n const expandedEffect = effect(() => {\r\n const expandedNodes = this.treeModel.expandedNodes;\r\n fn();\r\n }, { injector });\r\n \r\n const hiddenEffect = effect(() => {\r\n const hiddenNodes = this.treeModel.hiddenNodes;\r\n fn();\r\n }, { injector });\r\n \r\n this._dispose = [\r\n () => fixScrollEffect.destroy(),\r\n () => rootsEffect.destroy(),\r\n () => expandedEffect.destroy(),\r\n () => hiddenEffect.destroy()\r\n ];\r\n }\r\n\r\n isEnabled() {\r\n return this.treeModel.options.useVirtualScroll;\r\n }\r\n\r\n private _setYBlocks(value) {\r\n this.yBlocks = value;\r\n }\r\n\r\n recalcPositions() {\r\n const vRoot = this.treeModel['_virtualRoot']();\r\n if (vRoot) {\r\n vRoot.height = this._getPositionAfter(this.treeModel.getVisibleRoots(), 0);\r\n }\r\n }\r\n\r\n private _getPositionAfter(nodes, startPos) {\r\n let position = startPos;\r\n\r\n nodes.forEach((node) => {\r\n node.position = position;\r\n position = this._getPositionAfterNode(node, position);\r\n });\r\n return position;\r\n }\r\n\r\n private _getPositionAfterNode(node, startPos) {\r\n let position = node.getSelfHeight() + startPos;\r\n\r\n if (node.children && node.isExpanded) { // TBD: consider loading component as well\r\n position = this._getPositionAfter(node.visibleChildren, position);\r\n }\r\n node.height = position - startPos;\r\n return position;\r\n }\r\n\r\n\r\n clear() {\r\n this._dispose.forEach((d) => d());\r\n }\r\n\r\n setViewport(viewport) {\r\n Object.assign(this, {\r\n viewport,\r\n x: viewport.scrollLeft,\r\n yBlocks: Math.round(viewport.scrollTop / Y_EPSILON),\r\n viewportHeight: viewport.getBoundingClientRect ? viewport.getBoundingClientRect().height : 0\r\n });\r\n }\r\n\r\n scrollIntoView(node, force, scrollToMiddle = true) {\r\n if (node.options.scrollContainer) {\r\n const scrollContainer = node.options.scrollContainer;\r\n const scrollContainerHeight = scrollContainer.getBoundingClientRect().height;\r\n const scrollContainerTop = scrollContainer.getBoundingClientRect().top;\r\n const nodeTop = this.viewport.getBoundingClientRect().top + node.position - scrollContainerTop;\r\n\r\n if (force || // force scroll to node\r\n nodeTop < scrollContainer.scrollTop || // node is above scroll container\r\n nodeTop + node.getSelfHeight() > scrollContainer.scrollTop + scrollContainerHeight) { // node is below container\r\n scrollContainer.scrollTop = scrollToMiddle ?\r\n nodeTop - scrollContainerHeight / 2 : // scroll to middle\r\n nodeTop; // scroll to start\r\n }\r\n } else {\r\n if (force || // force scroll to node\r\n node.position < this.y || // node is above viewport\r\n node.position + node.getSelfHeight() > this.y + this.viewportHeight) { // node is below viewport\r\n if (this.viewport) {\r\n this.viewport.scrollTop = scrollToMiddle ?\r\n node.position - this.viewportHeight / 2 : // scroll to middle\r\n node.position; // scroll to start\r\n\r\n this._setYBlocks(Math.floor(this.viewport.scrollTop / Y_EPSILON));\r\n }\r\n }\r\n }\r\n }\r\n\r\n getViewportNodes(nodes) {\r\n if (!nodes) return [];\r\n\r\n const visibleNodes = nodes.filter((node) => !node.isHidden);\r\n\r\n if (!this.isEnabled()) return visibleNodes;\r\n\r\n if (!this.viewportHeight || !visibleNodes.length) return [];\r\n\r\n // When loading children async this method is called before their height and position is calculated.\r\n // In that case firstIndex === 0 and lastIndex === visibleNodes.length - 1 (e.g. 1000),\r\n // which means that it loops through every visibleNodes item and push them into viewportNodes array.\r\n // We can prevent nodes from being pushed to the array and wait for the appropriate calculations to take place\r\n const lastVisibleNode = visibleNodes.slice(-1)[0]\r\n if (!lastVisibleNode.height && lastVisibleNode.position === 0) return [];\r\n\r\n // Search for first node in the viewport using binary search\r\n // Look for first node that starts after the beginning of the viewport (with buffer)\r\n // Or that ends after the beginning of the viewport\r\n const firstIndex = binarySearch(visibleNodes, (node) => {\r\n return (node.position + Y_OFFSET > this.y) ||\r\n (node.position + node.height > this.y);\r\n });\r\n\r\n // Search for last node in the viewport using binary search\r\n // Look for first node that starts after the end of the viewport (with buffer)\r\n const lastIndex = binarySearch(visibleNodes, (node) => {\r\n return node.position - Y_OFFSET > this.y + this.viewportHeight;\r\n }, firstIndex);\r\n\r\n const viewportNodes = [];\r\n\r\n for (let i = firstIndex; i <= lastIndex; i++) {\r\n viewportNodes.push(visibleNodes[i]);\r\n }\r\n\r\n return viewportNodes;\r\n }\r\n\r\n fixScroll() {\r\n const maxY = Math.max(0, this.totalHeight - this.viewportHeight);\r\n\r\n if (this.y < 0) this._setYBlocks(0);\r\n if (this.y > maxY) this._setYBlocks(maxY / Y_EPSILON);\r\n }\r\n}\r\n\r\nfunction binarySearch(nodes, condition, firstIndex = 0) {\r\n let index = firstIndex;\r\n let toIndex = nodes.length - 1;\r\n\r\n while (index !== toIndex) {\r\n let midIndex = Math.floor((index + toIndex) / 2);\r\n\r\n if (condition(nodes[midIndex])) {\r\n toIndex = midIndex;\r\n }\r\n else {\r\n if (index === midIndex) index = toIndex;\r\n else index = midIndex;\r\n }\r\n }\r\n return index;\r\n}\r\n","import {\r\n Component,\r\n TemplateRef,\r\n ViewEncapsulation,\r\n input\r\n} from '@angular/core';\r\nimport { TreeNode } from '../models/tree-node.model';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\n\r\n@Component({\r\n encapsulation: ViewEncapsulation.None,\r\n selector: 'tree-loading-component',\r\n template: `\r\n @if (!template()) {\r\n <span>loading...</span>\r\n }\r\n <ng-container\r\n [ngTemplateOutlet]=\"template()\"\r\n [ngTemplateOutletContext]=\"{ $implicit: node() }\"\r\n >\r\n </ng-container>\r\n `,\r\n imports: [NgTemplateOutlet]\r\n})\r\nexport class LoadingComponent {\r\n readonly template = input<TemplateRef<any>>(undefined);\r\n readonly node = input<TreeNode>(undefined);\r\n}\r\n","import {\r\n Component,\r\n ElementRef,\r\n AfterViewInit,\r\n OnInit,\r\n OnDestroy,\r\n Injector,\r\n Renderer2,\r\n afterNextRender,\r\n inject\r\n} from '@angular/core';\r\nimport { TreeVirtualScroll } from '../models/tree-virtual-scroll.model';\r\nimport { TREE_EVENTS } from '../constants/events';\r\n\r\n@Component({\r\n selector: 'tree-viewport',\r\n styles: [],\r\n providers: [TreeVirtualScroll],\r\n template: `\r\n <div [style.height]=\"getTotalHeight()\">\r\n <ng-content></ng-content>\r\n </div>\r\n `,\r\n imports: []\r\n})\r\nexport class TreeViewportComponent implements AfterViewInit, OnInit, OnDestroy {\r\n private elementRef = inject(ElementRef);\r\n virtualScroll = inject(TreeVirtualScroll);\r\n private injector = inject(Injector);\r\n private renderer = inject(Renderer2);\r\n\r\n setViewport = this.throttle(() => {\r\n this.virtualScroll.setViewport(this.elementRef.nativeElement);\r\n }, 17);\r\n\r\n private readonly scrollEventHandler: ($event: Event) => void;\r\n private removeScrollListener: (() => void) | null = null;\r\n\r\n constructor() {\r\n this.scrollEventHandler = this.setViewport.bind(this);\r\n }\r\n\r\n ngOnInit() {\r\n this.virtualScroll.init();\r\n this.virtualScroll.setupWatchers(this.injector);\r\n }\r\n\r\n ngAfterViewInit() {\r\n afterNextRender(() => {\r\n this.setViewport();\r\n this.virtualScroll.fireEvent({ eventName: TREE_EVENTS.initialized });\r\n }, { injector: this.injector });\r\n\r\n const el: HTMLElement = this.elementRef.nativeElement;\r\n this.removeScrollListener = this.renderer.listen(\r\n el,\r\n 'scroll',\r\n this.scrollEventHandler\r\n );\r\n }\r\n\r\n ngOnDestroy() {\r\n this.virtualScroll.clear();\r\n this.removeScrollListener?.();\r\n this.removeScrollListener = null;\r\n }\r\n\r\n getTotalHeight() {\r\n return (\r\n (this.virtualScroll.isEnabled() &&\r\n this.virtualScroll.totalHeight + 'px') ||\r\n 'auto'\r\n );\r\n }\r\n\r\n private throttle(func, timeFrame) {\r\n let lastTime = 0;\r\n return function() {\r\n let now = Date.now();\r\n if (now - lastTime >= timeFrame) {\r\n func();\r\n lastTime = now;\r\n }\r\n };\r\n }\r\n}\r\n","import {\r\n AfterViewInit,\r\n Directive,\r\n ElementRef,\r\n HostListener,\r\n OnDestroy,\r\n Renderer2,\r\n input,\r\n inject,\r\n output,\r\n effect\r\n} from '@angular/core';\r\nimport { TreeDraggedElement } from '../models/tree-dragged-element.model';\r\n\r\nconst DRAG_OVER_CLASS = 'is-dragging-over';\r\nconst DRAG_DISABLED_CLASS = 'is-dragging-over-disabled';\r\n\r\n@Directive({ selector: '[treeDrop]' })\r\nexport class TreeDropDirective implements AfterViewInit, OnDestroy {\r\n private el = inject(ElementRef);\r\n private renderer = inject(Renderer2);\r\n private treeDraggedElement = inject(TreeDraggedElement);\r\n\r\n readonly allowDragoverStyling = input(true);\r\n readonly treeAllowDrop = input<boolean | Function>(undefined);\r\n readonly onDropCallback = output<{event: DragEvent, element: any}>({ alias: 'treeDrop' });\r\n readonly onDragOverCallback = output<{event: DragEvent, element: any}>({ alias: 'treeDropDragOver' });\r\n readonly onDragLeaveCallback = output<{event: DragEvent, element: any}>({ alias: 'treeDropDragLeave' });\r\n readonly onDragEnterCallback = output<{event: DragEvent, element: any}>({ alias: 'treeDropDragEnter' });\r\n private readonly dragOverEventHandler: (ev: DragEvent) => void;\r\n private readonly dragEnterEventHandler: (ev: DragEvent) => void;\r\n private readonly dragLeaveEventHandler: (ev: DragEvent) => void;\r\n private dragOverUnlisten: (() => void) | null = null;\r\n private dragEnterUnlisten: (() => void) | null = null;\r\n private dragLeaveUnlisten: (() => void) | null = null;\r\n\r\n private _allowDrop = (element, $event) => true;\r\n\r\n allowDrop($event) {\r\n return this._allowDrop(this.treeDraggedElement.get(), $event);\r\n }\r\n\r\n constructor() {\r\n this.dragOverEventHandler = this.onDragOver.bind(this);\r\n this.dragEnterEventHandler = this.onDragEnter.bind(this);\r\n this.dragLeaveEventHandler = this.onDragLeave.bind(this);\r\n \r\n effect(() => {\r\n const allowDrop = this.treeAllowDrop();\r\n if (allowDrop instanceof Function) {\r\n this._allowDrop = allowDrop as (element: any, $event: any) => boolean;\r\n }\r\n else if (allowDrop !== undefined) {\r\n this._allowDrop = (element, $event) => allowDrop;\r\n }\r\n });\r\n }\r\n\r\n ngAfterViewInit() {\r\n let el: HTMLElement = this.el.nativeElement;\r\n this.dragOverUnlisten = this.renderer.listen(\r\n el,\r\n 'dragover',\r\n this.dragOverEventHandler\r\n );\r\n this.dragEnterUnlisten = this.renderer.listen(\r\n el,\r\n 'dragenter',\r\n this.dragEnterEventHandler\r\n );\r\n this.dragLeaveUnlisten = this.renderer.listen(\r\n el,\r\n 'dragleave',\r\n this.dragLeaveEventHandler\r\n );\r\n }\r\n\r\n ngOnDestroy() {\r\n this.dragOverUnlisten?.();\r\n this.dragEnterUnlisten?.();\r\n this.dragLeaveUnlisten?.();\r\n this.dragOverUnlisten = null;\r\n this.dragEnterUnlisten = null;\r\n this.dragLeaveUnlisten = null;\r\n }\r\n\r\n onDragOver($event) {\r\n if (!this.allowDrop($event)) {\r\n if (this.allowDragoverStyling()) {\r\n return this.addDisabledClass();\r\n }\r\n return;\r\n }\r\n\r\n this.onDragOverCallback.emit({event: $event, element: this.treeDraggedElement.get()});\r\n\r\n $event.preventDefault();\r\n if (this.allowDragoverStyling()) {\r\n this.addClass();\r\n }\r\n }\r\n\r\n onDragEnter($event) {\r\n if (!this.allowDrop($event)) return;\r\n\r\n $event.preventDefault();\r\n this.onDragEnterCallback.emit({event: $event, element: this.treeDraggedElement.get()});\r\n }\r\n\r\n onDragLeave($event) {\r\n if (!this.allowDrop($event)) {\r\n if (this.allowDragoverStyling()) {\r\n return this.removeDisabledClass();\r\n }\r\n return;\r\n }\r\n this.onDragLeaveCallback.emit({event: $event, element: this.treeDraggedElement.get()});\r\n\r\n if (this.allowDragoverStyling()) {\r\n this.removeClass();\r\n }\r\n }\r\n\r\n @HostListener('drop', ['$event']) onDrop($event) {\r\n if (!this.allowDrop($event)) return;\r\n\r\n $event.preventDefault();\r\n this.onDropCallback.emit({event: $event, element: this.treeDraggedElement.get()});\r\n\r\n if (this.allowDragoverStyling()) {\r\n this.removeClass();\r\n }\r\n this.treeDraggedElement.set(null);\r\n }\r\n\r\n private addClass() {\r\n this.renderer.addClass(this.el.nativeElement, DRAG_OVER_CLASS);\r\n }\r\n\r\n private removeClass() {\r\n this.renderer.removeClass(this.el.nativeElement, DRAG_OVER_CLASS);\r\n }\r\n\r\n private addDisabledClass() {\r\n this.renderer.addClass(this.el.nativeElement, DRAG_DISABLED_CLASS);\r\n }\r\n\r\n private removeDisabledClass() {\r\n this.renderer.removeClass(this.el.nativeElement, DRAG_DISABLED_CLASS);\r\n }\r\n}\r\n","import { Component, ViewEncapsulation, input } from '@angular/core';\r\nimport { TreeNode } from '../models/tree-node.model';\r\nimport { TreeDropDirective } from '../directives/tree-drop.directive';\r\n\r\n@Component({\r\n selector: 'TreeNodeDropSlot, tree-node-drop-slot',\r\n encapsulation: ViewEncapsulation.None,\r\n styles: [],\r\n template: `\r\n <div\r\n class=\"node-drop-slot\"\r\n (treeDrop)=\"onDrop($event)\"\r\n [treeAllowDrop]=\"allowDrop.bind(this)\"\r\n [allowDragoverStyling]=\"true\"\r\n ></div>\r\n `,\r\n imports: [TreeDropDirective]\r\n})\r\nexport class TreeNodeDropSlot {\r\n readonly node = input<TreeNode>(undefined);\r\n readonly dropIndex = input<number>(undefined);\r\n\r\n onDrop($event) {\r\n this.node().mouseAction('drop', $event.event, {\r\n from: $event.element,\r\n to: { parent: this.node(), index: this.dropIndex() }\r\n });\r\n }\r\n\r\n allowDrop(element, $event) {\r\n return this.node().options.allowDrop(\r\n element,\r\n { parent: this.node(), index: this.dropIndex() },\r\n $event\r\n );\r\n }\r\n}\r\n","import { Component, ViewEncapsulation, input } from '@angular/core';\r\nimport { TreeNode } from '../models/tree-node.model';\r\n\r\n@Component({\r\n selector: 'tree-node-checkbox',\r\n encapsulation: ViewEncapsulation.None,\r\n styles: [],\r\n template: `\r\n <input\r\n class=\"tree-node-checkbox\"\r\n type=\"checkbox\"\r\n (click)=\"node().mouseAction('checkboxClick', $event)\"\r\n [checked]=\"node().isSelected\"\r\n [indeterminate]=\"node().isPartiallySelected\"\r\n />\r\n `,\r\n imports: []\r\n})\r\nexport class TreeNodeCheckboxComponent {\r\n readonly node = input<TreeNode>(undefined);\r\n}\r\n","import {\r\n Component,\r\n computed,\r\n input,\r\n ViewEncapsulation\r\n} from '@angular/core';\r\nimport { TreeNode } from '../models/tree-node.model';\r\n\r\n@Component({\r\n selector: 'tree-node-expander',\r\n encapsulation: ViewEncapsulation.None,\r\n styles: [],\r\n template: `\r\n @if (hasChildren()) {\r\n <span\r\n [class.toggle-children-wrapper-expanded]=\"node().isExpanded\"\r\n [class.toggle-children-wrapper-collapsed]=\"node().isCollapsed\"\r\n class=\"toggle-children-wrapper\"\r\n (click)=\"node().mouseAction('expanderClick', $event)\"\r\n >\r\n <span class=\"toggle-children\"></span>\r\n </span>\r\n } @if (!hasChildren()) {\r\n <span class=\"toggle-children-placeholder\"></span>\r\n }\r\n `,\r\n imports: []\r\n})\r\nexport class TreeNodeExpanderComponent {\r\n readonly node = input<TreeNode>();\r\n readonly hasChildren = computed(() => this.node().hasChildren);\r\n}\r\n","import { AfterViewInit, Directive, DoCheck, ElementRef, HostListener, OnDestroy, Renderer2, input, inject } from '@angular/core';\r\nimport { TreeDraggedElement } from '../models/tree-dragged-element.model';\r\n\r\n@Directive({ selector: '[treeDrag]' })\r\nexport class TreeDragDirective implements AfterViewInit, DoCheck, OnDestroy {\r\n private el = inject(ElementRef);\r\n private renderer = inject(Renderer2);\r\n private treeDraggedElement = inject(TreeDraggedElement);\r\n\r\n readonly draggedElement = input(undefined, { alias: \"treeDrag\" });\r\n readonly treeDragEnabled = input(undefined);\r\n private readonly dragEventHandler: (ev: DragEvent) => void;\r\n private dragUnlisten: (() => void) | null = null;\r\n\r\n constructor() {\r\n this.dragEventHandler = this.onDrag.bind(this);\r\n }\r\n\r\n ngAfterViewInit() {\r\n let el: HTMLElement = this.el.nativeElement;\r\n this.dragUnlisten = this.renderer.listen(\r\n el,\r\n 'drag',\r\n this.dragEventHandler\r\n );\r\n }\r\n\r\n ngDoCheck() {\r\n this.renderer.setAttribute(this.el.nativeElement, 'draggable', this.treeDragEnabled() ? 'true' : 'false');\r\n }\r\n\r\n ngOnDestroy() {\r\n this.dragUnlisten?.();\r\n this.dragUnlisten = null;\r\n }\r\n\r\n @HostListener('dragstart', ['$event']) onDragStart(ev) {\r\n // setting the data is required by firefox\r\n ev.dataTransfer.setData('text', ev.target.id);\r\n const draggedElement = this.draggedElement();\r\n this.treeDraggedElement.set(draggedElement);\r\n if (draggedElement.mouseAction) {\r\n draggedElement.mouseAction('dragStart', ev);\r\n }\r\n }\r\n\r\n onDrag(ev) {\r\n const draggedElement = this.draggedElement();\r\n if (draggedElement.mouseAction) {\r\n draggedElement.mouseAction('drag', ev);\r\n }\r\n }\r\n\r\n @HostListener('dragend') onDragEnd() {\r\n const draggedElement = this.draggedElement();\r\n if (draggedElement.mouseAction) {\r\n draggedElement.mouseAction('dragEnd');\r\n }\r\n this.treeDraggedElement.set(null);\r\n }\r\n}\r\n","import {\r\n Component,\r\n ViewEncapsulation,\r\n TemplateRef,\r\n input\r\n} from '@angular/core';\r\nimport { TreeNode } from '../models/tree-node.model';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'tree-node-content',\r\n encapsulation: ViewEncapsulation.None,\r\n template: `\r\n @if (!template()) {\r\n <span>{{ node().displayField }}</span>\r\n }\r\n <ng-container\r\n [ngTemplateOutlet]=\"template()\"\r\n [ngTemplateOutletContext]=\"{\r\n $implicit: node(),\r\n node: node(),\r\n index: index()\r\n }\"\r\n >\r\n </ng-container>\r\n `,\r\n imports: [NgTemplateOutlet]\r\n})\r\nexport class TreeNodeContent {\r\n readonly node = input<TreeNode>(undefined);\r\n readonly index = input<number>(undefined);\r\n readonly template = input<TemplateRef<any>>(undefined);\r\n}\r\n","import {\r\n Component,\r\n ViewEncapsulation,\r\n computed,\r\n input\r\n} from '@angular/core';\r\nimport { TreeNode } from '../models/tree-node.model';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport { TreeNodeCheckboxComponent } from './tree-node-checkbox.component';\r\nimport { TreeNodeExpanderComponent } from './tree-node-expander.component';\r\nimport { TreeDragDirective } from '../directives/tree-drag.directive';\r\nimport { TreeDropDirective } from '../directives/tree-drop.directive';\r\nimport { TreeNodeContent } from './tree-node-content.component';\r\n\r\n@Component({\r\n selector: 'tree-node-wrapper',\r\n encapsulation: ViewEncapsulation.None,\r\n styles: [],\r\n template: `\r\n @if (!treeNodeWrapperTemplate()) {\r\n <div class=\"node-wrapper\" [style.padding-left]=\"node().getNodePadding()\">\r\n @if (node().options.useCheckbox) {\r\n <tree-node-checkbox [node]=\"node()\"></tree-node-checkbox>\r\n }\r\n <tree-node-expander [node]=\"node()\"></tree-node-expander>\r\n <div\r\n class=\"node-content-wrapper\"\r\n [class.node-content-wrapper-active]=\"node().isActive\"\r\n [class.node-content-wrapper-focused]=\"node().isFocused\"\r\n (click)=\"node().mouseAction('click', $event)\"\r\n (dblclick)=\"node().mouseAction('dblClick', $event)\"\r\n (mouseover)=\"node().mouseAction('mouseOver', $event)\"\r\n (mouseout)=\"node().mouseAction('mouseOut', $event)\"\r\n (contextmenu)=\"node().mouseAction('contextMenu', $event)\"\r\n (treeDrop)=\"node().onDrop($event)\"\r\n (treeDropDragOver)=\"node().mouseAction('dragOver', $event)\"\r\n (treeDropDragLeave)=\"node().mouseAction('dragLeave', $event)\"\r\n (treeDropDragEnter)=\"node().mouseAction('dragEnter', $event)\"\r\n [treeAllowDrop]=\"node().allowDrop\"\r\n [allowDragoverStyling]=\"node().allowDragoverStyling()\"\r\n [treeDrag]=\"node()\"\r\n [treeDragEnabled]=\"node().allowDrag()\"\r\n >\r\n <tree-node-content\r\n [node]=\"node()\"\r\n [index]=\"index()\"\r\n [template]=\"templates().treeNodeTemplate\"\r\n >\r\n </tree-node-content>\r\n </div>\r\n </div>\r\n }\r\n <ng-container\r\n [ngTemplateOutlet]=\"treeNodeWrapperTemplate()\"\r\n [ngTemplateOutletContext]=\"{\r\n $implicit: node(),\r\n node: node(),\r\n index: index(),\r\n templates: templates()\r\n }\"\r\n >\r\n </ng-container>\r\n `,\r\n imports: [\r\n TreeNodeCheckboxComponent,\r\n TreeNodeExpanderComponent,\r\n TreeDragDirective,\r\n TreeDropDirective,\r\n TreeNodeContent,\r\n NgTemplateOutlet\r\n ]\r\n})\r\nexport class TreeNodeWrapperComponent {\r\n readonly node = input<TreeNode>();\r\n readonly index = input<number>(undefined);\r\n readonly templates = input<any>();\r\n treeNodeWrapperTemplate = computed(\r\n () => this.templates().treeNodeWrapperTemplate\r\n );\r\n}\r\n","import {\r\n Directive,\r\n Renderer2,\r\n TemplateRef,\r\n ViewContainerRef,\r\n OnDestroy,\r\n input,\r\n effect,\r\n inject\r\n} from '@angular/core';\r\n\r\nconst EASE_ACCELERATION = 1.005;\r\n\r\n@Directive({ selector: '[treeAnimateOpen]' })\r\nexport class TreeAnimateOpenDirective implements OnDestroy {\r\n private renderer = inject(Renderer2);\r\n private templateRef = inject<TemplateRef<any>>(TemplateRef);\r\n private viewContainerRef = inject(ViewContainerRef);\r\n\r\n readonly isOpen = input<boolean>(undefined, { alias: 'treeAnimateOpen' });\r\n readonly animateSpeed = input<number>(undefined, {\r\n alias: 'treeAnimateOpenSpeed'\r\n });\r\n readonly animateAcceleration = input<number>(undefined, {\r\n alias: 'treeAnimateOpenAcceleration'\r\n });\r\n readonly isEnabled = input<boolean>(undefined, {\r\n alias: 'treeAnimateOpenEnabled'\r\n });\r\n\r\n private innerElement: any;\r\n private previousIsOpen: boolean;\r\n private startOpenTimeout: ReturnType<typeof setTimeout> | null = null;\r\n private openInterval: ReturnType<typeof setInterval> | null = null;\r\n private closeInterval: ReturnType<typeof setInterval> | null = null;\r\n\r\n constructor() {\r\n effect(() => {\r\n const value = this.isOpen();\r\n if (value) {\r\n this._show();\r\n if (this.isEnabled() && this.previousIsOpen === false) {\r\n this._animateOpen();\r\n }\r\n } else {\r\n this.isEnabled() ? this._animateClose() : this._hide();\r\n }\r\n this.previousIsOpen = !!value;\r\n });\r\n }\r\n\r\n private _show() {\r\n if (this.innerElement) return;\r\n\r\n // create child view\r\n this.innerElement = this.viewContainerRef.createEmbeddedView(\r\n this.templateRef\r\n ).rootNodes[0];\r\n }\r\n\r\n private _hide() {\r\n this.clearTimers();\r\n this.viewContainerRef.clear();\r\n this.innerElement = null;\r\n }\r\n\r\n private _animateOpen() {\r\n this.clearTimers();\r\n let delta = this.animateSpeed();\r\n let ease = this.animateAcceleration();\r\n let maxHeight = 0;\r\n\r\n // set height to 0\r\n this.renderer.setStyle(this.innerElement, 'max-height', `0`);\r\n\r\n // increase maxHeight until height doesn't change\r\n this.startOpenTimeout = setTimeout(() => {\r\n this.startOpenTimeout = null;\r\n // Allow inner element to create its content\r\n this.openInterval = setInterval(() => {\r\n if (!this.isOpen() || !this.innerElement) {\r\n this.clearOpenInterval();\r\n return;\r\n }\r\n\r\n maxHeight += delta;\r\n const roundedMaxHeight = Math.round(maxHeight);\r\n\r\n this.renderer.setStyle(\r\n this.innerElement,\r\n 'max-height',\r\n `${roundedMaxHeight}px`\r\n );\r\n const height = this.innerElement.getBoundingClientRect\r\n ? this.innerElement.getBoundingClientRect().height\r\n : 0; // TBD use renderer\r\n\r\n delta *= ease;\r\n ease *= EASE_ACCELERATION;\r\n if (height < roundedMaxHeight) {\r\n // Make maxHeight auto because animation finished and container might change height later on\r\n this.renderer.setStyle(this.innerElement, 'max-height', null);\r\n this.clearOpenInterval();\r\n }\r\n }, 17);\r\n });\r\n }\r\n\r\n private _animateClose() {\r\n if (!this.innerElement) return;\r\n\r\n this.clearTimers();\r\n let delta = this.animateSpeed();\r\n let ease = this.animateAcceleration();\r\n let height = this.innerElement.getBoundingClientRect().height; // TBD use renderer\r\n\r\n // slowly decrease maxHeight to 0, starting from current height\r\n this.closeInterval = setInterval(() => {\r\n if (this.isOpen() || !this.innerElement) {\r\n this.clearCloseInterval();\r\n return;\r\n }\r\n\r\n height -= delta;\r\n this.renderer.setStyle(this.innerElement, 'max-height', `${height}px`);\r\n delta *= ease;\r\n ease *= EASE_ACCELERATION;\r\n\r\n if (height <= 0) {\r\n // after animation complete - remove child element\r\n this.viewContainerRef.clear();\r\n this.innerElement = null;\r\n this.clearCloseInterval();\r\n }\r\n }, 17);\r\n }\r\n\r\n ngOnDestroy() {\r\n this.clearTimers();\r\n }\r\n\r\n private clearTimers() {\r\n if (this.startOpenTimeout !== null) {\r\n clearTimeout(this.startOpenTimeout);\r\n this.startOpenTimeout = null;\r\n }\r\n this.clearOpenInterval();\r\n this.clearCloseInterval();\r\n }\r\n\r\n private clearOpenInterval() {\r\n if (this.openInterval !== null) {\r\n clearInterval(this.openInterval);\r\n this.openInterval = null;\r\n }\r\n }\r\n\r\n private clearCloseInterval() {\r\n if (this.closeInterval !== null) {\r\n clearInterval(this.closeInterval);\r\n this.closeInterval = null;\r\n }\r\n }\r\n}\r\n","import {\r\n Component,\r\n ViewEncapsulation,\r\n OnInit,\r\n OnDestroy,\r\n forwardRef,\r\n signal,\r\n computed,\r\n effect,\r\n Injector,\r\n input,\r\n inject\r\n} from '@angular/core';\r\nimport { TreeVirtualScroll } from '../models/tree-virtual-scroll.model';\r\nimport { TreeNode } from '../models/tree-node.model';\r\nimport { TreeModel } from '../models/tree.model';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport { TreeNodeDropSlot } from './tree-node-drop-slot.component';\r\nimport { TreeNodeWrapperComponent } from './tree-node-wrapper.component';\r\nimport { TreeAnimateOpenDirective } from '../directives/tree-animate-open.directive';\r\nimport { LoadingComponent } from './loading.component';\r\n\r\n@Component({\r\n selector: 'tree-node-children',\r\n encapsulation: ViewEncapsulation.None,\r\n styles: [],\r\n template: `\r\n <div\r\n [class.tree-children]=\"true\"\r\n [class.tree-children-no-padding]=\"node().options.levelPadding\"\r\n *treeAnimateOpen=\"\r\n node().isExpanded;\r\n speed: node().options.animateSpeed;\r\n acceleration: node().options.animateAcceleration;\r\n enabled: node().options.animateExpand\r\n \"\r\n >\r\n @if (children()) {\r\n <tree-node-collection\r\n [nodes]=\"children()\"\r\n [templates]=\"templates()\"\r\n [treeModel]=\"node().treeModel\"\r\n >\r\n </tree-node-collection>\r\n } @if (!children()) {\r\n <tree-loading-component\r\n [style.padding-left]=\"node().getNodePadding()\"\r\n class=\"tree-node-loading\"\r\n [template]=\"templates().loadingTemplate\"\r\n [node]=\"node()\"\r\n ></tree-loading-component>\r\n }\r\n </div>\r\n `,\r\n imports: [\r\n TreeAnimateOpenDirective,\r\n forwardRef(() => TreeNodeCollectionComponent),\r\n LoadingComponent\r\n ]\r\n})\r\nexport class TreeNodeChildrenComponent {\r\n readonly node = input<TreeNode>();\r\n readonly templates = input<any>(undefined);\r\n\r\n children = computed(() => this.node().children);\r\n}\r\n\r\n@Component({\r\n selector: 'tree-node-collection',\r\n encapsulation: ViewEncapsulation.None,\r\n template: `\r\n <div [style.margin-top]=\"marginTop()\">\r\n @for (node of viewportNodes(); track trackNode(i, node); let i = $index) {\r\n <tree-node [node]=\"node\" [index]=\"i\" [templates]=\"templates()\">\r\n </tree-node>\r\n }\r\n </div>\r\n `,\r\n imports: [forwardRef(() => TreeNodeComponent)]\r\n})\r\nexport class TreeNodeCollectionComponent implements OnInit, OnDestroy {\r\n readonly nodes = input<TreeNode[]>(undefined);\r\n readonly treeModel = input<TreeModel>(undefined);\r\n private injector = inject(Injector);\r\n\r\n private virtualScroll: TreeVirtualScroll;\r\n readonly templates = input(undefined);\r\n\r\n viewportNodes = signal<TreeNode[]>([]);\r\n\r\n marginTop = computed(() => {\r\n const nodes = this.viewportNodes();\r\n const firstNode = nodes && nodes.length && nodes[0];\r\n const relativePosition =\r\n firstNode && firstNode.parent\r\n ? firstNode.position -\r\n firstNode.parent.position -\r\n firstNode.parent.getSelfHeight()\r\n : 0;\r\n\r\n return `${relativePosition}px`;\r\n });\r\n\r\n private _disposeEffects: (() => void)[] = [];\r\n\r\n ngOnInit() {\r\n this.virtualScroll = this.treeModel().virtualScroll;\r\n\r\n const viewportEffect = effect(\r\n () => {\r\n const nodes = this.nodes();\r\n if (nodes && this.virtualScroll) {\r\n const viewportNodes = this.virtualScroll.getViewportNodes(nodes);\r\n this.viewportNodes.set(viewportNodes);\r\n }\r\n },\r\n { injector: this.injector }\r\n );\r\n\r\n this._disposeEffects = [() => viewportEffect.destroy()];\r\n }\r\n\r\n ngOnDestroy() {\r\n this._disposeEffects.forEach(d => d());\r\n }\r\n\r\n trackNode(index, node) {\r\n return node.id;\r\n }\r\n}\r\n\r\n@Component({\r\n selector: 'TreeNode, tree-node',\r\n encapsulation: ViewEncapsulation.None,\r\n styles: [],\r\n template: `\r\n @if (!treeNodeFullTemplate()) {\r\n <div\r\n [class]=\"node().getClass()\"\r\n [class.tree-node]=\"true\"\r\n [class.tree-node-expanded]=\"node().isExpanded && node().hasChildren\"\r\n [class.tree-node-collapsed]=\"node().isCollapsed && node().hasChildren\"\r\n [class.tree-node-leaf]=\"node().isLeaf\"\r\n [class.tree-node-active]=\"node().isActive\"\r\n [class.tree-node-focused]=\"node().isFocused\"\r\n >\r\n @if (index() === 0) {\r\n <tree-node-drop-slot\r\n [dropIndex]=\"node().index\"\r\n [node]=\"node().parent\"\r\n ></tree-node-drop-slot>\r\n }\r\n\r\n <tree-node-wrapper\r\n [node]=\"node()\"\r\n [index]=\"index()\"\r\n [templates]=\"templates()\"\r\n ></tree-node-wrapper>\r\n\r\n <tree-node-children\r\n [node]=\"node()\"\r\n [templates]=\"templates()\"\r\n ></tree-node-children>\r\n <tree-node-drop-slot\r\n [dropIndex]=\"node().index + 1\"\r\n [node]=\"node().parent\"\r\n ></tree-node-drop-slot>\r\n </div>\r\n }\r\n <ng-container\r\n [ngTemplateOutlet]=\"treeNodeFullTemplate()\"\r\n [ngTemplateOutletContext]=\"{\r\n $implicit: node(),\r\n node: node(),\r\n index: index(),\r\n templates: templates()\r\n }\"\r\n >\r\n </ng-container>\r\n `,\r\n imports: [\r\n TreeNodeDropSlot,\r\n TreeNodeWrapperComponent,\r\n TreeNodeChildrenComponent,\r\n NgTemplateOutlet\r\n ]\r\n})\r\nexport class TreeNodeComponent {\r\n readonly node = input<TreeNode>(undefined);\r\n readonly index = input<number>(undefined);\r\n readonly templates = input<any>();\r\n treeNodeFullTemplate = computed(() => this.templates().treeNodeFullTemplate);\r\n}\r\n","import {\r\n Component,\r\n ContentChild,\r\n EventEmitter,\r\n HostListener,\r\n inject,\r\n Input,\r\n OnChanges,\r\n Output,\r\n TemplateRef,\r\n ViewChild\r\n} from '@angular/core';\r\nimport { TreeModel } from '../models/tree.model';\r\nimport { TreeDraggedElement } from '../models/tree-dragged-element.model';\r\nimport { TreeOptions } from '../models/tree-options.model';\r\nimport { ITreeOptions } from '../defs/api';\r\nimport { TreeViewportComponent } from './tree-viewport.component';\r\n\r\nimport { TreeNodeCollectionComponent } from './tree-node-collection.component';\r\nimport { TreeNodeDropSlot } from './tree-node-drop-slot.component';\r\n\r\n@Component({\r\n selector: 'Tree, tree-root',\r\n providers: [TreeModel],\r\n styles: [],\r\n template: `\r\n <tree-viewport #viewport>\r\n <div\r\n class=\"angular-tree-component\"\r\n [class.node-dragging]=\"treeDraggedElement.isDragging()\"\r\n [class.angular-tree-component-rtl]=\"treeModel.options.rtl\"\r\n >\r\n @if (treeModel.roots) {\r\n <tree-node-collection\r\n [nodes]=\"treeModel.roots\"\r\n [treeModel]=\"treeModel\"\r\n [templates]=\"{\r\n loadingTemplate: loadingTemplate,\r\n treeNodeTemplate: treeNodeTemplate,\r\n treeNodeWrapperTemplate: treeNodeWrapperTemplate,\r\n treeNodeFullTemplate: treeNodeFullTemplate\r\n }\"\r\n >\r\n </tree-node-collection>\r\n }\r\n @if (treeModel.isEmptyTree()) {\r\n <tree-node-drop-slot\r\n class=\"empty-tree-drop-slot\"\r\n [dropIndex]=\"0\"\r\n [node]=\"treeModel.virtualRoot\"\r\n >\r\n </tree-node-drop-slot>\r\n }\r\n </div>\r\n </tree-viewport>\r\n `,\r\n imports: [\r\n TreeViewportComponent,\r\n TreeNodeCollectionComponent,\r\n TreeNodeDropSlot\r\n]\r\n})\r\nexport class TreeComponent implements OnChanges {\r\n treeModel = inject(TreeModel);\r\n treeDraggedElement = inject(TreeDraggedElement);\r\n\r\n _nodes: any[];\r\n _options: TreeOptions;\r\n\r\n @ContentChild('loadingTemplate', { static: false })\r\n loadingTemplate: TemplateRef<any>;\r\n @ContentChild('treeNodeTemplate', { static: false })\r\n treeNodeTemplate: TemplateRef<any>;\r\n @ContentChild('treeNodeWrapperTemplate', { static: false })\r\n treeNodeWrapperTemplate: TemplateRef<any>;\r\n @ContentChild('treeNodeFullTemplate', { static: false })\r\n treeNodeFullTemplate: TemplateRef<any>;\r\n @ViewChild('viewport', { static: false })\r\n viewportComponent: TreeViewportComponent;\r\n\r\n // Will be handled in ngOnChanges\r\n @Input() set nodes(nodes: any[]) {}\r\n\r\n @Input() set options(options: ITreeOptions) {}\r\n\r\n @Input() set focused(value: boolean) {\r\n this.treeModel.setFocus(value);\r\n }\r\n\r\n @Input() set state(state) {\r\n this.treeModel.setState(state);\r\n }\r\n\r\n @Output() toggleExpanded;\r\n @Output() activate;\r\n @Output() deactivate;\r\n @Output() nodeActivate;\r\n @Output() nodeDeactivate;\r\n @Output() select;\r\n @Output() deselect;\r\n @Output() focus;\r\n @Output() blur;\r\n @Output() updateData;\r\n @Output() initialized;\r\n @Output() moveNode;\r\n @Output() copyNode;\r\n @Output() loadNodeChildren;\r\n @Output() changeFilter;\r\n @Output() event;\r\n @Output() stateChange;\r\n\r\n constructor() {\r\n const treeModel = this.treeModel;\r\n\r\n treeModel.eventNames.forEach(name => (this[name] = new EventEmitter()));\r\n treeModel.subscribeToState(state => this.stateChange.emit(state));\r\n }\r\n\r\n @HostListener('body: keydown', ['$event'])\r\n onKeydown($event) {\r\n if (!this.treeModel.isFocused) return;\r\n if (\r\n ['input', 'textarea'].includes(\r\n document.activeElement.tagName.toLowerCase()\r\n )\r\n )\r\n return;\r\n\r\n const focusedNode = this.treeModel.getFocusedNode();\r\n\r\n this.treeModel.performKeyAction(focusedNode, $event);\r\n }\r\n\r\n @HostListener('body: mousedown', ['$event'])\r\n onMousedown($event) {\r\n function isOutsideClick(startElement: Element, nodeName: string) {\r\n return !startElement\r\n ? true\r\n : startElement.localName === nodeName\r\n ? false\r\n : isOutsideClick(startElement.parentElement, nodeName);\r\n }\r\n\r\n if (isOutsideClick($event.target, 'tree-root')) {\r\n this.treeModel.setFocus(false);\r\n }\r\n }\r\n\r\n ngOnChanges(changes) {\r\n if (changes.options || changes.nodes) {\r\n this.treeModel.setData({\r\n options: changes.options && changes.options.currentValue,\r\n nodes: changes.nodes && changes.nodes.currentValue,\r\n events: this.pick(this, this.treeModel.eventNames)\r\n });\r\n }\r\n }\r\n\r\n sizeChanged() {\r\n this.viewportComponent.setViewport();\r\n }\r\n\r\n private pick(object, keys) {\r\n return keys.reduce((obj, key) => {\r\n if (object && object.hasOwnProperty(key)) {\r\n obj[key] = object[key];\r\n }\r\n return obj;\r\n }, {});\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport {\r\n IActionHandler,\r\n IActionMapping,\r\n TREE_ACTIONS\r\n} from './models/tree-options.model';\r\nimport {\r\n IAllowDragFn,\r\n IAllowDropFn,\r\n ITreeOptions,\r\n ITreeState\r\n} from './defs/api';\r\nimport { KEYS } from './constants/keys';\r\nimport { TreeModel } from './models/tree.model';\r\nimport { TreeNode } from './models/tree-node.model';\r\nimport { TreeDraggedElement } from './models/tree-dragged-element.model';\r\nimport { TreeVirtualScroll } from './models/tree-virtual-scroll.model';\r\nimport { LoadingComponent } from './components/loading.component';\r\nimport { TreeComponent } from './components/tree.component';\r\nimport { TreeNodeComponent } from './components/tree-node-collection.component';\r\nimport { TreeNodeContent } from './components/tree-node-content.component';\r\nimport { TreeNodeDropSlot } from './components/tree-node-drop-slot.component';\r\nimport { TreeNodeExpanderComponent } from './components/tree-node-expander.component';\r\nimport { TreeNodeChildrenComponent } from './components/tree-node-collection.component';\r\nimport { TreeNodeCollectionComponent } from './components/tree-node-collection.component';\r\nimport { TreeNodeWrapperComponent } from './components/tree-node-wrapper.component';\r\nimport { TreeViewportComponent } from './components/tree-viewport.component';\r\nimport { TreeNodeCheckboxComponent } from './components/tree-node-checkbox.component';\r\nimport { TreeDropDirective } from './directives/tree-drop.directive';\r\nimport { TreeDragDirective } from './directives/tree-drag.directive';\r\nimport { TreeAnimateOpenDirective } from './directives/tree-animate-open.directive';\r\n\r\n@NgModule({\r\n declarations: [\r\n \r\n ],\r\n exports: [\r\n TreeComponent,\r\n TreeNodeComponent,\r\n TreeNodeContent,\r\n LoadingComponent,\r\n TreeDropDirective,\r\n TreeDragDirective,\r\n TreeNodeExpanderComponent,\r\n TreeNodeChildrenComponent,\r\n TreeNodeDropSlot,\r\n TreeNodeCollectionComponent,\r\n TreeViewportComponent,\r\n TreeNodeWrapperComponent,\r\n TreeNodeCheckboxComponent,\r\n TreeAnimateOpenDirective\r\n ],\r\n imports: [CommonModule,TreeComponent,\r\n TreeNodeComponent,\r\n TreeNodeContent,\r\n LoadingComponent,\r\n TreeDropDirective,\r\n TreeDragDirective,\r\n TreeNodeExpanderComponent,\r\n TreeNodeChildrenComponent,\r\n TreeNodeDropSlot,\r\n TreeNodeCollectionComponent,\r\n TreeViewportComponent,\r\n TreeNodeWrapperComponent,\r\n TreeNodeCheckboxComponent,\r\n TreeAnimateOpenDirective],\r\n providers: []\r\n})\r\nexport class TreeModule {}\r\n\r\nexport {\r\n TreeModel,\r\n TreeNode,\r\n TreeDraggedElement,\r\n TreeVirtualScroll,\r\n ITreeOptions,\r\n TREE_ACTIONS,\r\n KEYS,\r\n IActionMapping,\r\n IActionHandler,\r\n IAllowDropFn,\r\n IAllowDragFn,\r\n LoadingComponent,\r\n TreeAnimateOpenDirective,\r\n TreeComponent,\r\n TreeNodeComponent,\r\n TreeNodeWrapperComponent,\r\n TreeNodeContent,\r\n TreeDropDirective,\r\n TreeDragDirective,\r\n TreeNodeExpanderComponent,\r\n TreeNodeChildrenComponent,\r\n TreeNodeDropSlot,\r\n TreeNodeCollectionComponent,\r\n TreeViewportComponent,\r\n TreeNodeCheckboxComponent,\r\n ITreeState\r\n};\r\n","/*\r\n * Public API Surface of angular-tree-component\r\n */\r\n\r\nexport * from './lib/angular-tree-component.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ali-hm-angular-tree-component.mjs","sources":["../../../projects/angular-tree-component/src/lib/constants/keys.ts","../../../projects/angular-tree-component/src/lib/models/tree-options.model.ts","../../../projects/angular-tree-component/src/lib/constants/events.ts","../../../projects/angular-tree-component/src/lib/models/tree-node.model.ts","../../../projects/angular-tree-component/src/lib/models/tree.model.ts","../../../projects/angular-tree-component/src/lib/models/tree-dragged-element.model.ts","../../../projects/angular-tree-component/src/lib/models/tree-virtual-scroll.model.ts","../../../projects/angular-tree-component/src/lib/components/loading.component.ts","../../../projects/angular-tree-component/src/lib/components/tree-viewport.component.ts","../../../projects/angular-tree-component/src/lib/directives/tree-drop.directive.ts","../../../projects/angular-tree-component/src/lib/components/tree-node-drop-slot.component.ts","../../../projects/angular-tree-component/src/lib/components/tree-node-checkbox.component.ts","../../../projects/angular-tree-component/src/lib/components/tree-node-expander.component.ts","../../../projects/angular-tree-component/src/lib/directives/tree-drag.directive.ts","../../../projects/angular-tree-component/src/lib/components/tree-node-content.component.ts","../../../projects/angular-tree-component/src/lib/components/tree-node-wrapper.component.ts","../../../projects/angular-tree-component/src/lib/directives/tree-animate-open.directive.ts","../../../projects/angular-tree-component/src/lib/components/tree-node-collection.component.ts","../../../projects/angular-tree-component/src/lib/components/tree.component.ts","../../../projects/angular-tree-component/src/lib/angular-tree-component.module.ts","../../../projects/angular-tree-component/src/public-api.ts","../../../projects/angular-tree-component/src/ali-hm-angular-tree-component.ts"],"sourcesContent":["export const KEYS = {\r\n LEFT: 37,\r\n UP: 38,\r\n RIGHT: 39,\r\n DOWN: 40,\r\n ENTER: 13,\r\n SPACE: 32,\r\n CONTEXT_MENU: 32\r\n};\r\n","import { TreeNode } from './tree-node.model';\r\nimport { TreeModel } from './tree.model';\r\nimport { KEYS } from '../constants/keys';\r\nimport { ITreeOptions } from '../defs/api';\r\n\r\nexport interface IActionHandler {\r\n (tree: TreeModel, node: TreeNode, $event: any, ...rest);\r\n}\r\n\r\nexport const TREE_ACTIONS = {\r\n TOGGLE_ACTIVE: (tree: TreeModel, node: TreeNode, $event: any) => node && node.toggleActivated(),\r\n TOGGLE_ACTIVE_MULTI: (tree: TreeModel, node: TreeNode, $event: any) => node && node.toggleActivated(true),\r\n TOGGLE_SELECTED: (tree: TreeModel, node: TreeNode, $event: any) => node && node.toggleSelected(),\r\n ACTIVATE: (tree: TreeModel, node: TreeNode, $event: any) => node.setIsActive(true),\r\n DEACTIVATE: (tree: TreeModel, node: TreeNode, $event: any) => node.setIsActive(false),\r\n SELECT: (tree: TreeModel, node: TreeNode, $event: any) => node.setIsSelected(true),\r\n DESELECT: (tree: TreeModel, node: TreeNode, $event: any) => node.setIsSelected(false),\r\n FOCUS: (tree: TreeModel, node: TreeNode, $event: any) => node.focus(),\r\n TOGGLE_EXPANDED: (tree: TreeModel, node: TreeNode, $event: any) => node.hasChildren && node.toggleExpanded(),\r\n EXPAND: (tree: TreeModel, node: TreeNode, $event: any) => node.expand(),\r\n COLLAPSE: (tree: TreeModel, node: TreeNode, $event: any) => node.collapse(),\r\n DRILL_DOWN: (tree: TreeModel, node: TreeNode, $event: any) => tree.focusDrillDown(),\r\n DRILL_UP: (tree: TreeModel, node: TreeNode, $event: any) => tree.focusDrillUp(),\r\n NEXT_NODE: (tree: TreeModel, node: TreeNode, $event: any) => tree.focusNextNode(),\r\n PREVIOUS_NODE: (tree: TreeModel, node: TreeNode, $event: any) => tree.focusPreviousNode(),\r\n MOVE_NODE: (tree: TreeModel, node: TreeNode, $event: any, {from , to}: {from: any, to: any}) => {\r\n // default action assumes from = node, to = {parent, index}\r\n if ($event.ctrlKey) {\r\n tree.copyNode(from, to);\r\n } else {\r\n tree.moveNode(from, to);\r\n }\r\n }\r\n};\r\n\r\nconst defaultActionMapping: IActionMapping = {\r\n mouse: {\r\n click: TREE_ACTIONS.TOGGLE_ACTIVE,\r\n dblClick: null,\r\n contextMenu: null,\r\n expanderClick: TREE_ACTIONS.TOGGLE_EXPANDED,\r\n checkboxClick: TREE_ACTIONS.TOGGLE_SELECTED,\r\n drop: TREE_ACTIONS.MOVE_NODE\r\n },\r\n keys: {\r\n [KEYS.RIGHT]: TREE_ACTIONS.DRILL_DOWN,\r\n [KEYS.LEFT]: TREE_ACTIONS.DRILL_UP,\r\n [KEYS.DOWN]: TREE_ACTIONS.NEXT_NODE,\r\n [KEYS.UP]: TREE_ACTIONS.PREVIOUS_NODE,\r\n [KEYS.SPACE]: TREE_ACTIONS.TOGGLE_ACTIVE,\r\n [KEYS.ENTER]: TREE_ACTIONS.TOGGLE_ACTIVE\r\n }\r\n};\r\n\r\nexport interface IActionMapping {\r\n mouse?: {\r\n click?: IActionHandler,\r\n dblClick?: IActionHandler,\r\n contextMenu?: IActionHandler,\r\n expanderClick?: IActionHandler,\r\n checkboxClick?: IActionHandler,\r\n dragStart?: IActionHandler,\r\n drag?: IActionHandler,\r\n dragEnd?: IActionHandler,\r\n dragOver?: IActionHandler,\r\n dragLeave?: IActionHandler,\r\n dragEnter?: IActionHandler,\r\n drop?: IActionHandler,\r\n mouseOver?: IActionHandler,\r\n mouseOut?: IActionHandler\r\n };\r\n keys?: {\r\n [key: number]: IActionHandler\r\n };\r\n}\r\n\r\nexport class TreeOptions {\r\n get hasChildrenField(): string { return this.options.hasChildrenField || 'hasChildren'; }\r\n get childrenField(): string { return this.options.childrenField || 'children'; }\r\n get displayField(): string { return this.options.displayField || 'name'; }\r\n get idField(): string { return this.options.idField || 'id'; }\r\n get isExpandedField(): string { return this.options.isExpandedField || 'isExpanded'; }\r\n get getChildren(): any { return this.options.getChildren; }\r\n get levelPadding(): number { return this.options.levelPadding || 0; }\r\n get useVirtualScroll(): boolean { return this.options.useVirtualScroll; }\r\n get animateExpand(): boolean { return this.options.animateExpand; }\r\n get animateSpeed(): number { return this.options.animateSpeed || 1; }\r\n get animateAcceleration(): number { return this.options.animateAcceleration || 1.2; }\r\n get scrollOnActivate(): boolean { return this.options.scrollOnActivate === undefined ? true : this.options.scrollOnActivate; }\r\n get rtl(): boolean { return !!this.options.rtl; }\r\n get rootId(): any {return this.options.rootId; }\r\n get useCheckbox(): boolean { return this.options.useCheckbox; }\r\n get useTriState(): boolean { return this.options.useTriState === undefined ? true : this.options.useTriState; }\r\n get scrollContainer(): HTMLElement { return this.options.scrollContainer; }\r\n get allowDragoverStyling(): boolean { return this.options.allowDragoverStyling === undefined ? true : this.options.allowDragoverStyling; }\r\n actionMapping: IActionMapping;\r\n\r\n constructor(private options: ITreeOptions = {}) {\r\n this.actionMapping = {\r\n mouse: {\r\n click: this.options?.actionMapping?.mouse?.click ?? defaultActionMapping.mouse.click,\r\n dblClick: this.options?.actionMapping?.mouse?.dblClick ?? defaultActionMapping.mouse.dblClick,\r\n contextMenu: this.options?.actionMapping?.mouse?.contextMenu ?? defaultActionMapping.mouse.contextMenu,\r\n expanderClick: this.options?.actionMapping?.mouse?.expanderClick ?? defaultActionMapping.mouse.expanderClick,\r\n checkboxClick: this.options?.actionMapping?.mouse?.checkboxClick ?? defaultActionMapping.mouse.checkboxClick,\r\n drop: this.options?.actionMapping?.mouse?.drop ?? defaultActionMapping.mouse.drop,\r\n dragStart: this.options?.actionMapping?.mouse?.dragStart ?? undefined,\r\n drag: this.options?.actionMapping?.mouse?.drag ?? undefined,\r\n dragEnd: this.options?.actionMapping?.mouse?.dragEnd ?? undefined,\r\n dragOver: this.options?.actionMapping?.mouse?.dragOver ?? undefined,\r\n dragLeave: this.options?.actionMapping?.mouse?.dragLeave ?? undefined,\r\n dragEnter: this.options?.actionMapping?.mouse?.dragEnter ?? undefined,\r\n mouseOver: this.options?.actionMapping?.mouse?.mouseOver ?? undefined,\r\n mouseOut: this.options?.actionMapping?.mouse?.mouseOut ?? undefined,\r\n },\r\n keys: {\r\n [KEYS.RIGHT]: TREE_ACTIONS.DRILL_DOWN,\r\n [KEYS.LEFT]: TREE_ACTIONS.DRILL_UP,\r\n [KEYS.DOWN]: TREE_ACTIONS.NEXT_NODE,\r\n [KEYS.UP]: TREE_ACTIONS.PREVIOUS_NODE,\r\n [KEYS.SPACE]: TREE_ACTIONS.TOGGLE_ACTIVE,\r\n [KEYS.ENTER]: TREE_ACTIONS.TOGGLE_ACTIVE\r\n }\r\n }\r\n\r\n if (this.options?.actionMapping?.keys) {\r\n this.actionMapping.keys = {\r\n ...this.actionMapping.keys,\r\n ...this.options.actionMapping.keys\r\n }\r\n }\r\n\r\n if (options.rtl) {\r\n this.actionMapping.keys[KEYS.RIGHT] = <IActionHandler>options.actionMapping?.keys[KEYS.RIGHT] || TREE_ACTIONS.DRILL_UP;\r\n this.actionMapping.keys[KEYS.LEFT] = <IActionHandler>options.actionMapping?.keys[KEYS.LEFT] || TREE_ACTIONS.DRILL_DOWN;\r\n }\r\n }\r\n\r\n getNodeClone(node: TreeNode): any {\r\n if (this.options.getNodeClone) {\r\n return this.options.getNodeClone(node);\r\n }\r\n\r\n // remove id from clone\r\n // keeping ie11 compatibility\r\n const nodeClone = Object.assign({}, node.data);\r\n if (nodeClone.id) {\r\n delete nodeClone.id;\r\n }\r\n return nodeClone;\r\n }\r\n\r\n allowDrop(element, to, $event?): boolean {\r\n if (this.options.allowDrop instanceof Function) {\r\n return this.options.allowDrop(element, to, $event);\r\n }\r\n else {\r\n return this.options.allowDrop === undefined ? true : this.options.allowDrop;\r\n }\r\n }\r\n\r\n allowDrag(node: TreeNode): boolean {\r\n if (this.options.allowDrag instanceof Function) {\r\n return this.options.allowDrag(node);\r\n } else {\r\n return this.options.allowDrag;\r\n }\r\n }\r\n\r\n nodeClass(node: TreeNode): string {\r\n return this.options.nodeClass ? this.options.nodeClass(node) : '';\r\n }\r\n\r\n nodeHeight(node: TreeNode): number {\r\n if (node.data.virtual) {\r\n return 0;\r\n }\r\n\r\n let nodeHeight = this.options.nodeHeight || 22;\r\n\r\n if (typeof nodeHeight === 'function') {\r\n nodeHeight = nodeHeight(node);\r\n }\r\n\r\n // account for drop slots:\r\n return nodeHeight + (node.index === 0 ? 2 : 1) * this.dropSlotHeight;\r\n }\r\n\r\n get dropSlotHeight(): number {\r\n return typeof this.options.dropSlotHeight === 'number' ? this.options.dropSlotHeight : 2;\r\n }\r\n}\r\n","export const TREE_EVENTS = {\r\n toggleExpanded: 'toggleExpanded',\r\n activate: 'activate',\r\n deactivate: 'deactivate',\r\n nodeActivate: 'nodeActivate',\r\n nodeDeactivate: 'nodeDeactivate',\r\n select: 'select',\r\n deselect: 'deselect',\r\n focus: 'focus',\r\n blur: 'blur',\r\n initialized: 'initialized',\r\n updateData: 'updateData',\r\n moveNode: 'moveNode',\r\n copyNode: 'copyNode',\r\n event: 'event',\r\n loadNodeChildren: 'loadNodeChildren',\r\n changeFilter: 'changeFilter',\r\n stateChange: 'stateChange'\r\n};\r\n","import { signal } from '@angular/core';\r\nimport { TreeModel } from './tree.model';\r\nimport { TreeOptions } from './tree-options.model';\r\nimport { ITreeNode } from '../defs/api';\r\nimport { TREE_EVENTS } from '../constants/events';\r\n\r\nexport class TreeNode implements ITreeNode {\r\n private _isLoadingChildren = false;\r\n\r\n // Private signals\r\n private _children = signal<TreeNode[]>(undefined);\r\n private _index = signal<number>(undefined);\r\n private _position = signal<number>(0);\r\n private _height = signal<number>(undefined);\r\n\r\n // Public getters/setters for API compatibility\r\n get children(): TreeNode[] { return this._children(); }\r\n set children(value: TreeNode[]) { this._children.set(value); }\r\n\r\n get index(): number { return this._index(); }\r\n set index(value: number) { this._index.set(value); }\r\n\r\n get position(): number { return this._position(); }\r\n set position(value: number) { this._position.set(value); }\r\n\r\n get height(): number { return this._height(); }\r\n set height(value: number) { this._height.set(value); }\r\n\r\n // Computed properties\r\n get isHidden() { return this.treeModel.isHidden(this); }\r\n get isExpanded() { return this.treeModel.isExpanded(this); }\r\n get isActive() { return this.treeModel.isActive(this); }\r\n get isFocused() { return this.treeModel.isNodeFocused(this); }\r\n\r\n get isSelected() {\r\n if (this.isSelectable()) {\r\n return this.treeModel.isSelected(this);\r\n } else {\r\n return this.children?.some((node: TreeNode) => node.isSelected);\r\n }\r\n }\r\n\r\n get isAllSelected() {\r\n if (this.isSelectable()) {\r\n return this.treeModel.isSelected(this);\r\n } else {\r\n return this.children?.every((node: TreeNode) => node.isAllSelected);\r\n }\r\n }\r\n\r\n get isPartiallySelected() {\r\n return this.isSelected && !this.isAllSelected;\r\n }\r\n\r\n get level(): number {\r\n return this.parent ? this.parent.level + 1 : 0;\r\n }\r\n\r\n get path(): string[] {\r\n return this.parent ? [...this.parent.path, this.id] : [];\r\n }\r\n\r\n get elementRef(): any {\r\n throw `Element Ref is no longer supported since introducing virtual scroll\\n\r\n You may use a template to obtain a reference to the element`;\r\n }\r\n\r\n private _originalNode: any;\r\n get originalNode() { return this._originalNode; };\r\n\r\n constructor(public data: any, public parent: TreeNode, public treeModel: TreeModel, index: number) {\r\n if (this.id === undefined || this.id === null) {\r\n this.id = this.treeModel.uuid();\r\n } // Make sure there's a unique id without overriding existing ids to work with immutable data structures\r\n this.index = index;\r\n\r\n if (this.getField('children')) {\r\n this._initChildren();\r\n }\r\n this.autoLoadChildren();\r\n }\r\n\r\n // helper get functions:\r\n get hasChildren(): boolean {\r\n return !!(this.getField('hasChildren') || (this.children && this.children.length > 0));\r\n }\r\n get isCollapsed(): boolean { return !this.isExpanded; }\r\n get isLeaf(): boolean { return !this.hasChildren; }\r\n get isRoot(): boolean { return this.parent.data.virtual; }\r\n get realParent(): TreeNode { return this.isRoot ? null : this.parent; }\r\n\r\n // proxy functions:\r\n get options(): TreeOptions { return this.treeModel.options; }\r\n fireEvent(event) { this.treeModel.fireEvent(event); }\r\n\r\n // field accessors:\r\n get displayField() {\r\n return this.getField('display');\r\n }\r\n\r\n get id() {\r\n return this.getField('id');\r\n }\r\n\r\n set id(value) {\r\n this.setField('id', value);\r\n }\r\n\r\n getField(key) {\r\n return this.data[this.options[`${key}Field`]];\r\n }\r\n\r\n setField(key, value) {\r\n this.data[this.options[`${key}Field`]] = value;\r\n }\r\n\r\n // traversing:\r\n _findAdjacentSibling(steps, skipHidden = false) {\r\n const siblings = this._getParentsChildren(skipHidden);\r\n const index = siblings.indexOf(this);\r\n\r\n return siblings.length > index + steps ? siblings[index + steps] : null;\r\n }\r\n\r\n findNextSibling(skipHidden = false) {\r\n return this._findAdjacentSibling(+1, skipHidden);\r\n }\r\n\r\n findPreviousSibling(skipHidden = false) {\r\n return this._findAdjacentSibling(-1, skipHidden);\r\n }\r\n\r\n getVisibleChildren() {\r\n return this.visibleChildren;\r\n }\r\n\r\n get visibleChildren() {\r\n return (this.children || []).filter((node) => !node.isHidden);\r\n }\r\n\r\n getFirstChild(skipHidden = false) {\r\n let children = skipHidden ? this.visibleChildren : this.children;\r\n\r\n return children != null && children.length ? children[0] : null;\r\n }\r\n\r\n getLastChild(skipHidden = false) {\r\n let children = skipHidden ? this.visibleChildren : this.children;\r\n\r\n return children != null && children.length ? children[children.length - 1] : null;\r\n }\r\n\r\n findNextNode(goInside = true, skipHidden = false) {\r\n return goInside && this.isExpanded && this.getFirstChild(skipHidden) ||\r\n this.findNextSibling(skipHidden) ||\r\n this.parent && this.parent.findNextNode(false, skipHidden);\r\n }\r\n\r\n findPreviousNode(skipHidden = false) {\r\n let previousSibling = this.findPreviousSibling(skipHidden);\r\n if (!previousSibling) {\r\n return this.realParent;\r\n }\r\n return previousSibling._getLastOpenDescendant(skipHidden);\r\n }\r\n\r\n _getLastOpenDescendant(skipHidden = false) {\r\n const lastChild = this.getLastChild(skipHidden);\r\n return (this.isCollapsed || !lastChild)\r\n ? this\r\n : lastChild._getLastOpenDescendant(skipHidden);\r\n }\r\n\r\n private _getParentsChildren(skipHidden = false): any[] {\r\n const children = this.parent &&\r\n (skipHidden ? this.parent.getVisibleChildren() : this.parent.children);\r\n\r\n return children || [];\r\n }\r\n\r\n private getIndexInParent(skipHidden = false) {\r\n return this._getParentsChildren(skipHidden).indexOf(this);\r\n }\r\n\r\n isDescendantOf(node: TreeNode) {\r\n if (this === node) return true;\r\n else return this.parent && this.parent.isDescendantOf(node);\r\n }\r\n\r\n getNodePadding(): string {\r\n return this.options.levelPadding * (this.level - 1) + 'px';\r\n }\r\n\r\n getClass(): string {\r\n return [this.options.nodeClass(this), `tree-node-level-${ this.level }`].join(' ');\r\n }\r\n\r\n onDrop($event) {\r\n this.mouseAction('drop', $event.event, {\r\n from: $event.element,\r\n to: { parent: this, index: 0, dropOnNode: true }\r\n });\r\n }\r\n\r\n allowDrop = (element, $event?) => {\r\n return this.options.allowDrop(element, { parent: this, index: 0 }, $event);\r\n }\r\n\r\n allowDragoverStyling = () => {\r\n return this.options.allowDragoverStyling;\r\n }\r\n\r\n allowDrag() {\r\n return this.options.allowDrag(this);\r\n }\r\n\r\n\r\n // helper methods:\r\n loadNodeChildren() {\r\n if (!this.options.getChildren) {\r\n return Promise.resolve(); // Not getChildren method - for using redux\r\n }\r\n return Promise.resolve(this.options.getChildren(this))\r\n .then((children) => {\r\n if (children) {\r\n this.setField('children', children);\r\n this._initChildren();\r\n if (this.options.useTriState && this.treeModel.isSelected(this)) {\r\n this.setIsSelected(true);\r\n }\r\n this.children.forEach((child) => {\r\n if (child.getField('isExpanded') && child.hasChildren) {\r\n child.expand();\r\n }\r\n });\r\n }}).then(() => {\r\n this.fireEvent({\r\n eventName: TREE_EVENTS.loadNodeChildren,\r\n node: this\r\n });\r\n });\r\n }\r\n\r\n expand() {\r\n if (!this.isExpanded) {\r\n this.toggleExpanded();\r\n }\r\n\r\n return this;\r\n }\r\n\r\n collapse() {\r\n if (this.isExpanded) {\r\n this.toggleExpanded();\r\n }\r\n\r\n return this;\r\n }\r\n\r\n doForAll(fn: (node: ITreeNode) => any) {\r\n Promise.resolve(fn(this)).then(() => {\r\n if (this.children) {\r\n this.children.forEach((child) => child.doForAll(fn));\r\n }\r\n });\r\n }\r\n\r\n expandAll() {\r\n this.doForAll((node) => node.expand());\r\n }\r\n\r\n collapseAll() {\r\n this.doForAll((node) => node.collapse());\r\n }\r\n\r\n ensureVisible() {\r\n if (this.realParent) {\r\n this.realParent.expand();\r\n this.realParent.ensureVisible();\r\n }\r\n\r\n return this;\r\n }\r\n\r\n toggleExpanded() {\r\n this.setIsExpanded(!this.isExpanded);\r\n\r\n return this;\r\n }\r\n\r\n setIsExpanded(value) {\r\n if (this.hasChildren) {\r\n this.treeModel.setExpandedNode(this, value);\r\n \r\n // Load children when expanding if they haven't been loaded yet\r\n if (value && !this.children && this.hasChildren && !this._isLoadingChildren) {\r\n this._isLoadingChildren = true;\r\n this.loadNodeChildren().finally(() => {\r\n this._isLoadingChildren = false;\r\n });\r\n }\r\n }\r\n\r\n return this;\r\n };\r\n\r\n autoLoadChildren() {\r\n // Instead of using effect, we'll load children when the node is expanded\r\n // This is handled by the toggleExpanded and setIsExpanded methods\r\n // Check immediately if we should load\r\n if (this.isExpanded && !this.children && this.hasChildren) {\r\n this.loadNodeChildren();\r\n }\r\n }\r\n\r\n dispose() {\r\n if (this.children) {\r\n this.children.forEach((child) => child.dispose());\r\n }\r\n this.parent = null;\r\n this.children = null;\r\n }\r\n\r\n setIsActive(value, multi = false) {\r\n this.treeModel.setActiveNode(this, value, multi);\r\n if (value) {\r\n this.focus(this.options.scrollOnActivate);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n isSelectable() {\r\n return this.isLeaf || !this.children || !this.options.useTriState;\r\n }\r\n\r\n setIsSelected(value) {\r\n if (this.isSelectable()) {\r\n this.treeModel.setSelectedNode(this, value);\r\n } else {\r\n this.visibleChildren.forEach((child) => child.setIsSelected(value));\r\n }\r\n\r\n return this;\r\n }\r\n\r\n toggleSelected() {\r\n this.setIsSelected(!this.isSelected);\r\n\r\n return this;\r\n }\r\n\r\n toggleActivated(multi = false) {\r\n this.setIsActive(!this.isActive, multi);\r\n\r\n return this;\r\n }\r\n\r\n setActiveAndVisible(multi = false) {\r\n this.setIsActive(true, multi)\r\n .ensureVisible();\r\n\r\n setTimeout(this.scrollIntoView.bind(this));\r\n\r\n return this;\r\n }\r\n\r\n scrollIntoView(force = false) {\r\n this.treeModel.virtualScroll.scrollIntoView(this, force);\r\n }\r\n\r\n focus(scroll = true) {\r\n let previousNode = this.treeModel.getFocusedNode();\r\n this.treeModel.setFocusedNode(this);\r\n if (scroll) {\r\n this.scrollIntoView();\r\n }\r\n if (previousNode) {\r\n this.fireEvent({ eventName: TREE_EVENTS.blur, node: previousNode });\r\n }\r\n this.fireEvent({ eventName: TREE_EVENTS.focus, node: this });\r\n\r\n return this;\r\n }\r\n\r\n blur() {\r\n let previousNode = this.treeModel.getFocusedNode();\r\n this.treeModel.setFocusedNode(null);\r\n if (previousNode) {\r\n this.fireEvent({ eventName: TREE_EVENTS.blur, node: this });\r\n }\r\n\r\n return this;\r\n }\r\n\r\n setIsHidden(value) {\r\n this.treeModel.setIsHidden(this, value);\r\n }\r\n\r\n hide() {\r\n this.setIsHidden(true);\r\n }\r\n\r\n show() {\r\n this.setIsHidden(false);\r\n }\r\n\r\n mouseAction(actionName: string, $event, data: any = null) {\r\n this.treeModel.setFocus(true);\r\n\r\n const actionMapping = this.options.actionMapping.mouse;\r\n const mouseAction = actionMapping[actionName];\r\n\r\n if (mouseAction) {\r\n mouseAction(this.treeModel, this, $event, data);\r\n }\r\n }\r\n\r\n getSelfHeight() {\r\n return this.options.nodeHeight(this);\r\n }\r\n\r\n _initChildren() {\r\n this.children = this.getField('children')\r\n .map((c, index) => new TreeNode(c, this, this.treeModel, index));\r\n }\r\n \r\n}\r\n\r\n\r\n","import { Injectable, OnDestroy, signal, effect } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { TreeNode } from './tree-node.model';\r\nimport { TreeOptions } from './tree-options.model';\r\nimport { TreeVirtualScroll } from './tree-virtual-scroll.model';\r\nimport { ITreeModel, IDType, IDTypeDictionary } from '../defs/api';\r\nimport { TREE_EVENTS } from '../constants/events';\r\n\r\n@Injectable()\r\nexport class TreeModel implements ITreeModel, OnDestroy {\r\n static focusedTree = null;\r\n\r\n options: TreeOptions = new TreeOptions();\r\n nodes: any[];\r\n eventNames = Object.keys(TREE_EVENTS);\r\n virtualScroll: TreeVirtualScroll;\r\n\r\n // Private signals\r\n private _roots = signal<TreeNode[]>(undefined);\r\n private _expandedNodeIds = signal<IDTypeDictionary>({});\r\n private _selectedLeafNodeIds = signal<IDTypeDictionary>({});\r\n private _activeNodeIds = signal<IDTypeDictionary>({});\r\n private _hiddenNodeIds = signal<IDTypeDictionary>({});\r\n private _hiddenNodes = signal<TreeNode[]>([]);\r\n private _focusedNodeId = signal<IDType>(null);\r\n private _virtualRoot = signal<TreeNode>(undefined);\r\n\r\n // Public getters/setters to maintain API compatibility\r\n get roots(): TreeNode[] { return this._roots(); }\r\n private set roots(value: TreeNode[]) { this._roots.set(value); }\r\n\r\n get virtualRoot(): TreeNode { return this._virtualRoot(); }\r\n\r\n get focusedNode(): TreeNode {\r\n const id = this._focusedNodeId();\r\n return id ? this.getNodeById(id) : null;\r\n }\r\n\r\n get expandedNodes(): TreeNode[] {\r\n const ids = this._expandedNodeIds();\r\n const nodes = Object.keys(ids)\r\n .filter((id) => ids[id])\r\n .map((id) => this.getNodeById(id));\r\n return nodes.filter(Boolean);\r\n }\r\n\r\n get activeNodes(): TreeNode[] {\r\n const ids = this._activeNodeIds();\r\n const nodes = Object.keys(ids)\r\n .filter((id) => ids[id])\r\n .map((id) => this.getNodeById(id));\r\n return nodes.filter(Boolean);\r\n }\r\n\r\n get hiddenNodes(): TreeNode[] {\r\n return this._hiddenNodes();\r\n }\r\n\r\n get selectedLeafNodes(): TreeNode[] {\r\n const ids = this._selectedLeafNodeIds();\r\n const nodes = Object.keys(ids)\r\n .filter((id) => ids[id])\r\n .map((id) => this.getNodeById(id));\r\n return nodes.filter(Boolean);\r\n }\r\n\r\n private firstUpdate = true;\r\n private events: any;\r\n private subscriptions: Subscription[] = [];\r\n\r\n // events\r\n fireEvent(event) {\r\n event.treeModel = this;\r\n this.events[event.eventName].emit(event);\r\n this.events.event.emit(event);\r\n }\r\n\r\n subscribe(eventName, fn) {\r\n const subscription = this.events[eventName].subscribe(fn);\r\n this.subscriptions.push(subscription);\r\n }\r\n\r\n\r\n // getters\r\n getFocusedNode(): TreeNode {\r\n return this.focusedNode;\r\n }\r\n\r\n getActiveNode(): TreeNode {\r\n return this.activeNodes[0];\r\n }\r\n\r\n getActiveNodes(): TreeNode[] {\r\n return this.activeNodes;\r\n }\r\n\r\n getVisibleRoots() {\r\n return this._virtualRoot()?.visibleChildren;\r\n }\r\n\r\n getFirstRoot(skipHidden = false) {\r\n const root = skipHidden ? this.getVisibleRoots() : this.roots;\r\n return root != null && root.length ? root[0] : null;\r\n }\r\n\r\n getLastRoot(skipHidden = false) {\r\n const root = skipHidden ? this.getVisibleRoots() : this.roots;\r\n return root != null && root.length ? root[root.length - 1] : null;\r\n }\r\n\r\n get isFocused() {\r\n return TreeModel.focusedTree === this;\r\n }\r\n\r\n isNodeFocused(node) {\r\n return this.focusedNode === node;\r\n }\r\n\r\n isEmptyTree(): boolean {\r\n const rootNodes = this.roots;\r\n return rootNodes && rootNodes.length === 0;\r\n }\r\n\r\n // locating nodes\r\n getNodeByPath(path: any[], startNode= null): TreeNode {\r\n if (!path) return null;\r\n\r\n startNode = startNode || this._virtualRoot();\r\n if (path.length === 0) return startNode;\r\n\r\n if (!startNode.children) return null;\r\n\r\n const childId = path.shift();\r\n const childNode = startNode.children.find(c => c.id === childId);\r\n\r\n if (!childNode) return null;\r\n\r\n return this.getNodeByPath(path, childNode);\r\n }\r\n\r\n getNodeById(id) {\r\n const idStr = id.toString();\r\n\r\n return this.getNodeBy((node) => node.id.toString() === idStr);\r\n }\r\n\r\n getNodeBy(predicate, startNode = null) {\r\n startNode = startNode || this._virtualRoot();\r\n\r\n if (!startNode.children) return null;\r\n\r\n const found = startNode.children.find(predicate);\r\n\r\n if (found) { // found in children\r\n return found;\r\n } else { // look in children's children\r\n for (let child of startNode.children) {\r\n const foundInChildren = this.getNodeBy(predicate, child);\r\n if (foundInChildren) return foundInChildren;\r\n }\r\n }\r\n }\r\n\r\n isExpanded(node) {\r\n return this._expandedNodeIds()[node.id];\r\n }\r\n\r\n isHidden(node) {\r\n return this._hiddenNodeIds()[node.id];\r\n }\r\n\r\n isActive(node) {\r\n return this._activeNodeIds()[node.id];\r\n }\r\n\r\n isSelected(node) {\r\n return this._selectedLeafNodeIds()[node.id];\r\n }\r\n\r\n ngOnDestroy() {\r\n this.dispose();\r\n this.unsubscribeAll();\r\n }\r\n\r\n dispose() {\r\n // Dispose reactions of the replaced nodes\r\n const vRoot = this._virtualRoot();\r\n if (vRoot) {\r\n vRoot.dispose();\r\n }\r\n }\r\n\r\n unsubscribeAll() {\r\n this.subscriptions.forEach(subscription => subscription.unsubscribe());\r\n this.subscriptions = [];\r\n }\r\n\r\n // actions\r\n setData({ nodes, options = null, events = null }: {nodes: any, options: any, events: any}) {\r\n if (options) {\r\n this.options = new TreeOptions(options);\r\n }\r\n if (events) {\r\n this.events = events;\r\n }\r\n if (nodes) {\r\n this.nodes = nodes;\r\n }\r\n\r\n this.update();\r\n }\r\n\r\n update() {\r\n // Rebuild tree:\r\n let virtualRootConfig = {\r\n id: this.options.rootId,\r\n virtual: true,\r\n [this.options.childrenField]: this.nodes\r\n };\r\n\r\n this.dispose();\r\n\r\n const newVirtualRoot = new TreeNode(virtualRootConfig, null, this, 0);\r\n this._virtualRoot.set(newVirtualRoot);\r\n this.roots = newVirtualRoot.children;\r\n\r\n // Fire event:\r\n const currentRoots = this.roots;\r\n if (this.firstUpdate) {\r\n if (currentRoots) {\r\n this.firstUpdate = false;\r\n this._calculateExpandedNodes();\r\n }\r\n } else {\r\n this.fireEvent({ eventName: TREE_EVENTS.updateData });\r\n }\r\n }\r\n\r\n\r\n setFocusedNode(node) {\r\n this._focusedNodeId.set(node ? node.id : null);\r\n }\r\n\r\n setFocus(value) {\r\n TreeModel.focusedTree = value ? this : null;\r\n }\r\n\r\n doForAll(fn) {\r\n this.roots.forEach((root) => root.doForAll(fn));\r\n }\r\n\r\n focusNextNode() {\r\n let previousNode = this.getFocusedNode();\r\n let nextNode = previousNode ? previousNode.findNextNode(true, true) : this.getFirstRoot(true);\r\n if (nextNode) nextNode.focus();\r\n }\r\n\r\n focusPreviousNode() {\r\n let previousNode = this.getFocusedNode();\r\n let nextNode = previousNode ? previousNode.findPreviousNode(true) : this.getLastRoot(true);\r\n if (nextNode) nextNode.focus();\r\n }\r\n\r\n focusDrillDown() {\r\n let previousNode = this.getFocusedNode();\r\n if (previousNode && previousNode.isCollapsed && previousNode.hasChildren) {\r\n previousNode.toggleExpanded();\r\n }\r\n else {\r\n let nextNode = previousNode ? previousNode.getFirstChild(true) : this.getFirstRoot(true);\r\n if (nextNode) nextNode.focus();\r\n }\r\n }\r\n\r\n focusDrillUp() {\r\n let previousNode = this.getFocusedNode();\r\n if (!previousNode) return;\r\n if (previousNode.isExpanded) {\r\n previousNode.toggleExpanded();\r\n }\r\n else {\r\n let nextNode = previousNode.realParent;\r\n if (nextNode) nextNode.focus();\r\n }\r\n }\r\n\r\n setActiveNode(node, value, multi = false) {\r\n if (multi) {\r\n this._setActiveNodeMulti(node, value);\r\n }\r\n else {\r\n this._setActiveNodeSingle(node, value);\r\n }\r\n\r\n if (value) {\r\n node.focus(this.options.scrollOnActivate);\r\n this.fireEvent({ eventName: TREE_EVENTS.activate, node });\r\n this.fireEvent({ eventName: TREE_EVENTS.nodeActivate, node }); // For IE11\r\n } else {\r\n this.fireEvent({ eventName: TREE_EVENTS.deactivate, node });\r\n this.fireEvent({ eventName: TREE_EVENTS.nodeDeactivate, node }); // For IE11\r\n }\r\n }\r\n\r\n setSelectedNode(node, value) {\r\n this._selectedLeafNodeIds.update(ids => ({...ids, [node.id]: value}));\r\n\r\n if (value) {\r\n node.focus();\r\n this.fireEvent({ eventName: TREE_EVENTS.select, node });\r\n } else {\r\n this.fireEvent({ eventName: TREE_EVENTS.deselect, node });\r\n }\r\n }\r\n\r\n setExpandedNode(node, value) {\r\n this._expandedNodeIds.update(ids => ({...ids, [node.id]: value}));\r\n this.fireEvent({ eventName: TREE_EVENTS.toggleExpanded, node, isExpanded: value });\r\n }\r\n\r\n expandAll() {\r\n this.roots.forEach((root) => root.expandAll());\r\n }\r\n\r\n collapseAll() {\r\n this.roots.forEach((root) => root.collapseAll());\r\n }\r\n\r\n setIsHidden(node, value) {\r\n this._hiddenNodeIds.update(ids => ({...ids, [node.id]: value}));\r\n }\r\n\r\n setHiddenNodeIds(nodeIds) {\r\n const ids = nodeIds.reduce((hiddenNodeIds, id) => ({\r\n ...hiddenNodeIds,\r\n [id]: true\r\n }), {});\r\n this._hiddenNodeIds.set(ids);\r\n }\r\n\r\n performKeyAction(node, $event) {\r\n const keyAction = this.options.actionMapping.keys[$event.keyCode];\r\n if (keyAction) {\r\n $event.preventDefault();\r\n keyAction(this, node, $event);\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n filterNodes(filter, autoShow = true) {\r\n let filterFn;\r\n\r\n if (!filter) {\r\n return this.clearFilter();\r\n }\r\n\r\n // support function and string filter\r\n if (filter && typeof filter.valueOf() === 'string') {\r\n filterFn = (node) => node.displayField.toLowerCase().indexOf(filter.toLowerCase()) !== -1;\r\n }\r\n else if (filter && typeof filter === 'function') {\r\n filterFn = filter;\r\n }\r\n else {\r\n console.error('Don\\'t know what to do with filter', filter);\r\n console.error('Should be either a string or function');\r\n return;\r\n }\r\n\r\n const ids = {};\r\n var hiddenNodes=[];\r\n this.roots.forEach((node) => this._filterNode(ids, node, filterFn, autoShow,hiddenNodes));\r\n this._hiddenNodeIds.set(ids);\r\n this._hiddenNodes.set(hiddenNodes);\r\n\r\n this.fireEvent({ eventName: TREE_EVENTS.changeFilter });\r\n }\r\n\r\n clearFilter() {\r\n this._hiddenNodeIds.set({});\r\n this._hiddenNodes.set([]);\r\n\r\n this.fireEvent({ eventName: TREE_EVENTS.changeFilter });\r\n }\r\n\r\n moveNode(node, to) {\r\n const fromIndex = node.getIndexInParent();\r\n const fromParent = node.parent;\r\n\r\n if (!this.canMoveNode(node, to, fromIndex)) return;\r\n\r\n const fromChildren = fromParent.getField('children');\r\n\r\n // If node doesn't have children - create children array\r\n if (!to.parent.getField('children')) {\r\n to.parent.setField('children', []);\r\n }\r\n const toChildren = to.parent.getField('children');\r\n\r\n const originalNode = fromChildren.splice(fromIndex, 1)[0];\r\n\r\n // Compensate for index if already removed from parent:\r\n let toIndex = (fromParent === to.parent && to.index > fromIndex) ? to.index - 1 : to.index;\r\n\r\n toChildren.splice(toIndex, 0, originalNode);\r\n\r\n fromParent.treeModel.update();\r\n if (to.parent.treeModel !== fromParent.treeModel) {\r\n to.parent.treeModel.update();\r\n }\r\n\r\n this.fireEvent({\r\n eventName: TREE_EVENTS.moveNode,\r\n node: originalNode,\r\n to: { parent: to.parent.data, index: toIndex },\r\n from: { parent: fromParent.data, index: fromIndex}\r\n });\r\n }\r\n\r\n copyNode(node, to) {\r\n const fromIndex = node.getIndexInParent();\r\n\r\n if (!this.canMoveNode(node, to, fromIndex)) return;\r\n\r\n // If node doesn't have children - create children array\r\n if (!to.parent.getField('children')) {\r\n to.parent.setField('children', []);\r\n }\r\n const toChildren = to.parent.getField('children');\r\n\r\n const nodeCopy = this.options.getNodeClone(node);\r\n\r\n toChildren.splice(to.index, 0, nodeCopy);\r\n\r\n node.treeModel.update();\r\n if (to.parent.treeModel !== node.treeModel) {\r\n to.parent.treeModel.update();\r\n }\r\n\r\n this.fireEvent({ eventName: TREE_EVENTS.copyNode, node: nodeCopy, to: { parent: to.parent.data, index: to.index } });\r\n }\r\n\r\n getState() {\r\n return {\r\n expandedNodeIds: this._expandedNodeIds(),\r\n selectedLeafNodeIds: this._selectedLeafNodeIds(),\r\n activeNodeIds: this._activeNodeIds(),\r\n hiddenNodeIds: this._hiddenNodeIds(),\r\n focusedNodeId: this._focusedNodeId()\r\n };\r\n }\r\n\r\n setState(state) {\r\n if (!state) return;\r\n\r\n this._expandedNodeIds.set(state.expandedNodeIds || {});\r\n this._selectedLeafNodeIds.set(state.selectedLeafNodeIds || {});\r\n this._activeNodeIds.set(state.activeNodeIds || {});\r\n this._hiddenNodeIds.set(state.hiddenNodeIds || {});\r\n this._focusedNodeId.set(state.focusedNodeId);\r\n }\r\n\r\n subscribeToState(fn) {\r\n effect(() => fn(this.getState()));\r\n }\r\n\r\n canMoveNode(node, to, fromIndex = undefined) {\r\n const fromNodeIndex = fromIndex || node.getIndexInParent();\r\n\r\n // same node:\r\n if (node.parent === to.parent && fromIndex === to.index) {\r\n return false;\r\n }\r\n\r\n return !to.parent.isDescendantOf(node);\r\n }\r\n\r\n calculateExpandedNodes() {\r\n this._calculateExpandedNodes();\r\n }\r\n\r\n // private methods\r\n private _filterNode(ids, node, filterFn, autoShow,hiddenNodes) {\r\n // if node passes function then it's visible\r\n let isVisible = filterFn(node);\r\n\r\n if (node.children) {\r\n // if one of node's children passes filter then this node is also visible\r\n node.children.forEach((child) => {\r\n if (this._filterNode(ids, child, filterFn, autoShow, hiddenNodes)) {\r\n isVisible = true;\r\n }\r\n });\r\n }\r\n\r\n // mark node as hidden\r\n if (!isVisible) {\r\n ids[node.id] = true;\r\n hiddenNodes.push(node);\r\n }\r\n // auto expand parents to make sure the filtered nodes are visible\r\n if (autoShow && isVisible) {\r\n node.ensureVisible();\r\n }\r\n return isVisible;\r\n }\r\n\r\n private _calculateExpandedNodes(startNode = null) {\r\n startNode = startNode || this._virtualRoot();\r\n\r\n if (startNode.data[this.options.isExpandedField]) {\r\n this._expandedNodeIds.update(ids => ({...ids, [startNode.id]: true}));\r\n }\r\n if (startNode.children) {\r\n startNode.children.forEach((child) => this._calculateExpandedNodes(child));\r\n }\r\n }\r\n\r\n private _setActiveNodeSingle(node, value) {\r\n // Deactivate all other nodes:\r\n this.activeNodes\r\n .filter((activeNode) => activeNode !== node)\r\n .forEach((activeNode) => {\r\n this.fireEvent({ eventName: TREE_EVENTS.deactivate, node: activeNode });\r\n this.fireEvent({ eventName: TREE_EVENTS.nodeDeactivate, node: activeNode }); // For IE11\r\n });\r\n\r\n if (value) {\r\n this._activeNodeIds.set({[node.id]: true});\r\n }\r\n else {\r\n this._activeNodeIds.set({});\r\n }\r\n }\r\n\r\n private _setActiveNodeMulti(node, value) {\r\n this._activeNodeIds.update(ids => ({...ids, [node.id]: value}));\r\n }\r\n\r\n generatedIds:any={};\r\n uuid() {\r\n var res = Math.floor(Math.random() * 10000000000000);\r\n while(this.generatedIds[res]){\r\n res = Math.floor(Math.random() * 10000000000000);\r\n }\r\n this.generatedIds[res]=true;\r\n return res;\r\n }\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TreeDraggedElement {\r\n _draggedElement: any = null;\r\n\r\n set(draggedElement: any) {\r\n this._draggedElement = draggedElement;\r\n }\r\n\r\n get(): any {\r\n return this._draggedElement;\r\n }\r\n\r\n isDragging() {\r\n return !!this.get();\r\n }\r\n}\r\n","import { Injectable, Injector, effect, inject, signal } from '@angular/core';\r\nimport { TreeModel } from './tree.model';\r\nimport { TREE_EVENTS } from '../constants/events';\r\n\r\nconst Y_OFFSET = 500; // Extra pixels outside the viewport, in each direction, to render nodes in\r\nconst Y_EPSILON = 150; // Minimum pixel change required to recalculate the rendered nodes\r\n\r\n@Injectable()\r\nexport class TreeVirtualScroll {\r\n private treeModel = inject(TreeModel);\r\n\r\n private _dispose: (() => void)[] = [];\r\n\r\n private _yBlocks = signal<number>(0);\r\n private _x = signal<number>(0);\r\n private _viewportHeight = signal<number | null>(null);\r\n viewport = null;\r\n\r\n get yBlocks() { return this._yBlocks(); }\r\n set yBlocks(value: number) { this._yBlocks.set(value); }\r\n\r\n get x() { return this._x(); }\r\n set x(value: number) { this._x.set(value); }\r\n\r\n get viewportHeight() { return this._viewportHeight(); }\r\n set viewportHeight(value: number | null) { this._viewportHeight.set(value); }\r\n\r\n get y() {\r\n return this.yBlocks * Y_EPSILON;\r\n }\r\n\r\n get totalHeight() {\r\n const vRoot = this.treeModel['_virtualRoot']();\r\n return vRoot ? vRoot.height : 0;\r\n }\r\n\r\n constructor() {\r\n const treeModel = this.treeModel;\r\n\r\n treeModel.virtualScroll = this;\r\n }\r\n\r\n fireEvent(event) {\r\n this.treeModel.fireEvent(event);\r\n }\r\n\r\n init() {\r\n const fn = this.recalcPositions.bind(this);\r\n\r\n fn();\r\n this.treeModel.subscribe(TREE_EVENTS.loadNodeChildren, fn);\r\n }\r\n\r\n setupWatchers(injector: Injector) {\r\n const fn = this.recalcPositions.bind(this);\r\n\r\n const fixScrollEffect = effect(() => {\r\n const yBlocks = this._yBlocks();\r\n const totalHeight = this.totalHeight;\r\n const viewportHeight = this._viewportHeight();\r\n\r\n this.fixScroll();\r\n }, { injector });\r\n\r\n const rootsEffect = effect(() => {\r\n const roots = this.treeModel.roots;\r\n if (roots) {\r\n fn();\r\n }\r\n }, { injector });\r\n\r\n const expandedEffect = effect(() => {\r\n const expandedIds = this.treeModel['_expandedNodeIds']();\r\n fn();\r\n }, { injector });\r\n\r\n const hiddenEffect = effect(() => {\r\n const hiddenIds = this.treeModel['_hiddenNodeIds']();\r\n fn();\r\n }, { injector });\r\n\r\n this._dispose = [\r\n () => fixScrollEffect.destroy(),\r\n () => rootsEffect.destroy(),\r\n () => expandedEffect.destroy(),\r\n () => hiddenEffect.destroy()\r\n ];\r\n }\r\n\r\n isEnabled() {\r\n return this.treeModel.options.useVirtualScroll;\r\n }\r\n\r\n private _setYBlocks(value) {\r\n this.yBlocks = value;\r\n }\r\n\r\n recalcPositions() {\r\n const vRoot = this.treeModel['_virtualRoot']();\r\n if (vRoot) {\r\n const visibleRoots = this.treeModel.getVisibleRoots();\r\n const newHeight = this._getPositionAfter(visibleRoots, 0);\r\n vRoot.height = newHeight;\r\n }\r\n }\r\n\r\n private _getPositionAfter(nodes, startPos) {\r\n let position = startPos;\r\n\r\n nodes.forEach((node) => {\r\n node.position = position;\r\n position = this._getPositionAfterNode(node, position);\r\n });\r\n return position;\r\n }\r\n\r\n private _getPositionAfterNode(node, startPos) {\r\n let position = node.getSelfHeight() + startPos;\r\n\r\n if (node.children && node.isExpanded) { // TBD: consider loading component as well\r\n const visibleChildren = node.visibleChildren;\r\n position = this._getPositionAfter(visibleChildren, position);\r\n }\r\n node.height = position - startPos;\r\n return position;\r\n }\r\n\r\n\r\n clear() {\r\n this._dispose.forEach((d) => d());\r\n }\r\n\r\n setViewport(viewport) {\r\n Object.assign(this, {\r\n viewport,\r\n x: viewport.scrollLeft,\r\n yBlocks: Math.round(viewport.scrollTop / Y_EPSILON),\r\n viewportHeight: viewport.getBoundingClientRect ? viewport.getBoundingClientRect().height : 0\r\n });\r\n }\r\n\r\n scrollIntoView(node, force, scrollToMiddle = true) {\r\n if (node.options.scrollContainer) {\r\n const scrollContainer = node.options.scrollContainer;\r\n const scrollContainerHeight = scrollContainer.getBoundingClientRect().height;\r\n const scrollContainerTop = scrollContainer.getBoundingClientRect().top;\r\n const nodeTop = this.viewport.getBoundingClientRect().top + node.position - scrollContainerTop;\r\n\r\n if (force || // force scroll to node\r\n nodeTop < scrollContainer.scrollTop || // node is above scroll container\r\n nodeTop + node.getSelfHeight() > scrollContainer.scrollTop + scrollContainerHeight) { // node is below container\r\n scrollContainer.scrollTop = scrollToMiddle ?\r\n nodeTop - scrollContainerHeight / 2 : // scroll to middle\r\n nodeTop; // scroll to start\r\n }\r\n } else {\r\n if (force || // force scroll to node\r\n node.position < this.y || // node is above viewport\r\n node.position + node.getSelfHeight() > this.y + this.viewportHeight) { // node is below viewport\r\n if (this.viewport) {\r\n this.viewport.scrollTop = scrollToMiddle ?\r\n node.position - this.viewportHeight / 2 : // scroll to middle\r\n node.position; // scroll to start\r\n\r\n this._setYBlocks(Math.floor(this.viewport.scrollTop / Y_EPSILON));\r\n }\r\n }\r\n }\r\n }\r\n\r\n getViewportNodes(nodes) {\r\n if (!nodes) return [];\r\n\r\n const visibleNodes = nodes.filter((node) => !node.isHidden);\r\n\r\n if (!this.isEnabled()) return visibleNodes;\r\n\r\n if (!this.viewportHeight || !visibleNodes.length) return [];\r\n\r\n // When loading children async this method is called before their height and position is calculated.\r\n // In that case firstIndex === 0 and lastIndex === visibleNodes.length - 1 (e.g. 1000),\r\n // which means that it loops through every visibleNodes item and push them into viewportNodes array.\r\n // We can prevent nodes from being pushed to the array and wait for the appropriate calculations to take place\r\n const lastVisibleNode = visibleNodes.slice(-1)[0]\r\n if (!lastVisibleNode.height && lastVisibleNode.position === 0) return [];\r\n\r\n // Search for first node in the viewport using binary search\r\n // Look for first node that starts after the beginning of the viewport (with buffer)\r\n // Or that ends after the beginning of the viewport\r\n const firstIndex = binarySearch(visibleNodes, (node) => {\r\n return (node.position + Y_OFFSET > this.y) ||\r\n (node.position + node.height > this.y);\r\n });\r\n\r\n // Search for last node in the viewport using binary search\r\n // Look for first node that starts after the end of the viewport (with buffer)\r\n const lastIndex = binarySearch(visibleNodes, (node) => {\r\n return node.position - Y_OFFSET > this.y + this.viewportHeight;\r\n }, firstIndex);\r\n\r\n const viewportNodes = [];\r\n\r\n for (let i = firstIndex; i <= lastIndex; i++) {\r\n viewportNodes.push(visibleNodes[i]);\r\n }\r\n\r\n return viewportNodes;\r\n }\r\n\r\n fixScroll() {\r\n const maxY = Math.max(0, this.totalHeight - this.viewportHeight);\r\n\r\n if (this.y < 0) this._setYBlocks(0);\r\n if (this.y > maxY) this._setYBlocks(maxY / Y_EPSILON);\r\n }\r\n}\r\n\r\nfunction binarySearch(nodes, condition, firstIndex = 0) {\r\n let index = firstIndex;\r\n let toIndex = nodes.length - 1;\r\n\r\n while (index !== toIndex) {\r\n let midIndex = Math.floor((index + toIndex) / 2);\r\n\r\n if (condition(nodes[midIndex])) {\r\n toIndex = midIndex;\r\n }\r\n else {\r\n if (index === midIndex) index = toIndex;\r\n else index = midIndex;\r\n }\r\n }\r\n return index;\r\n}\r\n","import {\r\n Component,\r\n TemplateRef,\r\n ViewEncapsulation,\r\n input\r\n} from '@angular/core';\r\nimport { TreeNode } from '../models/tree-node.model';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\n\r\n@Component({\r\n encapsulation: ViewEncapsulation.None,\r\n selector: 'tree-loading-component',\r\n template: `\r\n @if (!template()) {\r\n <span>loading...</span>\r\n }\r\n <ng-container\r\n [ngTemplateOutlet]=\"template()\"\r\n [ngTemplateOutletContext]=\"{ $implicit: node() }\"\r\n >\r\n </ng-container>\r\n `,\r\n imports: [NgTemplateOutlet]\r\n})\r\nexport class LoadingComponent {\r\n readonly template = input<TemplateRef<any>>(undefined);\r\n readonly node = input<TreeNode>(undefined);\r\n}\r\n","import {\r\n Component,\r\n ElementRef,\r\n AfterViewInit,\r\n OnInit,\r\n OnDestroy,\r\n Injector,\r\n Renderer2,\r\n afterNextRender,\r\n inject,\r\n computed\r\n} from '@angular/core';\r\nimport { TreeVirtualScroll } from '../models/tree-virtual-scroll.model';\r\nimport { TREE_EVENTS } from '../constants/events';\r\n\r\n@Component({\r\n selector: 'tree-viewport',\r\n styles: [],\r\n providers: [TreeVirtualScroll],\r\n template: `\r\n <div [style.height]=\"totalHeight()\">\r\n <ng-content></ng-content>\r\n </div>\r\n `,\r\n imports: []\r\n})\r\nexport class TreeViewportComponent implements AfterViewInit, OnInit, OnDestroy {\r\n private elementRef = inject(ElementRef);\r\n virtualScroll = inject(TreeVirtualScroll);\r\n private injector = inject(Injector);\r\n private renderer = inject(Renderer2);\r\n\r\n // Computed signal for total height - ensures reactive updates\r\n totalHeight = computed(() => {\r\n if (!this.virtualScroll.isEnabled()) {\r\n return 'auto';\r\n }\r\n return this.virtualScroll.totalHeight + 'px';\r\n });\r\n\r\n setViewport = this.throttle(() => {\r\n this.virtualScroll.setViewport(this.elementRef.nativeElement);\r\n }, 17);\r\n\r\n private readonly scrollEventHandler: ($event: Event) => void;\r\n private removeScrollListener: (() => void) | null = null;\r\n\r\n constructor() {\r\n this.scrollEventHandler = this.setViewport.bind(this);\r\n }\r\n\r\n ngOnInit() {\r\n this.virtualScroll.init();\r\n this.virtualScroll.setupWatchers(this.injector);\r\n }\r\n\r\n ngAfterViewInit() {\r\n afterNextRender(() => {\r\n this.setViewport();\r\n this.virtualScroll.fireEvent({ eventName: TREE_EVENTS.initialized });\r\n }, { injector: this.injector });\r\n\r\n const el: HTMLElement = this.elementRef.nativeElement;\r\n this.removeScrollListener = this.renderer.listen(\r\n el,\r\n 'scroll',\r\n this.scrollEventHandler\r\n );\r\n }\r\n\r\n ngOnDestroy() {\r\n this.virtualScroll.clear();\r\n this.removeScrollListener?.();\r\n this.removeScrollListener = null;\r\n }\r\n\r\n private throttle(func, timeFrame) {\r\n let lastTime = 0;\r\n return function() {\r\n let now = Date.now();\r\n if (now - lastTime >= timeFrame) {\r\n func();\r\n lastTime = now;\r\n }\r\n };\r\n }\r\n}\r\n","import {\r\n AfterViewInit,\r\n Directive,\r\n ElementRef,\r\n HostListener,\r\n OnDestroy,\r\n Renderer2,\r\n input,\r\n inject,\r\n output,\r\n effect\r\n} from '@angular/core';\r\nimport { TreeDraggedElement } from '../models/tree-dragged-element.model';\r\n\r\nconst DRAG_OVER_CLASS = 'is-dragging-over';\r\nconst DRAG_DISABLED_CLASS = 'is-dragging-over-disabled';\r\n\r\n@Directive({ selector: '[treeDrop]' })\r\nexport class TreeDropDirective implements AfterViewInit, OnDestroy {\r\n private el = inject(ElementRef);\r\n private renderer = inject(Renderer2);\r\n private treeDraggedElement = inject(TreeDraggedElement);\r\n\r\n readonly allowDragoverStyling = input(true);\r\n readonly treeAllowDrop = input<boolean | Function>(undefined);\r\n readonly onDropCallback = output<{event: DragEvent, element: any}>({ alias: 'treeDrop' });\r\n readonly onDragOverCallback = output<{event: DragEvent, element: any}>({ alias: 'treeDropDragOver' });\r\n readonly onDragLeaveCallback = output<{event: DragEvent, element: any}>({ alias: 'treeDropDragLeave' });\r\n readonly onDragEnterCallback = output<{event: DragEvent, element: any}>({ alias: 'treeDropDragEnter' });\r\n private readonly dragOverEventHandler: (ev: DragEvent) => void;\r\n private readonly dragEnterEventHandler: (ev: DragEvent) => void;\r\n private readonly dragLeaveEventHandler: (ev: DragEvent) => void;\r\n private dragOverUnlisten: (() => void) | null = null;\r\n private dragEnterUnlisten: (() => void) | null = null;\r\n private dragLeaveUnlisten: (() => void) | null = null;\r\n\r\n private _allowDrop = (element, $event) => true;\r\n\r\n allowDrop($event) {\r\n return this._allowDrop(this.treeDraggedElement.get(), $event);\r\n }\r\n\r\n constructor() {\r\n this.dragOverEventHandler = this.onDragOver.bind(this);\r\n this.dragEnterEventHandler = this.onDragEnter.bind(this);\r\n this.dragLeaveEventHandler = this.onDragLeave.bind(this);\r\n \r\n effect(() => {\r\n const allowDrop = this.treeAllowDrop();\r\n if (allowDrop instanceof Function) {\r\n this._allowDrop = allowDrop as (element: any, $event: any) => boolean;\r\n }\r\n else if (allowDrop !== undefined) {\r\n this._allowDrop = (element, $event) => allowDrop;\r\n }\r\n });\r\n }\r\n\r\n ngAfterViewInit() {\r\n let el: HTMLElement = this.el.nativeElement;\r\n this.dragOverUnlisten = this.renderer.listen(\r\n el,\r\n 'dragover',\r\n this.dragOverEventHandler\r\n );\r\n this.dragEnterUnlisten = this.renderer.listen(\r\n el,\r\n 'dragenter',\r\n this.dragEnterEventHandler\r\n );\r\n this.dragLeaveUnlisten = this.renderer.listen(\r\n el,\r\n 'dragleave',\r\n this.dragLeaveEventHandler\r\n );\r\n }\r\n\r\n ngOnDestroy() {\r\n this.dragOverUnlisten?.();\r\n this.dragEnterUnlisten?.();\r\n this.dragLeaveUnlisten?.();\r\n this.dragOverUnlisten = null;\r\n this.dragEnterUnlisten = null;\r\n this.dragLeaveUnlisten = null;\r\n }\r\n\r\n onDragOver($event) {\r\n if (!this.allowDrop($event)) {\r\n if (this.allowDragoverStyling()) {\r\n return this.addDisabledClass();\r\n }\r\n return;\r\n }\r\n\r\n this.onDragOverCallback.emit({event: $event, element: this.treeDraggedElement.get()});\r\n\r\n $event.preventDefault();\r\n if (this.allowDragoverStyling()) {\r\n this.addClass();\r\n }\r\n }\r\n\r\n onDragEnter($event) {\r\n if (!this.allowDrop($event)) return;\r\n\r\n $event.preventDefault();\r\n this.onDragEnterCallback.emit({event: $event, element: this.treeDraggedElement.get()});\r\n }\r\n\r\n onDragLeave($event) {\r\n if (!this.allowDrop($event)) {\r\n if (this.allowDragoverStyling()) {\r\n return this.removeDisabledClass();\r\n }\r\n return;\r\n }\r\n this.onDragLeaveCallback.emit({event: $event, element: this.treeDraggedElement.get()});\r\n\r\n if (this.allowDragoverStyling()) {\r\n this.removeClass();\r\n }\r\n }\r\n\r\n @HostListener('drop', ['$event']) onDrop($event) {\r\n if (!this.allowDrop($event)) return;\r\n\r\n $event.preventDefault();\r\n this.onDropCallback.emit({event: $event, element: this.treeDraggedElement.get()});\r\n\r\n if (this.allowDragoverStyling()) {\r\n this.removeClass();\r\n }\r\n this.treeDraggedElement.set(null);\r\n }\r\n\r\n private addClass() {\r\n this.renderer.addClass(this.el.nativeElement, DRAG_OVER_CLASS);\r\n }\r\n\r\n private removeClass() {\r\n this.renderer.removeClass(this.el.nativeElement, DRAG_OVER_CLASS);\r\n }\r\n\r\n private addDisabledClass() {\r\n this.renderer.addClass(this.el.nativeElement, DRAG_DISABLED_CLASS);\r\n }\r\n\r\n private removeDisabledClass() {\r\n this.renderer.removeClass(this.el.nativeElement, DRAG_DISABLED_CLASS);\r\n }\r\n}\r\n","import { Component, ViewEncapsulation, input } from '@angular/core';\r\nimport { TreeNode } from '../models/tree-node.model';\r\nimport { TreeDropDirective } from '../directives/tree-drop.directive';\r\n\r\n@Component({\r\n selector: 'TreeNodeDropSlot, tree-node-drop-slot',\r\n encapsulation: ViewEncapsulation.None,\r\n styles: [],\r\n template: `\r\n <div\r\n class=\"node-drop-slot\"\r\n (treeDrop)=\"onDrop($event)\"\r\n [treeAllowDrop]=\"allowDrop.bind(this)\"\r\n [allowDragoverStyling]=\"true\"\r\n ></div>\r\n `,\r\n imports: [TreeDropDirective]\r\n})\r\nexport class TreeNodeDropSlot {\r\n readonly node = input<TreeNode>(undefined);\r\n readonly dropIndex = input<number>(undefined);\r\n\r\n onDrop($event) {\r\n this.node().mouseAction('drop', $event.event, {\r\n from: $event.element,\r\n to: { parent: this.node(), index: this.dropIndex() }\r\n });\r\n }\r\n\r\n allowDrop(element, $event) {\r\n return this.node().options.allowDrop(\r\n element,\r\n { parent: this.node(), index: this.dropIndex() },\r\n $event\r\n );\r\n }\r\n}\r\n","import { Component, ViewEncapsulation, input } from '@angular/core';\r\nimport { TreeNode } from '../models/tree-node.model';\r\n\r\n@Component({\r\n selector: 'tree-node-checkbox',\r\n encapsulation: ViewEncapsulation.None,\r\n styles: [],\r\n template: `\r\n <input\r\n class=\"tree-node-checkbox\"\r\n type=\"checkbox\"\r\n (click)=\"node().mouseAction('checkboxClick', $event)\"\r\n [checked]=\"node().isSelected\"\r\n [indeterminate]=\"node().isPartiallySelected\"\r\n />\r\n `,\r\n imports: []\r\n})\r\nexport class TreeNodeCheckboxComponent {\r\n readonly node = input<TreeNode>(undefined);\r\n}\r\n","import {\r\n Component,\r\n computed,\r\n input,\r\n ViewEncapsulation\r\n} from '@angular/core';\r\nimport { TreeNode } from '../models/tree-node.model';\r\n\r\n@Component({\r\n selector: 'tree-node-expander',\r\n encapsulation: ViewEncapsulation.None,\r\n styles: [],\r\n template: `\r\n @if (hasChildren()) {\r\n <span\r\n [class.toggle-children-wrapper-expanded]=\"node().isExpanded\"\r\n [class.toggle-children-wrapper-collapsed]=\"node().isCollapsed\"\r\n class=\"toggle-children-wrapper\"\r\n (click)=\"node().mouseAction('expanderClick', $event)\"\r\n >\r\n <span class=\"toggle-children\"></span>\r\n </span>\r\n } @if (!hasChildren()) {\r\n <span class=\"toggle-children-placeholder\"></span>\r\n }\r\n `,\r\n imports: []\r\n})\r\nexport class TreeNodeExpanderComponent {\r\n readonly node = input<TreeNode>();\r\n readonly hasChildren = computed(() => this.node().hasChildren);\r\n}\r\n","import { AfterViewInit, Directive, DoCheck, ElementRef, HostListener, OnDestroy, Renderer2, input, inject } from '@angular/core';\r\nimport { TreeDraggedElement } from '../models/tree-dragged-element.model';\r\n\r\n@Directive({ selector: '[treeDrag]' })\r\nexport class TreeDragDirective implements AfterViewInit, DoCheck, OnDestroy {\r\n private el = inject(ElementRef);\r\n private renderer = inject(Renderer2);\r\n private treeDraggedElement = inject(TreeDraggedElement);\r\n\r\n readonly draggedElement = input(undefined, { alias: \"treeDrag\" });\r\n readonly treeDragEnabled = input(undefined);\r\n private readonly dragEventHandler: (ev: DragEvent) => void;\r\n private dragUnlisten: (() => void) | null = null;\r\n\r\n constructor() {\r\n this.dragEventHandler = this.onDrag.bind(this);\r\n }\r\n\r\n ngAfterViewInit() {\r\n let el: HTMLElement = this.el.nativeElement;\r\n this.dragUnlisten = this.renderer.listen(\r\n el,\r\n 'drag',\r\n this.dragEventHandler\r\n );\r\n }\r\n\r\n ngDoCheck() {\r\n this.renderer.setAttribute(this.el.nativeElement, 'draggable', this.treeDragEnabled() ? 'true' : 'false');\r\n }\r\n\r\n ngOnDestroy() {\r\n this.dragUnlisten?.();\r\n this.dragUnlisten = null;\r\n }\r\n\r\n @HostListener('dragstart', ['$event']) onDragStart(ev) {\r\n // setting the data is required by firefox\r\n ev.dataTransfer.setData('text', ev.target.id);\r\n const draggedElement = this.draggedElement();\r\n this.treeDraggedElement.set(draggedElement);\r\n if (draggedElement.mouseAction) {\r\n draggedElement.mouseAction('dragStart', ev);\r\n }\r\n }\r\n\r\n onDrag(ev) {\r\n const draggedElement = this.draggedElement();\r\n if (draggedElement.mouseAction) {\r\n draggedElement.mouseAction('drag', ev);\r\n }\r\n }\r\n\r\n @HostListener('dragend') onDragEnd() {\r\n const draggedElement = this.draggedElement();\r\n if (draggedElement.mouseAction) {\r\n draggedElement.mouseAction('dragEnd');\r\n }\r\n this.treeDraggedElement.set(null);\r\n }\r\n}\r\n","import {\r\n Component,\r\n ViewEncapsulation,\r\n TemplateRef,\r\n input\r\n} from '@angular/core';\r\nimport { TreeNode } from '../models/tree-node.model';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'tree-node-content',\r\n encapsulation: ViewEncapsulation.None,\r\n template: `\r\n @if (!template()) {\r\n <span>{{ node().displayField }}</span>\r\n }\r\n <ng-container\r\n [ngTemplateOutlet]=\"template()\"\r\n [ngTemplateOutletContext]=\"{\r\n $implicit: node(),\r\n node: node(),\r\n index: index()\r\n }\"\r\n >\r\n </ng-container>\r\n `,\r\n imports: [NgTemplateOutlet]\r\n})\r\nexport class TreeNodeContent {\r\n readonly node = input<TreeNode>(undefined);\r\n readonly index = input<number>(undefined);\r\n readonly template = input<TemplateRef<any>>(undefined);\r\n}\r\n","import {\r\n Component,\r\n ViewEncapsulation,\r\n computed,\r\n input\r\n} from '@angular/core';\r\nimport { TreeNode } from '../models/tree-node.model';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport { TreeNodeCheckboxComponent } from './tree-node-checkbox.component';\r\nimport { TreeNodeExpanderComponent } from './tree-node-expander.component';\r\nimport { TreeDragDirective } from '../directives/tree-drag.directive';\r\nimport { TreeDropDirective } from '../directives/tree-drop.directive';\r\nimport { TreeNodeContent } from './tree-node-content.component';\r\n\r\n@Component({\r\n selector: 'tree-node-wrapper',\r\n encapsulation: ViewEncapsulation.None,\r\n styles: [],\r\n template: `\r\n @if (!treeNodeWrapperTemplate()) {\r\n <div class=\"node-wrapper\" [style.padding-left]=\"node().getNodePadding()\">\r\n @if (node().options.useCheckbox) {\r\n <tree-node-checkbox [node]=\"node()\"></tree-node-checkbox>\r\n }\r\n <tree-node-expander [node]=\"node()\"></tree-node-expander>\r\n <div\r\n class=\"node-content-wrapper\"\r\n [class.node-content-wrapper-active]=\"node().isActive\"\r\n [class.node-content-wrapper-focused]=\"node().isFocused\"\r\n (click)=\"node().mouseAction('click', $event)\"\r\n (dblclick)=\"node().mouseAction('dblClick', $event)\"\r\n (mouseover)=\"node().mouseAction('mouseOver', $event)\"\r\n (mouseout)=\"node().mouseAction('mouseOut', $event)\"\r\n (contextmenu)=\"node().mouseAction('contextMenu', $event)\"\r\n (treeDrop)=\"node().onDrop($event)\"\r\n (treeDropDragOver)=\"node().mouseAction('dragOver', $event)\"\r\n (treeDropDragLeave)=\"node().mouseAction('dragLeave', $event)\"\r\n (treeDropDragEnter)=\"node().mouseAction('dragEnter', $event)\"\r\n [treeAllowDrop]=\"node().allowDrop\"\r\n [allowDragoverStyling]=\"node().allowDragoverStyling()\"\r\n [treeDrag]=\"node()\"\r\n [treeDragEnabled]=\"node().allowDrag()\"\r\n >\r\n <tree-node-content\r\n [node]=\"node()\"\r\n [index]=\"index()\"\r\n [template]=\"templates().treeNodeTemplate\"\r\n >\r\n </tree-node-content>\r\n </div>\r\n </div>\r\n }\r\n <ng-container\r\n [ngTemplateOutlet]=\"treeNodeWrapperTemplate()\"\r\n [ngTemplateOutletContext]=\"{\r\n $implicit: node(),\r\n node: node(),\r\n index: index(),\r\n templates: templates()\r\n }\"\r\n >\r\n </ng-container>\r\n `,\r\n imports: [\r\n TreeNodeCheckboxComponent,\r\n TreeNodeExpanderComponent,\r\n TreeDragDirective,\r\n TreeDropDirective,\r\n TreeNodeContent,\r\n NgTemplateOutlet\r\n ]\r\n})\r\nexport class TreeNodeWrapperComponent {\r\n readonly node = input<TreeNode>();\r\n readonly index = input<number>(undefined);\r\n readonly templates = input<any>();\r\n treeNodeWrapperTemplate = computed(\r\n () => this.templates().treeNodeWrapperTemplate\r\n );\r\n}\r\n","import {\r\n Directive,\r\n Renderer2,\r\n TemplateRef,\r\n ViewContainerRef,\r\n OnDestroy,\r\n input,\r\n effect,\r\n inject\r\n} from '@angular/core';\r\n\r\nconst EASE_ACCELERATION = 1.005;\r\n\r\n@Directive({ selector: '[treeAnimateOpen]' })\r\nexport class TreeAnimateOpenDirective implements OnDestroy {\r\n private renderer = inject(Renderer2);\r\n private templateRef = inject<TemplateRef<any>>(TemplateRef);\r\n private viewContainerRef = inject(ViewContainerRef);\r\n\r\n readonly isOpen = input<boolean>(undefined, { alias: 'treeAnimateOpen' });\r\n readonly animateSpeed = input<number>(undefined, {\r\n alias: 'treeAnimateOpenSpeed'\r\n });\r\n readonly animateAcceleration = input<number>(undefined, {\r\n alias: 'treeAnimateOpenAcceleration'\r\n });\r\n readonly isEnabled = input<boolean>(undefined, {\r\n alias: 'treeAnimateOpenEnabled'\r\n });\r\n\r\n private innerElement: any;\r\n private previousIsOpen: boolean;\r\n private startOpenTimeout: ReturnType<typeof setTimeout> | null = null;\r\n private openInterval: ReturnType<typeof setInterval> | null = null;\r\n private closeInterval: ReturnType<typeof setInterval> | null = null;\r\n\r\n constructor() {\r\n effect(() => {\r\n const value = this.isOpen();\r\n if (value) {\r\n this._show();\r\n if (this.isEnabled() && this.previousIsOpen === false) {\r\n this._animateOpen();\r\n }\r\n } else {\r\n this.isEnabled() ? this._animateClose() : this._hide();\r\n }\r\n this.previousIsOpen = !!value;\r\n });\r\n }\r\n\r\n private _show() {\r\n if (this.innerElement) return;\r\n\r\n // create child view\r\n this.innerElement = this.viewContainerRef.createEmbeddedView(\r\n this.templateRef\r\n ).rootNodes[0];\r\n }\r\n\r\n private _hide() {\r\n this.clearTimers();\r\n this.viewContainerRef.clear();\r\n this.innerElement = null;\r\n }\r\n\r\n private _animateOpen() {\r\n this.clearTimers();\r\n let delta = this.animateSpeed();\r\n let ease = this.animateAcceleration();\r\n let maxHeight = 0;\r\n\r\n // set height to 0\r\n this.renderer.setStyle(this.innerElement, 'max-height', `0`);\r\n\r\n // increase maxHeight until height doesn't change\r\n this.startOpenTimeout = setTimeout(() => {\r\n this.startOpenTimeout = null;\r\n // Allow inner element to create its content\r\n this.openInterval = setInterval(() => {\r\n if (!this.isOpen() || !this.innerElement) {\r\n this.clearOpenInterval();\r\n return;\r\n }\r\n\r\n maxHeight += delta;\r\n const roundedMaxHeight = Math.round(maxHeight);\r\n\r\n this.renderer.setStyle(\r\n this.innerElement,\r\n 'max-height',\r\n `${roundedMaxHeight}px`\r\n );\r\n const height = this.innerElement.getBoundingClientRect\r\n ? this.innerElement.getBoundingClientRect().height\r\n : 0; // TBD use renderer\r\n\r\n delta *= ease;\r\n ease *= EASE_ACCELERATION;\r\n if (height < roundedMaxHeight) {\r\n // Make maxHeight auto because animation finished and container might change height later on\r\n this.renderer.setStyle(this.innerElement, 'max-height', null);\r\n this.clearOpenInterval();\r\n }\r\n }, 17);\r\n });\r\n }\r\n\r\n private _animateClose() {\r\n if (!this.innerElement) return;\r\n\r\n this.clearTimers();\r\n let delta = this.animateSpeed();\r\n let ease = this.animateAcceleration();\r\n let height = this.innerElement.getBoundingClientRect().height; // TBD use renderer\r\n\r\n // slowly decrease maxHeight to 0, starting from current height\r\n this.closeInterval = setInterval(() => {\r\n if (this.isOpen() || !this.innerElement) {\r\n this.clearCloseInterval();\r\n return;\r\n }\r\n\r\n height -= delta;\r\n this.renderer.setStyle(this.innerElement, 'max-height', `${height}px`);\r\n delta *= ease;\r\n ease *= EASE_ACCELERATION;\r\n\r\n if (height <= 0) {\r\n // after animation complete - remove child element\r\n this.viewContainerRef.clear();\r\n this.innerElement = null;\r\n this.clearCloseInterval();\r\n }\r\n }, 17);\r\n }\r\n\r\n ngOnDestroy() {\r\n this.clearTimers();\r\n }\r\n\r\n private clearTimers() {\r\n if (this.startOpenTimeout !== null) {\r\n clearTimeout(this.startOpenTimeout);\r\n this.startOpenTimeout = null;\r\n }\r\n this.clearOpenInterval();\r\n this.clearCloseInterval();\r\n }\r\n\r\n private clearOpenInterval() {\r\n if (this.openInterval !== null) {\r\n clearInterval(this.openInterval);\r\n this.openInterval = null;\r\n }\r\n }\r\n\r\n private clearCloseInterval() {\r\n if (this.closeInterval !== null) {\r\n clearInterval(this.closeInterval);\r\n this.closeInterval = null;\r\n }\r\n }\r\n}\r\n","import {\r\n Component,\r\n ViewEncapsulation,\r\n OnInit,\r\n OnDestroy,\r\n forwardRef,\r\n signal,\r\n computed,\r\n effect,\r\n Injector,\r\n input,\r\n inject\r\n} from '@angular/core';\r\nimport { TreeVirtualScroll } from '../models/tree-virtual-scroll.model';\r\nimport { TreeNode } from '../models/tree-node.model';\r\nimport { TreeModel } from '../models/tree.model';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport { TreeNodeDropSlot } from './tree-node-drop-slot.component';\r\nimport { TreeNodeWrapperComponent } from './tree-node-wrapper.component';\r\nimport { TreeAnimateOpenDirective } from '../directives/tree-animate-open.directive';\r\nimport { LoadingComponent } from './loading.component';\r\n\r\n@Component({\r\n selector: 'tree-node-children',\r\n encapsulation: ViewEncapsulation.None,\r\n styles: [],\r\n template: `\r\n <div\r\n [class.tree-children]=\"true\"\r\n [class.tree-children-no-padding]=\"node().options.levelPadding\"\r\n *treeAnimateOpen=\"\r\n node().isExpanded;\r\n speed: node().options.animateSpeed;\r\n acceleration: node().options.animateAcceleration;\r\n enabled: node().options.animateExpand\r\n \"\r\n >\r\n @if (children()) {\r\n <tree-node-collection\r\n [nodes]=\"children()\"\r\n [templates]=\"templates()\"\r\n [treeModel]=\"node().treeModel\"\r\n >\r\n </tree-node-collection>\r\n } @if (!children()) {\r\n <tree-loading-component\r\n [style.padding-left]=\"node().getNodePadding()\"\r\n class=\"tree-node-loading\"\r\n [template]=\"templates().loadingTemplate\"\r\n [node]=\"node()\"\r\n ></tree-loading-component>\r\n }\r\n </div>\r\n `,\r\n imports: [\r\n TreeAnimateOpenDirective,\r\n forwardRef(() => TreeNodeCollectionComponent),\r\n LoadingComponent\r\n ]\r\n})\r\nexport class TreeNodeChildrenComponent {\r\n readonly node = input<TreeNode>();\r\n readonly templates = input<any>(undefined);\r\n\r\n children = computed(() => this.node().children);\r\n}\r\n\r\n@Component({\r\n selector: 'tree-node-collection',\r\n encapsulation: ViewEncapsulation.None,\r\n template: `\r\n <div [style.margin-top]=\"marginTop()\">\r\n @for (node of viewportNodes(); track trackNode(i, node); let i = $index) {\r\n <tree-node [node]=\"node\" [index]=\"i\" [templates]=\"templates()\">\r\n </tree-node>\r\n }\r\n </div>\r\n `,\r\n imports: [forwardRef(() => TreeNodeComponent)]\r\n})\r\nexport class TreeNodeCollectionComponent implements OnInit, OnDestroy {\r\n readonly nodes = input<TreeNode[]>(undefined);\r\n readonly treeModel = input<TreeModel>(undefined);\r\n private injector = inject(Injector);\r\n\r\n private virtualScroll: TreeVirtualScroll;\r\n readonly templates = input(undefined);\r\n\r\n viewportNodes = signal<TreeNode[]>([]);\r\n\r\n marginTop = computed(() => {\r\n const nodes = this.viewportNodes();\r\n const firstNode = nodes && nodes.length && nodes[0];\r\n const relativePosition =\r\n firstNode && firstNode.parent\r\n ? firstNode.position -\r\n firstNode.parent.position -\r\n firstNode.parent.getSelfHeight()\r\n : 0;\r\n\r\n return `${relativePosition}px`;\r\n });\r\n\r\n private _disposeEffects: (() => void)[] = [];\r\n\r\n ngOnInit() {\r\n this.virtualScroll = this.treeModel().virtualScroll;\r\n\r\n const viewportEffect = effect(\r\n () => {\r\n const nodes = this.nodes();\r\n if (nodes && this.virtualScroll) {\r\n const viewportNodes = this.virtualScroll.getViewportNodes(nodes);\r\n this.viewportNodes.set(viewportNodes);\r\n }\r\n },\r\n { injector: this.injector }\r\n );\r\n\r\n this._disposeEffects = [() => viewportEffect.destroy()];\r\n }\r\n\r\n ngOnDestroy() {\r\n this._disposeEffects.forEach(d => d());\r\n }\r\n\r\n trackNode(index, node) {\r\n return node.id;\r\n }\r\n}\r\n\r\n@Component({\r\n selector: 'TreeNode, tree-node',\r\n encapsulation: ViewEncapsulation.None,\r\n styles: [],\r\n template: `\r\n @if (!treeNodeFullTemplate()) {\r\n <div\r\n [class]=\"node().getClass()\"\r\n [class.tree-node]=\"true\"\r\n [class.tree-node-expanded]=\"node().isExpanded && node().hasChildren\"\r\n [class.tree-node-collapsed]=\"node().isCollapsed && node().hasChildren\"\r\n [class.tree-node-leaf]=\"node().isLeaf\"\r\n [class.tree-node-active]=\"node().isActive\"\r\n [class.tree-node-focused]=\"node().isFocused\"\r\n >\r\n @if (index() === 0) {\r\n <tree-node-drop-slot\r\n [dropIndex]=\"node().index\"\r\n [node]=\"node().parent\"\r\n ></tree-node-drop-slot>\r\n }\r\n\r\n <tree-node-wrapper\r\n [node]=\"node()\"\r\n [index]=\"index()\"\r\n [templates]=\"templates()\"\r\n ></tree-node-wrapper>\r\n\r\n <tree-node-children\r\n [node]=\"node()\"\r\n [templates]=\"templates()\"\r\n ></tree-node-children>\r\n <tree-node-drop-slot\r\n [dropIndex]=\"node().index + 1\"\r\n [node]=\"node().parent\"\r\n ></tree-node-drop-slot>\r\n </div>\r\n }\r\n <ng-container\r\n [ngTemplateOutlet]=\"treeNodeFullTemplate()\"\r\n [ngTemplateOutletContext]=\"{\r\n $implicit: node(),\r\n node: node(),\r\n index: index(),\r\n templates: templates()\r\n }\"\r\n >\r\n </ng-container>\r\n `,\r\n imports: [\r\n TreeNodeDropSlot,\r\n TreeNodeWrapperComponent,\r\n TreeNodeChildrenComponent,\r\n NgTemplateOutlet\r\n ]\r\n})\r\nexport class TreeNodeComponent {\r\n readonly node = input<TreeNode>(undefined);\r\n readonly index = input<number>(undefined);\r\n readonly templates = input<any>();\r\n treeNodeFullTemplate = computed(() => this.templates().treeNodeFullTemplate);\r\n}\r\n","import {\r\n Component,\r\n ContentChild,\r\n EventEmitter,\r\n HostListener,\r\n inject,\r\n Input,\r\n OnChanges,\r\n Output,\r\n TemplateRef,\r\n ViewChild\r\n} from '@angular/core';\r\nimport { TreeModel } from '../models/tree.model';\r\nimport { TreeDraggedElement } from '../models/tree-dragged-element.model';\r\nimport { TreeOptions } from '../models/tree-options.model';\r\nimport { ITreeOptions } from '../defs/api';\r\nimport { TreeViewportComponent } from './tree-viewport.component';\r\n\r\nimport { TreeNodeCollectionComponent } from './tree-node-collection.component';\r\nimport { TreeNodeDropSlot } from './tree-node-drop-slot.component';\r\n\r\n@Component({\r\n selector: 'Tree, tree-root',\r\n providers: [TreeModel],\r\n styles: [],\r\n template: `\r\n <tree-viewport #viewport>\r\n <div\r\n class=\"angular-tree-component\"\r\n [class.node-dragging]=\"treeDraggedElement.isDragging()\"\r\n [class.angular-tree-component-rtl]=\"treeModel.options.rtl\"\r\n >\r\n @if (treeModel.roots) {\r\n <tree-node-collection\r\n [nodes]=\"treeModel.roots\"\r\n [treeModel]=\"treeModel\"\r\n [templates]=\"{\r\n loadingTemplate: loadingTemplate,\r\n treeNodeTemplate: treeNodeTemplate,\r\n treeNodeWrapperTemplate: treeNodeWrapperTemplate,\r\n treeNodeFullTemplate: treeNodeFullTemplate\r\n }\"\r\n >\r\n </tree-node-collection>\r\n }\r\n @if (treeModel.isEmptyTree()) {\r\n <tree-node-drop-slot\r\n class=\"empty-tree-drop-slot\"\r\n [dropIndex]=\"0\"\r\n [node]=\"treeModel.virtualRoot\"\r\n >\r\n </tree-node-drop-slot>\r\n }\r\n </div>\r\n </tree-viewport>\r\n `,\r\n imports: [\r\n TreeViewportComponent,\r\n TreeNodeCollectionComponent,\r\n TreeNodeDropSlot\r\n]\r\n})\r\nexport class TreeComponent implements OnChanges {\r\n treeModel = inject(TreeModel);\r\n treeDraggedElement = inject(TreeDraggedElement);\r\n\r\n _nodes: any[];\r\n _options: TreeOptions;\r\n\r\n @ContentChild('loadingTemplate', { static: false })\r\n loadingTemplate: TemplateRef<any>;\r\n @ContentChild('treeNodeTemplate', { static: false })\r\n treeNodeTemplate: TemplateRef<any>;\r\n @ContentChild('treeNodeWrapperTemplate', { static: false })\r\n treeNodeWrapperTemplate: TemplateRef<any>;\r\n @ContentChild('treeNodeFullTemplate', { static: false })\r\n treeNodeFullTemplate: TemplateRef<any>;\r\n @ViewChild('viewport', { static: false })\r\n viewportComponent: TreeViewportComponent;\r\n\r\n // Will be handled in ngOnChanges\r\n @Input() set nodes(nodes: any[]) {}\r\n\r\n @Input() set options(options: ITreeOptions) {}\r\n\r\n @Input() set focused(value: boolean) {\r\n this.treeModel.setFocus(value);\r\n }\r\n\r\n @Input() set state(state) {\r\n this.treeModel.setState(state);\r\n }\r\n\r\n @Output() toggleExpanded;\r\n @Output() activate;\r\n @Output() deactivate;\r\n @Output() nodeActivate;\r\n @Output() nodeDeactivate;\r\n @Output() select;\r\n @Output() deselect;\r\n @Output() focus;\r\n @Output() blur;\r\n @Output() updateData;\r\n @Output() initialized;\r\n @Output() moveNode;\r\n @Output() copyNode;\r\n @Output() loadNodeChildren;\r\n @Output() changeFilter;\r\n @Output() event;\r\n @Output() stateChange;\r\n\r\n constructor() {\r\n const treeModel = this.treeModel;\r\n\r\n treeModel.eventNames.forEach(name => (this[name] = new EventEmitter()));\r\n treeModel.subscribeToState(state => this.stateChange.emit(state));\r\n }\r\n\r\n @HostListener('body: keydown', ['$event'])\r\n onKeydown($event) {\r\n if (!this.treeModel.isFocused) return;\r\n if (\r\n ['input', 'textarea'].includes(\r\n document.activeElement.tagName.toLowerCase()\r\n )\r\n )\r\n return;\r\n\r\n const focusedNode = this.treeModel.getFocusedNode();\r\n\r\n this.treeModel.performKeyAction(focusedNode, $event);\r\n }\r\n\r\n @HostListener('body: mousedown', ['$event'])\r\n onMousedown($event) {\r\n function isOutsideClick(startElement: Element, nodeName: string) {\r\n return !startElement\r\n ? true\r\n : startElement.localName === nodeName\r\n ? false\r\n : isOutsideClick(startElement.parentElement, nodeName);\r\n }\r\n\r\n if (isOutsideClick($event.target, 'tree-root')) {\r\n this.treeModel.setFocus(false);\r\n }\r\n }\r\n\r\n ngOnChanges(changes) {\r\n if (changes.options || changes.nodes) {\r\n this.treeModel.setData({\r\n options: changes.options && changes.options.currentValue,\r\n nodes: changes.nodes && changes.nodes.currentValue,\r\n events: this.pick(this, this.treeModel.eventNames)\r\n });\r\n }\r\n }\r\n\r\n sizeChanged() {\r\n this.viewportComponent.setViewport();\r\n }\r\n\r\n private pick(object, keys) {\r\n return keys.reduce((obj, key) => {\r\n if (object && object.hasOwnProperty(key)) {\r\n obj[key] = object[key];\r\n }\r\n return obj;\r\n }, {});\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport {\r\n IActionHandler,\r\n IActionMapping,\r\n TREE_ACTIONS\r\n} from './models/tree-options.model';\r\nimport {\r\n IAllowDragFn,\r\n IAllowDropFn,\r\n ITreeOptions,\r\n ITreeState\r\n} from './defs/api';\r\nimport { KEYS } from './constants/keys';\r\nimport { TreeModel } from './models/tree.model';\r\nimport { TreeNode } from './models/tree-node.model';\r\nimport { TreeDraggedElement } from './models/tree-dragged-element.model';\r\nimport { TreeVirtualScroll } from './models/tree-virtual-scroll.model';\r\nimport { LoadingComponent } from './components/loading.component';\r\nimport { TreeComponent } from './components/tree.component';\r\nimport { TreeNodeComponent } from './components/tree-node-collection.component';\r\nimport { TreeNodeContent } from './components/tree-node-content.component';\r\nimport { TreeNodeDropSlot } from './components/tree-node-drop-slot.component';\r\nimport { TreeNodeExpanderComponent } from './components/tree-node-expander.component';\r\nimport { TreeNodeChildrenComponent } from './components/tree-node-collection.component';\r\nimport { TreeNodeCollectionComponent } from './components/tree-node-collection.component';\r\nimport { TreeNodeWrapperComponent } from './components/tree-node-wrapper.component';\r\nimport { TreeViewportComponent } from './components/tree-viewport.component';\r\nimport { TreeNodeCheckboxComponent } from './components/tree-node-checkbox.component';\r\nimport { TreeDropDirective } from './directives/tree-drop.directive';\r\nimport { TreeDragDirective } from './directives/tree-drag.directive';\r\nimport { TreeAnimateOpenDirective } from './directives/tree-animate-open.directive';\r\n\r\n@NgModule({\r\n declarations: [\r\n \r\n ],\r\n exports: [\r\n TreeComponent,\r\n TreeNodeComponent,\r\n TreeNodeContent,\r\n LoadingComponent,\r\n TreeDropDirective,\r\n TreeDragDirective,\r\n TreeNodeExpanderComponent,\r\n TreeNodeChildrenComponent,\r\n TreeNodeDropSlot,\r\n TreeNodeCollectionComponent,\r\n TreeViewportComponent,\r\n TreeNodeWrapperComponent,\r\n TreeNodeCheckboxComponent,\r\n TreeAnimateOpenDirective\r\n ],\r\n imports: [CommonModule,TreeComponent,\r\n TreeNodeComponent,\r\n TreeNodeContent,\r\n LoadingComponent,\r\n TreeDropDirective,\r\n TreeDragDirective,\r\n TreeNodeExpanderComponent,\r\n TreeNodeChildrenComponent,\r\n TreeNodeDropSlot,\r\n TreeNodeCollectionComponent,\r\n TreeViewportComponent,\r\n TreeNodeWrapperComponent,\r\n TreeNodeCheckboxComponent,\r\n TreeAnimateOpenDirective],\r\n providers: []\r\n})\r\nexport class TreeModule {}\r\n\r\nexport {\r\n TreeModel,\r\n TreeNode,\r\n TreeDraggedElement,\r\n TreeVirtualScroll,\r\n ITreeOptions,\r\n TREE_ACTIONS,\r\n KEYS,\r\n IActionMapping,\r\n IActionHandler,\r\n IAllowDropFn,\r\n IAllowDragFn,\r\n LoadingComponent,\r\n TreeAnimateOpenDirective,\r\n TreeComponent,\r\n TreeNodeComponent,\r\n TreeNodeWrapperComponent,\r\n TreeNodeContent,\r\n TreeDropDirective,\r\n TreeDragDirective,\r\n TreeNodeExpanderComponent,\r\n TreeNodeChildrenComponent,\r\n TreeNodeDropSlot,\r\n TreeNodeCollectionComponent,\r\n TreeViewportComponent,\r\n TreeNodeCheckboxComponent,\r\n ITreeState\r\n};\r\n","/*\r\n * Public API Surface of angular-tree-component\r\n */\r\n\r\nexport * from './lib/angular-tree-component.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}