ds-markdown 0.2.4-beta.1 → 0.2.4-beta.3

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.
Files changed (161) hide show
  1. package/README.en.md +2 -3
  2. package/README.md +2 -3
  3. package/es/AutoScroll/index.d.ts +7 -0
  4. package/es/AutoScroll/index.d.ts.map +1 -0
  5. package/es/AutoScroll/index.js +7 -0
  6. package/es/AutoScroll/index.js.map +1 -0
  7. package/es/Markdown/index.d.ts +5 -0
  8. package/es/Markdown/index.d.ts.map +1 -0
  9. package/es/Markdown/index.js +78 -0
  10. package/es/Markdown/index.js.map +1 -0
  11. package/es/MarkdownCMD/index.d.ts +13 -0
  12. package/es/MarkdownCMD/index.d.ts.map +1 -0
  13. package/es/MarkdownCMD/index.js +122 -0
  14. package/es/MarkdownCMD/index.js.map +1 -0
  15. package/es/components/CodeComponent/BlockWrap/index.css +64 -0
  16. package/es/components/CodeComponent/BlockWrap/index.d.ts +10 -0
  17. package/es/components/CodeComponent/BlockWrap/index.d.ts.map +1 -0
  18. package/es/components/CodeComponent/BlockWrap/index.js +20 -0
  19. package/es/components/CodeComponent/BlockWrap/index.js.map +1 -0
  20. package/es/components/CodeComponent/CodeBlockActions/index.d.ts +8 -0
  21. package/es/components/CodeComponent/CodeBlockActions/index.d.ts.map +1 -0
  22. package/es/components/CodeComponent/CodeBlockActions/index.js +8 -0
  23. package/es/components/CodeComponent/CodeBlockActions/index.js.map +1 -0
  24. package/es/components/CodeComponent/CodeBlockWrap/index.d.ts +8 -0
  25. package/es/components/CodeComponent/CodeBlockWrap/index.d.ts.map +1 -0
  26. package/es/components/CodeComponent/CodeBlockWrap/index.js +8 -0
  27. package/es/components/CodeComponent/CodeBlockWrap/index.js.map +1 -0
  28. package/es/components/CodeComponent/HighlightCode/index.d.ts +8 -0
  29. package/es/components/CodeComponent/HighlightCode/index.d.ts.map +1 -0
  30. package/es/components/CodeComponent/HighlightCode/index.js +7 -0
  31. package/es/components/CodeComponent/HighlightCode/index.js.map +1 -0
  32. package/es/components/CodeComponent/index.css +551 -0
  33. package/es/components/CodeComponent/index.d.ts +8 -0
  34. package/es/components/CodeComponent/index.d.ts.map +1 -0
  35. package/es/components/CodeComponent/index.js +11 -0
  36. package/es/components/CodeComponent/index.js.map +1 -0
  37. package/es/components/CopyButton/index.d.ts +9 -0
  38. package/es/components/CopyButton/index.d.ts.map +1 -0
  39. package/es/components/CopyButton/index.js +24 -0
  40. package/es/components/CopyButton/index.js.map +1 -0
  41. package/es/components/DownloadButton/index.d.ts +10 -0
  42. package/es/components/DownloadButton/index.d.ts.map +1 -0
  43. package/es/components/DownloadButton/index.js +61 -0
  44. package/es/components/DownloadButton/index.js.map +1 -0
  45. package/es/components/Icon/index.d.ts +12 -0
  46. package/es/components/Icon/index.d.ts.map +1 -0
  47. package/es/components/Icon/index.js +12 -0
  48. package/es/components/Icon/index.js.map +1 -0
  49. package/es/components/TableComponent/index.css +24 -0
  50. package/es/components/TableComponent/index.d.ts +8 -0
  51. package/es/components/TableComponent/index.d.ts.map +1 -0
  52. package/es/components/TableComponent/index.js +7 -0
  53. package/es/components/TableComponent/index.js.map +1 -0
  54. package/es/components/ui/Button/index.d.ts +12 -0
  55. package/es/components/ui/Button/index.d.ts.map +1 -0
  56. package/es/components/ui/Button/index.js +17 -0
  57. package/es/components/ui/Button/index.js.map +1 -0
  58. package/es/components/ui/IconButton/index.d.ts +9 -0
  59. package/es/components/ui/IconButton/index.d.ts.map +1 -0
  60. package/es/components/ui/IconButton/index.js +7 -0
  61. package/es/components/ui/IconButton/index.js.map +1 -0
  62. package/es/components/ui/Segmented/index.css +35 -0
  63. package/es/components/ui/Segmented/index.d.ts +14 -0
  64. package/es/components/ui/Segmented/index.d.ts.map +1 -0
  65. package/es/components/ui/Segmented/index.js +10 -0
  66. package/es/components/ui/Segmented/index.js.map +1 -0
  67. package/es/components/ui/SuccessButton/index.d.ts +11 -0
  68. package/es/components/ui/SuccessButton/index.d.ts.map +1 -0
  69. package/es/components/ui/SuccessButton/index.js +46 -0
  70. package/es/components/ui/SuccessButton/index.js.map +1 -0
  71. package/es/constant.d.ts +6 -0
  72. package/es/constant.d.ts.map +1 -0
  73. package/es/constant.js +7 -0
  74. package/es/constant.js.map +1 -0
  75. package/es/context/ConfigProvider/index.d.ts +40 -0
  76. package/es/context/ConfigProvider/index.d.ts.map +1 -0
  77. package/es/context/ConfigProvider/index.js +32 -0
  78. package/es/context/ConfigProvider/index.js.map +1 -0
  79. package/es/context/MarkdownProvider.d.ts +9 -0
  80. package/es/context/MarkdownProvider.d.ts.map +1 -0
  81. package/es/context/MarkdownProvider.js +10 -0
  82. package/es/context/MarkdownProvider.js.map +1 -0
  83. package/es/context/MarkdownThemeProvider.d.ts +21 -0
  84. package/es/context/MarkdownThemeProvider.d.ts.map +1 -0
  85. package/es/context/MarkdownThemeProvider.js +31 -0
  86. package/es/context/MarkdownThemeProvider.js.map +1 -0
  87. package/es/defined/index.d.ts +75 -0
  88. package/es/defined/index.d.ts.map +1 -0
  89. package/es/defined/index.js +3 -0
  90. package/es/defined/index.js.map +1 -0
  91. package/{dist/cjs/index.d.ts → es/defined/mermaid.type.d.ts} +6 -234
  92. package/es/defined/mermaid.type.d.ts.map +1 -0
  93. package/es/defined/mermaid.type.js +2 -0
  94. package/es/defined/mermaid.type.js.map +1 -0
  95. package/es/defined.css +481 -0
  96. package/{dist/cjs → es}/i18n/en/index.d.ts +4 -5
  97. package/es/i18n/en/index.d.ts.map +1 -0
  98. package/{dist/esm → es}/i18n/en/index.js +4 -4
  99. package/es/i18n/en/index.js.map +1 -0
  100. package/es/i18n/index.d.ts +7 -0
  101. package/es/i18n/index.d.ts.map +1 -0
  102. package/es/i18n/index.js +7 -0
  103. package/es/i18n/index.js.map +1 -0
  104. package/{dist/esm/i18n/en → es/i18n/zh}/index.d.ts +5 -6
  105. package/es/i18n/zh/index.d.ts.map +1 -0
  106. package/{dist/esm → es}/i18n/zh/index.js +4 -4
  107. package/es/i18n/zh/index.js.map +1 -0
  108. package/es/index.css +330 -0
  109. package/es/index.d.ts +23 -0
  110. package/es/index.d.ts.map +1 -0
  111. package/es/index.js +21 -0
  112. package/es/index.js.map +1 -0
  113. package/es/plugins/index.d.ts +6 -0
  114. package/es/plugins/index.d.ts.map +1 -0
  115. package/{dist/esm → es}/plugins/index.js +3 -11
  116. package/es/plugins/index.js.map +1 -0
  117. package/es/utils/Tokenizer.d.ts +48 -0
  118. package/es/utils/Tokenizer.d.ts.map +1 -0
  119. package/es/utils/Tokenizer.js +191 -0
  120. package/es/utils/Tokenizer.js.map +1 -0
  121. package/es/utils/compiler.d.ts +5 -0
  122. package/es/utils/compiler.d.ts.map +1 -0
  123. package/es/utils/compiler.js +62 -0
  124. package/es/utils/compiler.js.map +1 -0
  125. package/es/utils/grapheme.d.ts +2 -0
  126. package/es/utils/grapheme.d.ts.map +1 -0
  127. package/es/utils/grapheme.js +4 -0
  128. package/es/utils/grapheme.js.map +1 -0
  129. package/es/utils/methods/deepClone.d.ts +2 -0
  130. package/es/utils/methods/deepClone.d.ts.map +1 -0
  131. package/es/utils/methods/deepClone.js +4 -0
  132. package/es/utils/methods/deepClone.js.map +1 -0
  133. package/es/utils/remarkMathBracket.d.ts +21 -0
  134. package/es/utils/remarkMathBracket.d.ts.map +1 -0
  135. package/es/utils/remarkMathBracket.js +49 -0
  136. package/es/utils/remarkMathBracket.js.map +1 -0
  137. package/es/utils/rule.d.ts +26 -0
  138. package/es/utils/rule.d.ts.map +1 -0
  139. package/es/utils/rule.js +69 -0
  140. package/es/utils/rule.js.map +1 -0
  141. package/package.json +3 -3
  142. package/dist/cjs/i18n/en/index.js +0 -30
  143. package/dist/cjs/i18n/en/index.js.map +0 -1
  144. package/dist/cjs/i18n/zh/index.d.ts +0 -26
  145. package/dist/cjs/i18n/zh/index.js +0 -30
  146. package/dist/cjs/i18n/zh/index.js.map +0 -1
  147. package/dist/cjs/index.js +0 -1106
  148. package/dist/cjs/index.js.map +0 -1
  149. package/dist/cjs/plugins/index.d.ts +0 -20
  150. package/dist/cjs/plugins/index.js +0 -30
  151. package/dist/cjs/plugins/index.js.map +0 -1
  152. package/dist/esm/i18n/en/index.js.map +0 -1
  153. package/dist/esm/i18n/zh/index.d.ts +0 -26
  154. package/dist/esm/i18n/zh/index.js.map +0 -1
  155. package/dist/esm/index.d.ts +0 -1747
  156. package/dist/esm/index.js +0 -1084
  157. package/dist/esm/index.js.map +0 -1
  158. package/dist/esm/plugins/index.d.ts +0 -20
  159. package/dist/esm/plugins/index.js.map +0 -1
  160. /package/{dist → es}/katex.css +0 -0
  161. /package/{dist → es}/style.css +0 -0
