@haklex/rich-renderer-codeblock 0.49.1 → 0.50.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"CodeBlockCard.d.ts","sourceRoot":"","sources":["../src/CodeBlockCard.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAiB,SAAS,EAAE,MAAM,OAAO,CAAC;AAWtD,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,SAAS,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,+FAA+F;IAC/F,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,QAAQ,EACR,WAAkB,EAClB,QAAQ,EACR,QAAQ,EACR,MAAM,EAAE,UAAkB,GAC3B,EAAE,kBAAkB,+BAkGpB"}
1
+ {"version":3,"file":"CodeBlockCard.d.ts","sourceRoot":"","sources":["../src/CodeBlockCard.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAiB,SAAS,EAAE,MAAM,OAAO,CAAC;AAWtD,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,SAAS,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,+FAA+F;IAC/F,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,QAAQ,EACR,WAAkB,EAClB,QAAQ,EACR,QAAQ,EACR,MAAM,EAAE,UAAkB,GAC3B,EAAE,kBAAkB,+BAqHpB"}
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA8BpD,CAAA;AAED,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA8BrD,CAAA;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAGlE;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG3D"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA8BpD,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA8BrD,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAGlE;AAyBD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG3D"}
@@ -1,73 +1,95 @@
1
1
  //#region src/constants.ts
2
2
  var languageToIconMap = {
3
- javascript: "JS",
4
- js: "JS",
5
- typescript: "TS",
6
- ts: "TS",
7
- jsx: "JSX",
8
- tsx: "TSX",
9
- html: "HTML",
10
- css: "CSS",
11
- scss: "SCSS",
12
- json: "JSON",
13
- markdown: "MD",
14
- md: "MD",
15
- bash: "SH",
16
- sh: "SH",
17
- shell: "SH",
18
- zsh: "SH",
19
- python: "PY",
20
- py: "PY",
21
- rust: "RS",
22
- go: "GO",
23
- java: "JAVA",
24
- c: "C",
25
- cpp: "C++",
3
+ "javascript": "JS",
4
+ "js": "JS",
5
+ "typescript": "TS",
6
+ "ts": "TS",
7
+ "jsx": "JSX",
8
+ "tsx": "TSX",
9
+ "html": "HTML",
10
+ "css": "CSS",
11
+ "scss": "SCSS",
12
+ "json": "JSON",
13
+ "markdown": "MD",
14
+ "md": "MD",
15
+ "bash": "SH",
16
+ "sh": "SH",
17
+ "shell": "SH",
18
+ "zsh": "SH",
19
+ "python": "PY",
20
+ "py": "PY",
21
+ "rust": "RS",
22
+ "go": "GO",
23
+ "java": "JAVA",
24
+ "c": "C",
25
+ "cpp": "C++",
26
26
  "c++": "C++",
27
- swift: "SW",
28
- kotlin: "KT",
29
- yaml: "YAML",
30
- yml: "YAML",
31
- sql: "SQL"
27
+ "swift": "SW",
28
+ "kotlin": "KT",
29
+ "yaml": "YAML",
30
+ "yml": "YAML",
31
+ "sql": "SQL"
32
32
  };
33
33
  var languageToColorMap = {
34
- javascript: "#f7df1e",
35
- js: "#f7df1e",
36
- typescript: "#3178c6",
37
- ts: "#3178c6",
38
- jsx: "#61dafb",
39
- tsx: "#61dafb",
40
- html: "#e34f26",
41
- css: "#1572b6",
42
- scss: "#cc6699",
43
- json: "#f59e0b",
44
- markdown: "#737373",
45
- md: "#737373",
46
- bash: "#4eaa25",
47
- sh: "#4eaa25",
48
- shell: "#4eaa25",
49
- zsh: "#4eaa25",
50
- python: "#3776ab",
51
- py: "#3776ab",
52
- rust: "#dea584",
53
- go: "#00add8",
54
- java: "#b07219",
55
- c: "#a8b9cc",
56
- cpp: "#00599c",
34
+ "javascript": "#f7df1e",
35
+ "js": "#f7df1e",
36
+ "typescript": "#3178c6",
37
+ "ts": "#3178c6",
38
+ "jsx": "#61dafb",
39
+ "tsx": "#61dafb",
40
+ "html": "#e34f26",
41
+ "css": "#1572b6",
42
+ "scss": "#cc6699",
43
+ "json": "#f59e0b",
44
+ "markdown": "#737373",
45
+ "md": "#737373",
46
+ "bash": "#4eaa25",
47
+ "sh": "#4eaa25",
48
+ "shell": "#4eaa25",
49
+ "zsh": "#4eaa25",
50
+ "python": "#3776ab",
51
+ "py": "#3776ab",
52
+ "rust": "#dea584",
53
+ "go": "#00add8",
54
+ "java": "#b07219",
55
+ "c": "#a8b9cc",
56
+ "cpp": "#00599c",
57
57
  "c++": "#00599c",
58
- swift: "#fa7343",
59
- kotlin: "#7f52ff",
60
- yaml: "#cb171e",
61
- yml: "#cb171e",
62
- sql: "#e38c00"
58
+ "swift": "#fa7343",
59
+ "kotlin": "#7f52ff",
60
+ "yaml": "#cb171e",
61
+ "yml": "#cb171e",
62
+ "sql": "#e38c00"
63
63
  };
64
64
  function normalizeLanguage(lang) {
65
65
  if (!lang) return "text";
66
66
  return lang.trim().toLowerCase() || "text";
67
67
  }
68
+ var languageDisplayNames = {
69
+ typescript: "TypeScript",
70
+ javascript: "JavaScript",
71
+ python: "Python",
72
+ shell: "Shell",
73
+ bash: "Shell",
74
+ sh: "Shell",
75
+ zsh: "Shell",
76
+ rust: "Rust",
77
+ go: "Go",
78
+ swift: "Swift",
79
+ kotlin: "Kotlin",
80
+ java: "Java",
81
+ cpp: "C++",
82
+ csharp: "C#",
83
+ ruby: "Ruby",
84
+ markdown: "Markdown",
85
+ vue: "Vue",
86
+ dart: "Dart",
87
+ lua: "Lua",
88
+ diff: "Diff"
89
+ };
68
90
  function getLanguageDisplayName(lang) {
69
91
  if (lang === "text") return "TEXT";
70
- return lang.toUpperCase();
92
+ return languageDisplayNames[lang] ?? lang.toUpperCase();
71
93
  }
72
94
  //#endregion
73
95
  export { getLanguageDisplayName, languageToColorMap, languageToIconMap, normalizeLanguage };
