{"version":3,"file":"index.mjs","sources":["../../../../../../package/components/msg-editor/src/index.tsx"],"sourcesContent":["import { computed, defineComponent, h, onMounted, ref, shallowRef, watchEffect } from \"vue\";\nimport type { PropType, Ref } from \"vue\";\nimport { coreCreateEditor } from \"@wangeditor/core\";\nimport type { IDomEditor } from \"@wangeditor/core\";\nimport { CHANGE_EVENT, UPDATE_MODEL_EVENT } from \"element-plus\";\nimport plugin from \"./plugin\";\nimport paragraphPlugin from \"./paragraph/plugin\";\nimport Popper from \"./Popper\";\nimport { getPrefixCls } from \"@vue-admin-core/utils/const\";\nimport emitter from \"./mitt\";\nimport { nodeToText, textToHtml, textToNode } from \"./utils\";\nimport { isEmpty } from \"lodash-es\";\nimport { onClickOutside } from \"@vueuse/core\";\n\nconst prefixCls = getPrefixCls(\"msg-editor\");\n\nexport default defineComponent({\n  name: \"VacMsgEditor\",\n  props: {\n    /**\n     * 编辑器内容\n     */\n    modelValue: {\n      type: String,\n      default: \"\"\n    },\n    /**\n     * 变量下拉选项数据\n     */\n    options: {\n      type: Array as PropType<{ label: string; value: string }[]>,\n      default: () => []\n    },\n    /**\n     * 占位符\n     */\n    placeholder: {\n      type: String\n    },\n    /** 是否禁用 */\n    disabled: {\n      type: Boolean\n    },\n    readOnly: {\n      type: Boolean\n    },\n    /**\n     * 变量前缀\n     */\n    prefix: {\n      type: String,\n      default: \"\\\\$\\\\{\"\n    },\n    /**\n     * 变量后缀\n     */\n    suffix: {\n      type: String,\n      default: \"\\\\}\"\n    }\n  },\n  emits: [\n    CHANGE_EVENT,\n    UPDATE_MODEL_EVENT,\n    /**\n     * 创建完成事件\n     * @params editor\n     */\n    \"created\",\n    /**\n     * 销毁事件\n     * @params editor\n     */\n    \"destroyed\",\n    \"maxLength\",\n    /**\n     * 获取焦点\n     * @params editor\n     */\n    \"focus\",\n    /**\n     * 失去焦点\n     * @params editor\n     */\n    \"blur\",\n    \"customAlert\",\n    /**\n     * 自定义粘贴\n     * @params editor, event\n     * @return res\n     */\n    \"customPaste\"\n  ],\n  setup(props, context) {\n    const selector = ref();\n    const visible = ref(false);\n    const editorRef = shallowRef<null | IDomEditor>(null); // editor 实例，必须用 shallowRef\n    const curValue = ref(\"\"); // 记录 editor 当前 html 内容\n    const position = ref();\n    const editor = ref();\n    const popper = ref<{ setValue: (item: any) => void; target: Ref<HTMLDivElement> }>();\n    const selectValue = ref();\n    let isCreated = false;\n\n    const optionMap = computed(() =>\n      props.options.reduce((acc, item) => ({ ...acc, [item.value]: item }), {})\n    );\n\n    const initEditor = () => {\n      if (!selector.value) return;\n      editor.value = coreCreateEditor({\n        selector: selector.value,\n        config: {\n          placeholder: props.placeholder,\n          readOnly: props.disabled || props.readOnly,\n          onCreated(editor) {\n            editorRef.value = editor; // 记录 editor 实例\n            setTimeout(() => (isCreated = true));\n          },\n          onChange(editor) {\n            const editorHtml = editor.getHtml();\n            curValue.value = editorHtml; // 记录当前内容\n            if (isCreated) {\n              context.emit(\n                \"update:modelValue\",\n                nodeToText(editor.children, { prefix: props.prefix, suffix: props.suffix })\n              ); // 触发 v-model 值变化\n              context.emit(\n                \"change\",\n                nodeToText(editor.children, { prefix: props.prefix, suffix: props.suffix }),\n                editor\n              );\n            }\n          },\n          onDestroyed(editor) {\n            context.emit(\"destroyed\", editor);\n          },\n          onMaxLength(editor) {\n            context.emit(\"maxLength\", editor);\n          },\n          onFocus(editor) {\n            context.emit(\"focus\", editor);\n          },\n          onBlur(editor) {\n            // emitter.emit(\"hide\", editor);\n            context.emit(\"blur\", editor);\n          },\n          customAlert(info, type) {\n            context.emit(\"customAlert\", info, type);\n          },\n          customPaste: (editor, event): any => {\n            const clipboardData = event.clipboardData;\n            const pastedText = clipboardData?.getData(\"text\");\n            editor.insertNode(\n              textToNode(\n                { prefix: props.prefix, suffix: props.suffix },\n                pastedText,\n                optionMap.value\n              ) as any\n            );\n            return false;\n          }\n        },\n        html: textToHtml(props.modelValue, optionMap.value, {\n          prefix: props.prefix,\n          suffix: props.suffix\n        }), //curValue.value,\n        plugins: [paragraphPlugin, plugin]\n      });\n      emitter.on(\"show\", ({ value, ..._position }) => {\n        position.value = _position;\n        visible.value = true;\n        selectValue.value = value;\n        // @ts-ignore\n        if (value) popper.value?.setValue(optionMap.value[value]);\n      });\n      emitter.on(\"hide\", () => {\n        visible.value = false;\n      });\n      onClickOutside(selector.value, (event) => {\n        if (!popper.value?.target.value?.contains(event.target as HTMLElement)) {\n          visible.value = false;\n        }\n      });\n    };\n\n    watchEffect(() => {\n      if (!editor.value) return;\n      if (props.disabled || props.readOnly) {\n        emitter.emit(\"hide\", editor.value);\n        editor.value.disable();\n      } else {\n        editor.value.enable();\n      }\n    });\n\n    /**\n     * 设置 HTML\n     * @param newHtml new html\n     */\n    function setHtml(newHtml: string) {\n      const editor = editorRef.value;\n      if (editor == null) return;\n      editor.setHtml(newHtml);\n    }\n\n    /**\n     * 元素挂在后初始化编辑器\n     */\n    onMounted(() => {\n      initEditor();\n    });\n\n    /**\n     * 监听 v-model 值变化\n     */\n    watchEffect(() => {\n      if (isEmpty(optionMap.value)) return;\n      const _val = textToHtml(props.modelValue, optionMap.value, {\n        prefix: props.prefix,\n        suffix: props.suffix\n      });\n      if (_val === curValue.value) return; // 和当前内容一样，则忽略\n      // 重新设置 HTML\n      setHtml(_val);\n    });\n    return () =>\n      h(\n        \"div\",\n        {\n          ...context.attrs,\n          class: [prefixCls, \"el-textarea\", context.attrs.class]\n        },\n        {\n          default: () => [\n            h(\"div\", {\n              ref: selector,\n              class: [`${prefixCls}__content`, { \"is-disabled\": props.disabled }],\n              onKeydown: (e: KeyboardEvent) => {\n                if (e.key === \"ArrowDown\" || e.key === \"ArrowUp\" || e.key === \"Enter\") {\n                  if (visible.value) {\n                    e.preventDefault();\n                    emitter.emit(e.key, e);\n                  }\n                }\n              }\n            }),\n            h(Popper, {\n              ref: popper,\n              class: `${prefixCls}__popper`,\n              visible: visible.value,\n              position: position,\n              editor: editor.value,\n              value: selectValue.value,\n              options: props.options\n            })\n          ]\n        }\n      );\n  }\n});\n"],"names":["prefixCls","getPrefixCls","defineComponent","name","props","modelValue","type","String","default","options","Array","placeholder","disabled","Boolean","readOnly","prefix","suffix","emits","CHANGE_EVENT","UPDATE_MODEL_EVENT","setup","context","selector","ref","visible","editorRef","shallowRef","curValue","position","editor","popper","selectValue","isCreated","optionMap","computed","reduce","acc","item","value","initEditor","coreCreateEditor","config","onCreated","setTimeout","onChange","editorHtml","getHtml","emit","nodeToText","children","onDestroyed","onMaxLength","onFocus","onBlur","customAlert","info","customPaste","event","clipboardData","pastedText","getData","insertNode","textToNode","html","textToHtml","plugins","paragraphPlugin","plugin","emitter","on","_position","setValue","onClickOutside","target","contains","watchEffect","disable","enable","setHtml","newHtml","onMounted","isEmpty","_val","h","attrs","class","onKeydown","e","key","preventDefault","Popper"],"mappings":"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"}