package/README.en.md CHANGED
@@ -174,13 +174,14 @@ No installation required, use directly in the browser:
174
174
 
175
175
  ## 🚀 5-Minute Quick Start
176
176
 
177
+ > ✅ Starting from v1.0+, you no longer need to manually import `ds-markdown/style.css`; the component automatically injects the required base styles.
178
+
177
179
  ### Basic Usage
178
180
 
179
181
  [DEMO](https://stackblitz.com/edit/vitejs-vite-z94syu8j?file=src%2FApp.tsx)
180
182
 
181
183
  ```tsx
182
184
  import DsMarkdown from 'ds-markdown';
183
- import 'ds-markdown/style.css';
184
185
 
185
186
  function App() {
186
187
  return (
@@ -195,7 +196,6 @@ function App() {
195
196
 
196
197
  ```tsx
197
198
  import DsMarkdown from 'ds-markdown';
198
- import 'ds-markdown/style.css';
199
199
 
200
200
  function StaticDemo() {
201
201
  const [disableTyping, setDisableTyping] = useState(false);
@@ -281,7 +281,6 @@ Let's explore these new features together!`);
281
281
 
282
282
  ```tsx
283
283
  import DsMarkdown from 'ds-markdown';
284
- import 'ds-markdown/style.css';
285
284
 
286
285
  function CodeBlockDemo() {
287
286
  const codeContent = `# Hello World
package/README.md CHANGED
@@ -147,13 +147,14 @@ pnpm add ds-markdown
147
147
 
148
148
  ## 🚀 5分钟上手
149
149
 
150
+ > ✅ v1.0+版本开始,无需再手动 `import 'ds-markdown/style.css'`,组件会自动注入所需的基础样式。
151
+
150
152
  ### 基础用法
151
153
 
152
154
  [DEMO](https://stackblitz.com/edit/vitejs-vite-z94syu8j?file=src%2FApp.tsx)
153
155
 
154
156
  ```tsx
155
157
  import DsMarkdown from 'ds-markdown';
156
- import 'ds-markdown/style.css';
157
158
 
158
159
  function App() {
159
160
  return (
@@ -168,7 +169,6 @@ function App() {
168
169
 
169
170
  ```tsx
170
171
  import DsMarkdown from 'ds-markdown';
171
- import 'ds-markdown/style.css';
172
172
 
173
173
  function StaticDemo() {
174
174
  const [disableTyping, setDisableTyping] = useState(false);
@@ -252,7 +252,6 @@ React 19 带来了许多激动人心的新特性:
252
252
 
253
253
  ```tsx
254
254
  import DsMarkdown from 'ds-markdown';
255
- import 'ds-markdown/style.css';
256
255
 
257
256
  function CodeBlockDemo() {
258
257
  const codeContent = `# Hello World
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ interface AutoScrollProps {
3
+ children: React.ReactNode;
4
+ }
5
+ declare const AutoScroll: React.FC<AutoScrollProps>;
6
+ export default AutoScroll;
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/AutoScroll/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,UAAU,eAAe;IACvB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAGD,QAAA,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAEzC,CAAC;AAEF,eAAe,UAAU,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ const modulePrefix = 'AutoScroll';
3
+ const AutoScroll = (props) => {
4
+ return _jsx("div", { className: "ds-markdown_auto_scroll", children: props.children });
5
+ };
6
+ export default AutoScroll;
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/AutoScroll/index.tsx"],"names":[],"mappings":";AAMA,MAAM,YAAY,GAAG,YAAY,CAAC;AAClC,MAAM,UAAU,GAA8B,CAAC,KAAsB,EAAE,EAAE;IACvE,OAAO,cAAK,SAAS,EAAC,yBAAyB,YAAE,KAAK,CAAC,QAAQ,GAAO,CAAC;AACzE,CAAC,CAAC;AAEF,eAAe,UAAU,CAAC"}
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ import { MarkdownProps } from '../defined';
3
+ declare const _default: React.MemoExoticComponent<React.ForwardRefExoticComponent<MarkdownProps & React.RefAttributes<import("react-markdown-typer/es/defined").MarkdownBaseRef>>>;
4
+ export default _default;
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Markdown/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4E,MAAM,OAAO,CAAC;AAEjG,OAAO,EAAkB,aAAa,EAAe,MAAM,YAAY,CAAC;;AAgGxE,wBAA8B"}
@@ -0,0 +1,78 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { forwardRef, memo, useEffect, useImperativeHandle, useMemo, useRef } from 'react';
3
+ import { __DEV__ } from '../constant.js';
4
+ import MarkdownCMD from '../MarkdownCMD/index.js';
5
+ import { MarkdownProvider } from '../context/MarkdownProvider.js';
6
+ import { DEFAULT_ANSWER_TYPE, DEFAULT_PLUGINS, DEFAULT_THEME, MarkdownThemeProvider } from '../context/MarkdownThemeProvider.js';
7
+ const MarkdownInner = ({ children: _children = '', answerType = 'answer', markdownRef, ...rest }) => {
8
+ const cmdRef = useRef(null);
9
+ const prefixRef = useRef('');
10
+ const content = useMemo(() => {
11
+ if (typeof _children === 'string') {
12
+ return _children;
13
+ }
14
+ if (__DEV__) {
15
+ console.error('The children of Markdown component must be a string');
16
+ }
17
+ return '';
18
+ }, [_children]);
19
+ useEffect(() => {
20
+ if (prefixRef.current !== content) {
21
+ let newContent = '';
22
+ if (prefixRef.current === '') {
23
+ newContent = content;
24
+ }
25
+ else {
26
+ if (content.startsWith(prefixRef.current)) {
27
+ newContent = content.slice(prefixRef.current.length);
28
+ }
29
+ else {
30
+ newContent = content;
31
+ cmdRef.current.clear();
32
+ }
33
+ }
34
+ cmdRef.current.push(newContent, answerType);
35
+ prefixRef.current = content;
36
+ }
37
+ }, [answerType, content]);
38
+ useImperativeHandle(markdownRef, () => ({
39
+ stop: () => {
40
+ cmdRef.current.stop();
41
+ },
42
+ resume: () => {
43
+ cmdRef.current.resume();
44
+ },
45
+ start: () => {
46
+ cmdRef.current.start();
47
+ },
48
+ restart: () => {
49
+ cmdRef.current.restart();
50
+ },
51
+ }));
52
+ // 从 props 中获取 interval,如果没有则使用默认值 30
53
+ const interval = 'interval' in rest ? rest.interval : 30;
54
+ return _jsx(MarkdownCMD, { ref: cmdRef, ...rest, interval: interval, answerType: answerType, isInnerRender: true });
55
+ };
56
+ const Markdown = forwardRef((props, ref) => {
57
+ const { children = '', answerType = 'answer', ...reset } = props;
58
+ if (__DEV__) {
59
+ if (!['thinking', 'answer'].includes(answerType)) {
60
+ throw new Error('The answerType of Markdown component must be thinking or answer');
61
+ }
62
+ if (typeof children !== 'string') {
63
+ throw new Error('The children of Markdown component must be a string');
64
+ }
65
+ }
66
+ const contextValue = useMemo(() => ({ ...reset, answerType }), [reset, answerType]);
67
+ // 分离主题相关的 props
68
+ const themeProps = useMemo(() => ({
69
+ theme: props.theme || DEFAULT_THEME,
70
+ math: props.math,
71
+ codeBlock: props.codeBlock,
72
+ plugins: props.plugins || DEFAULT_PLUGINS,
73
+ answerType: props.answerType || DEFAULT_ANSWER_TYPE,
74
+ }), [props.theme, props.math, props.codeBlock, props.plugins, props.answerType]);
75
+ return (_jsx(MarkdownProvider, { value: contextValue, children: _jsx(MarkdownThemeProvider, { value: themeProps, children: _jsx(MarkdownInner, { ...props, answerType: answerType, markdownRef: ref }) }) }));
76
+ });
77
+ export default memo(Markdown);
78
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Markdown/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { AnswerType, IMarkdownCode, IMarkdownMath, IMarkdownPlugin, MarkdownCMDRef, Theme } from '../defined';
2
+ import { MarkdownTyperCMDProps } from 'react-markdown-typer';
3
+ interface IMarkdownCustom {
4
+ answerType?: AnswerType;
5
+ theme?: Theme;
6
+ codeBlock?: IMarkdownCode;
7
+ plugins?: IMarkdownPlugin[];
8
+ math?: IMarkdownMath;
9
+ isInnerRender?: boolean;
10
+ }
11
+ declare const MarkdownCMD: import("react").ForwardRefExoticComponent<MarkdownTyperCMDProps & IMarkdownCustom & import("react").RefAttributes<MarkdownCMDRef>>;
12
+ export default MarkdownCMD;
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/MarkdownCMD/index.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAE9G,OAAO,EAAyC,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAOpG,UAAU,eAAe;IACvB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;IAC5B,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAmHD,QAAA,MAAM,WAAW,oIAsCf,CAAC;AAEH,eAAe,WAAW,CAAC"}
@@ -0,0 +1,122 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ /* eslint-disable @typescript-eslint/no-explicit-any */
3
+ import { forwardRef, useCallback, useImperativeHandle, useMemo, useRef } from 'react';
4
+ import gfmPlugin from 'remark-gfm';
5
+ import classNames from 'classnames';
6
+ import { __DEV__, katexId } from '../constant.js';
7
+ import { MarkdownTyperCMD } from 'react-markdown-typer';
8
+ import { DEFAULT_ANSWER_TYPE, DEFAULT_PLUGINS, DEFAULT_THEME, MarkdownThemeProvider, useMarkdownThemeContext } from '../context/MarkdownThemeProvider.js';
9
+ import { MarkdownProvider } from '../context/MarkdownProvider.js';
10
+ import { useConfig } from '../context/ConfigProvider/index.js';
11
+ import { replaceMathBracket } from '../utils/remarkMathBracket.js';
12
+ import CodeComponent from '../components/CodeComponent/index.js';
13
+ const MarkdownCMDInner = forwardRef(({ answerType = 'answer', ...rest }, ref) => {
14
+ var _a, _b;
15
+ const { state: themeState } = useMarkdownThemeContext();
16
+ const cmdRef = useRef(null);
17
+ // 从 context 中获取主题配置
18
+ const currentTheme = themeState.theme;
19
+ useImperativeHandle(ref, () => ({
20
+ push: cmdRef.current.push,
21
+ clear: cmdRef.current.clear,
22
+ triggerWholeEnd: cmdRef.current.triggerWholeEnd,
23
+ stop: cmdRef.current.stop,
24
+ resume: cmdRef.current.resume,
25
+ start: cmdRef.current.start,
26
+ restart: cmdRef.current.restart,
27
+ }));
28
+ const { katexConfig } = useConfig();
29
+ // 从 context 中获取主题配置
30
+ const currentMath = themeState.math;
31
+ const currentPlugins = themeState.plugins;
32
+ const mathSplitSymbol = (_a = currentMath === null || currentMath === void 0 ? void 0 : currentMath.splitSymbol) !== null && _a !== void 0 ? _a : 'dollar';
33
+ const finalReplaceMathBracket = (_b = currentMath === null || currentMath === void 0 ? void 0 : currentMath.replaceMathBracket) !== null && _b !== void 0 ? _b : replaceMathBracket;
34
+ const { remarkPlugins, rehypePlugins, hasKatexPlugin, components } = useMemo(() => {
35
+ let hasKatexPlugin = false;
36
+ const components = {};
37
+ const remarkPlugins = [gfmPlugin];
38
+ const rehypePlugins = [];
39
+ if (!currentPlugins) {
40
+ return {
41
+ remarkPlugins,
42
+ rehypePlugins,
43
+ };
44
+ }
45
+ currentPlugins.forEach((plugin) => {
46
+ if (plugin.id === katexId) {
47
+ hasKatexPlugin = true;
48
+ remarkPlugins.push(plugin.remarkPlugin);
49
+ rehypePlugins.push([plugin.rehypePlugin, katexConfig]);
50
+ }
51
+ else {
52
+ if (plugin.rehypePlugin) {
53
+ rehypePlugins.push(plugin.rehypePlugin);
54
+ }
55
+ if (plugin.remarkPlugin) {
56
+ remarkPlugins.push(plugin.remarkPlugin);
57
+ }
58
+ }
59
+ if (plugin.components) {
60
+ Object.assign(components, plugin.components);
61
+ }
62
+ });
63
+ return {
64
+ remarkPlugins,
65
+ rehypePlugins,
66
+ hasKatexPlugin,
67
+ components,
68
+ };
69
+ }, [currentPlugins, katexConfig]);
70
+ const customConvertMarkdownString = useCallback((markdownString) => {
71
+ /** 如果存在数学公式插件,并且数学公式分隔符为括号,则替换成 $ 符号 */
72
+ if (hasKatexPlugin && mathSplitSymbol === 'bracket') {
73
+ return finalReplaceMathBracket(markdownString);
74
+ }
75
+ return markdownString;
76
+ }, [finalReplaceMathBracket, hasKatexPlugin, mathSplitSymbol]);
77
+ return (_jsx("div", { className: classNames({
78
+ 'ds-markdown': true,
79
+ apple: true,
80
+ 'ds-markdown-dark': currentTheme === 'dark',
81
+ }), children: _jsx("div", { className: `ds-markdown-${answerType}`, children: _jsx(MarkdownTyperCMD, { ref: cmdRef, customConvertMarkdownString: customConvertMarkdownString, ...rest, reactMarkdownProps: {
82
+ remarkPlugins,
83
+ rehypePlugins,
84
+ components: {
85
+ code: CodeComponent,
86
+ table: ({ children, ...props }) => {
87
+ return (_jsx("div", { className: "markdown-table-wrapper", children: _jsx("table", { className: "ds-markdown-table", children: children }) }));
88
+ },
89
+ ...components,
90
+ },
91
+ } }) }) }));
92
+ });
93
+ if (__DEV__) {
94
+ MarkdownCMDInner.displayName = 'MarkdownCMD';
95
+ }
96
+ const MarkdownCMD = forwardRef((props, ref) => {
97
+ const { children = '', answerType = 'answer', isInnerRender, ...reset } = props;
98
+ if (__DEV__) {
99
+ if (!['thinking', 'answer'].includes(answerType)) {
100
+ throw new Error('The answerType of MarkdownCMD component must be thinking or answer');
101
+ }
102
+ if (typeof children !== 'string') {
103
+ throw new Error('The children of MarkdownCMD component must be a string');
104
+ }
105
+ }
106
+ const contextValue = useMemo(() => ({ ...reset, answerType }), [reset, answerType]);
107
+ // 分离主题相关的 props
108
+ const themeProps = useMemo(() => ({
109
+ theme: props.theme || DEFAULT_THEME,
110
+ math: props.math,
111
+ codeBlock: props.codeBlock,
112
+ plugins: props.plugins || DEFAULT_PLUGINS,
113
+ answerType: props.answerType || DEFAULT_ANSWER_TYPE,
114
+ }), [props.theme, props.math, props.codeBlock, props.plugins, props.answerType]);
115
+ if (isInnerRender) {
116
+ // 内部渲染,外层已经 context 传递了 props,这里不再重复传递
117
+ return _jsx(MarkdownCMDInner, { ...props, ref: ref });
118
+ }
119
+ return (_jsx(MarkdownProvider, { value: contextValue, children: _jsx(MarkdownThemeProvider, { value: themeProps, children: _jsx(MarkdownCMDInner, { ...props, ref: ref }) }) }));
120
+ });
121
+ export default MarkdownCMD;
122
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/MarkdownCMD/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ .md-code-block {
2
+ --ds-md-code-block-border-radius: 12px;
3
+ --ds-md-code-block-font-size: calc(var(--ds-md-zoom) * var(--ds-font-size-xsp));
4
+ border-radius: var(--ds-md-code-block-border-radius);
5
+ font-size: var(--ds-md-code-block-font-size);
6
+ line-height: calc(var(--ds-md-code-block-font-size) * 1.6);
7
+ }
8
+ .md-code-block-light {
9
+ --ds-md-code-block-border-color: #e5e5e5;
10
+ --ds-md-code-block-banner-wrap-background-color: white;
11
+ --ds-md-code-banner-background-color: #f5f5f5;
12
+ color: #494949;
13
+ background: #fafafa;
14
+ }
15
+ .md-code-block-banner {
16
+ border-top-left-radius: var(--ds-md-code-block-border-radius);
17
+ border-top-right-radius: var(--ds-md-code-block-border-radius);
18
+ }
19
+ .md-code-block-banner-lite {
20
+ padding: 0;
21
+ }
22
+ .md-code-block-banner-content {
23
+ justify-content: space-between;
24
+ align-items: center;
25
+ padding: 6px 14px 6px 6px;
26
+ display: flex;
27
+ }
28
+ .md-code-block-language {
29
+ color: var(--dsr-text-2);
30
+ margin-left: 8px;
31
+ font-size: 12px;
32
+ line-height: 18px;
33
+ display: flex;
34
+ align-items: center;
35
+ }
36
+ .md-code-block-content {
37
+ padding: 4px 12px;
38
+ }
39
+ /* Header actions container */
40
+ .md-code-block-header-actions {
41
+ display: flex;
42
+ align-items: center;
43
+ gap: 8px;
44
+ }
45
+ /* Action button base styles */
46
+ .md-code-block-action-btn {
47
+ display: flex;
48
+ align-items: center;
49
+ gap: 4px;
50
+ padding: 4px 8px;
51
+ border: none;
52
+ border-radius: 4px;
53
+ font-size: 12px;
54
+ line-height: 1;
55
+ cursor: pointer;
56
+ transition: all 0.2s ease;
57
+ background: transparent;
58
+ color: inherit;
59
+ white-space: nowrap;
60
+ user-select: none;
61
+ }
62
+ .md-code-block-action-btn span {
63
+ font-weight: 500;
64
+ }
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ import './index.less';
3
+ interface BlockWrapProps {
4
+ children: React.ReactNode;
5
+ language: string;
6
+ codeContent?: string;
7
+ }
8
+ declare const BlockWrap: React.FC<BlockWrapProps>;
9
+ export default BlockWrap;
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/CodeComponent/BlockWrap/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,OAAO,cAAc,CAAC;AAEtB,UAAU,cAAc;IACtB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,QAAA,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CAyBvC,CAAC;AAEF,eAAe,SAAS,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useMarkdownThemeContext } from '../../../context/MarkdownThemeProvider.js';
3
+ import CodeBlockWrap from '../CodeBlockWrap/index.js';
4
+ import CodeBlockActions from '../CodeBlockActions/index.js';
5
+ import './index.css';
6
+ const BlockWrap = ({ children, language, codeContent }) => {
7
+ const { state: themeState } = useMarkdownThemeContext();
8
+ // 从 context 中获取主题配置
9
+ const currentCodeBlock = themeState.codeBlock;
10
+ const { headerActions = true } = currentCodeBlock || {};
11
+ const renderHeaderActions = () => {
12
+ if (headerActions === true) {
13
+ return _jsx(CodeBlockActions, { codeContent: codeContent, language: language });
14
+ }
15
+ return headerActions;
16
+ };
17
+ return (_jsx(CodeBlockWrap, { title: _jsxs(_Fragment, { children: [_jsx("div", { className: "md-code-block-language", children: language }), renderHeaderActions()] }), children: children }));
18
+ };
19
+ export default BlockWrap;
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/CodeComponent/BlockWrap/index.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AACjF,OAAO,aAAa,MAAM,kBAAkB,CAAC;AAC7C,OAAO,gBAAgB,MAAM,qBAAqB,CAAC;AAEnD,OAAO,cAAc,CAAC;AAQtB,MAAM,SAAS,GAA6B,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,EAAE;IAClF,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,uBAAuB,EAAE,CAAC;IAExD,oBAAoB;IACpB,MAAM,gBAAgB,GAAG,UAAU,CAAC,SAAS,CAAC;IAC9C,MAAM,EAAE,aAAa,GAAG,IAAI,EAAE,GAAG,gBAAgB,IAAI,EAAE,CAAC;IACxD,MAAM,mBAAmB,GAAG,GAAG,EAAE;QAC/B,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;YAC3B,OAAO,KAAC,gBAAgB,IAAC,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,GAAI,CAAC;QAC5E,CAAC;QACD,OAAO,aAAa,CAAC;IACvB,CAAC,CAAC;IAEF,OAAO,CACL,KAAC,aAAa,IACZ,KAAK,EACH,8BACE,cAAK,SAAS,EAAC,wBAAwB,YAAE,QAAQ,GAAO,EACvD,mBAAmB,EAAE,IACrB,YAGJ,QAAQ,GACK,CACjB,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,SAAS,CAAC"}
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ interface CodeBlockActionsProps {
3
+ codeContent?: string;
4
+ language: string;
5
+ }
6
+ declare const CodeBlockActions: React.FC<CodeBlockActionsProps>;
7
+ export default CodeBlockActions;
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/CodeComponent/CodeBlockActions/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,UAAU,qBAAqB;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,QAAA,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CAOrD,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import CopyButton from '../../CopyButton/index.js';
3
+ import DownloadButton from '../../DownloadButton/index.js';
4
+ const CodeBlockActions = ({ codeContent, language }) => {
5
+ return (_jsxs("div", { className: "md-code-block-header-actions", children: [_jsx(CopyButton, { codeContent: codeContent, style: { fontSize: 13, padding: '0 4px' } }), _jsx(DownloadButton, { codeContent: codeContent, language: language, style: { fontSize: 13, padding: '0 4px' } })] }));
6
+ };
7
+ export default CodeBlockActions;
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/CodeComponent/CodeBlockActions/index.tsx"],"names":[],"mappings":";AACA,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAC1C,OAAO,cAAc,MAAM,sBAAsB,CAAC;AAOlD,MAAM,gBAAgB,GAAoC,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,EAAE;IACtF,OAAO,CACL,eAAK,SAAS,EAAC,8BAA8B,aAC3C,KAAC,UAAU,IAAC,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,GAAI,EACnF,KAAC,cAAc,IAAC,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,GAAI,IACvG,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ interface CodeBlockWrapProps {
3
+ children: React.ReactNode;
4
+ title: React.ReactNode;
5
+ }
6
+ declare const CodeBlockWrap: React.FC<CodeBlockWrapProps>;
7
+ export default CodeBlockWrap;
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/CodeComponent/CodeBlockWrap/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;CACxB;AAED,QAAA,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAU/C,CAAC;AAEF,eAAe,aAAa,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useThemeState } from '../../../context/MarkdownThemeProvider.js';
3
+ const CodeBlockWrap = ({ children, title }) => {
4
+ const { theme } = useThemeState();
5
+ return (_jsxs("div", { className: `md-code-block md-code-block-${theme}`, children: [_jsx("div", { className: "md-code-block-banner-wrap", children: _jsx("div", { className: "md-code-block-banner md-code-block-banner-lite", children: title }) }), _jsx("div", { className: "md-code-block-content", children: children })] }));
6
+ };
7
+ export default CodeBlockWrap;
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/CodeComponent/CodeBlockWrap/index.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAOvE,MAAM,aAAa,GAAiC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE;IAC1E,MAAM,EAAE,KAAK,EAAE,GAAG,aAAa,EAAE,CAAC;IAClC,OAAO,CACL,eAAK,SAAS,EAAE,+BAA+B,KAAK,EAAE,aACpD,cAAK,SAAS,EAAC,2BAA2B,YACxC,cAAK,SAAS,EAAC,gDAAgD,YAAE,KAAK,GAAO,GACzE,EACN,cAAK,SAAS,EAAC,uBAAuB,YAAE,QAAQ,GAAO,IACnD,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,aAAa,CAAC"}
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ interface HighlightCodeProps {
3
+ code: string;
4
+ language: string;
5
+ }
6
+ declare const HighlightCode: React.FC<HighlightCodeProps>;
7
+ export default HighlightCode;
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/CodeComponent/HighlightCode/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,UAAU,kBAAkB;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,QAAA,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAM/C,CAAC;AAEF,eAAe,aAAa,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Prism as SyntaxHighlighter } from 'react-syntax-highlighter';
3
+ const HighlightCode = ({ code, language }) => {
4
+ return (_jsx(SyntaxHighlighter, { useInlineStyles: false, language: language, style: {}, children: code }));
5
+ };
6
+ export default HighlightCode;
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/CodeComponent/HighlightCode/index.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,KAAK,IAAI,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAOtE,MAAM,aAAa,GAAiC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;IACzE,OAAO,CACL,KAAC,iBAAiB,IAAC,eAAe,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,YACrE,IAAI,GACa,CACrB,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,aAAa,CAAC"}