{"version":3,"file":"index.mjs","sources":["../../src/tree/BaseTree.vue","../../src/tree/TreeDragDropService.js","../../src/tree/TreeNode.vue","../../src/tree/TreeNode.vue?vue&type=template&id=242bb720&lang.js","../../src/tree/Tree.vue","../../src/tree/Tree.vue?vue&type=template&id=72976d88&lang.js"],"sourcesContent":["<script>\nimport BaseComponent from '@primevue/core/basecomponent';\nimport TreeStyle from 'primevue/tree/style';\n\nexport default {\n    name: 'BaseTree',\n    extends: BaseComponent,\n    props: {\n        value: {\n            type: null,\n            default: null\n        },\n        expandedKeys: {\n            type: null,\n            default: null\n        },\n        selectionKeys: {\n            type: null,\n            default: null\n        },\n        selectionMode: {\n            type: String,\n            default: null\n        },\n        metaKeySelection: {\n            type: Boolean,\n            default: false\n        },\n        loading: {\n            type: Boolean,\n            default: false\n        },\n        loadingIcon: {\n            type: String,\n            default: undefined\n        },\n        loadingMode: {\n            type: String,\n            default: 'mask'\n        },\n        filter: {\n            type: Boolean,\n            default: false\n        },\n        filterBy: {\n            type: [String, Function],\n            default: 'label'\n        },\n        filterMode: {\n            type: String,\n            default: 'lenient'\n        },\n        filterPlaceholder: {\n            type: String,\n            default: null\n        },\n        filterLocale: {\n            type: String,\n            default: undefined\n        },\n        highlightOnSelect: {\n            type: Boolean,\n            default: false\n        },\n        scrollHeight: {\n            type: String,\n            default: null\n        },\n        level: {\n            type: Number,\n            default: 0\n        },\n        draggableNodes: {\n            type: Boolean,\n            default: null\n        },\n        droppableNodes: {\n            type: Boolean,\n            default: null\n        },\n        draggableScope: {\n            type: [String, Array],\n            default: null\n        },\n        droppableScope: {\n            type: [String, Array],\n            default: null\n        },\n        validateDrop: {\n            type: Boolean,\n            default: false\n        },\n        ariaLabelledby: {\n            type: String,\n            default: null\n        },\n        ariaLabel: {\n            type: String,\n            default: null\n        }\n    },\n    style: TreeStyle,\n    provide() {\n        return {\n            $pcTree: this,\n            $parentInstance: this\n        };\n    }\n};\n</script>\n","import { reactive } from 'vue';\n\nconst dragState = reactive({\n    isDragging: false,\n    dragNode: null,\n    dragScope: null\n});\n\nconst dragStartHandlers = new Set();\nconst dragStopHandlers = new Set();\n\nexport function useTreeDragDropService() {\n    const startDrag = (event) => {\n        dragState.isDragging = true;\n        dragState.dragNode = event.node;\n        dragState.dragScope = event.scope;\n\n        dragStartHandlers.forEach((handler) => handler(event));\n    };\n\n    const stopDrag = (event) => {\n        dragState.isDragging = false;\n        dragState.dragNode = null;\n        dragState.dragScope = null;\n\n        dragStopHandlers.forEach((handler) => handler(event));\n    };\n\n    const onDragStart = (handler) => {\n        dragStartHandlers.add(handler);\n\n        return () => dragStartHandlers.delete(handler);\n    };\n\n    const onDragStop = (handler) => {\n        dragStopHandlers.add(handler);\n\n        return () => dragStopHandlers.delete(handler);\n    };\n\n    return {\n        dragState,\n        startDrag,\n        stopDrag,\n        onDragStart,\n        onDragStop\n    };\n}\n","<template>\n    <li\n        ref=\"currentNode\"\n        :class=\"cx('node')\"\n        role=\"treeitem\"\n        :aria-label=\"label(node)\"\n        :aria-selected=\"ariaSelected\"\n        :aria-expanded=\"expanded\"\n        :aria-setsize=\"node.children ? node.children.length : 0\"\n        :aria-posinset=\"index + 1\"\n        :aria-level=\"level\"\n        :aria-checked=\"ariaChecked\"\n        :tabindex=\"index === 0 ? 0 : -1\"\n        @keydown=\"onKeyDown\"\n        v-bind=\"getPTOptions('node')\"\n    >\n        <div v-if=\"isPrevDropPointActive\" :class=\"cx('dropPoint')\" aria-hidden=\"true\" />\n        <div\n            :class=\"cx('nodeContent')\"\n            :style=\"node.style\"\n            :draggable=\"isDraggable\"\n            @click=\"onClick\"\n            @touchend=\"onTouchEnd\"\n            @dragstart=\"onNodeDragStart\"\n            @dragover=\"onNodeDragOver\"\n            @dragenter=\"onNodeDragEnter\"\n            @dragleave=\"onNodeDragLeave\"\n            @dragend=\"onNodeDragEnd\"\n            @drop=\"onNodeDrop\"\n            v-bind=\"getPTOptions('nodeContent')\"\n            :data-p-selected=\"checkboxMode ? checked : selected\"\n            :data-p-selectable=\"selectable\"\n        >\n            <button v-ripple type=\"button\" :class=\"cx('nodeToggleButton')\" @click=\"toggle\" tabindex=\"-1\" :data-p-leaf=\"leaf\" v-bind=\"getPTOptions('nodeToggleButton')\">\n                <template v-if=\"node.loading && loadingMode === 'icon'\">\n                    <!-- TODO: nodetogglericon deprecated since v4.0-->\n                    <component v-if=\"templates['nodetoggleicon'] || templates['nodetogglericon']\" :is=\"templates['nodetoggleicon'] || templates['nodetogglericon']\" :node=\"node\" :expanded=\"expanded\" :class=\"cx('nodeToggleIcon')\" />\n                    <SpinnerIcon v-else spin :class=\"cx('nodeToggleIcon')\" v-bind=\"getPTOptions('nodeToggleIcon')\" />\n                </template>\n                <template v-else>\n                    <!-- TODO: togglericon deprecated since v4.0-->\n                    <component v-if=\"templates['nodetoggleicon'] || templates['togglericon']\" :is=\"templates['nodetoggleicon'] || templates['togglericon']\" :node=\"node\" :expanded=\"expanded\" :class=\"cx('nodeToggleIcon')\" />\n                    <component v-else-if=\"expanded\" :is=\"node.expandedIcon ? 'span' : 'ChevronDownIcon'\" :class=\"cx('nodeToggleIcon')\" v-bind=\"getPTOptions('nodeToggleIcon')\" />\n                    <component v-else :is=\"node.collapsedIcon ? 'span' : 'ChevronRightIcon'\" :class=\"cx('nodeToggleIcon')\" v-bind=\"getPTOptions('nodeToggleIcon')\" />\n                </template>\n            </button>\n            <Checkbox\n                v-if=\"checkboxMode\"\n                :defaultValue=\"checked\"\n                :binary=\"true\"\n                :indeterminate=\"partialChecked\"\n                :class=\"cx('nodeCheckbox')\"\n                :tabindex=\"-1\"\n                :unstyled=\"unstyled\"\n                :pt=\"getPTOptions('pcNodeCheckbox')\"\n                :data-p-partialchecked=\"partialChecked\"\n            >\n                <template #icon=\"slotProps\">\n                    <component v-if=\"templates['checkboxicon']\" :is=\"templates['checkboxicon']\" :checked=\"slotProps.checked\" :partialChecked=\"partialChecked\" :class=\"slotProps.class\" />\n                </template>\n            </Checkbox>\n            <component v-if=\"templates['nodeicon']\" :is=\"templates['nodeicon']\" :node=\"node\" :class=\"[cx('nodeIcon')]\" v-bind=\"getPTOptions('nodeIcon')\"></component>\n            <span v-else :class=\"[cx('nodeIcon'), node.icon]\" v-bind=\"getPTOptions('nodeIcon')\"></span>\n            <span :class=\"cx('nodeLabel')\" v-bind=\"getPTOptions('nodeLabel')\" @keydown.stop>\n                <component v-if=\"templates[node.type] || templates['default']\" :is=\"templates[node.type] || templates['default']\" :node=\"node\" :expanded=\"expanded\" :selected=\"checkboxMode ? checked : selected\" />\n                <template v-else>{{ label(node) }}</template>\n            </span>\n        </div>\n        <div v-if=\"isNextDropPointActive\" :class=\"cx('dropPoint')\" aria-hidden=\"true\" />\n        <ul v-if=\"hasChildren && expanded\" :class=\"cx('nodeChildren')\" role=\"group\" v-bind=\"ptm('nodeChildren')\">\n            <TreeNode\n                v-for=\"(childNode, index) of node.children\"\n                :key=\"childNode.key\"\n                :node=\"childNode\"\n                :parentNode=\"node\"\n                :rootNodes=\"rootNodes\"\n                :templates=\"templates\"\n                :level=\"level + 1\"\n                :index=\"index\"\n                :loadingMode=\"loadingMode\"\n                :expandedKeys=\"expandedKeys\"\n                @node-toggle=\"onChildNodeToggle\"\n                @node-click=\"onChildNodeClick\"\n                :selectionMode=\"selectionMode\"\n                :selectionKeys=\"selectionKeys\"\n                @checkbox-change=\"propagateUp\"\n                :draggableScope=\"draggableScope\"\n                :draggableNodes=\"draggableNodes\"\n                :droppableNodes=\"droppableNodes\"\n                :validateDrop=\"validateDrop\"\n                @node-drop=\"$emit('node-drop', $event)\"\n                @node-dragenter=\"$emit('node-dragenter', $event)\"\n                @node-dragleave=\"$emit('node-dragleave', $event)\"\n                @value-change=\"$emit('value-change', $event)\"\n                :unstyled=\"unstyled\"\n                :pt=\"pt\"\n            />\n        </ul>\n    </li>\n</template>\n\n<script>\nimport { find, findSingle, getAttribute, getOuterHeight, getOuterWidth } from '@primeuix/utils';\nimport BaseComponent from '@primevue/core/basecomponent';\nimport CheckIcon from '@primevue/icons/check';\nimport ChevronDownIcon from '@primevue/icons/chevrondown';\nimport ChevronRightIcon from '@primevue/icons/chevronright';\nimport MinusIcon from '@primevue/icons/minus';\nimport SpinnerIcon from '@primevue/icons/spinner';\nimport Checkbox from 'primevue/checkbox';\nimport Ripple from 'primevue/ripple';\n\nexport default {\n    name: 'TreeNode',\n    hostName: 'Tree',\n    extends: BaseComponent,\n    emits: ['node-toggle', 'node-click', 'checkbox-change', 'node-drop', 'value-change', 'node-dragenter', 'node-dragleave'],\n    props: {\n        node: {\n            type: null,\n            default: null\n        },\n        parentNode: {\n            type: null,\n            default: null\n        },\n        rootNodes: {\n            type: Object,\n            default: null\n        },\n        expandedKeys: {\n            type: null,\n            default: null\n        },\n        loadingMode: {\n            type: String,\n            default: 'mask'\n        },\n        selectionKeys: {\n            type: null,\n            default: null\n        },\n        selectionMode: {\n            type: String,\n            default: null\n        },\n        templates: {\n            type: null,\n            default: null\n        },\n        level: {\n            type: Number,\n            default: null\n        },\n        draggableScope: {\n            type: [String, Array],\n            default: null\n        },\n        draggableNodes: {\n            type: Boolean,\n            default: null\n        },\n        droppableNodes: {\n            type: Boolean,\n            default: null\n        },\n        validateDrop: {\n            type: Boolean,\n            default: false\n        },\n        index: null\n    },\n    nodeTouched: false,\n    toggleClicked: false,\n    inject: {\n        $pcTree: {\n            default: undefined\n        }\n    },\n    data() {\n        return {\n            isPrevDropPointHovered: false,\n            isNextDropPointHovered: false,\n            isNodeDropHovered: false\n        };\n    },\n    mounted() {\n        this.setAllNodesTabIndexes();\n    },\n    methods: {\n        toggle() {\n            this.$emit('node-toggle', this.node);\n            this.toggleClicked = true;\n        },\n        label(node) {\n            return typeof node.label === 'function' ? node.label() : node.label;\n        },\n        onChildNodeToggle(node) {\n            this.$emit('node-toggle', node);\n        },\n        getPTOptions(key) {\n            return this.ptm(key, {\n                context: {\n                    node: this.node,\n                    index: this.index,\n                    expanded: this.expanded,\n                    selected: this.selected,\n                    checked: this.checked,\n                    partialChecked: this.partialChecked,\n                    leaf: this.leaf\n                }\n            });\n        },\n        onClick(event) {\n            if (this.toggleClicked || getAttribute(event.target, '[data-pc-section=\"nodetogglebutton\"]') || getAttribute(event.target.parentElement, '[data-pc-section=\"nodetogglebutton\"]')) {\n                this.toggleClicked = false;\n\n                return;\n            }\n\n            if (this.isCheckboxSelectionMode()) {\n                if (this.node.selectable != false) {\n                    this.toggleCheckbox();\n                }\n            } else {\n                this.$emit('node-click', {\n                    originalEvent: event,\n                    nodeTouched: this.nodeTouched,\n                    node: this.node\n                });\n            }\n\n            this.nodeTouched = false;\n        },\n        onChildNodeClick(event) {\n            this.$emit('node-click', event);\n        },\n        onTouchEnd() {\n            this.nodeTouched = true;\n        },\n        onKeyDown(event) {\n            if (!this.isSameNode(event)) return;\n\n            switch (event.code) {\n                case 'Tab':\n                    this.onTabKey(event);\n\n                    break;\n\n                case 'ArrowDown':\n                    this.onArrowDown(event);\n\n                    break;\n\n                case 'ArrowUp':\n                    this.onArrowUp(event);\n\n                    break;\n\n                case 'ArrowRight':\n                    this.onArrowRight(event);\n\n                    break;\n\n                case 'ArrowLeft':\n                    this.onArrowLeft(event);\n\n                    break;\n\n                case 'Enter':\n                case 'NumpadEnter':\n                case 'Space':\n                    this.onEnterKey(event);\n\n                    break;\n\n                default:\n                    break;\n            }\n        },\n        onArrowDown(event) {\n            const nodeElement = event.target.getAttribute('data-pc-section') === 'nodetogglebutton' ? event.target.closest('[role=\"treeitem\"]') : event.target;\n            const listElement = nodeElement.children[1];\n\n            if (listElement) {\n                this.focusRowChange(nodeElement, listElement.children[0]);\n            } else {\n                if (nodeElement.nextElementSibling) {\n                    this.focusRowChange(nodeElement, nodeElement.nextElementSibling);\n                } else {\n                    let nextSiblingAncestor = this.findNextSiblingOfAncestor(nodeElement);\n\n                    if (nextSiblingAncestor) {\n                        this.focusRowChange(nodeElement, nextSiblingAncestor);\n                    }\n                }\n            }\n\n            event.preventDefault();\n        },\n        onArrowUp(event) {\n            const nodeElement = event.target;\n\n            if (nodeElement.previousElementSibling) {\n                this.focusRowChange(nodeElement, nodeElement.previousElementSibling, this.findLastVisibleDescendant(nodeElement.previousElementSibling));\n            } else {\n                let parentNodeElement = this.getParentNodeElement(nodeElement);\n\n                if (parentNodeElement) {\n                    this.focusRowChange(nodeElement, parentNodeElement);\n                }\n            }\n\n            event.preventDefault();\n        },\n        onArrowRight(event) {\n            if (this.leaf || this.expanded) return;\n\n            event.currentTarget.tabIndex = -1;\n\n            this.$emit('node-toggle', this.node);\n            this.$nextTick(() => {\n                this.onArrowDown(event);\n            });\n        },\n        onArrowLeft(event) {\n            const togglerElement = findSingle(event.currentTarget, '[data-pc-section=\"nodetogglebutton\"]');\n\n            if (this.level === 0 && !this.expanded) {\n                return false;\n            }\n\n            if (this.expanded && !this.leaf) {\n                togglerElement.click();\n\n                return false;\n            }\n\n            const target = this.findBeforeClickableNode(event.currentTarget);\n\n            if (target) {\n                this.focusRowChange(event.currentTarget, target);\n            }\n        },\n        onEnterKey(event) {\n            this.setTabIndexForSelectionMode(event, this.nodeTouched);\n            this.onClick(event);\n\n            event.preventDefault();\n        },\n        onTabKey() {\n            this.setAllNodesTabIndexes();\n        },\n        removeNodeFromTree(nodes, nodeToRemove) {\n            return nodes.reduce((acc, node) => {\n                if (node.key === nodeToRemove.key) {\n                    return acc;\n                }\n                if (node.children && node.children.length > 0) {\n                    const updatedChildren = this.removeNodeFromTree(node.children, nodeToRemove);\n                    acc.push({ ...node, children: updatedChildren });\n                } else {\n                    acc.push(node);\n                }\n\n                return acc;\n            }, []);\n        },\n        insertNodeInSiblings(nodes, targetKey, nodeToInsert, offset) {\n            const targetIndex = nodes.findIndex((n) => n.key === targetKey);\n\n            if (targetIndex !== -1) {\n                return nodes.toSpliced(targetIndex + offset, 0, nodeToInsert);\n            }\n\n            return nodes.map((node) => {\n                if (node.children && node.children.length > 0) {\n                    return { ...node, children: this.insertNodeInSiblings(node.children, targetKey, nodeToInsert, offset) };\n                }\n\n                return node;\n            });\n        },\n        addNodeAsChild(nodes, parentKey, nodeToInsert) {\n            return nodes.map((node) => {\n                if (node.key === parentKey) {\n                    return { ...node, children: [...(node.children || []), nodeToInsert] };\n                }\n\n                if (node.children && node.children.length > 0) {\n                    return { ...node, children: this.addNodeAsChild(node.children, parentKey, nodeToInsert) };\n                }\n\n                return node;\n            });\n        },\n        insertNodeOnDrop() {\n            const { dragNode, dragNodeIndex, dragNodeSubNodes, dragDropService } = this.$pcTree;\n\n            if (!this.node || dragNodeIndex == null || !dragNode || !dragNodeSubNodes) {\n                return null;\n            }\n\n            const position = this.dropPosition;\n            let updatedNodes = this.removeNodeFromTree(this.rootNodes, dragNode);\n\n            if (position < 0) {\n                // insert before a Node\n                updatedNodes = this.insertNodeInSiblings(updatedNodes, this.node.key, dragNode, 0);\n            } else if (position > 0) {\n                // insert after a Node\n                updatedNodes = this.insertNodeInSiblings(updatedNodes, this.node.key, dragNode, 1);\n            } else {\n                // insert as child of a Node\n                updatedNodes = this.addNodeAsChild(updatedNodes, this.node.key, dragNode);\n            }\n\n            this.$emit('value-change', { nodes: updatedNodes });\n\n            dragDropService.stopDrag({\n                node: dragNode,\n                subNodes: updatedNodes,\n                index: dragNodeIndex\n            });\n\n            return updatedNodes;\n        },\n        onNodeDrop(event) {\n            if (this.isDroppable) {\n                event.preventDefault();\n                event.stopPropagation();\n\n                const { dragNode } = this.$pcTree;\n                const position = this.dropPosition;\n                const isValidDrop = position !== 0 || (position === 0 && this.isNodeDroppable);\n\n                if (isValidDrop) {\n                    if (this.validateDrop) {\n                        this.$emit('node-drop', {\n                            originalEvent: event,\n                            value: this.rootNodes,\n                            dragNode: dragNode,\n                            dropNode: this.node,\n                            dropPosition: position,\n                            index: this.index,\n                            accept: () => {\n                                const updatedNodes = this.insertNodeOnDrop();\n\n                                this.$emit('node-drop', {\n                                    originalEvent: event,\n                                    value: updatedNodes,\n                                    dragNode: dragNode,\n                                    dropNode: this.node,\n                                    dropPosition: position,\n                                    index: this.index\n                                });\n                            }\n                        });\n                    } else {\n                        const updatedNodes = this.insertNodeOnDrop();\n\n                        this.$emit('node-drop', {\n                            originalEvent: event,\n                            value: updatedNodes,\n                            dragNode: dragNode,\n                            dropNode: this.node,\n                            dropPosition: position,\n                            index: this.index\n                        });\n                    }\n                }\n\n                this.isPrevDropPointHovered = false;\n                this.isNextDropPointHovered = false;\n                this.isNodeDropHovered = false;\n            }\n        },\n        onNodeDragStart(event) {\n            if (this.isNodeDraggable) {\n                event.dataTransfer.effectAllowed = 'all';\n                event.dataTransfer.setData('text', 'data');\n\n                const target = event.currentTarget;\n                const dragEl = target.cloneNode(true);\n                const toggler = dragEl.querySelector('[data-pc-section=\"nodetogglebutton\"]');\n                const checkbox = dragEl.querySelector('[data-pc-name=\"pcnodecheckbox\"]');\n\n                target.setAttribute('data-p-dragging', 'true');\n                dragEl.style.width = getOuterWidth(target) + 'px';\n                dragEl.style.height = getOuterHeight(target) + 'px';\n                dragEl.setAttribute('data-pc-section', 'drag-image');\n                toggler.style.visibility = 'hidden';\n                checkbox?.remove();\n                document.body.appendChild(dragEl);\n                event.dataTransfer.setDragImage(dragEl, 0, 0);\n\n                setTimeout(() => document.body.removeChild(dragEl), 0);\n\n                this.$pcTree.dragDropService.startDrag({\n                    node: this.node,\n                    subNodes: this.subNodes,\n                    index: this.index,\n                    scope: this.draggableScope\n                });\n            } else {\n                event.preventDefault();\n            }\n        },\n        onNodeDragOver(event) {\n            if (this.isDroppable) {\n                event.dataTransfer.dropEffect = 'copy';\n                const nodeElement = event.currentTarget;\n                const rect = nodeElement.getBoundingClientRect();\n                const y = event.clientY - rect.top;\n\n                this.isPrevDropPointHovered = false;\n                this.isNextDropPointHovered = false;\n                this.isNodeDropHovered = false;\n\n                if (y < rect.height * 0.25) {\n                    this.isPrevDropPointHovered = true;\n                } else if (y > rect.height * 0.75) {\n                    this.isNextDropPointHovered = true;\n                } else if (this.isNodeDroppable) {\n                    this.isNodeDropHovered = true;\n                }\n            } else {\n                event.dataTransfer.dropEffect = 'none';\n            }\n\n            if (this.droppableNodes) {\n                event.preventDefault();\n                event.stopPropagation();\n            }\n        },\n        onNodeDragEnter() {\n            this.$emit('node-dragenter', {\n                node: this.node\n            });\n        },\n        onNodeDragLeave() {\n            this.$emit('node-dragleave', {\n                node: this.node\n            });\n\n            this.isPrevDropPointHovered = false;\n            this.isNextDropPointHovered = false;\n            this.isNodeDropHovered = false;\n        },\n        onNodeDragEnd(event) {\n            event.currentTarget?.removeAttribute('data-p-dragging');\n\n            this.$pcTree.dragDropService.stopDrag({\n                node: this.node,\n                subNodes: this.subNodes,\n                index: this.index\n            });\n        },\n        setAllNodesTabIndexes() {\n            const nodes = find(this.$refs.currentNode.closest('[data-pc-section=\"rootchildren\"]'), '[role=\"treeitem\"]');\n\n            const hasSelectedNode = [...nodes].some((node) => node.getAttribute('aria-selected') === 'true' || node.getAttribute('aria-checked') === 'true');\n\n            [...nodes].forEach((node) => {\n                node.tabIndex = -1;\n            });\n\n            if (hasSelectedNode) {\n                const selectedNodes = [...nodes].filter((node) => node.getAttribute('aria-selected') === 'true' || node.getAttribute('aria-checked') === 'true');\n\n                selectedNodes[0].tabIndex = 0;\n\n                return;\n            }\n\n            [...nodes][0].tabIndex = 0;\n        },\n        setTabIndexForSelectionMode(event, nodeTouched) {\n            if (this.selectionMode !== null) {\n                const elements = [...find(this.$refs.currentNode.parentElement, '[role=\"treeitem\"]')];\n\n                event.currentTarget.tabIndex = nodeTouched === false ? -1 : 0;\n\n                if (elements.every((element) => element.tabIndex === -1)) {\n                    elements[0].tabIndex = 0;\n                }\n            }\n        },\n        focusRowChange(firstFocusableRow, currentFocusedRow, lastVisibleDescendant) {\n            firstFocusableRow.tabIndex = '-1';\n            currentFocusedRow.tabIndex = '0';\n\n            this.focusNode(lastVisibleDescendant || currentFocusedRow);\n        },\n        findBeforeClickableNode(node) {\n            const parentListElement = node.closest('ul').closest('li');\n\n            if (parentListElement) {\n                const prevNodeButton = findSingle(parentListElement, 'button');\n\n                if (prevNodeButton && prevNodeButton.style.visibility !== 'hidden') {\n                    return parentListElement;\n                }\n\n                return this.findBeforeClickableNode(node.previousElementSibling);\n            }\n\n            return null;\n        },\n        toggleCheckbox() {\n            let _selectionKeys = this.selectionKeys ? { ...this.selectionKeys } : {};\n            const _check = !this.checked;\n\n            this.propagateDown(this.node, _check, _selectionKeys);\n\n            this.$emit('checkbox-change', {\n                node: this.node,\n                check: _check,\n                selectionKeys: _selectionKeys\n            });\n        },\n        propagateDown(node, check, selectionKeys) {\n            if (check && node.selectable != false) selectionKeys[node.key] = { checked: true, partialChecked: false };\n            else delete selectionKeys[node.key];\n\n            if (node.children && node.children.length) {\n                for (let child of node.children) {\n                    this.propagateDown(child, check, selectionKeys);\n                }\n            }\n        },\n        propagateUp(event) {\n            let check = event.check;\n            let _selectionKeys = { ...event.selectionKeys };\n            let checkedChildCount = 0;\n            let childPartialSelected = false;\n\n            for (let child of this.node.children) {\n                if (_selectionKeys[child.key] && _selectionKeys[child.key].checked) checkedChildCount++;\n                else if (_selectionKeys[child.key] && _selectionKeys[child.key].partialChecked) childPartialSelected = true;\n            }\n\n            if (check && checkedChildCount === this.node.children.length) {\n                _selectionKeys[this.node.key] = { checked: true, partialChecked: false };\n            } else {\n                if (!check) {\n                    delete _selectionKeys[this.node.key];\n                }\n\n                if (childPartialSelected || (checkedChildCount > 0 && checkedChildCount !== this.node.children.length)) _selectionKeys[this.node.key] = { checked: false, partialChecked: true };\n                else delete _selectionKeys[this.node.key];\n            }\n\n            this.$emit('checkbox-change', {\n                node: event.node,\n                check: event.check,\n                selectionKeys: _selectionKeys\n            });\n        },\n        onChildCheckboxChange(event) {\n            this.$emit('checkbox-change', event);\n        },\n        findNextSiblingOfAncestor(nodeElement) {\n            let parentNodeElement = this.getParentNodeElement(nodeElement);\n\n            if (parentNodeElement) {\n                if (parentNodeElement.nextElementSibling) return parentNodeElement.nextElementSibling;\n                else return this.findNextSiblingOfAncestor(parentNodeElement);\n            } else {\n                return null;\n            }\n        },\n        findLastVisibleDescendant(nodeElement) {\n            const childrenListElement = nodeElement.children[1];\n\n            if (childrenListElement) {\n                const lastChildElement = childrenListElement.children[childrenListElement.children.length - 1];\n\n                return this.findLastVisibleDescendant(lastChildElement);\n            } else {\n                return nodeElement;\n            }\n        },\n        getParentNodeElement(nodeElement) {\n            const parentNodeElement = nodeElement.parentElement.parentElement;\n\n            return getAttribute(parentNodeElement, 'role') === 'treeitem' ? parentNodeElement : null;\n        },\n        focusNode(element) {\n            element.focus();\n        },\n        isCheckboxSelectionMode() {\n            return this.selectionMode === 'checkbox';\n        },\n        isSameNode(event) {\n            return event.currentTarget && (event.currentTarget.isSameNode(event.target) || event.currentTarget.isSameNode(event.target.closest('[role=\"treeitem\"]')));\n        }\n    },\n    computed: {\n        hasChildren() {\n            return this.node.children && this.node.children.length > 0;\n        },\n        expanded() {\n            return this.expandedKeys && this.expandedKeys[this.node.key] === true;\n        },\n        leaf() {\n            return this.node.leaf === false ? false : !(this.node.children && this.node.children.length);\n        },\n        selectable() {\n            return this.node.selectable === false ? false : this.selectionMode != null;\n        },\n        selected() {\n            return this.selectionMode && this.selectionKeys ? this.selectionKeys[this.node.key] === true : false;\n        },\n        checkboxMode() {\n            return this.selectionMode === 'checkbox' && this.node.selectable !== false;\n        },\n        checked() {\n            return this.selectionKeys ? this.selectionKeys[this.node.key] && this.selectionKeys[this.node.key].checked : false;\n        },\n        partialChecked() {\n            return this.selectionKeys ? this.selectionKeys[this.node.key] && this.selectionKeys[this.node.key].partialChecked : false;\n        },\n        ariaChecked() {\n            return this.selectionMode === 'single' || this.selectionMode === 'multiple' ? this.selected : undefined;\n        },\n        ariaSelected() {\n            return this.checkboxMode ? this.checked : undefined;\n        },\n        isPrevDropPointActive() {\n            return this.isPrevDropPointHovered && this.isDroppable;\n        },\n        isNextDropPointActive() {\n            return this.isNextDropPointHovered && this.isDroppable;\n        },\n        dropPosition() {\n            return this.isPrevDropPointActive ? -1 : this.isNextDropPointActive ? 1 : 0;\n        },\n        subNodes() {\n            return this.parentNode ? this.parentNode.children : this.rootNodes;\n        },\n        isDraggable() {\n            return this.draggableNodes;\n        },\n        isDroppable() {\n            return this.droppableNodes && this.$pcTree.allowNodeDrop(this.node);\n        },\n        isNodeDraggable() {\n            return this.node?.draggable !== false && this.isDraggable;\n        },\n        isNodeDroppable() {\n            return this.node?.droppable !== false && this.isDroppable;\n        },\n        isNodeDropActive() {\n            return this.isNodeDropHovered && this.isNodeDroppable;\n        }\n    },\n    components: {\n        Checkbox,\n        ChevronDownIcon,\n        ChevronRightIcon,\n        CheckIcon,\n        MinusIcon,\n        SpinnerIcon\n    },\n    directives: {\n        ripple: Ripple\n    }\n};\n</script>\n","<template>\n    <li\n        ref=\"currentNode\"\n        :class=\"cx('node')\"\n        role=\"treeitem\"\n        :aria-label=\"label(node)\"\n        :aria-selected=\"ariaSelected\"\n        :aria-expanded=\"expanded\"\n        :aria-setsize=\"node.children ? node.children.length : 0\"\n        :aria-posinset=\"index + 1\"\n        :aria-level=\"level\"\n        :aria-checked=\"ariaChecked\"\n        :tabindex=\"index === 0 ? 0 : -1\"\n        @keydown=\"onKeyDown\"\n        v-bind=\"getPTOptions('node')\"\n    >\n        <div v-if=\"isPrevDropPointActive\" :class=\"cx('dropPoint')\" aria-hidden=\"true\" />\n        <div\n            :class=\"cx('nodeContent')\"\n            :style=\"node.style\"\n            :draggable=\"isDraggable\"\n            @click=\"onClick\"\n            @touchend=\"onTouchEnd\"\n            @dragstart=\"onNodeDragStart\"\n            @dragover=\"onNodeDragOver\"\n            @dragenter=\"onNodeDragEnter\"\n            @dragleave=\"onNodeDragLeave\"\n            @dragend=\"onNodeDragEnd\"\n            @drop=\"onNodeDrop\"\n            v-bind=\"getPTOptions('nodeContent')\"\n            :data-p-selected=\"checkboxMode ? checked : selected\"\n            :data-p-selectable=\"selectable\"\n        >\n            <button v-ripple type=\"button\" :class=\"cx('nodeToggleButton')\" @click=\"toggle\" tabindex=\"-1\" :data-p-leaf=\"leaf\" v-bind=\"getPTOptions('nodeToggleButton')\">\n                <template v-if=\"node.loading && loadingMode === 'icon'\">\n                    <!-- TODO: nodetogglericon deprecated since v4.0-->\n                    <component v-if=\"templates['nodetoggleicon'] || templates['nodetogglericon']\" :is=\"templates['nodetoggleicon'] || templates['nodetogglericon']\" :node=\"node\" :expanded=\"expanded\" :class=\"cx('nodeToggleIcon')\" />\n                    <SpinnerIcon v-else spin :class=\"cx('nodeToggleIcon')\" v-bind=\"getPTOptions('nodeToggleIcon')\" />\n                </template>\n                <template v-else>\n                    <!-- TODO: togglericon deprecated since v4.0-->\n                    <component v-if=\"templates['nodetoggleicon'] || templates['togglericon']\" :is=\"templates['nodetoggleicon'] || templates['togglericon']\" :node=\"node\" :expanded=\"expanded\" :class=\"cx('nodeToggleIcon')\" />\n                    <component v-else-if=\"expanded\" :is=\"node.expandedIcon ? 'span' : 'ChevronDownIcon'\" :class=\"cx('nodeToggleIcon')\" v-bind=\"getPTOptions('nodeToggleIcon')\" />\n                    <component v-else :is=\"node.collapsedIcon ? 'span' : 'ChevronRightIcon'\" :class=\"cx('nodeToggleIcon')\" v-bind=\"getPTOptions('nodeToggleIcon')\" />\n                </template>\n            </button>\n            <Checkbox\n                v-if=\"checkboxMode\"\n                :defaultValue=\"checked\"\n                :binary=\"true\"\n                :indeterminate=\"partialChecked\"\n                :class=\"cx('nodeCheckbox')\"\n                :tabindex=\"-1\"\n                :unstyled=\"unstyled\"\n                :pt=\"getPTOptions('pcNodeCheckbox')\"\n                :data-p-partialchecked=\"partialChecked\"\n            >\n                <template #icon=\"slotProps\">\n                    <component v-if=\"templates['checkboxicon']\" :is=\"templates['checkboxicon']\" :checked=\"slotProps.checked\" :partialChecked=\"partialChecked\" :class=\"slotProps.class\" />\n                </template>\n            </Checkbox>\n            <component v-if=\"templates['nodeicon']\" :is=\"templates['nodeicon']\" :node=\"node\" :class=\"[cx('nodeIcon')]\" v-bind=\"getPTOptions('nodeIcon')\"></component>\n            <span v-else :class=\"[cx('nodeIcon'), node.icon]\" v-bind=\"getPTOptions('nodeIcon')\"></span>\n            <span :class=\"cx('nodeLabel')\" v-bind=\"getPTOptions('nodeLabel')\" @keydown.stop>\n                <component v-if=\"templates[node.type] || templates['default']\" :is=\"templates[node.type] || templates['default']\" :node=\"node\" :expanded=\"expanded\" :selected=\"checkboxMode ? checked : selected\" />\n                <template v-else>{{ label(node) }}</template>\n            </span>\n        </div>\n        <div v-if=\"isNextDropPointActive\" :class=\"cx('dropPoint')\" aria-hidden=\"true\" />\n        <ul v-if=\"hasChildren && expanded\" :class=\"cx('nodeChildren')\" role=\"group\" v-bind=\"ptm('nodeChildren')\">\n            <TreeNode\n                v-for=\"(childNode, index) of node.children\"\n                :key=\"childNode.key\"\n                :node=\"childNode\"\n                :parentNode=\"node\"\n                :rootNodes=\"rootNodes\"\n                :templates=\"templates\"\n                :level=\"level + 1\"\n                :index=\"index\"\n                :loadingMode=\"loadingMode\"\n                :expandedKeys=\"expandedKeys\"\n                @node-toggle=\"onChildNodeToggle\"\n                @node-click=\"onChildNodeClick\"\n                :selectionMode=\"selectionMode\"\n                :selectionKeys=\"selectionKeys\"\n                @checkbox-change=\"propagateUp\"\n                :draggableScope=\"draggableScope\"\n                :draggableNodes=\"draggableNodes\"\n                :droppableNodes=\"droppableNodes\"\n                :validateDrop=\"validateDrop\"\n                @node-drop=\"$emit('node-drop', $event)\"\n                @node-dragenter=\"$emit('node-dragenter', $event)\"\n                @node-dragleave=\"$emit('node-dragleave', $event)\"\n                @value-change=\"$emit('value-change', $event)\"\n                :unstyled=\"unstyled\"\n                :pt=\"pt\"\n            />\n        </ul>\n    </li>\n</template>\n\n<script>\nimport { find, findSingle, getAttribute, getOuterHeight, getOuterWidth } from '@primeuix/utils';\nimport BaseComponent from '@primevue/core/basecomponent';\nimport CheckIcon from '@primevue/icons/check';\nimport ChevronDownIcon from '@primevue/icons/chevrondown';\nimport ChevronRightIcon from '@primevue/icons/chevronright';\nimport MinusIcon from '@primevue/icons/minus';\nimport SpinnerIcon from '@primevue/icons/spinner';\nimport Checkbox from 'primevue/checkbox';\nimport Ripple from 'primevue/ripple';\n\nexport default {\n    name: 'TreeNode',\n    hostName: 'Tree',\n    extends: BaseComponent,\n    emits: ['node-toggle', 'node-click', 'checkbox-change', 'node-drop', 'value-change', 'node-dragenter', 'node-dragleave'],\n    props: {\n        node: {\n            type: null,\n            default: null\n        },\n        parentNode: {\n            type: null,\n            default: null\n        },\n        rootNodes: {\n            type: Object,\n            default: null\n        },\n        expandedKeys: {\n            type: null,\n            default: null\n        },\n        loadingMode: {\n            type: String,\n            default: 'mask'\n        },\n        selectionKeys: {\n            type: null,\n            default: null\n        },\n        selectionMode: {\n            type: String,\n            default: null\n        },\n        templates: {\n            type: null,\n            default: null\n        },\n        level: {\n            type: Number,\n            default: null\n        },\n        draggableScope: {\n            type: [String, Array],\n            default: null\n        },\n        draggableNodes: {\n            type: Boolean,\n            default: null\n        },\n        droppableNodes: {\n            type: Boolean,\n            default: null\n        },\n        validateDrop: {\n            type: Boolean,\n            default: false\n        },\n        index: null\n    },\n    nodeTouched: false,\n    toggleClicked: false,\n    inject: {\n        $pcTree: {\n            default: undefined\n        }\n    },\n    data() {\n        return {\n            isPrevDropPointHovered: false,\n            isNextDropPointHovered: false,\n            isNodeDropHovered: false\n        };\n    },\n    mounted() {\n        this.setAllNodesTabIndexes();\n    },\n    methods: {\n        toggle() {\n            this.$emit('node-toggle', this.node);\n            this.toggleClicked = true;\n        },\n        label(node) {\n            return typeof node.label === 'function' ? node.label() : node.label;\n        },\n        onChildNodeToggle(node) {\n            this.$emit('node-toggle', node);\n        },\n        getPTOptions(key) {\n            return this.ptm(key, {\n                context: {\n                    node: this.node,\n                    index: this.index,\n                    expanded: this.expanded,\n                    selected: this.selected,\n                    checked: this.checked,\n                    partialChecked: this.partialChecked,\n                    leaf: this.leaf\n                }\n            });\n        },\n        onClick(event) {\n            if (this.toggleClicked || getAttribute(event.target, '[data-pc-section=\"nodetogglebutton\"]') || getAttribute(event.target.parentElement, '[data-pc-section=\"nodetogglebutton\"]')) {\n                this.toggleClicked = false;\n\n                return;\n            }\n\n            if (this.isCheckboxSelectionMode()) {\n                if (this.node.selectable != false) {\n                    this.toggleCheckbox();\n                }\n            } else {\n                this.$emit('node-click', {\n                    originalEvent: event,\n                    nodeTouched: this.nodeTouched,\n                    node: this.node\n                });\n            }\n\n            this.nodeTouched = false;\n        },\n        onChildNodeClick(event) {\n            this.$emit('node-click', event);\n        },\n        onTouchEnd() {\n            this.nodeTouched = true;\n        },\n        onKeyDown(event) {\n            if (!this.isSameNode(event)) return;\n\n            switch (event.code) {\n                case 'Tab':\n                    this.onTabKey(event);\n\n                    break;\n\n                case 'ArrowDown':\n                    this.onArrowDown(event);\n\n                    break;\n\n                case 'ArrowUp':\n                    this.onArrowUp(event);\n\n                    break;\n\n                case 'ArrowRight':\n                    this.onArrowRight(event);\n\n                    break;\n\n                case 'ArrowLeft':\n                    this.onArrowLeft(event);\n\n                    break;\n\n                case 'Enter':\n                case 'NumpadEnter':\n                case 'Space':\n                    this.onEnterKey(event);\n\n                    break;\n\n                default:\n                    break;\n            }\n        },\n        onArrowDown(event) {\n            const nodeElement = event.target.getAttribute('data-pc-section') === 'nodetogglebutton' ? event.target.closest('[role=\"treeitem\"]') : event.target;\n            const listElement = nodeElement.children[1];\n\n            if (listElement) {\n                this.focusRowChange(nodeElement, listElement.children[0]);\n            } else {\n                if (nodeElement.nextElementSibling) {\n                    this.focusRowChange(nodeElement, nodeElement.nextElementSibling);\n                } else {\n                    let nextSiblingAncestor = this.findNextSiblingOfAncestor(nodeElement);\n\n                    if (nextSiblingAncestor) {\n                        this.focusRowChange(nodeElement, nextSiblingAncestor);\n                    }\n                }\n            }\n\n            event.preventDefault();\n        },\n        onArrowUp(event) {\n            const nodeElement = event.target;\n\n            if (nodeElement.previousElementSibling) {\n                this.focusRowChange(nodeElement, nodeElement.previousElementSibling, this.findLastVisibleDescendant(nodeElement.previousElementSibling));\n            } else {\n                let parentNodeElement = this.getParentNodeElement(nodeElement);\n\n                if (parentNodeElement) {\n                    this.focusRowChange(nodeElement, parentNodeElement);\n                }\n            }\n\n            event.preventDefault();\n        },\n        onArrowRight(event) {\n            if (this.leaf || this.expanded) return;\n\n            event.currentTarget.tabIndex = -1;\n\n            this.$emit('node-toggle', this.node);\n            this.$nextTick(() => {\n                this.onArrowDown(event);\n            });\n        },\n        onArrowLeft(event) {\n            const togglerElement = findSingle(event.currentTarget, '[data-pc-section=\"nodetogglebutton\"]');\n\n            if (this.level === 0 && !this.expanded) {\n                return false;\n            }\n\n            if (this.expanded && !this.leaf) {\n                togglerElement.click();\n\n                return false;\n            }\n\n            const target = this.findBeforeClickableNode(event.currentTarget);\n\n            if (target) {\n                this.focusRowChange(event.currentTarget, target);\n            }\n        },\n        onEnterKey(event) {\n            this.setTabIndexForSelectionMode(event, this.nodeTouched);\n            this.onClick(event);\n\n            event.preventDefault();\n        },\n        onTabKey() {\n            this.setAllNodesTabIndexes();\n        },\n        removeNodeFromTree(nodes, nodeToRemove) {\n            return nodes.reduce((acc, node) => {\n                if (node.key === nodeToRemove.key) {\n                    return acc;\n                }\n                if (node.children && node.children.length > 0) {\n                    const updatedChildren = this.removeNodeFromTree(node.children, nodeToRemove);\n                    acc.push({ ...node, children: updatedChildren });\n                } else {\n                    acc.push(node);\n                }\n\n                return acc;\n            }, []);\n        },\n        insertNodeInSiblings(nodes, targetKey, nodeToInsert, offset) {\n            const targetIndex = nodes.findIndex((n) => n.key === targetKey);\n\n            if (targetIndex !== -1) {\n                return nodes.toSpliced(targetIndex + offset, 0, nodeToInsert);\n            }\n\n            return nodes.map((node) => {\n                if (node.children && node.children.length > 0) {\n                    return { ...node, children: this.insertNodeInSiblings(node.children, targetKey, nodeToInsert, offset) };\n                }\n\n                return node;\n            });\n        },\n        addNodeAsChild(nodes, parentKey, nodeToInsert) {\n            return nodes.map((node) => {\n                if (node.key === parentKey) {\n                    return { ...node, children: [...(node.children || []), nodeToInsert] };\n                }\n\n                if (node.children && node.children.length > 0) {\n                    return { ...node, children: this.addNodeAsChild(node.children, parentKey, nodeToInsert) };\n                }\n\n                return node;\n            });\n        },\n        insertNodeOnDrop() {\n            const { dragNode, dragNodeIndex, dragNodeSubNodes, dragDropService } = this.$pcTree;\n\n            if (!this.node || dragNodeIndex == null || !dragNode || !dragNodeSubNodes) {\n                return null;\n            }\n\n            const position = this.dropPosition;\n            let updatedNodes = this.removeNodeFromTree(this.rootNodes, dragNode);\n\n            if (position < 0) {\n                // insert before a Node\n                updatedNodes = this.insertNodeInSiblings(updatedNodes, this.node.key, dragNode, 0);\n            } else if (position > 0) {\n                // insert after a Node\n                updatedNodes = this.insertNodeInSiblings(updatedNodes, this.node.key, dragNode, 1);\n            } else {\n                // insert as child of a Node\n                updatedNodes = this.addNodeAsChild(updatedNodes, this.node.key, dragNode);\n            }\n\n            this.$emit('value-change', { nodes: updatedNodes });\n\n            dragDropService.stopDrag({\n                node: dragNode,\n                subNodes: updatedNodes,\n                index: dragNodeIndex\n            });\n\n            return updatedNodes;\n        },\n        onNodeDrop(event) {\n            if (this.isDroppable) {\n                event.preventDefault();\n                event.stopPropagation();\n\n                const { dragNode } = this.$pcTree;\n                const position = this.dropPosition;\n                const isValidDrop = position !== 0 || (position === 0 && this.isNodeDroppable);\n\n                if (isValidDrop) {\n                    if (this.validateDrop) {\n                        this.$emit('node-drop', {\n                            originalEvent: event,\n                            value: this.rootNodes,\n                            dragNode: dragNode,\n                            dropNode: this.node,\n                            dropPosition: position,\n                            index: this.index,\n                            accept: () => {\n                                const updatedNodes = this.insertNodeOnDrop();\n\n                                this.$emit('node-drop', {\n                                    originalEvent: event,\n                                    value: updatedNodes,\n                                    dragNode: dragNode,\n                                    dropNode: this.node,\n                                    dropPosition: position,\n                                    index: this.index\n                                });\n                            }\n                        });\n                    } else {\n                        const updatedNodes = this.insertNodeOnDrop();\n\n                        this.$emit('node-drop', {\n                            originalEvent: event,\n                            value: updatedNodes,\n                            dragNode: dragNode,\n                            dropNode: this.node,\n                            dropPosition: position,\n                            index: this.index\n                        });\n                    }\n                }\n\n                this.isPrevDropPointHovered = false;\n                this.isNextDropPointHovered = false;\n                this.isNodeDropHovered = false;\n            }\n        },\n        onNodeDragStart(event) {\n            if (this.isNodeDraggable) {\n                event.dataTransfer.effectAllowed = 'all';\n                event.dataTransfer.setData('text', 'data');\n\n                const target = event.currentTarget;\n                const dragEl = target.cloneNode(true);\n                const toggler = dragEl.querySelector('[data-pc-section=\"nodetogglebutton\"]');\n                const checkbox = dragEl.querySelector('[data-pc-name=\"pcnodecheckbox\"]');\n\n                target.setAttribute('data-p-dragging', 'true');\n                dragEl.style.width = getOuterWidth(target) + 'px';\n                dragEl.style.height = getOuterHeight(target) + 'px';\n                dragEl.setAttribute('data-pc-section', 'drag-image');\n                toggler.style.visibility = 'hidden';\n                checkbox?.remove();\n                document.body.appendChild(dragEl);\n                event.dataTransfer.setDragImage(dragEl, 0, 0);\n\n                setTimeout(() => document.body.removeChild(dragEl), 0);\n\n                this.$pcTree.dragDropService.startDrag({\n                    node: this.node,\n                    subNodes: this.subNodes,\n                    index: this.index,\n                    scope: this.draggableScope\n                });\n            } else {\n                event.preventDefault();\n            }\n        },\n        onNodeDragOver(event) {\n            if (this.isDroppable) {\n                event.dataTransfer.dropEffect = 'copy';\n                const nodeElement = event.currentTarget;\n                const rect = nodeElement.getBoundingClientRect();\n                const y = event.clientY - rect.top;\n\n                this.isPrevDropPointHovered = false;\n                this.isNextDropPointHovered = false;\n                this.isNodeDropHovered = false;\n\n                if (y < rect.height * 0.25) {\n                    this.isPrevDropPointHovered = true;\n                } else if (y > rect.height * 0.75) {\n                    this.isNextDropPointHovered = true;\n                } else if (this.isNodeDroppable) {\n                    this.isNodeDropHovered = true;\n                }\n            } else {\n                event.dataTransfer.dropEffect = 'none';\n            }\n\n            if (this.droppableNodes) {\n                event.preventDefault();\n                event.stopPropagation();\n            }\n        },\n        onNodeDragEnter() {\n            this.$emit('node-dragenter', {\n                node: this.node\n            });\n        },\n        onNodeDragLeave() {\n            this.$emit('node-dragleave', {\n                node: this.node\n            });\n\n            this.isPrevDropPointHovered = false;\n            this.isNextDropPointHovered = false;\n            this.isNodeDropHovered = false;\n        },\n        onNodeDragEnd(event) {\n            event.currentTarget?.removeAttribute('data-p-dragging');\n\n            this.$pcTree.dragDropService.stopDrag({\n                node: this.node,\n                subNodes: this.subNodes,\n                index: this.index\n            });\n        },\n        setAllNodesTabIndexes() {\n            const nodes = find(this.$refs.currentNode.closest('[data-pc-section=\"rootchildren\"]'), '[role=\"treeitem\"]');\n\n            const hasSelectedNode = [...nodes].some((node) => node.getAttribute('aria-selected') === 'true' || node.getAttribute('aria-checked') === 'true');\n\n            [...nodes].forEach((node) => {\n                node.tabIndex = -1;\n            });\n\n            if (hasSelectedNode) {\n                const selectedNodes = [...nodes].filter((node) => node.getAttribute('aria-selected') === 'true' || node.getAttribute('aria-checked') === 'true');\n\n                selectedNodes[0].tabIndex = 0;\n\n                return;\n            }\n\n            [...nodes][0].tabIndex = 0;\n        },\n        setTabIndexForSelectionMode(event, nodeTouched) {\n            if (this.selectionMode !== null) {\n                const elements = [...find(this.$refs.currentNode.parentElement, '[role=\"treeitem\"]')];\n\n                event.currentTarget.tabIndex = nodeTouched === false ? -1 : 0;\n\n                if (elements.every((element) => element.tabIndex === -1)) {\n                    elements[0].tabIndex = 0;\n                }\n            }\n        },\n        focusRowChange(firstFocusableRow, currentFocusedRow, lastVisibleDescendant) {\n            firstFocusableRow.tabIndex = '-1';\n            currentFocusedRow.tabIndex = '0';\n\n            this.focusNode(lastVisibleDescendant || currentFocusedRow);\n        },\n        findBeforeClickableNode(node) {\n            const parentListElement = node.closest('ul').closest('li');\n\n            if (parentListElement) {\n                const prevNodeButton = findSingle(parentListElement, 'button');\n\n                if (prevNodeButton && prevNodeButton.style.visibility !== 'hidden') {\n                    return parentListElement;\n                }\n\n                return this.findBeforeClickableNode(node.previousElementSibling);\n            }\n\n            return null;\n        },\n        toggleCheckbox() {\n            let _selectionKeys = this.selectionKeys ? { ...this.selectionKeys } : {};\n            const _check = !this.checked;\n\n            this.propagateDown(this.node, _check, _selectionKeys);\n\n            this.$emit('checkbox-change', {\n                node: this.node,\n                check: _check,\n                selectionKeys: _selectionKeys\n            });\n        },\n        propagateDown(node, check, selectionKeys) {\n            if (check && node.selectable != false) selectionKeys[node.key] = { checked: true, partialChecked: false };\n            else delete selectionKeys[node.key];\n\n            if (node.children && node.children.length) {\n                for (let child of node.children) {\n                    this.propagateDown(child, check, selectionKeys);\n                }\n            }\n        },\n        propagateUp(event) {\n            let check = event.check;\n            let _selectionKeys = { ...event.selectionKeys };\n            let checkedChildCount = 0;\n            let childPartialSelected = false;\n\n            for (let child of this.node.children) {\n                if (_selectionKeys[child.key] && _selectionKeys[child.key].checked) checkedChildCount++;\n                else if (_selectionKeys[child.key] && _selectionKeys[child.key].partialChecked) childPartialSelected = true;\n            }\n\n            if (check && checkedChildCount === this.node.children.length) {\n                _selectionKeys[this.node.key] = { checked: true, partialChecked: false };\n            } else {\n                if (!check) {\n                    delete _selectionKeys[this.node.key];\n                }\n\n                if (childPartialSelected || (checkedChildCount > 0 && checkedChildCount !== this.node.children.length)) _selectionKeys[this.node.key] = { checked: false, partialChecked: true };\n                else delete _selectionKeys[this.node.key];\n            }\n\n            this.$emit('checkbox-change', {\n                node: event.node,\n                check: event.check,\n                selectionKeys: _selectionKeys\n            });\n        },\n        onChildCheckboxChange(event) {\n            this.$emit('checkbox-change', event);\n        },\n        findNextSiblingOfAncestor(nodeElement) {\n            let parentNodeElement = this.getParentNodeElement(nodeElement);\n\n            if (parentNodeElement) {\n                if (parentNodeElement.nextElementSibling) return parentNodeElement.nextElementSibling;\n                else return this.findNextSiblingOfAncestor(parentNodeElement);\n            } else {\n                return null;\n            }\n        },\n        findLastVisibleDescendant(nodeElement) {\n            const childrenListElement = nodeElement.children[1];\n\n            if (childrenListElement) {\n                const lastChildElement = childrenListElement.children[childrenListElement.children.length - 1];\n\n                return this.findLastVisibleDescendant(lastChildElement);\n            } else {\n                return nodeElement;\n            }\n        },\n        getParentNodeElement(nodeElement) {\n            const parentNodeElement = nodeElement.parentElement.parentElement;\n\n            return getAttribute(parentNodeElement, 'role') === 'treeitem' ? parentNodeElement : null;\n        },\n        focusNode(element) {\n            element.focus();\n        },\n        isCheckboxSelectionMode() {\n            return this.selectionMode === 'checkbox';\n        },\n        isSameNode(event) {\n            return event.currentTarget && (event.currentTarget.isSameNode(event.target) || event.currentTarget.isSameNode(event.target.closest('[role=\"treeitem\"]')));\n        }\n    },\n    computed: {\n        hasChildren() {\n            return this.node.children && this.node.children.length > 0;\n        },\n        expanded() {\n            return this.expandedKeys && this.expandedKeys[this.node.key] === true;\n        },\n        leaf() {\n            return this.node.leaf === false ? false : !(this.node.children && this.node.children.length);\n        },\n        selectable() {\n            return this.node.selectable === false ? false : this.selectionMode != null;\n        },\n        selected() {\n            return this.selectionMode && this.selectionKeys ? this.selectionKeys[this.node.key] === true : false;\n        },\n        checkboxMode() {\n            return this.selectionMode === 'checkbox' && this.node.selectable !== false;\n        },\n        checked() {\n            return this.selectionKeys ? this.selectionKeys[this.node.key] && this.selectionKeys[this.node.key].checked : false;\n        },\n        partialChecked() {\n            return this.selectionKeys ? this.selectionKeys[this.node.key] && this.selectionKeys[this.node.key].partialChecked : false;\n        },\n        ariaChecked() {\n            return this.selectionMode === 'single' || this.selectionMode === 'multiple' ? this.selected : undefined;\n        },\n        ariaSelected() {\n            return this.checkboxMode ? this.checked : undefined;\n        },\n        isPrevDropPointActive() {\n            return this.isPrevDropPointHovered && this.isDroppable;\n        },\n        isNextDropPointActive() {\n            return this.isNextDropPointHovered && this.isDroppable;\n        },\n        dropPosition() {\n            return this.isPrevDropPointActive ? -1 : this.isNextDropPointActive ? 1 : 0;\n        },\n        subNodes() {\n            return this.parentNode ? this.parentNode.children : this.rootNodes;\n        },\n        isDraggable() {\n            return this.draggableNodes;\n        },\n        isDroppable() {\n            return this.droppableNodes && this.$pcTree.allowNodeDrop(this.node);\n        },\n        isNodeDraggable() {\n            return this.node?.draggable !== false && this.isDraggable;\n        },\n        isNodeDroppable() {\n            return this.node?.droppable !== false && this.isDroppable;\n        },\n        isNodeDropActive() {\n            return this.isNodeDropHovered && this.isNodeDroppable;\n        }\n    },\n    components: {\n        Checkbox,\n        ChevronDownIcon,\n        ChevronRightIcon,\n        CheckIcon,\n        MinusIcon,\n        SpinnerIcon\n    },\n    directives: {\n        ripple: Ripple\n    }\n};\n</script>\n","<template>\n    <div :class=\"cx('root')\" @dragover=\"onDragOver\" @dragenter=\"onDragEnter\" @dragleave=\"onDragLeave\" @drop=\"onDrop\" :data-p=\"containerDataP\" v-bind=\"ptmi('root')\">\n        <transition name=\"p-overlay-mask\">\n            <div v-if=\"loading && loadingMode === 'mask'\" :class=\"cx('mask')\" v-bind=\"ptm('mask')\">\n                <slot name=\"loadingicon\" :class=\"cx('loadingIcon')\">\n                    <i v-if=\"loadingIcon\" :class=\"[cx('loadingIcon'), 'pi-spin', loadingIcon]\" v-bind=\"ptm('loadingIcon')\" />\n                    <SpinnerIcon v-else spin :class=\"cx('loadingIcon')\" v-bind=\"ptm('loadingIcon')\" />\n                </slot>\n            </div>\n        </transition>\n        <IconField v-if=\"filter\" :unstyled=\"unstyled\" :pt=\"{ ...ptm('pcFilter'), ...ptm('pcFilterContainer') }\" :class=\"cx('pcFilterContainer')\">\n            <InputText v-model=\"filterValue\" autocomplete=\"off\" :class=\"cx('pcFilterInput')\" :placeholder=\"filterPlaceholder\" :unstyled=\"unstyled\" @keyup=\"onFilterKeyup\" :pt=\"ptm('pcFilterInput')\" />\n            <InputIcon :unstyled=\"unstyled\" :pt=\"ptm('pcFilterIconContainer')\">\n                <!--TODO: searchicon deprecated since v4.0-->\n                <slot :name=\"$slots.filtericon ? 'filtericon' : 'searchicon'\" :class=\"cx('filterIcon')\">\n                    <SearchIcon :class=\"cx('filterIcon')\" v-bind=\"ptm('filterIcon')\" />\n                </slot>\n            </InputIcon>\n        </IconField>\n        <div :class=\"cx('wrapper')\" :style=\"{ maxHeight: scrollHeight }\" :data-p=\"wrapperDataP\" v-bind=\"ptm('wrapper')\">\n            <slot name=\"header\" :value=\"value\" :expandedKeys=\"expandedKeys\" :selectionKeys=\"selectionKeys\" />\n            <ul v-if=\"!empty\" :class=\"cx('rootChildren')\" role=\"tree\" :aria-labelledby=\"ariaLabelledby\" :aria-label=\"ariaLabel\" v-bind=\"ptm('rootChildren')\">\n                <TreeNode\n                    v-for=\"(node, index) of valueToRender\"\n                    :key=\"node.key\"\n                    :node=\"node\"\n                    :rootNodes=\"valueToRender\"\n                    :templates=\"$slots\"\n                    :level=\"level + 1\"\n                    :index=\"index\"\n                    :expandedKeys=\"d_expandedKeys\"\n                    @node-toggle=\"onNodeToggle\"\n                    @node-click=\"onNodeClick\"\n                    :selectionMode=\"selectionMode\"\n                    :selectionKeys=\"selectionKeys\"\n                    @checkbox-change=\"onCheckboxChange\"\n                    :loadingMode=\"loadingMode\"\n                    :draggableNodes=\"draggableNodes\"\n                    :droppableNodes=\"droppableNodes\"\n                    :draggableScope=\"draggableScope\"\n                    :validateDrop=\"validateDrop\"\n                    @node-drop=\"onNodeDrop\"\n                    @node-dragenter=\"onNodeDragEnter\"\n                    @node-dragleave=\"onNodeDragLeave\"\n                    @value-change=\"onValueChanged\"\n                    :unstyled=\"unstyled\"\n                    :pt=\"pt\"\n                ></TreeNode>\n            </ul>\n            <div v-else-if=\"empty && !$pcTreeSelect\" :class=\"cx('emptyMessage')\" v-bind=\"ptm('emptyMessage')\">\n                <slot name=\"empty\">\n                    {{ emptyMessageText }}\n                </slot>\n            </div>\n            <slot name=\"footer\" :value=\"value\" :expandedKeys=\"expandedKeys\" :selectionKeys=\"selectionKeys\" />\n        </div>\n    </div>\n</template>\n\n<script>\nimport { cn } from '@primeuix/utils';\nimport { isFunction, resolveFieldData } from '@primeuix/utils/object';\nimport SearchIcon from '@primevue/icons/search';\nimport SpinnerIcon from '@primevue/icons/spinner';\nimport IconField from 'primevue/iconfield';\nimport InputIcon from 'primevue/inputicon';\nimport InputText from 'primevue/inputtext';\nimport BaseTree from './BaseTree.vue';\nimport { useTreeDragDropService } from './TreeDragDropService';\nimport TreeNode from './TreeNode.vue';\n\nexport default {\n    name: 'Tree',\n    extends: BaseTree,\n    inheritAttrs: false,\n    emits: ['node-expand', 'node-collapse', 'update:expandedKeys', 'update:selectionKeys', 'node-select', 'node-unselect', 'filter', 'node-drop', 'node-dragenter', 'node-dragleave', 'update:value', 'drag-enter', 'drag-leave'],\n    data() {\n        return {\n            d_expandedKeys: this.expandedKeys || {},\n            filterValue: null,\n            dragNode: null,\n            dragNodeSubNodes: null,\n            dragNodeIndex: null,\n            dragNodeScope: null,\n            dragHover: null\n        };\n    },\n    inject: {\n        $pcTreeSelect: { default: null }\n    },\n    dragDropService: null,\n    dragStartCleanup: null,\n    dragStopCleanup: null,\n    watch: {\n        expandedKeys(newValue) {\n            this.d_expandedKeys = newValue;\n        },\n        droppableNodes(newValue) {\n            if (newValue) {\n                this.initDragDropService();\n            } else {\n                this.cleanupDragDropService();\n            }\n        }\n    },\n    mounted() {\n        if (this.droppableNodes) {\n            this.initDragDropService();\n        }\n    },\n    beforeUnmount() {\n        this.cleanupDragDropService();\n    },\n    methods: {\n        initDragDropService() {\n            if (this.dragDropService) return;\n\n            this.dragDropService = useTreeDragDropService();\n\n            this.dragStartCleanup = this.dragDropService.onDragStart((event) => {\n                this.dragNode = event.node;\n                this.dragNodeSubNodes = event.subNodes;\n                this.dragNodeIndex = event.index;\n                this.dragNodeScope = event.scope;\n            });\n\n            this.dragStopCleanup = this.dragDropService.onDragStop(() => {\n                this.dragNode = null;\n                this.dragNodeSubNodes = null;\n                this.dragNodeIndex = null;\n                this.dragNodeScope = null;\n                this.dragHover = false;\n            });\n        },\n        cleanupDragDropService() {\n            if (this.dragStartCleanup) {\n                this.dragStartCleanup();\n                this.dragStartCleanup = null;\n            }\n\n            if (this.dragStopCleanup) {\n                this.dragStopCleanup();\n                this.dragStopCleanup = null;\n            }\n\n            this.dragDropService = null;\n        },\n        onNodeToggle(node) {\n            const key = node.key;\n\n            if (this.d_expandedKeys[key]) {\n                delete this.d_expandedKeys[key];\n                this.$emit('node-collapse', node);\n            } else {\n                this.d_expandedKeys[key] = true;\n                this.$emit('node-expand', node);\n            }\n\n            this.d_expandedKeys = { ...this.d_expandedKeys };\n            this.$emit('update:expandedKeys', this.d_expandedKeys);\n        },\n        onNodeClick(event) {\n            if (this.selectionMode != null && event.node.selectable !== false) {\n                const metaSelection = event.nodeTouched ? false : this.metaKeySelection;\n                const _selectionKeys = metaSelection ? this.handleSelectionWithMetaKey(event) : this.handleSelectionWithoutMetaKey(event);\n\n                this.$emit('update:selectionKeys', _selectionKeys);\n            }\n        },\n        onCheckboxChange(event) {\n            this.$emit('update:selectionKeys', event.selectionKeys);\n\n            if (event.check) this.$emit('node-select', event.node);\n            else this.$emit('node-unselect', event.node);\n        },\n        handleSelectionWithMetaKey(event) {\n            const originalEvent = event.originalEvent;\n            const node = event.node;\n            const metaKey = originalEvent.metaKey || originalEvent.ctrlKey;\n            const selected = this.isNodeSelected(node);\n            let _selectionKeys;\n\n            if (selected && metaKey) {\n                if (this.isSingleSelectionMode()) {\n                    _selectionKeys = {};\n                } else {\n                    _selectionKeys = { ...this.selectionKeys };\n                    delete _selectionKeys[node.key];\n                }\n\n                this.$emit('node-unselect', node);\n            } else {\n                if (this.isSingleSelectionMode()) {\n                    _selectionKeys = {};\n                } else if (this.isMultipleSelectionMode()) {\n                    _selectionKeys = !metaKey ? {} : this.selectionKeys ? { ...this.selectionKeys } : {};\n                }\n\n                _selectionKeys[node.key] = true;\n                this.$emit('node-select', node);\n            }\n\n            return _selectionKeys;\n        },\n        handleSelectionWithoutMetaKey(event) {\n            const node = event.node;\n            const selected = this.isNodeSelected(node);\n            let _selectionKeys;\n\n            if (this.isSingleSelectionMode()) {\n                if (selected) {\n                    _selectionKeys = {};\n                    this.$emit('node-unselect', node);\n                } else {\n                    _selectionKeys = {};\n                    _selectionKeys[node.key] = true;\n                    this.$emit('node-select', node);\n                }\n            } else {\n                if (selected) {\n                    _selectionKeys = { ...this.selectionKeys };\n                    delete _selectionKeys[node.key];\n\n                    this.$emit('node-unselect', node);\n                } else {\n                    _selectionKeys = this.selectionKeys ? { ...this.selectionKeys } : {};\n                    _selectionKeys[node.key] = true;\n\n                    this.$emit('node-select', node);\n                }\n            }\n\n            return _selectionKeys;\n        },\n        isSingleSelectionMode() {\n            return this.selectionMode === 'single';\n        },\n        isMultipleSelectionMode() {\n            return this.selectionMode === 'multiple';\n        },\n        isNodeSelected(node) {\n            return this.selectionMode && this.selectionKeys ? this.selectionKeys[node.key] === true : false;\n        },\n        isChecked(node) {\n            return this.selectionKeys ? this.selectionKeys[node.key] && this.selectionKeys[node.key].checked : false;\n        },\n        isNodeLeaf(node) {\n            return node.leaf === false ? false : !(node.children && node.children.length);\n        },\n        onFilterKeyup(event) {\n            if (event.code === 'Enter' || event.code === 'NumpadEnter') {\n                event.preventDefault();\n            }\n\n            this.$emit('filter', { originalEvent: event, value: event.target.value, filteredNodes: this.valueToRender });\n        },\n        findFilteredNodes(node, paramsWithoutNode) {\n            if (node) {\n                let matched = false;\n\n                if (node.children) {\n                    let childNodes = [...node.children];\n\n                    node.children = [];\n\n                    for (let childNode of childNodes) {\n                        let copyChildNode = { ...childNode };\n\n                        if (this.isFilterMatched(copyChildNode, paramsWithoutNode)) {\n                            matched = true;\n                            node.children.push(copyChildNode);\n                        }\n                    }\n                }\n\n                if (matched) {\n                    return true;\n                }\n            }\n        },\n        isFilterMatched(node, { searchFields, filterText, strict }) {\n            let matched = false;\n\n            for (let field of searchFields) {\n                let fieldValue = String(resolveFieldData(node, field)).toLocaleLowerCase(this.filterLocale);\n\n                if (fieldValue.indexOf(filterText) > -1) {\n                    matched = true;\n                }\n            }\n\n            if (!matched || (strict && !this.isNodeLeaf(node))) {\n                matched = this.findFilteredNodes(node, { searchFields, filterText, strict }) || matched;\n            }\n\n            return matched;\n        },\n        onNodeDrop(event) {\n            this.$emit('node-drop', event);\n        },\n        onNodeDragEnter(event) {\n            this.$emit('node-dragenter', event);\n        },\n        onNodeDragLeave(event) {\n            this.$emit('node-dragleave', event);\n        },\n        onValueChanged(event) {\n            this.dragNodeSubNodes.splice(this.dragNodeIndex, 1);\n            this.$emit('update:value', event.nodes);\n        },\n        isDescendantOf(node, target) {\n            if (!node || !node.children) {\n                return false;\n            }\n\n            for (let child of node.children) {\n                if (child === target || this.isDescendantOf(child, target)) {\n                    return true;\n                }\n            }\n\n            return false;\n        },\n        allowDrop(dragNode, dropNode, dragNodeScope) {\n            if (!dragNode) {\n                return false;\n            }\n\n            if (!this.isValidDragScope(dragNodeScope)) {\n                return false;\n            }\n\n            if (dropNode && (dragNode === dropNode || this.isDescendantOf(dragNode, dropNode))) {\n                return false;\n            }\n\n            return true;\n        },\n        allowNodeDrop(dropNode) {\n            return this.allowDrop(this.dragNode, dropNode, this.dragNodeScope);\n        },\n        hasCommonScope(dragScope, dropScope) {\n            if (dragScope === null && dropScope === null) {\n                return true;\n            } else if (dragScope === null || dropScope === null) {\n                return false;\n            }\n\n            if (typeof dropScope === 'string') {\n                if (typeof dragScope === 'string') {\n                    return dragScope === dropScope;\n                } else if (Array.isArray(dragScope)) {\n                    return dragScope.indexOf(dropScope) !== -1;\n                }\n            } else if (Array.isArray(dropScope)) {\n                if (typeof dragScope === 'string') {\n                    return dropScope.indexOf(dragScope) !== -1;\n                } else if (Array.isArray(dragScope)) {\n                    for (let ds of dragScope) {\n                        if (dropScope.indexOf(ds) !== -1) {\n                            return true;\n                        }\n                    }\n                    return false;\n                }\n            }\n\n            return false;\n        },\n        isValidDragScope(dragScope) {\n            if (this.droppableScope === null) {\n                return true;\n            }\n\n            return this.hasCommonScope(dragScope, this.droppableScope);\n        },\n        isSameTreeScope(dragScope) {\n            return this.hasCommonScope(dragScope, this.draggableScope);\n        },\n        onDragOver(event) {\n            if (this.droppableNodes && this.allowDrop(this.dragNode, null, this.dragNodeScope)) {\n                event.dataTransfer.dropEffect = 'copy';\n            } else {\n                event.dataTransfer.dropEffect = 'none';\n            }\n\n            event.preventDefault();\n        },\n        onDragEnter(event) {\n            if (this.droppableNodes && this.allowDrop(this.dragNode, null, this.dragNodeScope)) {\n                this.dragHover = true;\n\n                this.$emit('drag-enter', {\n                    originalEvent: event,\n                    value: this.value,\n                    dragNode: this.dragNode,\n                    dragNodeScope: this.dragNodeScope\n                });\n            }\n        },\n        onDragLeave(event) {\n            if (this.droppableNodes) {\n                let rect = event.currentTarget.getBoundingClientRect();\n\n                if (event.x >= parseInt(rect.right) || event.x <= parseInt(rect.left) || event.y >= parseInt(rect.bottom) || event.y <= parseInt(rect.top)) {\n                    this.dragHover = false;\n                }\n\n                this.$emit('drag-leave', {\n                    originalEvent: event,\n                    value: this.value,\n                    dragNode: this.dragNode,\n                    dragNodeScope: this.dragNodeScope\n                });\n            }\n        },\n        processTreeDrop(dragNode, dragNodeIndex) {\n            this.dragNodeSubNodes.splice(dragNodeIndex, 1);\n            const newValue = [...(this.value || []), dragNode];\n            this.$emit('update:value', newValue);\n\n            this.dragDropService.stopDrag({\n                node: dragNode\n            });\n        },\n        onDrop(event) {\n            if (this.droppableNodes) {\n                event.preventDefault();\n                let dragNode = this.dragNode;\n\n                if (this.allowDrop(dragNode, null, this.dragNodeScope)) {\n                    let dragNodeIndex = this.dragNodeIndex;\n\n                    if (this.isSameTreeScope(this.dragNodeScope)) {\n                        this.dragDropService.stopDrag({\n                            node: dragNode\n                        });\n\n                        return;\n                    }\n\n                    if (this.validateDrop) {\n                        this.$emit('node-drop', {\n                            originalEvent: event,\n                            value: this.value,\n                            dragNode: dragNode,\n                            dropNode: null,\n                            index: dragNodeIndex,\n                            accept: () => {\n                                this.processTreeDrop(dragNode, dragNodeIndex);\n                            }\n                        });\n                    } else {\n                        this.$emit('node-drop', {\n                            originalEvent: event,\n                            value: this.value,\n                            dragNode: dragNode,\n                            dropNode: null,\n                            index: dragNodeIndex\n                        });\n\n                        this.processTreeDrop(dragNode, dragNodeIndex);\n                    }\n                }\n            }\n        }\n    },\n    computed: {\n        filteredValue() {\n            let filteredNodes = [];\n            const searchFields = isFunction(this.filterBy) ? [this.filterBy] : this.filterBy.split(',');\n            const filterText = this.filterValue.trim().toLocaleLowerCase(this.filterLocale);\n            const strict = this.filterMode === 'strict';\n\n            for (let node of this.value) {\n                let _node = { ...node };\n                let paramsWithoutNode = { searchFields, filterText, strict };\n\n                if (\n                    (strict && (this.findFilteredNodes(_node, paramsWithoutNode) || this.isFilterMatched(_node, paramsWithoutNode))) ||\n                    (!strict && (this.isFilterMatched(_node, paramsWithoutNode) || this.findFilteredNodes(_node, paramsWithoutNode)))\n                ) {\n                    filteredNodes.push(_node);\n                }\n            }\n\n            return filteredNodes;\n        },\n        valueToRender() {\n            if (this.filterValue && this.filterValue.trim().length > 0) return this.filteredValue;\n            else return this.value;\n        },\n        empty() {\n            return !this.valueToRender || this.valueToRender.length === 0;\n        },\n        emptyMessageText() {\n            return this.$primevue.config?.locale?.emptyMessage || '';\n        },\n        containerDataP() {\n            return cn({\n                loading: this.loading,\n                scrollable: this.scrollHeight === 'flex'\n            });\n        },\n        wrapperDataP() {\n            return cn({\n                scrollable: this.scrollHeight === 'flex'\n            });\n        }\n    },\n    components: {\n        TreeNode,\n        InputText,\n        InputIcon,\n        IconField,\n        SearchIcon,\n        SpinnerIcon\n    }\n};\n</script>\n","<template>\n    <div :class=\"cx('root')\" @dragover=\"onDragOver\" @dragenter=\"onDragEnter\" @dragleave=\"onDragLeave\" @drop=\"onDrop\" :data-p=\"containerDataP\" v-bind=\"ptmi('root')\">\n        <transition name=\"p-overlay-mask\">\n            <div v-if=\"loading && loadingMode === 'mask'\" :class=\"cx('mask')\" v-bind=\"ptm('mask')\">\n                <slot name=\"loadingicon\" :class=\"cx('loadingIcon')\">\n                    <i v-if=\"loadingIcon\" :class=\"[cx('loadingIcon'), 'pi-spin', loadingIcon]\" v-bind=\"ptm('loadingIcon')\" />\n                    <SpinnerIcon v-else spin :class=\"cx('loadingIcon')\" v-bind=\"ptm('loadingIcon')\" />\n                </slot>\n            </div>\n        </transition>\n        <IconField v-if=\"filter\" :unstyled=\"unstyled\" :pt=\"{ ...ptm('pcFilter'), ...ptm('pcFilterContainer') }\" :class=\"cx('pcFilterContainer')\">\n            <InputText v-model=\"filterValue\" autocomplete=\"off\" :class=\"cx('pcFilterInput')\" :placeholder=\"filterPlaceholder\" :unstyled=\"unstyled\" @keyup=\"onFilterKeyup\" :pt=\"ptm('pcFilterInput')\" />\n            <InputIcon :unstyled=\"unstyled\" :pt=\"ptm('pcFilterIconContainer')\">\n                <!--TODO: searchicon deprecated since v4.0-->\n                <slot :name=\"$slots.filtericon ? 'filtericon' : 'searchicon'\" :class=\"cx('filterIcon')\">\n                    <SearchIcon :class=\"cx('filterIcon')\" v-bind=\"ptm('filterIcon')\" />\n                </slot>\n            </InputIcon>\n        </IconField>\n        <div :class=\"cx('wrapper')\" :style=\"{ maxHeight: scrollHeight }\" :data-p=\"wrapperDataP\" v-bind=\"ptm('wrapper')\">\n            <slot name=\"header\" :value=\"value\" :expandedKeys=\"expandedKeys\" :selectionKeys=\"selectionKeys\" />\n            <ul v-if=\"!empty\" :class=\"cx('rootChildren')\" role=\"tree\" :aria-labelledby=\"ariaLabelledby\" :aria-label=\"ariaLabel\" v-bind=\"ptm('rootChildren')\">\n                <TreeNode\n                    v-for=\"(node, index) of valueToRender\"\n                    :key=\"node.key\"\n                    :node=\"node\"\n                    :rootNodes=\"valueToRender\"\n                    :templates=\"$slots\"\n                    :level=\"level + 1\"\n                    :index=\"index\"\n                    :expandedKeys=\"d_expandedKeys\"\n                    @node-toggle=\"onNodeToggle\"\n                    @node-click=\"onNodeClick\"\n                    :selectionMode=\"selectionMode\"\n                    :selectionKeys=\"selectionKeys\"\n                    @checkbox-change=\"onCheckboxChange\"\n                    :loadingMode=\"loadingMode\"\n                    :draggableNodes=\"draggableNodes\"\n                    :droppableNodes=\"droppableNodes\"\n                    :draggableScope=\"draggableScope\"\n                    :validateDrop=\"validateDrop\"\n                    @node-drop=\"onNodeDrop\"\n                    @node-dragenter=\"onNodeDragEnter\"\n                    @node-dragleave=\"onNodeDragLeave\"\n                    @value-change=\"onValueChanged\"\n                    :unstyled=\"unstyled\"\n                    :pt=\"pt\"\n                ></TreeNode>\n            </ul>\n            <div v-else-if=\"empty && !$pcTreeSelect\" :class=\"cx('emptyMessage')\" v-bind=\"ptm('emptyMessage')\">\n                <slot name=\"empty\">\n                    {{ emptyMessageText }}\n                </slot>\n            </div>\n            <slot name=\"footer\" :value=\"value\" :expandedKeys=\"expandedKeys\" :selectionKeys=\"selectionKeys\" />\n        </div>\n    </div>\n</template>\n\n<script>\nimport { cn } from '@primeuix/utils';\nimport { isFunction, resolveFieldData } from '@primeuix/utils/object';\nimport SearchIcon from '@primevue/icons/search';\nimport SpinnerIcon from '@primevue/icons/spinner';\nimport IconField from 'primevue/iconfield';\nimport InputIcon from 'primevue/inputicon';\nimport InputText from 'primevue/inputtext';\nimport BaseTree from './BaseTree.vue';\nimport { useTreeDragDropService } from './TreeDragDropService';\nimport TreeNode from './TreeNode.vue';\n\nexport default {\n    name: 'Tree',\n    extends: BaseTree,\n    inheritAttrs: false,\n    emits: ['node-expand', 'node-collapse', 'update:expandedKeys', 'update:selectionKeys', 'node-select', 'node-unselect', 'filter', 'node-drop', 'node-dragenter', 'node-dragleave', 'update:value', 'drag-enter', 'drag-leave'],\n    data() {\n        return {\n            d_expandedKeys: this.expandedKeys || {},\n            filterValue: null,\n            dragNode: null,\n            dragNodeSubNodes: null,\n            dragNodeIndex: null,\n            dragNodeScope: null,\n            dragHover: null\n        };\n    },\n    inject: {\n        $pcTreeSelect: { default: null }\n    },\n    dragDropService: null,\n    dragStartCleanup: null,\n    dragStopCleanup: null,\n    watch: {\n        expandedKeys(newValue) {\n            this.d_expandedKeys = newValue;\n        },\n        droppableNodes(newValue) {\n            if (newValue) {\n                this.initDragDropService();\n            } else {\n                this.cleanupDragDropService();\n            }\n        }\n    },\n    mounted() {\n        if (this.droppableNodes) {\n            this.initDragDropService();\n        }\n    },\n    beforeUnmount() {\n        this.cleanupDragDropService();\n    },\n    methods: {\n        initDragDropService() {\n            if (this.dragDropService) return;\n\n            this.dragDropService = useTreeDragDropService();\n\n            this.dragStartCleanup = this.dragDropService.onDragStart((event) => {\n                this.dragNode = event.node;\n                this.dragNodeSubNodes = event.subNodes;\n                this.dragNodeIndex = event.index;\n                this.dragNodeScope = event.scope;\n            });\n\n            this.dragStopCleanup = this.dragDropService.onDragStop(() => {\n                this.dragNode = null;\n                this.dragNodeSubNodes = null;\n                this.dragNodeIndex = null;\n                this.dragNodeScope = null;\n                this.dragHover = false;\n            });\n        },\n        cleanupDragDropService() {\n            if (this.dragStartCleanup) {\n                this.dragStartCleanup();\n                this.dragStartCleanup = null;\n            }\n\n            if (this.dragStopCleanup) {\n                this.dragStopCleanup();\n                this.dragStopCleanup = null;\n            }\n\n            this.dragDropService = null;\n        },\n        onNodeToggle(node) {\n            const key = node.key;\n\n            if (this.d_expandedKeys[key]) {\n                delete this.d_expandedKeys[key];\n                this.$emit('node-collapse', node);\n            } else {\n                this.d_expandedKeys[key] = true;\n                this.$emit('node-expand', node);\n            }\n\n            this.d_expandedKeys = { ...this.d_expandedKeys };\n            this.$emit('update:expandedKeys', this.d_expandedKeys);\n        },\n        onNodeClick(event) {\n            if (this.selectionMode != null && event.node.selectable !== false) {\n                const metaSelection = event.nodeTouched ? false : this.metaKeySelection;\n                const _selectionKeys = metaSelection ? this.handleSelectionWithMetaKey(event) : this.handleSelectionWithoutMetaKey(event);\n\n                this.$emit('update:selectionKeys', _selectionKeys);\n            }\n        },\n        onCheckboxChange(event) {\n            this.$emit('update:selectionKeys', event.selectionKeys);\n\n            if (event.check) this.$emit('node-select', event.node);\n            else this.$emit('node-unselect', event.node);\n        },\n        handleSelectionWithMetaKey(event) {\n            const originalEvent = event.originalEvent;\n            const node = event.node;\n            const metaKey = originalEvent.metaKey || originalEvent.ctrlKey;\n            const selected = this.isNodeSelected(node);\n            let _selectionKeys;\n\n            if (selected && metaKey) {\n                if (this.isSingleSelectionMode()) {\n                    _selectionKeys = {};\n                } else {\n                    _selectionKeys = { ...this.selectionKeys };\n                    delete _selectionKeys[node.key];\n                }\n\n                this.$emit('node-unselect', node);\n            } else {\n                if (this.isSingleSelectionMode()) {\n                    _selectionKeys = {};\n                } else if (this.isMultipleSelectionMode()) {\n                    _selectionKeys = !metaKey ? {} : this.selectionKeys ? { ...this.selectionKeys } : {};\n                }\n\n                _selectionKeys[node.key] = true;\n                this.$emit('node-select', node);\n            }\n\n            return _selectionKeys;\n        },\n        handleSelectionWithoutMetaKey(event) {\n            const node = event.node;\n            const selected = this.isNodeSelected(node);\n            let _selectionKeys;\n\n            if (this.isSingleSelectionMode()) {\n                if (selected) {\n                    _selectionKeys = {};\n                    this.$emit('node-unselect', node);\n                } else {\n                    _selectionKeys = {};\n                    _selectionKeys[node.key] = true;\n                    this.$emit('node-select', node);\n                }\n            } else {\n                if (selected) {\n                    _selectionKeys = { ...this.selectionKeys };\n                    delete _selectionKeys[node.key];\n\n                    this.$emit('node-unselect', node);\n                } else {\n                    _selectionKeys = this.selectionKeys ? { ...this.selectionKeys } : {};\n                    _selectionKeys[node.key] = true;\n\n                    this.$emit('node-select', node);\n                }\n            }\n\n            return _selectionKeys;\n        },\n        isSingleSelectionMode() {\n            return this.selectionMode === 'single';\n        },\n        isMultipleSelectionMode() {\n            return this.selectionMode === 'multiple';\n        },\n        isNodeSelected(node) {\n            return this.selectionMode && this.selectionKeys ? this.selectionKeys[node.key] === true : false;\n        },\n        isChecked(node) {\n            return this.selectionKeys ? this.selectionKeys[node.key] && this.selectionKeys[node.key].checked : false;\n        },\n        isNodeLeaf(node) {\n            return node.leaf === false ? false : !(node.children && node.children.length);\n        },\n        onFilterKeyup(event) {\n            if (event.code === 'Enter' || event.code === 'NumpadEnter') {\n                event.preventDefault();\n            }\n\n            this.$emit('filter', { originalEvent: event, value: event.target.value, filteredNodes: this.valueToRender });\n        },\n        findFilteredNodes(node, paramsWithoutNode) {\n            if (node) {\n                let matched = false;\n\n                if (node.children) {\n                    let childNodes = [...node.children];\n\n                    node.children = [];\n\n                    for (let childNode of childNodes) {\n                        let copyChildNode = { ...childNode };\n\n                        if (this.isFilterMatched(copyChildNode, paramsWithoutNode)) {\n                            matched = true;\n                            node.children.push(copyChildNode);\n                        }\n                    }\n                }\n\n                if (matched) {\n                    return true;\n                }\n            }\n        },\n        isFilterMatched(node, { searchFields, filterText, strict }) {\n            let matched = false;\n\n            for (let field of searchFields) {\n                let fieldValue = String(resolveFieldData(node, field)).toLocaleLowerCase(this.filterLocale);\n\n                if (fieldValue.indexOf(filterText) > -1) {\n                    matched = true;\n                }\n            }\n\n            if (!matched || (strict && !this.isNodeLeaf(node))) {\n                matched = this.findFilteredNodes(node, { searchFields, filterText, strict }) || matched;\n            }\n\n            return matched;\n        },\n        onNodeDrop(event) {\n            this.$emit('node-drop', event);\n        },\n        onNodeDragEnter(event) {\n            this.$emit('node-dragenter', event);\n        },\n        onNodeDragLeave(event) {\n            this.$emit('node-dragleave', event);\n        },\n        onValueChanged(event) {\n            this.dragNodeSubNodes.splice(this.dragNodeIndex, 1);\n            this.$emit('update:value', event.nodes);\n        },\n        isDescendantOf(node, target) {\n            if (!node || !node.children) {\n                return false;\n            }\n\n            for (let child of node.children) {\n                if (child === target || this.isDescendantOf(child, target)) {\n                    return true;\n                }\n            }\n\n            return false;\n        },\n        allowDrop(dragNode, dropNode, dragNodeScope) {\n            if (!dragNode) {\n                return false;\n            }\n\n            if (!this.isValidDragScope(dragNodeScope)) {\n                return false;\n            }\n\n            if (dropNode && (dragNode === dropNode || this.isDescendantOf(dragNode, dropNode))) {\n                return false;\n            }\n\n            return true;\n        },\n        allowNodeDrop(dropNode) {\n            return this.allowDrop(this.dragNode, dropNode, this.dragNodeScope);\n        },\n        hasCommonScope(dragScope, dropScope) {\n            if (dragScope === null && dropScope === null) {\n                return true;\n            } else if (dragScope === null || dropScope === null) {\n                return false;\n            }\n\n            if (typeof dropScope === 'string') {\n                if (typeof dragScope === 'string') {\n                    return dragScope === dropScope;\n                } else if (Array.isArray(dragScope)) {\n                    return dragScope.indexOf(dropScope) !== -1;\n                }\n            } else if (Array.isArray(dropScope)) {\n                if (typeof dragScope === 'string') {\n                    return dropScope.indexOf(dragScope) !== -1;\n                } else if (Array.isArray(dragScope)) {\n                    for (let ds of dragScope) {\n                        if (dropScope.indexOf(ds) !== -1) {\n                            return true;\n                        }\n                    }\n                    return false;\n                }\n            }\n\n            return false;\n        },\n        isValidDragScope(dragScope) {\n            if (this.droppableScope === null) {\n                return true;\n            }\n\n            return this.hasCommonScope(dragScope, this.droppableScope);\n        },\n        isSameTreeScope(dragScope) {\n            return this.hasCommonScope(dragScope, this.draggableScope);\n        },\n        onDragOver(event) {\n            if (this.droppableNodes && this.allowDrop(this.dragNode, null, this.dragNodeScope)) {\n                event.dataTransfer.dropEffect = 'copy';\n            } else {\n                event.dataTransfer.dropEffect = 'none';\n            }\n\n            event.preventDefault();\n        },\n        onDragEnter(event) {\n            if (this.droppableNodes && this.allowDrop(this.dragNode, null, this.dragNodeScope)) {\n                this.dragHover = true;\n\n                this.$emit('drag-enter', {\n                    originalEvent: event,\n                    value: this.value,\n                    dragNode: this.dragNode,\n                    dragNodeScope: this.dragNodeScope\n                });\n            }\n        },\n        onDragLeave(event) {\n            if (this.droppableNodes) {\n                let rect = event.currentTarget.getBoundingClientRect();\n\n                if (event.x >= parseInt(rect.right) || event.x <= parseInt(rect.left) || event.y >= parseInt(rect.bottom) || event.y <= parseInt(rect.top)) {\n                    this.dragHover = false;\n                }\n\n                this.$emit('drag-leave', {\n                    originalEvent: event,\n                    value: this.value,\n                    dragNode: this.dragNode,\n                    dragNodeScope: this.dragNodeScope\n                });\n            }\n        },\n        processTreeDrop(dragNode, dragNodeIndex) {\n            this.dragNodeSubNodes.splice(dragNodeIndex, 1);\n            const newValue = [...(this.value || []), dragNode];\n            this.$emit('update:value', newValue);\n\n            this.dragDropService.stopDrag({\n                node: dragNode\n            });\n        },\n        onDrop(event) {\n            if (this.droppableNodes) {\n                event.preventDefault();\n                let dragNode = this.dragNode;\n\n                if (this.allowDrop(dragNode, null, this.dragNodeScope)) {\n                    let dragNodeIndex = this.dragNodeIndex;\n\n                    if (this.isSameTreeScope(this.dragNodeScope)) {\n                        this.dragDropService.stopDrag({\n                            node: dragNode\n                        });\n\n                        return;\n                    }\n\n                    if (this.validateDrop) {\n                        this.$emit('node-drop', {\n                            originalEvent: event,\n                            value: this.value,\n                            dragNode: dragNode,\n                            dropNode: null,\n                            index: dragNodeIndex,\n                            accept: () => {\n                                this.processTreeDrop(dragNode, dragNodeIndex);\n                            }\n                        });\n                    } else {\n                        this.$emit('node-drop', {\n                            originalEvent: event,\n                            value: this.value,\n                            dragNode: dragNode,\n                            dropNode: null,\n                            index: dragNodeIndex\n                        });\n\n                        this.processTreeDrop(dragNode, dragNodeIndex);\n                    }\n                }\n            }\n        }\n    },\n    computed: {\n        filteredValue() {\n            let filteredNodes = [];\n            const searchFields = isFunction(this.filterBy) ? [this.filterBy] : this.filterBy.split(',');\n            const filterText = this.filterValue.trim().toLocaleLowerCase(this.filterLocale);\n            const strict = this.filterMode === 'strict';\n\n            for (let node of this.value) {\n                let _node = { ...node };\n                let paramsWithoutNode = { searchFields, filterText, strict };\n\n                if (\n                    (strict && (this.findFilteredNodes(_node, paramsWithoutNode) || this.isFilterMatched(_node, paramsWithoutNode))) ||\n                    (!strict && (this.isFilterMatched(_node, paramsWithoutNode) || this.findFilteredNodes(_node, paramsWithoutNode)))\n                ) {\n                    filteredNodes.push(_node);\n                }\n            }\n\n            return filteredNodes;\n        },\n        valueToRender() {\n            if (this.filterValue && this.filterValue.trim().length > 0) return this.filteredValue;\n            else return this.value;\n        },\n        empty() {\n            return !this.valueToRender || this.valueToRender.length === 0;\n        },\n        emptyMessageText() {\n            return this.$primevue.config?.locale?.emptyMessage || '';\n        },\n        containerDataP() {\n            return cn({\n                loading: this.loading,\n                scrollable: this.scrollHeight === 'flex'\n            });\n        },\n        wrapperDataP() {\n            return cn({\n                scrollable: this.scrollHeight === 'flex'\n            });\n        }\n    },\n    components: {\n        TreeNode,\n        InputText,\n        InputIcon,\n        IconField,\n        SearchIcon,\n        SpinnerIcon\n    }\n};\n</script>\n"],"names":["name","BaseComponent","props","value","type","expandedKeys","selectionKeys","selectionMode","String","metaKeySelection","Boolean","loading","loadingIcon","undefined","loadingMode","filter","filterBy","Function","filterMode","filterPlaceholder","filterLocale","highlightOnSelect","scrollHeight","level","Number","draggableNodes","droppableNodes","draggableScope","Array","droppableScope","validateDrop","ariaLabelledby","ariaLabel","style","TreeStyle","provide","$pcTree","$parentInstance","dragState","reactive","isDragging","dragNode","dragScope","dragStartHandlers","Set","dragStopHandlers","useTreeDragDropService","startDrag","event","node","scope","forEach","handler","stopDrag","onDragStart","add","onDragStop","hostName","emits","parentNode","rootNodes","Object","templates","index","nodeTouched","toggleClicked","inject","data","isPrevDropPointHovered","isNextDropPointHovered","isNodeDropHovered","mounted","setAllNodesTabIndexes","methods","toggle","$emit","label","onChildNodeToggle","getPTOptions","key","ptm","context","expanded","selected","checked","partialChecked","leaf","onClick","getAttribute","target","parentElement","isCheckboxSelectionMode","selectable","toggleCheckbox","originalEvent","onChildNodeClick","onTouchEnd","onKeyDown","isSameNode","code","onTabKey","onArrowDown","onArrowUp","onArrowRight","onArrowLeft","onEnterKey","nodeElement","closest","listElement","children","focusRowChange","nextElementSibling","nextSiblingAncestor","findNextSiblingOfAncestor","preventDefault","previousElementSibling","findLastVisibleDescendant","parentNodeElement","getParentNodeElement","_this","currentTarget","tabIndex","$nextTick","togglerElement","findSingle","click","findBeforeClickableNode","setTabIndexForSelectionMode","removeNodeFromTree","nodes","nodeToRemove","_this2","reduce","acc","length","updatedChildren","push","_objectSpread","insertNodeInSiblings","targetKey","nodeToInsert","offset","_this3","targetIndex","findIndex","n","toSpliced","map","addNodeAsChild","parentKey","_this4","concat","_toConsumableArray","insertNodeOnDrop","_this$$pcTree","dragNodeIndex","dragNodeSubNodes","dragDropService","position","dropPosition","updatedNodes","subNodes","onNodeDrop","_this5","isDroppable","stopPropagation","isValidDrop","isNodeDroppable","dropNode","accept","onNodeDragStart","isNodeDraggable","dataTransfer","effectAllowed","setData","dragEl","cloneNode","toggler","querySelector","checkbox","setAttribute","width","getOuterWidth","height","getOuterHeight","visibility","remove","document","body","appendChild","setDragImage","setTimeout","removeChild","onNodeDragOver","dropEffect","rect","getBoundingClientRect","y","clientY","top","onNodeDragEnter","onNodeDragLeave","onNodeDragEnd","_event$currentTarget","removeAttribute","find","$refs","currentNode","hasSelectedNode","some","selectedNodes","elements","every","element","firstFocusableRow","currentFocusedRow","lastVisibleDescendant","focusNode","parentListElement","prevNodeButton","_selectionKeys","_check","propagateDown","check","_iterator","_createForOfIteratorHelper","_step","s","done","child","err","e","f","propagateUp","checkedChildCount","childPartialSelected","_iterator2","_step2","onChildCheckboxChange","childrenListElement","lastChildElement","focus","computed","hasChildren","checkboxMode","ariaChecked","ariaSelected","isPrevDropPointActive","isNextDropPointActive","isDraggable","allowNodeDrop","_this$node","draggable","_this$node2","droppable","isNodeDropActive","components","Checkbox","ChevronDownIcon","ChevronRightIcon","CheckIcon","MinusIcon","SpinnerIcon","directives","ripple","Ripple","_openBlock","_createElementBlock","_mergeProps","ref","_ctx","cx","role","$options","$props","tabindex","onKeydown","apply","arguments","_createElementVNode","onTouchend","onDragstart","onDragover","onDragenter","onDragleave","onDragend","onDrop","_withDirectives","_Fragment","_createBlock","_resolveDynamicComponent","_component_SpinnerIcon","spin","expandedIcon","collapsedIcon","_component_Checkbox","defaultValue","binary","indeterminate","unstyled","pt","icon","_withCtx","slotProps","_normalizeClass","_createTextVNode","_toDisplayString","childNode","_component_TreeNode","onNodeToggle","onNodeClick","onCheckboxChange","_cache","$event","onNodeDragenter","onNodeDragleave","onValueChange","BaseTree","inheritAttrs","d_expandedKeys","filterValue","dragNodeScope","dragHover","$pcTreeSelect","dragStartCleanup","dragStopCleanup","watch","newValue","initDragDropService","cleanupDragDropService","beforeUnmount","metaSelection","handleSelectionWithMetaKey","handleSelectionWithoutMetaKey","metaKey","ctrlKey","isNodeSelected","isSingleSelectionMode","isMultipleSelectionMode","isChecked","isNodeLeaf","onFilterKeyup","filteredNodes","valueToRender","findFilteredNodes","paramsWithoutNode","matched","childNodes","copyChildNode","isFilterMatched","_ref","searchFields","filterText","strict","field","fieldValue","resolveFieldData","toLocaleLowerCase","indexOf","onValueChanged","splice","isDescendantOf","_iterator3","_step3","allowDrop","isValidDragScope","hasCommonScope","dropScope","isArray","_iterator4","_step4","ds","isSameTreeScope","onDragOver","onDragEnter","onDragLeave","x","parseInt","right","left","bottom","processTreeDrop","filteredValue","isFunction","split","trim","_iterator5","_step5","_node","empty","emptyMessageText","_this$$primevue$confi","$primevue","config","locale","emptyMessage","containerDataP","cn","scrollable","wrapperDataP","TreeNode","InputText","InputIcon","IconField","SearchIcon","ptmi","_createVNode","_Transition","_renderSlot","$slots","_component_IconField","_component_InputText","$data","autocomplete","placeholder","onKeyup","_component_InputIcon","filtericon","_component_SearchIcon","_renderList"],"mappings":"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"}