{"version":3,"file":"index.vue.mjs","sources":["../../../../../packages/components/transfer/src/index.vue"],"sourcesContent":["<template>\n  <div :class=\"ns.b()\">\n    <transfer-panel\n      ref=\"leftPanel\"\n      :data=\"sourceData\"\n      :option-render=\"optionRender\"\n      :placeholder=\"panelFilterPlaceholder\"\n      :title=\"leftPanelTitle\"\n      :filterable=\"filterable\"\n      :format=\"format\"\n      :filter-method=\"filterMethod\"\n      :default-checked=\"leftDefaultChecked\"\n      :props=\"props\"\n      @checked-change=\"onSourceCheckedChange\"\n    >\n      <slot name=\"left-footer\"></slot>\n    </transfer-panel>\n    <div :class=\"ns.e('buttons')\">\n      <el-button\n        type=\"primary\"\n        :class=\"[ns.e('button'), ns.is('with-texts', hasButtonTexts)]\"\n        :disabled=\"rightChecked.length === 0\"\n        @click=\"addToLeft\"\n      >\n        <el-icon><arrow-left /></el-icon>\n        <span v-if=\"buttonTexts[0] !== undefined\">{{ buttonTexts[0] }}</span>\n      </el-button>\n      <el-button\n        type=\"primary\"\n        :class=\"[ns.e('button'), ns.is('with-texts', hasButtonTexts)]\"\n        :disabled=\"leftChecked.length === 0\"\n        @click=\"addToRight\"\n      >\n        <span v-if=\"buttonTexts[1] !== undefined\">{{ buttonTexts[1] }}</span>\n        <el-icon><arrow-right /></el-icon>\n      </el-button>\n    </div>\n    <transfer-panel\n      ref=\"rightPanel\"\n      :data=\"targetData\"\n      :option-render=\"optionRender\"\n      :placeholder=\"panelFilterPlaceholder\"\n      :filterable=\"filterable\"\n      :format=\"format\"\n      :filter-method=\"filterMethod\"\n      :title=\"rightPanelTitle\"\n      :default-checked=\"rightDefaultChecked\"\n      :props=\"props\"\n      @checked-change=\"onTargetCheckedChange\"\n    >\n      <slot name=\"right-footer\"></slot>\n    </transfer-panel>\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, inject, h, reactive, ref, toRefs, watch } from 'vue'\nimport ElButton from '@element-ultra/components/button'\nimport ElIcon from '@element-ultra/components/icon'\nimport { formItemKey } from '@element-ultra/tokens'\nimport { UPDATE_MODEL_EVENT } from '@element-ultra/shared'\nimport { useNamespace } from '@element-ultra/hooks'\nimport { ArrowLeft, ArrowRight } from 'icon-ultra'\nimport TransferPanel from './transfer-panel.vue'\nimport { useComputedData } from './useComputedData'\nimport {\n  useCheckedChange,\n  LEFT_CHECK_CHANGE_EVENT,\n  RIGHT_CHECK_CHANGE_EVENT\n} from './useCheckedChange'\nimport { useMove } from './useMove'\nimport { CHANGE_EVENT } from './transfer'\n\nimport type { PropType, VNode } from 'vue'\nimport type { FormItemContext } from '@element-ultra/tokens'\nimport type { DataItem, Format, Key, Props, TargetOrder } from './transfer'\n\ntype TransferType = InstanceType<typeof TransferPanel>\n\nexport default defineComponent({\n  name: 'ElTransfer',\n\n  components: {\n    TransferPanel,\n    ElButton,\n    ElIcon,\n    ArrowLeft,\n    ArrowRight\n  },\n\n  props: {\n    data: {\n      type: Array as PropType<DataItem[]>,\n      default: () => []\n    },\n    titles: {\n      type: Array as PropType<any> as PropType<[string, string]>,\n      default: () => []\n    },\n    buttonTexts: {\n      type: Array as PropType<any> as PropType<[string, string]>,\n      default: () => []\n    },\n    filterPlaceholder: {\n      type: String,\n      default: ''\n    },\n    filterMethod: Function as PropType<(query: string, item: DataItem) => boolean>,\n    leftDefaultChecked: {\n      type: Array as PropType<Key[]>,\n      default: () => []\n    },\n    rightDefaultChecked: {\n      type: Array as PropType<Key[]>,\n      default: () => []\n    },\n    renderContent: Function as PropType<(h, option) => VNode>,\n    modelValue: {\n      type: Array as PropType<Key[]>,\n      default: () => []\n    },\n    format: {\n      type: Object as PropType<Format>,\n      default: () => ({})\n    },\n    filterable: {\n      type: Boolean,\n      default: false\n    },\n    props: {\n      type: Object as PropType<Props>,\n      default: () => ({\n        label: 'label',\n        key: 'key',\n        disabled: 'disabled'\n      })\n    },\n    targetOrder: {\n      type: String as PropType<TargetOrder>,\n      default: 'original',\n      validator: (val: string) => {\n        return ['original', 'push', 'unshift'].includes(val)\n      }\n    }\n  },\n\n  emits: [UPDATE_MODEL_EVENT, CHANGE_EVENT, LEFT_CHECK_CHANGE_EVENT, RIGHT_CHECK_CHANGE_EVENT],\n\n  setup(props, { emit, slots }) {\n    const ns = useNamespace('transfer')\n    const elFormItem = inject(formItemKey, {} as FormItemContext)\n\n    const checkedState = reactive({\n      leftChecked: [],\n      rightChecked: []\n    })\n\n    const { propsKey, sourceData, targetData } = useComputedData(props)\n\n    const { onSourceCheckedChange, onTargetCheckedChange } = useCheckedChange(checkedState, emit)\n\n    const { addToLeft, addToRight } = useMove(props, checkedState, propsKey, emit)\n\n    const leftPanel = ref<TransferType>()\n    const rightPanel = ref<TransferType>()\n\n    const clearQuery = (which: 'left' | 'right') => {\n      switch (which) {\n        case 'left':\n          leftPanel.value!.query = ''\n          break\n        case 'right':\n          rightPanel.value!.query = ''\n          break\n      }\n    }\n\n    const hasButtonTexts = computed(() => props.buttonTexts.length === 2)\n\n    const leftPanelTitle = computed(() => props.titles[0] || '列表1')\n\n    const rightPanelTitle = computed(() => props.titles[1] || '列表2')\n\n    const panelFilterPlaceholder = computed(() => props.filterPlaceholder || '请输入搜索内容')\n\n    watch(\n      () => props.modelValue,\n      () => {\n        elFormItem?.validate()\n      }\n    )\n\n    const optionRender = computed(() => option => {\n      if (props.renderContent) return props.renderContent(h, option)\n\n      if (slots.default) return slots.default({ option })\n\n      return h('span', option[props.props.label] || option[props.props.key])\n    })\n\n    return {\n      ns,\n      sourceData,\n      targetData,\n      onSourceCheckedChange,\n      onTargetCheckedChange,\n      addToLeft,\n      addToRight,\n\n      ...toRefs(checkedState),\n\n      hasButtonTexts,\n      leftPanelTitle,\n      rightPanelTitle,\n      panelFilterPlaceholder,\n      clearQuery,\n      leftPanel,\n      rightPanel,\n\n      optionRender\n    }\n  }\n})\n</script>\n"],"names":["_resolveComponent","_normalizeClass","_createElementVNode","_withCtx","_createVNode","_openBlock","_createElementBlock","_toDisplayString","_createCommentVNode"],"mappings":"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"}