{"version":3,"file":"Editor.mjs","sources":["../../../../../../package/components/rich-text/src/Editor.tsx"],"sourcesContent":["import {\n  PropType,\n  defineComponent,\n  h,\n  onMounted,\n  onUnmounted,\n  ref,\n  shallowRef,\n  toRaw,\n  watch,\n  watchEffect\n} from \"vue\";\nimport { IDomEditor, SlateDescendant, IEditorConfig, createEditor } from \"@wangeditor/editor\";\nimport { CHANGE_EVENT, UPDATE_MODEL_EVENT } from \"element-plus\";\nimport { getPrefixCls } from \"@vue-admin-core/utils/const\";\nconst prefixCls = getPrefixCls(\"editor\");\n\nexport default defineComponent({\n  name: \"RickTextToolbar\",\n  props: {\n    /** 编辑器模式 */\n    mode: {\n      type: String,\n      default: \"default\"\n    },\n    /** 编辑器默认内容 */\n    defaultContent: {\n      type: Array as PropType<SlateDescendant[]>,\n      default: () => []\n    },\n    defaultHtml: {\n      type: String,\n      default: \"\"\n    },\n    /** 编辑器默认配置 */\n    defaultConfig: {\n      type: Object as PropType<IEditorConfig>,\n      default: () => ({})\n    },\n    /* 自定义 v-model */\n    modelValue: {\n      type: String,\n      default: \"\"\n    },\n    /** 是否禁用 */\n    disabled: {\n      type: Boolean\n    },\n    readOnly: {\n      type: Boolean\n    },\n    placeholder: {\n      type: String\n    }\n  },\n  emits: [\n    UPDATE_MODEL_EVENT,\n    CHANGE_EVENT,\n    \"created\",\n    \"destroyed\",\n    \"created\",\n    \"maxLength\",\n    \"focus\",\n    \"blur\",\n    \"customAlert\",\n    \"customPaste\"\n  ],\n  setup(props, context) {\n    const box = ref(null); // 编辑器容器\n\n    const editorRef = shallowRef<null | IDomEditor>(null); // editor 实例，必须用 shallowRef\n    const editor = ref();\n\n    const curValue = ref(\"\"); // 记录 editor 当前 html 内容\n\n    /**\n     * 初始化编辑器\n     */\n    const initEditor = () => {\n      if (!box.value) return;\n      // 获取原始数据，解除响应式特性\n      const defaultContent = toRaw(props.defaultContent);\n\n      editor.value = createEditor({\n        selector: box.value! as Element,\n        mode: props.mode,\n        content: defaultContent || [],\n        html: props.defaultHtml || props.modelValue || \"\",\n        config: {\n          ...props.defaultConfig,\n          placeholder: props.placeholder,\n          readOnly: props.disabled || props.readOnly,\n          onCreated(editor) {\n            editorRef.value = editor; // 记录 editor 实例\n            context.emit(\"created\", editor);\n          },\n          onChange(editor) {\n            const editorHtml = editor.getHtml();\n            curValue.value = editorHtml; // 记录当前内容\n            context.emit(\"update:modelValue\", editorHtml); // 触发 v-model 值变化\n            context.emit(\"change\", editor);\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            context.emit(\"blur\", editor);\n          },\n          customAlert(info, type) {\n            context.emit(\"customAlert\", info, type);\n          },\n          customPaste: (editor, event): any => {\n            let res;\n            context.emit(\"customPaste\", editor, event, (val: boolean) => {\n              res = val;\n            });\n            return res;\n          }\n        }\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    onUnmounted(() => {\n      const editor = editorRef.value;\n      if (editor == null) return;\n      editor.destroy();\n    });\n\n    /**\n     * 监听 v-model 值变化\n     */\n    watch(\n      () => props.modelValue,\n      (newVal: any) => {\n        if (newVal === curValue.value) return; // 和当前内容一样，则忽略\n\n        // 重新设置 HTML\n        setHtml(newVal);\n      }\n    );\n    watchEffect(() => {\n      if (!editor.value) return;\n      if (props.disabled || props.readOnly) {\n        editor.value.disable();\n      } else {\n        editor.value.enable();\n      }\n    });\n    return () =>\n      h(\"div\", {\n        ref: box,\n        class: [prefixCls, { \"is-disabled\": props.disabled }]\n      });\n  }\n});\n"],"names":["prefixCls","getPrefixCls","defineComponent","name","props","mode","type","String","default","defaultContent","Array","defaultHtml","defaultConfig","Object","modelValue","disabled","Boolean","readOnly","placeholder","emits","UPDATE_MODEL_EVENT","CHANGE_EVENT","setup","context","box","ref","editorRef","shallowRef","editor","curValue","initEditor","value","toRaw","createEditor","selector","content","html","config","onCreated","emit","onChange","editorHtml","getHtml","onDestroyed","onMaxLength","onFocus","onBlur","customAlert","info","customPaste","event","res","val","setHtml","newHtml","onMounted","onUnmounted","destroy","watch","newVal","watchEffect","disable","enable","h","class"],"mappings":"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"}