Skip to content

Commit 5f00291

Browse files
committed
feat: integrate rich text editor and markdown support in WriteEditor
- Added support for switching between Markdown and Rich Text editing modes in the WriteEditor component. - Introduced new components: RichWriteEditor and MarkdownWriteEditor, to handle respective content formats. - Updated the editor's props to include contentFormat and content for better state management. - Enhanced the UI to accommodate the new editor functionalities, improving user experience for content creation. This update significantly expands the editing capabilities within the application, allowing users to choose their preferred content format. Signed-off-by: Innei <tukon479@gmail.com>
1 parent 74fa5eb commit 5f00291

29 files changed

+5859
-808
lines changed

index.html

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,27 @@
77
name="viewport"
88
content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0"
99
/>
10+
<script>
11+
// Minimal Prism mock for @lexical/code (must be set before modules load)
12+
window.Prism = {
13+
highlight: function(text) { return text; },
14+
languages: {
15+
extend: function() { return {}; },
16+
insertBefore: function() { return {}; },
17+
diff: {}
18+
},
19+
tokenize: function(text) { return [text]; },
20+
hooks: {
21+
add: function() {},
22+
run: function() {}
23+
},
24+
Token: function(type, content, alias) {
25+
this.type = type;
26+
this.content = content;
27+
this.alias = alias;
28+
}
29+
};
30+
</script>
1031
<script type="module">
1132
import favicon from './favicon.png'
1233

package.json

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,11 @@
4141
"@codemirror/view": "6.39.11",
4242
"@ddietr/codemirror-themes": "1.5.2",
4343
"@emoji-mart/data": "1.2.1",
44+
"@haklex/rich-diff": "0.0.10",
45+
"@haklex/rich-editor": "0.0.10",
46+
"@haklex/rich-editor-ui": "0.0.10",
47+
"@haklex/rich-kit-shiro": "0.0.10",
48+
"@lexical/markdown": "0.40.0",
4449
"@lezer/highlight": "1.2.3",
4550
"@mx-space/api-client": "1.21.2",
4651
"@pierre/diffs": "1.0.8",
@@ -70,6 +75,7 @@
7075
"js-yaml": "4.1.1",
7176
"json5": "2.2.3",
7277
"katex": "0.16.28",
78+
"lexical": "0.40.0",
7379
"lit": "3.3.2",
7480
"lodash.transform": "4.6.0",
7581
"lucide-vue-next": "0.563.0",
@@ -85,6 +91,8 @@
8591
"pinia": "3.0.4",
8692
"qier-progress": "1.0.4",
8793
"qs": "6.14.1",
94+
"react": "19.2.4",
95+
"react-dom": "19.2.4",
8896
"shiki": "3.21.0",
8997
"socket.io-client": "4.8.3",
9098
"sortablejs": "1.15.6",
@@ -128,4 +136,4 @@
128136
"vite-tsconfig-paths": "6.0.5"
129137
},
130138
"packageManager": "pnpm@10.28.2"
131-
}
139+
}
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
diff --git a/LexicalCode.dev.mjs b/LexicalCode.dev.mjs
2+
index 345e192ff3d7e5caa0478b6a8fc564960f298c28..0aaffa5c86a20ba68c9c9d7b5ee515869eb44d18 100644
3+
--- a/LexicalCode.dev.mjs
4+
+++ b/LexicalCode.dev.mjs
5+
@@ -8,22 +8,23 @@
6+
7+
import { isHTMLElement, addClassNamesToElement, removeClassNamesFromElement, $getAdjacentCaret, mergeRegister } from '@lexical/utils';
8+
import { ElementNode, $createParagraphNode, $isTextNode, $isTabNode, $createTabNode, $createLineBreakNode, $create, TextNode, $applyNodeReplacement, $getSiblingCaret, getTextDirection, $isElementNode, $isLineBreakNode, defineExtension, $createTextNode, $getNodeByKey, $getSelection, $isRangeSelection, $createPoint, INDENT_CONTENT_COMMAND, OUTDENT_CONTENT_COMMAND, INSERT_TAB_COMMAND, $setSelectionFromCaretRange, $getCaretRangeInDirection, $getCaretRange, $getTextPointCaret, $normalizeCaret, KEY_ARROW_UP_COMMAND, MOVE_TO_START, KEY_TAB_COMMAND, COMMAND_PRIORITY_LOW, $insertNodes, KEY_ARROW_DOWN_COMMAND, MOVE_TO_END } from 'lexical';
9+
-import 'prismjs';
10+
-import 'prismjs/components/prism-clike.js';
11+
-import 'prismjs/components/prism-javascript.js';
12+
-import 'prismjs/components/prism-markup.js';
13+
-import 'prismjs/components/prism-markdown.js';
14+
-import 'prismjs/components/prism-c.js';
15+
-import 'prismjs/components/prism-css.js';
16+
-import 'prismjs/components/prism-objectivec.js';
17+
-import 'prismjs/components/prism-sql.js';
18+
-import 'prismjs/components/prism-powershell.js';
19+
-import 'prismjs/components/prism-python.js';
20+
-import 'prismjs/components/prism-rust.js';
21+
-import 'prismjs/components/prism-swift.js';
22+
-import 'prismjs/components/prism-typescript.js';
23+
-import 'prismjs/components/prism-java.js';
24+
-import 'prismjs/components/prism-cpp.js';
25+
+// Patched: Removed prismjs imports - relying on global window.Prism
26+
+// import 'prismjs';
27+
+// import 'prismjs/components/prism-clike.js';
28+
+// import 'prismjs/components/prism-javascript.js';
29+
+// import 'prismjs/components/prism-markup.js';
30+
+// import 'prismjs/components/prism-markdown.js';
31+
+// import 'prismjs/components/prism-c.js';
32+
+// import 'prismjs/components/prism-css.js';
33+
+// import 'prismjs/components/prism-objectivec.js';
34+
+// import 'prismjs/components/prism-sql.js';
35+
+// import 'prismjs/components/prism-powershell.js';
36+
+// import 'prismjs/components/prism-python.js';
37+
+// import 'prismjs/components/prism-rust.js';
38+
+// import 'prismjs/components/prism-swift.js';
39+
+// import 'prismjs/components/prism-typescript.js';
40+
+// import 'prismjs/components/prism-java.js';
41+
+// import 'prismjs/components/prism-cpp.js';
42+
43+
/**
44+
* Copyright (c) Meta Platforms, Inc. and affiliates.
45+
@@ -681,6 +682,9 @@ const CodeExtension = defineExtension({
46+
nodes: () => [CodeNode, CodeHighlightNode]
47+
});
48+
49+
+// Patched: Get Prism from global before using it
50+
+const Prism = globalThis.Prism || window.Prism;
51+
+
52+
(function (Prism) {
53+
54+
Prism.languages.diff = {
55+
@@ -754,7 +758,8 @@ const CodeExtension = defineExtension({
56+
*
57+
*/
58+
59+
-const Prism$1 = globalThis.Prism || window.Prism;
60+
+// Patched: Reuse Prism from above instead of redefining
61+
+const Prism$1 = Prism;
62+
const CODE_LANGUAGE_FRIENDLY_NAME_MAP = {
63+
c: 'C',
64+
clike: 'C-like',

0 commit comments

Comments
 (0)