@haklex/rich-renderer-codeblock 0.0.37 → 0.0.39
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/CodeBlockCard.d.ts +4 -1
- package/dist/CodeBlockCard.d.ts.map +1 -1
- package/dist/CodeBlockEditRenderer.d.ts.map +1 -1
- package/dist/icons.mjs +3 -3
- package/dist/index.mjs +207 -82
- package/dist/{language-AfAZN4lZ.js → language-V8hnDWn4.js} +25 -23
- package/dist/rich-renderer-codeblock.css +1 -1
- package/dist/static.d.ts +2 -0
- package/dist/static.d.ts.map +1 -0
- package/dist/styles.css.d.ts +1 -0
- package/dist/styles.css.d.ts.map +1 -1
- package/package.json +11 -4
package/dist/CodeBlockCard.d.ts
CHANGED
|
@@ -2,8 +2,11 @@ import { ReactNode } from 'react';
|
|
|
2
2
|
interface CodeBlockCardProps {
|
|
3
3
|
code: string;
|
|
4
4
|
language: string;
|
|
5
|
+
collapsible?: boolean;
|
|
6
|
+
editable?: boolean;
|
|
7
|
+
onLanguageChange?: (language: string) => void;
|
|
5
8
|
children: ReactNode;
|
|
6
9
|
}
|
|
7
|
-
export declare function CodeBlockCard({ code, language, children, }: CodeBlockCardProps): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export declare function CodeBlockCard({ code, language, collapsible, editable, onLanguageChange, children, }: CodeBlockCardProps): import("react/jsx-runtime").JSX.Element;
|
|
8
11
|
export {};
|
|
9
12
|
//# sourceMappingURL=CodeBlockCard.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CodeBlockCard.d.ts","sourceRoot":"","sources":["../src/CodeBlockCard.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAiB,SAAS,EAAE,MAAM,OAAO,CAAA;AAerD,UAAU,kBAAkB;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,SAAS,CAAA;CACpB;AAED,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,QAAQ,EACR,QAAQ,GACT,EAAE,kBAAkB,
|
|
1
|
+
{"version":3,"file":"CodeBlockCard.d.ts","sourceRoot":"","sources":["../src/CodeBlockCard.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAiB,SAAS,EAAE,MAAM,OAAO,CAAA;AAerD,UAAU,kBAAkB;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;IAC7C,QAAQ,EAAE,SAAS,CAAA;CACpB;AAED,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,QAAQ,EACR,WAAkB,EAClB,QAAgB,EAChB,gBAAgB,EAChB,QAAQ,GACT,EAAE,kBAAkB,2CAmIpB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CodeBlockEditRenderer.d.ts","sourceRoot":"","sources":["../src/CodeBlockEditRenderer.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"CodeBlockEditRenderer.d.ts","sourceRoot":"","sources":["../src/CodeBlockEditRenderer.tsx"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAA;AAEjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAa1C,eAAO,MAAM,qBAAqB,EAAE,aAAa,CAAC,sBAAsB,CA2QvE,CAAA"}
|
package/dist/icons.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx } from "react/jsx-runtime";
|
|
2
2
|
import { useMemo } from "react";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { o as getMaterialIconSvg } from "./language-V8hnDWn4.js";
|
|
4
|
+
import { p, L, h } from "./language-V8hnDWn4.js";
|
|
5
5
|
const EXT_TO_ICON = {
|
|
6
6
|
ts: "typescript",
|
|
7
7
|
tsx: "react-ts",
|
|
@@ -89,7 +89,7 @@ const FileIcon = ({
|
|
|
89
89
|
};
|
|
90
90
|
export {
|
|
91
91
|
FileIcon,
|
|
92
|
-
|
|
92
|
+
p as LANG_TO_ICON,
|
|
93
93
|
L as LanguageIcon,
|
|
94
94
|
getMaterialIconSvg,
|
|
95
95
|
h as hasLanguageIcon
|
package/dist/index.mjs
CHANGED
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import { history, defaultKeymap, historyKeymap, indentWithTab } from "@codemirror/commands";
|
|
3
|
+
import { Compartment, Prec, EditorState, EditorSelection } from "@codemirror/state";
|
|
4
|
+
import { EditorView, keymap, lineNumbers } from "@codemirror/view";
|
|
5
|
+
import { isOnFirstLine, isOnLastLine, getThemeExtensions, loadLanguageExtension } from "@haklex/cm-editor";
|
|
2
6
|
import { useVariant, useColorScheme } from "@haklex/rich-editor";
|
|
3
7
|
import { useState, useRef, useEffect, useCallback, useMemo } from "react";
|
|
4
8
|
import { Check, Copy, ChevronDown } from "lucide-react";
|
|
5
9
|
import { normalizeLanguage, getLanguageDisplayName, languageToColorMap } from "./constants.mjs";
|
|
6
10
|
import "@iconify/utils";
|
|
7
11
|
import "@iconify-json/material-icon-theme";
|
|
8
|
-
import { c as card, s as semanticClassNames, l as lang, h as hasLanguageIcon, L as LanguageIcon, a as
|
|
12
|
+
import { c as card, s as semanticClassNames, l as lang, h as hasLanguageIcon, L as LanguageIcon, a as langInput, b as copyButton, d as bodyBackground, e as expandWrap, f as expandButton, g as scroll, i as scrollCollapsed, j as lined, k as linedWithNumbers, m as body, n as bodyReadonly } from "./language-V8hnDWn4.js";
|
|
9
13
|
import { getHighlighterWithLang, SHIKI_DUAL_THEMES } from "./shiki.mjs";
|
|
10
14
|
const CopyIcon = /* @__PURE__ */ jsx(Copy, { size: 16 });
|
|
11
15
|
const CheckIcon = /* @__PURE__ */ jsx(Check, { size: 16 });
|
|
@@ -13,6 +17,9 @@ const ExpandIcon = /* @__PURE__ */ jsx(ChevronDown, { size: 14 });
|
|
|
13
17
|
function CodeBlockCard({
|
|
14
18
|
code,
|
|
15
19
|
language,
|
|
20
|
+
collapsible = true,
|
|
21
|
+
editable = false,
|
|
22
|
+
onLanguageChange,
|
|
16
23
|
children
|
|
17
24
|
}) {
|
|
18
25
|
const normalizedLanguage = normalizeLanguage(language);
|
|
@@ -22,6 +29,10 @@ function CodeBlockCard({
|
|
|
22
29
|
const [isOverflow, setIsOverflow] = useState(false);
|
|
23
30
|
const scrollRef = useRef(null);
|
|
24
31
|
useEffect(() => {
|
|
32
|
+
if (!collapsible) {
|
|
33
|
+
setIsOverflow(false);
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
25
36
|
const el = scrollRef.current;
|
|
26
37
|
if (!el) return;
|
|
27
38
|
const check = () => {
|
|
@@ -30,7 +41,7 @@ function CodeBlockCard({
|
|
|
30
41
|
};
|
|
31
42
|
const raf = requestAnimationFrame(check);
|
|
32
43
|
return () => cancelAnimationFrame(raf);
|
|
33
|
-
}, [code]);
|
|
44
|
+
}, [code, collapsible]);
|
|
34
45
|
useEffect(() => {
|
|
35
46
|
return () => clearTimeout(copyTimerRef.current);
|
|
36
47
|
}, []);
|
|
@@ -51,8 +62,8 @@ function CodeBlockCard({
|
|
|
51
62
|
const scrollClassName = [
|
|
52
63
|
scroll,
|
|
53
64
|
semanticClassNames.scroll,
|
|
54
|
-
isCollapsed && isOverflow && scrollCollapsed,
|
|
55
|
-
isCollapsed && isOverflow && semanticClassNames.scrollCollapsed
|
|
65
|
+
collapsible && isCollapsed && isOverflow && scrollCollapsed,
|
|
66
|
+
collapsible && isCollapsed && isOverflow && semanticClassNames.scrollCollapsed
|
|
56
67
|
].filter(Boolean).join(" ");
|
|
57
68
|
return /* @__PURE__ */ jsxs(
|
|
58
69
|
"div",
|
|
@@ -60,7 +71,24 @@ function CodeBlockCard({
|
|
|
60
71
|
className: `${card} ${semanticClassNames.card}`,
|
|
61
72
|
style: cardStyle,
|
|
62
73
|
children: [
|
|
63
|
-
|
|
74
|
+
editable ? /* @__PURE__ */ jsxs("div", { className: `${lang} ${semanticClassNames.lang}`, children: [
|
|
75
|
+
hasLanguageIcon(normalizedLanguage) && /* @__PURE__ */ jsx(LanguageIcon, { language: normalizedLanguage, size: 14 }),
|
|
76
|
+
/* @__PURE__ */ jsx(
|
|
77
|
+
"input",
|
|
78
|
+
{
|
|
79
|
+
className: langInput,
|
|
80
|
+
value: language,
|
|
81
|
+
placeholder: "language",
|
|
82
|
+
onChange: (e) => onLanguageChange?.(e.target.value),
|
|
83
|
+
onKeyDown: (e) => {
|
|
84
|
+
e.stopPropagation();
|
|
85
|
+
if (e.key === "Escape" || e.key === "Enter") {
|
|
86
|
+
e.currentTarget.blur();
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
)
|
|
91
|
+
] }) : normalizedLanguage !== "text" && /* @__PURE__ */ jsx(
|
|
64
92
|
"div",
|
|
65
93
|
{
|
|
66
94
|
className: `${lang} ${semanticClassNames.lang}`,
|
|
@@ -84,7 +112,7 @@ function CodeBlockCard({
|
|
|
84
112
|
className: `${bodyBackground} ${semanticClassNames.bodyBackground}`,
|
|
85
113
|
children: [
|
|
86
114
|
/* @__PURE__ */ jsx("div", { ref: scrollRef, className: scrollClassName, children }),
|
|
87
|
-
isOverflow && isCollapsed && /* @__PURE__ */ jsx(
|
|
115
|
+
collapsible && isOverflow && isCollapsed && /* @__PURE__ */ jsx(
|
|
88
116
|
"div",
|
|
89
117
|
{
|
|
90
118
|
className: `${expandWrap} ${semanticClassNames.expandWrap}`,
|
|
@@ -109,103 +137,190 @@ function CodeBlockCard({
|
|
|
109
137
|
}
|
|
110
138
|
);
|
|
111
139
|
}
|
|
140
|
+
function stopHandledEvent(event) {
|
|
141
|
+
event.preventDefault();
|
|
142
|
+
event.stopPropagation();
|
|
143
|
+
event.stopImmediatePropagation();
|
|
144
|
+
}
|
|
112
145
|
const CodeBlockEditRenderer = ({
|
|
113
146
|
code,
|
|
114
147
|
language,
|
|
115
148
|
showLineNumbers: showLineNumbersProp,
|
|
116
149
|
editable = false,
|
|
117
|
-
|
|
150
|
+
selected = false,
|
|
151
|
+
cursorPlacement = "start",
|
|
152
|
+
onCodeChange,
|
|
153
|
+
onLanguageChange,
|
|
154
|
+
onDelete,
|
|
155
|
+
onExitBlock
|
|
118
156
|
}) => {
|
|
119
157
|
const variant = useVariant();
|
|
120
158
|
const colorScheme = useColorScheme();
|
|
121
159
|
const showLineNumbers = showLineNumbersProp ?? variant !== "comment";
|
|
122
160
|
const normalizedLanguage = normalizeLanguage(language);
|
|
123
|
-
const [
|
|
161
|
+
const [mounted, setMounted] = useState(false);
|
|
124
162
|
const containerRef = useRef(null);
|
|
125
163
|
const editorRef = useRef(null);
|
|
164
|
+
const suppressChangeRef = useRef(false);
|
|
165
|
+
const editableRef = useRef(editable);
|
|
166
|
+
editableRef.current = editable;
|
|
126
167
|
const onCodeChangeRef = useRef(onCodeChange);
|
|
127
168
|
onCodeChangeRef.current = onCodeChange;
|
|
128
|
-
const
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
169
|
+
const onDeleteRef = useRef(onDelete);
|
|
170
|
+
onDeleteRef.current = onDelete;
|
|
171
|
+
const onExitBlockRef = useRef(onExitBlock);
|
|
172
|
+
onExitBlockRef.current = onExitBlock;
|
|
173
|
+
const languageCompartmentRef = useRef(null);
|
|
174
|
+
const editableCompartmentRef = useRef(null);
|
|
175
|
+
const lineNumbersCompartmentRef = useRef(null);
|
|
176
|
+
const themeCompartmentRef = useRef(null);
|
|
177
|
+
if (!languageCompartmentRef.current)
|
|
178
|
+
languageCompartmentRef.current = new Compartment();
|
|
179
|
+
if (!editableCompartmentRef.current)
|
|
180
|
+
editableCompartmentRef.current = new Compartment();
|
|
181
|
+
if (!lineNumbersCompartmentRef.current)
|
|
182
|
+
lineNumbersCompartmentRef.current = new Compartment();
|
|
183
|
+
if (!themeCompartmentRef.current)
|
|
184
|
+
themeCompartmentRef.current = new Compartment();
|
|
185
|
+
const keyboardBoundaryHandler = useMemo(
|
|
186
|
+
() => Prec.high(
|
|
187
|
+
EditorView.domEventHandlers({
|
|
188
|
+
keydown: (event, view) => {
|
|
189
|
+
if (!editableRef.current) return false;
|
|
190
|
+
event.stopPropagation();
|
|
191
|
+
if ((event.metaKey || event.ctrlKey) && event.key === "Enter") {
|
|
192
|
+
stopHandledEvent(event);
|
|
193
|
+
onExitBlockRef.current?.("after");
|
|
194
|
+
return true;
|
|
195
|
+
}
|
|
196
|
+
if (event.key === "Backspace" && view.state.doc.length === 0) {
|
|
197
|
+
stopHandledEvent(event);
|
|
198
|
+
onDeleteRef.current?.();
|
|
199
|
+
return true;
|
|
200
|
+
}
|
|
201
|
+
if (event.key === "ArrowUp" && isOnFirstLine(view)) {
|
|
202
|
+
stopHandledEvent(event);
|
|
203
|
+
onExitBlockRef.current?.("before");
|
|
204
|
+
return true;
|
|
205
|
+
}
|
|
206
|
+
if (event.key === "ArrowDown" && isOnLastLine(view)) {
|
|
207
|
+
stopHandledEvent(event);
|
|
208
|
+
onExitBlockRef.current?.("after");
|
|
209
|
+
return true;
|
|
210
|
+
}
|
|
211
|
+
return false;
|
|
212
|
+
}
|
|
213
|
+
})
|
|
214
|
+
),
|
|
215
|
+
[]
|
|
216
|
+
);
|
|
140
217
|
useEffect(() => {
|
|
141
218
|
const container = containerRef.current;
|
|
142
219
|
if (!container) return;
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
inputCleanup = () => editor.input.removeEventListener("input", handleInput);
|
|
170
|
-
editorRef.current = editor;
|
|
171
|
-
setLoaded(true);
|
|
172
|
-
})();
|
|
220
|
+
const editor = new EditorView({
|
|
221
|
+
parent: container,
|
|
222
|
+
state: EditorState.create({
|
|
223
|
+
doc: code,
|
|
224
|
+
extensions: [
|
|
225
|
+
history(),
|
|
226
|
+
keymap.of([...defaultKeymap, ...historyKeymap, indentWithTab]),
|
|
227
|
+
EditorView.updateListener.of((update) => {
|
|
228
|
+
if (!update.docChanged || suppressChangeRef.current) return;
|
|
229
|
+
onCodeChangeRef.current?.(update.state.doc.toString());
|
|
230
|
+
}),
|
|
231
|
+
keyboardBoundaryHandler,
|
|
232
|
+
editableCompartmentRef.current.of([
|
|
233
|
+
EditorView.editable.of(editable),
|
|
234
|
+
EditorState.readOnly.of(!editable)
|
|
235
|
+
]),
|
|
236
|
+
lineNumbersCompartmentRef.current.of(
|
|
237
|
+
showLineNumbers ? lineNumbers() : []
|
|
238
|
+
),
|
|
239
|
+
themeCompartmentRef.current.of(getThemeExtensions(colorScheme)),
|
|
240
|
+
languageCompartmentRef.current.of([])
|
|
241
|
+
]
|
|
242
|
+
})
|
|
243
|
+
});
|
|
244
|
+
editorRef.current = editor;
|
|
245
|
+
setMounted(true);
|
|
173
246
|
return () => {
|
|
174
|
-
|
|
175
|
-
inputCleanup?.();
|
|
176
|
-
editorRef.current?.dispose();
|
|
247
|
+
editor.destroy();
|
|
177
248
|
editorRef.current = null;
|
|
178
|
-
|
|
249
|
+
setMounted(false);
|
|
179
250
|
};
|
|
251
|
+
}, []);
|
|
252
|
+
useEffect(() => {
|
|
253
|
+
const editor = editorRef.current;
|
|
254
|
+
if (!editor) return;
|
|
255
|
+
editor.dispatch({
|
|
256
|
+
effects: editableCompartmentRef.current.reconfigure([
|
|
257
|
+
EditorView.editable.of(editable),
|
|
258
|
+
EditorState.readOnly.of(!editable)
|
|
259
|
+
])
|
|
260
|
+
});
|
|
261
|
+
}, [editable]);
|
|
262
|
+
useEffect(() => {
|
|
263
|
+
const editor = editorRef.current;
|
|
264
|
+
if (!editor) return;
|
|
265
|
+
editor.dispatch({
|
|
266
|
+
effects: lineNumbersCompartmentRef.current.reconfigure(
|
|
267
|
+
showLineNumbers ? lineNumbers() : []
|
|
268
|
+
)
|
|
269
|
+
});
|
|
270
|
+
}, [showLineNumbers]);
|
|
271
|
+
useEffect(() => {
|
|
272
|
+
const editor = editorRef.current;
|
|
273
|
+
if (!editor) return;
|
|
274
|
+
editor.dispatch({
|
|
275
|
+
effects: themeCompartmentRef.current.reconfigure(
|
|
276
|
+
getThemeExtensions(colorScheme)
|
|
277
|
+
)
|
|
278
|
+
});
|
|
180
279
|
}, [colorScheme]);
|
|
280
|
+
useEffect(() => {
|
|
281
|
+
const editor = editorRef.current;
|
|
282
|
+
if (!editor) return;
|
|
283
|
+
const current = editor.state.doc.toString();
|
|
284
|
+
if (current === code) return;
|
|
285
|
+
suppressChangeRef.current = true;
|
|
286
|
+
editor.dispatch({
|
|
287
|
+
changes: {
|
|
288
|
+
from: 0,
|
|
289
|
+
to: current.length,
|
|
290
|
+
insert: code
|
|
291
|
+
}
|
|
292
|
+
});
|
|
293
|
+
suppressChangeRef.current = false;
|
|
294
|
+
}, [code]);
|
|
181
295
|
useEffect(() => {
|
|
182
296
|
const editor = editorRef.current;
|
|
183
297
|
if (!editor) return;
|
|
184
298
|
let cancelled = false;
|
|
185
299
|
(async () => {
|
|
186
|
-
const
|
|
187
|
-
const loaded2 = highlighter.getLoadedLanguages();
|
|
188
|
-
if (normalizedLanguage !== "text" && normalizedLanguage !== "plaintext" && !loaded2.includes(normalizedLanguage)) {
|
|
189
|
-
try {
|
|
190
|
-
await highlighter.loadLanguage(normalizedLanguage);
|
|
191
|
-
} catch {
|
|
192
|
-
}
|
|
193
|
-
}
|
|
300
|
+
const extension = await loadLanguageExtension(normalizedLanguage);
|
|
194
301
|
if (cancelled) return;
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
editor.input.value = code;
|
|
198
|
-
}
|
|
199
|
-
editor.updateOptions({
|
|
200
|
-
language: resolvedLang,
|
|
201
|
-
lineNumbers: showLineNumbers ? "on" : "off",
|
|
202
|
-
readOnly: !editable
|
|
302
|
+
editor.dispatch({
|
|
303
|
+
effects: languageCompartmentRef.current.reconfigure(extension)
|
|
203
304
|
});
|
|
204
305
|
})();
|
|
205
306
|
return () => {
|
|
206
307
|
cancelled = true;
|
|
207
308
|
};
|
|
208
|
-
}, [
|
|
309
|
+
}, [normalizedLanguage]);
|
|
310
|
+
useEffect(() => {
|
|
311
|
+
if (!editable || !selected) return;
|
|
312
|
+
const editor = editorRef.current;
|
|
313
|
+
if (!editor) return;
|
|
314
|
+
const raf = requestAnimationFrame(() => {
|
|
315
|
+
const nextCursor = cursorPlacement === "end" ? editor.state.doc.length : 0;
|
|
316
|
+
editor.focus();
|
|
317
|
+
editor.dispatch({
|
|
318
|
+
selection: EditorSelection.cursor(nextCursor),
|
|
319
|
+
scrollIntoView: true
|
|
320
|
+
});
|
|
321
|
+
});
|
|
322
|
+
return () => cancelAnimationFrame(raf);
|
|
323
|
+
}, [cursorPlacement, editable, mounted, selected]);
|
|
209
324
|
const fallbackLines = useMemo(() => code.split("\n"), [code]);
|
|
210
325
|
const fallbackClassName = [
|
|
211
326
|
showLineNumbers && lined,
|
|
@@ -219,17 +334,27 @@ const CodeBlockEditRenderer = ({
|
|
|
219
334
|
!editable && bodyReadonly,
|
|
220
335
|
!editable && semanticClassNames.bodyReadonly
|
|
221
336
|
].filter(Boolean).join(" ");
|
|
222
|
-
return /* @__PURE__ */ jsxs(
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
337
|
+
return /* @__PURE__ */ jsxs(
|
|
338
|
+
CodeBlockCard,
|
|
339
|
+
{
|
|
340
|
+
code,
|
|
341
|
+
language,
|
|
342
|
+
collapsible: !editable,
|
|
343
|
+
editable,
|
|
344
|
+
onLanguageChange,
|
|
345
|
+
children: [
|
|
346
|
+
!mounted && /* @__PURE__ */ jsx("pre", { className: fallbackClassName, children: /* @__PURE__ */ jsx("code", { children: fallbackLines.map((line, i) => /* @__PURE__ */ jsx("span", { className: "line", children: line }, `${line}-${i}`)) }) }),
|
|
347
|
+
/* @__PURE__ */ jsx(
|
|
348
|
+
"div",
|
|
349
|
+
{
|
|
350
|
+
ref: containerRef,
|
|
351
|
+
className: bodyClassName,
|
|
352
|
+
style: !mounted ? { height: 0, overflow: "hidden", visibility: "hidden" } : void 0
|
|
353
|
+
}
|
|
354
|
+
)
|
|
355
|
+
]
|
|
356
|
+
}
|
|
357
|
+
);
|
|
233
358
|
};
|
|
234
359
|
const CodeBlockRenderer = ({
|
|
235
360
|
code,
|
|
@@ -10,18 +10,19 @@ function getMaterialIconSvg(iconName) {
|
|
|
10
10
|
}
|
|
11
11
|
var semanticClassNames = { card: "rr-code-card", lang: "rr-code-lang", langIcon: "rr-code-lang-icon", copyButton: "rr-code-copy", bodyBackground: "rr-code-bg", scroll: "rr-code-scroll", scrollCollapsed: "rr-code-scroll-collapsed", body: "rr-code-body", bodyReadonly: "rr-code-readonly", expandWrap: "rr-code-expand-wrap", expandButton: "rr-code-expand", lined: "rr-code-lined", linedWithNumbers: "rr-code-lined-ln" };
|
|
12
12
|
var card = "_1pn9r4q0";
|
|
13
|
-
var
|
|
14
|
-
var
|
|
15
|
-
var
|
|
16
|
-
var
|
|
17
|
-
var
|
|
18
|
-
var
|
|
19
|
-
var
|
|
20
|
-
var
|
|
21
|
-
var
|
|
22
|
-
var
|
|
23
|
-
var
|
|
24
|
-
var
|
|
13
|
+
var langInput = "_1pn9r4q1";
|
|
14
|
+
var lang = "_1pn9r4q2";
|
|
15
|
+
var langIcon = "_1pn9r4q3";
|
|
16
|
+
var copyButton = "_1pn9r4q4";
|
|
17
|
+
var bodyBackground = "_1pn9r4q5";
|
|
18
|
+
var scroll = "_1pn9r4q6";
|
|
19
|
+
var scrollCollapsed = "_1pn9r4q7";
|
|
20
|
+
var body = "_1pn9r4q8";
|
|
21
|
+
var bodyReadonly = "_1pn9r4q9";
|
|
22
|
+
var expandWrap = "_1pn9r4qa";
|
|
23
|
+
var expandButton = "_1pn9r4qb";
|
|
24
|
+
var lined = "_1pn9r4qc";
|
|
25
|
+
var linedWithNumbers = "_1pn9r4qd";
|
|
25
26
|
const LANG_TO_ICON = {
|
|
26
27
|
javascript: "javascript",
|
|
27
28
|
js: "javascript",
|
|
@@ -112,20 +113,21 @@ const LanguageIcon = ({
|
|
|
112
113
|
};
|
|
113
114
|
export {
|
|
114
115
|
LanguageIcon as L,
|
|
115
|
-
|
|
116
|
-
|
|
116
|
+
langInput as a,
|
|
117
|
+
copyButton as b,
|
|
117
118
|
card as c,
|
|
118
|
-
|
|
119
|
+
bodyBackground as d,
|
|
119
120
|
expandWrap as e,
|
|
120
|
-
|
|
121
|
-
|
|
121
|
+
expandButton as f,
|
|
122
|
+
scroll as g,
|
|
122
123
|
hasLanguageIcon as h,
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
124
|
+
scrollCollapsed as i,
|
|
125
|
+
lined as j,
|
|
126
|
+
linedWithNumbers as k,
|
|
126
127
|
lang as l,
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
128
|
+
body as m,
|
|
129
|
+
bodyReadonly as n,
|
|
130
|
+
getMaterialIconSvg as o,
|
|
131
|
+
LANG_TO_ICON as p,
|
|
130
132
|
semanticClassNames as s
|
|
131
133
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
:root{--rc-text: #000;--rc-text-secondary: #27272a;--rc-text-tertiary: #71717a;--rc-text-quaternary: #a1a1aa;--rc-bg: #ffffff;--rc-bg-secondary: #fafafa;--rc-bg-tertiary: #f4f4f5;--rc-border: #f4f4f5;--rc-accent: #2563eb;--rc-accent-light: #2563eb20;--rc-link: #2563eb;--rc-code-text: #3f3f46;--rc-code-bg: #f4f4f5;--rc-hr-border: #e4e4e7;--rc-quote-border: #2563eb;--rc-quote-bg: #eff6ff;--rc-alert-info: #006bb7;--rc-alert-warning: #cc5500;--rc-alert-tip: #11cc00;--rc-alert-caution: #cc0011;--rc-alert-important: #5500cc;--rc-max-width: 700px;--rc-space-xs: 4px;--rc-space-sm: 8px;--rc-space-md: 16px;--rc-space-lg: 24px;--rc-space-xl: 32px;--rc-font-family-sans: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif: "Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-mono: "SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs: .625em;--rc-font-size-xs: .75em;--rc-font-size-sm: .8125em;--rc-font-size-md: .875em;--rc-font-size-lg: 1.25em;--rc-font-size-base: 16px;--rc-font-size-small: 14px;--rc-line-height: 1.7;--rc-line-height-tight: 1.4;--rc-font-family: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-radius-sm: 4px;--rc-radius-md: 8px;--rc-radius-lg: 12px}:root.dark{--rc-text: #fafafa;--rc-text-secondary: #a1a1aa;--rc-text-tertiary: #71717a;--rc-text-quaternary: #52525b;--rc-bg: #09090b;--rc-bg-secondary: #18181b;--rc-bg-tertiary: #27272a;--rc-border: #27272a;--rc-accent: #60a5fa;--rc-accent-light: #60a5fa20;--rc-link: #60a5fa;--rc-code-text: #e4e4e7;--rc-code-bg: #27272a;--rc-hr-border: #27272a;--rc-quote-border: #60a5fa;--rc-quote-bg: #1e3a5f;--rc-alert-info: #7db9e5;--rc-alert-warning: #da864a;--rc-alert-tip: #54da48;--rc-alert-caution: #e16973;--rc-alert-important: #9966e0;--rc-max-width: 700px;--rc-space-xs: 4px;--rc-space-sm: 8px;--rc-space-md: 16px;--rc-space-lg: 24px;--rc-space-xl: 32px;--rc-font-family-sans: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif: "Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-mono: "SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs: .625em;--rc-font-size-xs: .75em;--rc-font-size-sm: .8125em;--rc-font-size-md: .875em;--rc-font-size-lg: 1.25em;--rc-font-size-base: 16px;--rc-font-size-small: 14px;--rc-line-height: 1.7;--rc-line-height-tight: 1.4;--rc-font-family: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-radius-sm: 4px;--rc-radius-md: 8px;--rc-radius-lg: 12px}.axx50{--rc-text: #000;--rc-text-secondary: #27272a;--rc-text-tertiary: #71717a;--rc-text-quaternary: #a1a1aa;--rc-bg: #ffffff;--rc-bg-secondary: #fafafa;--rc-bg-tertiary: #f4f4f5;--rc-border: #f4f4f5;--rc-accent: #2563eb;--rc-accent-light: #2563eb20;--rc-link: #2563eb;--rc-code-text: #3f3f46;--rc-code-bg: #f4f4f5;--rc-hr-border: #e4e4e7;--rc-quote-border: #2563eb;--rc-quote-bg: #eff6ff;--rc-alert-info: #006bb7;--rc-alert-warning: #cc5500;--rc-alert-tip: #11cc00;--rc-alert-caution: #cc0011;--rc-alert-important: #5500cc;--rc-max-width: 700px;--rc-space-xs: 4px;--rc-space-sm: 8px;--rc-space-md: 16px;--rc-space-lg: 24px;--rc-space-xl: 32px;--rc-font-family-sans: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif: "Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-mono: "SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs: .625em;--rc-font-size-xs: .75em;--rc-font-size-sm: .8125em;--rc-font-size-md: .875em;--rc-font-size-lg: 1.25em;--rc-font-size-base: 16px;--rc-font-size-small: 14px;--rc-line-height: 1.7;--rc-line-height-tight: 1.4;--rc-font-family: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-radius-sm: 4px;--rc-radius-md: 8px;--rc-radius-lg: 12px}.axx51{--rc-text: #000;--rc-text-secondary: #27272a;--rc-text-tertiary: #71717a;--rc-text-quaternary: #a1a1aa;--rc-bg: #ffffff;--rc-bg-secondary: #fafafa;--rc-bg-tertiary: #f4f4f5;--rc-border: #f4f4f5;--rc-accent: #2563eb;--rc-accent-light: #2563eb20;--rc-link: #2563eb;--rc-code-text: #3f3f46;--rc-code-bg: #f4f4f5;--rc-hr-border: #e4e4e7;--rc-quote-border: #2563eb;--rc-quote-bg: #eff6ff;--rc-alert-info: #006bb7;--rc-alert-warning: #cc5500;--rc-alert-tip: #11cc00;--rc-alert-caution: #cc0011;--rc-alert-important: #5500cc;--rc-max-width: 700px;--rc-space-xs: 4px;--rc-space-sm: 8px;--rc-space-md: 16px;--rc-space-lg: 24px;--rc-space-xl: 32px;--rc-font-family-sans: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif: "Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-mono: "SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs: .625em;--rc-font-size-xs: .75em;--rc-font-size-sm: .8125em;--rc-font-size-md: .875em;--rc-font-size-lg: 1.25em;--rc-font-size-base: 16px;--rc-font-size-small: 14px;--rc-line-height: 1.8;--rc-line-height-tight: 1.4;--rc-font-family: "Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-radius-sm: 4px;--rc-radius-md: 8px;--rc-radius-lg: 12px}.axx52{--rc-text: #000;--rc-text-secondary: #27272a;--rc-text-tertiary: #71717a;--rc-text-quaternary: #a1a1aa;--rc-bg: #ffffff;--rc-bg-secondary: #fafafa;--rc-bg-tertiary: #f4f4f5;--rc-border: #f4f4f5;--rc-accent: #2563eb;--rc-accent-light: #2563eb20;--rc-link: #2563eb;--rc-code-text: #3f3f46;--rc-code-bg: #f4f4f5;--rc-hr-border: #e4e4e7;--rc-quote-border: #a1a1aa;--rc-quote-bg: #fafafa;--rc-alert-info: #006bb7;--rc-alert-warning: #cc5500;--rc-alert-tip: #11cc00;--rc-alert-caution: #cc0011;--rc-alert-important: #5500cc;--rc-max-width: none;--rc-space-xs: 2px;--rc-space-sm: 4px;--rc-space-md: 10px;--rc-space-lg: 16px;--rc-space-xl: 20px;--rc-font-family-sans: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif: "Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-mono: "SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs: .625em;--rc-font-size-xs: .75em;--rc-font-size-sm: .8125em;--rc-font-size-md: .875em;--rc-font-size-lg: 1.25em;--rc-font-size-base: 14px;--rc-font-size-small: 12px;--rc-line-height: 1.5;--rc-line-height-tight: 1.3;--rc-font-family: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-radius-sm: 3px;--rc-radius-md: 6px;--rc-radius-lg: 8px}.dark .axx50,[data-theme=dark] .axx50,.dark.axx50,[data-theme=dark].axx50,.dark .axx51,[data-theme=dark] .axx51,.dark.axx51,[data-theme=dark].axx51,.dark .axx52,[data-theme=dark] .axx52,.dark.axx52,[data-theme=dark].axx52{--rc-text: #fafafa;--rc-text-secondary: #a1a1aa;--rc-text-tertiary: #71717a;--rc-text-quaternary: #52525b;--rc-bg: #09090b;--rc-bg-secondary: #18181b;--rc-bg-tertiary: #27272a;--rc-border: #27272a;--rc-accent: #60a5fa;--rc-accent-light: #60a5fa20;--rc-link: #60a5fa;--rc-code-text: #e4e4e7;--rc-code-bg: #27272a;--rc-hr-border: #27272a;--rc-quote-border: #60a5fa;--rc-quote-bg: #1e3a5f;--rc-alert-info: #7db9e5;--rc-alert-warning: #da864a;--rc-alert-tip: #54da48;--rc-alert-caution: #e16973;--rc-alert-important: #9966e0}._1pn9r4q0{--rr-code-accent: #737373;position:relative;margin:1.5rem 0;border-radius:.5rem;overflow:hidden;font-size:var(--rc-font-size-md);font-family:var(--rc-font-mono)}._1pn9r4q1{position:absolute;bottom:.75rem;right:.75rem;z-index:1;display:flex;align-items:center;gap:.375rem;font-size:var(--rc-font-size-md);opacity:.6;pointer-events:none}._1pn9r4q2{display:inline-flex;flex-shrink:0}._1pn9r4q2 svg{width:100%;height:100%}._1pn9r4q3{appearance:none;position:absolute;right:.5rem;top:.5rem;z-index:3;display:flex;align-items:center;justify-content:center;padding:.375rem;border-radius:.375rem;border:1px solid color-mix(in srgb,var(--rr-code-accent) 5%,transparent);background:color-mix(in srgb,var(--rr-code-accent) 80%,transparent);color:#fff;cursor:pointer;opacity:0;transition:opacity .2s ease;backdrop-filter:blur(8px)}._1pn9r4q0:hover ._1pn9r4q3{opacity:1}._1pn9r4q4{position:relative;background:color-mix(in srgb,var(--rr-code-accent) 5%,transparent);padding:1rem 0}._1pn9r4q5{position:relative;width:100%;overflow:auto}._1pn9r4q6{max-height:50vh;overflow:hidden}._1pn9r4q7{position:relative;overflow:auto;background-color:transparent!important}._1pn9r4q7>.shikicode.output{position:static!important;inset:auto!important}._1pn9r4q8>textarea.shikicode{display:none}._1pn9r4q9{position:absolute;bottom:0;left:0;right:0;display:flex;justify-content:center;padding:.5rem 0 .75rem;background:linear-gradient(to bottom,transparent 0%,var(--bg, var(--rc-bg-secondary)) 80%);pointer-events:none}._1pn9r4qa{appearance:none;border:none;background:none;cursor:pointer;display:flex;align-items:center;gap:.5rem;font-size:var(--rc-font-size-xs);color:inherit;opacity:.7;pointer-events:auto}._1pn9r4qa:hover{opacity:1}._1pn9r4q0 .shikicode.input,._1pn9r4q0 .shikicode.output,._1pn9r4q0 .shikicode.output code,._1pn9r4q0 .shikicode.output .line,._1pn9r4q0 .shikicode.output .line span{font-variant-ligatures:none;font-kerning:none}._1pn9r4q0 .shikicode.input,._1pn9r4q0 .shikicode.output,._1pn9r4q7 pre,._1pn9r4q7 code,._1pn9r4q7 .line,._1pn9r4q7 .line span{font-family:var(--rc-font-mono)!important}._1pn9r4q0 pre{margin:0!important;padding:0!important;border-radius:0;font-size:1em}._1pn9r4q0 pre code{display:flex;flex-direction:column;font-family:var(--rc-font-mono)!important}._1pn9r4q0 .shiki,._1pn9r4q0 code,._1pn9r4q0 pre{background:transparent!important}[data-theme=dark] ._1pn9r4q0 .shiki-themes,[data-theme=dark] ._1pn9r4q0 .shiki-themes span{color:var(--shiki-dark)!important;font-style:var(--shiki-dark-font-style)!important;font-weight:var(--shiki-dark-font-weight)!important;text-decoration:var(--shiki-dark-text-decoration)!important}._1pn9r4q7:has(.shikicode.input.line-numbers) .shikicode.output .line:before{background-color:transparent!important;color:color-mix(in srgb,var(--rc-text-secondary) 40%,transparent)!important;width:5em;padding-right:2em}._1pn9r4q7:not(:has(.shikicode.input.line-numbers)) .shikicode.output .line:before{display:none}._1pn9r4q0 .line{display:block;padding:0 1.25rem}._1pn9r4q0 .shikicode.input.line-numbers{padding-left:calc(5em + 1.25rem)}._1pn9r4q0 .shikicode.input:not(.line-numbers){padding-left:1.25rem}._1pn9r4q0 .line>span:last-child{margin-right:1.25rem}._1pn9r4q0 .line:after{content:" "}._1pn9r4q0 .highlighted,._1pn9r4q0 .diff{position:relative;overflow-wrap:break-word}._1pn9r4q0 .highlighted:before,._1pn9r4q0 .diff:before{content:"";position:absolute;left:0;top:0;height:100%;width:2px}._1pn9r4q0 .highlighted{background:color-mix(in srgb,var(--rr-code-accent) 20%,transparent)}._1pn9r4q0 .highlighted:before{background:var(--rr-code-accent)}._1pn9r4q0 .diff.add{background:#22c55e26}._1pn9r4q0 .diff.add:before{background:#22c55e}._1pn9r4q0 .diff.add:after{content:" +";position:absolute;left:0;color:#22c55e}._1pn9r4q0 .diff.remove{background:#ef444426}._1pn9r4q0 .diff.remove:before{background:#ef4444}._1pn9r4q0 .diff.remove:after{content:" -";position:absolute;left:0;color:#ef4444}._1pn9r4qb{counter-reset:shiki-line 0}._1pn9r4qb .line{counter-increment:shiki-line 1}._1pn9r4qb .line:before{content:counter(shiki-line);color:transparent;text-align:right;box-sizing:border-box;width:2em;display:inline-block;position:sticky;left:0}._1pn9r4qc .line:before{color:inherit;opacity:.4;width:5em;padding-right:2em}._1pn9r4q5 pre::-webkit-scrollbar-track{margin-left:1rem;margin-right:var(--sr-margin, 0)}._1pn9r4q5 pre::-webkit-scrollbar{background-color:transparent!important}._1pn9r4qd{font-family:var(--rc-font-mono);font-size:var(--rc-font-size-md);background-color:var(--rc-code-bg);border-radius:var(--rc-radius-md);overflow:hidden;margin:var(--rc-space-md) 0;border:1px solid var(--rc-border)}._1pn9r4qe{display:flex;align-items:center;justify-content:space-between;padding:var(--rc-space-sm) var(--rc-space-md);border-bottom:1px solid var(--rc-border);font-size:var(--rc-font-size-md);color:var(--rc-text-secondary);user-select:none}._1pn9r4qf{font-family:var(--rc-font-mono);font-size:.85em;text-transform:uppercase;letter-spacing:.05em}._1pn9r4qg{appearance:none;border:none;background:none;color:var(--rc-text-secondary);cursor:pointer;padding:var(--rc-space-xs) var(--rc-space-sm);border-radius:var(--rc-radius-sm);font-family:var(--rc-font-family);font-size:var(--rc-font-size-md);line-height:1;transition:color .15s ease,background-color .15s ease}.rich-code-block{font-family:var(--rc-font-mono);font-size:var(--rc-font-size-md);background-color:var(--rc-code-bg);border-radius:var(--rc-radius-md);overflow:hidden;margin:var(--rc-space-md) 0;border:1px solid var(--rc-border)}.rich-code-block pre{margin:0;padding:var(--rc-space-md);overflow-x:auto}.rich-code-block code{font-family:inherit;font-size:inherit;background:none;border:none;padding:0;color:inherit}.rich-code-block-header{display:flex;align-items:center;justify-content:space-between;padding:var(--rc-space-sm) var(--rc-space-md);border-bottom:1px solid var(--rc-border);font-size:var(--rc-font-size-md);color:var(--rc-text-secondary);user-select:none}.rich-code-block-lang{font-family:var(--rc-font-mono);font-size:.85em;text-transform:uppercase;letter-spacing:.05em}.rich-code-block-copy{appearance:none;border:none;background:none;color:var(--rc-text-secondary);cursor:pointer;padding:var(--rc-space-xs) var(--rc-space-sm);border-radius:var(--rc-radius-sm);font-family:var(--rc-font-family);font-size:var(--rc-font-size-md);line-height:1;transition:color .15s ease,background-color .15s ease}.rich-code-block-copy:hover{color:var(--rc-text);background-color:var(--rc-bg-secondary)}.rich-code-block-numbered pre{counter-reset:line}.rich-code-block-numbered .line{counter-increment:line}.rich-code-block-numbered .line:before{content:counter(line);display:inline-block;width:2.5em;margin-right:var(--rc-space-md);text-align:right;color:color-mix(in srgb,var(--rc-text-secondary) 40%,transparent)!important;opacity:.4;user-select:none;font-size:var(--rc-font-size-md)}
|
|
1
|
+
:root{--rc-text: #000;--rc-text-secondary: #27272a;--rc-text-tertiary: #71717a;--rc-text-quaternary: #a1a1aa;--rc-bg: #ffffff;--rc-bg-secondary: #fafafa;--rc-bg-tertiary: #f4f4f5;--rc-border: #f4f4f5;--rc-accent: #2563eb;--rc-accent-light: #2563eb20;--rc-link: #2563eb;--rc-code-text: #3f3f46;--rc-code-bg: #f4f4f5;--rc-hr-border: #e4e4e7;--rc-quote-border: #2563eb;--rc-quote-bg: #eff6ff;--rc-alert-info: #006bb7;--rc-alert-warning: #cc5500;--rc-alert-tip: #11cc00;--rc-alert-caution: #cc0011;--rc-alert-important: #5500cc;--rc-max-width: 700px;--rc-shadow-top-bar: 0 8px 30px rgba(0, 0, 0, .12), 0 2px 8px rgba(0, 0, 0, .06);--rc-shadow-modal: 0 10px 15px -3px rgba(0,0,0,.1), 0 4px 6px -4px rgba(0,0,0,.1);--rc-shadow-menu: 0 1px 4px rgba(0,0,0,.04), 0 4px 16px rgba(0,0,0,.08);--rc-space-xs: 4px;--rc-space-sm: 8px;--rc-space-md: 16px;--rc-space-lg: 24px;--rc-space-xl: 32px;--rc-font-family-sans: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif: "Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-mono: "SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs: .625em;--rc-font-size-xs: .75em;--rc-font-size-sm: .8125em;--rc-font-size-md: .875em;--rc-font-size-lg: 1.25em;--rc-font-size-base: 16px;--rc-font-size-small: 14px;--rc-line-height: 1.7;--rc-line-height-tight: 1.4;--rc-font-family: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-radius-sm: 4px;--rc-radius-md: 8px;--rc-radius-lg: 12px}:root.dark{--rc-text: #fafafa;--rc-text-secondary: #a1a1aa;--rc-text-tertiary: #71717a;--rc-text-quaternary: #52525b;--rc-bg: #09090b;--rc-bg-secondary: #18181b;--rc-bg-tertiary: #27272a;--rc-border: #27272a;--rc-accent: #60a5fa;--rc-accent-light: #60a5fa20;--rc-link: #60a5fa;--rc-code-text: #e4e4e7;--rc-code-bg: #27272a;--rc-hr-border: #27272a;--rc-quote-border: #60a5fa;--rc-quote-bg: #1e3a5f;--rc-alert-info: #7db9e5;--rc-alert-warning: #da864a;--rc-alert-tip: #54da48;--rc-alert-caution: #e16973;--rc-alert-important: #9966e0;--rc-max-width: 700px;--rc-shadow-top-bar: 0 8px 30px rgba(0, 0, 0, .45), 0 2px 8px rgba(0, 0, 0, .3);--rc-shadow-modal: 0 10px 15px -3px rgba(0,0,0,.4), 0 4px 6px -4px rgba(0,0,0,.35);--rc-shadow-menu: 0 1px 4px rgba(0,0,0,.25), 0 4px 16px rgba(0,0,0,.4);--rc-space-xs: 4px;--rc-space-sm: 8px;--rc-space-md: 16px;--rc-space-lg: 24px;--rc-space-xl: 32px;--rc-font-family-sans: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif: "Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-mono: "SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs: .625em;--rc-font-size-xs: .75em;--rc-font-size-sm: .8125em;--rc-font-size-md: .875em;--rc-font-size-lg: 1.25em;--rc-font-size-base: 16px;--rc-font-size-small: 14px;--rc-line-height: 1.7;--rc-line-height-tight: 1.4;--rc-font-family: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-radius-sm: 4px;--rc-radius-md: 8px;--rc-radius-lg: 12px}.axx50{--rc-text: #000;--rc-text-secondary: #27272a;--rc-text-tertiary: #71717a;--rc-text-quaternary: #a1a1aa;--rc-bg: #ffffff;--rc-bg-secondary: #fafafa;--rc-bg-tertiary: #f4f4f5;--rc-border: #f4f4f5;--rc-accent: #2563eb;--rc-accent-light: #2563eb20;--rc-link: #2563eb;--rc-code-text: #3f3f46;--rc-code-bg: #f4f4f5;--rc-hr-border: #e4e4e7;--rc-quote-border: #2563eb;--rc-quote-bg: #eff6ff;--rc-alert-info: #006bb7;--rc-alert-warning: #cc5500;--rc-alert-tip: #11cc00;--rc-alert-caution: #cc0011;--rc-alert-important: #5500cc;--rc-max-width: 700px;--rc-shadow-top-bar: 0 8px 30px rgba(0, 0, 0, .12), 0 2px 8px rgba(0, 0, 0, .06);--rc-shadow-modal: 0 10px 15px -3px rgba(0,0,0,.1), 0 4px 6px -4px rgba(0,0,0,.1);--rc-shadow-menu: 0 1px 4px rgba(0,0,0,.04), 0 4px 16px rgba(0,0,0,.08);--rc-space-xs: 4px;--rc-space-sm: 8px;--rc-space-md: 16px;--rc-space-lg: 24px;--rc-space-xl: 32px;--rc-font-family-sans: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif: "Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-mono: "SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs: .625em;--rc-font-size-xs: .75em;--rc-font-size-sm: .8125em;--rc-font-size-md: .875em;--rc-font-size-lg: 1.25em;--rc-font-size-base: 16px;--rc-font-size-small: 14px;--rc-line-height: 1.7;--rc-line-height-tight: 1.4;--rc-font-family: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-radius-sm: 4px;--rc-radius-md: 8px;--rc-radius-lg: 12px}.axx51{--rc-text: #000;--rc-text-secondary: #27272a;--rc-text-tertiary: #71717a;--rc-text-quaternary: #a1a1aa;--rc-bg: #ffffff;--rc-bg-secondary: #fafafa;--rc-bg-tertiary: #f4f4f5;--rc-border: #f4f4f5;--rc-accent: #2563eb;--rc-accent-light: #2563eb20;--rc-link: #2563eb;--rc-code-text: #3f3f46;--rc-code-bg: #f4f4f5;--rc-hr-border: #e4e4e7;--rc-quote-border: #2563eb;--rc-quote-bg: #eff6ff;--rc-alert-info: #006bb7;--rc-alert-warning: #cc5500;--rc-alert-tip: #11cc00;--rc-alert-caution: #cc0011;--rc-alert-important: #5500cc;--rc-max-width: 700px;--rc-shadow-top-bar: 0 8px 30px rgba(0, 0, 0, .12), 0 2px 8px rgba(0, 0, 0, .06);--rc-shadow-modal: 0 10px 15px -3px rgba(0,0,0,.1), 0 4px 6px -4px rgba(0,0,0,.1);--rc-shadow-menu: 0 1px 4px rgba(0,0,0,.04), 0 4px 16px rgba(0,0,0,.08);--rc-space-xs: 4px;--rc-space-sm: 8px;--rc-space-md: 16px;--rc-space-lg: 24px;--rc-space-xl: 32px;--rc-font-family-sans: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif: "Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-mono: "SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs: .625em;--rc-font-size-xs: .75em;--rc-font-size-sm: .8125em;--rc-font-size-md: .875em;--rc-font-size-lg: 1.25em;--rc-font-size-base: 16px;--rc-font-size-small: 14px;--rc-line-height: 1.8;--rc-line-height-tight: 1.4;--rc-font-family: "Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-radius-sm: 4px;--rc-radius-md: 8px;--rc-radius-lg: 12px}.axx52{--rc-text: #000;--rc-text-secondary: #27272a;--rc-text-tertiary: #71717a;--rc-text-quaternary: #a1a1aa;--rc-bg: #ffffff;--rc-bg-secondary: #fafafa;--rc-bg-tertiary: #f4f4f5;--rc-border: #f4f4f5;--rc-accent: #2563eb;--rc-accent-light: #2563eb20;--rc-link: #2563eb;--rc-code-text: #3f3f46;--rc-code-bg: #f4f4f5;--rc-hr-border: #e4e4e7;--rc-quote-border: #a1a1aa;--rc-quote-bg: #fafafa;--rc-alert-info: #006bb7;--rc-alert-warning: #cc5500;--rc-alert-tip: #11cc00;--rc-alert-caution: #cc0011;--rc-alert-important: #5500cc;--rc-max-width: none;--rc-shadow-top-bar: 0 8px 30px rgba(0, 0, 0, .12), 0 2px 8px rgba(0, 0, 0, .06);--rc-shadow-modal: 0 10px 15px -3px rgba(0,0,0,.1), 0 4px 6px -4px rgba(0,0,0,.1);--rc-shadow-menu: 0 1px 4px rgba(0,0,0,.04), 0 4px 16px rgba(0,0,0,.08);--rc-space-xs: 2px;--rc-space-sm: 4px;--rc-space-md: 10px;--rc-space-lg: 16px;--rc-space-xl: 20px;--rc-font-family-sans: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif: "Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-mono: "SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs: .625em;--rc-font-size-xs: .75em;--rc-font-size-sm: .8125em;--rc-font-size-md: .875em;--rc-font-size-lg: 1.25em;--rc-font-size-base: 14px;--rc-font-size-small: 12px;--rc-line-height: 1.5;--rc-line-height-tight: 1.3;--rc-font-family: "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-radius-sm: 3px;--rc-radius-md: 6px;--rc-radius-lg: 8px}.dark .axx50,[data-theme=dark] .axx50,.dark.axx50,[data-theme=dark].axx50,.dark .axx51,[data-theme=dark] .axx51,.dark.axx51,[data-theme=dark].axx51,.dark .axx52,[data-theme=dark] .axx52,.dark.axx52,[data-theme=dark].axx52{--rc-text: #fafafa;--rc-text-secondary: #a1a1aa;--rc-text-tertiary: #71717a;--rc-text-quaternary: #52525b;--rc-bg: #09090b;--rc-bg-secondary: #18181b;--rc-bg-tertiary: #27272a;--rc-border: #27272a;--rc-accent: #60a5fa;--rc-accent-light: #60a5fa20;--rc-link: #60a5fa;--rc-code-text: #e4e4e7;--rc-code-bg: #27272a;--rc-hr-border: #27272a;--rc-quote-border: #60a5fa;--rc-quote-bg: #1e3a5f;--rc-alert-info: #7db9e5;--rc-alert-warning: #da864a;--rc-alert-tip: #54da48;--rc-alert-caution: #e16973;--rc-alert-important: #9966e0;--rc-shadow-top-bar: 0 8px 30px rgba(0, 0, 0, .45), 0 2px 8px rgba(0, 0, 0, .3);--rc-shadow-modal: 0 10px 15px -3px rgba(0,0,0,.4), 0 4px 6px -4px rgba(0,0,0,.35);--rc-shadow-menu: 0 1px 4px rgba(0,0,0,.25), 0 4px 16px rgba(0,0,0,.4)}._1pn9r4q0{--rr-code-accent: #737373;position:relative;margin:1.5rem 0;border-radius:.5rem;overflow:hidden;font-size:var(--rc-font-size-md);font-family:var(--rc-font-mono)}._1pn9r4q1{appearance:none;border:none;background:transparent;color:inherit;font:inherit;padding:0;outline:none;width:8em;opacity:1}._1pn9r4q1::placeholder{opacity:.5}._1pn9r4q2{position:absolute;bottom:.75rem;right:.75rem;z-index:1;display:flex;align-items:center;gap:.375rem;font-size:var(--rc-font-size-md);opacity:.6;pointer-events:none}._1pn9r4q2:has(._1pn9r4q1){pointer-events:auto}._1pn9r4q3{display:inline-flex;flex-shrink:0}._1pn9r4q3 svg{width:100%;height:100%}._1pn9r4q4{appearance:none;position:absolute;right:.5rem;top:.5rem;z-index:3;display:flex;align-items:center;justify-content:center;padding:.375rem;border-radius:.375rem;border:1px solid color-mix(in srgb,var(--rr-code-accent) 5%,transparent);background:color-mix(in srgb,var(--rr-code-accent) 80%,transparent);color:#fff;cursor:pointer;opacity:0;transition:opacity .2s ease;backdrop-filter:blur(8px)}._1pn9r4q0:hover ._1pn9r4q4{opacity:1}._1pn9r4q5{position:relative;background:color-mix(in srgb,var(--rr-code-accent) 5%,transparent);padding:1rem 0}._1pn9r4q6{position:relative;width:100%;overflow:auto}._1pn9r4q7{max-height:50vh;overflow:hidden}._1pn9r4q8{position:relative;overflow:auto;background-color:transparent!important}._1pn9r4q8 .cm-editor{background:transparent;color:var(--rc-text);font-family:var(--rc-font-mono)}._1pn9r4q8 .cm-scroller{font-family:var(--rc-font-mono)!important;line-height:1.6}._1pn9r4q8 .cm-content{padding-top:0;padding-bottom:0;padding-left:1.25rem;padding-right:1.25rem;min-height:1.6em}._1pn9r4q8:has(.cm-gutters) .cm-content{padding-left:.5rem;padding-right:1.25rem}._1pn9r4q8 .cm-line{padding:0}._1pn9r4q8 .cm-gutters{background:transparent;border-right:none;padding-left:1.25rem}._1pn9r4q8 .cm-lineNumbers .cm-gutterElement{min-width:3em;text-align:right;padding-right:2em;color:color-mix(in srgb,var(--rc-text-secondary) 40%,transparent)!important}._1pn9r4q8>.shikicode.output{position:static!important;inset:auto!important}._1pn9r4q9>textarea.shikicode{display:none}._1pn9r4qa{position:absolute;bottom:0;left:0;right:0;display:flex;justify-content:center;padding:.5rem 0 .75rem;background:linear-gradient(to bottom,transparent 0%,var(--bg, var(--rc-bg-secondary)) 80%);pointer-events:none}._1pn9r4qb{appearance:none;border:none;background:none;cursor:pointer;display:flex;align-items:center;gap:.5rem;font-size:var(--rc-font-size-xs);color:inherit;opacity:.7;pointer-events:auto}._1pn9r4qb:hover{opacity:1}._1pn9r4q0 .shikicode.input,._1pn9r4q0 .shikicode.output,._1pn9r4q0 .shikicode.output code,._1pn9r4q0 .shikicode.output .line,._1pn9r4q0 .shikicode.output .line span{font-variant-ligatures:none;font-kerning:none}._1pn9r4q0 .shikicode.input,._1pn9r4q0 .shikicode.output,._1pn9r4q8 pre,._1pn9r4q8 code,._1pn9r4q8 .line,._1pn9r4q8 .line span{font-family:var(--rc-font-mono)!important}._1pn9r4q0 pre{margin:0!important;padding:0!important;border-radius:0;font-size:1em}._1pn9r4q0 pre code{display:flex;flex-direction:column;font-family:var(--rc-font-mono)!important}._1pn9r4q0 .shiki,._1pn9r4q0 code,._1pn9r4q0 pre{background:transparent!important}[data-theme=dark] ._1pn9r4q0 .shiki-themes,[data-theme=dark] ._1pn9r4q0 .shiki-themes span{color:var(--shiki-dark)!important;font-style:var(--shiki-dark-font-style)!important;font-weight:var(--shiki-dark-font-weight)!important;text-decoration:var(--shiki-dark-text-decoration)!important}._1pn9r4q8:has(.shikicode.input.line-numbers) .shikicode.output .line:before{background-color:transparent!important;color:color-mix(in srgb,var(--rc-text-secondary) 40%,transparent)!important;width:5em;padding-right:2em}._1pn9r4q8:not(:has(.shikicode.input.line-numbers)) .shikicode.output .line:before{display:none}._1pn9r4q0 .line{display:block;padding:0 1.25rem}._1pn9r4q0 .shikicode.input.line-numbers{padding-left:calc(5em + 1.25rem)}._1pn9r4q0 .shikicode.input:not(.line-numbers){padding-left:1.25rem}._1pn9r4q0 .line>span:last-child{margin-right:1.25rem}._1pn9r4q0 .line:after{content:" "}._1pn9r4q0 .highlighted,._1pn9r4q0 .diff{position:relative;overflow-wrap:break-word}._1pn9r4q0 .highlighted:before,._1pn9r4q0 .diff:before{content:"";position:absolute;left:0;top:0;height:100%;width:2px}._1pn9r4q0 .highlighted{background:color-mix(in srgb,var(--rr-code-accent) 20%,transparent)}._1pn9r4q0 .highlighted:before{background:var(--rr-code-accent)}._1pn9r4q0 .diff.add{background:#22c55e26}._1pn9r4q0 .diff.add:before{background:#22c55e}._1pn9r4q0 .diff.add:after{content:" +";position:absolute;left:0;color:#22c55e}._1pn9r4q0 .diff.remove{background:#ef444426}._1pn9r4q0 .diff.remove:before{background:#ef4444}._1pn9r4q0 .diff.remove:after{content:" -";position:absolute;left:0;color:#ef4444}._1pn9r4qc{counter-reset:shiki-line 0}._1pn9r4qc .line{counter-increment:shiki-line 1}._1pn9r4qc .line:before{content:counter(shiki-line);color:transparent;text-align:right;box-sizing:border-box;width:2em;display:inline-block;position:sticky;left:0}._1pn9r4qd .line:before{color:inherit;opacity:.4;width:5em;padding-right:2em}._1pn9r4q6 pre::-webkit-scrollbar-track{margin-left:1rem;margin-right:var(--sr-margin, 0)}._1pn9r4q6 pre::-webkit-scrollbar{background-color:transparent!important}._1pn9r4qe{font-family:var(--rc-font-mono);font-size:var(--rc-font-size-md);background-color:var(--rc-code-bg);border-radius:var(--rc-radius-md);overflow:hidden;margin:var(--rc-space-md) 0;border:1px solid var(--rc-border)}._1pn9r4qf{display:flex;align-items:center;justify-content:space-between;padding:var(--rc-space-sm) var(--rc-space-md);border-bottom:1px solid var(--rc-border);font-size:var(--rc-font-size-md);color:var(--rc-text-secondary);user-select:none}._1pn9r4qg{font-family:var(--rc-font-mono);font-size:.85em;text-transform:uppercase;letter-spacing:.05em}._1pn9r4qh{appearance:none;border:none;background:none;color:var(--rc-text-secondary);cursor:pointer;padding:var(--rc-space-xs) var(--rc-space-sm);border-radius:var(--rc-radius-sm);font-family:var(--rc-font-family);font-size:var(--rc-font-size-md);line-height:1;transition:color .15s ease,background-color .15s ease}.rich-code-block{font-family:var(--rc-font-mono);font-size:var(--rc-font-size-md);background-color:var(--rc-code-bg);border-radius:var(--rc-radius-md);overflow:hidden;margin:var(--rc-space-md) 0;border:1px solid var(--rc-border)}.rich-code-block pre{margin:0;padding:var(--rc-space-md);overflow-x:auto}.rich-code-block code{font-family:inherit;font-size:inherit;background:none;border:none;padding:0;color:inherit}.rich-code-block-header{display:flex;align-items:center;justify-content:space-between;padding:var(--rc-space-sm) var(--rc-space-md);border-bottom:1px solid var(--rc-border);font-size:var(--rc-font-size-md);color:var(--rc-text-secondary);user-select:none}.rich-code-block-lang{font-family:var(--rc-font-mono);font-size:.85em;text-transform:uppercase;letter-spacing:.05em}.rich-code-block-copy{appearance:none;border:none;background:none;color:var(--rc-text-secondary);cursor:pointer;padding:var(--rc-space-xs) var(--rc-space-sm);border-radius:var(--rc-radius-sm);font-family:var(--rc-font-family);font-size:var(--rc-font-size-md);line-height:1;transition:color .15s ease,background-color .15s ease}.rich-code-block-copy:hover{color:var(--rc-text);background-color:var(--rc-bg-secondary)}.rich-code-block-numbered pre{counter-reset:line}.rich-code-block-numbered .line{counter-increment:line}.rich-code-block-numbered .line:before{content:counter(line);display:inline-block;width:2.5em;margin-right:var(--rc-space-md);text-align:right;color:color-mix(in srgb,var(--rc-text-secondary) 40%,transparent)!important;opacity:.4;user-select:none;font-size:var(--rc-font-size-md)}
|
package/dist/static.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"static.d.ts","sourceRoot":"","sources":["../src/static.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA"}
|
package/dist/styles.css.d.ts
CHANGED
|
@@ -14,6 +14,7 @@ export declare const semanticClassNames: {
|
|
|
14
14
|
readonly linedWithNumbers: "rr-code-lined-ln";
|
|
15
15
|
};
|
|
16
16
|
export declare const card: string;
|
|
17
|
+
export declare const langInput: string;
|
|
17
18
|
export declare const lang: string;
|
|
18
19
|
export declare const langIcon: string;
|
|
19
20
|
export declare const copyButton: string;
|
package/dist/styles.css.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.css.d.ts","sourceRoot":"","sources":["../src/styles.css.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;CAcrB,CAAA;AAGV,eAAO,MAAM,IAAI,QAUf,CAAA;AAGF,eAAO,MAAM,IAAI,
|
|
1
|
+
{"version":3,"file":"styles.css.d.ts","sourceRoot":"","sources":["../src/styles.css.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;CAcrB,CAAA;AAGV,eAAO,MAAM,IAAI,QAUf,CAAA;AAGF,eAAO,MAAM,SAAS,QAepB,CAAA;AAGF,eAAO,MAAM,IAAI,QAgBf,CAAA;AAEF,eAAO,MAAM,QAAQ,QAGnB,CAAA;AAQF,eAAO,MAAM,UAAU,QAuBrB,CAAA;AAGF,eAAO,MAAM,cAAc,QAIzB,CAAA;AAGF,eAAO,MAAM,MAAM,QAIjB,CAAA;AAEF,eAAO,MAAM,eAAe,QAG1B,CAAA;AAGF,eAAO,MAAM,IAAI,QAIf,CAAA;AAEF,eAAO,MAAM,YAAY,QAAY,CAAA;AAsDrC,eAAO,MAAM,UAAU,QAUrB,CAAA;AAEF,eAAO,MAAM,YAAY,QAiBvB,CAAA;AA2IF,eAAO,MAAM,KAAK,QAEhB,CAAA;AAiBF,eAAO,MAAM,gBAAgB,QAAY,CAAA;AAmBzC,eAAO,MAAM,yBAAyB;;;;;;CAM5B,CAAA;AAiFV,eAAO,MAAM,WAAW,QAA2B,CAAA;AACnD,eAAO,MAAM,aAAa,QAA6B,CAAA;AACvD,eAAO,MAAM,WAAW,QAA2B,CAAA;AACnD,eAAO,MAAM,iBAAiB,QAAiC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@haklex/rich-renderer-codeblock",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.39",
|
|
4
4
|
"description": "Code block renderer with Shiki syntax highlighting",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -9,6 +9,10 @@
|
|
|
9
9
|
"import": "./dist/index.mjs",
|
|
10
10
|
"types": "./dist/index.d.ts"
|
|
11
11
|
},
|
|
12
|
+
"./static": {
|
|
13
|
+
"import": "./dist/static.mjs",
|
|
14
|
+
"types": "./dist/static.d.ts"
|
|
15
|
+
},
|
|
12
16
|
"./shiki": {
|
|
13
17
|
"import": "./dist/shiki.mjs",
|
|
14
18
|
"types": "./dist/shiki.d.ts"
|
|
@@ -28,13 +32,16 @@
|
|
|
28
32
|
"dist"
|
|
29
33
|
],
|
|
30
34
|
"dependencies": {
|
|
35
|
+
"@codemirror/commands": "^6.10.2",
|
|
36
|
+
"@codemirror/state": "^6.5.4",
|
|
37
|
+
"@codemirror/view": "^6.39.15",
|
|
31
38
|
"@iconify-json/material-icon-theme": "^1.2.52",
|
|
32
39
|
"@iconify/utils": "^2.3.0",
|
|
33
40
|
"lucide-react": "^0.574.0",
|
|
34
41
|
"shiki": "^3.22.0",
|
|
35
|
-
"
|
|
36
|
-
"@haklex/rich-
|
|
37
|
-
"@haklex/
|
|
42
|
+
"@haklex/rich-editor": "0.0.39",
|
|
43
|
+
"@haklex/rich-style-token": "0.0.39",
|
|
44
|
+
"@haklex/cm-editor": "0.0.39"
|
|
38
45
|
},
|
|
39
46
|
"devDependencies": {
|
|
40
47
|
"@types/react": "^19.2.14",
|