@@ -96,6 +96,7 @@ var FileIcon = ({ filename, size = 16, className, fallback = "F" }) => {
96
96
  //#region src/styles.css.ts
97
97
  var semanticClassNames = {
98
98
  card: "rr-code-card",
99
+ header: "rr-code-header",
99
100
  lang: "rr-code-lang",
100
101
  langIcon: "rr-code-lang-icon",
101
102
  copyButton: "rr-code-copy",
@@ -110,20 +111,22 @@ var semanticClassNames = {
110
111
  linedWithNumbers: "rr-code-lined-ln"
111
112
  };
112
113
  var card = "_1pn9r4q0";
113
- var langInput = "_1pn9r4q1";
114
- var lang = "_1pn9r4q2";
115
- var langIcon = "_1pn9r4q3";
116
- var copyButton = "_1pn9r4q4";
117
- var bodyBackground = "_1pn9r4q5";
118
- var bodyBackgroundStatic = "_1pn9r4q6 _1pn9r4q5";
119
- var scroll = "_1pn9r4q7";
120
- var scrollCollapsed = "_1pn9r4q8";
121
- var body = "_1pn9r4q9";
122
- var bodyReadonly = "_1pn9r4qa";
123
- var expandWrap = "_1pn9r4qb";
124
- var expandButton = "_1pn9r4qc";
125
- var lined = "_1pn9r4qd";
126
- var linedWithNumbers = "_1pn9r4qe";
114
+ var header = "_1pn9r4q1";
115
+ var langInput = "_1pn9r4q2";
116
+ var lang = "_1pn9r4q3";
117
+ var langMark = "_1pn9r4q4";
118
+ var langIcon = "_1pn9r4q5";
119
+ var copyButton = "_1pn9r4q6";
120
+ var bodyBackground = "_1pn9r4q7";
121
+ var bodyBackgroundStatic = "_1pn9r4q8 _1pn9r4q7";
122
+ var scroll = "_1pn9r4q9";
123
+ var scrollCollapsed = "_1pn9r4qa";
124
+ var body = "_1pn9r4qb";
125
+ var bodyReadonly = "_1pn9r4qc";
126
+ var expandWrap = "_1pn9r4qd";
127
+ var expandButton = "_1pn9r4qe";
128
+ var lined = "_1pn9r4qf";
129
+ var linedWithNumbers = "_1pn9r4qg";
127
130
  //#endregion
128
131
  //#region src/icons/language.tsx
129
132
  /** Maps normalized language to material-icon-theme icon name. */
@@ -228,4 +231,4 @@ var LanguageIcon = ({ language, size = 14, className = `${langIcon} ${semanticCl
228
231
  });
229
232
  };
230
233
  //#endregion
231
- export { scrollCollapsed as _, bodyBackground as a, getMaterialIconSvg as b, card as c, expandWrap as d, lang as f, scroll as g, linedWithNumbers as h, body as i, copyButton as l, lined as m, LanguageIcon as n, bodyBackgroundStatic as o, langInput as p, hasLanguageIcon as r, bodyReadonly as s, LANG_TO_ICON as t, expandButton as u, semanticClassNames as v, FileIcon as y };
234
+ export { getMaterialIconSvg as S, linedWithNumbers as _, bodyBackground as a, semanticClassNames as b, card as c, expandWrap as d, header as f, lined as g, langMark as h, body as i, copyButton as l, langInput as m, LanguageIcon as n, bodyBackgroundStatic as o, lang as p, hasLanguageIcon as r, bodyReadonly as s, LANG_TO_ICON as t, expandButton as u, scroll as v, FileIcon as x, scrollCollapsed as y };
package/dist/icons.mjs CHANGED
@@ -1 +1 @@
1
- export { y as FileIcon, t as LANG_TO_ICON, n as LanguageIcon, b as getMaterialIconSvg, r as hasLanguageIcon } from "./icons-Bd3KLabn.js";
1
+ export { x as FileIcon, t as LANG_TO_ICON, n as LanguageIcon, S as getMaterialIconSvg, r as hasLanguageIcon } from "./icons-C6NXwMKM.js";
package/dist/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  import { getLanguageDisplayName, languageToColorMap, normalizeLanguage } from "./constants.mjs";
2
- import { a as bodyBackground, c as card, f as lang, g as scroll, i as body, l as copyButton, n as LanguageIcon, o as bodyBackgroundStatic, p as langInput, r as hasLanguageIcon, v as semanticClassNames } from "./icons-Bd3KLabn.js";
2
+ import { a as bodyBackground, b as semanticClassNames, c as card, f as header, i as body, l as copyButton, m as langInput, n as LanguageIcon, o as bodyBackgroundStatic, p as lang, r as hasLanguageIcon, v as scroll } from "./icons-C6NXwMKM.js";
3
3
  import { CodeBlockRenderer } from "./static.mjs";
4
4
  import { defaultKeymap, history, historyKeymap, indentWithTab } from "@codemirror/commands";
5
5
  import { Compartment, EditorSelection, EditorState, Prec } from "@codemirror/state";
@@ -12,8 +12,8 @@ import { jsx, jsxs } from "react/jsx-runtime";
12
12
  import { Combobox, ComboboxContent, ComboboxEmpty, ComboboxInput, ComboboxItem, ComboboxList } from "@haklex/rich-editor-ui";
13
13
  import { bundledLanguagesInfo } from "shiki/bundle/full";
14
14
  //#region src/CodeBlockCard.tsx
15
- var CopyIcon = /* @__PURE__ */ jsx(Copy, { size: 16 });
16
- var CheckIcon = /* @__PURE__ */ jsx(Check, { size: 16 });
15
+ var CopyIcon = /* @__PURE__ */ jsx(Copy, { size: 14 });
16
+ var CheckIcon = /* @__PURE__ */ jsx(Check, { size: 14 });
17
17
  var ExpandIcon = /* @__PURE__ */ jsx(ChevronDown, { size: 14 });
18
18
  function CodeBlockCard({ code, language, collapsible = true, langSlot, children, static: staticMode = false }) {
19
19
  const normalizedLanguage = normalizeLanguage(language);
@@ -22,6 +22,8 @@ function CodeBlockCard({ code, language, collapsible = true, langSlot, children,
22
22
  const [isCollapsed, setIsCollapsed] = useState(true);
23
23
  const [isOverflow, setIsOverflow] = useState(false);
24
24
  const scrollRef = useRef(null);
25
+ const lineCount = useMemo(() => code.split("\n").length, [code]);
26
+ const gutterStyle = useMemo(() => ({ "--rc-ln-digits": Math.max(2, String(lineCount).length) }), [lineCount]);
25
27
  useEffect(() => {
26
28
  if (!collapsible) {
27
29
  setIsOverflow(false);
@@ -47,32 +49,38 @@ function CodeBlockCard({ code, language, collapsible = true, langSlot, children,
47
49
  }).catch(() => {});
48
50
  }, [code]);
49
51
  const languageLabel = getLanguageDisplayName(normalizedLanguage);
50
- const accent = languageToColorMap[normalizedLanguage] || "#737373";
51
- const cardStyle = useMemo(() => ({ "--rr-code-accent": accent }), [accent]);
52
+ const languageColor = languageToColorMap[normalizedLanguage] || "#737373";
53
+ const isCollapsedOverflow = collapsible && isCollapsed && isOverflow;
52
54
  const scrollClassName = [
53
55
  scroll,
54
56
  semanticClassNames.scroll,
55
- collapsible && isCollapsed && isOverflow && "_1pn9r4q8",
56
- collapsible && isCollapsed && isOverflow && semanticClassNames.scrollCollapsed
57
+ isCollapsedOverflow && "_1pn9r4qa",
58
+ isCollapsedOverflow && semanticClassNames.scrollCollapsed
57
59
  ].filter(Boolean).join(" ");
58
60
  return /* @__PURE__ */ jsxs("div", {
59
61
  className: `${card} ${semanticClassNames.card}`,
60
- style: cardStyle,
62
+ "data-chrome": "bar",
63
+ style: gutterStyle,
61
64
  children: [
62
- langSlot ?? (normalizedLanguage !== "text" && /* @__PURE__ */ jsx("div", {
63
- "aria-hidden": true,
64
- className: `_1pn9r4q2 ${semanticClassNames.lang}`,
65
- children: hasLanguageIcon(normalizedLanguage) ? /* @__PURE__ */ jsx(LanguageIcon, {
66
- language: normalizedLanguage,
67
- size: 14
68
- }) : /* @__PURE__ */ jsx("span", { children: languageLabel })
69
- })),
70
- /* @__PURE__ */ jsx("button", {
71
- "aria-label": copied ? "Copied" : "Copy code",
72
- className: `${copyButton} ${semanticClassNames.copyButton}`,
73
- type: "button",
74
- onClick: handleCopy,
75
- children: copied ? CheckIcon : CopyIcon
65
+ /* @__PURE__ */ jsxs("div", {
66
+ className: `${header} ${semanticClassNames.header}`,
67
+ children: [langSlot ?? /* @__PURE__ */ jsxs("div", {
68
+ className: `_1pn9r4q3 ${semanticClassNames.lang}`,
69
+ children: [normalizedLanguage !== "text" && (hasLanguageIcon(normalizedLanguage) ? /* @__PURE__ */ jsx(LanguageIcon, {
70
+ language: normalizedLanguage,
71
+ size: 14
72
+ }) : /* @__PURE__ */ jsx("span", {
73
+ "aria-hidden": true,
74
+ className: "_1pn9r4q4",
75
+ style: { backgroundColor: languageColor }
76
+ })), normalizedLanguage !== "text" && /* @__PURE__ */ jsx("span", { children: languageLabel })]
77
+ }), /* @__PURE__ */ jsxs("button", {
78
+ "aria-label": copied ? "Copied" : "Copy code",
79
+ className: `${copyButton} ${semanticClassNames.copyButton}`,
80
+ type: "button",
81
+ onClick: handleCopy,
82
+ children: [copied ? CheckIcon : CopyIcon, /* @__PURE__ */ jsx("span", { children: copied ? "Copied" : "Copy" })]
83
+ })]
76
84
  }),
77
85
  /* @__PURE__ */ jsxs("div", {
78
86
  className: `${staticMode ? bodyBackgroundStatic : bodyBackground} ${semanticClassNames.bodyBackground}`,
@@ -80,15 +88,16 @@ function CodeBlockCard({ code, language, collapsible = true, langSlot, children,
80
88
  className: scrollClassName,
81
89
  ref: scrollRef,
82
90
  children
83
- }), collapsible && isOverflow && isCollapsed && /* @__PURE__ */ jsx("div", {
84
- className: `_1pn9r4qb ${semanticClassNames.expandWrap}`,
85
- children: /* @__PURE__ */ jsxs("button", {
86
- className: `_1pn9r4qc ${semanticClassNames.expandButton}`,
87
- type: "button",
88
- onClick: () => setIsCollapsed(false),
89
- children: [ExpandIcon, /* @__PURE__ */ jsx("span", { children: "展开" })]
90
- })
91
+ }), isCollapsedOverflow && /* @__PURE__ */ jsx("div", {
92
+ "aria-hidden": true,
93
+ className: `_1pn9r4qd ${semanticClassNames.expandWrap}`
91
94
  })]
95
+ }),
96
+ isCollapsedOverflow && /* @__PURE__ */ jsxs("button", {
97
+ className: `_1pn9r4qe ${semanticClassNames.expandButton}`,
98
+ type: "button",
99
+ onClick: () => setIsCollapsed(false),
100
+ children: [/* @__PURE__ */ jsx("span", { children: `Expand all · ${lineCount} lines` }), ExpandIcon]
92
101
  })
93
102
  ]
94
103
  });
@@ -143,8 +152,8 @@ function LanguageCombobox({ language, onLanguageChange }) {
143
152
  e.stopPropagation();
144
153
  }
145
154
  }), /* @__PURE__ */ jsxs(ComboboxContent, {
146
- align: "end",
147
- side: "top",
155
+ align: "start",
156
+ side: "bottom",
148
157
  sideOffset: 8,
149
158
  children: [/* @__PURE__ */ jsx(ComboboxEmpty, { children: "No languages found." }), /* @__PURE__ */ jsx(ComboboxList, { children: (item) => /* @__PURE__ */ jsxs(ComboboxItem, {
150
159
  value: item,
@@ -167,7 +176,7 @@ function stopHandledEvent(event) {
167
176
  var CodeBlockEditRenderer = ({ code, language, showLineNumbers: showLineNumbersProp, editable = false, selected = false, cursorPlacement = "start", onCodeChange, onLanguageChange, onDelete, onExitBlock }) => {
168
177
  const variant = useVariant();
169
178
  const colorScheme = useColorScheme();
170
- const showLineNumbers = showLineNumbersProp ?? variant !== "comment";
179
+ const showLineNumbers = showLineNumbersProp ?? (variant !== "comment" && variant !== "chat");
171
180
  const normalizedLanguage = normalizeLanguage(language);
172
181
  const [mounted, setMounted] = useState(false);
173
182
  const containerRef = useRef(null);
@@ -310,15 +319,15 @@ var CodeBlockEditRenderer = ({ code, language, showLineNumbers: showLineNumbersP
310
319
  ]);
311
320
  const fallbackLines = useMemo(() => code.split("\n"), [code]);
312
321
  const fallbackClassName = [
313
- showLineNumbers && "_1pn9r4qd",
322
+ showLineNumbers && "_1pn9r4qf",
314
323
  showLineNumbers && semanticClassNames.lined,
315
- showLineNumbers && "_1pn9r4qe",
324
+ showLineNumbers && "_1pn9r4qg",
316
325
  showLineNumbers && semanticClassNames.linedWithNumbers
317
326
  ].filter(Boolean).join(" ");
318
327
  const bodyClassName = [
319
328
  body,
320
329
  semanticClassNames.body,
321
- !editable && "_1pn9r4qa",
330
+ !editable && "_1pn9r4qc",
322
331
  !editable && semanticClassNames.bodyReadonly
323
332
  ].filter(Boolean).join(" ");
324
333
  return /* @__PURE__ */ jsxs(CodeBlockCard, {
@@ -1,2 +1,2 @@
1
- :root{--rc-text:#000;--rc-text-secondary:#262626;--rc-text-tertiary:#737373;--rc-text-quaternary:#a3a3a3;--rc-bg:#fff;--rc-bg-secondary:#fafafa;--rc-bg-tertiary:#f5f5f5;--rc-fill:#e8e8e8;--rc-fill-secondary:#eee;--rc-fill-tertiary:#f5f5f5;--rc-fill-quaternary:#fafafa;--rc-border:#f5f5f5;--rc-accent:#2563eb;--rc-accent-light:#2563eb20;--rc-link:#2563eb;--rc-code-text:#404040;--rc-code-bg:#f5f5f5;--rc-hr-border:#e5e5e5;--rc-quote-border:#2563eb;--rc-quote-bg:#f5f5f5;--rc-alert-info:#006bb7;--rc-alert-warning:#c50;--rc-alert-tip:#1c0;--rc-alert-caution:#c01;--rc-alert-important:#50c;--rc-max-width:700px;--rc-shadow-top-bar:0 8px 30px #0000001f, 0 2px 8px #0000000f;--rc-shadow-modal:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--rc-shadow-menu:0 1px 4px #0000000a, 0 4px 16px #00000014;--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-family-kai:"楷体", KaiTi, STKaiti, "Kaiti SC", "LXGW WenKai", "霞鹜文楷", "Noto Serif CJK SC", 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,[data-theme=dark]{--rc-text:#fafafa;--rc-text-secondary:#a3a3a3;--rc-text-tertiary:#737373;--rc-text-quaternary:#525252;--rc-bg:#0a0a0a;--rc-bg-secondary:#171717;--rc-bg-tertiary:#262626;--rc-fill:#2a2a2a;--rc-fill-secondary:#222;--rc-fill-tertiary:#1a1a1a;--rc-fill-quaternary:#141414;--rc-border:#262626;--rc-accent:#60a5fa;--rc-accent-light:#60a5fa20;--rc-link:#60a5fa;--rc-code-text:#d4d4d4;--rc-code-bg:#262626;--rc-hr-border:#262626;--rc-quote-border:#60a5fa;--rc-quote-bg:#262626;--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 #00000073, 0 2px 8px #0000004d;--rc-shadow-modal:0 10px 15px -3px #0006, 0 4px 6px -4px #00000059;--rc-shadow-menu:0 1px 4px #00000040, 0 4px 16px #0006}.axx50{--rc-text:#000;--rc-text-secondary:#262626;--rc-text-tertiary:#737373;--rc-text-quaternary:#a3a3a3;--rc-bg:#fff;--rc-bg-secondary:#fafafa;--rc-bg-tertiary:#f5f5f5;--rc-fill:#e8e8e8;--rc-fill-secondary:#eee;--rc-fill-tertiary:#f5f5f5;--rc-fill-quaternary:#fafafa;--rc-border:#f5f5f5;--rc-accent:#2563eb;--rc-accent-light:#2563eb20;--rc-link:#2563eb;--rc-code-text:#404040;--rc-code-bg:#f5f5f5;--rc-hr-border:#e5e5e5;--rc-quote-border:#2563eb;--rc-quote-bg:#f5f5f5;--rc-alert-info:#006bb7;--rc-alert-warning:#c50;--rc-alert-tip:#1c0;--rc-alert-caution:#c01;--rc-alert-important:#50c;--rc-max-width:700px;--rc-shadow-top-bar:0 8px 30px #0000001f, 0 2px 8px #0000000f;--rc-shadow-modal:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--rc-shadow-menu:0 1px 4px #0000000a, 0 4px 16px #00000014;--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-family-kai:"楷体", KaiTi, STKaiti, "Kaiti SC", "LXGW WenKai", "霞鹜文楷", "Noto Serif CJK SC", 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:#262626;--rc-text-tertiary:#737373;--rc-text-quaternary:#a3a3a3;--rc-bg:#fff;--rc-bg-secondary:#fafafa;--rc-bg-tertiary:#f5f5f5;--rc-fill:#e8e8e8;--rc-fill-secondary:#eee;--rc-fill-tertiary:#f5f5f5;--rc-fill-quaternary:#fafafa;--rc-border:#f5f5f5;--rc-accent:#2563eb;--rc-accent-light:#2563eb20;--rc-link:#2563eb;--rc-code-text:#404040;--rc-code-bg:#f5f5f5;--rc-hr-border:#e5e5e5;--rc-quote-border:#2563eb;--rc-quote-bg:#f5f5f5;--rc-alert-info:#006bb7;--rc-alert-warning:#c50;--rc-alert-tip:#1c0;--rc-alert-caution:#c01;--rc-alert-important:#50c;--rc-max-width:700px;--rc-shadow-top-bar:0 8px 30px #0000001f, 0 2px 8px #0000000f;--rc-shadow-modal:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--rc-shadow-menu:0 1px 4px #0000000a, 0 4px 16px #00000014;--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-family-kai:"楷体", KaiTi, STKaiti, "Kaiti SC", "LXGW WenKai", "霞鹜文楷", "Noto Serif CJK SC", 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:#262626;--rc-text-tertiary:#737373;--rc-text-quaternary:#a3a3a3;--rc-bg:#fff;--rc-bg-secondary:#fafafa;--rc-bg-tertiary:#f5f5f5;--rc-fill:#e8e8e8;--rc-fill-secondary:#eee;--rc-fill-tertiary:#f5f5f5;--rc-fill-quaternary:#fafafa;--rc-border:#f5f5f5;--rc-accent:#2563eb;--rc-accent-light:#2563eb20;--rc-link:#2563eb;--rc-code-text:#404040;--rc-code-bg:#f5f5f5;--rc-hr-border:#e5e5e5;--rc-quote-border:#a3a3a3;--rc-quote-bg:#fafafa;--rc-alert-info:#006bb7;--rc-alert-warning:#c50;--rc-alert-tip:#1c0;--rc-alert-caution:#c01;--rc-alert-important:#50c;--rc-max-width:none;--rc-shadow-top-bar:0 8px 30px #0000001f, 0 2px 8px #0000000f;--rc-shadow-modal:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--rc-shadow-menu:0 1px 4px #0000000a, 0 4px 16px #00000014;--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-family-kai:"楷体", KaiTi, STKaiti, "Kaiti SC", "LXGW WenKai", "霞鹜文楷", "Noto Serif CJK SC", 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:12px}.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:#a3a3a3;--rc-text-tertiary:#737373;--rc-text-quaternary:#525252;--rc-bg:#0a0a0a;--rc-bg-secondary:#171717;--rc-bg-tertiary:#262626;--rc-fill:#2a2a2a;--rc-fill-secondary:#222;--rc-fill-tertiary:#1a1a1a;--rc-fill-quaternary:#141414;--rc-border:#262626;--rc-accent:#60a5fa;--rc-accent-light:#60a5fa20;--rc-link:#60a5fa;--rc-code-text:#d4d4d4;--rc-code-bg:#262626;--rc-hr-border:#262626;--rc-quote-border:#60a5fa;--rc-quote-bg:#262626;--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 #00000073, 0 2px 8px #0000004d;--rc-shadow-modal:0 10px 15px -3px #0006, 0 4px 6px -4px #00000059;--rc-shadow-menu:0 1px 4px #00000040, 0 4px 16px #0006}._1pn9r4q0{--rr-code-accent:#737373;min-width:0;max-width:100%;font-size:var(--rc-font-size-md);font-family:var(--rc-font-mono);border-radius:.5rem;margin:1.5rem 0;position:relative;overflow:hidden}._1pn9r4q1{-webkit-appearance:none;appearance:none;color:inherit;font:inherit;opacity:1;background:0 0;border:none;outline:none;width:8em;padding:0}._1pn9r4q1::placeholder{opacity:.5}._1pn9r4q2{z-index:1;font-size:var(--rc-font-size-md);opacity:.6;pointer-events:none;align-items:center;gap:.375rem;display:flex;position:absolute;bottom:.75rem;right:.75rem}._1pn9r4q2:has(._1pn9r4q1){pointer-events:auto}._1pn9r4q3{flex-shrink:0;display:inline-flex}._1pn9r4q3 svg{width:100%;height:100%}._1pn9r4q4{-webkit-appearance:none;appearance:none;z-index:3;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;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-radius:.375rem;justify-content:center;align-items:center;padding:.375rem;transition:opacity .2s;display:flex;position:absolute;top:.5rem;right:.5rem}._1pn9r4q0:hover ._1pn9r4q4{opacity:1}._1pn9r4q5{background:color-mix(in srgb, var(--rr-code-accent) 5%, transparent);padding:0;position:relative}._1pn9r4q6{padding-block-start:12px;padding-block-end:12px}._1pn9r4q7{width:100%;min-width:0;max-width:100%;position:relative;overflow:auto}._1pn9r4q8{max-height:50vh;overflow:hidden}._1pn9r4q9{min-width:0;max-width:100%;position:relative;overflow:auto;background-color:#0000!important}._1pn9r4q9 .cm-editor{color:var(--rc-text);font-family:var(--rc-font-mono);background:0 0}._1pn9r4q9 .cm-scroller{line-height:1.6;font-family:var(--rc-font-mono)!important}._1pn9r4q9 .cm-content{min-height:1.6em;padding:0 1.25rem}._1pn9r4q9:has(.cm-gutters) .cm-content{padding-left:.5rem;padding-right:1.25rem}._1pn9r4q9 .cm-line{padding:0}._1pn9r4q9 .cm-gutters{border-right:none;padding-left:1.25rem}._1pn9r4q9 .cm-lineNumbers .cm-gutterElement{text-align:right;min-width:3em;padding-right:2em;color:color-mix(in srgb, var(--rc-text-secondary) 40%, transparent)!important}._1pn9r4q9>.shikicode.output{position:static!important;top:auto!important;bottom:auto!important;left:auto!important;right:auto!important}._1pn9r4qa>textarea.shikicode{display:none}._1pn9r4qb{background:linear-gradient(to bottom, transparent 0%, var(--bg,var(--rc-bg-secondary)) 80%);pointer-events:none;justify-content:center;padding:.5rem 0 .75rem;display:flex;position:absolute;bottom:0;left:0;right:0}._1pn9r4qc{-webkit-appearance:none;appearance:none;cursor:pointer;font-size:var(--rc-font-size-xs);color:inherit;opacity:.7;pointer-events:auto;background:0 0;border:none;align-items:center;gap:.5rem;display:flex}._1pn9r4qc: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,._1pn9r4q9 pre,._1pn9r4q9 code,._1pn9r4q9 .line,._1pn9r4q9 .line span{font-family:var(--rc-font-mono)!important}._1pn9r4q0 pre{border-radius:0;max-width:100%;font-size:1em;overflow:auto;margin:0!important;padding:0!important}._1pn9r4q0 pre code{flex-direction:column;display:flex;font-family:var(--rc-font-mono)!important}._1pn9r4q0 .shiki,._1pn9r4q0 code,._1pn9r4q0 pre{background:0 0!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;-webkit-text-decoration:var(--shiki-dark-text-decoration)!important;text-decoration:var(--shiki-dark-text-decoration)!important}._1pn9r4q9:has(.shikicode.input.line-numbers) .shikicode.output .line:before{width:5em;padding-right:2em;color:color-mix(in srgb, var(--rc-text-secondary) 40%, transparent)!important;background-color:#0000!important}._1pn9r4q9:not(:has(.shikicode.input.line-numbers)) .shikicode.output .line:before{display:none}._1pn9r4q0 .line{padding:0 1.25rem;display:block}._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{overflow-wrap:break-word;position:relative}._1pn9r4q0 .highlighted:before,._1pn9r4q0 .diff:before{content:"";width:2px;height:100%;position:absolute;top:0;left:0}._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:" +";color:#22c55e;position:absolute;left:0}._1pn9r4q0 .diff.remove{background:#ef444426}._1pn9r4q0 .diff.remove:before{background:#ef4444}._1pn9r4q0 .diff.remove:after{content:" -";color:#ef4444;position:absolute;left:0}._1pn9r4qd{counter-reset:shiki-line 0}._1pn9r4qd .line{counter-increment:shiki-line 1}._1pn9r4qd .line:before{content:counter(shiki-line);color:#0000;text-align:right;box-sizing:border-box;width:2em;display:inline-block;position:sticky;left:0}._1pn9r4qe .line:before{color:inherit;opacity:.4;width:5em;padding-right:2em}._1pn9r4q7 pre::-webkit-scrollbar-track{margin-left:1rem;margin-right:var(--sr-margin,0)}._1pn9r4q7 pre::-webkit-scrollbar{background-color:#0000!important}._1pn9r4qf{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);margin:var(--rc-space-md) 0;border:1px solid var(--rc-border);overflow:hidden}._1pn9r4qg{padding:var(--rc-space-sm) var(--rc-space-md);border-bottom:1px solid var(--rc-border);font-family:var(--rc-font-family-sans);font-size:var(--rc-font-size-md);color:var(--rc-text-secondary);-webkit-user-select:none;user-select:none;justify-content:space-between;align-items:center;display:flex}._1pn9r4qh{font-family:var(--rc-font-mono);text-transform:uppercase;letter-spacing:.05em;font-size:.85em}._1pn9r4qi{-webkit-appearance:none;appearance: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);background:0 0;border:none;line-height:1;transition:color .15s,background-color .15s}.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);margin:var(--rc-space-md) 0;border:1px solid var(--rc-border);overflow:hidden}.rich-code-block pre{padding:var(--rc-space-md);margin:0;overflow-x:auto}.rich-code-block code{font-family:inherit;font-size:inherit;color:inherit;background:0 0;border:none;padding:0}.rich-code-block-header{padding:var(--rc-space-sm) var(--rc-space-md);border-bottom:1px solid var(--rc-border);font-family:var(--rc-font-family-sans);font-size:var(--rc-font-size-md);color:var(--rc-text-secondary);-webkit-user-select:none;user-select:none;justify-content:space-between;align-items:center;display:flex}.rich-code-block-lang{font-family:var(--rc-font-mono);text-transform:uppercase;letter-spacing:.05em;font-size:.85em}.rich-code-block-copy{-webkit-appearance:none;appearance: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);background:0 0;border:none;line-height:1;transition:color .15s,background-color .15s}.rich-code-block-copy:hover{color:var(--rc-text);background-color:var(--rc-fill-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);width:2.5em;margin-right:var(--rc-space-md);text-align:right;opacity:.4;-webkit-user-select:none;user-select:none;font-size:var(--rc-font-size-md);display:inline-block;color:color-mix(in srgb, var(--rc-text-secondary) 40%, transparent)!important}
1
+ :root{--rc-text:#171717;--rc-text-secondary:#404040;--rc-text-tertiary:#737373;--rc-text-quaternary:#a3a3a3;--rc-bg:#fff;--rc-bg-secondary:#fafafa;--rc-bg-tertiary:#f5f5f5;--rc-fill:#e8e8e8;--rc-fill-secondary:#eee;--rc-fill-tertiary:#f5f5f5;--rc-fill-quaternary:#fafafa;--rc-border:#e8e8e8;--rc-border-subtle:#f0f0f0;--rc-accent:#2563eb;--rc-accent-light:color-mix(in oklab, var(--rc-accent) 12%, transparent);--rc-link:#2563eb;--rc-code-text:#404040;--rc-code-bg:#f5f5f5;--rc-code-header-bg:#f0f0f0;--rc-hr-border:#e8e8e8;--rc-quote-border:color-mix(in oklab, var(--rc-text) 18%, transparent);--rc-quote-bg:#f5f5f5;--rc-alert-info:#2f6db5;--rc-alert-warning:#b7791f;--rc-alert-tip:#2f855a;--rc-alert-caution:#c53030;--rc-alert-important:#6b46c1;--rc-max-width:700px;--rc-shadow-top-bar:0 8px 30px #0000001f, 0 2px 8px #0000000f;--rc-shadow-modal:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--rc-shadow-menu:0 1px 4px #0000000a, 0 4px 16px #00000014;--rc-space-xs:4px;--rc-space-sm:8px;--rc-space-md:16px;--rc-space-lg:24px;--rc-space-xl:32px;--rc-flow-paragraph:1.25em;--rc-flow-list:.375em;--rc-flow-block:2em;--rc-flow-heading:2em;--rc-font-family-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans SC", Roboto, Helvetica, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Noto 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-family-kai:"楷体", KaiTi, STKaiti, "Kaiti SC", "LXGW WenKai", "霞鹜文楷", "Noto Serif CJK SC", serif;--rc-font-mono:"SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, "PingFang SC", "Noto Sans SC", 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-font-size-code:.8125em;--rc-font-size-caption:.8125em;--rc-line-height:1.75;--rc-line-height-tight:1.35;--rc-line-height-compact:1.6;--rc-line-height-code:1.7;--rc-font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans SC", Roboto, Helvetica, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Noto Color Emoji";--rc-radius-sm:4px;--rc-radius-md:8px;--rc-radius-lg:12px}:root.dark,[data-theme=dark]{--rc-text:#ededed;--rc-text-secondary:#c2c2c2;--rc-text-tertiary:#8a8a8a;--rc-text-quaternary:#525252;--rc-bg:#0a0a0a;--rc-bg-secondary:#171717;--rc-bg-tertiary:#262626;--rc-fill:#2a2a2a;--rc-fill-secondary:#222;--rc-fill-tertiary:#1a1a1a;--rc-fill-quaternary:#141414;--rc-border:#2e2e2e;--rc-border-subtle:#1f1f1f;--rc-accent:#60a5fa;--rc-accent-light:color-mix(in oklab, var(--rc-accent) 12%, transparent);--rc-link:#60a5fa;--rc-code-text:#d4d4d4;--rc-code-bg:#1a1a1a;--rc-code-header-bg:#212121;--rc-hr-border:#2e2e2e;--rc-quote-border:color-mix(in oklab, var(--rc-text) 22%, transparent);--rc-quote-bg:#262626;--rc-alert-info:#7aa7e0;--rc-alert-warning:#e0a458;--rc-alert-tip:#6cbf8f;--rc-alert-caution:#ef7d7d;--rc-alert-important:#a78bfa;--rc-shadow-top-bar:0 8px 30px #00000073, 0 2px 8px #0000004d;--rc-shadow-modal:0 10px 15px -3px #0006, 0 4px 6px -4px #00000059;--rc-shadow-menu:0 1px 4px #00000040, 0 4px 16px #0006}.axx50{--rc-text:#171717;--rc-text-secondary:#404040;--rc-text-tertiary:#737373;--rc-text-quaternary:#a3a3a3;--rc-bg:#fff;--rc-bg-secondary:#fafafa;--rc-bg-tertiary:#f5f5f5;--rc-fill:#e8e8e8;--rc-fill-secondary:#eee;--rc-fill-tertiary:#f5f5f5;--rc-fill-quaternary:#fafafa;--rc-border:#e8e8e8;--rc-border-subtle:#f0f0f0;--rc-accent:#2563eb;--rc-accent-light:color-mix(in oklab, var(--rc-accent) 12%, transparent);--rc-link:#2563eb;--rc-code-text:#404040;--rc-code-bg:#f5f5f5;--rc-code-header-bg:#f0f0f0;--rc-hr-border:#e8e8e8;--rc-quote-border:color-mix(in oklab, var(--rc-text) 18%, transparent);--rc-quote-bg:#f5f5f5;--rc-alert-info:#2f6db5;--rc-alert-warning:#b7791f;--rc-alert-tip:#2f855a;--rc-alert-caution:#c53030;--rc-alert-important:#6b46c1;--rc-max-width:700px;--rc-shadow-top-bar:0 8px 30px #0000001f, 0 2px 8px #0000000f;--rc-shadow-modal:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--rc-shadow-menu:0 1px 4px #0000000a, 0 4px 16px #00000014;--rc-space-xs:4px;--rc-space-sm:8px;--rc-space-md:16px;--rc-space-lg:24px;--rc-space-xl:32px;--rc-flow-paragraph:1.25em;--rc-flow-list:.375em;--rc-flow-block:2em;--rc-flow-heading:2em;--rc-font-family-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans SC", Roboto, Helvetica, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Noto 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-family-kai:"楷体", KaiTi, STKaiti, "Kaiti SC", "LXGW WenKai", "霞鹜文楷", "Noto Serif CJK SC", serif;--rc-font-mono:"SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, "PingFang SC", "Noto Sans SC", 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-font-size-code:.8125em;--rc-font-size-caption:.8125em;--rc-line-height:1.75;--rc-line-height-tight:1.35;--rc-line-height-compact:1.6;--rc-line-height-code:1.7;--rc-font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans SC", Roboto, Helvetica, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Noto Color Emoji";--rc-radius-sm:4px;--rc-radius-md:8px;--rc-radius-lg:12px}.axx51{--rc-text:#171717;--rc-text-secondary:#404040;--rc-text-tertiary:#737373;--rc-text-quaternary:#a3a3a3;--rc-bg:#fff;--rc-bg-secondary:#fafafa;--rc-bg-tertiary:#f5f5f5;--rc-fill:#e8e8e8;--rc-fill-secondary:#eee;--rc-fill-tertiary:#f5f5f5;--rc-fill-quaternary:#fafafa;--rc-border:#e8e8e8;--rc-border-subtle:#f0f0f0;--rc-accent:#2563eb;--rc-accent-light:color-mix(in oklab, var(--rc-accent) 12%, transparent);--rc-link:#2563eb;--rc-code-text:#404040;--rc-code-bg:#f5f5f5;--rc-code-header-bg:#f0f0f0;--rc-hr-border:#e8e8e8;--rc-quote-border:color-mix(in oklab, var(--rc-text) 18%, transparent);--rc-quote-bg:#f5f5f5;--rc-alert-info:#2f6db5;--rc-alert-warning:#b7791f;--rc-alert-tip:#2f855a;--rc-alert-caution:#c53030;--rc-alert-important:#6b46c1;--rc-max-width:700px;--rc-shadow-top-bar:0 8px 30px #0000001f, 0 2px 8px #0000000f;--rc-shadow-modal:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--rc-shadow-menu:0 1px 4px #0000000a, 0 4px 16px #00000014;--rc-space-xs:4px;--rc-space-sm:8px;--rc-space-md:16px;--rc-space-lg:24px;--rc-space-xl:32px;--rc-flow-paragraph:.5em;--rc-flow-list:.375em;--rc-flow-block:2em;--rc-flow-heading:2em;--rc-font-family-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans SC", Roboto, Helvetica, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Noto 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-family-kai:"楷体", KaiTi, STKaiti, "Kaiti SC", "LXGW WenKai", "霞鹜文楷", "Noto Serif CJK SC", serif;--rc-font-mono:"SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, "PingFang SC", "Noto Sans SC", 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-font-size-code:.8125em;--rc-font-size-caption:.8125em;--rc-line-height:1.85;--rc-line-height-tight:1.35;--rc-line-height-compact:1.6;--rc-line-height-code:1.7;--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:#171717;--rc-text-secondary:#404040;--rc-text-tertiary:#737373;--rc-text-quaternary:#a3a3a3;--rc-bg:#fff;--rc-bg-secondary:#fafafa;--rc-bg-tertiary:#f5f5f5;--rc-fill:#e8e8e8;--rc-fill-secondary:#eee;--rc-fill-tertiary:#f5f5f5;--rc-fill-quaternary:#fafafa;--rc-border:#e8e8e8;--rc-border-subtle:#f0f0f0;--rc-accent:#2563eb;--rc-accent-light:color-mix(in oklab, var(--rc-accent) 12%, transparent);--rc-link:#2563eb;--rc-code-text:#404040;--rc-code-bg:#f5f5f5;--rc-code-header-bg:#f0f0f0;--rc-hr-border:#e8e8e8;--rc-quote-border:color-mix(in oklab, var(--rc-text) 18%, transparent);--rc-quote-bg:#fafafa;--rc-alert-info:#2f6db5;--rc-alert-warning:#b7791f;--rc-alert-tip:#2f855a;--rc-alert-caution:#c53030;--rc-alert-important:#6b46c1;--rc-max-width:none;--rc-shadow-top-bar:0 8px 30px #0000001f, 0 2px 8px #0000000f;--rc-shadow-modal:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--rc-shadow-menu:0 1px 4px #0000000a, 0 4px 16px #00000014;--rc-space-xs:2px;--rc-space-sm:4px;--rc-space-md:10px;--rc-space-lg:16px;--rc-space-xl:20px;--rc-flow-paragraph:.6em;--rc-flow-list:.25em;--rc-flow-block:1em;--rc-flow-heading:1em;--rc-font-family-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans SC", Roboto, Helvetica, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Noto 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-family-kai:"楷体", KaiTi, STKaiti, "Kaiti SC", "LXGW WenKai", "霞鹜文楷", "Noto Serif CJK SC", serif;--rc-font-mono:"SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, "PingFang SC", "Noto Sans SC", 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-font-size-code:.9286em;--rc-font-size-caption:.9286em;--rc-line-height:1.6;--rc-line-height-tight:1.3;--rc-line-height-compact:1.6;--rc-line-height-code:1.7;--rc-font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans SC", Roboto, Helvetica, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Noto Color Emoji";--rc-radius-sm:3px;--rc-radius-md:6px;--rc-radius-lg:12px}.axx53{--rc-text:#171717;--rc-text-secondary:#404040;--rc-text-tertiary:#737373;--rc-text-quaternary:#a3a3a3;--rc-bg:#fff;--rc-bg-secondary:#fafafa;--rc-bg-tertiary:#f5f5f5;--rc-fill:#e8e8e8;--rc-fill-secondary:#eee;--rc-fill-tertiary:#f5f5f5;--rc-fill-quaternary:#fafafa;--rc-border:#e8e8e8;--rc-border-subtle:#f0f0f0;--rc-accent:#2563eb;--rc-accent-light:color-mix(in oklab, var(--rc-accent) 12%, transparent);--rc-link:#2563eb;--rc-code-text:#404040;--rc-code-bg:#f5f5f5;--rc-code-header-bg:#f0f0f0;--rc-hr-border:#e8e8e8;--rc-quote-border:color-mix(in oklab, var(--rc-text) 18%, transparent);--rc-quote-bg:#fafafa;--rc-alert-info:#2f6db5;--rc-alert-warning:#b7791f;--rc-alert-tip:#2f855a;--rc-alert-caution:#c53030;--rc-alert-important:#6b46c1;--rc-max-width:none;--rc-shadow-top-bar:0 8px 30px #0000001f, 0 2px 8px #0000000f;--rc-shadow-modal:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--rc-shadow-menu:0 1px 4px #0000000a, 0 4px 16px #00000014;--rc-space-xs:4px;--rc-space-sm:8px;--rc-space-md:16px;--rc-space-lg:24px;--rc-space-xl:32px;--rc-flow-paragraph:.75em;--rc-flow-list:.25em;--rc-flow-block:1em;--rc-flow-heading:1em;--rc-font-family-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans SC", Roboto, Helvetica, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Noto 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-family-kai:"楷体", KaiTi, STKaiti, "Kaiti SC", "LXGW WenKai", "霞鹜文楷", "Noto Serif CJK SC", serif;--rc-font-mono:"SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, "PingFang SC", "Noto Sans SC", 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:15px;--rc-font-size-small:13px;--rc-font-size-code:.8667em;--rc-font-size-caption:.8667em;--rc-line-height:1.65;--rc-line-height-tight:1.3;--rc-line-height-compact:1.6;--rc-line-height-code:1.7;--rc-font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans SC", Roboto, Helvetica, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Noto Color Emoji";--rc-radius-sm:4px;--rc-radius-md:8px;--rc-radius-lg:12px}.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,.dark .axx53,[data-theme=dark] .axx53,.dark.axx53,[data-theme=dark].axx53{--rc-text:#ededed;--rc-text-secondary:#c2c2c2;--rc-text-tertiary:#8a8a8a;--rc-text-quaternary:#525252;--rc-bg:#0a0a0a;--rc-bg-secondary:#171717;--rc-bg-tertiary:#262626;--rc-fill:#2a2a2a;--rc-fill-secondary:#222;--rc-fill-tertiary:#1a1a1a;--rc-fill-quaternary:#141414;--rc-border:#2e2e2e;--rc-border-subtle:#1f1f1f;--rc-accent:#60a5fa;--rc-accent-light:color-mix(in oklab, var(--rc-accent) 12%, transparent);--rc-link:#60a5fa;--rc-code-text:#d4d4d4;--rc-code-bg:#1a1a1a;--rc-code-header-bg:#212121;--rc-hr-border:#2e2e2e;--rc-quote-border:color-mix(in oklab, var(--rc-text) 22%, transparent);--rc-quote-bg:#262626;--rc-alert-info:#7aa7e0;--rc-alert-warning:#e0a458;--rc-alert-tip:#6cbf8f;--rc-alert-caution:#ef7d7d;--rc-alert-important:#a78bfa;--rc-shadow-top-bar:0 8px 30px #00000073, 0 2px 8px #0000004d;--rc-shadow-modal:0 10px 15px -3px #0006, 0 4px 6px -4px #00000059;--rc-shadow-menu:0 1px 4px #00000040, 0 4px 16px #0006}._1pn9r4q0{min-width:0;max-width:100%;margin:var(--rc-flow-block) 0;border-radius:var(--rc-radius-md);border:1px solid var(--rc-border);background-color:var(--rc-code-bg);color:var(--rc-text);font-size:var(--rc-font-size-code);font-family:var(--rc-font-mono);line-height:var(--rc-line-height-code);position:relative;overflow:hidden}._1pn9r4q1{background-color:var(--rc-code-header-bg);border-bottom:1px solid var(--rc-border);height:36px;font-family:var(--rc-font-family-sans);color:var(--rc-text-tertiary);-webkit-user-select:none;user-select:none;justify-content:space-between;align-items:center;gap:.75rem;padding:0 6px 0 14px;font-size:12px;line-height:1;display:flex}._1pn9r4q2{-webkit-appearance:none;appearance:none;color:inherit;font:inherit;opacity:1;background:0 0;border:none;outline:none;width:8em;padding:0}._1pn9r4q2::placeholder{opacity:.5}._1pn9r4q3{white-space:nowrap;align-items:center;gap:8px;min-width:0;display:flex}._1pn9r4q4{border-radius:3px;flex-shrink:0;width:10px;height:10px}._1pn9r4q5{flex-shrink:0;display:inline-flex}._1pn9r4q5 svg{width:100%;height:100%}._1pn9r4q6{-webkit-appearance:none;appearance:none;color:var(--rc-text-tertiary);font:inherit;cursor:pointer;background:0 0;border:none;border-radius:6px;align-items:center;gap:6px;padding:6px 8px;transition:color .15s,background-color .15s;display:inline-flex}._1pn9r4q6:hover{color:var(--rc-text);background-color:var(--rc-fill)}._1pn9r4q7{padding:0;position:relative}._1pn9r4q8{padding-block-start:12px;padding-block-end:12px}._1pn9r4q9{width:100%;min-width:0;max-width:100%;position:relative;overflow:auto}._1pn9r4qa{max-height:50vh;overflow:hidden}._1pn9r4qb{min-width:0;max-width:100%;position:relative;overflow:auto;background-color:#0000!important}._1pn9r4qb .cm-editor{color:var(--rc-text);font-family:var(--rc-font-mono);background:0 0}._1pn9r4qb .cm-scroller{line-height:var(--rc-line-height-code);padding-block-start:12px;padding-block-end:12px;font-family:var(--rc-font-mono)!important}._1pn9r4qb .cm-content{min-height:calc(1em * var(--rc-line-height-code));padding:0 16px}._1pn9r4qb:has(.cm-gutters) .cm-content{padding-left:0;padding-right:16px}._1pn9r4qb .cm-line{padding:0}._1pn9r4qb .cm-gutters{background-color:#0000;border-right:none;padding-left:16px}._1pn9r4qb .cm-lineNumbers .cm-gutterElement{min-width:calc(var(--rc-ln-digits,2) * 1ch);text-align:right;padding:0 16px 0 0;color:var(--rc-text-quaternary)!important}._1pn9r4qb>.shikicode.output{position:static!important;top:auto!important;bottom:auto!important;left:auto!important;right:auto!important}._1pn9r4qc>textarea.shikicode{display:none}._1pn9r4qd{background:linear-gradient(to bottom, transparent, var(--rc-code-bg));pointer-events:none;height:56px;position:absolute;bottom:0;left:0;right:0}._1pn9r4qe{-webkit-appearance:none;appearance:none;border:none;border-top:1px solid var(--rc-border);background:var(--rc-code-bg);width:100%;height:32px;color:var(--rc-text-tertiary);font-family:var(--rc-font-family-sans);cursor:pointer;justify-content:center;align-items:center;gap:6px;font-size:12px;display:flex}._1pn9r4qe:hover{color:var(--rc-text)}._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,._1pn9r4qb pre,._1pn9r4qb code,._1pn9r4qb .line,._1pn9r4qb .line span{font-family:var(--rc-font-mono)!important}._1pn9r4q0 pre{border-radius:0;max-width:100%;font-size:1em;overflow:auto;margin:0!important;padding:0!important}._1pn9r4q0 ._1pn9r4q9>pre{padding:12px 0!important}._1pn9r4q0 pre code{flex-direction:column;display:flex;font-family:var(--rc-font-mono)!important}._1pn9r4q0 .shiki,._1pn9r4q0 code,._1pn9r4q0 pre{background:0 0!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;-webkit-text-decoration:var(--shiki-dark-text-decoration)!important;text-decoration:var(--shiki-dark-text-decoration)!important}._1pn9r4qb:has(.shikicode.input.line-numbers) .shikicode.output .line:before{min-width:calc(var(--rc-ln-digits,2) * 1ch);padding-right:16px;color:var(--rc-text-quaternary)!important;background-color:#0000!important}._1pn9r4qb:not(:has(.shikicode.input.line-numbers)) .shikicode.output .line:before{display:none}._1pn9r4q0 .line{padding:0 16px;display:block}._1pn9r4q0 .shikicode.input.line-numbers{padding-left:calc(2ch + 32px)}._1pn9r4q0 .shikicode.input:not(.line-numbers){padding-left:16px}._1pn9r4q0 .line>span:last-child{margin-right:16px}._1pn9r4q0 .line:after{content:" "}._1pn9r4q0 .highlighted,._1pn9r4q0 .diff{overflow-wrap:break-word;position:relative}._1pn9r4q0 .highlighted:before,._1pn9r4q0 .diff:before{content:"";width:2px;height:100%;position:absolute;top:0;left:0}._1pn9r4q0 .highlighted{background:color-mix(in oklab, var(--rc-accent) 8%, transparent)}._1pn9r4q0 .highlighted:before{background:var(--rc-accent)}._1pn9r4q0 .diff.add{background:#22c55e26}._1pn9r4q0 .diff.add:before{background:#22c55e}._1pn9r4q0 .diff.add:after{content:" +";color:#22c55e;position:absolute;left:0}._1pn9r4q0 .diff.remove{background:#ef444426}._1pn9r4q0 .diff.remove:before{background:#ef4444}._1pn9r4q0 .diff.remove:after{content:" -";color:#ef4444;position:absolute;left:0}._1pn9r4qf{counter-reset:shiki-line 0}._1pn9r4qf .line{counter-increment:shiki-line 1}._1pn9r4qf .line:before{content:counter(shiki-line);color:#0000;text-align:right;box-sizing:content-box;min-width:calc(var(--rc-ln-digits,2) * 1ch);display:inline-block;position:sticky;left:0}._1pn9r4qg .line:before{color:var(--rc-text-quaternary);min-width:calc(var(--rc-ln-digits,2) * 1ch);padding-right:16px}._1pn9r4q9 pre::-webkit-scrollbar-track{margin-left:1rem;margin-right:var(--sr-margin,0)}._1pn9r4q9 pre::-webkit-scrollbar{background-color:#0000!important}._1pn9r4qh{font-family:var(--rc-font-mono);font-size:var(--rc-font-size-code);line-height:var(--rc-line-height-code);color:var(--rc-text);background-color:var(--rc-code-bg);border-radius:var(--rc-radius-md);margin:var(--rc-flow-block) 0;border:1px solid var(--rc-border);display:block;overflow:hidden}._1pn9r4qi{background-color:var(--rc-code-header-bg);border-bottom:1px solid var(--rc-border);height:36px;font-family:var(--rc-font-family-sans);color:var(--rc-text-tertiary);-webkit-user-select:none;user-select:none;justify-content:space-between;align-items:center;padding:0 6px 0 14px;font-size:12px;line-height:1;display:flex}._1pn9r4qj{font-family:inherit}._1pn9r4qk{-webkit-appearance:none;appearance:none;color:var(--rc-text-tertiary);cursor:pointer;font-family:inherit;font-size:inherit;background:0 0;border:none;border-radius:6px;padding:6px 8px;line-height:1;transition:color .15s,background-color .15s}.rich-code-block{font-family:var(--rc-font-mono);font-size:var(--rc-font-size-code);line-height:var(--rc-line-height-code);color:var(--rc-text);background-color:var(--rc-code-bg);border-radius:var(--rc-radius-md);margin:var(--rc-flow-block) 0;border:1px solid var(--rc-border);display:block;overflow:hidden}.rich-code-block pre{margin:0;padding:12px 16px;overflow-x:auto}pre.rich-code-block,code.rich-code-block{white-space:pre;margin:0;padding:12px 16px;overflow-x:auto}.rich-code-block code{font-family:inherit;font-size:inherit;box-shadow:none;color:inherit;background:0 0;border:none;padding:0}.rich-code-block-header{background-color:var(--rc-code-header-bg);border-bottom:1px solid var(--rc-border);height:36px;font-family:var(--rc-font-family-sans);color:var(--rc-text-tertiary);-webkit-user-select:none;user-select:none;justify-content:space-between;align-items:center;padding:0 6px 0 14px;font-size:12px;line-height:1;display:flex}.rich-code-block-lang{font-family:inherit}.rich-code-block-copy{-webkit-appearance:none;appearance:none;color:var(--rc-text-tertiary);cursor:pointer;font-family:inherit;font-size:inherit;background:0 0;border:none;border-radius:6px;padding:6px 8px;line-height:1;transition:color .15s,background-color .15s}.rich-code-block-copy:hover{color:var(--rc-text);background-color:var(--rc-fill)}.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);min-width:calc(var(--rc-ln-digits,2) * 1ch);text-align:right;-webkit-user-select:none;user-select:none;margin-right:16px;display:inline-block;color:var(--rc-text-quaternary)!important}
2
2
  /*$vite$:1*/
@@ -1 +1 @@
1
- {"version":3,"file":"static.d.ts","sourceRoot":"","sources":["../src/static.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAE5E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3C,eAAO,MAAM,iBAAiB,EAAE,aAAa,CAAC,sBAAsB,CAMnE,CAAC"}
1
+ {"version":3,"file":"static.d.ts","sourceRoot":"","sources":["../src/static.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAG5E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3C,eAAO,MAAM,iBAAiB,EAAE,aAAa,CAAC,sBAAsB,CAUnE,CAAC"}
package/dist/static.mjs CHANGED
@@ -1,8 +1,11 @@
1
+ import { useVariant } from "@haklex/rich-editor/static";
1
2
  import { jsx } from "react/jsx-runtime";
2
3
  import { CodeBlock } from "@haklex/rich-editor-ui";
3
4
  //#region src/static.tsx
4
5
  var CodeBlockRenderer = ({ code, language, showLineNumbers }) => {
6
+ const variant = useVariant();
5
7
  return /* @__PURE__ */ jsx(CodeBlock, {
8
+ chrome: variant === "comment" || variant === "chat" ? "compact" : "bar",
6
9
  code,
7
10
  language,
8
11
  showLineNumbers
@@ -1,5 +1,6 @@
1
1
  export declare const semanticClassNames: {
2
2
  readonly card: "rr-code-card";
3
+ readonly header: "rr-code-header";
3
4
  readonly lang: "rr-code-lang";
4
5
  readonly langIcon: "rr-code-lang-icon";
5
6
  readonly copyButton: "rr-code-copy";
@@ -14,8 +15,10 @@ export declare const semanticClassNames: {
14
15
  readonly linedWithNumbers: "rr-code-lined-ln";
15
16
  };
16
17
  export declare const card: string;
18
+ export declare const header: string;
17
19
  export declare const langInput: string;
18
20
  export declare const lang: string;
21
+ export declare const langMark: string;
19
22
  export declare const langIcon: string;
20
23
  export declare const copyButton: string;
21
24
  export declare const bodyBackground: string;
@@ -1 +1 @@
1
- {"version":3,"file":"styles.css.d.ts","sourceRoot":"","sources":["../src/styles.css.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;CAcrB,CAAC;AAGX,eAAO,MAAM,IAAI,QAYf,CAAC;AAGH,eAAO,MAAM,SAAS,QAepB,CAAC;AAGH,eAAO,MAAM,IAAI,QAgBf,CAAC;AAEH,eAAO,MAAM,QAAQ,QAGnB,CAAC;AAQH,eAAO,MAAM,UAAU,QAuBrB,CAAC;AAGH,eAAO,MAAM,cAAc,QAIzB,CAAC;AAEH,eAAO,MAAM,oBAAoB,QAK/B,CAAC;AAGH,eAAO,MAAM,MAAM,QAMjB,CAAC;AAEH,eAAO,MAAM,eAAe,QAG1B,CAAC;AAGH,eAAO,MAAM,IAAI,QAMf,CAAC;AAEH,eAAO,MAAM,YAAY,QAAY,CAAC;AAoDtC,eAAO,MAAM,UAAU,QAUrB,CAAC;AAEH,eAAO,MAAM,YAAY,QAiBvB,CAAC;AAsIH,eAAO,MAAM,KAAK,QAEhB,CAAC;AAiBH,eAAO,MAAM,gBAAgB,QAAY,CAAC;AAmB1C,eAAO,MAAM,yBAAyB;;;;;;CAM5B,CAAC;AAiFX,eAAO,MAAM,WAAW,QAA2B,CAAC;AACpD,eAAO,MAAM,aAAa,QAA6B,CAAC;AACxD,eAAO,MAAM,WAAW,QAA2B,CAAC;AACpD,eAAO,MAAM,iBAAiB,QAAiC,CAAC"}
1
+ {"version":3,"file":"styles.css.d.ts","sourceRoot":"","sources":["../src/styles.css.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;CAerB,CAAC;AAGX,eAAO,MAAM,IAAI,QAaf,CAAC;AAEH,eAAO,MAAM,MAAM,QAcjB,CAAC;AAGH,eAAO,MAAM,SAAS,QAepB,CAAC;AAEH,eAAO,MAAM,IAAI,QAMf,CAAC;AAEH,eAAO,MAAM,QAAQ,QAKnB,CAAC;AAEH,eAAO,MAAM,QAAQ,QAGnB,CAAC;AAOH,eAAO,MAAM,UAAU,QAiBrB,CAAC;AAGH,eAAO,MAAM,cAAc,QAGzB,CAAC;AAEH,eAAO,MAAM,oBAAoB,QAK/B,CAAC;AAGH,eAAO,MAAM,MAAM,QAMjB,CAAC;AAEH,eAAO,MAAM,eAAe,QAG1B,CAAC;AAGH,eAAO,MAAM,IAAI,QAMf,CAAC;AAEH,eAAO,MAAM,YAAY,QAAY,CAAC;AAsDtC,eAAO,MAAM,UAAU,QAQrB,CAAC;AAEH,eAAO,MAAM,YAAY,QAkBvB,CAAC;AA0IH,eAAO,MAAM,KAAK,QAEhB,CAAC;AAiBH,eAAO,MAAM,gBAAgB,QAAY,CAAC;AAkB1C,eAAO,MAAM,yBAAyB;;;;;;CAM5B,CAAC;AAmFX,eAAO,MAAM,WAAW,QAA2B,CAAC;AACpD,eAAO,MAAM,aAAa,QAA6B,CAAC;AACxD,eAAO,MAAM,WAAW,QAA2B,CAAC;AACpD,eAAO,MAAM,iBAAiB,QAAiC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@haklex/rich-renderer-codeblock",
3
- "version": "0.49.1",
3
+ "version": "0.50.0",
4
4
  "description": "Code block renderer with Shiki syntax highlighting",
5
5
  "repository": {
6
6
  "type": "git",
@@ -40,7 +40,7 @@
40
40
  "@codemirror/commands": "^6.11.1",
41
41
  "@codemirror/state": "^6.7.6",
42
42
  "@codemirror/view": "^6.43.14",
43
- "@haklex/cm-editor": "0.49.1",
43
+ "@haklex/cm-editor": "0.50.0",
44
44
  "@iconify-json/material-icon-theme": "^1.2.72",
45
45
  "@iconify/utils": "^3.1.7"
46
46
  },
@@ -57,9 +57,9 @@
57
57
  "vite": "^8.3.4"
58
58
  },
59
59
  "peerDependencies": {
60
- "@haklex/rich-editor": "^0.49.1",
61
- "@haklex/rich-editor-ui": "^0.49.1",
62
- "@haklex/rich-style-token": "^0.49.1",
60
+ "@haklex/rich-editor": "^0.50.0",
61
+ "@haklex/rich-editor-ui": "^0.50.0",
62
+ "@haklex/rich-style-token": "^0.50.0",
63
63
  "lucide-react": "^1.0.0",
64
64
  "react": ">=19",
65
65
  "react-dom": ">=19",