@multiplatform.one/rich-text 6.3.0 → 6.4.0
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
|
@@ -38,6 +38,7 @@ var import_blockAnchor = require("../editor/blockAnchor.native.js");
|
|
|
38
38
|
var import_ToolbarButton = require("./ToolbarButton.native.js");
|
|
39
39
|
var import_t = require("../shared/t.native.js");
|
|
40
40
|
var ROW_ACTIONS = [{
|
|
41
|
+
id: "addRowBefore",
|
|
41
42
|
label: function label() {
|
|
42
43
|
return (0, import_t.t)("Add row above");
|
|
43
44
|
},
|
|
@@ -45,6 +46,7 @@ var ROW_ACTIONS = [{
|
|
|
45
46
|
return e.chain().focus().addRowBefore().run();
|
|
46
47
|
}
|
|
47
48
|
}, {
|
|
49
|
+
id: "addRowAfter",
|
|
48
50
|
label: function label2() {
|
|
49
51
|
return (0, import_t.t)("Add row below");
|
|
50
52
|
},
|
|
@@ -52,6 +54,7 @@ var ROW_ACTIONS = [{
|
|
|
52
54
|
return e.chain().focus().addRowAfter().run();
|
|
53
55
|
}
|
|
54
56
|
}, {
|
|
57
|
+
id: "deleteRow",
|
|
55
58
|
label: function label3() {
|
|
56
59
|
return (0, import_t.t)("Delete row");
|
|
57
60
|
},
|
|
@@ -60,6 +63,7 @@ var ROW_ACTIONS = [{
|
|
|
60
63
|
}
|
|
61
64
|
}];
|
|
62
65
|
var COL_ACTIONS = [{
|
|
66
|
+
id: "addColumnBefore",
|
|
63
67
|
label: function label4() {
|
|
64
68
|
return (0, import_t.t)("Add column before");
|
|
65
69
|
},
|
|
@@ -67,6 +71,7 @@ var COL_ACTIONS = [{
|
|
|
67
71
|
return e.chain().focus().addColumnBefore().run();
|
|
68
72
|
}
|
|
69
73
|
}, {
|
|
74
|
+
id: "addColumnAfter",
|
|
70
75
|
label: function label5() {
|
|
71
76
|
return (0, import_t.t)("Add column after");
|
|
72
77
|
},
|
|
@@ -74,6 +79,7 @@ var COL_ACTIONS = [{
|
|
|
74
79
|
return e.chain().focus().addColumnAfter().run();
|
|
75
80
|
}
|
|
76
81
|
}, {
|
|
82
|
+
id: "deleteColumn",
|
|
77
83
|
label: function label6() {
|
|
78
84
|
return (0, import_t.t)("Delete column");
|
|
79
85
|
},
|
|
@@ -82,6 +88,7 @@ var COL_ACTIONS = [{
|
|
|
82
88
|
}
|
|
83
89
|
}];
|
|
84
90
|
var TABLE_ACTIONS = [{
|
|
91
|
+
id: "toggleHeaderRow",
|
|
85
92
|
label: function label7() {
|
|
86
93
|
return (0, import_t.t)("Toggle header row");
|
|
87
94
|
},
|
|
@@ -89,6 +96,7 @@ var TABLE_ACTIONS = [{
|
|
|
89
96
|
return e.chain().focus().toggleHeaderRow().run();
|
|
90
97
|
}
|
|
91
98
|
}, {
|
|
99
|
+
id: "mergeCells",
|
|
92
100
|
label: function label8() {
|
|
93
101
|
return (0, import_t.t)("Merge cells");
|
|
94
102
|
},
|
|
@@ -96,6 +104,7 @@ var TABLE_ACTIONS = [{
|
|
|
96
104
|
return e.chain().focus().mergeCells().run();
|
|
97
105
|
}
|
|
98
106
|
}, {
|
|
107
|
+
id: "splitCell",
|
|
99
108
|
label: function label9() {
|
|
100
109
|
return (0, import_t.t)("Split cell");
|
|
101
110
|
},
|
|
@@ -103,6 +112,7 @@ var TABLE_ACTIONS = [{
|
|
|
103
112
|
return e.chain().focus().splitCell().run();
|
|
104
113
|
}
|
|
105
114
|
}, {
|
|
115
|
+
id: "deleteTable",
|
|
106
116
|
label: function label10() {
|
|
107
117
|
return (0, import_t.t)("Delete table");
|
|
108
118
|
},
|
|
@@ -110,14 +120,19 @@ var TABLE_ACTIONS = [{
|
|
|
110
120
|
return e.chain().focus().deleteTable().run();
|
|
111
121
|
}
|
|
112
122
|
}];
|
|
123
|
+
var MARKDOWN_EXCLUDED_TABLE_ACTIONS = /* @__PURE__ */new Set(["mergeCells", "splitCell"]);
|
|
113
124
|
function TableBubble(param) {
|
|
114
125
|
var {
|
|
115
|
-
editor
|
|
126
|
+
editor,
|
|
127
|
+
capabilities = "full"
|
|
116
128
|
} = param;
|
|
117
129
|
var {
|
|
118
130
|
knobProps
|
|
119
131
|
} = (0, import_theme.useResolvedKnobs)();
|
|
120
132
|
var [menuOpen, setMenuOpen] = (0, import_react.useState)(false);
|
|
133
|
+
var tableActions = capabilities === "markdown" ? TABLE_ACTIONS.filter(function (a) {
|
|
134
|
+
return !MARKDOWN_EXCLUDED_TABLE_ACTIONS.has(a.id);
|
|
135
|
+
}) : TABLE_ACTIONS;
|
|
121
136
|
if (!editor) return null;
|
|
122
137
|
return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_menus.BubbleMenu, {
|
|
123
138
|
editor,
|
|
@@ -243,7 +258,7 @@ function TableBubble(param) {
|
|
|
243
258
|
height: 1,
|
|
244
259
|
marginHorizontal: 0
|
|
245
260
|
})
|
|
246
|
-
}),
|
|
261
|
+
}), tableActions.map(function (a) {
|
|
247
262
|
var label11 = a.label();
|
|
248
263
|
return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_styled.DropdownMenuItemFrame, {
|
|
249
264
|
onPress: function onPress() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","TableBubble_exports","TableBubble","module","exports","import_jsx_runtime","require","import_react","import_menus","import_theme","import_react2","import_tamagui","import_styled","import_blockAnchor","import_ToolbarButton","import_t","ROW_ACTIONS","label","t","action","e","chain","focus","addRowBefore","run","label2","action2","addRowAfter","label3","action3","deleteRow","COL_ACTIONS","label4","action4","addColumnBefore","label5","action5","addColumnAfter","label6","action6","deleteColumn","TABLE_ACTIONS","label7","action7","toggleHeaderRow","label8","action8","mergeCells","label9","action9","splitCell","label10","action10","deleteTable","param","editor","knobProps","useResolvedKnobs","menuOpen","setMenuOpen","useState","jsx","BubbleMenu","className","shouldShow","param2","isActive","getReferencedVirtualElement","getBlockVirtualElement","options","placement","offset","children","jsxs","XStack","backgroundColor","borderWidth","borderColor","borderRadius","padding","gap","alignItems","elevation","ToolbarButton","onPress","tooltip","RowsPlusBottomIcon","size","ColumnsPlusRightIcon","Popover"],"sources":["../../../src/toolbar/TableBubble.tsx"],"sourcesContent":[null],"mappings":"AAKA,YAAS;;AAET,IAAAA,SAAS,GAAAC,MAAA,CAAAC,cAAkB;AAC3B,IAAAC,gBAAS,GAAAF,MAAA,CAAAG,wBAAwB;AACjC,IAAAC,iBAAS,GAAAJ,MAAA,CAAsBK,mBAAA;AAC/B,IAAAC,YAAS,GAASN,MAAM,CAAAO,SAAQ,CAAAC,cAAc;AAC9C,IAAAC,QAAS,GAAAA,CAAAC,MAAA,EAAAC,GAAA,KAAuB;
|
|
1
|
+
{"version":3,"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","TableBubble_exports","TableBubble","module","exports","import_jsx_runtime","require","import_react","import_menus","import_theme","import_react2","import_tamagui","import_styled","import_blockAnchor","import_ToolbarButton","import_t","ROW_ACTIONS","id","label","t","action","e","chain","focus","addRowBefore","run","label2","action2","addRowAfter","label3","action3","deleteRow","COL_ACTIONS","label4","action4","addColumnBefore","label5","action5","addColumnAfter","label6","action6","deleteColumn","TABLE_ACTIONS","label7","action7","toggleHeaderRow","label8","action8","mergeCells","label9","action9","splitCell","label10","action10","deleteTable","MARKDOWN_EXCLUDED_TABLE_ACTIONS","Set","param","editor","capabilities","knobProps","useResolvedKnobs","menuOpen","setMenuOpen","useState","tableActions","filter","a","has","jsx","BubbleMenu","className","shouldShow","param2","isActive","getReferencedVirtualElement","getBlockVirtualElement","options","placement","offset","children","jsxs","XStack","backgroundColor","borderWidth","borderColor","borderRadius","padding","gap","alignItems","elevation","ToolbarButton","onPress","tooltip","RowsPlusBottomIcon","size","ColumnsPlusRightIcon","Popover","open","onOpenChange","Trigger","asChild","ToolbarDropdownButton","Text","fontSize","Content","overflow"],"sources":["../../../src/toolbar/TableBubble.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
package/dist/jsx/types.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["defaultEditorState","isBold","isItalic","isUnderline","isStrike","isCode","isSubscript","isSuperscript","isHeading1","isHeading2","isHeading3","isHeading4","isHeading5","isHeading6","isParagraph","isBulletList","isOrderedList","isTaskList","isBlockquote","isCodeBlock","isLink","canUndo","canRedo","textAlign","textColor","highlightColor","wordCount","characterCount"],"sources":["../../src/types.ts"],"sourcesContent":[null],"mappings":"
|
|
1
|
+
{"version":3,"names":["defaultEditorState","isBold","isItalic","isUnderline","isStrike","isCode","isSubscript","isSuperscript","isHeading1","isHeading2","isHeading3","isHeading4","isHeading5","isHeading6","isParagraph","isBulletList","isOrderedList","isTaskList","isBlockquote","isCodeBlock","isLink","canUndo","canRedo","textAlign","textColor","highlightColor","wordCount","characterCount"],"sources":["../../src/types.ts"],"sourcesContent":[null],"mappings":"AA8HO,MAAMA,kBAAA,GAAkC;EAC7CC,MAAA,EAAQ;EACRC,QAAA,EAAU;EACVC,WAAA,EAAa;EACbC,QAAA,EAAU;EACVC,MAAA,EAAQ;EACRC,WAAA,EAAa;EACbC,aAAA,EAAe;EACfC,UAAA,EAAY;EACZC,UAAA,EAAY;EACZC,UAAA,EAAY;EACZC,UAAA,EAAY;EACZC,UAAA,EAAY;EACZC,UAAA,EAAY;EACZC,WAAA,EAAa;EACbC,YAAA,EAAc;EACdC,aAAA,EAAe;EACfC,UAAA,EAAY;EACZC,YAAA,EAAc;EACdC,WAAA,EAAa;EACbC,MAAA,EAAQ;EACRC,OAAA,EAAS;EACTC,OAAA,EAAS;EACTC,SAAA,EAAW;EACXC,SAAA,EAAW;EACXC,cAAA,EAAgB;EAChBC,SAAA,EAAW;EACXC,cAAA,EAAgB;AAClB","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","types_exports","defaultEditorState","module","exports","isBold","isItalic","isUnderline","isStrike","isCode"],"sources":["../../src/types.ts"],"sourcesContent":[null],"mappings":"
|
|
1
|
+
{"version":3,"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","types_exports","defaultEditorState","module","exports","isBold","isItalic","isUnderline","isStrike","isCode"],"sources":["../../src/types.ts"],"sourcesContent":[null],"mappings":"AA8HO,YAAM;;AAAkC,IAC7CA,SAAQ,GAAAC,MAAA,CAAAC,cAAA;AAAA,IACRC,gBAAU,GAAAF,MAAA,CAAAG,wBAAA;AAAA,IACVC,iBAAa,GAAAJ,MAAA,CAAAK,mBAAA;AAAA,IACbC,YAAU,GAAAN,MAAA,CAAAO,SAAA,CAAAC,cAAA;AAAA,IACVC,QAAQ,GAAAA,CAAAC,MAAA,EAAAC,GAAA;EACR,SAAAC,IAAa,IAAAD,GAAA,EACbZ,SAAA,CAAAW,MAAe,EAAAE,IAAA;IAAAC,GAAA,EAAAF,GAAA,CAAAC,IAAA;IAAAE,UAAA;EAAA;AAAA;AACH,IACZC,WAAY,GAAAA,CAAAC,EAAA,EAAAC,IAAA,EAAAC,MAAA,EAAAC,IAAA;EACZ,IAAAF,IAAA,IAAY,OAAAA,IAAA,wBAAAA,IAAA;IACZ,SAAAG,GAAY,IAAAhB,iBAAA,CAAAa,IAAA,GACZ,KAAAX,YAAY,CAAAe,IAAA,CAAAL,EAAA,EAAAI,GAAA,KAAAA,GAAA,KAAAF,MAAA,EACZnB,SAAY,CAAAiB,EAAA,EAAAI,GAAA;MAAAP,GAAA,EAAAA,CAAA,KAAAI,IAAA,CAAAG,GAAA;MAAAN,UAAA,IAAAK,IAAA,GAAAjB,gBAAA,CAAAe,IAAA,EAAAG,GAAA,MAAAD,IAAA,CAAAL;IAAA;EACZ;EACA,OAAAE,EAAA;AAAc;AACC,IACfM,YAAY,GAAAC,GAAA,IAAAR,WAAA,CAAAhB,SAAA;EAAAyB,KAAA;AAAA,IAAAD,GAAA;AAAA,IACZE,aAAc;AAAAhB,QACd,CAAAgB,aAAa;EACbC,kBAAQ,EAAAA,CAAA,KAAAA;AAAA,EACR;AAASC,MACT,CAAAC,OAAS,GAAAN,YAAA,CAAAG,aAAA;AAAA,IACTC,kBAAW;EACXG,MAAA,OAAW;EACXC,QAAA;EACAC,WAAW;EACXC,QAAA;EACFC,MAAA","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@multiplatform.one/rich-text",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.4.0",
|
|
4
4
|
"description": "Cross-platform rich text editor with markdown support and syntax highlighting",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"cross-platform",
|
|
@@ -93,10 +93,10 @@
|
|
|
93
93
|
"marked": "^17.0.6",
|
|
94
94
|
"tamagui": "2.0.0-rc.41",
|
|
95
95
|
"turndown": "^7.2.4",
|
|
96
|
-
"@multiplatform.one/
|
|
97
|
-
"@multiplatform.one/forms": "6.
|
|
98
|
-
"@multiplatform.one/theme": "6.
|
|
99
|
-
"@multiplatform.one/
|
|
96
|
+
"@multiplatform.one/components": "6.4.0",
|
|
97
|
+
"@multiplatform.one/forms": "6.4.0",
|
|
98
|
+
"@multiplatform.one/theme": "6.4.0",
|
|
99
|
+
"@multiplatform.one/markdown": "6.4.0"
|
|
100
100
|
},
|
|
101
101
|
"devDependencies": {
|
|
102
102
|
"@tamagui/build": "2.0.0-rc.41",
|
|
@@ -109,9 +109,9 @@
|
|
|
109
109
|
"react": "19.2.5",
|
|
110
110
|
"react-dom": "19.2.5",
|
|
111
111
|
"vitest": "^4.1.5",
|
|
112
|
-
"@multiplatform.one/
|
|
113
|
-
"@multiplatform.one/
|
|
114
|
-
"@multiplatform.one/storybook": "6.
|
|
112
|
+
"@multiplatform.one/config": "6.4.0",
|
|
113
|
+
"@multiplatform.one/test-utils": "6.4.0",
|
|
114
|
+
"@multiplatform.one/storybook": "6.4.0"
|
|
115
115
|
},
|
|
116
116
|
"peerDependencies": {
|
|
117
117
|
"i18next": "^25.0.0",
|
|
@@ -43,6 +43,7 @@ import { EditorFrame } from "./styled";
|
|
|
43
43
|
import { FixedToolbar } from "./toolbar/FixedToolbar";
|
|
44
44
|
import type { PreviewBlock } from "./preview";
|
|
45
45
|
import { parseHtmlPreview } from "./preview";
|
|
46
|
+
import { htmlToMarkdown, markdownToHtml } from "./editor/markdown";
|
|
46
47
|
import { t } from "./shared/t";
|
|
47
48
|
|
|
48
49
|
// ===========================================================================
|
|
@@ -319,6 +320,25 @@ const RichEditorImpl = forwardRef<RichEditorRef, RichEditorCombinedProps>(
|
|
|
319
320
|
internalRef.current
|
|
320
321
|
? (internalRef.current.getJSON() ?? committedRef.current.json)
|
|
321
322
|
: committedRef.current.json,
|
|
323
|
+
// Native markdown serialization is best-effort (turndown needs a
|
|
324
|
+
// DOM): the editor delegates and returns "" when unavailable.
|
|
325
|
+
getMarkdown: () => {
|
|
326
|
+
if (internalRef.current) return internalRef.current.getMarkdown();
|
|
327
|
+
try {
|
|
328
|
+
return htmlToMarkdown(committedRef.current.html);
|
|
329
|
+
} catch (err) {
|
|
330
|
+
console.warn("[RichEditor] getMarkdown unavailable on native:", err);
|
|
331
|
+
return "";
|
|
332
|
+
}
|
|
333
|
+
},
|
|
334
|
+
setMarkdown: (markdown: string) => {
|
|
335
|
+
const html = markdownToHtml(markdown);
|
|
336
|
+
if (internalRef.current) internalRef.current.setHTML(html);
|
|
337
|
+
else {
|
|
338
|
+
committedRef.current = { html, json: null };
|
|
339
|
+
setCommitted(committedRef.current);
|
|
340
|
+
}
|
|
341
|
+
},
|
|
322
342
|
setHTML: (html: string) => {
|
|
323
343
|
if (internalRef.current) internalRef.current.setHTML(html);
|
|
324
344
|
else {
|
|
@@ -450,6 +450,38 @@ export const WithDetails: Story = {
|
|
|
450
450
|
},
|
|
451
451
|
};
|
|
452
452
|
|
|
453
|
+
// ---------------------------------------------------------------------------
|
|
454
|
+
// MarkdownMode (capabilities="markdown" — GFM-expressible surface only)
|
|
455
|
+
// ---------------------------------------------------------------------------
|
|
456
|
+
|
|
457
|
+
export const MarkdownMode: Story = {
|
|
458
|
+
render: () => {
|
|
459
|
+
const [markdown, setMarkdown] = useState(
|
|
460
|
+
"# Markdown mode\n\nWYSIWYG editing constrained to **GFM**: no highlight, underline, color, or alignment.\n\n- [ ] Task lists work\n- Bullet lists too\n\n> Blockquotes and `inline code` round-trip.",
|
|
461
|
+
);
|
|
462
|
+
|
|
463
|
+
return (
|
|
464
|
+
<YStack gap="$4">
|
|
465
|
+
<RichEditor
|
|
466
|
+
capabilities="markdown"
|
|
467
|
+
initialContent={markdown}
|
|
468
|
+
onChange={(md) => setMarkdown(md)}
|
|
469
|
+
minHeight={240}
|
|
470
|
+
showBubbleToolbar
|
|
471
|
+
/>
|
|
472
|
+
<YStack backgroundColor="$color3" padding="$3" borderRadius="$3" maxHeight={200}>
|
|
473
|
+
<Text color="$color10" fontSize="$2">
|
|
474
|
+
Serialized markdown (onChange):
|
|
475
|
+
</Text>
|
|
476
|
+
<Paragraph size="$1" fontFamily="$mono" whiteSpace="pre-wrap">
|
|
477
|
+
{markdown}
|
|
478
|
+
</Paragraph>
|
|
479
|
+
</YStack>
|
|
480
|
+
</YStack>
|
|
481
|
+
);
|
|
482
|
+
},
|
|
483
|
+
};
|
|
484
|
+
|
|
453
485
|
// ---------------------------------------------------------------------------
|
|
454
486
|
// WithUploadHooks (prop-driven image/file upload)
|
|
455
487
|
// ---------------------------------------------------------------------------
|
package/src/RichEditor.tsx
CHANGED
|
@@ -89,6 +89,7 @@ const RichEditorImpl = forwardRef<RichEditorRef, RichEditorCombinedProps>(
|
|
|
89
89
|
resizable = true,
|
|
90
90
|
showStatusBar = true,
|
|
91
91
|
sections,
|
|
92
|
+
capabilities = "full",
|
|
92
93
|
hasError,
|
|
93
94
|
editable = true,
|
|
94
95
|
onStateChange,
|
|
@@ -204,8 +205,10 @@ const RichEditorImpl = forwardRef<RichEditorRef, RichEditorCombinedProps>(
|
|
|
204
205
|
getState: () => internalRef.current?.getState() ?? defaultEditorState,
|
|
205
206
|
getHTML: () => internalRef.current?.getHTML() ?? "",
|
|
206
207
|
getJSON: () => internalRef.current?.getJSON() ?? null,
|
|
208
|
+
getMarkdown: () => internalRef.current?.getMarkdown() ?? "",
|
|
207
209
|
setHTML: (html) => internalRef.current?.setHTML(html),
|
|
208
210
|
setJSON: (json) => internalRef.current?.setJSON(json),
|
|
211
|
+
setMarkdown: (markdown) => internalRef.current?.setMarkdown(markdown),
|
|
209
212
|
focus: () => internalRef.current?.focus(),
|
|
210
213
|
blur: () => internalRef.current?.blur(),
|
|
211
214
|
}),
|
|
@@ -251,6 +254,7 @@ const RichEditorImpl = forwardRef<RichEditorRef, RichEditorCombinedProps>(
|
|
|
251
254
|
editorRef={internalRef}
|
|
252
255
|
state={editorState}
|
|
253
256
|
sections={sections}
|
|
257
|
+
capabilities={capabilities}
|
|
254
258
|
hasError={hasError}
|
|
255
259
|
fullscreen={fullscreen}
|
|
256
260
|
onFullscreenToggle={() => handleFullscreenChange(!fullscreen)}
|
|
@@ -261,6 +265,7 @@ const RichEditorImpl = forwardRef<RichEditorRef, RichEditorCombinedProps>(
|
|
|
261
265
|
<TiptapEditor
|
|
262
266
|
ref={internalRef}
|
|
263
267
|
{...editorProps}
|
|
268
|
+
capabilities={capabilities}
|
|
264
269
|
editable={editable}
|
|
265
270
|
onStateChange={handleStateChange}
|
|
266
271
|
hasError={false}
|
|
@@ -27,7 +27,12 @@ import {
|
|
|
27
27
|
type FieldComponentProps,
|
|
28
28
|
type Validator,
|
|
29
29
|
} from "@multiplatform.one/forms";
|
|
30
|
-
import type {
|
|
30
|
+
import type {
|
|
31
|
+
EditorCapabilities,
|
|
32
|
+
RichEditorRef,
|
|
33
|
+
RichTextMentionOptions,
|
|
34
|
+
ToolbarSection,
|
|
35
|
+
} from "../types";
|
|
31
36
|
import { RichEditor } from "../RichEditor";
|
|
32
37
|
import { t } from "../shared/t";
|
|
33
38
|
|
|
@@ -84,6 +89,12 @@ export type RichTextEditorProps<
|
|
|
84
89
|
showBubbleToolbar?: boolean;
|
|
85
90
|
/** Toolbar sections to display (shows all when omitted) */
|
|
86
91
|
sections?: ToolbarSection[];
|
|
92
|
+
/**
|
|
93
|
+
* Capability surface (default "full"). "markdown" constrains the editor
|
|
94
|
+
* to markdown-expressible features and makes value/onChange markdown
|
|
95
|
+
* strings instead of HTML.
|
|
96
|
+
*/
|
|
97
|
+
capabilities?: EditorCapabilities;
|
|
87
98
|
/** When true, renders a skeleton placeholder instead of the editor */
|
|
88
99
|
skeleton?: boolean;
|
|
89
100
|
/** Controlled fullscreen state (web; uncontrolled when omitted) */
|
|
@@ -147,6 +158,7 @@ export function RichTextEditor<
|
|
|
147
158
|
compact = false,
|
|
148
159
|
showBubbleToolbar = false,
|
|
149
160
|
sections,
|
|
161
|
+
capabilities,
|
|
150
162
|
skeleton,
|
|
151
163
|
fullscreen,
|
|
152
164
|
defaultFullscreen,
|
|
@@ -210,6 +222,7 @@ export function RichTextEditor<
|
|
|
210
222
|
showToolbar={showToolbar}
|
|
211
223
|
showBubbleToolbar={showBubbleToolbar}
|
|
212
224
|
sections={sections}
|
|
225
|
+
capabilities={capabilities}
|
|
213
226
|
hasError={hasError}
|
|
214
227
|
size={size}
|
|
215
228
|
compact={compact}
|
|
@@ -246,6 +246,11 @@ export const SlashCommands = Extension.create({
|
|
|
246
246
|
|
|
247
247
|
addOptions() {
|
|
248
248
|
return {
|
|
249
|
+
/**
|
|
250
|
+
* Item ids removed from the menu (capability gating — e.g. markdown
|
|
251
|
+
* capabilities exclude math/details, which GFM cannot express).
|
|
252
|
+
*/
|
|
253
|
+
excludeIds: [] as string[],
|
|
249
254
|
suggestion: {
|
|
250
255
|
char: "/",
|
|
251
256
|
startOfLine: false,
|
|
@@ -282,10 +287,15 @@ export const SlashCommands = Extension.create({
|
|
|
282
287
|
},
|
|
283
288
|
|
|
284
289
|
addProseMirrorPlugins() {
|
|
290
|
+
const excludeIds: string[] = this.options.excludeIds ?? [];
|
|
285
291
|
return [
|
|
286
292
|
Suggestion({
|
|
287
293
|
editor: this.editor,
|
|
288
294
|
...this.options.suggestion,
|
|
295
|
+
items: (args: { query: string }) =>
|
|
296
|
+
this.options.suggestion
|
|
297
|
+
.items(args)
|
|
298
|
+
.filter((item: SlashCommandItem) => !excludeIds.includes(item.id)),
|
|
289
299
|
}),
|
|
290
300
|
];
|
|
291
301
|
},
|
|
@@ -42,6 +42,7 @@ import { RichEditorContext } from "../context";
|
|
|
42
42
|
import { PALETTE_THEME_TOKENS } from "../constants";
|
|
43
43
|
import { t } from "../shared/t";
|
|
44
44
|
import { getEditorStateFromBridge } from "./useEditorState";
|
|
45
|
+
import { htmlToMarkdown, markdownToHtml } from "./markdown";
|
|
45
46
|
|
|
46
47
|
function useNativeEditorDarkMode(): boolean {
|
|
47
48
|
const themeName = useThemeName();
|
|
@@ -284,8 +285,20 @@ export const TentapEditor = forwardRef(
|
|
|
284
285
|
getState: () => getEditorStateFromBridge(editor.getEditorState()),
|
|
285
286
|
getHTML: () => cachedHtml.current,
|
|
286
287
|
getJSON: () => cachedJson.current,
|
|
288
|
+
// Best-effort on native: turndown needs a DOM, which Hermes lacks —
|
|
289
|
+
// hosts needing markdown values on native should keep markdown
|
|
290
|
+
// source editing instead (documented fallback).
|
|
291
|
+
getMarkdown: () => {
|
|
292
|
+
try {
|
|
293
|
+
return htmlToMarkdown(cachedHtml.current);
|
|
294
|
+
} catch (err) {
|
|
295
|
+
console.warn("[TentapEditor] getMarkdown unavailable on native:", err);
|
|
296
|
+
return "";
|
|
297
|
+
}
|
|
298
|
+
},
|
|
287
299
|
setHTML: (html: string) => editor.setContent(html),
|
|
288
300
|
setJSON: (json: any) => editor.setContent(json),
|
|
301
|
+
setMarkdown: (markdown: string) => editor.setContent(markdownToHtml(markdown)),
|
|
289
302
|
focus: () => editor.focus(),
|
|
290
303
|
blur: () => editor.blur(),
|
|
291
304
|
}),
|