@ctzhian/tiptap 1.7.5-beta.1 → 1.7.5-beta.3
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.
|
@@ -1,68 +1,54 @@
|
|
|
1
|
-
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
2
|
-
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
3
|
-
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
4
|
-
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
5
|
-
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
6
|
-
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
7
1
|
import { Box, Divider, Stack } from '@mui/material';
|
|
8
|
-
import
|
|
2
|
+
import { useEditorState } from '@tiptap/react';
|
|
3
|
+
import React from 'react';
|
|
9
4
|
import { AiGenerate2Icon, ArrowGoBackLineIcon, ArrowGoForwardLineIcon, BoldIcon, EraserLineIcon, ItalicIcon, LinkIcon, MarkPenLineIcon, StrikethroughIcon, SubscriptIcon, SuperscriptIcon, UnderlineIcon } from "../component/Icons";
|
|
10
5
|
import { EditorAlignSelect, EditorFontBgColor, EditorFontColor, EditorFontSize, EditorHeading, EditorInsert, EditorListSelect, EditorMore, EditorVerticalAlignSelect, ToolbarItem } from "../component/Toolbar";
|
|
6
|
+
import { hasMarksInSelection } from "../util";
|
|
11
7
|
var EditorToolbar = function EditorToolbar(_ref) {
|
|
12
8
|
var editor = _ref.editor,
|
|
13
9
|
menuInToolbarMore = _ref.menuInToolbarMore;
|
|
14
|
-
var
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
10
|
+
var _useEditorState = useEditorState({
|
|
11
|
+
editor: editor,
|
|
12
|
+
selector: function selector(ctx) {
|
|
13
|
+
var _ctx$editor$can$chain, _ctx$editor$can$chain2, _ctx$editor$storage;
|
|
14
|
+
return {
|
|
15
|
+
isUndo: (_ctx$editor$can$chain = ctx.editor.can().chain().undo().run()) !== null && _ctx$editor$can$chain !== void 0 ? _ctx$editor$can$chain : false,
|
|
16
|
+
isRedo: (_ctx$editor$can$chain2 = ctx.editor.can().chain().redo().run()) !== null && _ctx$editor$can$chain2 !== void 0 ? _ctx$editor$can$chain2 : false,
|
|
17
|
+
isFormat: hasMarksInSelection(ctx.editor.state),
|
|
18
|
+
isQuote: ctx.editor.isActive('blockquote'),
|
|
19
|
+
isBold: ctx.editor.isActive('bold'),
|
|
20
|
+
isItalic: ctx.editor.isActive('italic'),
|
|
21
|
+
isStrike: ctx.editor.isActive('strike'),
|
|
22
|
+
isUnderline: ctx.editor.isActive('underline'),
|
|
23
|
+
isSuperscript: ctx.editor.isActive('superscript'),
|
|
24
|
+
isSubscript: ctx.editor.isActive('subscript'),
|
|
25
|
+
isDetails: ctx.editor.isActive('details'),
|
|
26
|
+
isTable: ctx.editor.isActive('table'),
|
|
27
|
+
isLink: ctx.editor.isActive('link'),
|
|
28
|
+
isAlert: ctx.editor.isActive('alert'),
|
|
29
|
+
isIframe: ctx.editor.isActive('iframe'),
|
|
30
|
+
isHighlight: ctx.editor.isActive('highlight'),
|
|
31
|
+
isAiWriting: !!((_ctx$editor$storage = ctx.editor.storage) !== null && _ctx$editor$storage !== void 0 && (_ctx$editor$storage = _ctx$editor$storage.aiWriting) !== null && _ctx$editor$storage !== void 0 && _ctx$editor$storage.enabled)
|
|
32
|
+
};
|
|
33
|
+
}
|
|
32
34
|
}),
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
table: editor.isActive('table'),
|
|
51
|
-
link: editor.isActive('link'),
|
|
52
|
-
alert: editor.isActive('alert'),
|
|
53
|
-
iframe: editor.isActive('iframe'),
|
|
54
|
-
aiWriting: !!((_editor$storage = editor.storage) !== null && _editor$storage !== void 0 && (_editor$storage = _editor$storage.aiWriting) !== null && _editor$storage !== void 0 && _editor$storage.enabled),
|
|
55
|
-
highlight: editor.isActive('highlight')
|
|
56
|
-
});
|
|
57
|
-
};
|
|
58
|
-
useEffect(function () {
|
|
59
|
-
editor.on('selectionUpdate', updateSelection);
|
|
60
|
-
editor.on('transaction', updateSelection);
|
|
61
|
-
return function () {
|
|
62
|
-
editor.off('selectionUpdate', updateSelection);
|
|
63
|
-
editor.off('transaction', updateSelection);
|
|
64
|
-
};
|
|
65
|
-
}, [editor]);
|
|
35
|
+
isUndo = _useEditorState.isUndo,
|
|
36
|
+
isRedo = _useEditorState.isRedo,
|
|
37
|
+
isFormat = _useEditorState.isFormat,
|
|
38
|
+
isQuote = _useEditorState.isQuote,
|
|
39
|
+
isBold = _useEditorState.isBold,
|
|
40
|
+
isItalic = _useEditorState.isItalic,
|
|
41
|
+
isStrike = _useEditorState.isStrike,
|
|
42
|
+
isUnderline = _useEditorState.isUnderline,
|
|
43
|
+
isSuperscript = _useEditorState.isSuperscript,
|
|
44
|
+
isSubscript = _useEditorState.isSubscript,
|
|
45
|
+
isDetails = _useEditorState.isDetails,
|
|
46
|
+
isTable = _useEditorState.isTable,
|
|
47
|
+
isLink = _useEditorState.isLink,
|
|
48
|
+
isAlert = _useEditorState.isAlert,
|
|
49
|
+
isIframe = _useEditorState.isIframe,
|
|
50
|
+
isAiWriting = _useEditorState.isAiWriting,
|
|
51
|
+
isHighlight = _useEditorState.isHighlight;
|
|
66
52
|
return /*#__PURE__*/React.createElement(Box, {
|
|
67
53
|
className: "editor-toolbar"
|
|
68
54
|
}, /*#__PURE__*/React.createElement(Stack, {
|
|
@@ -107,9 +93,9 @@ var EditorToolbar = function EditorToolbar(_ref) {
|
|
|
107
93
|
}
|
|
108
94
|
}),
|
|
109
95
|
onClick: function onClick() {
|
|
110
|
-
return editor.chain().focus().setAiWriting(!
|
|
96
|
+
return editor.chain().focus().setAiWriting(!isAiWriting).run();
|
|
111
97
|
},
|
|
112
|
-
className:
|
|
98
|
+
className: isAiWriting ? 'tool-active' : ''
|
|
113
99
|
}), /*#__PURE__*/React.createElement(EditorInsert, {
|
|
114
100
|
editor: editor
|
|
115
101
|
}), /*#__PURE__*/React.createElement(Divider, {
|
|
@@ -131,7 +117,7 @@ var EditorToolbar = function EditorToolbar(_ref) {
|
|
|
131
117
|
onClick: function onClick() {
|
|
132
118
|
return editor.chain().focus().undo().run();
|
|
133
119
|
},
|
|
134
|
-
disabled: !
|
|
120
|
+
disabled: !isUndo
|
|
135
121
|
}), /*#__PURE__*/React.createElement(ToolbarItem, {
|
|
136
122
|
tip: '重做',
|
|
137
123
|
shortcutKey: ['ctrl', 'Y'],
|
|
@@ -143,7 +129,7 @@ var EditorToolbar = function EditorToolbar(_ref) {
|
|
|
143
129
|
onClick: function onClick() {
|
|
144
130
|
return editor.chain().focus().redo().run();
|
|
145
131
|
},
|
|
146
|
-
disabled: !
|
|
132
|
+
disabled: !isRedo
|
|
147
133
|
}), /*#__PURE__*/React.createElement(ToolbarItem, {
|
|
148
134
|
tip: '清除格式',
|
|
149
135
|
icon: /*#__PURE__*/React.createElement(EraserLineIcon, {
|
|
@@ -151,7 +137,7 @@ var EditorToolbar = function EditorToolbar(_ref) {
|
|
|
151
137
|
fontSize: '1rem'
|
|
152
138
|
}
|
|
153
139
|
}),
|
|
154
|
-
disabled: !
|
|
140
|
+
disabled: !isFormat,
|
|
155
141
|
onClick: function onClick() {
|
|
156
142
|
return editor.chain().focus().unsetAllMarks().run();
|
|
157
143
|
}
|
|
@@ -186,7 +172,7 @@ var EditorToolbar = function EditorToolbar(_ref) {
|
|
|
186
172
|
onClick: function onClick() {
|
|
187
173
|
return editor.chain().focus().toggleBold().run();
|
|
188
174
|
},
|
|
189
|
-
className:
|
|
175
|
+
className: isBold ? 'tool-active' : ''
|
|
190
176
|
}), /*#__PURE__*/React.createElement(ToolbarItem, {
|
|
191
177
|
tip: '斜体',
|
|
192
178
|
shortcutKey: ['ctrl', 'I'],
|
|
@@ -198,7 +184,7 @@ var EditorToolbar = function EditorToolbar(_ref) {
|
|
|
198
184
|
onClick: function onClick() {
|
|
199
185
|
return editor.chain().focus().toggleItalic().run();
|
|
200
186
|
},
|
|
201
|
-
className:
|
|
187
|
+
className: isItalic ? 'tool-active' : ''
|
|
202
188
|
}), /*#__PURE__*/React.createElement(ToolbarItem, {
|
|
203
189
|
tip: '删除线',
|
|
204
190
|
shortcutKey: ['ctrl', 'shift', 'S'],
|
|
@@ -210,7 +196,7 @@ var EditorToolbar = function EditorToolbar(_ref) {
|
|
|
210
196
|
onClick: function onClick() {
|
|
211
197
|
return editor.chain().focus().toggleStrike().run();
|
|
212
198
|
},
|
|
213
|
-
className:
|
|
199
|
+
className: isStrike ? 'tool-active' : ''
|
|
214
200
|
}), /*#__PURE__*/React.createElement(ToolbarItem, {
|
|
215
201
|
tip: '下划线',
|
|
216
202
|
shortcutKey: ['ctrl', 'U'],
|
|
@@ -222,7 +208,7 @@ var EditorToolbar = function EditorToolbar(_ref) {
|
|
|
222
208
|
onClick: function onClick() {
|
|
223
209
|
return editor.chain().focus().toggleUnderline().run();
|
|
224
210
|
},
|
|
225
|
-
className:
|
|
211
|
+
className: isUnderline ? 'tool-active' : ''
|
|
226
212
|
}), /*#__PURE__*/React.createElement(ToolbarItem, {
|
|
227
213
|
tip: '高亮',
|
|
228
214
|
shortcutKey: ['ctrl', 'shift', 'H'],
|
|
@@ -234,7 +220,7 @@ var EditorToolbar = function EditorToolbar(_ref) {
|
|
|
234
220
|
onClick: function onClick() {
|
|
235
221
|
return editor.chain().focus().toggleHighlight().run();
|
|
236
222
|
},
|
|
237
|
-
className:
|
|
223
|
+
className: isHighlight ? 'tool-active' : ''
|
|
238
224
|
}), /*#__PURE__*/React.createElement(ToolbarItem, {
|
|
239
225
|
tip: '上标',
|
|
240
226
|
shortcutKey: ['ctrl', '.'],
|
|
@@ -246,7 +232,7 @@ var EditorToolbar = function EditorToolbar(_ref) {
|
|
|
246
232
|
onClick: function onClick() {
|
|
247
233
|
return editor.chain().focus().toggleSuperscript().run();
|
|
248
234
|
},
|
|
249
|
-
className:
|
|
235
|
+
className: isSuperscript ? 'tool-active' : ''
|
|
250
236
|
}), /*#__PURE__*/React.createElement(ToolbarItem, {
|
|
251
237
|
tip: '下标',
|
|
252
238
|
shortcutKey: ['ctrl', ','],
|
|
@@ -258,7 +244,7 @@ var EditorToolbar = function EditorToolbar(_ref) {
|
|
|
258
244
|
onClick: function onClick() {
|
|
259
245
|
return editor.chain().focus().toggleSubscript().run();
|
|
260
246
|
},
|
|
261
|
-
className:
|
|
247
|
+
className: isSubscript ? 'tool-active' : ''
|
|
262
248
|
}), /*#__PURE__*/React.createElement(EditorFontColor, {
|
|
263
249
|
editor: editor
|
|
264
250
|
}), /*#__PURE__*/React.createElement(EditorFontBgColor, {
|
|
@@ -291,7 +277,7 @@ var EditorToolbar = function EditorToolbar(_ref) {
|
|
|
291
277
|
title: text
|
|
292
278
|
}).run();
|
|
293
279
|
},
|
|
294
|
-
className:
|
|
280
|
+
className: isLink ? 'tool-active' : ''
|
|
295
281
|
}), /*#__PURE__*/React.createElement(EditorAlignSelect, {
|
|
296
282
|
editor: editor
|
|
297
283
|
}), /*#__PURE__*/React.createElement(EditorVerticalAlignSelect, {
|
|
@@ -48,7 +48,7 @@ var CustomBubbleMenu = function CustomBubbleMenu(_ref) {
|
|
|
48
48
|
isUnderline: ctx.editor.isActive('underline'),
|
|
49
49
|
isCode: ctx.editor.isActive('code'),
|
|
50
50
|
isHighlight: ctx.editor.isActive('highlight'),
|
|
51
|
-
hasAnyMarks:
|
|
51
|
+
hasAnyMarks: hasMarksInSelection(ctx.editor.state)
|
|
52
52
|
// isSuperscript: ctx.editor.isActive('superscript'),
|
|
53
53
|
// isSubscript: ctx.editor.isActive('subscript'),
|
|
54
54
|
};
|
|
@@ -97,9 +97,10 @@ var CustomBubbleMenu = function CustomBubbleMenu(_ref) {
|
|
|
97
97
|
}, /*#__PURE__*/React.createElement(Stack, {
|
|
98
98
|
direction: 'row',
|
|
99
99
|
alignItems: 'center'
|
|
100
|
-
}, /*#__PURE__*/React.createElement(ToolbarItem
|
|
101
|
-
|
|
102
|
-
|
|
100
|
+
}, /*#__PURE__*/React.createElement(ToolbarItem
|
|
101
|
+
// tip='加粗'
|
|
102
|
+
// shortcutKey={['ctrl', 'B']}
|
|
103
|
+
, {
|
|
103
104
|
icon: /*#__PURE__*/React.createElement(BoldIcon, {
|
|
104
105
|
sx: {
|
|
105
106
|
fontSize: '1rem'
|
|
@@ -109,9 +110,10 @@ var CustomBubbleMenu = function CustomBubbleMenu(_ref) {
|
|
|
109
110
|
return editor.chain().focus().toggleBold().run();
|
|
110
111
|
},
|
|
111
112
|
className: isBold ? "tool-active" : ""
|
|
112
|
-
}), /*#__PURE__*/React.createElement(ToolbarItem
|
|
113
|
-
|
|
114
|
-
|
|
113
|
+
}), /*#__PURE__*/React.createElement(ToolbarItem
|
|
114
|
+
// tip='斜体'
|
|
115
|
+
// shortcutKey={['ctrl', 'I']}
|
|
116
|
+
, {
|
|
115
117
|
icon: /*#__PURE__*/React.createElement(ItalicIcon, {
|
|
116
118
|
sx: {
|
|
117
119
|
fontSize: '1rem'
|
|
@@ -121,9 +123,10 @@ var CustomBubbleMenu = function CustomBubbleMenu(_ref) {
|
|
|
121
123
|
return editor.chain().focus().toggleItalic().run();
|
|
122
124
|
},
|
|
123
125
|
className: isItalic ? "tool-active" : ""
|
|
124
|
-
}), /*#__PURE__*/React.createElement(ToolbarItem
|
|
125
|
-
|
|
126
|
-
|
|
126
|
+
}), /*#__PURE__*/React.createElement(ToolbarItem
|
|
127
|
+
// tip='删除线'
|
|
128
|
+
// shortcutKey={['ctrl', 'shift', 'S']}
|
|
129
|
+
, {
|
|
127
130
|
icon: /*#__PURE__*/React.createElement(StrikethroughIcon, {
|
|
128
131
|
sx: {
|
|
129
132
|
fontSize: '1rem'
|
|
@@ -133,9 +136,10 @@ var CustomBubbleMenu = function CustomBubbleMenu(_ref) {
|
|
|
133
136
|
return editor.chain().focus().toggleStrike().run();
|
|
134
137
|
},
|
|
135
138
|
className: isStrike ? "tool-active" : ""
|
|
136
|
-
}), /*#__PURE__*/React.createElement(ToolbarItem
|
|
137
|
-
|
|
138
|
-
|
|
139
|
+
}), /*#__PURE__*/React.createElement(ToolbarItem
|
|
140
|
+
// tip='下划线'
|
|
141
|
+
// shortcutKey={['ctrl', 'U']}
|
|
142
|
+
, {
|
|
139
143
|
icon: /*#__PURE__*/React.createElement(UnderlineIcon, {
|
|
140
144
|
sx: {
|
|
141
145
|
fontSize: '1rem'
|
|
@@ -145,9 +149,10 @@ var CustomBubbleMenu = function CustomBubbleMenu(_ref) {
|
|
|
145
149
|
return editor.chain().focus().toggleUnderline().run();
|
|
146
150
|
},
|
|
147
151
|
className: isUnderline ? "tool-active" : ""
|
|
148
|
-
}), /*#__PURE__*/React.createElement(ToolbarItem
|
|
149
|
-
|
|
150
|
-
|
|
152
|
+
}), /*#__PURE__*/React.createElement(ToolbarItem
|
|
153
|
+
// tip='高亮'
|
|
154
|
+
// shortcutKey={['ctrl', 'shift', 'H']}
|
|
155
|
+
, {
|
|
151
156
|
icon: /*#__PURE__*/React.createElement(MarkPenLineIcon, {
|
|
152
157
|
sx: {
|
|
153
158
|
fontSize: '1rem'
|
|
@@ -157,9 +162,10 @@ var CustomBubbleMenu = function CustomBubbleMenu(_ref) {
|
|
|
157
162
|
return editor.chain().focus().toggleHighlight().run();
|
|
158
163
|
},
|
|
159
164
|
className: isHighlight ? "tool-active" : ""
|
|
160
|
-
}), /*#__PURE__*/React.createElement(ToolbarItem
|
|
161
|
-
|
|
162
|
-
|
|
165
|
+
}), /*#__PURE__*/React.createElement(ToolbarItem
|
|
166
|
+
// tip='行内代码'
|
|
167
|
+
// shortcutKey={['ctrl', 'E']}
|
|
168
|
+
, {
|
|
163
169
|
icon: /*#__PURE__*/React.createElement(CodeLineIcon, {
|
|
164
170
|
sx: {
|
|
165
171
|
fontSize: '1rem'
|
|
@@ -169,8 +175,9 @@ var CustomBubbleMenu = function CustomBubbleMenu(_ref) {
|
|
|
169
175
|
return editor.chain().focus().toggleCode().run();
|
|
170
176
|
},
|
|
171
177
|
className: isCode ? "tool-active" : ""
|
|
172
|
-
}), /*#__PURE__*/React.createElement(ToolbarItem
|
|
173
|
-
|
|
178
|
+
}), /*#__PURE__*/React.createElement(ToolbarItem
|
|
179
|
+
// tip='文本格式化'
|
|
180
|
+
, {
|
|
174
181
|
icon: /*#__PURE__*/React.createElement(EraserLineIcon, {
|
|
175
182
|
sx: {
|
|
176
183
|
fontSize: '1rem'
|
|
@@ -180,8 +187,9 @@ var CustomBubbleMenu = function CustomBubbleMenu(_ref) {
|
|
|
180
187
|
return editor.chain().focus().unsetAllMarks().run();
|
|
181
188
|
},
|
|
182
189
|
disabled: !hasAnyMarks
|
|
183
|
-
}), /*#__PURE__*/React.createElement(ToolbarItem
|
|
184
|
-
|
|
190
|
+
}), /*#__PURE__*/React.createElement(ToolbarItem
|
|
191
|
+
// tip='插入链接'
|
|
192
|
+
, {
|
|
185
193
|
icon: /*#__PURE__*/React.createElement(LinkIcon, {
|
|
186
194
|
sx: {
|
|
187
195
|
fontSize: '1rem'
|
|
@@ -7,6 +7,6 @@ export interface UploadProgressAttributes {
|
|
|
7
7
|
tempId: string;
|
|
8
8
|
}
|
|
9
9
|
export declare const getFileIcon: (fileType: string) => React.JSX.Element;
|
|
10
|
-
export declare const getFileTypeText: (fileType: string) => "图片" | "
|
|
10
|
+
export declare const getFileTypeText: (fileType: string) => "图片" | "文件" | "音频" | "视频";
|
|
11
11
|
declare const UploadProgressView: React.FC<NodeViewProps>;
|
|
12
12
|
export default UploadProgressView;
|
package/dist/util/index.js
CHANGED
|
@@ -16,6 +16,9 @@ export var insertNodeAfterPosition = function insertNodeAfterPosition(editor, po
|
|
|
16
16
|
editor.chain().focus().insertContentAt(pos, nodeContent).run();
|
|
17
17
|
};
|
|
18
18
|
export var hasMarksInSelection = function hasMarksInSelection(state) {
|
|
19
|
+
if (state.selection.empty) {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
19
22
|
var _state$selection = state.selection,
|
|
20
23
|
from = _state$selection.from,
|
|
21
24
|
to = _state$selection.to;
|