{"version":3,"file":"node.vue.mjs","sources":["../../../../../../../packages/components/tree/src/layout/node.vue"],"sourcesContent":["<script lang=\"ts\">\n  import type { PropType } from 'vue'\n  import { defineComponent, computed, inject } from 'vue'\n  import { getNamespace } from '../../../../utils/global-config'\n  import type { TreeNode } from '../type'\n  import { treeInjectKey } from '../context'\n  import { BnIconArrowRight } from '../../../icon'\n  import { Checkbox } from '../../../checkbox'\n  import RenderSlotFunction from '../../../common/render-slot-function'\n  import { getCheckedStatus } from '../utils'\n\n  export default defineComponent({\n    name: 'TreeNode',\n    components: {\n      BnIconArrowRight,\n      Checkbox,\n      RenderSlotFunction\n    },\n    props: {\n      node: {\n        type: Object as PropType<TreeNode>,\n        default: () => ({})\n      }\n    },\n    setup(props) {\n      const ns = getNamespace('tree')\n      const treeContext = inject(treeInjectKey)\n      const cls = computed(() => [\n        `${ns}__node`,\n        props.node.isLeaf && 'is-leaf',\n        isSelected.value && 'is-selected',\n        isFocus.value && 'is-focus'\n      ])\n\n      const showLine = computed(() => treeContext?.showLine)\n      const isSelected = computed(() => treeContext?.selectedValues.includes(props.node.value))\n      const showCheckbox = computed(() => treeContext?.showCheckbox)\n      const rootSlots = computed(() => treeContext?.rootSlots)\n      const isFocus = computed(() => treeContext?.focusNodeValues.includes(props.node.value))\n\n      const unfoldOnClickNode = computed(() => treeContext?.unfoldOnClickNode)\n      const checkedOnClickNode = computed(() => treeContext?.checkedOnClickNode)\n\n      const handleNodeSelected = () => {\n        treeContext?.handleNodeSelected(props.node)\n      }\n\n      const toggleNodeUnfoldOrFold = () => {\n        treeContext?.toggleNodeUnfoldOrFold(props.node)\n      }\n\n      const toggleNodeCheckStatus = (checked: boolean) => {\n        treeContext?.toggleNodeCheckStatus(props.node, checked)\n      }\n\n      const handleNodeItem = () => {\n        if (props.node.disabled) return\n        treeContext?.clickNode(props.node)\n        if (unfoldOnClickNode.value) {\n          toggleNodeUnfoldOrFold()\n        }\n        if (checkedOnClickNode.value) {\n          toggleNodeCheckStatus(!checkedStatus.value.checked)\n        }\n        handleNodeSelected()\n      }\n\n      const hasIndentVerticalLine = (indent: number) => {\n        return showLine.value && indent\n      }\n\n      const hasPlaceholderBottomVerticalLine = () => {\n        return showLine.value && !props.node.hasChildren && !props.node.lasted\n      }\n\n      const checkedStatus = computed(() => {\n        // 父子节点无关联关系\n        if (treeContext?.checkStrictly) {\n          return {\n            checked: treeContext.checkedNodeKeys.includes(props.node.key),\n            indeterminate: false\n          }\n        }\n        // 父子存在关联关系\n        return getCheckedStatus(props.node, treeContext?.checkedNodeKeys, treeContext?.nodeKeyMap)\n      })\n\n      return {\n        ns,\n        cls,\n        showLine,\n        showCheckbox,\n        rootSlots,\n        checkedStatus,\n        handleNodeItem,\n        toggleNodeCheckStatus,\n        toggleNodeUnfoldOrFold,\n        hasIndentVerticalLine,\n        hasPlaceholderBottomVerticalLine\n      }\n    }\n  })\n</script>\n\n<template>\n  <div\n    v-show=\"!node.filter\"\n    :class=\"[cls]\"\n    :date-key=\"node.key\"\n    :data-deep=\"node.deep\"\n    @click=\"handleNodeItem\"\n  >\n    <div :class=\"`${ns}__indent`\">\n      <span\n        v-for=\"(indent, indentIndex) in node.indents\"\n        :key=\"indentIndex\"\n        :class=\"[`${ns}__indent-block`, { 'is-line': hasIndentVerticalLine(indent) }]\"\n      ></span>\n    </div>\n    <div\n      :class=\"[\n        `${ns}__placeholder`,\n        {\n          'is-bottom-line': hasPlaceholderBottomVerticalLine(),\n          'is-leaf': !node.hasChildren\n        }\n      ]\"\n      @click.stop=\"toggleNodeUnfoldOrFold\"\n    >\n      <RenderSlotFunction :slot-fn=\"rootSlots?.['node-icon']\" :node=\"node\">\n        <BnIconArrowRight v-if=\"node.hasChildren\" :rotate=\"!node.unfold ? 0 : 90\" />\n      </RenderSlotFunction>\n    </div>\n    <div v-if=\"showCheckbox\" :class=\"[`${ns}__checkbox`]\">\n      <Checkbox\n        :disabled=\"node.disabled\"\n        :model-value=\"checkedStatus.checked\"\n        :indeterminate=\"checkedStatus.indeterminate\"\n        :validate-event=\"false\"\n        @change=\"toggleNodeCheckStatus\"\n        @click.stop\n      />\n    </div>\n    <div\n      :class=\"[\n        `${ns}__node-label`,\n        {\n          'is-disabled': node.disabled\n        }\n      ]\"\n    >\n      <RenderSlotFunction :slot-fn=\"rootSlots?.['node-label']\" :node=\"node\">\n        {{ node.label }}\n      </RenderSlotFunction>\n    </div>\n\n    <div v-if=\"rootSlots?.['node-extra']\" :class=\"[`${ns}__node-extra`]\" @click.stop>\n      <RenderSlotFunction :slot-fn=\"rootSlots?.['node-extra']\" :node=\"node\" />\n    </div>\n  </div>\n</template>\n"],"names":["_resolveComponent","_withDirectives","_openBlock","_createElementBlock","_Fragment","_renderList","_createElementVNode","_normalizeClass","_withModifiers","node","_withCtx","_createBlock","ns","checkedStatus","toggleNodeCheckStatus","_createCommentVNode"],"mappings":"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"}