@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.
Files changed (168) hide show
  1. package/dist/cjs/RichEditor.cjs +5 -0
  2. package/dist/cjs/RichEditor.native.js +22 -0
  3. package/dist/cjs/RichEditor.native.js.map +1 -1
  4. package/dist/cjs/RichTextEditor/index.cjs +2 -0
  5. package/dist/cjs/RichTextEditor/index.native.js +2 -0
  6. package/dist/cjs/RichTextEditor/index.native.js.map +1 -1
  7. package/dist/cjs/editor/SlashCommands.cjs +8 -1
  8. package/dist/cjs/editor/SlashCommands.native.js +14 -1
  9. package/dist/cjs/editor/SlashCommands.native.js.map +1 -1
  10. package/dist/cjs/editor/TentapEditor.native.js +15 -0
  11. package/dist/cjs/editor/TentapEditor.native.js.map +1 -1
  12. package/dist/cjs/editor/TiptapEditor.cjs +26 -230
  13. package/dist/cjs/editor/TiptapEditor.native.js +34 -280
  14. package/dist/cjs/editor/TiptapEditor.native.js.map +1 -1
  15. package/dist/cjs/editor/capabilities.cjs +37 -0
  16. package/dist/cjs/editor/capabilities.native.js +41 -0
  17. package/dist/cjs/editor/capabilities.native.js.map +1 -0
  18. package/dist/cjs/editor/extensions.cjs +275 -0
  19. package/dist/cjs/editor/extensions.native.js +328 -0
  20. package/dist/cjs/editor/extensions.native.js.map +1 -0
  21. package/dist/cjs/index.cjs +5 -2
  22. package/dist/cjs/index.native.js +4 -1
  23. package/dist/cjs/index.native.js.map +1 -1
  24. package/dist/cjs/toolbar/BubbleToolbar.cjs +9 -6
  25. package/dist/cjs/toolbar/BubbleToolbar.native.js +12 -7
  26. package/dist/cjs/toolbar/BubbleToolbar.native.js.map +1 -1
  27. package/dist/cjs/toolbar/FixedToolbar.cjs +6 -3
  28. package/dist/cjs/toolbar/MoreDropdown.cjs +17 -9
  29. package/dist/cjs/toolbar/MoreDropdown.native.js +21 -9
  30. package/dist/cjs/toolbar/MoreDropdown.native.js.map +1 -1
  31. package/dist/cjs/toolbar/TableBubble.cjs +15 -2
  32. package/dist/cjs/toolbar/TableBubble.native.js +17 -2
  33. package/dist/cjs/toolbar/TableBubble.native.js.map +1 -1
  34. package/dist/cjs/types.native.js.map +1 -1
  35. package/dist/esm/RichEditor.mjs +5 -0
  36. package/dist/esm/RichEditor.mjs.map +1 -1
  37. package/dist/esm/RichEditor.native.js +22 -0
  38. package/dist/esm/RichEditor.native.js.map +1 -1
  39. package/dist/esm/RichTextEditor/index.mjs +2 -0
  40. package/dist/esm/RichTextEditor/index.mjs.map +1 -1
  41. package/dist/esm/RichTextEditor/index.native.js +2 -0
  42. package/dist/esm/RichTextEditor/index.native.js.map +1 -1
  43. package/dist/esm/editor/SlashCommands.mjs +8 -1
  44. package/dist/esm/editor/SlashCommands.mjs.map +1 -1
  45. package/dist/esm/editor/SlashCommands.native.js +14 -1
  46. package/dist/esm/editor/SlashCommands.native.js.map +1 -1
  47. package/dist/esm/editor/TentapEditor.native.js +15 -0
  48. package/dist/esm/editor/TentapEditor.native.js.map +1 -1
  49. package/dist/esm/editor/TiptapEditor.mjs +28 -221
  50. package/dist/esm/editor/TiptapEditor.mjs.map +1 -1
  51. package/dist/esm/editor/TiptapEditor.native.js +36 -271
  52. package/dist/esm/editor/TiptapEditor.native.js.map +1 -1
  53. package/dist/esm/editor/capabilities.mjs +10 -0
  54. package/dist/esm/editor/capabilities.mjs.map +1 -0
  55. package/dist/esm/editor/capabilities.native.js +11 -0
  56. package/dist/esm/editor/capabilities.native.js.map +1 -0
  57. package/dist/esm/editor/extensions.mjs +236 -0
  58. package/dist/esm/editor/extensions.mjs.map +1 -0
  59. package/dist/esm/editor/extensions.native.js +286 -0
  60. package/dist/esm/editor/extensions.native.js.map +1 -0
  61. package/dist/esm/index.mjs +2 -1
  62. package/dist/esm/index.mjs.map +1 -1
  63. package/dist/esm/index.native.js +2 -1
  64. package/dist/esm/index.native.js.map +1 -1
  65. package/dist/esm/toolbar/BubbleToolbar.mjs +9 -6
  66. package/dist/esm/toolbar/BubbleToolbar.mjs.map +1 -1
  67. package/dist/esm/toolbar/BubbleToolbar.native.js +12 -7
  68. package/dist/esm/toolbar/BubbleToolbar.native.js.map +1 -1
  69. package/dist/esm/toolbar/FixedToolbar.mjs +6 -3
  70. package/dist/esm/toolbar/FixedToolbar.mjs.map +1 -1
  71. package/dist/esm/toolbar/MoreDropdown.mjs +17 -9
  72. package/dist/esm/toolbar/MoreDropdown.mjs.map +1 -1
  73. package/dist/esm/toolbar/MoreDropdown.native.js +21 -9
  74. package/dist/esm/toolbar/MoreDropdown.native.js.map +1 -1
  75. package/dist/esm/toolbar/TableBubble.mjs +15 -2
  76. package/dist/esm/toolbar/TableBubble.mjs.map +1 -1
  77. package/dist/esm/toolbar/TableBubble.native.js +17 -2
  78. package/dist/esm/toolbar/TableBubble.native.js.map +1 -1
  79. package/dist/esm/types.mjs.map +1 -1
  80. package/dist/esm/types.native.js.map +1 -1
  81. package/dist/jsx/RichEditor.mjs +5 -0
  82. package/dist/jsx/RichEditor.mjs.map +1 -1
  83. package/dist/jsx/RichEditor.native.js +22 -0
  84. package/dist/jsx/RichEditor.native.js.map +1 -1
  85. package/dist/jsx/RichTextEditor/index.mjs +2 -0
  86. package/dist/jsx/RichTextEditor/index.mjs.map +1 -1
  87. package/dist/jsx/RichTextEditor/index.native.js +2 -0
  88. package/dist/jsx/RichTextEditor/index.native.js.map +1 -1
  89. package/dist/jsx/editor/SlashCommands.mjs +8 -1
  90. package/dist/jsx/editor/SlashCommands.mjs.map +1 -1
  91. package/dist/jsx/editor/SlashCommands.native.js +14 -1
  92. package/dist/jsx/editor/SlashCommands.native.js.map +1 -1
  93. package/dist/jsx/editor/TentapEditor.native.js +15 -0
  94. package/dist/jsx/editor/TentapEditor.native.js.map +1 -1
  95. package/dist/jsx/editor/TiptapEditor.mjs +28 -221
  96. package/dist/jsx/editor/TiptapEditor.mjs.map +1 -1
  97. package/dist/jsx/editor/TiptapEditor.native.js +34 -280
  98. package/dist/jsx/editor/TiptapEditor.native.js.map +1 -1
  99. package/dist/jsx/editor/capabilities.mjs +10 -0
  100. package/dist/jsx/editor/capabilities.mjs.map +1 -0
  101. package/dist/jsx/editor/capabilities.native.js +41 -0
  102. package/dist/jsx/editor/capabilities.native.js.map +1 -0
  103. package/dist/jsx/editor/extensions.mjs +236 -0
  104. package/dist/jsx/editor/extensions.mjs.map +1 -0
  105. package/dist/jsx/editor/extensions.native.js +328 -0
  106. package/dist/jsx/editor/extensions.native.js.map +1 -0
  107. package/dist/jsx/index.js +2 -1
  108. package/dist/jsx/index.js.map +1 -1
  109. package/dist/jsx/index.mjs +2 -1
  110. package/dist/jsx/index.mjs.map +1 -1
  111. package/dist/jsx/index.native.js +4 -1
  112. package/dist/jsx/index.native.js.map +1 -1
  113. package/dist/jsx/toolbar/BubbleToolbar.mjs +9 -6
  114. package/dist/jsx/toolbar/BubbleToolbar.mjs.map +1 -1
  115. package/dist/jsx/toolbar/BubbleToolbar.native.js +12 -7
  116. package/dist/jsx/toolbar/BubbleToolbar.native.js.map +1 -1
  117. package/dist/jsx/toolbar/FixedToolbar.mjs +6 -3
  118. package/dist/jsx/toolbar/FixedToolbar.mjs.map +1 -1
  119. package/dist/jsx/toolbar/MoreDropdown.mjs +17 -9
  120. package/dist/jsx/toolbar/MoreDropdown.mjs.map +1 -1
  121. package/dist/jsx/toolbar/MoreDropdown.native.js +21 -9
  122. package/dist/jsx/toolbar/MoreDropdown.native.js.map +1 -1
  123. package/dist/jsx/toolbar/TableBubble.mjs +15 -2
  124. package/dist/jsx/toolbar/TableBubble.mjs.map +1 -1
  125. package/dist/jsx/toolbar/TableBubble.native.js +17 -2
  126. package/dist/jsx/toolbar/TableBubble.native.js.map +1 -1
  127. package/dist/jsx/types.mjs.map +1 -1
  128. package/dist/jsx/types.native.js.map +1 -1
  129. package/package.json +8 -8
  130. package/src/RichEditor.native.tsx +20 -0
  131. package/src/RichEditor.stories.tsx +32 -0
  132. package/src/RichEditor.tsx +5 -0
  133. package/src/RichTextEditor/index.tsx +14 -1
  134. package/src/editor/SlashCommands.tsx +10 -0
  135. package/src/editor/TentapEditor.native.tsx +13 -0
  136. package/src/editor/TiptapEditor.tsx +51 -279
  137. package/src/editor/capabilities.spec.ts +190 -0
  138. package/src/editor/capabilities.ts +76 -0
  139. package/src/editor/extensions.ts +315 -0
  140. package/src/index.ts +3 -0
  141. package/src/toolbar/BubbleToolbar.tsx +40 -28
  142. package/src/toolbar/FixedToolbar.tsx +20 -12
  143. package/src/toolbar/MoreDropdown.tsx +30 -6
  144. package/src/toolbar/TableBubble.tsx +65 -12
  145. package/src/types.ts +28 -1
  146. package/types/RichEditor.d.ts.map +1 -1
  147. package/types/RichEditor.native.d.ts.map +1 -1
  148. package/types/RichTextEditor/index.d.ts +7 -1
  149. package/types/RichTextEditor/index.d.ts.map +1 -1
  150. package/types/editor/SlashCommands.d.ts.map +1 -1
  151. package/types/editor/TentapEditor.native.d.ts.map +1 -1
  152. package/types/editor/TiptapEditor.d.ts.map +1 -1
  153. package/types/editor/capabilities.d.ts +29 -0
  154. package/types/editor/capabilities.d.ts.map +1 -0
  155. package/types/editor/extensions.d.ts +41 -0
  156. package/types/editor/extensions.d.ts.map +1 -0
  157. package/types/index.d.ts +2 -1
  158. package/types/index.d.ts.map +1 -1
  159. package/types/toolbar/BubbleToolbar.d.ts +4 -2
  160. package/types/toolbar/BubbleToolbar.d.ts.map +1 -1
  161. package/types/toolbar/FixedToolbar.d.ts +4 -2
  162. package/types/toolbar/FixedToolbar.d.ts.map +1 -1
  163. package/types/toolbar/MoreDropdown.d.ts +4 -2
  164. package/types/toolbar/MoreDropdown.d.ts.map +1 -1
  165. package/types/toolbar/TableBubble.d.ts +4 -1
  166. package/types/toolbar/TableBubble.d.ts.map +1 -1
  167. package/types/types.d.ts +23 -1
  168. 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 import_SlashCommands = require("./SlashCommands.cjs");
70
- var import_MarkdownPaste = require("./MarkdownPaste.cjs");
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: [import_starter_kit.default.configure({
270
- heading: {
271
- levels: [1, 2, 3, 4, 5, 6],
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,