@multiplatform.one/rich-text 6.3.0 → 6.4.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/dist/cjs/RichEditor.cjs +5 -0
- package/dist/cjs/RichEditor.native.js +22 -0
- package/dist/cjs/RichEditor.native.js.map +1 -1
- package/dist/cjs/RichTextEditor/index.cjs +2 -0
- package/dist/cjs/RichTextEditor/index.native.js +2 -0
- package/dist/cjs/RichTextEditor/index.native.js.map +1 -1
- package/dist/cjs/editor/SlashCommands.cjs +8 -1
- package/dist/cjs/editor/SlashCommands.native.js +14 -1
- package/dist/cjs/editor/SlashCommands.native.js.map +1 -1
- package/dist/cjs/editor/TentapEditor.native.js +15 -0
- package/dist/cjs/editor/TentapEditor.native.js.map +1 -1
- package/dist/cjs/editor/TiptapEditor.cjs +26 -230
- package/dist/cjs/editor/TiptapEditor.native.js +34 -280
- package/dist/cjs/editor/TiptapEditor.native.js.map +1 -1
- package/dist/cjs/editor/capabilities.cjs +37 -0
- package/dist/cjs/editor/capabilities.native.js +41 -0
- package/dist/cjs/editor/capabilities.native.js.map +1 -0
- package/dist/cjs/editor/extensions.cjs +275 -0
- package/dist/cjs/editor/extensions.native.js +328 -0
- package/dist/cjs/editor/extensions.native.js.map +1 -0
- package/dist/cjs/index.cjs +5 -2
- package/dist/cjs/index.native.js +4 -1
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/toolbar/BubbleToolbar.cjs +9 -6
- package/dist/cjs/toolbar/BubbleToolbar.native.js +12 -7
- package/dist/cjs/toolbar/BubbleToolbar.native.js.map +1 -1
- package/dist/cjs/toolbar/FixedToolbar.cjs +6 -3
- package/dist/cjs/toolbar/MoreDropdown.cjs +17 -9
- package/dist/cjs/toolbar/MoreDropdown.native.js +21 -9
- package/dist/cjs/toolbar/MoreDropdown.native.js.map +1 -1
- package/dist/cjs/toolbar/TableBubble.cjs +15 -2
- package/dist/cjs/toolbar/TableBubble.native.js +17 -2
- package/dist/cjs/toolbar/TableBubble.native.js.map +1 -1
- package/dist/cjs/types.native.js.map +1 -1
- package/dist/esm/RichEditor.mjs +5 -0
- package/dist/esm/RichEditor.mjs.map +1 -1
- package/dist/esm/RichEditor.native.js +22 -0
- package/dist/esm/RichEditor.native.js.map +1 -1
- package/dist/esm/RichTextEditor/index.mjs +2 -0
- package/dist/esm/RichTextEditor/index.mjs.map +1 -1
- package/dist/esm/RichTextEditor/index.native.js +2 -0
- package/dist/esm/RichTextEditor/index.native.js.map +1 -1
- package/dist/esm/editor/SlashCommands.mjs +8 -1
- package/dist/esm/editor/SlashCommands.mjs.map +1 -1
- package/dist/esm/editor/SlashCommands.native.js +14 -1
- package/dist/esm/editor/SlashCommands.native.js.map +1 -1
- package/dist/esm/editor/TentapEditor.native.js +15 -0
- package/dist/esm/editor/TentapEditor.native.js.map +1 -1
- package/dist/esm/editor/TiptapEditor.mjs +28 -221
- package/dist/esm/editor/TiptapEditor.mjs.map +1 -1
- package/dist/esm/editor/TiptapEditor.native.js +36 -271
- package/dist/esm/editor/TiptapEditor.native.js.map +1 -1
- package/dist/esm/editor/capabilities.mjs +10 -0
- package/dist/esm/editor/capabilities.mjs.map +1 -0
- package/dist/esm/editor/capabilities.native.js +11 -0
- package/dist/esm/editor/capabilities.native.js.map +1 -0
- package/dist/esm/editor/extensions.mjs +236 -0
- package/dist/esm/editor/extensions.mjs.map +1 -0
- package/dist/esm/editor/extensions.native.js +286 -0
- package/dist/esm/editor/extensions.native.js.map +1 -0
- package/dist/esm/index.mjs +2 -1
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/index.native.js +2 -1
- package/dist/esm/index.native.js.map +1 -1
- package/dist/esm/toolbar/BubbleToolbar.mjs +9 -6
- package/dist/esm/toolbar/BubbleToolbar.mjs.map +1 -1
- package/dist/esm/toolbar/BubbleToolbar.native.js +12 -7
- package/dist/esm/toolbar/BubbleToolbar.native.js.map +1 -1
- package/dist/esm/toolbar/FixedToolbar.mjs +6 -3
- package/dist/esm/toolbar/FixedToolbar.mjs.map +1 -1
- package/dist/esm/toolbar/MoreDropdown.mjs +17 -9
- package/dist/esm/toolbar/MoreDropdown.mjs.map +1 -1
- package/dist/esm/toolbar/MoreDropdown.native.js +21 -9
- package/dist/esm/toolbar/MoreDropdown.native.js.map +1 -1
- package/dist/esm/toolbar/TableBubble.mjs +15 -2
- package/dist/esm/toolbar/TableBubble.mjs.map +1 -1
- package/dist/esm/toolbar/TableBubble.native.js +17 -2
- package/dist/esm/toolbar/TableBubble.native.js.map +1 -1
- package/dist/esm/types.mjs.map +1 -1
- package/dist/esm/types.native.js.map +1 -1
- package/dist/jsx/RichEditor.mjs +5 -0
- package/dist/jsx/RichEditor.mjs.map +1 -1
- package/dist/jsx/RichEditor.native.js +22 -0
- package/dist/jsx/RichEditor.native.js.map +1 -1
- package/dist/jsx/RichTextEditor/index.mjs +2 -0
- package/dist/jsx/RichTextEditor/index.mjs.map +1 -1
- package/dist/jsx/RichTextEditor/index.native.js +2 -0
- package/dist/jsx/RichTextEditor/index.native.js.map +1 -1
- package/dist/jsx/editor/SlashCommands.mjs +8 -1
- package/dist/jsx/editor/SlashCommands.mjs.map +1 -1
- package/dist/jsx/editor/SlashCommands.native.js +14 -1
- package/dist/jsx/editor/SlashCommands.native.js.map +1 -1
- package/dist/jsx/editor/TentapEditor.native.js +15 -0
- package/dist/jsx/editor/TentapEditor.native.js.map +1 -1
- package/dist/jsx/editor/TiptapEditor.mjs +28 -221
- package/dist/jsx/editor/TiptapEditor.mjs.map +1 -1
- package/dist/jsx/editor/TiptapEditor.native.js +34 -280
- package/dist/jsx/editor/TiptapEditor.native.js.map +1 -1
- package/dist/jsx/editor/capabilities.mjs +10 -0
- package/dist/jsx/editor/capabilities.mjs.map +1 -0
- package/dist/jsx/editor/capabilities.native.js +41 -0
- package/dist/jsx/editor/capabilities.native.js.map +1 -0
- package/dist/jsx/editor/extensions.mjs +236 -0
- package/dist/jsx/editor/extensions.mjs.map +1 -0
- package/dist/jsx/editor/extensions.native.js +328 -0
- package/dist/jsx/editor/extensions.native.js.map +1 -0
- package/dist/jsx/index.js +2 -1
- package/dist/jsx/index.js.map +1 -1
- package/dist/jsx/index.mjs +2 -1
- package/dist/jsx/index.mjs.map +1 -1
- package/dist/jsx/index.native.js +4 -1
- package/dist/jsx/index.native.js.map +1 -1
- package/dist/jsx/toolbar/BubbleToolbar.mjs +9 -6
- package/dist/jsx/toolbar/BubbleToolbar.mjs.map +1 -1
- package/dist/jsx/toolbar/BubbleToolbar.native.js +12 -7
- package/dist/jsx/toolbar/BubbleToolbar.native.js.map +1 -1
- package/dist/jsx/toolbar/FixedToolbar.mjs +6 -3
- package/dist/jsx/toolbar/FixedToolbar.mjs.map +1 -1
- package/dist/jsx/toolbar/MoreDropdown.mjs +17 -9
- package/dist/jsx/toolbar/MoreDropdown.mjs.map +1 -1
- package/dist/jsx/toolbar/MoreDropdown.native.js +21 -9
- package/dist/jsx/toolbar/MoreDropdown.native.js.map +1 -1
- package/dist/jsx/toolbar/TableBubble.mjs +15 -2
- package/dist/jsx/toolbar/TableBubble.mjs.map +1 -1
- package/dist/jsx/toolbar/TableBubble.native.js +17 -2
- package/dist/jsx/toolbar/TableBubble.native.js.map +1 -1
- package/dist/jsx/types.mjs.map +1 -1
- package/dist/jsx/types.native.js.map +1 -1
- package/package.json +8 -8
- package/src/RichEditor.native.tsx +20 -0
- package/src/RichEditor.stories.tsx +32 -0
- package/src/RichEditor.tsx +5 -0
- package/src/RichTextEditor/index.tsx +14 -1
- package/src/editor/SlashCommands.tsx +10 -0
- package/src/editor/TentapEditor.native.tsx +13 -0
- package/src/editor/TiptapEditor.tsx +51 -279
- package/src/editor/capabilities.spec.ts +190 -0
- package/src/editor/capabilities.ts +76 -0
- package/src/editor/extensions.ts +315 -0
- package/src/index.ts +3 -0
- package/src/toolbar/BubbleToolbar.tsx +40 -28
- package/src/toolbar/FixedToolbar.tsx +20 -12
- package/src/toolbar/MoreDropdown.tsx +30 -6
- package/src/toolbar/TableBubble.tsx +65 -12
- package/src/types.ts +28 -1
- package/types/RichEditor.d.ts.map +1 -1
- package/types/RichEditor.native.d.ts.map +1 -1
- package/types/RichTextEditor/index.d.ts +7 -1
- package/types/RichTextEditor/index.d.ts.map +1 -1
- package/types/editor/SlashCommands.d.ts.map +1 -1
- package/types/editor/TentapEditor.native.d.ts.map +1 -1
- package/types/editor/TiptapEditor.d.ts.map +1 -1
- package/types/editor/capabilities.d.ts +29 -0
- package/types/editor/capabilities.d.ts.map +1 -0
- package/types/editor/extensions.d.ts +41 -0
- package/types/editor/extensions.d.ts.map +1 -0
- package/types/index.d.ts +2 -1
- package/types/index.d.ts.map +1 -1
- package/types/toolbar/BubbleToolbar.d.ts +4 -2
- package/types/toolbar/BubbleToolbar.d.ts.map +1 -1
- package/types/toolbar/FixedToolbar.d.ts +4 -2
- package/types/toolbar/FixedToolbar.d.ts.map +1 -1
- package/types/toolbar/MoreDropdown.d.ts +4 -2
- package/types/toolbar/MoreDropdown.d.ts.map +1 -1
- package/types/toolbar/TableBubble.d.ts +4 -1
- package/types/toolbar/TableBubble.d.ts.map +1 -1
- package/types/types.d.ts +23 -1
- package/types/types.d.ts.map +1 -1
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
var __create = Object.create;
|
|
2
1
|
var __defProp = Object.defineProperty;
|
|
3
2
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
3
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
6
4
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
5
|
var __export = (target, all) => {
|
|
8
6
|
for (var name in all) __defProp(target, name, {
|
|
@@ -19,15 +17,6 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
19
17
|
}
|
|
20
18
|
return to;
|
|
21
19
|
};
|
|
22
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
23
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
24
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
25
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
26
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
27
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
|
|
28
|
-
value: mod,
|
|
29
|
-
enumerable: true
|
|
30
|
-
}) : target, mod));
|
|
31
20
|
var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
|
|
32
21
|
value: true
|
|
33
22
|
}), mod);
|
|
@@ -38,26 +27,6 @@ __export(TiptapEditor_exports, {
|
|
|
38
27
|
module.exports = __toCommonJS(TiptapEditor_exports);
|
|
39
28
|
var import_react = require("react");
|
|
40
29
|
var import_react2 = require("@tiptap/react");
|
|
41
|
-
var import_core = require("@tiptap/core");
|
|
42
|
-
var import_starter_kit = __toESM(require("@tiptap/starter-kit"));
|
|
43
|
-
var import_extension_placeholder = __toESM(require("@tiptap/extension-placeholder"));
|
|
44
|
-
var import_extension_text_align = __toESM(require("@tiptap/extension-text-align"));
|
|
45
|
-
var import_extension_color = require("@tiptap/extension-color");
|
|
46
|
-
var import_extension_text_style = require("@tiptap/extension-text-style");
|
|
47
|
-
var import_extension_highlight = require("@tiptap/extension-highlight");
|
|
48
|
-
var import_extension_subscript = require("@tiptap/extension-subscript");
|
|
49
|
-
var import_extension_superscript = require("@tiptap/extension-superscript");
|
|
50
|
-
var import_extension_task_list = __toESM(require("@tiptap/extension-task-list"));
|
|
51
|
-
var import_extension_task_item = __toESM(require("@tiptap/extension-task-item"));
|
|
52
|
-
var import_extension_image = __toESM(require("@tiptap/extension-image"));
|
|
53
|
-
var import_extension_typography = __toESM(require("@tiptap/extension-typography"));
|
|
54
|
-
var import_extension_character_count = __toESM(require("@tiptap/extension-character-count"));
|
|
55
|
-
var import_extension_details = require("@tiptap/extension-details");
|
|
56
|
-
var import_extension_table = require("@tiptap/extension-table");
|
|
57
|
-
var import_extension_table_row = require("@tiptap/extension-table-row");
|
|
58
|
-
var import_extension_table_header = require("@tiptap/extension-table-header");
|
|
59
|
-
var import_extension_table_cell = require("@tiptap/extension-table-cell");
|
|
60
|
-
var import_lowlight = require("lowlight");
|
|
61
30
|
var import_tamagui = require("tamagui");
|
|
62
31
|
var import_constants = require("@tamagui/constants");
|
|
63
32
|
var import_theme = require("@multiplatform.one/theme");
|
|
@@ -66,13 +35,9 @@ var import_types = require("../types.cjs");
|
|
|
66
35
|
var import_context = require("../context.cjs");
|
|
67
36
|
var import_t = require("../shared/t.cjs");
|
|
68
37
|
var import_editorStyles = require("./editorStyles.cjs");
|
|
69
|
-
var
|
|
70
|
-
var
|
|
71
|
-
var import_BlockDragHandle = require("./BlockDragHandle.cjs");
|
|
72
|
-
var import_media = require("./media.cjs");
|
|
38
|
+
var import_extensions = require("./extensions.cjs");
|
|
39
|
+
var import_capabilities = require("./capabilities.cjs");
|
|
73
40
|
var import_mentions = require("./mentions.cjs");
|
|
74
|
-
var import_emoji = require("./emoji.cjs");
|
|
75
|
-
var import_mathematics = require("./mathematics.cjs");
|
|
76
41
|
var import_codeBlockPreview = require("./codeBlockPreview.cjs");
|
|
77
42
|
var import_markdown = require("./markdown.cjs");
|
|
78
43
|
var import_pasteCleanup = require("./pasteCleanup.cjs");
|
|
@@ -85,132 +50,7 @@ var import_ImageBubble = require("../toolbar/ImageBubble.cjs");
|
|
|
85
50
|
var import_TableBubble = require("../toolbar/TableBubble.cjs");
|
|
86
51
|
var import_MathBubble = require("../toolbar/MathBubble.cjs");
|
|
87
52
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
88
|
-
const lowlight = (0, import_lowlight.createLowlight)(import_lowlight.common);
|
|
89
53
|
const MOTION_MS = 120;
|
|
90
|
-
const CodeBlockTabIndent = import_core.Extension.create({
|
|
91
|
-
name: "codeBlockTabIndent",
|
|
92
|
-
addKeyboardShortcuts() {
|
|
93
|
-
return {
|
|
94
|
-
Tab: ({
|
|
95
|
-
editor
|
|
96
|
-
}) => {
|
|
97
|
-
if (!editor.isActive("codeBlock")) return false;
|
|
98
|
-
const {
|
|
99
|
-
state,
|
|
100
|
-
dispatch
|
|
101
|
-
} = editor.view;
|
|
102
|
-
const {
|
|
103
|
-
from,
|
|
104
|
-
to
|
|
105
|
-
} = state.selection;
|
|
106
|
-
if (from === to) {
|
|
107
|
-
dispatch(state.tr.insertText(" ", from, to));
|
|
108
|
-
return true;
|
|
109
|
-
}
|
|
110
|
-
const doc = state.doc;
|
|
111
|
-
const lines = [];
|
|
112
|
-
doc.nodesBetween(from, to, (node, pos) => {
|
|
113
|
-
if (node.isTextblock) {
|
|
114
|
-
lines.push({
|
|
115
|
-
start: pos + 1
|
|
116
|
-
});
|
|
117
|
-
}
|
|
118
|
-
});
|
|
119
|
-
if (lines.length === 0) {
|
|
120
|
-
dispatch(state.tr.insertText(" ", from, to));
|
|
121
|
-
return true;
|
|
122
|
-
}
|
|
123
|
-
let tr = state.tr;
|
|
124
|
-
let offset = 0;
|
|
125
|
-
for (const line of lines) {
|
|
126
|
-
const lineStart = line.start + offset;
|
|
127
|
-
tr = tr.insertText(" ", lineStart);
|
|
128
|
-
offset += 2;
|
|
129
|
-
}
|
|
130
|
-
dispatch(tr);
|
|
131
|
-
return true;
|
|
132
|
-
},
|
|
133
|
-
"Shift-Tab": ({
|
|
134
|
-
editor
|
|
135
|
-
}) => {
|
|
136
|
-
if (!editor.isActive("codeBlock")) return false;
|
|
137
|
-
const {
|
|
138
|
-
state,
|
|
139
|
-
dispatch
|
|
140
|
-
} = editor.view;
|
|
141
|
-
const {
|
|
142
|
-
from,
|
|
143
|
-
to,
|
|
144
|
-
$from
|
|
145
|
-
} = state.selection;
|
|
146
|
-
if (from === to) {
|
|
147
|
-
const lineStart = from - $from.parentOffset;
|
|
148
|
-
const text = state.doc.textBetween(lineStart, from);
|
|
149
|
-
const leadingSpaces = text.match(/^ {1,2}/)?.[0];
|
|
150
|
-
if (leadingSpaces) {
|
|
151
|
-
dispatch(state.tr.delete(lineStart, lineStart + leadingSpaces.length));
|
|
152
|
-
}
|
|
153
|
-
return true;
|
|
154
|
-
}
|
|
155
|
-
const doc = state.doc;
|
|
156
|
-
let tr = state.tr;
|
|
157
|
-
let offset = 0;
|
|
158
|
-
doc.nodesBetween(from, to, (node, pos) => {
|
|
159
|
-
if (node.isTextblock) {
|
|
160
|
-
const lineStart = pos + 1 + offset;
|
|
161
|
-
const text = tr.doc.textBetween(lineStart, Math.min(lineStart + node.content.size, tr.doc.content.size));
|
|
162
|
-
const leadingSpaces = text.match(/^ {1,2}/)?.[0];
|
|
163
|
-
if (leadingSpaces) {
|
|
164
|
-
tr = tr.delete(lineStart, lineStart + leadingSpaces.length);
|
|
165
|
-
offset -= leadingSpaces.length;
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
});
|
|
169
|
-
dispatch(tr);
|
|
170
|
-
return true;
|
|
171
|
-
}
|
|
172
|
-
};
|
|
173
|
-
}
|
|
174
|
-
});
|
|
175
|
-
const ParagraphEnterKeys = import_core.Extension.create({
|
|
176
|
-
name: "paragraphEnterKeys",
|
|
177
|
-
priority: 1e3,
|
|
178
|
-
addKeyboardShortcuts() {
|
|
179
|
-
return {
|
|
180
|
-
"Shift-Enter": ({
|
|
181
|
-
editor
|
|
182
|
-
}) => editor.commands.first([() => editor.commands.newlineInCode(), () => editor.commands.splitListItem("listItem"), () => editor.commands.createParagraphNear(), () => editor.commands.liftEmptyBlock(), () => editor.commands.splitBlock()]),
|
|
183
|
-
"Mod-Enter": ({
|
|
184
|
-
editor
|
|
185
|
-
}) => editor.commands.first([() => editor.commands.newlineInCode(), () => editor.commands.createParagraphNear(), () => editor.commands.liftEmptyBlock(), () => editor.commands.splitBlock()])
|
|
186
|
-
};
|
|
187
|
-
}
|
|
188
|
-
});
|
|
189
|
-
const ListItemKeys = import_core.Extension.create({
|
|
190
|
-
name: "listItemKeys",
|
|
191
|
-
addKeyboardShortcuts() {
|
|
192
|
-
return {
|
|
193
|
-
Tab: ({
|
|
194
|
-
editor
|
|
195
|
-
}) => {
|
|
196
|
-
if (editor.isActive("codeBlock")) return false;
|
|
197
|
-
if (editor.isActive("bulletList") || editor.isActive("orderedList") || editor.isActive("taskList")) {
|
|
198
|
-
return editor.commands.sinkListItem("listItem") || editor.commands.sinkListItem("taskItem");
|
|
199
|
-
}
|
|
200
|
-
return false;
|
|
201
|
-
},
|
|
202
|
-
"Shift-Tab": ({
|
|
203
|
-
editor
|
|
204
|
-
}) => {
|
|
205
|
-
if (editor.isActive("codeBlock")) return false;
|
|
206
|
-
if (editor.isActive("bulletList") || editor.isActive("orderedList") || editor.isActive("taskList")) {
|
|
207
|
-
return editor.commands.liftListItem("listItem") || editor.commands.liftListItem("taskItem");
|
|
208
|
-
}
|
|
209
|
-
return false;
|
|
210
|
-
}
|
|
211
|
-
};
|
|
212
|
-
}
|
|
213
|
-
});
|
|
214
54
|
const EditorContainer = (0, import_tamagui.styled)(import_tamagui.View, {
|
|
215
55
|
name: "TiptapEditorContainer",
|
|
216
56
|
flex: 1,
|
|
@@ -218,6 +58,7 @@ const EditorContainer = (0, import_tamagui.styled)(import_tamagui.View, {
|
|
|
218
58
|
overflow: "hidden"
|
|
219
59
|
});
|
|
220
60
|
const TiptapEditor = (0, import_react.memo)((0, import_react.forwardRef)(({
|
|
61
|
+
capabilities = "full",
|
|
221
62
|
initialContent = "",
|
|
222
63
|
initialJSON,
|
|
223
64
|
placeholder: placeholderProp,
|
|
@@ -265,69 +106,15 @@ const TiptapEditor = (0, import_react.memo)((0, import_react.forwardRef)(({
|
|
|
265
106
|
onStateChangeRef.current = onStateChange;
|
|
266
107
|
onChangeRef.current = onChange;
|
|
267
108
|
});
|
|
109
|
+
const [extensions] = (0, import_react.useState)(() => (0, import_extensions.buildEditorExtensions)({
|
|
110
|
+
capabilities,
|
|
111
|
+
placeholder,
|
|
112
|
+
mentionExtension
|
|
113
|
+
}));
|
|
268
114
|
const editor = (0, import_react2.useEditor)({
|
|
269
|
-
extensions
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
HTMLAttributes: {
|
|
273
|
-
dir: "auto"
|
|
274
|
-
}
|
|
275
|
-
},
|
|
276
|
-
paragraph: {
|
|
277
|
-
HTMLAttributes: {
|
|
278
|
-
dir: "auto"
|
|
279
|
-
}
|
|
280
|
-
},
|
|
281
|
-
link: {
|
|
282
|
-
openOnClick: false,
|
|
283
|
-
HTMLAttributes: {
|
|
284
|
-
rel: "noopener noreferrer",
|
|
285
|
-
target: "_blank"
|
|
286
|
-
}
|
|
287
|
-
},
|
|
288
|
-
bulletList: {
|
|
289
|
-
keepMarks: true
|
|
290
|
-
},
|
|
291
|
-
orderedList: {
|
|
292
|
-
keepMarks: true
|
|
293
|
-
},
|
|
294
|
-
codeBlock: false,
|
|
295
|
-
hardBreak: false
|
|
296
|
-
}), import_codeBlockPreview.CodeBlockWithPreview.configure({
|
|
297
|
-
lowlight,
|
|
298
|
-
exitOnTripleEnter: true,
|
|
299
|
-
exitOnArrowDown: false
|
|
300
|
-
}), ParagraphEnterKeys, CodeBlockTabIndent, ListItemKeys,
|
|
301
|
-
// superscriptTwo/Three would mangle typed TeX (`$E=mc^2$` became
|
|
302
|
-
// `E=mc²` before the math input rule ran) — off, rest stays.
|
|
303
|
-
import_extension_typography.default.configure({
|
|
304
|
-
superscriptTwo: false,
|
|
305
|
-
superscriptThree: false
|
|
306
|
-
}), import_extension_character_count.default, import_SlashCommands.SlashCommands, import_MarkdownPaste.MarkdownPaste, import_media.MediaUpload, import_suggestionPopup.SuggestionChromeStore, import_codeBlockPreview.PreviewChromeStore, import_emoji.EmojiSuggestion, import_mathematics.InlineMath,
|
|
307
|
-
// Collapsible sections (GitLab <details> parity). persist: true
|
|
308
|
-
// is the extension's supported mode: its node view re-syncs the
|
|
309
|
-
// open state from node.attrs on every update, so ephemeral
|
|
310
|
-
// (persist: false) toggles get reverted by the next transaction.
|
|
311
|
-
// The open state therefore lives in the doc and serializes as
|
|
312
|
-
// `<details open>` — valid GitLab markdown.
|
|
313
|
-
import_extension_details.Details.configure({
|
|
314
|
-
persist: true
|
|
315
|
-
}), import_extension_details.DetailsSummary, import_extension_details.DetailsContent, ...(mentionExtension ? [mentionExtension] : []), import_BlockDragHandle.BlockDragHandle, import_extension_table.Table.configure({
|
|
316
|
-
resizable: true
|
|
317
|
-
}), import_extension_table_row.TableRow, import_extension_table_header.TableHeader, import_extension_table_cell.TableCell, import_extension_placeholder.default.configure({
|
|
318
|
-
placeholder
|
|
319
|
-
}), import_extension_text_align.default.configure({
|
|
320
|
-
types: ["heading", "paragraph"],
|
|
321
|
-
defaultAlignment: "left"
|
|
322
|
-
}), import_extension_text_style.TextStyle, import_extension_color.Color, import_extension_highlight.Highlight.configure({
|
|
323
|
-
multicolor: true
|
|
324
|
-
}), import_extension_subscript.Subscript, import_extension_superscript.Superscript, import_extension_task_list.default, import_extension_task_item.default.configure({
|
|
325
|
-
nested: true
|
|
326
|
-
}), import_extension_image.default.configure({
|
|
327
|
-
inline: true,
|
|
328
|
-
allowBase64: true
|
|
329
|
-
})],
|
|
330
|
-
content: initialJSON || initialContent,
|
|
115
|
+
extensions,
|
|
116
|
+
// In markdown capabilities the incoming string IS markdown
|
|
117
|
+
content: initialJSON || (capabilities === "markdown" ? (0, import_markdown.markdownToHtml)(initialContent) : initialContent),
|
|
331
118
|
editable,
|
|
332
119
|
autofocus: autoFocus,
|
|
333
120
|
// No htmlFor target exists for the contenteditable — name it directly
|
|
@@ -351,7 +138,7 @@ const TiptapEditor = (0, import_react.memo)((0, import_react.forwardRef)(({
|
|
|
351
138
|
changeRafRef.current = requestAnimationFrame(() => {
|
|
352
139
|
const html = editor2.getHTML();
|
|
353
140
|
const json = editor2.getJSON();
|
|
354
|
-
onChangeRef.current?.(html, json);
|
|
141
|
+
onChangeRef.current?.(capabilities === "markdown" ? (0, import_markdown.htmlToMarkdown)(html) : html, json);
|
|
355
142
|
});
|
|
356
143
|
},
|
|
357
144
|
onTransaction: ({
|
|
@@ -414,10 +201,11 @@ const TiptapEditor = (0, import_react.memo)((0, import_react.forwardRef)(({
|
|
|
414
201
|
const handleMarkdownChange = (0, import_react.useCallback)(e => {
|
|
415
202
|
const md = e.target.value;
|
|
416
203
|
setMarkdownSource(md);
|
|
417
|
-
onChangeRef.current?.((0, import_markdown.markdownToHtml)(md), null);
|
|
418
|
-
}, []);
|
|
204
|
+
onChangeRef.current?.(capabilities === "markdown" ? md : (0, import_markdown.markdownToHtml)(md), null);
|
|
205
|
+
}, [capabilities]);
|
|
419
206
|
const executeCommand = (0, import_react.useCallback)((command, payload) => {
|
|
420
207
|
if (!editor) return;
|
|
208
|
+
if (!(0, import_capabilities.isCommandInCapabilities)(command, capabilities)) return;
|
|
421
209
|
const chain = editor.chain().focus();
|
|
422
210
|
switch (command) {
|
|
423
211
|
case "bold":
|
|
@@ -603,8 +391,14 @@ const TiptapEditor = (0, import_react.memo)((0, import_react.forwardRef)(({
|
|
|
603
391
|
getState: () => (0, import_useEditorState.getEditorStateFromTiptap)(editor),
|
|
604
392
|
getHTML: () => editor?.getHTML() || "",
|
|
605
393
|
getJSON: () => editor?.getJSON() || null,
|
|
394
|
+
getMarkdown: () => (0, import_markdown.htmlToMarkdown)(editor?.getHTML() || ""),
|
|
606
395
|
setHTML: html => editor?.commands.setContent(html),
|
|
607
396
|
setJSON: json => editor?.commands.setContent(json),
|
|
397
|
+
// External value sync (not a user edit): emitUpdate false so the
|
|
398
|
+
// host's own set does not echo back through onChange.
|
|
399
|
+
setMarkdown: markdown => editor?.commands.setContent((0, import_markdown.markdownToHtml)(markdown), {
|
|
400
|
+
emitUpdate: false
|
|
401
|
+
}),
|
|
608
402
|
focus: () => editor?.commands.focus(),
|
|
609
403
|
blur: () => editor?.commands.blur()
|
|
610
404
|
}), [editor, executeCommand]);
|
|
@@ -660,7 +454,8 @@ const TiptapEditor = (0, import_react.memo)((0, import_react.forwardRef)(({
|
|
|
660
454
|
children: [/* @__PURE__ */(0, import_jsx_runtime.jsx)(import_BubbleToolbar.BubbleToolbar, {
|
|
661
455
|
editor,
|
|
662
456
|
editorRef: internalRef,
|
|
663
|
-
state: import_types.defaultEditorState
|
|
457
|
+
state: import_types.defaultEditorState,
|
|
458
|
+
capabilities
|
|
664
459
|
}), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_LinkBubble.LinkBubble, {
|
|
665
460
|
editor
|
|
666
461
|
}), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_CodeBlockBubble.CodeBlockBubble, {
|
|
@@ -668,9 +463,10 @@ const TiptapEditor = (0, import_react.memo)((0, import_react.forwardRef)(({
|
|
|
668
463
|
}), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_ImageBubble.ImageBubble, {
|
|
669
464
|
editor
|
|
670
465
|
}), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_TableBubble.TableBubble, {
|
|
671
|
-
editor
|
|
466
|
+
editor,
|
|
467
|
+
capabilities
|
|
672
468
|
})]
|
|
673
|
-
}), editable && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_MathBubble.MathBubble, {
|
|
469
|
+
}), editable && capabilities !== "markdown" && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_MathBubble.MathBubble, {
|
|
674
470
|
editor
|
|
675
471
|
}), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_react2.EditorContent, {
|
|
676
472
|
editor,
|