qidian-vue-ui 1.2.64 → 1.2.65
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/md-editor/index.vue.d.ts +6 -5
- package/dist/components/md-editor/index.vue.mjs +1 -1
- package/dist/components/md-editor/index.vue2.mjs +87 -3
- package/dist/components/md-editor/index.vue2.mjs.map +1 -1
- package/dist/components/md-editor/index2.css +12 -12
- package/dist/components/md-editor/props.d.ts +1 -1
- package/dist/components/md-editor/props.mjs +1 -1
- package/dist/components/md-editor/props.mjs.map +1 -1
- package/dist/components/md-editor/types.d.ts +8 -2
- package/package.json +1 -1
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { UploadImgEvent } from 'md-editor-v3';
|
|
1
2
|
import type { QdMdEditorProps } from './types';
|
|
2
3
|
declare var __VLS_8: string | number, __VLS_9: any;
|
|
3
4
|
type __VLS_Slots = {} & {
|
|
@@ -20,7 +21,7 @@ declare const __VLS_component: import("vue").DefineComponent<QdMdEditorProps, {
|
|
|
20
21
|
pageFullscreen: boolean;
|
|
21
22
|
htmlPreview: boolean;
|
|
22
23
|
onSave: import("md-editor-v3").SaveEvent;
|
|
23
|
-
onUploadImg: import("md-editor-v3").UploadImgEvent;
|
|
24
|
+
onUploadImg: import("md-editor-v3/lib/types/MdEditor/type").UploadImgEvent;
|
|
24
25
|
onHtmlChanged: import("md-editor-v3").HtmlChangedEvent;
|
|
25
26
|
onGetCatalog: import("md-editor-v3").GetCatalogEvent;
|
|
26
27
|
oninputBoxWidthChange: (width: string) => void;
|
|
@@ -126,7 +127,7 @@ declare const __VLS_component: import("vue").DefineComponent<QdMdEditorProps, {
|
|
|
126
127
|
readonly onError?: import("md-editor-v3").ErrorEvent | undefined;
|
|
127
128
|
readonly id?: string | undefined;
|
|
128
129
|
readonly onSave?: import("md-editor-v3").SaveEvent | undefined;
|
|
129
|
-
readonly onUploadImg?:
|
|
130
|
+
readonly onUploadImg?: UploadImgEvent | undefined;
|
|
130
131
|
readonly defToolbars?: string | import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
131
132
|
[key: string]: any;
|
|
132
133
|
}> | undefined;
|
|
@@ -176,7 +177,7 @@ declare const __VLS_component: import("vue").DefineComponent<QdMdEditorProps, {
|
|
|
176
177
|
default: undefined;
|
|
177
178
|
};
|
|
178
179
|
onUploadImg: {
|
|
179
|
-
type: import("vue").PropType<import("md-editor-v3").UploadImgEvent>;
|
|
180
|
+
type: import("vue").PropType<import("md-editor-v3/lib/types/MdEditor/type").UploadImgEvent>;
|
|
180
181
|
default: undefined;
|
|
181
182
|
};
|
|
182
183
|
pageFullscreen: {
|
|
@@ -451,7 +452,7 @@ declare const __VLS_component: import("vue").DefineComponent<QdMdEditorProps, {
|
|
|
451
452
|
pageFullscreen: boolean;
|
|
452
453
|
htmlPreview: boolean;
|
|
453
454
|
onSave: import("md-editor-v3").SaveEvent;
|
|
454
|
-
onUploadImg: import("md-editor-v3").UploadImgEvent;
|
|
455
|
+
onUploadImg: import("md-editor-v3/lib/types/MdEditor/type").UploadImgEvent;
|
|
455
456
|
onHtmlChanged: import("md-editor-v3").HtmlChangedEvent;
|
|
456
457
|
onGetCatalog: import("md-editor-v3").GetCatalogEvent;
|
|
457
458
|
oninputBoxWidthChange: (width: string) => void;
|
|
@@ -538,7 +539,7 @@ declare const __VLS_component: import("vue").DefineComponent<QdMdEditorProps, {
|
|
|
538
539
|
pageFullscreen: boolean;
|
|
539
540
|
htmlPreview: boolean;
|
|
540
541
|
onSave: import("md-editor-v3").SaveEvent;
|
|
541
|
-
onUploadImg: import("md-editor-v3").UploadImgEvent;
|
|
542
|
+
onUploadImg: import("md-editor-v3/lib/types/MdEditor/type").UploadImgEvent;
|
|
542
543
|
onHtmlChanged: import("md-editor-v3").HtmlChangedEvent;
|
|
543
544
|
onGetCatalog: import("md-editor-v3").GetCatalogEvent;
|
|
544
545
|
oninputBoxWidthChange: (width: string) => void;
|
|
@@ -4,7 +4,7 @@ import _sfc_main from "./index.vue2.mjs";
|
|
|
4
4
|
/* empty css */
|
|
5
5
|
/* empty css */
|
|
6
6
|
import _export_sfc from "../../_virtual/_plugin-vue_export-helper.mjs";
|
|
7
|
-
const index = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-
|
|
7
|
+
const index = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-c64f497c"]]);
|
|
8
8
|
export {
|
|
9
9
|
index as default
|
|
10
10
|
};
|
|
@@ -3,8 +3,9 @@ import './index.css'
|
|
|
3
3
|
import { defineComponent, mergeDefaults, computed, inject, ref, useTemplateRef, createBlock, openBlock, unref, mergeProps, createSlots, renderList, withCtx, renderSlot, normalizeProps, guardReactiveProps } from "vue";
|
|
4
4
|
import { useVModels } from "../../node_modules/.pnpm/@vueuse_core@14.2.0_vue@3.5.26_typescript@5.9.3_/node_modules/@vueuse/core/dist/index.mjs";
|
|
5
5
|
import { MdEditor } from "md-editor-v3";
|
|
6
|
-
import { createExposeProxy } from "qidian-shared";
|
|
6
|
+
import { to, createExposeProxy } from "qidian-shared";
|
|
7
7
|
import { FormItemInjectionKey } from "tdesign-vue-next/es/form/constants";
|
|
8
|
+
import { PROVIDE_UPLOAD } from "../config-provider/config.mjs";
|
|
8
9
|
import { setupMdEditorConfig } from "./config.mjs";
|
|
9
10
|
import { qdMdEditorToolbars, qdMdEditorProps } from "./props.mjs";
|
|
10
11
|
import { useLocale } from "../../hooks/useLocale.mjs";
|
|
@@ -76,7 +77,14 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
76
77
|
autoFoldThreshold: {},
|
|
77
78
|
onRemount: { type: Function },
|
|
78
79
|
disabledEcharts: { type: Boolean },
|
|
79
|
-
previewComponent: {}
|
|
80
|
+
previewComponent: {},
|
|
81
|
+
action: { type: [String, Function] },
|
|
82
|
+
bucketConfigKey: {},
|
|
83
|
+
headers: {},
|
|
84
|
+
method: {},
|
|
85
|
+
name: {},
|
|
86
|
+
requestMethod: { type: Function },
|
|
87
|
+
formatResponse: { type: Function }
|
|
80
88
|
}, qdMdEditorProps),
|
|
81
89
|
emits: ["update:modelValue"],
|
|
82
90
|
setup(__props, { expose: __expose, emit: __emit }) {
|
|
@@ -95,6 +103,10 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
95
103
|
const tdTheme = useTheme();
|
|
96
104
|
const tdLocale = useLocale();
|
|
97
105
|
const focus = ref(false);
|
|
106
|
+
const globalUploadProps = inject(
|
|
107
|
+
PROVIDE_UPLOAD,
|
|
108
|
+
computed(() => void 0)
|
|
109
|
+
);
|
|
98
110
|
const reProps = computed(() => {
|
|
99
111
|
const {
|
|
100
112
|
modelValue: modelValue2,
|
|
@@ -113,6 +125,14 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
113
125
|
disabledPrettier,
|
|
114
126
|
disabledUploadImg,
|
|
115
127
|
locale,
|
|
128
|
+
onUploadImg,
|
|
129
|
+
action,
|
|
130
|
+
bucketConfigKey,
|
|
131
|
+
headers,
|
|
132
|
+
method,
|
|
133
|
+
name,
|
|
134
|
+
requestMethod,
|
|
135
|
+
formatResponse,
|
|
116
136
|
...mdEditorOptions
|
|
117
137
|
} = props;
|
|
118
138
|
const reReadonly = readonly ?? tdReadonly.value;
|
|
@@ -148,17 +168,81 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
148
168
|
noUploadImg: reDisabledUploadImg,
|
|
149
169
|
maxLength: maxlength,
|
|
150
170
|
onFocus: reOnFocus,
|
|
151
|
-
onBlur: reOnBlur
|
|
171
|
+
onBlur: reOnBlur,
|
|
172
|
+
onUploadImg: onUploadImg || uploadImg
|
|
152
173
|
};
|
|
174
|
+
const uploadOptions = {
|
|
175
|
+
action,
|
|
176
|
+
bucketConfigKey,
|
|
177
|
+
headers,
|
|
178
|
+
method,
|
|
179
|
+
name,
|
|
180
|
+
requestMethod,
|
|
181
|
+
formatResponse
|
|
182
|
+
};
|
|
183
|
+
const globalUploadPropsV = globalUploadProps.value;
|
|
184
|
+
if (globalUploadPropsV) {
|
|
185
|
+
Object.entries(globalUploadPropsV).forEach(([key, value]) => {
|
|
186
|
+
uploadOptions[key] = value;
|
|
187
|
+
});
|
|
188
|
+
}
|
|
153
189
|
return {
|
|
154
190
|
readonly: reReadonly,
|
|
155
191
|
disabled: reDisabled,
|
|
156
192
|
mdEditorOptions: reMdEditorOptions,
|
|
193
|
+
uploadOptions,
|
|
157
194
|
models: {
|
|
158
195
|
modelValue: modelValue2
|
|
159
196
|
}
|
|
160
197
|
};
|
|
161
198
|
});
|
|
199
|
+
const uploadImg = async (files, callBack) => {
|
|
200
|
+
const {
|
|
201
|
+
action,
|
|
202
|
+
bucketConfigKey,
|
|
203
|
+
headers,
|
|
204
|
+
method,
|
|
205
|
+
name: fieldName,
|
|
206
|
+
requestMethod,
|
|
207
|
+
formatResponse
|
|
208
|
+
} = reProps.value.uploadOptions;
|
|
209
|
+
if (requestMethod) {
|
|
210
|
+
const urls2 = [];
|
|
211
|
+
for (const file of files) {
|
|
212
|
+
const res = await requestMethod(file);
|
|
213
|
+
const url = res?.response?.url;
|
|
214
|
+
if (url) urls2.push(url);
|
|
215
|
+
}
|
|
216
|
+
callBack(urls2);
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
if (!action) return;
|
|
220
|
+
const actionUrl = typeof action === "string" ? action : action(bucketConfigKey);
|
|
221
|
+
const field = fieldName || "file";
|
|
222
|
+
const defaultFormatResponse = (res) => {
|
|
223
|
+
if (res.code === 200) {
|
|
224
|
+
const { url } = res.data || {};
|
|
225
|
+
return { url };
|
|
226
|
+
}
|
|
227
|
+
return {};
|
|
228
|
+
};
|
|
229
|
+
const doFormat = formatResponse || defaultFormatResponse;
|
|
230
|
+
const urls = [];
|
|
231
|
+
for (const file of files) {
|
|
232
|
+
const formData = new FormData();
|
|
233
|
+
formData.append(field, file);
|
|
234
|
+
const [err, res] = await to(
|
|
235
|
+
fetch(actionUrl, {
|
|
236
|
+
method: method || "POST",
|
|
237
|
+
headers,
|
|
238
|
+
body: formData
|
|
239
|
+
}).then((r) => r.json())
|
|
240
|
+
);
|
|
241
|
+
const formatted = doFormat(err ?? res);
|
|
242
|
+
if (formatted.url) urls.push(formatted.url);
|
|
243
|
+
}
|
|
244
|
+
callBack(urls);
|
|
245
|
+
};
|
|
162
246
|
const editorRef = useTemplateRef("editor");
|
|
163
247
|
__expose(createExposeProxy({}, editorRef));
|
|
164
248
|
return (_ctx, _cache) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.vue2.mjs","sources":["../../../src/components/md-editor/index.vue"],"sourcesContent":["<template>\n <md-editor\n ref=\"editor\"\n :key=\"`${reProps.readonly ? 'readonly' : 'editable'}-${reProps.mdEditorOptions.preview}-${reProps.mdEditorOptions.htmlPreview}-${reProps.mdEditorOptions.pageFullscreen}`\"\n v-model=\"reModelValue\"\n :class=\"[\n 'qd-md-editor',\n focus ? 'qd-md-editor--focus' : '',\n reProps.disabled ? 'qd-md-editor--disabled' : ''\n ]\"\n :read-only=\"reProps.readonly\"\n :disabled=\"reProps.disabled\"\n v-bind=\"reProps.mdEditorOptions\"\n >\n <template v-for=\"(_, name) in $slots\" #[name]=\"slotProps\">\n <slot :name=\"name\" v-bind=\"slotProps\" />\n </template>\n </md-editor>\n</template>\n\n<script setup lang=\"ts\">\n // TODO 图片上传\n // TODO 文件上传\n import { useVModels } from '@vueuse/core'\n import type { EditorProps } from 'md-editor-v3'\n import { MdEditor } from 'md-editor-v3'\n import { createExposeProxy } from 'qidian-shared'\n import { FormItemInjectionKey } from 'tdesign-vue-next/es/form/constants'\n import { computed, inject, ref, useTemplateRef } from 'vue'\n\n import { useDisabled, useLocale, useReadonly, useTheme } from '../../hooks'\n import { setupMdEditorConfig } from './config'\n import { qdMdEditorProps, qdMdEditorToolbars } from './props'\n import type { QdMdEditorProps } from './types'\n\n defineOptions({\n name: 'QdMdEditor'\n })\n\n setupMdEditorConfig()\n\n const props = withDefaults(defineProps<QdMdEditorProps>(), qdMdEditorProps)\n const emit = defineEmits<{\n 'update:modelValue': [QdMdEditorProps['modelValue']]\n }>()\n const { modelValue } = useVModels(props, emit, { passive: true })\n const reModelValue = computed({\n get: () => modelValue.value ?? '', // 防止 md-editor 报错\n set: (val) => (modelValue.value = val)\n })\n\n const tdReadonly = useReadonly()\n const tdDisabled = useDisabled()\n const tdFormItem = inject(FormItemInjectionKey, undefined)\n const tdTheme = useTheme()\n const tdLocale = useLocale()\n const focus = ref(false)\n\n const reProps = computed(() => {\n const {\n modelValue,\n readonly,\n disabled,\n maxlength,\n toolbars,\n theme,\n onFocus,\n onBlur,\n disabledEcharts,\n disabledHighlight,\n disabledImgZoomIn,\n disabledKatex,\n disabledMermaid,\n disabledPrettier,\n disabledUploadImg,\n locale,\n ...mdEditorOptions\n } = props\n\n const reReadonly = readonly ?? tdReadonly.value\n const reDisabled = disabled ?? tdDisabled.value\n\n const reOnFocus: typeof onFocus = (evt) => {\n focus.value = true\n onFocus?.(evt)\n }\n\n const reOnBlur: typeof onBlur = (evt) => {\n focus.value = false\n tdFormItem?.handleBlur()\n onBlur?.(evt)\n }\n\n const reToolbars =\n reReadonly || reDisabled\n ? ['=', 'pageFullscreen', 'preview']\n : (toolbars ?? [...qdMdEditorToolbars])\n\n const reDisabledUploadImg = disabledUploadImg ?? true\n if (reDisabledUploadImg) {\n const imgIdx = reToolbars.findIndex((item) => item === 'image')\n if (imgIdx > -1) reToolbars.splice(imgIdx, 1)\n }\n\n const reMdEditorOptions = {\n ...mdEditorOptions,\n theme: tdTheme.value,\n language: tdLocale.value,\n codeTheme: 'github',\n previewTheme: 'github',\n toolbars: reToolbars,\n noEcharts: disabledEcharts,\n noHighlight: disabledHighlight,\n noImgZoomIn: disabledImgZoomIn,\n noKatex: disabledKatex,\n noMermaid: disabledMermaid,\n noPrettier: disabledPrettier,\n noUploadImg: reDisabledUploadImg,\n maxLength: maxlength,\n onFocus: reOnFocus,\n onBlur: reOnBlur\n } as unknown as Omit<EditorProps, 'modelValue' | 'readOnly' | 'disabled'>\n\n return {\n readonly: reReadonly,\n disabled: reDisabled,\n mdEditorOptions: reMdEditorOptions,\n models: {\n modelValue\n }\n }\n })\n\n const editorRef = useTemplateRef('editor')\n\n defineExpose(createExposeProxy({}, editorRef))\n</script>\n\n<style lang=\"less\">\n @import 'md-editor-v3/lib/style.css';\n @import 'katex/dist/katex.min.css';\n @import 'cropperjs/dist/cropper.css';\n @import 'highlight.js/styles/github.css';\n</style>\n\n<style lang=\"less\" scoped>\n .qd-md-editor {\n --md-color: var(--td-text-color-primary);\n --md-border-color: var(--td-border-level-2-color);\n --md-bk-color: var(--td-bg-color-specialcomponent);\n --md-bk-hover-color: var(--td-bg-color-container-hover);\n height: 100%;\n border-radius: var(--td-radius-default);\n transition:\n border cubic-bezier(0.38, 0, 0.24, 1) 0.2s,\n box-shadow cubic-bezier(0.38, 0, 0.24, 1) 0.2s,\n background-color cubic-bezier(0.38, 0, 0.24, 1) 0.2s,\n -webkit-box-shadow cubic-bezier(0.38, 0, 0.24, 1) 0.2s;\n\n &:hover {\n border-color: var(--td-brand-color);\n }\n\n &.qd-md-editor--focus {\n border-color: var(--td-brand-color);\n box-shadow: 0 0 0 2px var(--td-brand-color-focus);\n }\n\n &.qd-md-editor--disabled {\n color: var(--td-text-color-disabled);\n background-color: var(--td-bg-color-component-disabled);\n cursor: not-allowed;\n\n :deep(.cm-editor) {\n background-color: transparent;\n }\n\n &:hover {\n border-color: var(--td-border-level-2-color);\n }\n }\n\n :deep(.md-editor) {\n &-preview {\n padding: var(--td-comp-paddingLR-s);\n }\n }\n\n :deep(.cm-editor) {\n font: var(--td-font-body-medium);\n }\n\n :deep(.cm-scroller) {\n line-height: inherit !important;\n }\n\n :deep(.cm-content) {\n margin: 0 !important;\n padding: var(--td-comp-paddingLR-s);\n }\n }\n\n .t-is-error .qd-md-editor {\n border-color: var(--td-error-color);\n\n &--focus {\n box-shadow: 0 0 0 2px var(--td-error-color-focus);\n }\n }\n</style>\n"],"names":["modelValue","_openBlock","_createBlock","_unref","_mergeProps","_createSlots","$slots","_withCtx","_renderSlot","_normalizeProps","_guardReactiveProps"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.vue2.mjs","sources":["../../../src/components/md-editor/index.vue"],"sourcesContent":["<template>\n <md-editor\n ref=\"editor\"\n :key=\"`${reProps.readonly ? 'readonly' : 'editable'}-${reProps.mdEditorOptions.preview}-${reProps.mdEditorOptions.htmlPreview}-${reProps.mdEditorOptions.pageFullscreen}`\"\n v-model=\"reModelValue\"\n :class=\"[\n 'qd-md-editor',\n focus ? 'qd-md-editor--focus' : '',\n reProps.disabled ? 'qd-md-editor--disabled' : ''\n ]\"\n :read-only=\"reProps.readonly\"\n :disabled=\"reProps.disabled\"\n v-bind=\"reProps.mdEditorOptions\"\n >\n <template v-for=\"(_, name) in $slots\" #[name]=\"slotProps\">\n <slot :name=\"name\" v-bind=\"slotProps\" />\n </template>\n </md-editor>\n</template>\n\n<script setup lang=\"ts\">\n // TODO 文件上传\n import { useVModels } from '@vueuse/core'\n import type { EditorProps, UploadImgEvent } from 'md-editor-v3'\n import { MdEditor } from 'md-editor-v3'\n import { createExposeProxy, to } from 'qidian-shared'\n import { FormItemInjectionKey } from 'tdesign-vue-next/es/form/constants'\n import { computed, inject, ref, useTemplateRef } from 'vue'\n\n import { useDisabled, useLocale, useReadonly, useTheme } from '../../hooks'\n import { PROVIDE_UPLOAD } from '../config-provider/config'\n import { setupMdEditorConfig } from './config'\n import { qdMdEditorProps, qdMdEditorToolbars } from './props'\n import type { QdMdEditorProps } from './types'\n\n defineOptions({\n name: 'QdMdEditor'\n })\n\n setupMdEditorConfig()\n\n const props = withDefaults(defineProps<QdMdEditorProps>(), qdMdEditorProps)\n const emit = defineEmits<{\n 'update:modelValue': [QdMdEditorProps['modelValue']]\n }>()\n const { modelValue } = useVModels(props, emit, { passive: true })\n const reModelValue = computed({\n get: () => modelValue.value ?? '', // 防止 md-editor 报错\n set: (val) => (modelValue.value = val)\n })\n\n const tdReadonly = useReadonly()\n const tdDisabled = useDisabled()\n const tdFormItem = inject(FormItemInjectionKey, undefined)\n const tdTheme = useTheme()\n const tdLocale = useLocale()\n const focus = ref(false)\n\n const globalUploadProps = inject(\n PROVIDE_UPLOAD,\n computed(() => undefined)\n )\n\n const reProps = computed(() => {\n const {\n modelValue,\n readonly,\n disabled,\n maxlength,\n toolbars,\n theme,\n onFocus,\n onBlur,\n disabledEcharts,\n disabledHighlight,\n disabledImgZoomIn,\n disabledKatex,\n disabledMermaid,\n disabledPrettier,\n disabledUploadImg,\n locale,\n onUploadImg,\n action,\n bucketConfigKey,\n headers,\n method,\n name,\n requestMethod,\n formatResponse,\n ...mdEditorOptions\n } = props\n\n const reReadonly = readonly ?? tdReadonly.value\n const reDisabled = disabled ?? tdDisabled.value\n\n const reOnFocus: typeof onFocus = (evt) => {\n focus.value = true\n onFocus?.(evt)\n }\n\n const reOnBlur: typeof onBlur = (evt) => {\n focus.value = false\n tdFormItem?.handleBlur()\n onBlur?.(evt)\n }\n\n const reToolbars =\n reReadonly || reDisabled\n ? ['=', 'pageFullscreen', 'preview']\n : (toolbars ?? [...qdMdEditorToolbars])\n\n const reDisabledUploadImg = disabledUploadImg ?? true\n if (reDisabledUploadImg) {\n const imgIdx = reToolbars.findIndex((item) => item === 'image')\n if (imgIdx > -1) reToolbars.splice(imgIdx, 1)\n }\n\n const reMdEditorOptions = {\n ...mdEditorOptions,\n theme: tdTheme.value,\n language: tdLocale.value,\n codeTheme: 'github',\n previewTheme: 'github',\n toolbars: reToolbars,\n noEcharts: disabledEcharts,\n noHighlight: disabledHighlight,\n noImgZoomIn: disabledImgZoomIn,\n noKatex: disabledKatex,\n noMermaid: disabledMermaid,\n noPrettier: disabledPrettier,\n noUploadImg: reDisabledUploadImg,\n maxLength: maxlength,\n onFocus: reOnFocus,\n onBlur: reOnBlur,\n onUploadImg: onUploadImg || uploadImg\n } as unknown as Omit<EditorProps, 'modelValue' | 'readOnly' | 'disabled'>\n\n const uploadOptions = {\n action,\n bucketConfigKey,\n headers,\n method,\n name,\n requestMethod,\n formatResponse\n }\n const globalUploadPropsV = globalUploadProps.value\n if (globalUploadPropsV) {\n Object.entries(globalUploadPropsV).forEach(([key, value]) => {\n ;(uploadOptions as Record<string, unknown>)[key] = value\n })\n }\n\n return {\n readonly: reReadonly,\n disabled: reDisabled,\n mdEditorOptions: reMdEditorOptions,\n uploadOptions,\n models: {\n modelValue\n }\n }\n })\n\n const uploadImg: UploadImgEvent = async (files, callBack) => {\n const {\n action,\n bucketConfigKey,\n headers,\n method,\n name: fieldName,\n requestMethod,\n formatResponse\n } = reProps.value.uploadOptions\n\n if (requestMethod) {\n const urls: string[] = []\n for (const file of files) {\n const res = await requestMethod(file as any)\n const url = res?.response?.url\n if (url) urls.push(url)\n }\n\n callBack(urls)\n return\n }\n\n if (!action) return\n\n const actionUrl = typeof action === 'string' ? action : action(bucketConfigKey)\n const field = fieldName || 'file'\n\n const defaultFormatResponse = (res: any) => {\n if (res.code === 200) {\n const { url } = res.data || {}\n return { url }\n }\n return {}\n }\n\n const doFormat = formatResponse || defaultFormatResponse\n const urls: string[] = []\n\n for (const file of files) {\n const formData = new FormData()\n formData.append(field, file)\n\n const [err, res] = await to(\n fetch(actionUrl, {\n method: method || 'POST',\n headers,\n body: formData\n }).then((r) => r.json())\n )\n\n const formatted = doFormat(err ?? res)\n if (formatted.url) urls.push(formatted.url)\n }\n\n callBack(urls)\n }\n\n const editorRef = useTemplateRef('editor')\n\n defineExpose(createExposeProxy({}, editorRef))\n</script>\n\n<style lang=\"less\">\n @import 'md-editor-v3/lib/style.css';\n @import 'katex/dist/katex.min.css';\n @import 'cropperjs/dist/cropper.css';\n @import 'highlight.js/styles/github.css';\n</style>\n\n<style lang=\"less\" scoped>\n .qd-md-editor {\n --md-color: var(--td-text-color-primary);\n --md-border-color: var(--td-border-level-2-color);\n --md-bk-color: var(--td-bg-color-specialcomponent);\n --md-bk-hover-color: var(--td-bg-color-container-hover);\n height: 100%;\n border-radius: var(--td-radius-default);\n transition:\n border cubic-bezier(0.38, 0, 0.24, 1) 0.2s,\n box-shadow cubic-bezier(0.38, 0, 0.24, 1) 0.2s,\n background-color cubic-bezier(0.38, 0, 0.24, 1) 0.2s,\n -webkit-box-shadow cubic-bezier(0.38, 0, 0.24, 1) 0.2s;\n\n &:hover {\n border-color: var(--td-brand-color);\n }\n\n &.qd-md-editor--focus {\n border-color: var(--td-brand-color);\n box-shadow: 0 0 0 2px var(--td-brand-color-focus);\n }\n\n &.qd-md-editor--disabled {\n color: var(--td-text-color-disabled);\n background-color: var(--td-bg-color-component-disabled);\n cursor: not-allowed;\n\n :deep(.cm-editor) {\n background-color: transparent;\n }\n\n &:hover {\n border-color: var(--td-border-level-2-color);\n }\n }\n\n :deep(.md-editor) {\n &-preview {\n padding: var(--td-comp-paddingLR-s);\n }\n }\n\n :deep(.cm-editor) {\n font: var(--td-font-body-medium);\n }\n\n :deep(.cm-scroller) {\n line-height: inherit !important;\n }\n\n :deep(.cm-content) {\n margin: 0 !important;\n padding: var(--td-comp-paddingLR-s);\n }\n }\n\n .t-is-error .qd-md-editor {\n border-color: var(--td-error-color);\n\n &--focus {\n box-shadow: 0 0 0 2px var(--td-error-color-focus);\n }\n }\n</style>\n"],"names":["modelValue","urls","_openBlock","_createBlock","_unref","_mergeProps","_createSlots","$slots","_withCtx","_renderSlot","_normalizeProps","_guardReactiveProps"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.qd-md-editor[data-v-
|
|
1
|
+
.qd-md-editor[data-v-c64f497c] {
|
|
2
2
|
--md-color: var(--td-text-color-primary);
|
|
3
3
|
--md-border-color: var(--td-border-level-2-color);
|
|
4
4
|
--md-bk-color: var(--td-bg-color-specialcomponent);
|
|
@@ -7,40 +7,40 @@
|
|
|
7
7
|
border-radius: var(--td-radius-default);
|
|
8
8
|
transition: border cubic-bezier(0.38, 0, 0.24, 1) 0.2s, box-shadow cubic-bezier(0.38, 0, 0.24, 1) 0.2s, background-color cubic-bezier(0.38, 0, 0.24, 1) 0.2s, -webkit-box-shadow cubic-bezier(0.38, 0, 0.24, 1) 0.2s;
|
|
9
9
|
}
|
|
10
|
-
.qd-md-editor[data-v-
|
|
10
|
+
.qd-md-editor[data-v-c64f497c]:hover {
|
|
11
11
|
border-color: var(--td-brand-color);
|
|
12
12
|
}
|
|
13
|
-
.qd-md-editor.qd-md-editor--focus[data-v-
|
|
13
|
+
.qd-md-editor.qd-md-editor--focus[data-v-c64f497c] {
|
|
14
14
|
border-color: var(--td-brand-color);
|
|
15
15
|
box-shadow: 0 0 0 2px var(--td-brand-color-focus);
|
|
16
16
|
}
|
|
17
|
-
.qd-md-editor.qd-md-editor--disabled[data-v-
|
|
17
|
+
.qd-md-editor.qd-md-editor--disabled[data-v-c64f497c] {
|
|
18
18
|
color: var(--td-text-color-disabled);
|
|
19
19
|
background-color: var(--td-bg-color-component-disabled);
|
|
20
20
|
cursor: not-allowed;
|
|
21
21
|
}
|
|
22
|
-
.qd-md-editor.qd-md-editor--disabled[data-v-
|
|
22
|
+
.qd-md-editor.qd-md-editor--disabled[data-v-c64f497c] .cm-editor {
|
|
23
23
|
background-color: transparent;
|
|
24
24
|
}
|
|
25
|
-
.qd-md-editor.qd-md-editor--disabled[data-v-
|
|
25
|
+
.qd-md-editor.qd-md-editor--disabled[data-v-c64f497c]:hover {
|
|
26
26
|
border-color: var(--td-border-level-2-color);
|
|
27
27
|
}
|
|
28
|
-
.qd-md-editor[data-v-
|
|
28
|
+
.qd-md-editor[data-v-c64f497c] .md-editor-preview {
|
|
29
29
|
padding: var(--td-comp-paddingLR-s);
|
|
30
30
|
}
|
|
31
|
-
.qd-md-editor[data-v-
|
|
31
|
+
.qd-md-editor[data-v-c64f497c] .cm-editor {
|
|
32
32
|
font: var(--td-font-body-medium);
|
|
33
33
|
}
|
|
34
|
-
.qd-md-editor[data-v-
|
|
34
|
+
.qd-md-editor[data-v-c64f497c] .cm-scroller {
|
|
35
35
|
line-height: inherit !important;
|
|
36
36
|
}
|
|
37
|
-
.qd-md-editor[data-v-
|
|
37
|
+
.qd-md-editor[data-v-c64f497c] .cm-content {
|
|
38
38
|
margin: 0 !important;
|
|
39
39
|
padding: var(--td-comp-paddingLR-s);
|
|
40
40
|
}
|
|
41
|
-
.t-is-error .qd-md-editor[data-v-
|
|
41
|
+
.t-is-error .qd-md-editor[data-v-c64f497c] {
|
|
42
42
|
border-color: var(--td-error-color);
|
|
43
43
|
}
|
|
44
|
-
.t-is-error .qd-md-editor--focus[data-v-
|
|
44
|
+
.t-is-error .qd-md-editor--focus[data-v-c64f497c] {
|
|
45
45
|
box-shadow: 0 0 0 2px var(--td-error-color-focus);
|
|
46
46
|
}
|
|
@@ -14,6 +14,6 @@ export declare const qdMdEditorProps: {
|
|
|
14
14
|
readonly codeStyleReverse: true;
|
|
15
15
|
readonly codeFoldable: true;
|
|
16
16
|
readonly autoFoldThreshold: 30;
|
|
17
|
-
readonly disabledUploadImg:
|
|
17
|
+
readonly disabledUploadImg: true;
|
|
18
18
|
};
|
|
19
19
|
export declare const qdMdEditorToolbars: readonly ["bold", "underline", "italic", "-", "title", "strikeThrough", "sub", "sup", "quote", "unorderedList", "orderedList", "task", "-", "codeRow", "code", "link", "image", "table", "katex", "-", "revoke", "next", "=", "pageFullscreen", "preview"];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"props.mjs","sources":["../../../src/components/md-editor/props.ts"],"sourcesContent":["export const qdMdEditorProps = {\n theme: undefined,\n disabled: undefined,\n readonly: undefined,\n disabledPrettier: true,\n preview: true,\n floatingToolbars: () => [],\n toolbarsExclude: () => [],\n tabWidth: 2,\n tableShape: () => [6, 4],\n scrollAuto: true,\n inputBoxWidth: '50%',\n catalogLayout: 'fixed',\n codeStyleReverse: true,\n codeFoldable: true,\n autoFoldThreshold: 30,\n disabledUploadImg:
|
|
1
|
+
{"version":3,"file":"props.mjs","sources":["../../../src/components/md-editor/props.ts"],"sourcesContent":["export const qdMdEditorProps = {\n theme: undefined,\n disabled: undefined,\n readonly: undefined,\n disabledPrettier: true,\n preview: true,\n floatingToolbars: () => [],\n toolbarsExclude: () => [],\n tabWidth: 2,\n tableShape: () => [6, 4],\n scrollAuto: true,\n inputBoxWidth: '50%',\n catalogLayout: 'fixed',\n codeStyleReverse: true,\n codeFoldable: true,\n autoFoldThreshold: 30,\n disabledUploadImg: true\n} as const\n\nexport const qdMdEditorToolbars = [\n 'bold',\n 'underline',\n 'italic',\n '-',\n 'title',\n 'strikeThrough',\n 'sub',\n 'sup',\n 'quote',\n 'unorderedList',\n 'orderedList',\n 'task',\n '-',\n 'codeRow',\n 'code',\n 'link',\n 'image',\n 'table',\n 'katex',\n '-',\n 'revoke',\n 'next',\n '=',\n 'pageFullscreen',\n 'preview'\n] as const\n"],"names":[],"mappings":"AAAO,MAAM,kBAAkB;AAAA,EAC7B,OAAO;AAAA,EACP,UAAU;AAAA,EACV,UAAU;AAAA,EACV,kBAAkB;AAAA,EAClB,SAAS;AAAA,EACT,kBAAkB,MAAM,CAAA;AAAA,EACxB,iBAAiB,MAAM,CAAA;AAAA,EACvB,UAAU;AAAA,EACV,YAAY,MAAM,CAAC,GAAG,CAAC;AAAA,EACvB,YAAY;AAAA,EACZ,eAAe;AAAA,EACf,eAAe;AAAA,EACf,kBAAkB;AAAA,EAClB,cAAc;AAAA,EACd,mBAAmB;AAAA,EACnB,mBAAmB;AACrB;AAEO,MAAM,qBAAqB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { CompletionSource } from '@codemirror/autocomplete';
|
|
2
2
|
import type { ChangeEvent, CustomIcon, Footers, GetCatalogEvent, HtmlChangedEvent, MdHeadingId, SaveEvent, Themes, ToolbarNames, UploadImgEvent } from 'md-editor-v3';
|
|
3
3
|
import type { Component, CSSProperties, VNode } from 'vue';
|
|
4
|
-
|
|
4
|
+
import type { QdUploadProps } from '../upload/types';
|
|
5
|
+
export type QdMdEditorProps = {
|
|
5
6
|
onSave?: SaveEvent;
|
|
6
7
|
onUploadImg?: UploadImgEvent;
|
|
7
8
|
pageFullscreen?: boolean;
|
|
@@ -62,4 +63,9 @@ export interface QdMdEditorProps {
|
|
|
62
63
|
onRemount?: () => void;
|
|
63
64
|
disabledEcharts?: boolean;
|
|
64
65
|
previewComponent?: Component;
|
|
65
|
-
}
|
|
66
|
+
} & Pick<QdUploadProps, 'action' | 'bucketConfigKey' | 'headers' | 'method' | 'name' | 'requestMethod'> & {
|
|
67
|
+
formatResponse?: (response: any) => {
|
|
68
|
+
url?: string;
|
|
69
|
+
[key: string]: any;
|
|
70
|
+
};
|
|
71
|
+
};
|