{"version":3,"file":"node.vue2.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":[],"mappings":"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"}