{"version":3,"file":"tree-select.vue2.mjs","sources":["../../../../../packages/components/tree-select/src/tree-select.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { defineComponent as __MACROS_defineComponent } from \"vue\";\nexport default /*#__PURE__*/ __MACROS_defineComponent({\n  name: 'ElTreeSelect',\n  inheritAttrs: false\n});\n</script>\n<template>\n  <div\n    :class=\"[ns.b(), ns.m(inputSize)]\"\n    ref=\"treeSelectRef\"\n    @click=\"openDialog\"\n    v-bind=\"$attrs\"\n  >\n    <div\n      ref=\"inputRef\"\n      :class=\"[\n        ns.e('input'),\n        ns.is('disabled', treeSelectDisabled),\n        ns.is('tree-visible', treeVisible)\n      ]\"\n      @mouseenter=\"handleMouseEnter\"\n      @mouseleave=\"handleMouseLeave\"\n    >\n      <div v-if=\"$slots.prefix\" :class=\"{ [ns.e('prefix')]: $slots.prefix }\">\n        <slot name=\"prefix\"></slot>\n      </div>\n\n      <div :class=\"ns.e('content')\">\n        <!-- 多选 -->\n        <template v-if=\"multiple\">\n          <span\n            v-if=\"!(modelValue as any[])?.length\"\n            :class=\"[ns.e('placeholder'), ns.is('transparent')]\"\n          >\n            {{ placeholder }}\n          </span>\n          <template v-if=\"multipleLimit\">\n            <el-tag\n              v-for=\"(tag, i) in tagList.slice(0, multipleLimit)\"\n              :key=\"tag.id\"\n              :closable=\"treeSelectDisabled ? false : true\"\n              :class=\"ns.e('item')\"\n              type=\"info\"\n              max-width=\"100px\"\n              @close=\"handleCloseTag(tag, i)\"\n            >\n              {{ getChainValue(tag, labelKey) }}\n            </el-tag>\n            <el-tag v-if=\"tagList.length - multipleLimit > 0\">\n              +{{ tagList.length - multipleLimit }}\n            </el-tag>\n          </template>\n          <template v-else>\n            <el-tag\n              v-for=\"(tag, i) in tagList\"\n              :key=\"tag.id\"\n              max-width=\"100px\"\n              :closable=\"treeSelectDisabled ? false : true\"\n              :class=\"ns.e('item')\"\n              type=\"info\"\n              @close=\"handleCloseTag(tag, i)\"\n            >\n              {{ getChainValue(tag, labelKey) }}\n            </el-tag>\n          </template>\n        </template>\n\n        <!-- 单选 -->\n        <template v-else>\n          <span\n            :class=\"[ns.e('placeholder'), ns.is('transparent', !selectedLabel)]\"\n          >\n            {{ selectedLabel || placeholder }}\n          </span>\n        </template>\n\n        <!-- 输入框，可以用来对列表进行查询 -->\n      </div>\n\n      <el-icon :class=\"[ns.e('icon')]\" v-if=\"!treeSelectDisabled\">\n        <CircleClose\n          :class=\"ns.e('close')\"\n          v-if=\"clearable\"\n          @click.stop=\"handleClear\"\n        />\n        <ArrowDown v-else />\n      </el-icon>\n    </div>\n  </div>\n\n  <el-dialog\n    append-to-body\n    v-model=\"treeVisible\"\n    :title=\"placeholder\"\n    width=\"400px\"\n    :lazy-render=\"false\"\n  >\n    <div :class=\"ns.e('tools')\">\n      <el-input\n        placeholder=\"输入关键字查询\"\n        v-model=\"filterer.query\"\n        @update:model-value=\"handleFilter\"\n        :class=\"ns.e('query')\"\n        :prefix-icon=\"Search\"\n        clearable\n      />\n\n      <template v-if=\"multiple\">\n        <el-button\n          type=\"primary\"\n          text\n          size=\"small\"\n          @click=\"handleToggleCheck(true)\"\n        >\n          全选\n        </el-button>\n        <el-button\n          type=\"info\"\n          text\n          size=\"small\"\n          @click=\"handleToggleCheck(false)\"\n        >\n          全不选\n        </el-button>\n      </template>\n    </div>\n\n    <el-tree\n      :data=\"data\"\n      :check-strictly=\"checkStrictly\"\n      ref=\"treeRef\"\n      :node-key=\"valueKey\"\n      :props=\"treeProps\"\n      :show-checkbox=\"multiple\"\n      :class=\"ns.e('tree')\"\n      :filter-method=\"filterMethod\"\n      :indent=\"treeIndent\"\n      :icon=\"treeIcon\"\n      :empty-text=\"emptyText\"\n      :highlight-current=\"highlightCurrent && !multiple\"\n      @current-change=\"handleSelectChange\"\n      @check=\"handleCheck\"\n      :expand-on-click-node=\"false\"\n      :selectable=\"selectable\"\n      default-expand-all\n    />\n  </el-dialog>\n</template>\n<script lang=\"ts\" setup>\nimport { ref, shallowRef } from 'vue'\nimport { useNamespace, useSize, useDisabled } from '@element-ultra/hooks'\nimport { treeSelectProps, treeSelectEmits } from './tree-select'\nimport ElTree from '@element-ultra/components/tree'\nimport ElTag from '@element-ultra/components/tag'\nimport ElInput from '@element-ultra/components/input'\nimport ElIcon from '@element-ultra/components/icon'\nimport ElButton from '@element-ultra/components/button'\nimport ElDialog from '@element-ultra/components/dialog'\nimport { CircleClose, ArrowDown, Search } from 'icon-ultra'\nimport useTreeSelect from './use-tree-select'\nimport useFilter from './use-filter'\nimport { getChainValue } from '@element-ultra/utils'\n\nconst ns = useNamespace('tree-select')\n\n\n\nconst props = defineProps(treeSelectProps)\n\nconst treeProps = {\n  value: props.valueKey,\n  label: props.labelKey,\n  children: props.childrenKey\n}\n\nconst emit = defineEmits(treeSelectEmits)\n\n/** 树的引用 */\nconst treeRef = shallowRef<InstanceType<typeof ElTree>>()\n\nconst { filterer, filterMethod, handleFilter } = useFilter(props, treeRef)\n\nconst inputSize = useSize({ props })\nconst treeSelectDisabled = useDisabled({ props })\n\nconst {\n  tagList,\n  selectedLabel,\n  treeSelectRef,\n  treeVisible,\n  clearable,\n\n  handleMouseEnter,\n  handleMouseLeave,\n  emitModelValue,\n  openDialog,\n  closeDialog,\n  handleCheck,\n  handleSelectChange,\n  handleCloseTag\n} = useTreeSelect({\n  props, emit, treeRef, filterer,  treeSelectDisabled\n})\n\n\nconst inputRef = ref<HTMLInputElement>()\n\nconst handleToggleCheck = (v: boolean) => {\n  const tree = treeRef.value\n  if (!tree) return console.warn('tree 引用为空')\n  if (v) {\n    tree.setCheckedAll()\n    const { keys, nodes } = tree.getChecked()\n    emitModelValue(\n      keys,\n      nodes.map(v => v[props.labelKey]),\n      nodes\n    )\n  } else {\n    tree.setCheckedKeys([])\n    emitModelValue([], [], [])\n  }\n}\n\n/**\n * 清空\n */\nconst handleClear = () => {\n  const { multiple } = props\n  const tree = treeRef.value\n  const { query } = filterer\n  if (query) {\n    filterer.query = ''\n    tree?.filter('')\n    return\n  }\n\n  if (multiple) {\n    emitModelValue([], [], [])\n    tagList.value = []\n    tree?.setCheckedKeys([])\n  } else {\n    emitModelValue('', '', undefined)\n    selectedLabel.value = ''\n    tree?.setCurrentKey('')\n  }\n  closeDialog()\n}\n</script>\n"],"names":["__MACROS_defineComponent","v"],"mappings":"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"}