@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
@@ -0,0 +1,236 @@
1
+ import { Extension } from "@tiptap/core";
2
+ import StarterKit from "@tiptap/starter-kit";
3
+ import Placeholder from "@tiptap/extension-placeholder";
4
+ import TextAlign from "@tiptap/extension-text-align";
5
+ import { Color } from "@tiptap/extension-color";
6
+ import { TextStyle } from "@tiptap/extension-text-style";
7
+ import { Highlight } from "@tiptap/extension-highlight";
8
+ import { Subscript } from "@tiptap/extension-subscript";
9
+ import { Superscript } from "@tiptap/extension-superscript";
10
+ import TaskList from "@tiptap/extension-task-list";
11
+ import TaskItem from "@tiptap/extension-task-item";
12
+ import Image from "@tiptap/extension-image";
13
+ import Typography from "@tiptap/extension-typography";
14
+ import CharacterCount from "@tiptap/extension-character-count";
15
+ import { Details, DetailsContent, DetailsSummary } from "@tiptap/extension-details";
16
+ import { Table } from "@tiptap/extension-table";
17
+ import { TableRow } from "@tiptap/extension-table-row";
18
+ import { TableHeader } from "@tiptap/extension-table-header";
19
+ import { TableCell } from "@tiptap/extension-table-cell";
20
+ import { common, createLowlight } from "lowlight";
21
+ import { MARKDOWN_EXCLUDED_SLASH_IDS } from "./capabilities.mjs";
22
+ import { SlashCommands } from "./SlashCommands.mjs";
23
+ import { MarkdownPaste } from "./MarkdownPaste.mjs";
24
+ import { BlockDragHandle } from "./BlockDragHandle.mjs";
25
+ import { MediaUpload } from "./media.mjs";
26
+ import { EmojiSuggestion } from "./emoji.mjs";
27
+ import { InlineMath } from "./mathematics.mjs";
28
+ import { CodeBlockWithPreview, PreviewChromeStore } from "./codeBlockPreview.mjs";
29
+ import { SuggestionChromeStore } from "./suggestionPopup.mjs";
30
+ import { t } from "../shared/t.mjs";
31
+ const lowlight = createLowlight(common);
32
+ const CodeBlockTabIndent = Extension.create({
33
+ name: "codeBlockTabIndent",
34
+ addKeyboardShortcuts() {
35
+ return {
36
+ Tab: ({
37
+ editor
38
+ }) => {
39
+ if (!editor.isActive("codeBlock")) return false;
40
+ const {
41
+ state,
42
+ dispatch
43
+ } = editor.view;
44
+ const {
45
+ from,
46
+ to
47
+ } = state.selection;
48
+ if (from === to) {
49
+ dispatch(state.tr.insertText(" ", from, to));
50
+ return true;
51
+ }
52
+ const doc = state.doc;
53
+ const lines = [];
54
+ doc.nodesBetween(from, to, (node, pos) => {
55
+ if (node.isTextblock) {
56
+ lines.push({
57
+ start: pos + 1
58
+ });
59
+ }
60
+ });
61
+ if (lines.length === 0) {
62
+ dispatch(state.tr.insertText(" ", from, to));
63
+ return true;
64
+ }
65
+ let tr = state.tr;
66
+ let offset = 0;
67
+ for (const line of lines) {
68
+ const lineStart = line.start + offset;
69
+ tr = tr.insertText(" ", lineStart);
70
+ offset += 2;
71
+ }
72
+ dispatch(tr);
73
+ return true;
74
+ },
75
+ "Shift-Tab": ({
76
+ editor
77
+ }) => {
78
+ if (!editor.isActive("codeBlock")) return false;
79
+ const {
80
+ state,
81
+ dispatch
82
+ } = editor.view;
83
+ const {
84
+ from,
85
+ to,
86
+ $from
87
+ } = state.selection;
88
+ if (from === to) {
89
+ const lineStart = from - $from.parentOffset;
90
+ const text = state.doc.textBetween(lineStart, from);
91
+ const leadingSpaces = text.match(/^ {1,2}/)?.[0];
92
+ if (leadingSpaces) {
93
+ dispatch(state.tr.delete(lineStart, lineStart + leadingSpaces.length));
94
+ }
95
+ return true;
96
+ }
97
+ const doc = state.doc;
98
+ let tr = state.tr;
99
+ let offset = 0;
100
+ doc.nodesBetween(from, to, (node, pos) => {
101
+ if (node.isTextblock) {
102
+ const lineStart = pos + 1 + offset;
103
+ const text = tr.doc.textBetween(lineStart, Math.min(lineStart + node.content.size, tr.doc.content.size));
104
+ const leadingSpaces = text.match(/^ {1,2}/)?.[0];
105
+ if (leadingSpaces) {
106
+ tr = tr.delete(lineStart, lineStart + leadingSpaces.length);
107
+ offset -= leadingSpaces.length;
108
+ }
109
+ }
110
+ });
111
+ dispatch(tr);
112
+ return true;
113
+ }
114
+ };
115
+ }
116
+ });
117
+ const ParagraphEnterKeys = Extension.create({
118
+ name: "paragraphEnterKeys",
119
+ priority: 1e3,
120
+ addKeyboardShortcuts() {
121
+ return {
122
+ "Shift-Enter": ({
123
+ editor
124
+ }) => editor.commands.first([() => editor.commands.newlineInCode(), () => editor.commands.splitListItem("listItem"), () => editor.commands.createParagraphNear(), () => editor.commands.liftEmptyBlock(), () => editor.commands.splitBlock()]),
125
+ "Mod-Enter": ({
126
+ editor
127
+ }) => editor.commands.first([() => editor.commands.newlineInCode(), () => editor.commands.createParagraphNear(), () => editor.commands.liftEmptyBlock(), () => editor.commands.splitBlock()])
128
+ };
129
+ }
130
+ });
131
+ const ListItemKeys = Extension.create({
132
+ name: "listItemKeys",
133
+ addKeyboardShortcuts() {
134
+ return {
135
+ Tab: ({
136
+ editor
137
+ }) => {
138
+ if (editor.isActive("codeBlock")) return false;
139
+ if (editor.isActive("bulletList") || editor.isActive("orderedList") || editor.isActive("taskList")) {
140
+ return editor.commands.sinkListItem("listItem") || editor.commands.sinkListItem("taskItem");
141
+ }
142
+ return false;
143
+ },
144
+ "Shift-Tab": ({
145
+ editor
146
+ }) => {
147
+ if (editor.isActive("codeBlock")) return false;
148
+ if (editor.isActive("bulletList") || editor.isActive("orderedList") || editor.isActive("taskList")) {
149
+ return editor.commands.liftListItem("listItem") || editor.commands.liftListItem("taskItem");
150
+ }
151
+ return false;
152
+ }
153
+ };
154
+ }
155
+ });
156
+ function buildEditorExtensions({
157
+ capabilities = "full",
158
+ placeholder,
159
+ mentionExtension = null
160
+ } = {}) {
161
+ const markdown = capabilities === "markdown";
162
+ return [StarterKit.configure({
163
+ heading: {
164
+ levels: [1, 2, 3, 4, 5, 6],
165
+ HTMLAttributes: {
166
+ dir: "auto"
167
+ }
168
+ },
169
+ paragraph: {
170
+ HTMLAttributes: {
171
+ dir: "auto"
172
+ }
173
+ },
174
+ link: {
175
+ openOnClick: false,
176
+ HTMLAttributes: {
177
+ rel: "noopener noreferrer",
178
+ target: "_blank"
179
+ }
180
+ },
181
+ bulletList: {
182
+ keepMarks: true
183
+ },
184
+ orderedList: {
185
+ keepMarks: true
186
+ },
187
+ codeBlock: false,
188
+ hardBreak: false,
189
+ // Markdown has no underline syntax — the mark must not exist
190
+ ...(markdown && {
191
+ underline: false
192
+ })
193
+ }), CodeBlockWithPreview.configure({
194
+ lowlight,
195
+ exitOnTripleEnter: true,
196
+ exitOnArrowDown: false
197
+ }), ParagraphEnterKeys, CodeBlockTabIndent, ListItemKeys,
198
+ // superscriptTwo/Three would mangle typed TeX (`$E=mc^2$` became
199
+ // `E=mc²` before the math input rule ran) — off, rest stays.
200
+ Typography.configure({
201
+ superscriptTwo: false,
202
+ superscriptThree: false
203
+ }), CharacterCount, SlashCommands.configure({
204
+ excludeIds: markdown ? [...MARKDOWN_EXCLUDED_SLASH_IDS] : []
205
+ }), MarkdownPaste, MediaUpload, SuggestionChromeStore, PreviewChromeStore,
206
+ // Emoji suggestions insert plain unicode characters (just text), so
207
+ // they stay available in markdown capabilities.
208
+ EmojiSuggestion, ...(markdown ? [] : [InlineMath,
209
+ // Collapsible sections (GitLab <details> parity). persist: true
210
+ // is the extension's supported mode: its node view re-syncs the
211
+ // open state from node.attrs on every update, so ephemeral
212
+ // (persist: false) toggles get reverted by the next transaction.
213
+ // The open state therefore lives in the doc and serializes as
214
+ // `<details open>` — valid GitLab markdown.
215
+ Details.configure({
216
+ persist: true
217
+ }), DetailsSummary, DetailsContent]),
218
+ // Mention chips have no markdown representation — full surface only
219
+ ...(mentionExtension && !markdown ? [mentionExtension] : []), BlockDragHandle, Table.configure({
220
+ resizable: true
221
+ }), TableRow, TableHeader, TableCell, Placeholder.configure({
222
+ placeholder: placeholder ?? t("Start writing...")
223
+ }), ...(markdown ? [] : [TextAlign.configure({
224
+ types: ["heading", "paragraph"],
225
+ defaultAlignment: "left"
226
+ }), TextStyle, Color, Highlight.configure({
227
+ multicolor: true
228
+ }), Subscript, Superscript]), TaskList, TaskItem.configure({
229
+ nested: true
230
+ }), Image.configure({
231
+ inline: true,
232
+ allowBase64: true
233
+ })];
234
+ }
235
+ export { CodeBlockTabIndent, ListItemKeys, ParagraphEnterKeys, buildEditorExtensions };
236
+ //# sourceMappingURL=extensions.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Extension","StarterKit","Placeholder","TextAlign","Color","TextStyle","Highlight","Subscript","Superscript","TaskList","TaskItem","Image","Typography","CharacterCount","Details","DetailsContent","DetailsSummary","Table","TableRow","TableHeader","TableCell","common","createLowlight","MARKDOWN_EXCLUDED_SLASH_IDS","SlashCommands","MarkdownPaste","BlockDragHandle","MediaUpload","EmojiSuggestion","InlineMath","CodeBlockWithPreview","PreviewChromeStore","SuggestionChromeStore","t","lowlight","CodeBlockTabIndent","create","name","addKeyboardShortcuts","Tab","editor","isActive","state","dispatch","view","from","to","selection","tr","insertText","doc","lines","nodesBetween","node","pos","isTextblock","push","start","length","offset","line","lineStart","Shift-Tab","$from","parentOffset","text","textBetween","leadingSpaces","match","delete","Math","min","content","size","ParagraphEnterKeys","priority","Shift-Enter","commands","first","newlineInCode","splitListItem","createParagraphNear","liftEmptyBlock","splitBlock","Mod-Enter","ListItemKeys","sinkListItem","liftListItem","buildEditorExtensions","capabilities","placeholder","mentionExtension","markdown","configure","heading","levels","HTMLAttributes","dir","paragraph","link","openOnClick","rel","target","bulletList","keepMarks","orderedList","codeBlock","hardBreak","underline","exitOnTripleEnter","exitOnArrowDown","superscriptTwo","superscriptThree","excludeIds","persist","resizable","types","defaultAlignment","multicolor","nested","inline","allowBase64"],"sources":["../../../src/editor/extensions.ts"],"sourcesContent":[null],"mappings":"AAWA,SAASA,SAAA,QAAkC;AAC3C,OAAOC,UAAA,MAAgB;AACvB,OAAOC,WAAA,MAAiB;AACxB,OAAOC,SAAA,MAAe;AACtB,SAASC,KAAA,QAAa;AACtB,SAASC,SAAA,QAAiB;AAC1B,SAASC,SAAA,QAAiB;AAC1B,SAASC,SAAA,QAAiB;AAC1B,SAASC,WAAA,QAAmB;AAC5B,OAAOC,QAAA,MAAc;AACrB,OAAOC,QAAA,MAAc;AACrB,OAAOC,KAAA,MAAW;AAClB,OAAOC,UAAA,MAAgB;AACvB,OAAOC,cAAA,MAAoB;AAC3B,SAASC,OAAA,EAASC,cAAA,EAAgBC,cAAA,QAAsB;AACxD,SAASC,KAAA,QAAa;AACtB,SAASC,QAAA,QAAgB;AACzB,SAASC,WAAA,QAAmB;AAC5B,SAASC,SAAA,QAAiB;AAC1B,SAASC,MAAA,EAAQC,cAAA,QAAsB;AAEvC,SAASC,2BAAA,QAAmC;AAC5C,SAASC,aAAA,QAAqB;AAC9B,SAASC,aAAA,QAAqB;AAC9B,SAASC,eAAA,QAAuB;AAChC,SAASC,WAAA,QAAmB;AAC5B,SAASC,eAAA,QAAuB;AAChC,SAASC,UAAA,QAAkB;AAC3B,SAASC,oBAAA,EAAsBC,kBAAA,QAA0B;AACzD,SAASC,qBAAA,QAA6B;AACtC,SAASC,CAAA,QAAS;AAElB,MAAMC,QAAA,GAAWZ,cAAA,CAAeD,MAAM;AAM/B,MAAMc,kBAAA,GAAqBnC,SAAA,CAAUoC,MAAA,CAAO;EACjDC,IAAA,EAAM;EACNC,qBAAA,EAAuB;IACrB,OAAO;MACLC,GAAA,EAAKA,CAAC;QAAEC;MAAO,MAAM;QACnB,IAAI,CAACA,MAAA,CAAOC,QAAA,CAAS,WAAW,GAAG,OAAO;QAC1C,MAAM;UAAEC,KAAA;UAAOC;QAAS,IAAIH,MAAA,CAAOI,IAAA;QACnC,MAAM;UAAEC,IAAA;UAAMC;QAAG,IAAIJ,KAAA,CAAMK,SAAA;QAE3B,IAAIF,IAAA,KAASC,EAAA,EAAI;UACfH,QAAA,CAASD,KAAA,CAAMM,EAAA,CAAGC,UAAA,CAAW,MAAMJ,IAAA,EAAMC,EAAE,CAAC;UAC5C,OAAO;QACT;QAEA,MAAMI,GAAA,GAAMR,KAAA,CAAMQ,GAAA;QAClB,MAAMC,KAAA,GAA6B,EAAC;QACpCD,GAAA,CAAIE,YAAA,CAAaP,IAAA,EAAMC,EAAA,EAAI,CAACO,IAAA,EAAMC,GAAA,KAAQ;UACxC,IAAID,IAAA,CAAKE,WAAA,EAAa;YACpBJ,KAAA,CAAMK,IAAA,CAAK;cAAEC,KAAA,EAAOH,GAAA,GAAM;YAAE,CAAC;UAC/B;QACF,CAAC;QACD,IAAIH,KAAA,CAAMO,MAAA,KAAW,GAAG;UACtBf,QAAA,CAASD,KAAA,CAAMM,EAAA,CAAGC,UAAA,CAAW,MAAMJ,IAAA,EAAMC,EAAE,CAAC;UAC5C,OAAO;QACT;QAEA,IAAIE,EAAA,GAAKN,KAAA,CAAMM,EAAA;QACf,IAAIW,MAAA,GAAS;QACb,WAAWC,IAAA,IAAQT,KAAA,EAAO;UACxB,MAAMU,SAAA,GAAYD,IAAA,CAAKH,KAAA,GAAQE,MAAA;UAC/BX,EAAA,GAAKA,EAAA,CAAGC,UAAA,CAAW,MAAMY,SAAS;UAClCF,MAAA,IAAU;QACZ;QACAhB,QAAA,CAASK,EAAE;QACX,OAAO;MACT;MACA,aAAac,CAAC;QAAEtB;MAAO,MAAM;QAC3B,IAAI,CAACA,MAAA,CAAOC,QAAA,CAAS,WAAW,GAAG,OAAO;QAC1C,MAAM;UAAEC,KAAA;UAAOC;QAAS,IAAIH,MAAA,CAAOI,IAAA;QACnC,MAAM;UAAEC,IAAA;UAAMC,EAAA;UAAIiB;QAAM,IAAIrB,KAAA,CAAMK,SAAA;QAElC,IAAIF,IAAA,KAASC,EAAA,EAAI;UACf,MAAMe,SAAA,GAAYhB,IAAA,GAAOkB,KAAA,CAAMC,YAAA;UAC/B,MAAMC,IAAA,GAAOvB,KAAA,CAAMQ,GAAA,CAAIgB,WAAA,CAAYL,SAAA,EAAWhB,IAAI;UAClD,MAAMsB,aAAA,GAAgBF,IAAA,CAAKG,KAAA,CAAM,SAAS,IAAI,CAAC;UAC/C,IAAID,aAAA,EAAe;YACjBxB,QAAA,CAASD,KAAA,CAAMM,EAAA,CAAGqB,MAAA,CAAOR,SAAA,EAAWA,SAAA,GAAYM,aAAA,CAAcT,MAAM,CAAC;UACvE;UACA,OAAO;QACT;QAEA,MAAMR,GAAA,GAAMR,KAAA,CAAMQ,GAAA;QAClB,IAAIF,EAAA,GAAKN,KAAA,CAAMM,EAAA;QACf,IAAIW,MAAA,GAAS;QACbT,GAAA,CAAIE,YAAA,CAAaP,IAAA,EAAMC,EAAA,EAAI,CAACO,IAAA,EAAMC,GAAA,KAAQ;UACxC,IAAID,IAAA,CAAKE,WAAA,EAAa;YACpB,MAAMM,SAAA,GAAYP,GAAA,GAAM,IAAIK,MAAA;YAC5B,MAAMM,IAAA,GAAOjB,EAAA,CAAGE,GAAA,CAAIgB,WAAA,CAClBL,SAAA,EACAS,IAAA,CAAKC,GAAA,CAAIV,SAAA,GAAYR,IAAA,CAAKmB,OAAA,CAAQC,IAAA,EAAMzB,EAAA,CAAGE,GAAA,CAAIsB,OAAA,CAAQC,IAAI,CAC7D;YACA,MAAMN,aAAA,GAAgBF,IAAA,CAAKG,KAAA,CAAM,SAAS,IAAI,CAAC;YAC/C,IAAID,aAAA,EAAe;cACjBnB,EAAA,GAAKA,EAAA,CAAGqB,MAAA,CAAOR,SAAA,EAAWA,SAAA,GAAYM,aAAA,CAAcT,MAAM;cAC1DC,MAAA,IAAUQ,aAAA,CAAcT,MAAA;YAC1B;UACF;QACF,CAAC;QACDf,QAAA,CAASK,EAAE;QACX,OAAO;MACT;IACF;EACF;AACF,CAAC;AAQM,MAAM0B,kBAAA,GAAqB1E,SAAA,CAAUoC,MAAA,CAAO;EACjDC,IAAA,EAAM;EACNsC,QAAA,EAAU;EACVrC,qBAAA,EAAuB;IACrB,OAAO;MACL,eAAesC,CAAC;QAAEpC;MAAO,MACvBA,MAAA,CAAOqC,QAAA,CAASC,KAAA,CAAM,CACpB,MAAMtC,MAAA,CAAOqC,QAAA,CAASE,aAAA,CAAc,GACpC,MAAMvC,MAAA,CAAOqC,QAAA,CAASG,aAAA,CAAc,UAAU,GAC9C,MAAMxC,MAAA,CAAOqC,QAAA,CAASI,mBAAA,CAAoB,GAC1C,MAAMzC,MAAA,CAAOqC,QAAA,CAASK,cAAA,CAAe,GACrC,MAAM1C,MAAA,CAAOqC,QAAA,CAASM,UAAA,CAAW,EAClC;MACH,aAAaC,CAAC;QAAE5C;MAAO,MACrBA,MAAA,CAAOqC,QAAA,CAASC,KAAA,CAAM,CACpB,MAAMtC,MAAA,CAAOqC,QAAA,CAASE,aAAA,CAAc,GACpC,MAAMvC,MAAA,CAAOqC,QAAA,CAASI,mBAAA,CAAoB,GAC1C,MAAMzC,MAAA,CAAOqC,QAAA,CAASK,cAAA,CAAe,GACrC,MAAM1C,MAAA,CAAOqC,QAAA,CAASM,UAAA,CAAW,EAClC;IACL;EACF;AACF,CAAC;AAOM,MAAME,YAAA,GAAerF,SAAA,CAAUoC,MAAA,CAAO;EAC3CC,IAAA,EAAM;EACNC,qBAAA,EAAuB;IACrB,OAAO;MACLC,GAAA,EAAKA,CAAC;QAAEC;MAAO,MAAM;QACnB,IAAIA,MAAA,CAAOC,QAAA,CAAS,WAAW,GAAG,OAAO;QACzC,IACED,MAAA,CAAOC,QAAA,CAAS,YAAY,KAC5BD,MAAA,CAAOC,QAAA,CAAS,aAAa,KAC7BD,MAAA,CAAOC,QAAA,CAAS,UAAU,GAC1B;UACA,OACED,MAAA,CAAOqC,QAAA,CAASS,YAAA,CAAa,UAAU,KAAK9C,MAAA,CAAOqC,QAAA,CAASS,YAAA,CAAa,UAAU;QAEvF;QACA,OAAO;MACT;MACA,aAAaxB,CAAC;QAAEtB;MAAO,MAAM;QAC3B,IAAIA,MAAA,CAAOC,QAAA,CAAS,WAAW,GAAG,OAAO;QACzC,IACED,MAAA,CAAOC,QAAA,CAAS,YAAY,KAC5BD,MAAA,CAAOC,QAAA,CAAS,aAAa,KAC7BD,MAAA,CAAOC,QAAA,CAAS,UAAU,GAC1B;UACA,OACED,MAAA,CAAOqC,QAAA,CAASU,YAAA,CAAa,UAAU,KAAK/C,MAAA,CAAOqC,QAAA,CAASU,YAAA,CAAa,UAAU;QAEvF;QACA,OAAO;MACT;IACF;EACF;AACF,CAAC;AAgBM,SAASC,sBAAsB;EACpCC,YAAA,GAAe;EACfC,WAAA;EACAC,gBAAA,GAAmB;AACrB,IAAkC,CAAC,GAAe;EAChD,MAAMC,QAAA,GAAWH,YAAA,KAAiB;EAElC,OAAO,CACLxF,UAAA,CAAW4F,SAAA,CAAU;IACnBC,OAAA,EAAS;MACPC,MAAA,EAAQ,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;MACzBC,cAAA,EAAgB;QAAEC,GAAA,EAAK;MAAO;IAChC;IACAC,SAAA,EAAW;MACTF,cAAA,EAAgB;QAAEC,GAAA,EAAK;MAAO;IAChC;IACAE,IAAA,EAAM;MACJC,WAAA,EAAa;MACbJ,cAAA,EAAgB;QACdK,GAAA,EAAK;QACLC,MAAA,EAAQ;MACV;IACF;IACAC,UAAA,EAAY;MACVC,SAAA,EAAW;IACb;IACAC,WAAA,EAAa;MACXD,SAAA,EAAW;IACb;IACAE,SAAA,EAAW;IACXC,SAAA,EAAW;IAAA;IAEX,IAAIf,QAAA,IAAY;MAAEgB,SAAA,EAAW;IAAM;EACrC,CAAC,GACD9E,oBAAA,CAAqB+D,SAAA,CAAU;IAC7B3D,QAAA;IACA2E,iBAAA,EAAmB;IACnBC,eAAA,EAAiB;EACnB,CAAC,GACDpC,kBAAA,EACAvC,kBAAA,EACAkD,YAAA;EAAA;EAAA;EAGAzE,UAAA,CAAWiF,SAAA,CAAU;IACnBkB,cAAA,EAAgB;IAChBC,gBAAA,EAAkB;EACpB,CAAC,GACDnG,cAAA,EACAW,aAAA,CAAcqE,SAAA,CAAU;IACtBoB,UAAA,EAAYrB,QAAA,GAAW,CAAC,GAAGrE,2BAA2B,IAAI;EAC5D,CAAC,GACDE,aAAA,EACAE,WAAA,EACAK,qBAAA,EACAD,kBAAA;EAAA;EAAA;EAGAH,eAAA,EACA,IAAIgE,QAAA,GACA,EAAC,GACD,CACE/D,UAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAOAf,OAAA,CAAQ+E,SAAA,CAAU;IAAEqB,OAAA,EAAS;EAAK,CAAC,GACnClG,cAAA,EACAD,cAAA,CACF;EAAA;EAEJ,IAAI4E,gBAAA,IAAoB,CAACC,QAAA,GAAW,CAACD,gBAAgB,IAAI,EAAC,GAC1DjE,eAAA,EACAT,KAAA,CAAM4E,SAAA,CAAU;IAAEsB,SAAA,EAAW;EAAK,CAAC,GACnCjG,QAAA,EACAC,WAAA,EACAC,SAAA,EACAlB,WAAA,CAAY2F,SAAA,CAAU;IACpBH,WAAA,EAAaA,WAAA,IAAezD,CAAA,CAAE,kBAAkB;EAClD,CAAC,GACD,IAAI2D,QAAA,GACA,EAAC,GACD,CACEzF,SAAA,CAAU0F,SAAA,CAAU;IAClBuB,KAAA,EAAO,CAAC,WAAW,WAAW;IAC9BC,gBAAA,EAAkB;EACpB,CAAC,GACDhH,SAAA,EACAD,KAAA,EACAE,SAAA,CAAUuF,SAAA,CAAU;IAClByB,UAAA,EAAY;EACd,CAAC,GACD/G,SAAA,EACAC,WAAA,CACF,GACJC,QAAA,EACAC,QAAA,CAASmF,SAAA,CAAU;IACjB0B,MAAA,EAAQ;EACV,CAAC,GACD5G,KAAA,CAAMkF,SAAA,CAAU;IACd2B,MAAA,EAAQ;IACRC,WAAA,EAAa;EACf,CAAC,EACH;AACF","ignoreList":[]}
@@ -0,0 +1,286 @@
1
+ import { Extension } from "@tiptap/core";
2
+ import StarterKit from "@tiptap/starter-kit";
3
+ import Placeholder from "@tiptap/extension-placeholder";
4
+ import TextAlign from "@tiptap/extension-text-align";
5
+ import { Color } from "@tiptap/extension-color";
6
+ import { TextStyle } from "@tiptap/extension-text-style";
7
+ import { Highlight } from "@tiptap/extension-highlight";
8
+ import { Subscript } from "@tiptap/extension-subscript";
9
+ import { Superscript } from "@tiptap/extension-superscript";
10
+ import TaskList from "@tiptap/extension-task-list";
11
+ import TaskItem from "@tiptap/extension-task-item";
12
+ import Image from "@tiptap/extension-image";
13
+ import Typography from "@tiptap/extension-typography";
14
+ import CharacterCount from "@tiptap/extension-character-count";
15
+ import { Details, DetailsContent, DetailsSummary } from "@tiptap/extension-details";
16
+ import { Table } from "@tiptap/extension-table";
17
+ import { TableRow } from "@tiptap/extension-table-row";
18
+ import { TableHeader } from "@tiptap/extension-table-header";
19
+ import { TableCell } from "@tiptap/extension-table-cell";
20
+ import { common, createLowlight } from "lowlight";
21
+ import { MARKDOWN_EXCLUDED_SLASH_IDS } from "./capabilities.native.js";
22
+ import { SlashCommands } from "./SlashCommands.native.js";
23
+ import { MarkdownPaste } from "./MarkdownPaste.native.js";
24
+ import { BlockDragHandle } from "./BlockDragHandle.native.js";
25
+ import { MediaUpload } from "./media.native.js";
26
+ import { EmojiSuggestion } from "./emoji.native.js";
27
+ import { InlineMath } from "./mathematics.native.js";
28
+ import { CodeBlockWithPreview, PreviewChromeStore } from "./codeBlockPreview.native.js";
29
+ import { SuggestionChromeStore } from "./suggestionPopup.native.js";
30
+ import { t } from "../shared/t.native.js";
31
+ var lowlight = createLowlight(common);
32
+ var CodeBlockTabIndent = Extension.create({
33
+ name: "codeBlockTabIndent",
34
+ addKeyboardShortcuts() {
35
+ return {
36
+ Tab: function Tab(param) {
37
+ var {
38
+ editor
39
+ } = param;
40
+ if (!editor.isActive("codeBlock")) return false;
41
+ var {
42
+ state,
43
+ dispatch
44
+ } = editor.view;
45
+ var {
46
+ from,
47
+ to
48
+ } = state.selection;
49
+ if (from === to) {
50
+ dispatch(state.tr.insertText(" ", from, to));
51
+ return true;
52
+ }
53
+ var doc = state.doc;
54
+ var lines = [];
55
+ doc.nodesBetween(from, to, function (node, pos) {
56
+ if (node.isTextblock) {
57
+ lines.push({
58
+ start: pos + 1
59
+ });
60
+ }
61
+ });
62
+ if (lines.length === 0) {
63
+ dispatch(state.tr.insertText(" ", from, to));
64
+ return true;
65
+ }
66
+ var tr = state.tr;
67
+ var offset = 0;
68
+ var _iteratorNormalCompletion = true,
69
+ _didIteratorError = false,
70
+ _iteratorError = void 0;
71
+ try {
72
+ for (var _iterator = lines[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
73
+ var line = _step.value;
74
+ var lineStart = line.start + offset;
75
+ tr = tr.insertText(" ", lineStart);
76
+ offset += 2;
77
+ }
78
+ } catch (err) {
79
+ _didIteratorError = true;
80
+ _iteratorError = err;
81
+ } finally {
82
+ try {
83
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
84
+ _iterator.return();
85
+ }
86
+ } finally {
87
+ if (_didIteratorError) {
88
+ throw _iteratorError;
89
+ }
90
+ }
91
+ }
92
+ dispatch(tr);
93
+ return true;
94
+ },
95
+ "Shift-Tab": function (param) {
96
+ var {
97
+ editor
98
+ } = param;
99
+ if (!editor.isActive("codeBlock")) return false;
100
+ var {
101
+ state,
102
+ dispatch
103
+ } = editor.view;
104
+ var {
105
+ from,
106
+ to,
107
+ $from
108
+ } = state.selection;
109
+ if (from === to) {
110
+ var _text_match;
111
+ var lineStart = from - $from.parentOffset;
112
+ var text = state.doc.textBetween(lineStart, from);
113
+ var leadingSpaces = (_text_match = text.match(/^ {1,2}/)) === null || _text_match === void 0 ? void 0 : _text_match[0];
114
+ if (leadingSpaces) {
115
+ dispatch(state.tr.delete(lineStart, lineStart + leadingSpaces.length));
116
+ }
117
+ return true;
118
+ }
119
+ var doc = state.doc;
120
+ var tr = state.tr;
121
+ var offset = 0;
122
+ doc.nodesBetween(from, to, function (node, pos) {
123
+ if (node.isTextblock) {
124
+ var _text_match2;
125
+ var lineStart2 = pos + 1 + offset;
126
+ var text2 = tr.doc.textBetween(lineStart2, Math.min(lineStart2 + node.content.size, tr.doc.content.size));
127
+ var leadingSpaces2 = (_text_match2 = text2.match(/^ {1,2}/)) === null || _text_match2 === void 0 ? void 0 : _text_match2[0];
128
+ if (leadingSpaces2) {
129
+ tr = tr.delete(lineStart2, lineStart2 + leadingSpaces2.length);
130
+ offset -= leadingSpaces2.length;
131
+ }
132
+ }
133
+ });
134
+ dispatch(tr);
135
+ return true;
136
+ }
137
+ };
138
+ }
139
+ });
140
+ var ParagraphEnterKeys = Extension.create({
141
+ name: "paragraphEnterKeys",
142
+ priority: 1e3,
143
+ addKeyboardShortcuts() {
144
+ return {
145
+ "Shift-Enter": function (param) {
146
+ var {
147
+ editor
148
+ } = param;
149
+ return editor.commands.first([function () {
150
+ return editor.commands.newlineInCode();
151
+ }, function () {
152
+ return editor.commands.splitListItem("listItem");
153
+ }, function () {
154
+ return editor.commands.createParagraphNear();
155
+ }, function () {
156
+ return editor.commands.liftEmptyBlock();
157
+ }, function () {
158
+ return editor.commands.splitBlock();
159
+ }]);
160
+ },
161
+ "Mod-Enter": function (param) {
162
+ var {
163
+ editor
164
+ } = param;
165
+ return editor.commands.first([function () {
166
+ return editor.commands.newlineInCode();
167
+ }, function () {
168
+ return editor.commands.createParagraphNear();
169
+ }, function () {
170
+ return editor.commands.liftEmptyBlock();
171
+ }, function () {
172
+ return editor.commands.splitBlock();
173
+ }]);
174
+ }
175
+ };
176
+ }
177
+ });
178
+ var ListItemKeys = Extension.create({
179
+ name: "listItemKeys",
180
+ addKeyboardShortcuts() {
181
+ return {
182
+ Tab: function Tab(param) {
183
+ var {
184
+ editor
185
+ } = param;
186
+ if (editor.isActive("codeBlock")) return false;
187
+ if (editor.isActive("bulletList") || editor.isActive("orderedList") || editor.isActive("taskList")) {
188
+ return editor.commands.sinkListItem("listItem") || editor.commands.sinkListItem("taskItem");
189
+ }
190
+ return false;
191
+ },
192
+ "Shift-Tab": function (param) {
193
+ var {
194
+ editor
195
+ } = param;
196
+ if (editor.isActive("codeBlock")) return false;
197
+ if (editor.isActive("bulletList") || editor.isActive("orderedList") || editor.isActive("taskList")) {
198
+ return editor.commands.liftListItem("listItem") || editor.commands.liftListItem("taskItem");
199
+ }
200
+ return false;
201
+ }
202
+ };
203
+ }
204
+ });
205
+ function buildEditorExtensions() {
206
+ var {
207
+ capabilities = "full",
208
+ placeholder,
209
+ mentionExtension = null
210
+ } = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
211
+ var markdown = capabilities === "markdown";
212
+ return [StarterKit.configure({
213
+ heading: {
214
+ levels: [1, 2, 3, 4, 5, 6],
215
+ HTMLAttributes: {
216
+ dir: "auto"
217
+ }
218
+ },
219
+ paragraph: {
220
+ HTMLAttributes: {
221
+ dir: "auto"
222
+ }
223
+ },
224
+ link: {
225
+ openOnClick: false,
226
+ HTMLAttributes: {
227
+ rel: "noopener noreferrer",
228
+ target: "_blank"
229
+ }
230
+ },
231
+ bulletList: {
232
+ keepMarks: true
233
+ },
234
+ orderedList: {
235
+ keepMarks: true
236
+ },
237
+ codeBlock: false,
238
+ hardBreak: false,
239
+ // Markdown has no underline syntax — the mark must not exist
240
+ ...(markdown && {
241
+ underline: false
242
+ })
243
+ }), CodeBlockWithPreview.configure({
244
+ lowlight,
245
+ exitOnTripleEnter: true,
246
+ exitOnArrowDown: false
247
+ }), ParagraphEnterKeys, CodeBlockTabIndent, ListItemKeys,
248
+ // superscriptTwo/Three would mangle typed TeX (`$E=mc^2$` became
249
+ // `E=mc²` before the math input rule ran) — off, rest stays.
250
+ Typography.configure({
251
+ superscriptTwo: false,
252
+ superscriptThree: false
253
+ }), CharacterCount, SlashCommands.configure({
254
+ excludeIds: markdown ? [...MARKDOWN_EXCLUDED_SLASH_IDS] : []
255
+ }), MarkdownPaste, MediaUpload, SuggestionChromeStore, PreviewChromeStore,
256
+ // Emoji suggestions insert plain unicode characters (just text), so
257
+ // they stay available in markdown capabilities.
258
+ EmojiSuggestion, ...(markdown ? [] : [InlineMath,
259
+ // Collapsible sections (GitLab <details> parity). persist: true
260
+ // is the extension's supported mode: its node view re-syncs the
261
+ // open state from node.attrs on every update, so ephemeral
262
+ // (persist: false) toggles get reverted by the next transaction.
263
+ // The open state therefore lives in the doc and serializes as
264
+ // `<details open>` — valid GitLab markdown.
265
+ Details.configure({
266
+ persist: true
267
+ }), DetailsSummary, DetailsContent]),
268
+ // Mention chips have no markdown representation — full surface only
269
+ ...(mentionExtension && !markdown ? [mentionExtension] : []), BlockDragHandle, Table.configure({
270
+ resizable: true
271
+ }), TableRow, TableHeader, TableCell, Placeholder.configure({
272
+ placeholder: placeholder !== null && placeholder !== void 0 ? placeholder : t("Start writing...")
273
+ }), ...(markdown ? [] : [TextAlign.configure({
274
+ types: ["heading", "paragraph"],
275
+ defaultAlignment: "left"
276
+ }), TextStyle, Color, Highlight.configure({
277
+ multicolor: true
278
+ }), Subscript, Superscript]), TaskList, TaskItem.configure({
279
+ nested: true
280
+ }), Image.configure({
281
+ inline: true,
282
+ allowBase64: true
283
+ })];
284
+ }
285
+ export { CodeBlockTabIndent, ListItemKeys, ParagraphEnterKeys, buildEditorExtensions };
286
+ //# sourceMappingURL=extensions.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Extension","StarterKit","Placeholder","TextAlign","Color","TextStyle","Highlight","Subscript","Superscript","TaskList","TaskItem","Image","Typography","CharacterCount","Details","DetailsContent","DetailsSummary","Table","TableRow","TableHeader","TableCell","common","createLowlight","MARKDOWN_EXCLUDED_SLASH_IDS","SlashCommands","MarkdownPaste","BlockDragHandle","MediaUpload","EmojiSuggestion","InlineMath","CodeBlockWithPreview","PreviewChromeStore","SuggestionChromeStore","t","lowlight","CodeBlockTabIndent","create","name","addKeyboardShortcuts","Tab","param","editor","isActive","state","dispatch","view","from","to","selection","tr","insertText","doc","lines","nodesBetween","node","pos","isTextblock","push","start","length","offset","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","Symbol","iterator","_step","next","done","line","value","lineStart","err","return","Shift-Tab","$from","_text_match","parentOffset","text","textBetween","leadingSpaces","match","delete","_text_match2","lineStart2","text2","Math","min","content","size","leadingSpaces2","ParagraphEnterKeys","priority","Shift-Enter","commands","first","newlineInCode","splitListItem","createParagraphNear","liftEmptyBlock","splitBlock","Mod-Enter","ListItemKeys","sinkListItem","liftListItem","buildEditorExtensions","capabilities","placeholder","mentionExtension","arguments","markdown","configure","heading","levels","HTMLAttributes","dir","paragraph","link","openOnClick","rel","target","bulletList","keepMarks","orderedList","codeBlock","hardBreak","underline","exitOnTripleEnter","exitOnArrowDown","superscriptTwo","superscriptThree"],"sources":["../../../src/editor/extensions.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -1,4 +1,5 @@
1
1
  import { RichEditor } from "./RichEditor.mjs";
