@srcker/editor-vue-next 1.0.1
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/.vscode/extensions.json +3 -0
- package/README.md +50 -0
- package/index.html +13 -0
- package/index.ts +11 -0
- package/jsconfig.json +8 -0
- package/package.json +69 -0
- package/public/favicon.ico +0 -0
- package/src/App.vue +9 -0
- package/src/App.vue.js +17 -0
- package/src/Button/BackgroundButton.vue +331 -0
- package/src/Button/BackgroundButton.vue.js +243 -0
- package/src/Button/BlockQuoteButton.vue +26 -0
- package/src/Button/BlockQuoteButton.vue.js +56 -0
- package/src/Button/BoldButton.vue +29 -0
- package/src/Button/BoldButton.vue.js +56 -0
- package/src/Button/BulletListButton.vue +114 -0
- package/src/Button/BulletListButton.vue.js +147 -0
- package/src/Button/CodeBlockButton.vue +28 -0
- package/src/Button/CodeBlockButton.vue.js +56 -0
- package/src/Button/CodeButton.vue +30 -0
- package/src/Button/CodeButton.vue.js +56 -0
- package/src/Button/FontSizeButton.vue +85 -0
- package/src/Button/FontSizeButton.vue.js +131 -0
- package/src/Button/FormatButton.vue +25 -0
- package/src/Button/FormatButton.vue.js +54 -0
- package/src/Button/HeadingButton.vue +103 -0
- package/src/Button/HeadingButton.vue.js +164 -0
- package/src/Button/ImageUploadButton.vue +93 -0
- package/src/Button/ImageUploadButton.vue.js +123 -0
- package/src/Button/IndentLeftButton.vue +25 -0
- package/src/Button/IndentLeftButton.vue.js +54 -0
- package/src/Button/IndentRightButton.vue +29 -0
- package/src/Button/IndentRightButton.vue.js +54 -0
- package/src/Button/ItalicButton.vue +29 -0
- package/src/Button/ItalicButton.vue.js +56 -0
- package/src/Button/LineHeightButton.vue +88 -0
- package/src/Button/LineHeightButton.vue.js +131 -0
- package/src/Button/LinkButton.vue +44 -0
- package/src/Button/LinkButton.vue.js +69 -0
- package/src/Button/OrderedListButton.vue +121 -0
- package/src/Button/OrderedListButton.vue.js +146 -0
- package/src/Button/RedoButton.vue +29 -0
- package/src/Button/RedoButton.vue.js +55 -0
- package/src/Button/StrikeButton.vue +30 -0
- package/src/Button/StrikeButton.vue.js +56 -0
- package/src/Button/SubscriptButton.vue +29 -0
- package/src/Button/SubscriptButton.vue.js +56 -0
- package/src/Button/SuperscriptButton.vue +29 -0
- package/src/Button/SuperscriptButton.vue.js +56 -0
- package/src/Button/TextAlignCenterButton.vue +26 -0
- package/src/Button/TextAlignCenterButton.vue.js +56 -0
- package/src/Button/TextAlignLeftButton.vue +26 -0
- package/src/Button/TextAlignLeftButton.vue.js +56 -0
- package/src/Button/TextAlignRightButton.vue +26 -0
- package/src/Button/TextAlignRightButton.vue.js +56 -0
- package/src/Button/TextColorButton.vue +329 -0
- package/src/Button/TextColorButton.vue.js +243 -0
- package/src/Button/ThemeButton.vue +34 -0
- package/src/Button/ThemeButton.vue.js +63 -0
- package/src/Button/UnderLineButton.vue +29 -0
- package/src/Button/UnderLineButton.vue.js +56 -0
- package/src/Button/UndoButton.vue +29 -0
- package/src/Button/UndoButton.vue.js +55 -0
- package/src/Components/IconArrow.vue +16 -0
- package/src/Components/IconArrow.vue.js +30 -0
- package/src/Components/IconCheck.vue +40 -0
- package/src/Components/IconCheck.vue.js +59 -0
- package/src/EditorToolbar.vue +150 -0
- package/src/EditorToolbar.vue.js +306 -0
- package/src/Extensions/BulletListStyle.js +19 -0
- package/src/Extensions/BulletListStyle.ts +24 -0
- package/src/Extensions/FontSize.js +27 -0
- package/src/Extensions/FontSize.ts +37 -0
- package/src/Extensions/Indent.js +58 -0
- package/src/Extensions/Indent.ts +73 -0
- package/src/Extensions/OrderedListStyle.js +19 -0
- package/src/Extensions/OrderedListStyle.ts +24 -0
- package/src/Extensions/UploadImage.js +18 -0
- package/src/Extensions/UploadImage.ts +22 -0
- package/src/Extensions/shims.d.ts +26 -0
- package/src/RichEditor.vue +191 -0
- package/src/RichEditor.vue.js +199 -0
- package/src/env.d.ts +7 -0
- package/src/index.js +6 -0
- package/src/index.ts +11 -0
- package/src/main.js +4 -0
- package/src/main.ts +7 -0
- package/src/styles/style.scss +196 -0
- package/src/styles/theme.css +28 -0
- package/src/styles/variables.css +158 -0
- package/src/styles/variables.scss +175 -0
- package/src/types.js +1 -0
- package/src/types.ts +7 -0
- package/tsconfig.json +17 -0
- package/vite.config.ts +29 -0
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { ref, computed, onMounted, onBeforeUnmount } from 'vue';
|
|
2
|
+
const isOpen = ref(false);
|
|
3
|
+
const wrapperRef = ref(null);
|
|
4
|
+
const sizes = { 1: '24px', 2: '20px', 3: '18px', 4: '16px', 5: '14px' };
|
|
5
|
+
const setHeading = (level) => {
|
|
6
|
+
props.editor.chain().focus().toggleHeading({ level: level }).run();
|
|
7
|
+
isOpen.value = false;
|
|
8
|
+
};
|
|
9
|
+
const setParagraph = () => {
|
|
10
|
+
props.editor.chain().focus().setParagraph().run();
|
|
11
|
+
isOpen.value = false;
|
|
12
|
+
};
|
|
13
|
+
const headingLabel = computed(() => {
|
|
14
|
+
if (!props.editor)
|
|
15
|
+
return '正文';
|
|
16
|
+
for (let i = 1; i <= 5; i++) {
|
|
17
|
+
if (props.editor.isActive('heading', { level: i })) {
|
|
18
|
+
return `标题${i}`;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return '正文';
|
|
22
|
+
});
|
|
23
|
+
const props = defineProps({
|
|
24
|
+
editor: {
|
|
25
|
+
type: Object,
|
|
26
|
+
required: true
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
const handleClickOutside = (e) => {
|
|
30
|
+
if (!wrapperRef.value)
|
|
31
|
+
return;
|
|
32
|
+
if (!wrapperRef.value.contains(e.target)) {
|
|
33
|
+
isOpen.value = false;
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
onMounted(() => {
|
|
37
|
+
document.addEventListener('mousedown', handleClickOutside);
|
|
38
|
+
});
|
|
39
|
+
onBeforeUnmount(() => {
|
|
40
|
+
document.removeEventListener('mousedown', handleClickOutside);
|
|
41
|
+
});
|
|
42
|
+
const __VLS_ctx = {
|
|
43
|
+
...{},
|
|
44
|
+
...{},
|
|
45
|
+
...{},
|
|
46
|
+
...{},
|
|
47
|
+
};
|
|
48
|
+
let __VLS_components;
|
|
49
|
+
let __VLS_intrinsics;
|
|
50
|
+
let __VLS_directives;
|
|
51
|
+
__VLS_asFunctionalElement1(__VLS_intrinsics.div, __VLS_intrinsics.div)({
|
|
52
|
+
...{ class: "dropdown-button heading-button" },
|
|
53
|
+
ref: "wrapperRef",
|
|
54
|
+
...{ class: ({ 'is-open': __VLS_ctx.isOpen }) },
|
|
55
|
+
});
|
|
56
|
+
/** @type {__VLS_StyleScopedClasses['dropdown-button']} */ ;
|
|
57
|
+
/** @type {__VLS_StyleScopedClasses['heading-button']} */ ;
|
|
58
|
+
/** @type {__VLS_StyleScopedClasses['is-open']} */ ;
|
|
59
|
+
__VLS_asFunctionalElement1(__VLS_intrinsics.div, __VLS_intrinsics.div)({
|
|
60
|
+
...{ onClick: (...[$event]) => {
|
|
61
|
+
__VLS_ctx.isOpen = !__VLS_ctx.isOpen;
|
|
62
|
+
// @ts-ignore
|
|
63
|
+
[isOpen, isOpen, isOpen,];
|
|
64
|
+
} },
|
|
65
|
+
...{ class: "trigger" },
|
|
66
|
+
});
|
|
67
|
+
/** @type {__VLS_StyleScopedClasses['trigger']} */ ;
|
|
68
|
+
__VLS_asFunctionalElement1(__VLS_intrinsics.div, __VLS_intrinsics.div)({
|
|
69
|
+
...{ class: "icon" },
|
|
70
|
+
});
|
|
71
|
+
/** @type {__VLS_StyleScopedClasses['icon']} */ ;
|
|
72
|
+
__VLS_asFunctionalElement1(__VLS_intrinsics.svg, __VLS_intrinsics.svg)({
|
|
73
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
74
|
+
viewBox: "0 0 448 512",
|
|
75
|
+
});
|
|
76
|
+
__VLS_asFunctionalElement1(__VLS_intrinsics.path)({
|
|
77
|
+
fill: "currentColor",
|
|
78
|
+
stroke: "currentColor",
|
|
79
|
+
'stroke-width': "4",
|
|
80
|
+
'stroke-linecap': "round",
|
|
81
|
+
'stroke-linejoin': "round",
|
|
82
|
+
d: "M0 64C0 46.3 14.3 32 32 32l96 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-16 0 0 112 224 0 0-112-16 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l96 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-16 0 0 320 16 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-96 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l16 0 0-144-224 0 0 144 16 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-96 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l16 0 0-320-16 0C14.3 96 0 81.7 0 64z",
|
|
83
|
+
});
|
|
84
|
+
__VLS_asFunctionalElement1(__VLS_intrinsics.span, __VLS_intrinsics.span)({
|
|
85
|
+
...{ class: "label" },
|
|
86
|
+
});
|
|
87
|
+
/** @type {__VLS_StyleScopedClasses['label']} */ ;
|
|
88
|
+
(__VLS_ctx.headingLabel);
|
|
89
|
+
let __VLS_0;
|
|
90
|
+
/** @ts-ignore @type {typeof __VLS_components.transition | typeof __VLS_components.Transition | typeof __VLS_components.transition | typeof __VLS_components.Transition} */
|
|
91
|
+
transition;
|
|
92
|
+
// @ts-ignore
|
|
93
|
+
const __VLS_1 = __VLS_asFunctionalComponent1(__VLS_0, new __VLS_0({
|
|
94
|
+
name: "dropdown",
|
|
95
|
+
}));
|
|
96
|
+
const __VLS_2 = __VLS_1({
|
|
97
|
+
name: "dropdown",
|
|
98
|
+
}, ...__VLS_functionalComponentArgsRest(__VLS_1));
|
|
99
|
+
const { default: __VLS_5 } = __VLS_3.slots;
|
|
100
|
+
__VLS_asFunctionalElement1(__VLS_intrinsics.div, __VLS_intrinsics.div)({
|
|
101
|
+
...{ class: "dropdown" },
|
|
102
|
+
});
|
|
103
|
+
__VLS_asFunctionalDirective(__VLS_directives.vShow, {})(null, { ...__VLS_directiveBindingRestFields, value: (__VLS_ctx.isOpen) }, null, null);
|
|
104
|
+
/** @type {__VLS_StyleScopedClasses['dropdown']} */ ;
|
|
105
|
+
__VLS_asFunctionalElement1(__VLS_intrinsics.div, __VLS_intrinsics.div)({
|
|
106
|
+
...{ onClick: (...[$event]) => {
|
|
107
|
+
__VLS_ctx.setParagraph();
|
|
108
|
+
// @ts-ignore
|
|
109
|
+
[isOpen, headingLabel, setParagraph,];
|
|
110
|
+
} },
|
|
111
|
+
...{ class: "item" },
|
|
112
|
+
...{ class: ({ 'is-selected': __VLS_ctx.editor.isActive('paragraph') }) },
|
|
113
|
+
});
|
|
114
|
+
/** @type {__VLS_StyleScopedClasses['item']} */ ;
|
|
115
|
+
/** @type {__VLS_StyleScopedClasses['is-selected']} */ ;
|
|
116
|
+
__VLS_asFunctionalElement1(__VLS_intrinsics.span, __VLS_intrinsics.span)({
|
|
117
|
+
...{ class: "icon" },
|
|
118
|
+
});
|
|
119
|
+
/** @type {__VLS_StyleScopedClasses['icon']} */ ;
|
|
120
|
+
__VLS_asFunctionalElement1(__VLS_intrinsics.span, __VLS_intrinsics.span)({
|
|
121
|
+
...{ class: "text" },
|
|
122
|
+
});
|
|
123
|
+
/** @type {__VLS_StyleScopedClasses['text']} */ ;
|
|
124
|
+
for (const [level] of __VLS_vFor(([1, 2, 3, 4, 5]))) {
|
|
125
|
+
__VLS_asFunctionalElement1(__VLS_intrinsics.div, __VLS_intrinsics.div)({
|
|
126
|
+
...{ onClick: (...[$event]) => {
|
|
127
|
+
__VLS_ctx.setHeading(level);
|
|
128
|
+
// @ts-ignore
|
|
129
|
+
[editor, setHeading,];
|
|
130
|
+
} },
|
|
131
|
+
...{ class: "item" },
|
|
132
|
+
key: (level),
|
|
133
|
+
...{ class: ({ 'is-selected': __VLS_ctx.editor.isActive('heading', { level }) }) },
|
|
134
|
+
});
|
|
135
|
+
/** @type {__VLS_StyleScopedClasses['item']} */ ;
|
|
136
|
+
/** @type {__VLS_StyleScopedClasses['is-selected']} */ ;
|
|
137
|
+
__VLS_asFunctionalElement1(__VLS_intrinsics.span, __VLS_intrinsics.span)({
|
|
138
|
+
...{ class: "icon" },
|
|
139
|
+
});
|
|
140
|
+
/** @type {__VLS_StyleScopedClasses['icon']} */ ;
|
|
141
|
+
(level);
|
|
142
|
+
__VLS_asFunctionalElement1(__VLS_intrinsics.span, __VLS_intrinsics.span)({
|
|
143
|
+
...{ class: "text" },
|
|
144
|
+
...{ style: ({ fontSize: __VLS_ctx.sizes[level], fontWeight: 'bold' }) },
|
|
145
|
+
});
|
|
146
|
+
/** @type {__VLS_StyleScopedClasses['text']} */ ;
|
|
147
|
+
(level);
|
|
148
|
+
// @ts-ignore
|
|
149
|
+
[editor, sizes,];
|
|
150
|
+
}
|
|
151
|
+
// @ts-ignore
|
|
152
|
+
[];
|
|
153
|
+
var __VLS_3;
|
|
154
|
+
// @ts-ignore
|
|
155
|
+
[];
|
|
156
|
+
const __VLS_export = (await import('vue')).defineComponent({
|
|
157
|
+
props: {
|
|
158
|
+
editor: {
|
|
159
|
+
type: Object,
|
|
160
|
+
required: true
|
|
161
|
+
}
|
|
162
|
+
},
|
|
163
|
+
});
|
|
164
|
+
export default {};
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
|
|
3
|
+
<button class="icon-button image-button" @click="triggerFileSelect" :disabled="isUploading" title="插入图片">
|
|
4
|
+
<input ref="fileInputRef" type="file" accept="image/*" @change="handleFileChange" style="display: none" />
|
|
5
|
+
<div class="icon" v-if="!isUploading">
|
|
6
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512">
|
|
7
|
+
<path fill="currentColor" stroke="currentColor" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" d="M64 80c-8.8 0-16 7.2-16 16l0 320c0 8.8 7.2 16 16 16l320 0c8.8 0 16-7.2 16-16l0-320c0-8.8-7.2-16-16-16L64 80zM0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zm128 32a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm136 72c8.5 0 16.4 4.5 20.7 11.8l80 136c4.4 7.4 4.4 16.6 .1 24.1S352.6 384 344 384l-240 0c-8.9 0-17.2-5-21.3-12.9s-3.5-17.5 1.6-24.8l56-80c4.5-6.4 11.8-10.2 19.7-10.2s15.2 3.8 19.7 10.2l17.2 24.6 46.5-79c4.3-7.3 12.2-11.8 20.7-11.8z"/>
|
|
8
|
+
</svg>
|
|
9
|
+
</div>
|
|
10
|
+
<div class="icon" v-else>
|
|
11
|
+
<svg viewBox="0 0 38 38">
|
|
12
|
+
<circle stroke="currentColor" stroke-width="3" stroke-linecap="round" fill="none" cx="19" cy="19" r="16" stroke-dasharray="45.5 12.5" transform="rotate(10 19 19)">
|
|
13
|
+
<animateTransform attributeName="transform" type="rotate" repeatCount="indefinite" dur="0.6s" values="0 19 19;360 19 19" />
|
|
14
|
+
</circle>
|
|
15
|
+
</svg>
|
|
16
|
+
</div>
|
|
17
|
+
</button>
|
|
18
|
+
</template>
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
<script setup lang="ts">
|
|
22
|
+
import { ref } from 'vue'
|
|
23
|
+
import type { Editor } from '@tiptap/core'
|
|
24
|
+
import { UploadImageResult } from 'src/types';
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
const props = defineProps<{
|
|
28
|
+
editor?: Editor
|
|
29
|
+
uploadImage: (file: File) => Promise<UploadImageResult>
|
|
30
|
+
}>()
|
|
31
|
+
|
|
32
|
+
const emit = defineEmits<{
|
|
33
|
+
(e: 'upload-start'): void
|
|
34
|
+
(e: 'upload-end'): void
|
|
35
|
+
(e: 'error', err: Error): void
|
|
36
|
+
}>()
|
|
37
|
+
|
|
38
|
+
const fileInputRef = ref<HTMLInputElement | null>(null)
|
|
39
|
+
const isUploading = ref(false)
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* 触发文件选择
|
|
43
|
+
*/
|
|
44
|
+
const triggerFileSelect = () => {
|
|
45
|
+
if (!isUploading.value) {
|
|
46
|
+
fileInputRef.value?.click()
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* 文件变更处理
|
|
52
|
+
*/
|
|
53
|
+
const handleFileChange = async (event: Event) => {
|
|
54
|
+
const input = event.target as HTMLInputElement
|
|
55
|
+
const file = input.files?.[0]
|
|
56
|
+
if (!file) return
|
|
57
|
+
|
|
58
|
+
try {
|
|
59
|
+
|
|
60
|
+
isUploading.value = true
|
|
61
|
+
emit('upload-start')
|
|
62
|
+
|
|
63
|
+
const { url, name } = await props.uploadImage(file)
|
|
64
|
+
|
|
65
|
+
props.editor!
|
|
66
|
+
.chain()
|
|
67
|
+
.focus()
|
|
68
|
+
.setImage({
|
|
69
|
+
src: url,
|
|
70
|
+
title: name ?? '',
|
|
71
|
+
alt: name ?? '',
|
|
72
|
+
width: 200,
|
|
73
|
+
})
|
|
74
|
+
.run()
|
|
75
|
+
} catch (err: any) {
|
|
76
|
+
emit('error', err)
|
|
77
|
+
console.error(err)
|
|
78
|
+
} finally {
|
|
79
|
+
isUploading.value = false
|
|
80
|
+
emit('upload-end')
|
|
81
|
+
input.value = ''
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
</script>
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
<style lang="scss" scoped>
|
|
88
|
+
|
|
89
|
+
.image-button {
|
|
90
|
+
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
</style>
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { ref } from 'vue';
|
|
2
|
+
const props = defineProps();
|
|
3
|
+
const emit = defineEmits();
|
|
4
|
+
const fileInputRef = ref(null);
|
|
5
|
+
const isUploading = ref(false);
|
|
6
|
+
/**
|
|
7
|
+
* 触发文件选择
|
|
8
|
+
*/
|
|
9
|
+
const triggerFileSelect = () => {
|
|
10
|
+
if (!isUploading.value) {
|
|
11
|
+
fileInputRef.value?.click();
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* 文件变更处理
|
|
16
|
+
*/
|
|
17
|
+
const handleFileChange = async (event) => {
|
|
18
|
+
const input = event.target;
|
|
19
|
+
const file = input.files?.[0];
|
|
20
|
+
if (!file)
|
|
21
|
+
return;
|
|
22
|
+
try {
|
|
23
|
+
isUploading.value = true;
|
|
24
|
+
emit('upload-start');
|
|
25
|
+
const { url, name } = await props.uploadImage(file);
|
|
26
|
+
props.editor
|
|
27
|
+
.chain()
|
|
28
|
+
.focus()
|
|
29
|
+
.setImage({
|
|
30
|
+
src: url,
|
|
31
|
+
title: name ?? '',
|
|
32
|
+
alt: name ?? '',
|
|
33
|
+
width: 200,
|
|
34
|
+
})
|
|
35
|
+
.run();
|
|
36
|
+
}
|
|
37
|
+
catch (err) {
|
|
38
|
+
emit('error', err);
|
|
39
|
+
console.error(err);
|
|
40
|
+
}
|
|
41
|
+
finally {
|
|
42
|
+
isUploading.value = false;
|
|
43
|
+
emit('upload-end');
|
|
44
|
+
input.value = '';
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
const __VLS_ctx = {
|
|
48
|
+
...{},
|
|
49
|
+
...{},
|
|
50
|
+
...{},
|
|
51
|
+
...{},
|
|
52
|
+
...{},
|
|
53
|
+
};
|
|
54
|
+
let __VLS_components;
|
|
55
|
+
let __VLS_intrinsics;
|
|
56
|
+
let __VLS_directives;
|
|
57
|
+
__VLS_asFunctionalElement1(__VLS_intrinsics.button, __VLS_intrinsics.button)({
|
|
58
|
+
...{ onClick: (__VLS_ctx.triggerFileSelect) },
|
|
59
|
+
...{ class: "icon-button image-button" },
|
|
60
|
+
disabled: (__VLS_ctx.isUploading),
|
|
61
|
+
title: "插入图片",
|
|
62
|
+
});
|
|
63
|
+
/** @type {__VLS_StyleScopedClasses['icon-button']} */ ;
|
|
64
|
+
/** @type {__VLS_StyleScopedClasses['image-button']} */ ;
|
|
65
|
+
__VLS_asFunctionalElement1(__VLS_intrinsics.input)({
|
|
66
|
+
...{ onChange: (__VLS_ctx.handleFileChange) },
|
|
67
|
+
ref: "fileInputRef",
|
|
68
|
+
type: "file",
|
|
69
|
+
accept: "image/*",
|
|
70
|
+
...{ style: {} },
|
|
71
|
+
});
|
|
72
|
+
if (!__VLS_ctx.isUploading) {
|
|
73
|
+
__VLS_asFunctionalElement1(__VLS_intrinsics.div, __VLS_intrinsics.div)({
|
|
74
|
+
...{ class: "icon" },
|
|
75
|
+
});
|
|
76
|
+
/** @type {__VLS_StyleScopedClasses['icon']} */ ;
|
|
77
|
+
__VLS_asFunctionalElement1(__VLS_intrinsics.svg, __VLS_intrinsics.svg)({
|
|
78
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
79
|
+
viewBox: "0 0 448 512",
|
|
80
|
+
});
|
|
81
|
+
__VLS_asFunctionalElement1(__VLS_intrinsics.path)({
|
|
82
|
+
fill: "currentColor",
|
|
83
|
+
stroke: "currentColor",
|
|
84
|
+
'stroke-width': "4",
|
|
85
|
+
'stroke-linecap': "round",
|
|
86
|
+
'stroke-linejoin': "round",
|
|
87
|
+
d: "M64 80c-8.8 0-16 7.2-16 16l0 320c0 8.8 7.2 16 16 16l320 0c8.8 0 16-7.2 16-16l0-320c0-8.8-7.2-16-16-16L64 80zM0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zm128 32a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm136 72c8.5 0 16.4 4.5 20.7 11.8l80 136c4.4 7.4 4.4 16.6 .1 24.1S352.6 384 344 384l-240 0c-8.9 0-17.2-5-21.3-12.9s-3.5-17.5 1.6-24.8l56-80c4.5-6.4 11.8-10.2 19.7-10.2s15.2 3.8 19.7 10.2l17.2 24.6 46.5-79c4.3-7.3 12.2-11.8 20.7-11.8z",
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
__VLS_asFunctionalElement1(__VLS_intrinsics.div, __VLS_intrinsics.div)({
|
|
92
|
+
...{ class: "icon" },
|
|
93
|
+
});
|
|
94
|
+
/** @type {__VLS_StyleScopedClasses['icon']} */ ;
|
|
95
|
+
__VLS_asFunctionalElement1(__VLS_intrinsics.svg, __VLS_intrinsics.svg)({
|
|
96
|
+
viewBox: "0 0 38 38",
|
|
97
|
+
});
|
|
98
|
+
__VLS_asFunctionalElement1(__VLS_intrinsics.circle, __VLS_intrinsics.circle)({
|
|
99
|
+
stroke: "currentColor",
|
|
100
|
+
'stroke-width': "3",
|
|
101
|
+
'stroke-linecap': "round",
|
|
102
|
+
fill: "none",
|
|
103
|
+
cx: "19",
|
|
104
|
+
cy: "19",
|
|
105
|
+
r: "16",
|
|
106
|
+
'stroke-dasharray': "45.5 12.5",
|
|
107
|
+
transform: "rotate(10 19 19)",
|
|
108
|
+
});
|
|
109
|
+
__VLS_asFunctionalElement1(__VLS_intrinsics.animateTransform)({
|
|
110
|
+
attributeName: "transform",
|
|
111
|
+
type: "rotate",
|
|
112
|
+
repeatCount: "indefinite",
|
|
113
|
+
dur: "0.6s",
|
|
114
|
+
values: "0 19 19;360 19 19",
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
// @ts-ignore
|
|
118
|
+
[triggerFileSelect, isUploading, isUploading, handleFileChange,];
|
|
119
|
+
const __VLS_export = (await import('vue')).defineComponent({
|
|
120
|
+
__typeEmits: {},
|
|
121
|
+
__typeProps: {},
|
|
122
|
+
});
|
|
123
|
+
export default {};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<button
|
|
3
|
+
class="icon-button"
|
|
4
|
+
@click="editor.chain().focus().decreaseIndent().run()" >
|
|
5
|
+
|
|
6
|
+
<div class="icon">
|
|
7
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512">
|
|
8
|
+
<path fill="currentColor" stroke="currentColor" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" d="M0 64C0 46.3 14.3 32 32 32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 96C14.3 96 0 81.7 0 64zM192 192c0-17.7 14.3-32 32-32l192 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-192 0c-17.7 0-32-14.3-32-32zm32 96l192 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-192 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zM0 448c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 480c-17.7 0-32-14.3-32-32zM127.8 268.6L25.8 347.9C15.3 356.1 0 348.6 0 335.3L0 176.7c0-13.3 15.3-20.8 25.8-12.6l101.9 79.3c8.2 6.4 8.2 18.9 0 25.3z"/>
|
|
9
|
+
</svg>
|
|
10
|
+
</div>
|
|
11
|
+
|
|
12
|
+
<div class="tips">减少缩进</div>
|
|
13
|
+
</button>
|
|
14
|
+
</template>
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
<script setup>
|
|
18
|
+
const props = defineProps({
|
|
19
|
+
editor: {
|
|
20
|
+
type: Object,
|
|
21
|
+
required: true
|
|
22
|
+
}
|
|
23
|
+
})
|
|
24
|
+
|
|
25
|
+
</script>
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
const props = defineProps({
|
|
2
|
+
editor: {
|
|
3
|
+
type: Object,
|
|
4
|
+
required: true
|
|
5
|
+
}
|
|
6
|
+
});
|
|
7
|
+
const __VLS_ctx = {
|
|
8
|
+
...{},
|
|
9
|
+
...{},
|
|
10
|
+
...{},
|
|
11
|
+
};
|
|
12
|
+
let __VLS_components;
|
|
13
|
+
let __VLS_intrinsics;
|
|
14
|
+
let __VLS_directives;
|
|
15
|
+
__VLS_asFunctionalElement1(__VLS_intrinsics.button, __VLS_intrinsics.button)({
|
|
16
|
+
...{ onClick: (...[$event]) => {
|
|
17
|
+
__VLS_ctx.editor.chain().focus().decreaseIndent().run();
|
|
18
|
+
// @ts-ignore
|
|
19
|
+
[editor,];
|
|
20
|
+
} },
|
|
21
|
+
...{ class: "icon-button" },
|
|
22
|
+
});
|
|
23
|
+
/** @type {__VLS_StyleScopedClasses['icon-button']} */ ;
|
|
24
|
+
__VLS_asFunctionalElement1(__VLS_intrinsics.div, __VLS_intrinsics.div)({
|
|
25
|
+
...{ class: "icon" },
|
|
26
|
+
});
|
|
27
|
+
/** @type {__VLS_StyleScopedClasses['icon']} */ ;
|
|
28
|
+
__VLS_asFunctionalElement1(__VLS_intrinsics.svg, __VLS_intrinsics.svg)({
|
|
29
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
30
|
+
viewBox: "0 0 448 512",
|
|
31
|
+
});
|
|
32
|
+
__VLS_asFunctionalElement1(__VLS_intrinsics.path)({
|
|
33
|
+
fill: "currentColor",
|
|
34
|
+
stroke: "currentColor",
|
|
35
|
+
'stroke-width': "4",
|
|
36
|
+
'stroke-linecap': "round",
|
|
37
|
+
'stroke-linejoin': "round",
|
|
38
|
+
d: "M0 64C0 46.3 14.3 32 32 32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 96C14.3 96 0 81.7 0 64zM192 192c0-17.7 14.3-32 32-32l192 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-192 0c-17.7 0-32-14.3-32-32zm32 96l192 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-192 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zM0 448c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 480c-17.7 0-32-14.3-32-32zM127.8 268.6L25.8 347.9C15.3 356.1 0 348.6 0 335.3L0 176.7c0-13.3 15.3-20.8 25.8-12.6l101.9 79.3c8.2 6.4 8.2 18.9 0 25.3z",
|
|
39
|
+
});
|
|
40
|
+
__VLS_asFunctionalElement1(__VLS_intrinsics.div, __VLS_intrinsics.div)({
|
|
41
|
+
...{ class: "tips" },
|
|
42
|
+
});
|
|
43
|
+
/** @type {__VLS_StyleScopedClasses['tips']} */ ;
|
|
44
|
+
// @ts-ignore
|
|
45
|
+
[];
|
|
46
|
+
const __VLS_export = (await import('vue')).defineComponent({
|
|
47
|
+
props: {
|
|
48
|
+
editor: {
|
|
49
|
+
type: Object,
|
|
50
|
+
required: true
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
export default {};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<button
|
|
3
|
+
class="icon-button"
|
|
4
|
+
@click="editor.chain().focus().increaseIndent().run()" >
|
|
5
|
+
|
|
6
|
+
<div class="icon">
|
|
7
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512">
|
|
8
|
+
<path fill="currentColor" stroke="currentColor" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" d="M0,64c0-17.7,14.3-32,32-32h384c17.7,0,32,14.3,32,32s-14.3,32-32,32H32C14.3,96,0,81.7,0,64z M192,192
|
|
9
|
+
c0-17.7,14.3-32,32-32h192c17.7,0,32,14.3,32,32s-14.3,32-32,32H224C206.3,224,192,209.7,192,192z M224,288h192
|
|
10
|
+
c17.7,0,32,14.3,32,32s-14.3,32-32,32H224c-17.7,0-32-14.3-32-32S206.3,288,224,288z M0,448c0-17.7,14.3-32,32-32h384
|
|
11
|
+
c17.7,0,32,14.3,32,32s-14.3,32-32,32H32C14.3,480,0,465.7,0,448z M6,243.4l102-79.3c10.5-8.2,25.8-0.7,25.8,12.6v158.6
|
|
12
|
+
c0,13.3-15.3,20.8-25.8,12.6L6.1,268.6c-8.2-6.4-8.2-18.9,0-25.3L6,243.4z"/>
|
|
13
|
+
</svg>
|
|
14
|
+
</div>
|
|
15
|
+
|
|
16
|
+
<div class="tips">增加缩进</div>
|
|
17
|
+
</button>
|
|
18
|
+
</template>
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
<script setup>
|
|
22
|
+
const props = defineProps({
|
|
23
|
+
editor: {
|
|
24
|
+
type: Object,
|
|
25
|
+
required: true
|
|
26
|
+
}
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
</script>
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
const props = defineProps({
|
|
2
|
+
editor: {
|
|
3
|
+
type: Object,
|
|
4
|
+
required: true
|
|
5
|
+
}
|
|
6
|
+
});
|
|
7
|
+
const __VLS_ctx = {
|
|
8
|
+
...{},
|
|
9
|
+
...{},
|
|
10
|
+
...{},
|
|
11
|
+
};
|
|
12
|
+
let __VLS_components;
|
|
13
|
+
let __VLS_intrinsics;
|
|
14
|
+
let __VLS_directives;
|
|
15
|
+
__VLS_asFunctionalElement1(__VLS_intrinsics.button, __VLS_intrinsics.button)({
|
|
16
|
+
...{ onClick: (...[$event]) => {
|
|
17
|
+
__VLS_ctx.editor.chain().focus().increaseIndent().run();
|
|
18
|
+
// @ts-ignore
|
|
19
|
+
[editor,];
|
|
20
|
+
} },
|
|
21
|
+
...{ class: "icon-button" },
|
|
22
|
+
});
|
|
23
|
+
/** @type {__VLS_StyleScopedClasses['icon-button']} */ ;
|
|
24
|
+
__VLS_asFunctionalElement1(__VLS_intrinsics.div, __VLS_intrinsics.div)({
|
|
25
|
+
...{ class: "icon" },
|
|
26
|
+
});
|
|
27
|
+
/** @type {__VLS_StyleScopedClasses['icon']} */ ;
|
|
28
|
+
__VLS_asFunctionalElement1(__VLS_intrinsics.svg, __VLS_intrinsics.svg)({
|
|
29
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
30
|
+
viewBox: "0 0 448 512",
|
|
31
|
+
});
|
|
32
|
+
__VLS_asFunctionalElement1(__VLS_intrinsics.path)({
|
|
33
|
+
fill: "currentColor",
|
|
34
|
+
stroke: "currentColor",
|
|
35
|
+
'stroke-width': "4",
|
|
36
|
+
'stroke-linecap': "round",
|
|
37
|
+
'stroke-linejoin': "round",
|
|
38
|
+
d: "\u004d\u0030\u002c\u0036\u0034\u0063\u0030\u002d\u0031\u0037\u002e\u0037\u002c\u0031\u0034\u002e\u0033\u002d\u0033\u0032\u002c\u0033\u0032\u002d\u0033\u0032\u0068\u0033\u0038\u0034\u0063\u0031\u0037\u002e\u0037\u002c\u0030\u002c\u0033\u0032\u002c\u0031\u0034\u002e\u0033\u002c\u0033\u0032\u002c\u0033\u0032\u0073\u002d\u0031\u0034\u002e\u0033\u002c\u0033\u0032\u002d\u0033\u0032\u002c\u0033\u0032\u0048\u0033\u0032\u0043\u0031\u0034\u002e\u0033\u002c\u0039\u0036\u002c\u0030\u002c\u0038\u0031\u002e\u0037\u002c\u0030\u002c\u0036\u0034\u007a\u0020\u004d\u0031\u0039\u0032\u002c\u0031\u0039\u0032\u000a\u0009\u0063\u0030\u002d\u0031\u0037\u002e\u0037\u002c\u0031\u0034\u002e\u0033\u002d\u0033\u0032\u002c\u0033\u0032\u002d\u0033\u0032\u0068\u0031\u0039\u0032\u0063\u0031\u0037\u002e\u0037\u002c\u0030\u002c\u0033\u0032\u002c\u0031\u0034\u002e\u0033\u002c\u0033\u0032\u002c\u0033\u0032\u0073\u002d\u0031\u0034\u002e\u0033\u002c\u0033\u0032\u002d\u0033\u0032\u002c\u0033\u0032\u0048\u0032\u0032\u0034\u0043\u0032\u0030\u0036\u002e\u0033\u002c\u0032\u0032\u0034\u002c\u0031\u0039\u0032\u002c\u0032\u0030\u0039\u002e\u0037\u002c\u0031\u0039\u0032\u002c\u0031\u0039\u0032\u007a\u0020\u004d\u0032\u0032\u0034\u002c\u0032\u0038\u0038\u0068\u0031\u0039\u0032\u000a\u0009\u0063\u0031\u0037\u002e\u0037\u002c\u0030\u002c\u0033\u0032\u002c\u0031\u0034\u002e\u0033\u002c\u0033\u0032\u002c\u0033\u0032\u0073\u002d\u0031\u0034\u002e\u0033\u002c\u0033\u0032\u002d\u0033\u0032\u002c\u0033\u0032\u0048\u0032\u0032\u0034\u0063\u002d\u0031\u0037\u002e\u0037\u002c\u0030\u002d\u0033\u0032\u002d\u0031\u0034\u002e\u0033\u002d\u0033\u0032\u002d\u0033\u0032\u0053\u0032\u0030\u0036\u002e\u0033\u002c\u0032\u0038\u0038\u002c\u0032\u0032\u0034\u002c\u0032\u0038\u0038\u007a\u0020\u004d\u0030\u002c\u0034\u0034\u0038\u0063\u0030\u002d\u0031\u0037\u002e\u0037\u002c\u0031\u0034\u002e\u0033\u002d\u0033\u0032\u002c\u0033\u0032\u002d\u0033\u0032\u0068\u0033\u0038\u0034\u000a\u0009\u0063\u0031\u0037\u002e\u0037\u002c\u0030\u002c\u0033\u0032\u002c\u0031\u0034\u002e\u0033\u002c\u0033\u0032\u002c\u0033\u0032\u0073\u002d\u0031\u0034\u002e\u0033\u002c\u0033\u0032\u002d\u0033\u0032\u002c\u0033\u0032\u0048\u0033\u0032\u0043\u0031\u0034\u002e\u0033\u002c\u0034\u0038\u0030\u002c\u0030\u002c\u0034\u0036\u0035\u002e\u0037\u002c\u0030\u002c\u0034\u0034\u0038\u007a\u0020\u004d\u0036\u002c\u0032\u0034\u0033\u002e\u0034\u006c\u0031\u0030\u0032\u002d\u0037\u0039\u002e\u0033\u0063\u0031\u0030\u002e\u0035\u002d\u0038\u002e\u0032\u002c\u0032\u0035\u002e\u0038\u002d\u0030\u002e\u0037\u002c\u0032\u0035\u002e\u0038\u002c\u0031\u0032\u002e\u0036\u0076\u0031\u0035\u0038\u002e\u0036\u000a\u0009\u0063\u0030\u002c\u0031\u0033\u002e\u0033\u002d\u0031\u0035\u002e\u0033\u002c\u0032\u0030\u002e\u0038\u002d\u0032\u0035\u002e\u0038\u002c\u0031\u0032\u002e\u0036\u004c\u0036\u002e\u0031\u002c\u0032\u0036\u0038\u002e\u0036\u0063\u002d\u0038\u002e\u0032\u002d\u0036\u002e\u0034\u002d\u0038\u002e\u0032\u002d\u0031\u0038\u002e\u0039\u002c\u0030\u002d\u0032\u0035\u002e\u0033\u004c\u0036\u002c\u0032\u0034\u0033\u002e\u0034\u007a",
|
|
39
|
+
});
|
|
40
|
+
__VLS_asFunctionalElement1(__VLS_intrinsics.div, __VLS_intrinsics.div)({
|
|
41
|
+
...{ class: "tips" },
|
|
42
|
+
});
|
|
43
|
+
/** @type {__VLS_StyleScopedClasses['tips']} */ ;
|
|
44
|
+
// @ts-ignore
|
|
45
|
+
[];
|
|
46
|
+
const __VLS_export = (await import('vue')).defineComponent({
|
|
47
|
+
props: {
|
|
48
|
+
editor: {
|
|
49
|
+
type: Object,
|
|
50
|
+
required: true
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
export default {};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<button
|
|
3
|
+
class="icon-button"
|
|
4
|
+
:class="{ 'active': editor.isActive('italic') }"
|
|
5
|
+
@click="editor.chain().focus().toggleItalic().run()" >
|
|
6
|
+
|
|
7
|
+
<div class="icon">
|
|
8
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
|
|
9
|
+
<path fill="currentColor" stroke="currentColor" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" d="M128 64c0-17.7 14.3-32 32-32l192 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-58.7 0-133.3 320 64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 480c-17.7 0-32-14.3-32-32s14.3-32 32-32l58.7 0 133.3-320-64 0c-17.7 0-32-14.3-32-32z"/>
|
|
10
|
+
</svg>
|
|
11
|
+
</div>
|
|
12
|
+
|
|
13
|
+
<div class="tips">斜体</div>
|
|
14
|
+
</button>
|
|
15
|
+
</template>
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
<script setup>
|
|
19
|
+
const props = defineProps({
|
|
20
|
+
editor: {
|
|
21
|
+
type: Object,
|
|
22
|
+
required: true
|
|
23
|
+
}
|
|
24
|
+
})
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
</script>
|
|
29
|
+
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
const props = defineProps({
|
|
2
|
+
editor: {
|
|
3
|
+
type: Object,
|
|
4
|
+
required: true
|
|
5
|
+
}
|
|
6
|
+
});
|
|
7
|
+
const __VLS_ctx = {
|
|
8
|
+
...{},
|
|
9
|
+
...{},
|
|
10
|
+
...{},
|
|
11
|
+
};
|
|
12
|
+
let __VLS_components;
|
|
13
|
+
let __VLS_intrinsics;
|
|
14
|
+
let __VLS_directives;
|
|
15
|
+
__VLS_asFunctionalElement1(__VLS_intrinsics.button, __VLS_intrinsics.button)({
|
|
16
|
+
...{ onClick: (...[$event]) => {
|
|
17
|
+
__VLS_ctx.editor.chain().focus().toggleItalic().run();
|
|
18
|
+
// @ts-ignore
|
|
19
|
+
[editor,];
|
|
20
|
+
} },
|
|
21
|
+
...{ class: "icon-button" },
|
|
22
|
+
...{ class: ({ 'active': __VLS_ctx.editor.isActive('italic') }) },
|
|
23
|
+
});
|
|
24
|
+
/** @type {__VLS_StyleScopedClasses['icon-button']} */ ;
|
|
25
|
+
/** @type {__VLS_StyleScopedClasses['active']} */ ;
|
|
26
|
+
__VLS_asFunctionalElement1(__VLS_intrinsics.div, __VLS_intrinsics.div)({
|
|
27
|
+
...{ class: "icon" },
|
|
28
|
+
});
|
|
29
|
+
/** @type {__VLS_StyleScopedClasses['icon']} */ ;
|
|
30
|
+
__VLS_asFunctionalElement1(__VLS_intrinsics.svg, __VLS_intrinsics.svg)({
|
|
31
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
32
|
+
viewBox: "0 0 512 512",
|
|
33
|
+
});
|
|
34
|
+
__VLS_asFunctionalElement1(__VLS_intrinsics.path)({
|
|
35
|
+
fill: "currentColor",
|
|
36
|
+
stroke: "currentColor",
|
|
37
|
+
'stroke-width': "4",
|
|
38
|
+
'stroke-linecap': "round",
|
|
39
|
+
'stroke-linejoin': "round",
|
|
40
|
+
d: "M128 64c0-17.7 14.3-32 32-32l192 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-58.7 0-133.3 320 64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 480c-17.7 0-32-14.3-32-32s14.3-32 32-32l58.7 0 133.3-320-64 0c-17.7 0-32-14.3-32-32z",
|
|
41
|
+
});
|
|
42
|
+
__VLS_asFunctionalElement1(__VLS_intrinsics.div, __VLS_intrinsics.div)({
|
|
43
|
+
...{ class: "tips" },
|
|
44
|
+
});
|
|
45
|
+
/** @type {__VLS_StyleScopedClasses['tips']} */ ;
|
|
46
|
+
// @ts-ignore
|
|
47
|
+
[editor,];
|
|
48
|
+
const __VLS_export = (await import('vue')).defineComponent({
|
|
49
|
+
props: {
|
|
50
|
+
editor: {
|
|
51
|
+
type: Object,
|
|
52
|
+
required: true
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
});
|
|
56
|
+
export default {};
|