{"version":3,"file":"node.vue2.mjs","sources":["../../../../../packages/components/cascade-panel/src/node.vue"],"sourcesContent":["<template>\n  <li\n    :id=\"`${menuId}-${node.uid}`\"\n    role=\"menuitem\"\n    :tabindex=\"expandable ? -1 : undefined\"\n    :class=\"[\n      'el-cascade-node',\n      checkStrictly && 'is-selectable',\n      inExpandingPath && 'in-active-path',\n      inCheckedPath && 'in-checked-path',\n      node.checked && 'is-active',\n      !expandable && 'is-disabled'\n    ]\"\n    @mouseenter=\"handleHoverExpand\"\n    @focus=\"handleHoverExpand\"\n    @click=\"handleClick\"\n  >\n    <!-- prefix -->\n    <el-checkbox\n      v-if=\"multiple\"\n      :model-value=\"node.checked\"\n      :indeterminate=\"node.indeterminate\"\n      :disabled=\"isDisabled\"\n      @click.stop\n      @update:model-value=\"handleSelectCheck\"\n    />\n    <el-radio\n      v-else-if=\"checkStrictly\"\n      :model-value=\"checkedNodeId\"\n      :value=\"node.uid\"\n      :disabled=\"isDisabled\"\n      @update:model-value=\"handleSelectCheck\"\n      @click.stop\n    >\n      <!--\n        Add an empty element to avoid render label,\n        do not use empty fragment here for https://github.com/vuejs/vue-next/pull/2485\n      -->\n      <span></span>\n    </el-radio>\n    <el-icon v-else-if=\"isLeaf && node.checked\" class=\"el-cascade-node__prefix\">\n      <check />\n    </el-icon>\n\n    <!-- content -->\n    <node-content />\n\n    <!-- postfix -->\n    <template v-if=\"!isLeaf\">\n      <el-icon v-if=\"node.loading\" class=\"is-loading el-cascade-node__postfix\">\n        <loading />\n      </el-icon>\n      <el-icon v-else class=\"arrow-right el-cascade-node__postfix\">\n        <arrow-right />\n      </el-icon>\n    </template>\n  </li>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, inject } from 'vue'\nimport ElCheckbox from '@element-ultra/components/checkbox'\nimport ElRadio from '@element-ultra/components/radio'\nimport ElIcon from '@element-ultra/components/icon'\nimport { Check, Loading, ArrowRight } from 'icon-ultra'\nimport NodeContent from './node-content'\nimport { Cascade_PANEL_INJECTION_KEY } from './types'\nimport type { default as CascadeNode } from './node'\n\nimport type { PropType } from 'vue'\n\nexport default defineComponent({\n  name: 'ElCascadeNode',\n\n  components: {\n    ElCheckbox,\n    ElRadio,\n    NodeContent,\n    ElIcon,\n    Check,\n    Loading,\n    ArrowRight\n  },\n\n  props: {\n    node: {\n      type: Object as PropType<CascadeNode>,\n      required: true\n    },\n    menuId: String\n  },\n\n  emits: ['expand'],\n\n  setup(props, { emit }) {\n    const panel = inject(Cascade_PANEL_INJECTION_KEY)!\n\n    const isHoverMenu = computed(() => panel.isHoverMenu)\n    const multiple = computed(() => panel.config.multiple)\n    const checkStrictly = computed(() => panel.config.checkStrictly)\n    const checkedNodeId = computed(() => panel.checkedNodes[0]?.uid)\n\n    const isDisabled = computed(() => props.node.isDisabled)\n    const isLeaf = computed(() => props.node.isLeaf)\n    const expandable = computed(\n      () => (checkStrictly.value && !isLeaf.value) || !isDisabled.value\n    )\n    const inExpandingPath = computed(() => isInPath(panel.expandingNode!))\n    // only useful in check-strictly mode\n    const inCheckedPath = computed(\n      () => checkStrictly.value && panel.checkedNodes.some(isInPath)\n    )\n\n    const isInPath = (node: CascadeNode) => {\n      const { level, uid } = props.node\n      return node?.pathNodes[level - 1]?.uid === uid\n    }\n\n    const doExpand = () => {\n      if (inExpandingPath.value) return\n      panel.expandNode(props.node)\n    }\n\n    const doCheck = (checked: boolean) => {\n      const { node } = props\n      if (checked === node.checked) return\n      panel.handleCheckChange(node, checked)\n    }\n\n    const doLoad = () => {\n      panel.lazyLoad(props.node, () => {\n        if (!isLeaf.value) doExpand()\n      })\n    }\n\n    const handleHoverExpand = (e: Event) => {\n      if (!isHoverMenu.value) return\n      handleExpand()\n      !isLeaf.value && emit('expand', e)\n    }\n\n    const handleExpand = () => {\n      const { node } = props\n      // do not exclude leaf node because the menus expanded might have to reset\n      if (!expandable.value || node.loading) return\n      node.loaded ? doExpand() : doLoad()\n    }\n\n    const handleClick = () => {\n      if (isHoverMenu.value && !isLeaf.value) return\n\n      if (\n        isLeaf.value &&\n        !isDisabled.value &&\n        !checkStrictly.value &&\n        !multiple.value\n      ) {\n        handleCheck(true)\n      } else {\n        handleExpand()\n      }\n    }\n\n    const handleSelectCheck = (checked: boolean) => {\n      if (checkStrictly.value) {\n        doCheck(checked)\n        if (props.node.loaded) {\n          doExpand()\n        }\n      } else {\n        handleCheck(checked)\n      }\n    }\n\n    const handleCheck = (checked: boolean) => {\n      if (!props.node.loaded) {\n        doLoad()\n      } else {\n        doCheck(checked)\n        !checkStrictly.value && doExpand()\n      }\n    }\n\n    return {\n      panel,\n      isHoverMenu,\n      multiple,\n      checkStrictly,\n      checkedNodeId,\n      isDisabled,\n      isLeaf,\n      expandable,\n      inExpandingPath,\n      inCheckedPath,\n      handleHoverExpand,\n      handleExpand,\n      handleClick,\n      handleCheck,\n      handleSelectCheck\n    }\n  }\n})\n</script>\n"],"names":[],"mappings":"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"}