{"version":3,"file":"index.mjs","sources":["../../../../../../packages/components/editable/src/index.ts"],"sourcesContent":["import { h, nextTick, ref, watch, withDirectives } from 'vue'\nimport {\n  ElIcon,\n  useNamespace,\n  ClickOutside as vClickoutside,\n} from 'element-plus'\nimport { CHANGE_EVENT, DIV_TAG, SPAN_TAG } from '@element-plus/constants'\nimport { editableEmits, editableProps } from './editable'\nimport type { ValueType } from './editable'\n\nconst ElEditable = {\n  name: 'ElEditable',\n  inheritAttrs: false,\n  props: editableProps,\n  emits: editableEmits,\n  setup(props: any, { slots, attrs, emit, expose }: any) {\n    const ns = useNamespace('editable')\n\n    const isEditable = ref(props.defaultEditState)\n    const wrapper = ref()\n\n    let oldValue: ValueType = null\n    let currentValue: ValueType = null\n    let preCurrentValue: ValueType = null\n    let isModify: boolean = false\n\n    const setEditable = (editable: boolean) => {\n      isEditable.value = editable\n\n      // 计算 isModify 及更新 preCurrentValue\n      isModify = editable\n        ? false // 从阅读态切换到编辑态，不存在修改了值\n        : preCurrentValue === props.modelValue\n        ? false // 上一次的值和本次的值一致，也不存在修改了值\n        : true\n      nextTick(() => {\n        preCurrentValue = currentValue\n      })\n\n      emit(CHANGE_EVENT, editable, {\n        currentValue,\n        oldValue,\n        isModify,\n        preCurrentValue,\n      })\n    }\n\n    const handleFocus = () => {\n      setTimeout(() => {\n        wrapper.value.querySelector('input')?.focus()\n        wrapper.value.querySelector('textarea')?.focus()\n      })\n    }\n\n    const setEditableTure = () => {\n      setEditable(true)\n      if (props.focus) {\n        handleFocus()\n      }\n    }\n    const setEditableFalse = () => setEditable(false)\n\n    watch(\n      () => props.modelValue,\n      (cur, old) => {\n        oldValue = old\n        currentValue = cur\n      },\n      {\n        immediate: true,\n      }\n    )\n\n    expose({\n      setEditable,\n    })\n\n    return () => {\n      const { trigger, icon } = props\n      const pure = { ...attrs }\n      delete pure.style\n      delete pure.class\n\n      const component = h(\n        DIV_TAG,\n        {\n          class: ns.b('component'),\n          key: isEditable.value,\n        },\n        slots?.default?.()\n      )\n\n      const editVNode = withDirectives(component, [\n        [vClickoutside, setEditableFalse],\n      ])\n\n      const textData: Record<string, any> = { class: ns.b('text') }\n      if (trigger === 'dblclick') {\n        textData.ondblclick = setEditableTure\n      }\n      if (trigger === 'click') {\n        textData.onClick = setEditableTure\n      }\n      const iconVNode = h(\n        ElIcon,\n        {\n          class: ns.b('icon'),\n          ...pure,\n          onClick: setEditableTure,\n        },\n        {\n          default: () => slots?.icon?.() ?? (icon ? h(icon) : ''),\n        }\n      )\n      const textVNode = h(DIV_TAG, textData, [\n        slots?.text?.() ?? h(SPAN_TAG, props.modelValue),\n        trigger === 'icon' ? iconVNode : '',\n      ])\n\n      return h(\n        DIV_TAG,\n        {\n          class: [ns.b(), attrs.class],\n          style: attrs.style,\n          ref: wrapper,\n        },\n        [isEditable.value ? editVNode : textVNode]\n      )\n    }\n  },\n}\n\nexport default ElEditable\n"],"names":["vClickoutside","_a","_b"],"mappings":"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"}