dishui 0.0.71 → 0.0.73
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/components/Button/index.d.ts +4 -4
- package/dist/components/Button/index.js +18 -17
- package/dist/components/Button/index.js.map +1 -1
- package/dist/components/Card/Metric.d.ts +17 -0
- package/dist/components/Card/Metric2.js +50 -0
- package/dist/components/Card/Metric2.js.map +1 -0
- package/dist/components/Card/index.d.ts +3 -0
- package/dist/components/Card/index.js +118 -117
- package/dist/components/Card/index.js.map +1 -1
- package/dist/components/Group/index.d.ts +2 -0
- package/dist/components/GroupButton/index.d.ts +16 -0
- package/dist/components/GroupButton/index.js +41 -0
- package/dist/components/GroupButton/index.js.map +1 -0
- package/dist/components/GroupedTable/index.d.ts +38 -0
- package/dist/components/GroupedTable/index.js +92 -0
- package/dist/components/GroupedTable/index.js.map +1 -0
- package/dist/components/Layout/index.d.ts +4 -2
- package/dist/components/Layout/index.js +1 -1
- package/dist/components/Layout/index.js.map +1 -1
- package/dist/components/NavigationList/index.d.ts +17 -0
- package/dist/components/NavigationList/index.js +48 -0
- package/dist/components/NavigationList/index.js.map +1 -0
- package/dist/components/Section/index.d.ts +28 -0
- package/dist/components/Section/index.js +58 -0
- package/dist/components/Section/index.js.map +1 -0
- package/dist/components/Select/index.d.ts +2 -0
- package/dist/components/Select/index.js +83 -82
- package/dist/components/Select/index.js.map +1 -1
- package/dist/components/SidebarToggleButton/index.d.ts +16 -1
- package/dist/components/SidebarToggleButton/index.js +90 -30
- package/dist/components/SidebarToggleButton/index.js.map +1 -1
- package/dist/components/Skeleton/index.d.ts +7 -0
- package/dist/components/Skeleton/index.js +21 -0
- package/dist/components/Skeleton/index.js.map +1 -0
- package/dist/components/Tree/Tree.js +5 -2
- package/dist/components/Tree/Tree.js.map +1 -1
- package/dist/components/pro/RichTextEditor/AIRewrite.js +114 -72
- package/dist/components/pro/RichTextEditor/AIRewrite.js.map +1 -1
- package/dist/components/pro/RichTextEditor/BlockHandle.js +315 -196
- package/dist/components/pro/RichTextEditor/BlockHandle.js.map +1 -1
- package/dist/components/pro/RichTextEditor/BubbleToolbar.d.ts +1 -1
- package/dist/components/pro/RichTextEditor/BubbleToolbar.js +69 -33
- package/dist/components/pro/RichTextEditor/BubbleToolbar.js.map +1 -1
- package/dist/components/pro/RichTextEditor/CommentPanel.d.ts +2 -1
- package/dist/components/pro/RichTextEditor/CommentPanel.js +100 -81
- package/dist/components/pro/RichTextEditor/CommentPanel.js.map +1 -1
- package/dist/components/pro/RichTextEditor/CommentPopover.d.ts +2 -1
- package/dist/components/pro/RichTextEditor/CommentPopover.js +92 -68
- package/dist/components/pro/RichTextEditor/CommentPopover.js.map +1 -1
- package/dist/components/pro/RichTextEditor/RichTextEditor.js +24 -22
- package/dist/components/pro/RichTextEditor/RichTextEditor.js.map +1 -1
- package/dist/components/pro/RichTextEditor/SearchReplace.d.ts +7 -0
- package/dist/components/pro/RichTextEditor/SlashMenu.js +136 -73
- package/dist/components/pro/RichTextEditor/SlashMenu.js.map +1 -1
- package/dist/components/pro/RichTextEditor/Toolbar/Toolbar.d.ts +1 -1
- package/dist/components/pro/RichTextEditor/Toolbar/Toolbar.js +346 -313
- package/dist/components/pro/RichTextEditor/Toolbar/Toolbar.js.map +1 -1
- package/dist/components/pro/RichTextEditor/extensions/CodeBlockView.js +114 -146
- package/dist/components/pro/RichTextEditor/extensions/CodeBlockView.js.map +1 -1
- package/dist/components/pro/RichTextEditor/extensions/CommentMark.js +2 -2
- package/dist/components/pro/RichTextEditor/extensions/CommentMark.js.map +1 -1
- package/dist/components/pro/RichTextEditor/extensions/FloatingDialog.js +178 -163
- package/dist/components/pro/RichTextEditor/extensions/FloatingDialog.js.map +1 -1
- package/dist/components/pro/RichTextEditor/extensions/FontSize.js +8 -5
- package/dist/components/pro/RichTextEditor/extensions/FontSize.js.map +1 -1
- package/dist/components/pro/RichTextEditor/extensions/MarkdownBlock.d.ts +6 -0
- package/dist/components/pro/RichTextEditor/extensions/MarkdownBlock.js +85 -74
- package/dist/components/pro/RichTextEditor/extensions/MarkdownBlock.js.map +1 -1
- package/dist/components/pro/RichTextEditor/searchUtils.d.ts +23 -0
- package/dist/contexts/AppContext.js +47 -45
- package/dist/contexts/AppContext.js.map +1 -1
- package/dist/dishui.css +1 -1
- package/dist/index-nostyled.d.ts +11 -1
- package/dist/index.d.ts +11 -1
- package/dist/index.js +119 -114
- package/dist/layouts/MainLayout.js +9 -10
- package/dist/layouts/MainLayout.js.map +1 -1
- package/dist/layouts/Sidebar.d.ts +9 -0
- package/dist/layouts/Sidebar.js +99 -80
- package/dist/layouts/Sidebar.js.map +1 -1
- package/dist/layouts/headbar/Headbar.d.ts +1 -1
- package/dist/layouts/headbar/Headbar.js +2 -2
- package/dist/layouts/headbar/Headbar.js.map +1 -1
- package/dist/lite.d.ts +19 -1
- package/dist/lite.js +17 -8
- package/dist/styles/themeStyles.js +6 -6
- package/dist/styles/themeStyles.js.map +1 -1
- package/dist/utils/i18n.d.ts +3 -0
- package/dist/utils/i18n.js +78 -0
- package/dist/utils/i18n.js.map +1 -1
- package/dist/utils/menu.js +23 -6
- package/dist/utils/menu.js.map +1 -1
- package/package.json +8 -2
|
@@ -1,65 +1,31 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import c from "react-
|
|
6
|
-
import l from "
|
|
7
|
-
import u from "
|
|
8
|
-
import d from "rehype-
|
|
1
|
+
import { MermaidRenderer as e, useNodeEditable as t } from "./MarkdownBlock.js";
|
|
2
|
+
import { useEffect as n, useState as r } from "react";
|
|
3
|
+
import { Fragment as i, jsx as a, jsxs as o } from "react/jsx-runtime";
|
|
4
|
+
import { Prism as s } from "react-syntax-highlighter";
|
|
5
|
+
import { oneLight as c } from "react-syntax-highlighter/dist/esm/styles/prism";
|
|
6
|
+
import l from "react-markdown";
|
|
7
|
+
import u from "remark-gfm";
|
|
8
|
+
import d from "rehype-katex";
|
|
9
9
|
import f from "remark-math";
|
|
10
|
-
import p from "mermaid";
|
|
11
10
|
import "katex/dist/katex.min.css";
|
|
12
|
-
import { Node as
|
|
13
|
-
import { Plugin as
|
|
11
|
+
import { Node as p, NodeViewContent as m, NodeViewWrapper as h, ReactNodeViewRenderer as g, mergeAttributes as _, textblockTypeInputRule as v } from "@tiptap/react";
|
|
12
|
+
import { Plugin as y, PluginKey as b } from "@tiptap/pm/state";
|
|
14
13
|
//#region src/components/pro/RichTextEditor/extensions/CodeBlockView.tsx
|
|
15
|
-
var
|
|
16
|
-
function C() {
|
|
17
|
-
S ||= (p.initialize({
|
|
18
|
-
startOnLoad: !1,
|
|
19
|
-
theme: "default",
|
|
20
|
-
securityLevel: "loose",
|
|
21
|
-
fontFamily: "inherit",
|
|
22
|
-
flowchart: {
|
|
23
|
-
useMaxWidth: !0,
|
|
24
|
-
htmlLabels: !0
|
|
25
|
-
}
|
|
26
|
-
}), !0);
|
|
27
|
-
}
|
|
28
|
-
var w = ({ code: n }) => {
|
|
29
|
-
let r = t(null);
|
|
30
|
-
return e(() => {
|
|
31
|
-
if (!n.trim() || !r.current) return;
|
|
32
|
-
C();
|
|
33
|
-
let e = !1;
|
|
34
|
-
return (async () => {
|
|
35
|
-
try {
|
|
36
|
-
let t = `mermaid-cb-${Date.now()}-${Math.random().toString(36).slice(2, 7)}`, { svg: i } = await p.render(t, n);
|
|
37
|
-
!e && r.current && (r.current.innerHTML = i);
|
|
38
|
-
} catch (t) {
|
|
39
|
-
!e && r.current && (r.current.innerHTML = `<pre style="color:#ef4444;font-size:12px;padding:8px;">${String(t)}</pre>`);
|
|
40
|
-
}
|
|
41
|
-
})(), () => {
|
|
42
|
-
e = !0;
|
|
43
|
-
};
|
|
44
|
-
}, [n]), /* @__PURE__ */ i("div", {
|
|
45
|
-
ref: r,
|
|
46
|
-
className: "rte-mermaid-container"
|
|
47
|
-
});
|
|
48
|
-
}, T = ({ code: e }) => {
|
|
14
|
+
var x = ({ code: e }) => {
|
|
49
15
|
let t = e.includes("$$") ? e : `$$\n${e}\n$$`;
|
|
50
|
-
return /* @__PURE__ */
|
|
16
|
+
return /* @__PURE__ */ a(l, {
|
|
51
17
|
remarkPlugins: [f],
|
|
52
|
-
rehypePlugins: [
|
|
18
|
+
rehypePlugins: [d],
|
|
53
19
|
children: t
|
|
54
20
|
});
|
|
55
|
-
},
|
|
56
|
-
remarkPlugins: [
|
|
57
|
-
rehypePlugins: [
|
|
58
|
-
components: { code({ className:
|
|
59
|
-
let
|
|
60
|
-
return
|
|
61
|
-
style:
|
|
62
|
-
language:
|
|
21
|
+
}, S = ({ code: t }) => /* @__PURE__ */ a(l, {
|
|
22
|
+
remarkPlugins: [u, f],
|
|
23
|
+
rehypePlugins: [d],
|
|
24
|
+
components: { code({ className: t, children: n, ...r }) {
|
|
25
|
+
let i = /language-(\w+)/.exec(t || "")?.[1], o = String(n).replace(/\n$/, "");
|
|
26
|
+
return i === "mermaid" ? /* @__PURE__ */ a(e, { code: o }) : i ? /* @__PURE__ */ a(s, {
|
|
27
|
+
style: c,
|
|
28
|
+
language: i,
|
|
63
29
|
PreTag: "div",
|
|
64
30
|
customStyle: {
|
|
65
31
|
borderRadius: "0.5rem",
|
|
@@ -67,32 +33,32 @@ var w = ({ code: n }) => {
|
|
|
67
33
|
padding: "1em",
|
|
68
34
|
margin: "0.5em 0"
|
|
69
35
|
},
|
|
70
|
-
children:
|
|
71
|
-
}) : /* @__PURE__ */
|
|
72
|
-
className:
|
|
73
|
-
...
|
|
74
|
-
children:
|
|
36
|
+
children: o
|
|
37
|
+
}) : /* @__PURE__ */ a("code", {
|
|
38
|
+
className: t,
|
|
39
|
+
...r,
|
|
40
|
+
children: n
|
|
75
41
|
});
|
|
76
42
|
} },
|
|
77
|
-
children:
|
|
78
|
-
}),
|
|
43
|
+
children: t
|
|
44
|
+
}), C = [
|
|
79
45
|
"r-markdown",
|
|
80
46
|
"r-mermaid",
|
|
81
47
|
"r-math"
|
|
82
|
-
],
|
|
83
|
-
[...
|
|
84
|
-
function
|
|
85
|
-
return
|
|
48
|
+
], w = /* @__PURE__ */ ".javascript.typescript.python.rust.go.java.c.cpp.csharp.ruby.php.swift.kotlin.sql.bash.shell.html.css.json.yaml.toml.xml.markdown.mermaid.math.docker.graphql.latex.tex".split(".");
|
|
49
|
+
[...w, ...C];
|
|
50
|
+
function T(e) {
|
|
51
|
+
return C.includes(e);
|
|
86
52
|
}
|
|
87
|
-
function
|
|
53
|
+
function E(e) {
|
|
88
54
|
return e === "math" || e === "latex" || e === "tex" ? "latex" : e;
|
|
89
55
|
}
|
|
90
|
-
var
|
|
91
|
-
let
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
}, [
|
|
95
|
-
let
|
|
56
|
+
var D = ({ node: l, editor: u, updateAttributes: d }) => {
|
|
57
|
+
let f = t(u), p = l.attrs.language || "", g = l.textContent, _ = !!p, v = T(p), [y, b] = r(!0);
|
|
58
|
+
n(() => {
|
|
59
|
+
_ || b(!0);
|
|
60
|
+
}, [p, _]);
|
|
61
|
+
let D = /* @__PURE__ */ o("svg", {
|
|
96
62
|
width: "12",
|
|
97
63
|
height: "12",
|
|
98
64
|
viewBox: "0 0 24 24",
|
|
@@ -101,8 +67,8 @@ var j = ({ node: t, updateAttributes: c }) => {
|
|
|
101
67
|
strokeWidth: "2",
|
|
102
68
|
strokeLinecap: "round",
|
|
103
69
|
strokeLinejoin: "round",
|
|
104
|
-
children: [/* @__PURE__ */
|
|
105
|
-
}),
|
|
70
|
+
children: [/* @__PURE__ */ a("path", { d: "M11 4H4a2 2 0 00-2 2v14a2 2 0 002 2h14a2 2 0 002-2v-7" }), /* @__PURE__ */ a("path", { d: "M18.5 2.5a2.121 2.121 0 013 3L12 15l-4 1 1-4 9.5-9.5z" })]
|
|
71
|
+
}), O = /* @__PURE__ */ o("svg", {
|
|
106
72
|
width: "12",
|
|
107
73
|
height: "12",
|
|
108
74
|
viewBox: "0 0 24 24",
|
|
@@ -111,101 +77,102 @@ var j = ({ node: t, updateAttributes: c }) => {
|
|
|
111
77
|
strokeWidth: "2",
|
|
112
78
|
strokeLinecap: "round",
|
|
113
79
|
strokeLinejoin: "round",
|
|
114
|
-
children: [/* @__PURE__ */
|
|
80
|
+
children: [/* @__PURE__ */ a("path", { d: "M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z" }), /* @__PURE__ */ a("circle", {
|
|
115
81
|
cx: "12",
|
|
116
82
|
cy: "12",
|
|
117
83
|
r: "3"
|
|
118
84
|
})]
|
|
119
|
-
}),
|
|
85
|
+
}), k = () => p === "r-mermaid" ? g.trim() ? /* @__PURE__ */ a(e, { code: g }) : /* @__PURE__ */ a("p", {
|
|
120
86
|
className: "rte-codeblock__placeholder",
|
|
121
87
|
children: "Enter mermaid diagram code..."
|
|
122
|
-
}) :
|
|
88
|
+
}) : p === "r-math" ? g.trim() ? /* @__PURE__ */ a(x, { code: g }) : /* @__PURE__ */ a("p", {
|
|
123
89
|
className: "rte-codeblock__placeholder",
|
|
124
90
|
children: "Enter KaTeX math formula..."
|
|
125
|
-
}) :
|
|
91
|
+
}) : p === "r-markdown" ? g.trim() ? /* @__PURE__ */ a(S, { code: g }) : /* @__PURE__ */ a("p", {
|
|
126
92
|
className: "rte-codeblock__placeholder",
|
|
127
93
|
children: "Enter Markdown content..."
|
|
128
|
-
}) : null,
|
|
129
|
-
return /* @__PURE__ */
|
|
130
|
-
className: `rte-codeblock-wrapper ${!
|
|
131
|
-
children:
|
|
94
|
+
}) : null, A = p.startsWith("r-") ? p.slice(2) + " (render)" : p || "plain text";
|
|
95
|
+
return /* @__PURE__ */ a(h, {
|
|
96
|
+
className: `rte-codeblock-wrapper ${!y && _ ? "rte-codeblock-wrapper--preview" : ""}`,
|
|
97
|
+
children: y ? /* @__PURE__ */ o(i, { children: [/* @__PURE__ */ o("div", {
|
|
132
98
|
className: "rte-codeblock__header",
|
|
133
|
-
children: [/* @__PURE__ */
|
|
99
|
+
children: [/* @__PURE__ */ o("select", {
|
|
134
100
|
className: "rte-codeblock__lang-select",
|
|
135
|
-
value:
|
|
101
|
+
value: p,
|
|
102
|
+
disabled: !f,
|
|
136
103
|
onChange: (e) => {
|
|
137
|
-
|
|
104
|
+
!u.isDestroyed && u.isEditable && (d({ language: e.target.value }), e.target.value || b(!0));
|
|
138
105
|
},
|
|
139
106
|
contentEditable: !1,
|
|
140
107
|
children: [
|
|
141
|
-
/* @__PURE__ */
|
|
108
|
+
/* @__PURE__ */ a("option", {
|
|
142
109
|
value: "",
|
|
143
110
|
children: "Plain text"
|
|
144
111
|
}),
|
|
145
|
-
/* @__PURE__ */
|
|
112
|
+
/* @__PURE__ */ a("optgroup", {
|
|
146
113
|
label: "Syntax Highlight",
|
|
147
|
-
children:
|
|
114
|
+
children: w.filter(Boolean).map((e) => /* @__PURE__ */ a("option", {
|
|
148
115
|
value: e,
|
|
149
116
|
children: e
|
|
150
117
|
}, e))
|
|
151
118
|
}),
|
|
152
|
-
/* @__PURE__ */
|
|
119
|
+
/* @__PURE__ */ a("optgroup", {
|
|
153
120
|
label: "Live Render",
|
|
154
|
-
children:
|
|
121
|
+
children: C.map((e) => /* @__PURE__ */ a("option", {
|
|
155
122
|
value: e,
|
|
156
123
|
children: e
|
|
157
124
|
}, e))
|
|
158
125
|
})
|
|
159
126
|
]
|
|
160
|
-
}),
|
|
127
|
+
}), _ && /* @__PURE__ */ o("button", {
|
|
161
128
|
type: "button",
|
|
162
129
|
className: "rte-codeblock__preview-btn",
|
|
163
|
-
onClick: () =>
|
|
130
|
+
onClick: () => b(!1),
|
|
164
131
|
contentEditable: !1,
|
|
165
|
-
children: [
|
|
132
|
+
children: [O, " Preview"]
|
|
166
133
|
})]
|
|
167
|
-
}), /* @__PURE__ */
|
|
134
|
+
}), /* @__PURE__ */ a("pre", {
|
|
168
135
|
className: "rte-codeblock__editable-pre",
|
|
169
|
-
children: /* @__PURE__ */
|
|
170
|
-
})] }) :
|
|
136
|
+
children: /* @__PURE__ */ a(m, { as: "code" })
|
|
137
|
+
})] }) : v ? /* @__PURE__ */ o("div", {
|
|
171
138
|
className: "rte-codeblock__render-preview",
|
|
172
139
|
contentEditable: !1,
|
|
173
|
-
onDoubleClick: () =>
|
|
174
|
-
children: [/* @__PURE__ */
|
|
140
|
+
onDoubleClick: () => b(!0),
|
|
141
|
+
children: [/* @__PURE__ */ o("div", {
|
|
175
142
|
className: "rte-codeblock__preview-toolbar",
|
|
176
143
|
contentEditable: !1,
|
|
177
|
-
children: [/* @__PURE__ */
|
|
144
|
+
children: [/* @__PURE__ */ a("span", {
|
|
178
145
|
className: "rte-codeblock__preview-label",
|
|
179
|
-
children:
|
|
180
|
-
}), /* @__PURE__ */
|
|
146
|
+
children: A
|
|
147
|
+
}), /* @__PURE__ */ o("button", {
|
|
181
148
|
type: "button",
|
|
182
149
|
className: "rte-codeblock__preview-edit-btn",
|
|
183
|
-
onClick: () =>
|
|
184
|
-
children: [
|
|
150
|
+
onClick: () => b(!0),
|
|
151
|
+
children: [D, " Edit"]
|
|
185
152
|
})]
|
|
186
|
-
}), /* @__PURE__ */
|
|
153
|
+
}), /* @__PURE__ */ a("div", {
|
|
187
154
|
className: "rte-codeblock__render-body",
|
|
188
|
-
children:
|
|
155
|
+
children: k()
|
|
189
156
|
})]
|
|
190
|
-
}) : /* @__PURE__ */
|
|
157
|
+
}) : /* @__PURE__ */ o("div", {
|
|
191
158
|
className: "rte-codeblock__syntax-preview",
|
|
192
159
|
contentEditable: !1,
|
|
193
|
-
onDoubleClick: () =>
|
|
194
|
-
children: [/* @__PURE__ */
|
|
160
|
+
onDoubleClick: () => b(!0),
|
|
161
|
+
children: [/* @__PURE__ */ o("div", {
|
|
195
162
|
className: "rte-codeblock__preview-toolbar",
|
|
196
163
|
contentEditable: !1,
|
|
197
|
-
children: [/* @__PURE__ */
|
|
164
|
+
children: [/* @__PURE__ */ a("span", {
|
|
198
165
|
className: "rte-codeblock__preview-label",
|
|
199
|
-
children:
|
|
200
|
-
}), /* @__PURE__ */
|
|
166
|
+
children: A
|
|
167
|
+
}), /* @__PURE__ */ o("button", {
|
|
201
168
|
type: "button",
|
|
202
169
|
className: "rte-codeblock__preview-edit-btn",
|
|
203
|
-
onClick: () =>
|
|
204
|
-
children: [
|
|
170
|
+
onClick: () => b(!0),
|
|
171
|
+
children: [D, " Edit"]
|
|
205
172
|
})]
|
|
206
|
-
}), /* @__PURE__ */
|
|
207
|
-
style:
|
|
208
|
-
language:
|
|
173
|
+
}), /* @__PURE__ */ a(s, {
|
|
174
|
+
style: c,
|
|
175
|
+
language: E(p),
|
|
209
176
|
PreTag: "div",
|
|
210
177
|
customStyle: {
|
|
211
178
|
borderRadius: "0 0 0.5rem 0.5rem",
|
|
@@ -213,11 +180,11 @@ var j = ({ node: t, updateAttributes: c }) => {
|
|
|
213
180
|
padding: "1em",
|
|
214
181
|
margin: "0"
|
|
215
182
|
},
|
|
216
|
-
children:
|
|
183
|
+
children: g || " "
|
|
217
184
|
})]
|
|
218
185
|
})
|
|
219
186
|
});
|
|
220
|
-
},
|
|
187
|
+
}, O = /^```([a-z-]*)[\s\n]$/, k = /^~~~([a-z-]*)[\s\n]$/, A = /^(?:```|~~~)table(?:(\d+)[x×X*](\d+))?\s?$/, j = p.create({
|
|
221
188
|
name: "codeBlock",
|
|
222
189
|
group: "block",
|
|
223
190
|
content: "text*",
|
|
@@ -243,7 +210,7 @@ var j = ({ node: t, updateAttributes: c }) => {
|
|
|
243
210
|
renderHTML({ node: e, HTMLAttributes: t }) {
|
|
244
211
|
return [
|
|
245
212
|
"pre",
|
|
246
|
-
|
|
213
|
+
_(t, { "data-language": e.attrs.language }),
|
|
247
214
|
[
|
|
248
215
|
"code",
|
|
249
216
|
{ class: e.attrs.language ? `language-${e.attrs.language}` : void 0 },
|
|
@@ -252,38 +219,39 @@ var j = ({ node: t, updateAttributes: c }) => {
|
|
|
252
219
|
];
|
|
253
220
|
},
|
|
254
221
|
addInputRules() {
|
|
255
|
-
return [
|
|
256
|
-
find:
|
|
222
|
+
return [v({
|
|
223
|
+
find: O,
|
|
257
224
|
type: this.type,
|
|
258
225
|
getAttributes: (e) => !e[1]?.startsWith("table") && { language: e[1] || null }
|
|
259
|
-
}),
|
|
260
|
-
find:
|
|
226
|
+
}), v({
|
|
227
|
+
find: k,
|
|
261
228
|
type: this.type,
|
|
262
229
|
getAttributes: (e) => !e[1]?.startsWith("table") && { language: e[1] || null }
|
|
263
230
|
})];
|
|
264
231
|
},
|
|
265
232
|
addProseMirrorPlugins() {
|
|
266
|
-
|
|
267
|
-
|
|
233
|
+
let e = this.editor;
|
|
234
|
+
return [new y({
|
|
235
|
+
key: new b("tableShortcut"),
|
|
268
236
|
props: {
|
|
269
|
-
handleTextInput(
|
|
270
|
-
if (
|
|
271
|
-
let { state:
|
|
272
|
-
return
|
|
237
|
+
handleTextInput(n, r, i, a) {
|
|
238
|
+
if (!e.isEditable || a !== " ") return !1;
|
|
239
|
+
let { state: o } = n, s = o.doc.resolve(r).start(), c = o.doc.textBetween(s, r, "\0") + " ", l = A.exec(c);
|
|
240
|
+
return l ? (t(n, s, i, Math.min(Math.max(parseInt(l[1], 10) || 3, 1), 20), Math.min(Math.max(parseInt(l[2], 10) || 3, 1), 20)), !0) : !1;
|
|
273
241
|
},
|
|
274
|
-
handleKeyDown(
|
|
275
|
-
if (
|
|
276
|
-
let { state:
|
|
277
|
-
if (!
|
|
278
|
-
let
|
|
279
|
-
if (!
|
|
280
|
-
|
|
281
|
-
let
|
|
282
|
-
return
|
|
242
|
+
handleKeyDown(n, r) {
|
|
243
|
+
if (!e.isEditable || r.key !== "Enter") return !1;
|
|
244
|
+
let { state: i } = n, { $from: a } = i.selection;
|
|
245
|
+
if (!a.parent.isTextblock) return !1;
|
|
246
|
+
let o = a.start(), s = i.doc.textBetween(o, a.pos, "\0"), c = A.exec(s);
|
|
247
|
+
if (!c) return !1;
|
|
248
|
+
r.preventDefault();
|
|
249
|
+
let l = Math.min(Math.max(parseInt(c[1], 10) || 3, 1), 20), u = Math.min(Math.max(parseInt(c[2], 10) || 3, 1), 20);
|
|
250
|
+
return t(n, o, a.pos, l, u), !0;
|
|
283
251
|
}
|
|
284
252
|
}
|
|
285
253
|
})];
|
|
286
|
-
function
|
|
254
|
+
function t(e, t, n, r, i) {
|
|
287
255
|
let { state: a } = e, o = a.doc.resolve(t), s = o.parent, c = o.before(), l = a.schema.nodes.table, u = a.schema.nodes.tableRow, d = a.schema.nodes.tableHeader, f = a.schema.nodes.tableCell;
|
|
288
256
|
if (!l || !u || !f) return;
|
|
289
257
|
let p = a.schema.nodes.paragraph.create(), m = (e) => {
|
|
@@ -295,11 +263,11 @@ var j = ({ node: t, updateAttributes: c }) => {
|
|
|
295
263
|
},
|
|
296
264
|
addKeyboardShortcuts() {
|
|
297
265
|
return {
|
|
298
|
-
"Mod-Alt-c": () => this.editor.commands.toggleNode("codeBlock", "paragraph"),
|
|
299
|
-
Tab: ({ editor: e }) => e.isActive("codeBlock") ? (e.commands.insertContent(" "), !0) : !1,
|
|
300
|
-
Enter: ({ editor: e }) => e.isActive("codeBlock") ? (e.commands.newlineInCode(), !0)
|
|
266
|
+
"Mod-Alt-c": () => this.editor.isEditable && this.editor.commands.toggleNode("codeBlock", "paragraph"),
|
|
267
|
+
Tab: ({ editor: e }) => e.isEditable && e.isActive("codeBlock") ? (e.commands.insertContent(" "), !0) : !1,
|
|
268
|
+
Enter: ({ editor: e }) => !e.isEditable || !e.isActive("codeBlock") ? !1 : (e.commands.newlineInCode(), !0),
|
|
301
269
|
ArrowDown: ({ editor: e }) => {
|
|
302
|
-
if (!e.isActive("codeBlock")) return !1;
|
|
270
|
+
if (!e.isEditable || !e.isActive("codeBlock")) return !1;
|
|
303
271
|
let { $from: t } = e.state.selection;
|
|
304
272
|
if (t.parentOffset !== t.parent.content.size) return !1;
|
|
305
273
|
let n = t.after();
|
|
@@ -308,10 +276,10 @@ var j = ({ node: t, updateAttributes: c }) => {
|
|
|
308
276
|
};
|
|
309
277
|
},
|
|
310
278
|
addNodeView() {
|
|
311
|
-
return
|
|
279
|
+
return g(D);
|
|
312
280
|
}
|
|
313
281
|
});
|
|
314
282
|
//#endregion
|
|
315
|
-
export {
|
|
283
|
+
export { j as CodeBlockExtension, j as default };
|
|
316
284
|
|
|
317
285
|
//# sourceMappingURL=CodeBlockView.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CodeBlockView.js","names":[],"sources":["../../../../../src/components/pro/RichTextEditor/extensions/CodeBlockView.tsx"],"sourcesContent":["import React, { useState, useEffect, useRef } from 'react';\nimport { Node, mergeAttributes, textblockTypeInputRule } from '@tiptap/react';\nimport { Plugin, PluginKey } from '@tiptap/pm/state';\nimport { NodeViewWrapper, NodeViewContent, ReactNodeViewRenderer } from '@tiptap/react';\nimport type { NodeViewProps } from '@tiptap/react';\nimport { Prism as SyntaxHighlighter } from 'react-syntax-highlighter';\nimport { oneLight } from 'react-syntax-highlighter/dist/esm/styles/prism';\nimport ReactMarkdown from 'react-markdown';\nimport remarkGfm from 'remark-gfm';\nimport remarkMath from 'remark-math';\nimport rehypeKatex from 'rehype-katex';\nimport rehypeRaw from 'rehype-raw';\nimport mermaid from 'mermaid';\nimport 'katex/dist/katex.min.css';\n\nlet mermaidInitialized = false;\n\nfunction initMermaid() {\n if (!mermaidInitialized) {\n mermaid.initialize({\n startOnLoad: false,\n theme: 'default',\n securityLevel: 'loose',\n fontFamily: 'inherit',\n flowchart: { useMaxWidth: true, htmlLabels: true },\n });\n mermaidInitialized = true;\n }\n}\n\nconst MermaidRenderer: React.FC<{ code: string }> = ({ code }) => {\n const containerRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!code.trim() || !containerRef.current) return;\n initMermaid();\n\n let cancelled = false;\n const render = async () => {\n try {\n const id = `mermaid-cb-${Date.now()}-${Math.random().toString(36).slice(2, 7)}`;\n const { svg } = await mermaid.render(id, code);\n if (!cancelled && containerRef.current) {\n containerRef.current.innerHTML = svg;\n }\n } catch (err) {\n if (!cancelled && containerRef.current) {\n containerRef.current.innerHTML = `<pre style=\"color:#ef4444;font-size:12px;padding:8px;\">${String(err)}</pre>`;\n }\n }\n };\n render();\n return () => { cancelled = true; };\n }, [code]);\n\n return <div ref={containerRef} className=\"rte-mermaid-container\" />;\n};\n\nconst KatexRenderer: React.FC<{ code: string }> = ({ code }) => {\n const wrapped = code.includes('$$') ? code : `$$\\n${code}\\n$$`;\n return (\n <ReactMarkdown\n remarkPlugins={[remarkMath]}\n rehypePlugins={[rehypeKatex]}\n >\n {wrapped}\n </ReactMarkdown>\n );\n};\n\nconst MarkdownRenderer: React.FC<{ code: string }> = ({ code }) => {\n return (\n <ReactMarkdown\n remarkPlugins={[remarkGfm, remarkMath]}\n rehypePlugins={[rehypeKatex, rehypeRaw]}\n components={{\n code({ className, children, ...props }) {\n const match = /language-(\\w+)/.exec(className || '');\n const lang = match?.[1];\n const text = String(children).replace(/\\n$/, '');\n\n if (lang === 'mermaid') return <MermaidRenderer code={text} />;\n\n if (lang) {\n return (\n <SyntaxHighlighter\n style={oneLight as Record<string, React.CSSProperties>}\n language={lang}\n PreTag=\"div\"\n customStyle={{ borderRadius: '0.5rem', fontSize: '0.875em', padding: '1em', margin: '0.5em 0' }}\n >\n {text}\n </SyntaxHighlighter>\n );\n }\n return <code className={className} {...props}>{children}</code>;\n },\n }}\n >\n {code}\n </ReactMarkdown>\n );\n};\n\nconst RENDER_LANGUAGES = ['r-markdown', 'r-mermaid', 'r-math'];\n\nconst HIGHLIGHT_LANGUAGES = [\n '', 'javascript', 'typescript', 'python', 'rust', 'go', 'java', 'c', 'cpp',\n 'csharp', 'ruby', 'php', 'swift', 'kotlin', 'sql', 'bash', 'shell',\n 'html', 'css', 'json', 'yaml', 'toml', 'xml', 'markdown', 'mermaid', 'math',\n 'docker', 'graphql', 'latex', 'tex',\n];\n\nconst ALL_LANGUAGES = [...HIGHLIGHT_LANGUAGES, ...RENDER_LANGUAGES];\n\nfunction isRenderLang(lang: string): boolean {\n return RENDER_LANGUAGES.includes(lang);\n}\n\nfunction highlightLang(lang: string): string {\n if (lang === 'math' || lang === 'latex' || lang === 'tex') return 'latex';\n return lang;\n}\n\nconst CodeBlockNodeView: React.FC<NodeViewProps> = ({\n node,\n updateAttributes,\n}) => {\n const language = node.attrs.language || '';\n const textContent = node.textContent;\n const hasLanguage = !!language;\n const isRenderable = isRenderLang(language);\n\n const [isEditing, setIsEditing] = useState(true);\n\n useEffect(() => {\n if (!hasLanguage) setIsEditing(true);\n }, [language, hasLanguage]);\n\n const editIcon = (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M11 4H4a2 2 0 00-2 2v14a2 2 0 002 2h14a2 2 0 002-2v-7\" />\n <path d=\"M18.5 2.5a2.121 2.121 0 013 3L12 15l-4 1 1-4 9.5-9.5z\" />\n </svg>\n );\n const previewIcon = (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n );\n\n const renderPreview = () => {\n if (language === 'r-mermaid') {\n return textContent.trim()\n ? <MermaidRenderer code={textContent} />\n : <p className=\"rte-codeblock__placeholder\">Enter mermaid diagram code...</p>;\n }\n if (language === 'r-math') {\n return textContent.trim()\n ? <KatexRenderer code={textContent} />\n : <p className=\"rte-codeblock__placeholder\">Enter KaTeX math formula...</p>;\n }\n if (language === 'r-markdown') {\n return textContent.trim()\n ? <MarkdownRenderer code={textContent} />\n : <p className=\"rte-codeblock__placeholder\">Enter Markdown content...</p>;\n }\n return null;\n };\n\n const displayLabel = language.startsWith('r-') ? language.slice(2) + ' (render)' : language || 'plain text';\n\n return (\n <NodeViewWrapper className={`rte-codeblock-wrapper ${!isEditing && hasLanguage ? 'rte-codeblock-wrapper--preview' : ''}`}>\n {isEditing ? (\n <>\n <div className=\"rte-codeblock__header\">\n <select\n className=\"rte-codeblock__lang-select\"\n value={language}\n onChange={(e) => {\n updateAttributes({ language: e.target.value });\n if (!e.target.value) setIsEditing(true);\n }}\n contentEditable={false}\n >\n <option value=\"\">Plain text</option>\n <optgroup label=\"Syntax Highlight\">\n {HIGHLIGHT_LANGUAGES.filter(Boolean).map((lang) => (\n <option key={lang} value={lang}>{lang}</option>\n ))}\n </optgroup>\n <optgroup label=\"Live Render\">\n {RENDER_LANGUAGES.map((lang) => (\n <option key={lang} value={lang}>{lang}</option>\n ))}\n </optgroup>\n </select>\n {hasLanguage && (\n <button\n type=\"button\"\n className=\"rte-codeblock__preview-btn\"\n onClick={() => setIsEditing(false)}\n contentEditable={false}\n >\n {previewIcon} Preview\n </button>\n )}\n </div>\n <pre className=\"rte-codeblock__editable-pre\">\n <NodeViewContent as={'code' as any} />\n </pre>\n </>\n ) : isRenderable ? (\n <div\n className=\"rte-codeblock__render-preview\"\n contentEditable={false}\n onDoubleClick={() => setIsEditing(true)}\n >\n <div className=\"rte-codeblock__preview-toolbar\" contentEditable={false}>\n <span className=\"rte-codeblock__preview-label\">{displayLabel}</span>\n <button\n type=\"button\"\n className=\"rte-codeblock__preview-edit-btn\"\n onClick={() => setIsEditing(true)}\n >\n {editIcon} Edit\n </button>\n </div>\n <div className=\"rte-codeblock__render-body\">\n {renderPreview()}\n </div>\n </div>\n ) : (\n <div\n className=\"rte-codeblock__syntax-preview\"\n contentEditable={false}\n onDoubleClick={() => setIsEditing(true)}\n >\n <div className=\"rte-codeblock__preview-toolbar\" contentEditable={false}>\n <span className=\"rte-codeblock__preview-label\">{displayLabel}</span>\n <button\n type=\"button\"\n className=\"rte-codeblock__preview-edit-btn\"\n onClick={() => setIsEditing(true)}\n >\n {editIcon} Edit\n </button>\n </div>\n <SyntaxHighlighter\n style={oneLight as Record<string, React.CSSProperties>}\n language={highlightLang(language)}\n PreTag=\"div\"\n customStyle={{\n borderRadius: '0 0 0.5rem 0.5rem',\n fontSize: '0.875em',\n padding: '1em',\n margin: '0',\n }}\n >\n {textContent || ' '}\n </SyntaxHighlighter>\n </div>\n )}\n </NodeViewWrapper>\n );\n};\n\nconst backtickInputRegex = /^```([a-z-]*)[\\s\\n]$/;\nconst tildeInputRegex = /^~~~([a-z-]*)[\\s\\n]$/;\nconst tableShortcutRegex = /^(?:```|~~~)table(?:(\\d+)[x×X*](\\d+))?\\s?$/;\n\nexport const CodeBlockExtension = Node.create({\n name: 'codeBlock',\n group: 'block',\n content: 'text*',\n marks: '',\n code: true,\n defining: true,\n\n addAttributes() {\n return {\n language: {\n default: null,\n parseHTML: (element) => {\n const classAttr = element.querySelector('code')?.className ||\n element.className || '';\n const match = /language-([\\w-]+)/.exec(classAttr);\n return match?.[1] || element.getAttribute('data-language') || null;\n },\n renderHTML: (attributes) => {\n if (!attributes.language) return {};\n return { 'data-language': attributes.language };\n },\n },\n };\n },\n\n parseHTML() {\n return [\n {\n tag: 'pre',\n preserveWhitespace: 'full',\n },\n ];\n },\n\n renderHTML({ node, HTMLAttributes }) {\n return [\n 'pre',\n mergeAttributes(HTMLAttributes, { 'data-language': node.attrs.language }),\n ['code', { class: node.attrs.language ? `language-${node.attrs.language}` : undefined }, 0],\n ];\n },\n\n addInputRules() {\n return [\n textblockTypeInputRule({\n find: backtickInputRegex,\n type: this.type,\n getAttributes: (match) => {\n if (match[1]?.startsWith('table')) return false;\n return { language: match[1] || null };\n },\n }),\n textblockTypeInputRule({\n find: tildeInputRegex,\n type: this.type,\n getAttributes: (match) => {\n if (match[1]?.startsWith('table')) return false;\n return { language: match[1] || null };\n },\n }),\n ];\n },\n\n addProseMirrorPlugins() {\n const editorRef = this.editor;\n return [\n new Plugin({\n key: new PluginKey('tableShortcut'),\n props: {\n handleTextInput(view, from, to, text) {\n if (text !== ' ') return false;\n const { state } = view;\n const $from = state.doc.resolve(from);\n const blockStart = $from.start();\n const textBefore = state.doc.textBetween(blockStart, from, '\\0');\n const full = textBefore + ' ';\n const m = tableShortcutRegex.exec(full);\n if (!m) return false;\n\n const rows = Math.min(Math.max(parseInt(m[1], 10) || 3, 1), 20);\n const cols = Math.min(Math.max(parseInt(m[2], 10) || 3, 1), 20);\n dispatchTable(view, blockStart, to, rows, cols);\n return true;\n },\n handleKeyDown(view, event) {\n if (event.key !== 'Enter') return false;\n const { state } = view;\n const { $from } = state.selection;\n if (!$from.parent.isTextblock) return false;\n const blockStart = $from.start();\n const textBefore = state.doc.textBetween(blockStart, $from.pos, '\\0');\n const m = tableShortcutRegex.exec(textBefore);\n if (!m) return false;\n\n event.preventDefault();\n const rows = Math.min(Math.max(parseInt(m[1], 10) || 3, 1), 20);\n const cols = Math.min(Math.max(parseInt(m[2], 10) || 3, 1), 20);\n dispatchTable(view, blockStart, $from.pos, rows, cols);\n return true;\n },\n },\n }),\n ];\n\n function dispatchTable(view: typeof editorRef.view, from: number, to: number, rows: number, cols: number) {\n const { state } = view;\n const $from = state.doc.resolve(from);\n const blockNode = $from.parent;\n const blockPos = $from.before();\n\n const tableType = state.schema.nodes.table;\n const rowType = state.schema.nodes.tableRow;\n const headerType = state.schema.nodes.tableHeader;\n const cellType = state.schema.nodes.tableCell;\n if (!tableType || !rowType || !cellType) return;\n\n const emptyParagraph = state.schema.nodes.paragraph.create();\n const buildRow = (isHeader: boolean) => {\n const type = isHeader && headerType ? headerType : cellType;\n const cells = Array.from({ length: cols }, () => type.create(null, emptyParagraph));\n return rowType.create(null, cells);\n };\n\n const tableRows = [\n buildRow(true),\n ...Array.from({ length: rows - 1 }, () => buildRow(false)),\n ];\n const table = tableType.create(null, tableRows);\n const tr = state.tr.replaceWith(blockPos, blockPos + blockNode.nodeSize, table);\n view.dispatch(tr);\n }\n },\n\n addKeyboardShortcuts() {\n return {\n 'Mod-Alt-c': () => this.editor.commands.toggleNode('codeBlock', 'paragraph'),\n Tab: ({ editor }) => {\n if (editor.isActive('codeBlock')) {\n editor.commands.insertContent('\\t');\n return true;\n }\n return false;\n },\n Enter: ({ editor }) => {\n if (!editor.isActive('codeBlock')) return false;\n editor.commands.newlineInCode();\n return true;\n },\n ArrowDown: ({ editor }) => {\n if (!editor.isActive('codeBlock')) return false;\n const { $from } = editor.state.selection;\n const isAtEnd = $from.parentOffset === $from.parent.content.size;\n if (!isAtEnd) return false;\n const after = $from.after();\n if (after === undefined) return false;\n const nodeAfter = editor.state.doc.nodeAt(after);\n if (nodeAfter) return false;\n editor.commands.exitCode();\n return true;\n },\n };\n },\n\n addNodeView() {\n return ReactNodeViewRenderer(CodeBlockNodeView);\n },\n});\n\nexport default CodeBlockExtension;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CodeBlockView.js","names":[],"sources":["../../../../../src/components/pro/RichTextEditor/extensions/CodeBlockView.tsx"],"sourcesContent":["import React, { useState, useEffect } from 'react';\nimport { Node, mergeAttributes, textblockTypeInputRule } from '@tiptap/react';\nimport { Plugin, PluginKey } from '@tiptap/pm/state';\nimport { NodeViewWrapper, NodeViewContent, ReactNodeViewRenderer } from '@tiptap/react';\nimport type { NodeViewProps } from '@tiptap/react';\nimport { Prism as SyntaxHighlighter } from 'react-syntax-highlighter';\nimport { oneLight } from 'react-syntax-highlighter/dist/esm/styles/prism';\nimport ReactMarkdown from 'react-markdown';\nimport remarkGfm from 'remark-gfm';\nimport remarkMath from 'remark-math';\nimport rehypeKatex from 'rehype-katex';\nimport { MermaidRenderer, useNodeEditable } from './MarkdownBlock';\nimport 'katex/dist/katex.min.css';\n\n\nconst KatexRenderer: React.FC<{ code: string }> = ({ code }) => {\n const wrapped = code.includes('$$') ? code : `$$\\n${code}\\n$$`;\n return (\n <ReactMarkdown\n remarkPlugins={[remarkMath]}\n rehypePlugins={[rehypeKatex]}\n >\n {wrapped}\n </ReactMarkdown>\n );\n};\n\nconst MarkdownRenderer: React.FC<{ code: string }> = ({ code }) => {\n return (\n <ReactMarkdown\n remarkPlugins={[remarkGfm, remarkMath]}\n rehypePlugins={[rehypeKatex]}\n components={{\n code({ className, children, ...props }) {\n const match = /language-(\\w+)/.exec(className || '');\n const lang = match?.[1];\n const text = String(children).replace(/\\n$/, '');\n\n if (lang === 'mermaid') return <MermaidRenderer code={text} />;\n\n if (lang) {\n return (\n <SyntaxHighlighter\n style={oneLight as Record<string, React.CSSProperties>}\n language={lang}\n PreTag=\"div\"\n customStyle={{ borderRadius: '0.5rem', fontSize: '0.875em', padding: '1em', margin: '0.5em 0' }}\n >\n {text}\n </SyntaxHighlighter>\n );\n }\n return <code className={className} {...props}>{children}</code>;\n },\n }}\n >\n {code}\n </ReactMarkdown>\n );\n};\n\nconst RENDER_LANGUAGES = ['r-markdown', 'r-mermaid', 'r-math'];\n\nconst HIGHLIGHT_LANGUAGES = [\n '', 'javascript', 'typescript', 'python', 'rust', 'go', 'java', 'c', 'cpp',\n 'csharp', 'ruby', 'php', 'swift', 'kotlin', 'sql', 'bash', 'shell',\n 'html', 'css', 'json', 'yaml', 'toml', 'xml', 'markdown', 'mermaid', 'math',\n 'docker', 'graphql', 'latex', 'tex',\n];\n\nconst ALL_LANGUAGES = [...HIGHLIGHT_LANGUAGES, ...RENDER_LANGUAGES];\n\nfunction isRenderLang(lang: string): boolean {\n return RENDER_LANGUAGES.includes(lang);\n}\n\nfunction highlightLang(lang: string): string {\n if (lang === 'math' || lang === 'latex' || lang === 'tex') return 'latex';\n return lang;\n}\n\nconst CodeBlockNodeView: React.FC<NodeViewProps> = ({\n node,\n editor,\n updateAttributes,\n}) => {\n const editable = useNodeEditable(editor);\n const language = node.attrs.language || '';\n const textContent = node.textContent;\n const hasLanguage = !!language;\n const isRenderable = isRenderLang(language);\n\n const [isEditing, setIsEditing] = useState(true);\n\n useEffect(() => {\n if (!hasLanguage) setIsEditing(true);\n }, [language, hasLanguage]);\n\n const editIcon = (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M11 4H4a2 2 0 00-2 2v14a2 2 0 002 2h14a2 2 0 002-2v-7\" />\n <path d=\"M18.5 2.5a2.121 2.121 0 013 3L12 15l-4 1 1-4 9.5-9.5z\" />\n </svg>\n );\n const previewIcon = (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n );\n\n const renderPreview = () => {\n if (language === 'r-mermaid') {\n return textContent.trim()\n ? <MermaidRenderer code={textContent} />\n : <p className=\"rte-codeblock__placeholder\">Enter mermaid diagram code...</p>;\n }\n if (language === 'r-math') {\n return textContent.trim()\n ? <KatexRenderer code={textContent} />\n : <p className=\"rte-codeblock__placeholder\">Enter KaTeX math formula...</p>;\n }\n if (language === 'r-markdown') {\n return textContent.trim()\n ? <MarkdownRenderer code={textContent} />\n : <p className=\"rte-codeblock__placeholder\">Enter Markdown content...</p>;\n }\n return null;\n };\n\n const displayLabel = language.startsWith('r-') ? language.slice(2) + ' (render)' : language || 'plain text';\n\n return (\n <NodeViewWrapper className={`rte-codeblock-wrapper ${!isEditing && hasLanguage ? 'rte-codeblock-wrapper--preview' : ''}`}>\n {isEditing ? (\n <>\n <div className=\"rte-codeblock__header\">\n <select\n className=\"rte-codeblock__lang-select\"\n value={language}\n disabled={!editable}\n onChange={(e) => {\n if (editor.isDestroyed || !editor.isEditable) return;\n updateAttributes({ language: e.target.value });\n if (!e.target.value) setIsEditing(true);\n }}\n contentEditable={false}\n >\n <option value=\"\">Plain text</option>\n <optgroup label=\"Syntax Highlight\">\n {HIGHLIGHT_LANGUAGES.filter(Boolean).map((lang) => (\n <option key={lang} value={lang}>{lang}</option>\n ))}\n </optgroup>\n <optgroup label=\"Live Render\">\n {RENDER_LANGUAGES.map((lang) => (\n <option key={lang} value={lang}>{lang}</option>\n ))}\n </optgroup>\n </select>\n {hasLanguage && (\n <button\n type=\"button\"\n className=\"rte-codeblock__preview-btn\"\n onClick={() => setIsEditing(false)}\n contentEditable={false}\n >\n {previewIcon} Preview\n </button>\n )}\n </div>\n <pre className=\"rte-codeblock__editable-pre\">\n <NodeViewContent as={'code' as any} />\n </pre>\n </>\n ) : isRenderable ? (\n <div\n className=\"rte-codeblock__render-preview\"\n contentEditable={false}\n onDoubleClick={() => setIsEditing(true)}\n >\n <div className=\"rte-codeblock__preview-toolbar\" contentEditable={false}>\n <span className=\"rte-codeblock__preview-label\">{displayLabel}</span>\n <button\n type=\"button\"\n className=\"rte-codeblock__preview-edit-btn\"\n onClick={() => setIsEditing(true)}\n >\n {editIcon} Edit\n </button>\n </div>\n <div className=\"rte-codeblock__render-body\">\n {renderPreview()}\n </div>\n </div>\n ) : (\n <div\n className=\"rte-codeblock__syntax-preview\"\n contentEditable={false}\n onDoubleClick={() => setIsEditing(true)}\n >\n <div className=\"rte-codeblock__preview-toolbar\" contentEditable={false}>\n <span className=\"rte-codeblock__preview-label\">{displayLabel}</span>\n <button\n type=\"button\"\n className=\"rte-codeblock__preview-edit-btn\"\n onClick={() => setIsEditing(true)}\n >\n {editIcon} Edit\n </button>\n </div>\n <SyntaxHighlighter\n style={oneLight as Record<string, React.CSSProperties>}\n language={highlightLang(language)}\n PreTag=\"div\"\n customStyle={{\n borderRadius: '0 0 0.5rem 0.5rem',\n fontSize: '0.875em',\n padding: '1em',\n margin: '0',\n }}\n >\n {textContent || ' '}\n </SyntaxHighlighter>\n </div>\n )}\n </NodeViewWrapper>\n );\n};\n\nconst backtickInputRegex = /^```([a-z-]*)[\\s\\n]$/;\nconst tildeInputRegex = /^~~~([a-z-]*)[\\s\\n]$/;\nconst tableShortcutRegex = /^(?:```|~~~)table(?:(\\d+)[x×X*](\\d+))?\\s?$/;\n\nexport const CodeBlockExtension = Node.create({\n name: 'codeBlock',\n group: 'block',\n content: 'text*',\n marks: '',\n code: true,\n defining: true,\n\n addAttributes() {\n return {\n language: {\n default: null,\n parseHTML: (element) => {\n const classAttr = element.querySelector('code')?.className ||\n element.className || '';\n const match = /language-([\\w-]+)/.exec(classAttr);\n return match?.[1] || element.getAttribute('data-language') || null;\n },\n renderHTML: (attributes) => {\n if (!attributes.language) return {};\n return { 'data-language': attributes.language };\n },\n },\n };\n },\n\n parseHTML() {\n return [\n {\n tag: 'pre',\n preserveWhitespace: 'full',\n },\n ];\n },\n\n renderHTML({ node, HTMLAttributes }) {\n return [\n 'pre',\n mergeAttributes(HTMLAttributes, { 'data-language': node.attrs.language }),\n ['code', { class: node.attrs.language ? `language-${node.attrs.language}` : undefined }, 0],\n ];\n },\n\n addInputRules() {\n return [\n textblockTypeInputRule({\n find: backtickInputRegex,\n type: this.type,\n getAttributes: (match) => {\n if (match[1]?.startsWith('table')) return false;\n return { language: match[1] || null };\n },\n }),\n textblockTypeInputRule({\n find: tildeInputRegex,\n type: this.type,\n getAttributes: (match) => {\n if (match[1]?.startsWith('table')) return false;\n return { language: match[1] || null };\n },\n }),\n ];\n },\n\n addProseMirrorPlugins() {\n const editorRef = this.editor;\n return [\n new Plugin({\n key: new PluginKey('tableShortcut'),\n props: {\n handleTextInput(view, from, to, text) {\n if (!editorRef.isEditable || text !== ' ') return false;\n const { state } = view;\n const $from = state.doc.resolve(from);\n const blockStart = $from.start();\n const textBefore = state.doc.textBetween(blockStart, from, '\\0');\n const full = textBefore + ' ';\n const m = tableShortcutRegex.exec(full);\n if (!m) return false;\n\n const rows = Math.min(Math.max(parseInt(m[1], 10) || 3, 1), 20);\n const cols = Math.min(Math.max(parseInt(m[2], 10) || 3, 1), 20);\n dispatchTable(view, blockStart, to, rows, cols);\n return true;\n },\n handleKeyDown(view, event) {\n if (!editorRef.isEditable || event.key !== 'Enter') return false;\n const { state } = view;\n const { $from } = state.selection;\n if (!$from.parent.isTextblock) return false;\n const blockStart = $from.start();\n const textBefore = state.doc.textBetween(blockStart, $from.pos, '\\0');\n const m = tableShortcutRegex.exec(textBefore);\n if (!m) return false;\n\n event.preventDefault();\n const rows = Math.min(Math.max(parseInt(m[1], 10) || 3, 1), 20);\n const cols = Math.min(Math.max(parseInt(m[2], 10) || 3, 1), 20);\n dispatchTable(view, blockStart, $from.pos, rows, cols);\n return true;\n },\n },\n }),\n ];\n\n function dispatchTable(view: typeof editorRef.view, from: number, to: number, rows: number, cols: number) {\n const { state } = view;\n const $from = state.doc.resolve(from);\n const blockNode = $from.parent;\n const blockPos = $from.before();\n\n const tableType = state.schema.nodes.table;\n const rowType = state.schema.nodes.tableRow;\n const headerType = state.schema.nodes.tableHeader;\n const cellType = state.schema.nodes.tableCell;\n if (!tableType || !rowType || !cellType) return;\n\n const emptyParagraph = state.schema.nodes.paragraph.create();\n const buildRow = (isHeader: boolean) => {\n const type = isHeader && headerType ? headerType : cellType;\n const cells = Array.from({ length: cols }, () => type.create(null, emptyParagraph));\n return rowType.create(null, cells);\n };\n\n const tableRows = [\n buildRow(true),\n ...Array.from({ length: rows - 1 }, () => buildRow(false)),\n ];\n const table = tableType.create(null, tableRows);\n const tr = state.tr.replaceWith(blockPos, blockPos + blockNode.nodeSize, table);\n view.dispatch(tr);\n }\n },\n\n addKeyboardShortcuts() {\n return {\n 'Mod-Alt-c': () => this.editor.isEditable && this.editor.commands.toggleNode('codeBlock', 'paragraph'),\n Tab: ({ editor }) => {\n if (!editor.isEditable) return false;\n if (editor.isActive('codeBlock')) {\n editor.commands.insertContent('\\t');\n return true;\n }\n return false;\n },\n Enter: ({ editor }) => {\n if (!editor.isEditable) return false;\n if (!editor.isActive('codeBlock')) return false;\n editor.commands.newlineInCode();\n return true;\n },\n ArrowDown: ({ editor }) => {\n if (!editor.isEditable) return false;\n if (!editor.isActive('codeBlock')) return false;\n const { $from } = editor.state.selection;\n const isAtEnd = $from.parentOffset === $from.parent.content.size;\n if (!isAtEnd) return false;\n const after = $from.after();\n if (after === undefined) return false;\n const nodeAfter = editor.state.doc.nodeAt(after);\n if (nodeAfter) return false;\n editor.commands.exitCode();\n return true;\n },\n };\n },\n\n addNodeView() {\n return ReactNodeViewRenderer(CodeBlockNodeView);\n },\n});\n\nexport default CodeBlockExtension;\n"],"mappings":"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"}
|
|
@@ -30,8 +30,8 @@ var n = e.create({
|
|
|
30
30
|
},
|
|
31
31
|
addCommands() {
|
|
32
32
|
return {
|
|
33
|
-
setComment: (e) => ({ commands: t }) => t.setMark(this.name, { commentId: e }),
|
|
34
|
-
unsetComment: () => ({ commands: e }) => e.unsetMark(this.name)
|
|
33
|
+
setComment: (e) => ({ commands: t, editor: n }) => n.isEditable ? t.setMark(this.name, { commentId: e }) : !1,
|
|
34
|
+
unsetComment: () => ({ commands: e, editor: t }) => t.isEditable ? e.unsetMark(this.name) : !1
|
|
35
35
|
};
|
|
36
36
|
}
|
|
37
37
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommentMark.js","names":[],"sources":["../../../../../src/components/pro/RichTextEditor/extensions/CommentMark.ts"],"sourcesContent":["import { Mark, mergeAttributes } from '@tiptap/react';\n\nexport interface CommentThread {\n id: string;\n resolved: boolean;\n comments: CommentItem[];\n createdAt: number;\n}\n\nexport interface CommentItem {\n id: string;\n author: string;\n text: string;\n createdAt: number;\n}\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n commentMark: {\n setComment: (id: string) => ReturnType;\n unsetComment: () => ReturnType;\n };\n }\n}\n\nexport const CommentMark = Mark.create({\n name: 'comment',\n inclusive: false,\n excludes: '',\n\n addAttributes() {\n return {\n commentId: {\n default: null,\n parseHTML: (el) => el.getAttribute('data-comment-id'),\n renderHTML: (attrs) => {\n if (!attrs.commentId) return {};\n return { 'data-comment-id': attrs.commentId };\n },\n },\n resolved: {\n default: false,\n parseHTML: (el) => el.getAttribute('data-resolved') === 'true',\n renderHTML: (attrs) => {\n if (!attrs.resolved) return {};\n return { 'data-resolved': 'true' };\n },\n },\n };\n },\n\n parseHTML() {\n return [{ tag: 'span[data-comment-id]' }];\n },\n\n renderHTML({ HTMLAttributes }) {\n return ['span', mergeAttributes(HTMLAttributes, {\n class: `rte-comment-mark ${HTMLAttributes['data-resolved'] === 'true' ? 'rte-comment-mark--resolved' : ''}`,\n }), 0];\n },\n\n addCommands() {\n return {\n setComment: (id: string) => ({ commands }) => {\n return commands.setMark(this.name, { commentId: id });\n },\n unsetComment: () => ({ commands }) => {\n return commands.unsetMark(this.name);\n },\n };\n },\n});\n\nexport default CommentMark;\n"],"mappings":";;AAyBA,IAAa,IAAc,EAAK,OAAO;CACrC,MAAM;CACN,WAAW;CACX,UAAU;CAEV,gBAAgB;EACd,OAAO;GACL,WAAW;IACT,SAAS;IACT,YAAY,MAAO,EAAG,aAAa,iBAAiB;IACpD,aAAa,MACN,EAAM,YACJ,EAAE,mBAAmB,EAAM,UAAU,IADf,CAAC;GAGlC;GACA,UAAU;IACR,SAAS;IACT,YAAY,MAAO,EAAG,aAAa,eAAe,MAAM;IACxD,aAAa,MACN,EAAM,WACJ,EAAE,iBAAiB,OAAO,IADL,CAAC;GAGjC;EACF;CACF;CAEA,YAAY;EACV,OAAO,CAAC,EAAE,KAAK,wBAAwB,CAAC;CAC1C;CAEA,WAAW,EAAE,qBAAkB;EAC7B,OAAO;GAAC;GAAQ,EAAgB,GAAgB,EAC9C,OAAO,oBAAoB,EAAe,qBAAqB,SAAS,+BAA+B,KACzG,CAAC;GAAG;EAAC;CACP;CAEA,cAAc;EACZ,OAAO;GACL,aAAa,OAAgB,EAAE,
|
|
1
|
+
{"version":3,"file":"CommentMark.js","names":[],"sources":["../../../../../src/components/pro/RichTextEditor/extensions/CommentMark.ts"],"sourcesContent":["import { Mark, mergeAttributes } from '@tiptap/react';\n\nexport interface CommentThread {\n id: string;\n resolved: boolean;\n comments: CommentItem[];\n createdAt: number;\n}\n\nexport interface CommentItem {\n id: string;\n author: string;\n text: string;\n createdAt: number;\n}\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n commentMark: {\n setComment: (id: string) => ReturnType;\n unsetComment: () => ReturnType;\n };\n }\n}\n\nexport const CommentMark = Mark.create({\n name: 'comment',\n inclusive: false,\n excludes: '',\n\n addAttributes() {\n return {\n commentId: {\n default: null,\n parseHTML: (el) => el.getAttribute('data-comment-id'),\n renderHTML: (attrs) => {\n if (!attrs.commentId) return {};\n return { 'data-comment-id': attrs.commentId };\n },\n },\n resolved: {\n default: false,\n parseHTML: (el) => el.getAttribute('data-resolved') === 'true',\n renderHTML: (attrs) => {\n if (!attrs.resolved) return {};\n return { 'data-resolved': 'true' };\n },\n },\n };\n },\n\n parseHTML() {\n return [{ tag: 'span[data-comment-id]' }];\n },\n\n renderHTML({ HTMLAttributes }) {\n return ['span', mergeAttributes(HTMLAttributes, {\n class: `rte-comment-mark ${HTMLAttributes['data-resolved'] === 'true' ? 'rte-comment-mark--resolved' : ''}`,\n }), 0];\n },\n\n addCommands() {\n return {\n setComment: (id: string) => ({ commands, editor }) => {\n if (!editor.isEditable) return false;\n return commands.setMark(this.name, { commentId: id });\n },\n unsetComment: () => ({ commands, editor }) => {\n if (!editor.isEditable) return false;\n return commands.unsetMark(this.name);\n },\n };\n },\n});\n\nexport default CommentMark;\n"],"mappings":";;AAyBA,IAAa,IAAc,EAAK,OAAO;CACrC,MAAM;CACN,WAAW;CACX,UAAU;CAEV,gBAAgB;EACd,OAAO;GACL,WAAW;IACT,SAAS;IACT,YAAY,MAAO,EAAG,aAAa,iBAAiB;IACpD,aAAa,MACN,EAAM,YACJ,EAAE,mBAAmB,EAAM,UAAU,IADf,CAAC;GAGlC;GACA,UAAU;IACR,SAAS;IACT,YAAY,MAAO,EAAG,aAAa,eAAe,MAAM;IACxD,aAAa,MACN,EAAM,WACJ,EAAE,iBAAiB,OAAO,IADL,CAAC;GAGjC;EACF;CACF;CAEA,YAAY;EACV,OAAO,CAAC,EAAE,KAAK,wBAAwB,CAAC;CAC1C;CAEA,WAAW,EAAE,qBAAkB;EAC7B,OAAO;GAAC;GAAQ,EAAgB,GAAgB,EAC9C,OAAO,oBAAoB,EAAe,qBAAqB,SAAS,+BAA+B,KACzG,CAAC;GAAG;EAAC;CACP;CAEA,cAAc;EACZ,OAAO;GACL,aAAa,OAAgB,EAAE,aAAU,gBAClC,EAAO,aACL,EAAS,QAAQ,KAAK,MAAM,EAAE,WAAW,EAAG,CAAC,IADrB;GAGjC,qBAAqB,EAAE,aAAU,gBAC1B,EAAO,aACL,EAAS,UAAU,KAAK,IAAI,IADJ;EAGnC;CACF;AACF,CAAC"}
|