2
2
  import { RichTextEditor } from "./RichTextEditor/index.mjs";
3
- export { RichEditor, RichTextEditor };
3
+ import { MARKDOWN_COMMANDS, isCommandInCapabilities } from "./editor/capabilities.mjs";
4
+ export { MARKDOWN_COMMANDS, RichEditor, RichTextEditor, isCommandInCapabilities };
4
5
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"names":["RichEditor","RichTextEditor"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAMA,SAASA,UAAA,QAAkB;AAG3B,SAASC,cAAA,QAAsB","ignoreList":[]}
1
+ {"version":3,"names":["RichEditor","RichTextEditor","MARKDOWN_COMMANDS","isCommandInCapabilities"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAMA,SAASA,UAAA,QAAkB;AAG3B,SAASC,cAAA,QAAsB;AAY/B,SAASC,iBAAA,EAAmBC,uBAAA,QAA+B","ignoreList":[]}
@@ -1,4 +1,5 @@
1
1
  import { RichEditor } from "./RichEditor.native.js";
2
2
  import { RichTextEditor } from "./RichTextEditor/index.native.js";
3
- export { RichEditor, RichTextEditor };
3
+ import { MARKDOWN_COMMANDS, isCommandInCapabilities } from "./editor/capabilities.native.js";
4
+ export { MARKDOWN_COMMANDS, RichEditor, RichTextEditor, isCommandInCapabilities };
4
5
  //# sourceMappingURL=index.native.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["RichEditor","RichTextEditor"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAMA,SAASA,UAAA,QAAkB;AAG3B,SAASC,cAAA,QAAsB","ignoreList":[]}
1
+ {"version":3,"names":["RichEditor","RichTextEditor","MARKDOWN_COMMANDS","isCommandInCapabilities"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAMA,SAASA,UAAA,QAAkB;AAG3B,SAASC,cAAA,QAAsB;AAY/B,SAASC,iBAAA,EAAmBC,uBAAA,QAA+B","ignoreList":[]}
@@ -2,6 +2,7 @@ import { BubbleMenu } from "@tiptap/react/menus";
2
2
  import { useResolvedKnobs } from "@multiplatform.one/theme";
3
3
  import { XStack } from "tamagui";
4
4
  import { defaultEditorState } from "../types.mjs";
5
+ import { isCommandInCapabilities } from "../editor/capabilities.mjs";
5
6
  import { ToolbarButton } from "./ToolbarButton.mjs";
6
7
  import { BoldIcon, InlineCodeIcon, ItalicIcon, UnderlineIcon, StrikeIcon, SubscriptIcon, SuperscriptIcon } from "./icons.mjs";
7
8
  import { TextColorPicker, HighlightColorPicker } from "./ColorPicker.mjs";
@@ -12,11 +13,13 @@ import { jsx, jsxs } from "react/jsx-runtime";
12
13
  function BubbleToolbar({
13
14
  editor,
14
15
  editorRef,
15
- state = defaultEditorState
16
+ state = defaultEditorState,
17
+ capabilities = "full"
16
18
  }) {
17
19
  const {
18
20
  knobProps
19
21
  } = useResolvedKnobs();
22
+ const has = command => isCommandInCapabilities(command, capabilities);
20
23
  if (!editor) return null;
21
24
  return /* @__PURE__ */jsx(BubbleMenu, {
22
25
  editor,
@@ -56,7 +59,7 @@ function BubbleToolbar({
56
59
  children: /* @__PURE__ */jsx(ItalicIcon, {
57
60
  children: "I"
58
61
  })
59
- }), /* @__PURE__ */jsx(ToolbarButton, {
62
+ }), has("underline") && /* @__PURE__ */jsx(ToolbarButton, {
60
63
  active: state.isUnderline,
61
64
  onPress: () => editorRef.current?.executeCommand("underline"),
62
65
  "aria-label": t("Underline"),
@@ -78,22 +81,22 @@ function BubbleToolbar({
78
81
  "aria-label": t("Code"),
79
82
  tooltip: SHORTCUTS.code,
80
83
  children: /* @__PURE__ */jsx(InlineCodeIcon, {})
81
- }), /* @__PURE__ */jsx(ToolbarButton, {
84
+ }), has("subscript") && /* @__PURE__ */jsx(ToolbarButton, {
82
85
  active: state.isSubscript,
83
86
  onPress: () => editorRef.current?.executeCommand("subscript"),
84
87
  "aria-label": t("Subscript"),
85
88
  tooltip: SHORTCUTS.subscript,
86
89
  children: /* @__PURE__ */jsx(SubscriptIcon, {})
87
- }), /* @__PURE__ */jsx(ToolbarButton, {
90
+ }), has("superscript") && /* @__PURE__ */jsx(ToolbarButton, {
88
91
  active: state.isSuperscript,
89
92
  onPress: () => editorRef.current?.executeCommand("superscript"),
90
93
  "aria-label": t("Superscript"),
91
94
  tooltip: SHORTCUTS.superscript,
92
95
  children: /* @__PURE__ */jsx(SuperscriptIcon, {})
93
- }), /* @__PURE__ */jsx(TextColorPicker, {
96
+ }), has("textColor") && /* @__PURE__ */jsx(TextColorPicker, {
94
97
  editorRef,
95
98
  state
96
- }), /* @__PURE__ */jsx(HighlightColorPicker, {
99
+ }), has("highlight") && /* @__PURE__ */jsx(HighlightColorPicker, {
97
100
  editorRef,
98
101
  state
99
102
  }), /* @__PURE__ */jsx(LinkDialog, {