{"version":3,"file":"tree-node.mjs","sources":["../../../../../../packages/components/tree/src/tree-node.vue"],"sourcesContent":["<template>\n  <div\n    v-show=\"node.visible\"\n    ref=\"node$\"\n    class=\"tree-node\"\n    :class=\"{\n      'is-expanded': expanded,\n      'is-current': node.isCurrent,\n      'is-hidden': !node.visible,\n      'is-focusable': !node.disabled && !checkboxDisabled,\n      'is-checked': !node.disabled && !checkboxDisabled && node.checked,\n      ...getNodeClass(node),\n    }\"\n    role=\"treeitem\"\n    tabindex=\"-1\"\n    :aria-expanded=\"expanded\"\n    :aria-disabled=\"node.disabled || checkboxDisabled\"\n    :aria-checked=\"node.checked\"\n    :draggable=\"tree.props.draggable\"\n    :data-key=\"getNodeKey(node)\"\n    @click.stop=\"handleClick\"\n    @contextmenu=\"handleContextMenu\"\n    @dragstart.stop=\"handleDragStart\"\n    @dragover.stop=\"handleDragOver\"\n    @dragend.stop=\"handleDragEnd\"\n    @drop.stop=\"handleDrop\"\n  >\n    <div\n      class=\"tree-node-content\"\n      :style=\"{ paddingLeft: (node.level - 1) * tree.props.indent + 'em' }\"\n    >\n      <span\n        :class=\"[\n          {\n            'custom-icon': !!$slots.icon,\n            'is-leaf': node.isLeaf,\n            expanded: !node.isLeaf && expanded\n          },\n          'tree-node-arrow',\n          tree.props.iconClass ? tree.props.iconClass : '',\n        ]\"\n        @click.stop=\"handleExpandIconClick\"\n      >\n        <slot name=\"icon\" :expanded=\"expanded\" :isLeaf=\"node.isLeaf\">\n          <hl-icon>\n            <system-caret />\n          </hl-icon>\n        </slot>\n      </span>\n      <!--修复tree嵌入form-item组件，导致label渲染成span，点击checkbox不能选中问题-->\n      <hl-checkbox\n        v-if=\"showCheckbox\"\n        :style=\"`visibility: ${node[props.hideCheckbox] ? 'hidden' : 'visible'}`\"\n        :model-value=\"node.checked\"\n        :indeterminate=\"node.indeterminate\"\n        :disabled=\"!!node.disabled || checkboxDisabled\"\n        :show-label=\"false\"\n        @click.stop\n        @change=\"handleCheckChange\"\n      >\n        {{ '' }}\n      </hl-checkbox>\n      <hl-spinner v-if=\"node.loading\" class=\"tree-node-loading-icon\" />\n      <node-content :node=\"node\" :render-content=\"renderContent\" />\n    </div>\n    <collapse-transition>\n      <div\n        v-if=\"!renderAfterExpand || childNodeRendered\"\n        v-show=\"expanded\"\n        class=\"tree-node-children\"\n        role=\"group\"\n        :aria-expanded=\"expanded\"\n      >\n        <tree-node\n          v-for=\"child in node.childNodes\"\n          :key=\"getNodeKey(child)\"\n          :render-content=\"renderContent\"\n          :render-after-expand=\"renderAfterExpand\"\n          :show-checkbox=\"showCheckbox\"\n          :checkbox-disabled=\"checkboxDisabled\"\n          :node=\"child\"\n          :accordion=\"accordion\"\n          :props=\"props\"\n          @node-expand=\"handleChildNodeExpand\"\n        >\n          <template v-if=\"$slots.icon\" #icon=\"params\">\n            <slot name=\"icon\" v-bind=\"params\"></slot>\n          </template>\n        </tree-node>\n      </div>\n    </collapse-transition>\n  </div>\n</template>\n<script lang='ts'>\nimport { defineComponent, getCurrentInstance, ref, watch, nextTick, inject, provide } from 'vue'\nimport { isString, isFunction } from '@vue/shared'\nimport HlCheckbox from '@hongluan-ui/components/checkbox'\nimport HlSpinner from '@hongluan-ui/components/spinner'\nimport HlIcon from '@hongluan-ui/components/icon'\nimport { SystemCaret } from '@hongluan-ui/components/system-icon'\nimport CollapseTransition from '@hongluan-ui/components/collapse-transition'\nimport { debugWarn } from '@hongluan-ui/utils'\nimport NodeContent from './tree-node-content.vue'\nimport { getNodeKey as getNodeKeyUtil, handleCurrentChange } from './model/util'\nimport { useNodeExpandEventBroadcast } from './model/useNodeExpandEventBroadcast'\nimport { dragEventsKey } from './model/useDragNode'\nimport Node from './model/node'\n\nimport type { PropType, ComponentInternalInstance } from 'vue'\nimport type { TreeOptionProps, TreeNodeData, RootTreeType } from './tree.type'\nimport type { Nullable } from '@hongluan-ui/utils'\n\nexport default defineComponent({\n  name: 'TreeNode',\n  components: {\n    CollapseTransition,\n    HlSpinner,\n    HlCheckbox,\n    NodeContent,\n    HlIcon,\n    SystemCaret,\n  },\n  props: {\n    node: {\n      type: Node,\n      default: () => ({}),\n    },\n    props: {\n      type: Object as PropType<TreeOptionProps>,\n      default: () => ({}),\n    },\n    accordion: Boolean,\n    renderContent: Function,\n    renderAfterExpand: Boolean,\n    showCheckbox: {\n      type: Boolean,\n      default: false,\n    },\n    checkboxDisabled: {\n      type: Boolean,\n      default: false,\n    },\n  },\n  emits: ['node-expand'],\n  setup(props, ctx) {\n    const { broadcastExpanded } = useNodeExpandEventBroadcast(props)\n    const tree = inject<RootTreeType>('RootTree')\n    const expanded = ref(false)\n    const childNodeRendered = ref(false)\n    const oldChecked = ref<boolean>(null)\n    const oldIndeterminate = ref<boolean>(null)\n    const node$ = ref<Nullable<HTMLElement>>(null)\n    const dragEvents = inject(dragEventsKey)\n    const instance = getCurrentInstance()\n\n    provide('NodeInstance', instance)\n    if(!tree) {\n      debugWarn('Tree', 'Can not find node\\'s tree.')\n    }\n\n    if(props.node.expanded) {\n      expanded.value = true\n      childNodeRendered.value = true\n    }\n\n    const childrenKey = tree.props.props['children'] || 'children'\n    watch(() => {\n      const children = props.node.data[childrenKey]\n      return children && [...children]\n    }, () => {\n      props.node.updateChildren()\n    })\n\n    watch(() => props.node.indeterminate, val => {\n      handleSelectChange(props.node.checked, val)\n    })\n\n    watch(() => props.node.checked, val => {\n      handleSelectChange(val, props.node.indeterminate)\n    })\n\n    watch(\n      () => props.node.childNodes.length,\n      () => props.node.reInitChecked(),\n    )\n\n    watch(() => props.node.expanded, val => {\n      nextTick(() => expanded.value = val)\n      if(val) {\n        childNodeRendered.value = true\n      }\n    })\n\n    const getNodeKey = (node: Node): any => {\n      return getNodeKeyUtil(tree.props.nodeKey, node.data)\n    }\n\n    const getNodeClass = (node: Node) => {\n      const nodeClassFunc = (props.props as TreeOptionProps).class\n      if (!nodeClassFunc) {\n        return {}\n      }\n      let className\n      if (isFunction(nodeClassFunc)) {\n        const { data } = node\n        className = nodeClassFunc(data, node)\n      } else {\n        className = nodeClassFunc\n      }\n\n      if (isString(className)) {\n        return { [className]: true }\n      } else {\n        return className\n      }\n    }\n\n    const handleSelectChange = (checked: boolean, indeterminate: boolean) => {\n      if (oldChecked.value !== checked || oldIndeterminate.value !== indeterminate) {\n        tree.ctx.emit('check-change', props.node.data, checked, indeterminate)\n      }\n      oldChecked.value = checked\n      oldIndeterminate.value = indeterminate\n    }\n\n    const handleClick = (e: MouseEvent) => {\n      handleCurrentChange(tree.store, tree.ctx.emit, () =>\n        tree.store.value.setCurrentNode(props.node),\n      )\n      tree.currentNode.value = props.node\n\n      if(tree.props.expandOnClickNode) {\n        handleExpandIconClick()\n      }\n\n      if(tree.props.checkOnClickNode && !props.node.disabled && !props.checkboxDisabled) {\n        handleCheckChange(null, {\n          target: { checked: !props.node.checked },\n        })\n      }\n      tree.ctx.emit('node-click', props.node.data, props.node, instance, e)\n    }\n\n    const handleContextMenu = (event: Event) => {\n      if (tree.instance.vnode.props['onNodeContextmenu']) {\n        event.stopPropagation()\n        event.preventDefault()\n      }\n      tree.ctx.emit('node-contextmenu', event, props.node.data, props.node, instance)\n    }\n\n    const handleExpandIconClick = () => {\n      if (props.node.isLeaf) return\n      if (expanded.value) {\n        tree.ctx.emit('node-collapse', props.node.data, props.node, instance)\n        props.node.collapse()\n      } else {\n        props.node.expand()\n        ctx.emit('node-expand', props.node.data, props.node, instance)\n      }\n    }\n\n    const handleCheckChange = (value, ev) => {\n      props.node.setChecked(ev.target.checked, !tree.props.checkStrictly)\n      nextTick(() => {\n        const store = tree.store.value\n        tree.ctx.emit('check', props.node.data, {\n          checkedNodes: store.getCheckedNodes(),\n          checkedKeys: store.getCheckedKeys(),\n          halfCheckedNodes: store.getHalfCheckedNodes(),\n          halfCheckedKeys: store.getHalfCheckedKeys(),\n        })\n      })\n    }\n\n    const handleChildNodeExpand = (nodeData: TreeNodeData, node: Node, instance: ComponentInternalInstance) => {\n      broadcastExpanded(node)\n      tree.ctx.emit('node-expand', nodeData, node, instance)\n    }\n\n    const handleDragStart = (event: DragEvent) => {\n      if (!tree.props.draggable) return\n      dragEvents.treeNodeDragStart({ event, treeNode: props })\n    }\n\n    const handleDragOver = (event: DragEvent) => {\n      event.preventDefault()\n      if (!tree.props.draggable) return\n      dragEvents.treeNodeDragOver({\n        event,\n        treeNode: { $el: node$.value, node: props.node },\n      })\n    }\n\n    const handleDrop = (event: DragEvent) => {\n      event.preventDefault()\n    }\n\n    const handleDragEnd = (event: DragEvent) => {\n      if (!tree.props.draggable) return\n      dragEvents.treeNodeDragEnd(event)\n    }\n\n    return {\n      node$,\n      tree,\n      expanded,\n      childNodeRendered,\n      oldChecked,\n      oldIndeterminate,\n      getNodeKey,\n      getNodeClass,\n      handleSelectChange,\n      handleClick,\n      handleContextMenu,\n      handleExpandIconClick,\n      handleCheckChange,\n      handleChildNodeExpand,\n      handleDragStart,\n      handleDragOver,\n      handleDrop,\n      handleDragEnd,\n    }\n\n  },\n})\n</script>\n"],"names":["CollapseTransition","NodeContent","getNodeKey","getNodeKeyUtil","_createElementBlock","_normalizeClass","_withModifiers","_createElementVNode","_normalizeStyle","_renderSlot","_createVNode","_createCommentVNode","_createBlock","_Fragment"],"mappings":"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"}