@cgboiler/biz-basic 1.0.31 → 1.0.33
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/es/index.d.ts +1 -1
- package/es/index.js +1 -1
- package/es/rich-text-editor/RichTextEditor.d.ts +4 -1
- package/es/rich-text-editor/RichTextEditor.js +15 -2
- package/es/rich-text-editor/index.css +1 -1
- package/es/rich-text-editor/index.less +2 -2
- package/es/rich-text-editor/types.d.ts +4 -0
- package/es/rich-text-editor/useExtensions.d.ts +1 -1
- package/es/rich-text-editor/useExtensions.js +50 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/lib/rich-text-editor/RichTextEditor.d.ts +4 -1
- package/lib/rich-text-editor/RichTextEditor.js +15 -2
- package/lib/rich-text-editor/index.css +1 -1
- package/lib/rich-text-editor/index.less +2 -2
- package/lib/rich-text-editor/types.d.ts +4 -0
- package/lib/rich-text-editor/useExtensions.d.ts +1 -1
- package/lib/rich-text-editor/useExtensions.js +50 -1
- package/package.json +1 -1
package/es/index.d.ts
CHANGED
package/es/index.js
CHANGED
|
@@ -16,7 +16,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
16
16
|
type: BooleanConstructor;
|
|
17
17
|
default: boolean;
|
|
18
18
|
};
|
|
19
|
-
}>, () => import("vue/jsx-runtime").JSX.Element, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("blur" | "focus" | "mention-triggered" | "update:modelValue")[], "blur" | "focus" | "mention-triggered" | "update:modelValue", import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
19
|
+
}>, () => import("vue/jsx-runtime").JSX.Element, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("blur" | "focus" | "hashTag-triggered" | "hashTag-input" | "hashTag-exit" | "mention-triggered" | "update:modelValue")[], "blur" | "focus" | "hashTag-triggered" | "hashTag-input" | "hashTag-exit" | "mention-triggered" | "update:modelValue", import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
20
20
|
modelValue: {
|
|
21
21
|
type: StringConstructor;
|
|
22
22
|
default: string;
|
|
@@ -35,6 +35,9 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
35
35
|
}>> & Readonly<{
|
|
36
36
|
onFocus?: ((...args: any[]) => any) | undefined;
|
|
37
37
|
onBlur?: ((...args: any[]) => any) | undefined;
|
|
38
|
+
"onHashTag-triggered"?: ((...args: any[]) => any) | undefined;
|
|
39
|
+
"onHashTag-input"?: ((...args: any[]) => any) | undefined;
|
|
40
|
+
"onHashTag-exit"?: ((...args: any[]) => any) | undefined;
|
|
38
41
|
"onMention-triggered"?: ((...args: any[]) => any) | undefined;
|
|
39
42
|
"onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
|
|
40
43
|
}>, {
|
|
@@ -31,7 +31,7 @@ import "./index.css";
|
|
|
31
31
|
var stdin_default = defineComponent({
|
|
32
32
|
name: "RichTextEditor",
|
|
33
33
|
props: richTextEditorProps,
|
|
34
|
-
emits: ["update:modelValue", "mention-triggered", "blur", "focus"],
|
|
34
|
+
emits: ["update:modelValue", "mention-triggered", "hashTag-triggered", "hashTag-input", "hashTag-exit", "blur", "focus"],
|
|
35
35
|
setup(props, {
|
|
36
36
|
emit,
|
|
37
37
|
expose
|
|
@@ -90,9 +90,19 @@ var stdin_default = defineComponent({
|
|
|
90
90
|
}
|
|
91
91
|
});
|
|
92
92
|
};
|
|
93
|
+
const insertHashTag = (data) => {
|
|
94
|
+
editor.value.commands.insertContent({
|
|
95
|
+
type: "hashTag",
|
|
96
|
+
attrs: {
|
|
97
|
+
id: data.hashTagId,
|
|
98
|
+
label: data.name
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
};
|
|
93
102
|
expose({
|
|
94
103
|
getEditor: () => editor.value,
|
|
95
|
-
insertMention
|
|
104
|
+
insertMention,
|
|
105
|
+
insertHashTag
|
|
96
106
|
});
|
|
97
107
|
watch(() => props.modelValue, (newValue) => {
|
|
98
108
|
var _a, _b;
|
|
@@ -153,6 +163,9 @@ var stdin_default = defineComponent({
|
|
|
153
163
|
const now = /* @__PURE__ */ new Date();
|
|
154
164
|
const formattedTime = `${now.toLocaleDateString()} ${now.toLocaleTimeString()}`;
|
|
155
165
|
const noteTitle = `\u7B14\u8BB0 at ${formattedTime}`;
|
|
166
|
+
if (content === "<p></p>") {
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
156
169
|
yield historyStore.setItem(noteId.value, {
|
|
157
170
|
title: noteTitle,
|
|
158
171
|
content
|
|
@@ -1 +1 @@
|
|
|
1
|
-
body .ProseMirror{flex:1;overflow:auto;outline:none;line-height:1.6;font-size:var(--font-base);--white: #fff;--black: #2e2b29;--gray-1: rgba(61, 37, 20, .05);--gray-2: rgba(61, 37, 20, .08);--gray-3: rgba(61, 37, 20, .12);--gray-4: rgba(53, 38, 28, .3);--gray-5: rgba(28, 25, 23, .6);--green: #22c55e;--purple: #6a00f5;--purple-contrast: #5800cc;--purple-light: rgba(88, 5, 255, .05);--yellow-contrast: #facc15;--yellow: rgba(250, 204, 21, .4);--yellow-light: #fffae5;--red: #ff5c33;--red-light: #ffebe5;--shadow: 0px 12px 33px 0px rgba(0, 0, 0, .06), 0px 3.618px 9.949px 0px rgba(0, 0, 0, .04)}body .ProseMirror :first-child{margin-top:0}body .ProseMirror video{width:100%}body .ProseMirror ol{list-style:auto}body .ProseMirror ol ol,body .ProseMirror ul{list-style:disc}body .ProseMirror ol,body .ProseMirror ul{padding-left:1.5em;margin:0 0 12px}body .ProseMirror ol li p,body .ProseMirror ul li p{margin-top:.25em;margin-bottom:.25em}body .ProseMirror li::marker{text-align:start!important}body .ProseMirror h1,body .ProseMirror h2,body .ProseMirror h3,body .ProseMirror h4,body .ProseMirror h5,body .ProseMirror h6{line-height:1.1;margin-top:2.5rem;text-wrap:pretty}body .ProseMirror h1,body .ProseMirror h2{margin-top:1rem;margin-bottom:1rem}body .ProseMirror h1{font-size:1.4rem}body .ProseMirror h2{font-size:1.2rem}body .ProseMirror h3{font-size:1.1rem}body .ProseMirror h4,body .ProseMirror h5,body .ProseMirror h6{font-size:1rem}body .ProseMirror a,body .ProseMirror .editor-link{color:var(--purple);text-decoration:underline;cursor:pointer;transition:color .2s ease}body .ProseMirror a:hover,body .ProseMirror .editor-link:hover{color:var(--purple-contrast);text-decoration:underline}body .ProseMirror code{background-color:#ffe5e8;border-radius:.4rem;color:#c02537;padding:2px 4px}body .ProseMirror pre{border-radius:.5rem;font-family:JetBrainsMono,monospace;margin:1.5rem 0;padding:.75rem 1rem}body .ProseMirror pre code{background:none;color:inherit;font-size:.8rem;padding:0}body .ProseMirror blockquote{border-left:3px solid var(--gray-3);margin:1.5rem 0;padding-left:1rem}body .ProseMirror hr{border:none;border-top:1px solid var(--gray-2);margin:2rem 0}body .ProseMirror p.is-editor-empty:first-child:before{color:var(--gray-4);content:attr(data-placeholder);float:left;height:0;pointer-events:none}body .ProseMirror .is-empty:before{color:var(--gray-4);content:attr(data-placeholder);float:left;height:0;pointer-events:none}body .ProseMirror table{border-collapse:collapse;margin:0;overflow:hidden;table-layout:fixed;width:100%}body .ProseMirror table td,body .ProseMirror table th{border:1px solid var(--gray-3);box-sizing:border-box;min-width:1em;padding:6px 8px;position:relative;vertical-align:top}body .ProseMirror table td>*,body .ProseMirror table th>*{margin-bottom:0}body .ProseMirror table th{background-color:var(--gray-1);font-weight:700;text-align:left}body .ProseMirror table .selectedCell:after{background:var(--gray-2);content:"";left:0;right:0;top:0;bottom:0;pointer-events:none;position:absolute;z-index:2}body .ProseMirror table .column-resize-handle{background-color:var(--purple);bottom:-2px;pointer-events:none;position:absolute;right:-2px;top:0;width:4px}body .ProseMirror .tableWrapper{margin:1.5rem 0;overflow-x:auto}body .ProseMirror.resize-cursor{cursor:ew-resize;cursor:col-resize}body .ProseMirror img{max-width:100%}body .ProseMirror .mention{color:#c02537;padding:0 .3em}.animation-indent--right{animation:indent-right .5s cubic-bezier(.68,-.55,.27,1.55) 1 alternate-reverse}@keyframes indent-right{0%{transform:translate(0)}to{transform:translate(12px)}}
|
|
1
|
+
body .ProseMirror{flex:1;overflow:auto;outline:none;line-height:1.6;font-size:var(--font-base);--white: #fff;--black: #2e2b29;--gray-1: rgba(61, 37, 20, .05);--gray-2: rgba(61, 37, 20, .08);--gray-3: rgba(61, 37, 20, .12);--gray-4: rgba(53, 38, 28, .3);--gray-5: rgba(28, 25, 23, .6);--green: #22c55e;--purple: #6a00f5;--purple-contrast: #5800cc;--purple-light: rgba(88, 5, 255, .05);--yellow-contrast: #facc15;--yellow: rgba(250, 204, 21, .4);--yellow-light: #fffae5;--red: #ff5c33;--red-light: #ffebe5;--shadow: 0px 12px 33px 0px rgba(0, 0, 0, .06), 0px 3.618px 9.949px 0px rgba(0, 0, 0, .04)}body .ProseMirror :first-child{margin-top:0}body .ProseMirror video{width:100%}body .ProseMirror ol{list-style:auto}body .ProseMirror ol ol,body .ProseMirror ul{list-style:disc}body .ProseMirror ol,body .ProseMirror ul{padding-left:1.5em;margin:0 0 12px}body .ProseMirror ol li p,body .ProseMirror ul li p{margin-top:.25em;margin-bottom:.25em}body .ProseMirror li::marker{text-align:start!important}body .ProseMirror h1,body .ProseMirror h2,body .ProseMirror h3,body .ProseMirror h4,body .ProseMirror h5,body .ProseMirror h6{line-height:1.1;margin-top:2.5rem;text-wrap:pretty}body .ProseMirror h1,body .ProseMirror h2{margin-top:1rem;margin-bottom:1rem}body .ProseMirror h1{font-size:1.4rem}body .ProseMirror h2{font-size:1.2rem}body .ProseMirror h3{font-size:1.1rem}body .ProseMirror h4,body .ProseMirror h5,body .ProseMirror h6{font-size:1rem}body .ProseMirror a,body .ProseMirror .editor-link{color:var(--purple);text-decoration:underline;cursor:pointer;transition:color .2s ease}body .ProseMirror a:hover,body .ProseMirror .editor-link:hover{color:var(--purple-contrast);text-decoration:underline}body .ProseMirror code{background-color:#ffe5e8;border-radius:.4rem;color:#c02537;padding:2px 4px}body .ProseMirror pre{border-radius:.5rem;font-family:JetBrainsMono,monospace;margin:1.5rem 0;padding:.75rem 1rem}body .ProseMirror pre code{background:none;color:inherit;font-size:.8rem;padding:0}body .ProseMirror blockquote{border-left:3px solid var(--gray-3);margin:1.5rem 0;padding-left:1rem}body .ProseMirror hr{border:none;border-top:1px solid var(--gray-2);margin:2rem 0}body .ProseMirror p.is-editor-empty:first-child:before{color:var(--gray-4);content:attr(data-placeholder);float:left;height:0;pointer-events:none}body .ProseMirror .is-empty:before{color:var(--gray-4);content:attr(data-placeholder);float:left;height:0;pointer-events:none}body .ProseMirror table{border-collapse:collapse;margin:0;overflow:hidden;table-layout:fixed;width:100%}body .ProseMirror table td,body .ProseMirror table th{border:1px solid var(--gray-3);box-sizing:border-box;min-width:1em;padding:6px 8px;position:relative;vertical-align:top}body .ProseMirror table td>*,body .ProseMirror table th>*{margin-bottom:0}body .ProseMirror table th{background-color:var(--gray-1);font-weight:700;text-align:left}body .ProseMirror table .selectedCell:after{background:var(--gray-2);content:"";left:0;right:0;top:0;bottom:0;pointer-events:none;position:absolute;z-index:2}body .ProseMirror table .column-resize-handle{background-color:var(--purple);bottom:-2px;pointer-events:none;position:absolute;right:-2px;top:0;width:4px}body .ProseMirror .tableWrapper{margin:1.5rem 0;overflow-x:auto}body .ProseMirror.resize-cursor{cursor:ew-resize;cursor:col-resize}body .ProseMirror img{max-width:100%}body .ProseMirror .mention,body .ProseMirror .hash-tag{color:#c02537;padding:0 .3em}.animation-indent--right{animation:indent-right .5s cubic-bezier(.68,-.55,.27,1.55) 1 alternate-reverse}@keyframes indent-right{0%{transform:translate(0)}to{transform:translate(12px)}}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { Extension } from '@tiptap/core';
|
|
2
|
-
export declare function useExtensions({ props, emit }: any): (import("@tiptap/core").Node<any, any> | Extension<import("@tiptap/starter-kit").StarterKitOptions, any> | Extension<any, any> | import("@tiptap/core").Mark<import("@tiptap/extension-text-style").TextStyleOptions, any> | Extension<import("@tiptap/extension-text-style").ColorOptions, any> | Extension<import("tiptap-markdown").MarkdownOptions, import("tiptap-markdown").MarkdownStorage> | import("@tiptap/core").Node<import("@tiptap/extension-image").ImageOptions, any> | Extension<import("@tiptap/extension-table").TableKitOptions, any> | Extension<import("@tiptap/extensions").PlaceholderOptions, any> | Extension<import("@tiptap/extension-list").ListKitOptions, any>
|
|
2
|
+
export declare function useExtensions({ props, emit }: any): (import("@tiptap/core").Node<any, any> | import("@tiptap/core").Node<import("@tiptap/extension-mention").MentionOptions<any, import("@tiptap/extension-mention").MentionNodeAttrs>, any> | Extension<import("@tiptap/starter-kit").StarterKitOptions, any> | Extension<any, any> | import("@tiptap/core").Mark<import("@tiptap/extension-text-style").TextStyleOptions, any> | Extension<import("@tiptap/extension-text-style").ColorOptions, any> | Extension<import("tiptap-markdown").MarkdownOptions, import("tiptap-markdown").MarkdownStorage> | import("@tiptap/core").Node<import("@tiptap/extension-image").ImageOptions, any> | Extension<import("@tiptap/extension-table").TableKitOptions, any> | Extension<import("@tiptap/extensions").PlaceholderOptions, any> | Extension<import("@tiptap/extension-list").ListKitOptions, any>)[];
|
|
@@ -10,6 +10,53 @@ import { Extension, InputRule } from "@tiptap/core";
|
|
|
10
10
|
import HtmlBlock from "./extensions/HtmlBlock";
|
|
11
11
|
import { Placeholder } from "@tiptap/extensions";
|
|
12
12
|
function useExtensions({ props, emit }) {
|
|
13
|
+
const HashTag = Mention.extend({
|
|
14
|
+
/**
|
|
15
|
+
* 类级说明:重命名节点为 'hashTag',使其与 '@' 的 'mention' 节点并存。
|
|
16
|
+
*/
|
|
17
|
+
name: "hashTag"
|
|
18
|
+
}).configure({
|
|
19
|
+
HTMLAttributes: {
|
|
20
|
+
class: "hash-tag"
|
|
21
|
+
},
|
|
22
|
+
deleteTriggerWithBackspace: true,
|
|
23
|
+
suggestion: {
|
|
24
|
+
char: "#",
|
|
25
|
+
allowedPrefixes: null,
|
|
26
|
+
render() {
|
|
27
|
+
let activeRange = null;
|
|
28
|
+
let activeEditor = null;
|
|
29
|
+
return {
|
|
30
|
+
onStart({ editor, range, command, query }) {
|
|
31
|
+
activeRange = range;
|
|
32
|
+
activeEditor = editor;
|
|
33
|
+
emit("hashTag-triggered", (data) => {
|
|
34
|
+
try {
|
|
35
|
+
(activeEditor || editor).chain().focus().deleteRange(activeRange || range).insertContentAt((activeRange || range).from, {
|
|
36
|
+
type: "hashTag",
|
|
37
|
+
attrs: { id: data.hashTagId, label: data.name }
|
|
38
|
+
}).setTextSelection((activeRange || range).from + 1).insertContent(" ").run();
|
|
39
|
+
} catch (e) {
|
|
40
|
+
command({ id: data.hashTagId, label: data.name });
|
|
41
|
+
(activeEditor || editor).chain().focus().insertContent(" ").run();
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
emit("hashTag-input", query != null ? query : "");
|
|
45
|
+
},
|
|
46
|
+
onUpdate({ query, range, editor }) {
|
|
47
|
+
activeRange = range || activeRange;
|
|
48
|
+
activeEditor = editor || activeEditor;
|
|
49
|
+
emit("hashTag-input", query != null ? query : "");
|
|
50
|
+
},
|
|
51
|
+
onExit() {
|
|
52
|
+
activeRange = null;
|
|
53
|
+
activeEditor = null;
|
|
54
|
+
emit("hashTag-exit");
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
});
|
|
13
60
|
const extensions = [
|
|
14
61
|
StarterKit,
|
|
15
62
|
HtmlBlock,
|
|
@@ -154,7 +201,9 @@ function useExtensions({ props, emit }) {
|
|
|
154
201
|
};
|
|
155
202
|
}
|
|
156
203
|
}
|
|
157
|
-
})
|
|
204
|
+
}),
|
|
205
|
+
// HashTag 扩展:支持 # 触发、实时输入同步、完成后插入为 “#+文字”
|
|
206
|
+
HashTag
|
|
158
207
|
];
|
|
159
208
|
return extensions;
|
|
160
209
|
}
|
package/lib/index.d.ts
CHANGED
package/lib/index.js
CHANGED
|
@@ -36,7 +36,7 @@ __export(stdin_exports, {
|
|
|
36
36
|
module.exports = __toCommonJS(stdin_exports);
|
|
37
37
|
var import_rich_text_editor = __toESM(require("./rich-text-editor"));
|
|
38
38
|
__reExport(stdin_exports, require("./rich-text-editor"), module.exports);
|
|
39
|
-
const version = "1.0.
|
|
39
|
+
const version = "1.0.32";
|
|
40
40
|
function install(app) {
|
|
41
41
|
const components = [
|
|
42
42
|
import_rich_text_editor.default
|
|
@@ -16,7 +16,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
16
16
|
type: BooleanConstructor;
|
|
17
17
|
default: boolean;
|
|
18
18
|
};
|
|
19
|
-
}>, () => import("vue/jsx-runtime").JSX.Element, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("blur" | "focus" | "mention-triggered" | "update:modelValue")[], "blur" | "focus" | "mention-triggered" | "update:modelValue", import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
19
|
+
}>, () => import("vue/jsx-runtime").JSX.Element, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("blur" | "focus" | "hashTag-triggered" | "hashTag-input" | "hashTag-exit" | "mention-triggered" | "update:modelValue")[], "blur" | "focus" | "hashTag-triggered" | "hashTag-input" | "hashTag-exit" | "mention-triggered" | "update:modelValue", import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
20
20
|
modelValue: {
|
|
21
21
|
type: StringConstructor;
|
|
22
22
|
default: string;
|
|
@@ -35,6 +35,9 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
35
35
|
}>> & Readonly<{
|
|
36
36
|
onFocus?: ((...args: any[]) => any) | undefined;
|
|
37
37
|
onBlur?: ((...args: any[]) => any) | undefined;
|
|
38
|
+
"onHashTag-triggered"?: ((...args: any[]) => any) | undefined;
|
|
39
|
+
"onHashTag-input"?: ((...args: any[]) => any) | undefined;
|
|
40
|
+
"onHashTag-exit"?: ((...args: any[]) => any) | undefined;
|
|
38
41
|
"onMention-triggered"?: ((...args: any[]) => any) | undefined;
|
|
39
42
|
"onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
|
|
40
43
|
}>, {
|
|
@@ -63,7 +63,7 @@ var import_index = require("./index.css");
|
|
|
63
63
|
var stdin_default = (0, import_vue2.defineComponent)({
|
|
64
64
|
name: "RichTextEditor",
|
|
65
65
|
props: import_types.richTextEditorProps,
|
|
66
|
-
emits: ["update:modelValue", "mention-triggered", "blur", "focus"],
|
|
66
|
+
emits: ["update:modelValue", "mention-triggered", "hashTag-triggered", "hashTag-input", "hashTag-exit", "blur", "focus"],
|
|
67
67
|
setup(props, {
|
|
68
68
|
emit,
|
|
69
69
|
expose
|
|
@@ -122,9 +122,19 @@ var stdin_default = (0, import_vue2.defineComponent)({
|
|
|
122
122
|
}
|
|
123
123
|
});
|
|
124
124
|
};
|
|
125
|
+
const insertHashTag = (data) => {
|
|
126
|
+
editor.value.commands.insertContent({
|
|
127
|
+
type: "hashTag",
|
|
128
|
+
attrs: {
|
|
129
|
+
id: data.hashTagId,
|
|
130
|
+
label: data.name
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
};
|
|
125
134
|
expose({
|
|
126
135
|
getEditor: () => editor.value,
|
|
127
|
-
insertMention
|
|
136
|
+
insertMention,
|
|
137
|
+
insertHashTag
|
|
128
138
|
});
|
|
129
139
|
(0, import_vue2.watch)(() => props.modelValue, (newValue) => {
|
|
130
140
|
var _a, _b;
|
|
@@ -185,6 +195,9 @@ var stdin_default = (0, import_vue2.defineComponent)({
|
|
|
185
195
|
const now = /* @__PURE__ */ new Date();
|
|
186
196
|
const formattedTime = `${now.toLocaleDateString()} ${now.toLocaleTimeString()}`;
|
|
187
197
|
const noteTitle = `\u7B14\u8BB0 at ${formattedTime}`;
|
|
198
|
+
if (content === "<p></p>") {
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
188
201
|
yield historyStore.setItem(noteId.value, {
|
|
189
202
|
title: noteTitle,
|
|
190
203
|
content
|
|
@@ -1 +1 @@
|
|
|
1
|
-
body .ProseMirror{flex:1;overflow:auto;outline:none;line-height:1.6;font-size:var(--font-base);--white: #fff;--black: #2e2b29;--gray-1: rgba(61, 37, 20, .05);--gray-2: rgba(61, 37, 20, .08);--gray-3: rgba(61, 37, 20, .12);--gray-4: rgba(53, 38, 28, .3);--gray-5: rgba(28, 25, 23, .6);--green: #22c55e;--purple: #6a00f5;--purple-contrast: #5800cc;--purple-light: rgba(88, 5, 255, .05);--yellow-contrast: #facc15;--yellow: rgba(250, 204, 21, .4);--yellow-light: #fffae5;--red: #ff5c33;--red-light: #ffebe5;--shadow: 0px 12px 33px 0px rgba(0, 0, 0, .06), 0px 3.618px 9.949px 0px rgba(0, 0, 0, .04)}body .ProseMirror :first-child{margin-top:0}body .ProseMirror video{width:100%}body .ProseMirror ol{list-style:auto}body .ProseMirror ol ol,body .ProseMirror ul{list-style:disc}body .ProseMirror ol,body .ProseMirror ul{padding-left:1.5em;margin:0 0 12px}body .ProseMirror ol li p,body .ProseMirror ul li p{margin-top:.25em;margin-bottom:.25em}body .ProseMirror li::marker{text-align:start!important}body .ProseMirror h1,body .ProseMirror h2,body .ProseMirror h3,body .ProseMirror h4,body .ProseMirror h5,body .ProseMirror h6{line-height:1.1;margin-top:2.5rem;text-wrap:pretty}body .ProseMirror h1,body .ProseMirror h2{margin-top:1rem;margin-bottom:1rem}body .ProseMirror h1{font-size:1.4rem}body .ProseMirror h2{font-size:1.2rem}body .ProseMirror h3{font-size:1.1rem}body .ProseMirror h4,body .ProseMirror h5,body .ProseMirror h6{font-size:1rem}body .ProseMirror a,body .ProseMirror .editor-link{color:var(--purple);text-decoration:underline;cursor:pointer;transition:color .2s ease}body .ProseMirror a:hover,body .ProseMirror .editor-link:hover{color:var(--purple-contrast);text-decoration:underline}body .ProseMirror code{background-color:#ffe5e8;border-radius:.4rem;color:#c02537;padding:2px 4px}body .ProseMirror pre{border-radius:.5rem;font-family:JetBrainsMono,monospace;margin:1.5rem 0;padding:.75rem 1rem}body .ProseMirror pre code{background:none;color:inherit;font-size:.8rem;padding:0}body .ProseMirror blockquote{border-left:3px solid var(--gray-3);margin:1.5rem 0;padding-left:1rem}body .ProseMirror hr{border:none;border-top:1px solid var(--gray-2);margin:2rem 0}body .ProseMirror p.is-editor-empty:first-child:before{color:var(--gray-4);content:attr(data-placeholder);float:left;height:0;pointer-events:none}body .ProseMirror .is-empty:before{color:var(--gray-4);content:attr(data-placeholder);float:left;height:0;pointer-events:none}body .ProseMirror table{border-collapse:collapse;margin:0;overflow:hidden;table-layout:fixed;width:100%}body .ProseMirror table td,body .ProseMirror table th{border:1px solid var(--gray-3);box-sizing:border-box;min-width:1em;padding:6px 8px;position:relative;vertical-align:top}body .ProseMirror table td>*,body .ProseMirror table th>*{margin-bottom:0}body .ProseMirror table th{background-color:var(--gray-1);font-weight:700;text-align:left}body .ProseMirror table .selectedCell:after{background:var(--gray-2);content:"";left:0;right:0;top:0;bottom:0;pointer-events:none;position:absolute;z-index:2}body .ProseMirror table .column-resize-handle{background-color:var(--purple);bottom:-2px;pointer-events:none;position:absolute;right:-2px;top:0;width:4px}body .ProseMirror .tableWrapper{margin:1.5rem 0;overflow-x:auto}body .ProseMirror.resize-cursor{cursor:ew-resize;cursor:col-resize}body .ProseMirror img{max-width:100%}body .ProseMirror .mention{color:#c02537;padding:0 .3em}.animation-indent--right{animation:indent-right .5s cubic-bezier(.68,-.55,.27,1.55) 1 alternate-reverse}@keyframes indent-right{0%{transform:translate(0)}to{transform:translate(12px)}}
|
|
1
|
+
body .ProseMirror{flex:1;overflow:auto;outline:none;line-height:1.6;font-size:var(--font-base);--white: #fff;--black: #2e2b29;--gray-1: rgba(61, 37, 20, .05);--gray-2: rgba(61, 37, 20, .08);--gray-3: rgba(61, 37, 20, .12);--gray-4: rgba(53, 38, 28, .3);--gray-5: rgba(28, 25, 23, .6);--green: #22c55e;--purple: #6a00f5;--purple-contrast: #5800cc;--purple-light: rgba(88, 5, 255, .05);--yellow-contrast: #facc15;--yellow: rgba(250, 204, 21, .4);--yellow-light: #fffae5;--red: #ff5c33;--red-light: #ffebe5;--shadow: 0px 12px 33px 0px rgba(0, 0, 0, .06), 0px 3.618px 9.949px 0px rgba(0, 0, 0, .04)}body .ProseMirror :first-child{margin-top:0}body .ProseMirror video{width:100%}body .ProseMirror ol{list-style:auto}body .ProseMirror ol ol,body .ProseMirror ul{list-style:disc}body .ProseMirror ol,body .ProseMirror ul{padding-left:1.5em;margin:0 0 12px}body .ProseMirror ol li p,body .ProseMirror ul li p{margin-top:.25em;margin-bottom:.25em}body .ProseMirror li::marker{text-align:start!important}body .ProseMirror h1,body .ProseMirror h2,body .ProseMirror h3,body .ProseMirror h4,body .ProseMirror h5,body .ProseMirror h6{line-height:1.1;margin-top:2.5rem;text-wrap:pretty}body .ProseMirror h1,body .ProseMirror h2{margin-top:1rem;margin-bottom:1rem}body .ProseMirror h1{font-size:1.4rem}body .ProseMirror h2{font-size:1.2rem}body .ProseMirror h3{font-size:1.1rem}body .ProseMirror h4,body .ProseMirror h5,body .ProseMirror h6{font-size:1rem}body .ProseMirror a,body .ProseMirror .editor-link{color:var(--purple);text-decoration:underline;cursor:pointer;transition:color .2s ease}body .ProseMirror a:hover,body .ProseMirror .editor-link:hover{color:var(--purple-contrast);text-decoration:underline}body .ProseMirror code{background-color:#ffe5e8;border-radius:.4rem;color:#c02537;padding:2px 4px}body .ProseMirror pre{border-radius:.5rem;font-family:JetBrainsMono,monospace;margin:1.5rem 0;padding:.75rem 1rem}body .ProseMirror pre code{background:none;color:inherit;font-size:.8rem;padding:0}body .ProseMirror blockquote{border-left:3px solid var(--gray-3);margin:1.5rem 0;padding-left:1rem}body .ProseMirror hr{border:none;border-top:1px solid var(--gray-2);margin:2rem 0}body .ProseMirror p.is-editor-empty:first-child:before{color:var(--gray-4);content:attr(data-placeholder);float:left;height:0;pointer-events:none}body .ProseMirror .is-empty:before{color:var(--gray-4);content:attr(data-placeholder);float:left;height:0;pointer-events:none}body .ProseMirror table{border-collapse:collapse;margin:0;overflow:hidden;table-layout:fixed;width:100%}body .ProseMirror table td,body .ProseMirror table th{border:1px solid var(--gray-3);box-sizing:border-box;min-width:1em;padding:6px 8px;position:relative;vertical-align:top}body .ProseMirror table td>*,body .ProseMirror table th>*{margin-bottom:0}body .ProseMirror table th{background-color:var(--gray-1);font-weight:700;text-align:left}body .ProseMirror table .selectedCell:after{background:var(--gray-2);content:"";left:0;right:0;top:0;bottom:0;pointer-events:none;position:absolute;z-index:2}body .ProseMirror table .column-resize-handle{background-color:var(--purple);bottom:-2px;pointer-events:none;position:absolute;right:-2px;top:0;width:4px}body .ProseMirror .tableWrapper{margin:1.5rem 0;overflow-x:auto}body .ProseMirror.resize-cursor{cursor:ew-resize;cursor:col-resize}body .ProseMirror img{max-width:100%}body .ProseMirror .mention,body .ProseMirror .hash-tag{color:#c02537;padding:0 .3em}.animation-indent--right{animation:indent-right .5s cubic-bezier(.68,-.55,.27,1.55) 1 alternate-reverse}@keyframes indent-right{0%{transform:translate(0)}to{transform:translate(12px)}}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { Extension } from '@tiptap/core';
|
|
2
|
-
export declare function useExtensions({ props, emit }: any): (import("@tiptap/core").Node<any, any> | Extension<import("@tiptap/starter-kit").StarterKitOptions, any> | Extension<any, any> | import("@tiptap/core").Mark<import("@tiptap/extension-text-style").TextStyleOptions, any> | Extension<import("@tiptap/extension-text-style").ColorOptions, any> | Extension<import("tiptap-markdown").MarkdownOptions, import("tiptap-markdown").MarkdownStorage> | import("@tiptap/core").Node<import("@tiptap/extension-image").ImageOptions, any> | Extension<import("@tiptap/extension-table").TableKitOptions, any> | Extension<import("@tiptap/extensions").PlaceholderOptions, any> | Extension<import("@tiptap/extension-list").ListKitOptions, any>
|
|
2
|
+
export declare function useExtensions({ props, emit }: any): (import("@tiptap/core").Node<any, any> | import("@tiptap/core").Node<import("@tiptap/extension-mention").MentionOptions<any, import("@tiptap/extension-mention").MentionNodeAttrs>, any> | Extension<import("@tiptap/starter-kit").StarterKitOptions, any> | Extension<any, any> | import("@tiptap/core").Mark<import("@tiptap/extension-text-style").TextStyleOptions, any> | Extension<import("@tiptap/extension-text-style").ColorOptions, any> | Extension<import("tiptap-markdown").MarkdownOptions, import("tiptap-markdown").MarkdownStorage> | import("@tiptap/core").Node<import("@tiptap/extension-image").ImageOptions, any> | Extension<import("@tiptap/extension-table").TableKitOptions, any> | Extension<import("@tiptap/extensions").PlaceholderOptions, any> | Extension<import("@tiptap/extension-list").ListKitOptions, any>)[];
|
|
@@ -42,6 +42,53 @@ var import_core = require("@tiptap/core");
|
|
|
42
42
|
var import_HtmlBlock = __toESM(require("./extensions/HtmlBlock"));
|
|
43
43
|
var import_extensions = require("@tiptap/extensions");
|
|
44
44
|
function useExtensions({ props, emit }) {
|
|
45
|
+
const HashTag = import_extension_mention.default.extend({
|
|
46
|
+
/**
|
|
47
|
+
* 类级说明:重命名节点为 'hashTag',使其与 '@' 的 'mention' 节点并存。
|
|
48
|
+
*/
|
|
49
|
+
name: "hashTag"
|
|
50
|
+
}).configure({
|
|
51
|
+
HTMLAttributes: {
|
|
52
|
+
class: "hash-tag"
|
|
53
|
+
},
|
|
54
|
+
deleteTriggerWithBackspace: true,
|
|
55
|
+
suggestion: {
|
|
56
|
+
char: "#",
|
|
57
|
+
allowedPrefixes: null,
|
|
58
|
+
render() {
|
|
59
|
+
let activeRange = null;
|
|
60
|
+
let activeEditor = null;
|
|
61
|
+
return {
|
|
62
|
+
onStart({ editor, range, command, query }) {
|
|
63
|
+
activeRange = range;
|
|
64
|
+
activeEditor = editor;
|
|
65
|
+
emit("hashTag-triggered", (data) => {
|
|
66
|
+
try {
|
|
67
|
+
(activeEditor || editor).chain().focus().deleteRange(activeRange || range).insertContentAt((activeRange || range).from, {
|
|
68
|
+
type: "hashTag",
|
|
69
|
+
attrs: { id: data.hashTagId, label: data.name }
|
|
70
|
+
}).setTextSelection((activeRange || range).from + 1).insertContent(" ").run();
|
|
71
|
+
} catch (e) {
|
|
72
|
+
command({ id: data.hashTagId, label: data.name });
|
|
73
|
+
(activeEditor || editor).chain().focus().insertContent(" ").run();
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
emit("hashTag-input", query != null ? query : "");
|
|
77
|
+
},
|
|
78
|
+
onUpdate({ query, range, editor }) {
|
|
79
|
+
activeRange = range || activeRange;
|
|
80
|
+
activeEditor = editor || activeEditor;
|
|
81
|
+
emit("hashTag-input", query != null ? query : "");
|
|
82
|
+
},
|
|
83
|
+
onExit() {
|
|
84
|
+
activeRange = null;
|
|
85
|
+
activeEditor = null;
|
|
86
|
+
emit("hashTag-exit");
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
});
|
|
45
92
|
const extensions = [
|
|
46
93
|
import_starter_kit.default,
|
|
47
94
|
import_HtmlBlock.default,
|
|
@@ -186,7 +233,9 @@ function useExtensions({ props, emit }) {
|
|
|
186
233
|
};
|
|
187
234
|
}
|
|
188
235
|
}
|
|
189
|
-
})
|
|
236
|
+
}),
|
|
237
|
+
// HashTag 扩展:支持 # 触发、实时输入同步、完成后插入为 “#+文字”
|
|
238
|
+
HashTag
|
|
190
239
|
];
|
|
191
240
|
return extensions;
|
|
192
241
|
}
|