ds-markdown 0.1.3 → 0.1.4-beta.1

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 (92) hide show
  1. package/dist/cjs/index.d.ts +98 -6
  2. package/dist/cjs/index.js +670 -12
  3. package/dist/cjs/index.js.map +1 -1
  4. package/dist/cjs/plugins/index.d.ts +8 -1
  5. package/dist/cjs/plugins/index.js +15 -14
  6. package/dist/cjs/plugins/index.js.map +1 -1
  7. package/dist/esm/index.d.ts +98 -6
  8. package/dist/esm/index.js +664 -5
  9. package/dist/esm/index.js.map +1 -1
  10. package/dist/esm/plugins/index.d.ts +8 -1
  11. package/dist/esm/plugins/index.js +7 -2
  12. package/dist/esm/plugins/index.js.map +1 -1
  13. package/package.json +16 -6
  14. package/dist/cjs/AutoScroll/index.d.ts +0 -6
  15. package/dist/cjs/AutoScroll/index.js +0 -9
  16. package/dist/cjs/AutoScroll/index.js.map +0 -1
  17. package/dist/cjs/Markdown/index.d.ts +0 -4
  18. package/dist/cjs/Markdown/index.js +0 -70
  19. package/dist/cjs/Markdown/index.js.map +0 -1
  20. package/dist/cjs/MarkdownCMD/index.d.ts +0 -3
  21. package/dist/cjs/MarkdownCMD/index.js +0 -197
  22. package/dist/cjs/MarkdownCMD/index.js.map +0 -1
  23. package/dist/cjs/components/BlockWrap/index.d.ts +0 -9
  24. package/dist/cjs/components/BlockWrap/index.js +0 -8
  25. package/dist/cjs/components/BlockWrap/index.js.map +0 -1
  26. package/dist/cjs/components/HighReactMarkdown/index.d.ts +0 -11
  27. package/dist/cjs/components/HighReactMarkdown/index.js +0 -58
  28. package/dist/cjs/components/HighReactMarkdown/index.js.map +0 -1
  29. package/dist/cjs/constant.d.ts +0 -3
  30. package/dist/cjs/constant.js +0 -7
  31. package/dist/cjs/constant.js.map +0 -1
  32. package/dist/cjs/defined.d.ts +0 -132
  33. package/dist/cjs/defined.js +0 -3
  34. package/dist/cjs/defined.js.map +0 -1
  35. package/dist/cjs/hooks/useTypingTask.d.ts +0 -32
  36. package/dist/cjs/hooks/useTypingTask.js +0 -339
  37. package/dist/cjs/hooks/useTypingTask.js.map +0 -1
  38. package/dist/cjs/package.json +0 -1
  39. package/dist/cjs/utils/Tokenizer.d.ts +0 -47
  40. package/dist/cjs/utils/Tokenizer.js +0 -196
  41. package/dist/cjs/utils/Tokenizer.js.map +0 -1
  42. package/dist/cjs/utils/compiler.d.ts +0 -4
  43. package/dist/cjs/utils/compiler.js +0 -65
  44. package/dist/cjs/utils/compiler.js.map +0 -1
  45. package/dist/cjs/utils/methods/deepClone.d.ts +0 -1
  46. package/dist/cjs/utils/methods/deepClone.js +0 -7
  47. package/dist/cjs/utils/methods/deepClone.js.map +0 -1
  48. package/dist/cjs/utils/remarkMathBracket.d.ts +0 -7
  49. package/dist/cjs/utils/remarkMathBracket.js +0 -40
  50. package/dist/cjs/utils/remarkMathBracket.js.map +0 -1
  51. package/dist/cjs/utils/rule.d.ts +0 -25
  52. package/dist/cjs/utils/rule.js +0 -72
  53. package/dist/cjs/utils/rule.js.map +0 -1
  54. package/dist/esm/AutoScroll/index.d.ts +0 -6
  55. package/dist/esm/AutoScroll/index.js +0 -7
  56. package/dist/esm/AutoScroll/index.js.map +0 -1
  57. package/dist/esm/Markdown/index.d.ts +0 -4
  58. package/dist/esm/Markdown/index.js +0 -65
  59. package/dist/esm/Markdown/index.js.map +0 -1
  60. package/dist/esm/MarkdownCMD/index.d.ts +0 -3
  61. package/dist/esm/MarkdownCMD/index.js +0 -192
  62. package/dist/esm/MarkdownCMD/index.js.map +0 -1
  63. package/dist/esm/components/BlockWrap/index.d.ts +0 -9
  64. package/dist/esm/components/BlockWrap/index.js +0 -6
  65. package/dist/esm/components/BlockWrap/index.js.map +0 -1
  66. package/dist/esm/components/HighReactMarkdown/index.d.ts +0 -11
  67. package/dist/esm/components/HighReactMarkdown/index.js +0 -53
  68. package/dist/esm/components/HighReactMarkdown/index.js.map +0 -1
  69. package/dist/esm/constant.d.ts +0 -3
  70. package/dist/esm/constant.js +0 -4
  71. package/dist/esm/constant.js.map +0 -1
  72. package/dist/esm/defined.d.ts +0 -132
  73. package/dist/esm/defined.js +0 -2
  74. package/dist/esm/defined.js.map +0 -1
  75. package/dist/esm/hooks/useTypingTask.d.ts +0 -32
  76. package/dist/esm/hooks/useTypingTask.js +0 -335
  77. package/dist/esm/hooks/useTypingTask.js.map +0 -1
  78. package/dist/esm/utils/Tokenizer.d.ts +0 -47
  79. package/dist/esm/utils/Tokenizer.js +0 -191
  80. package/dist/esm/utils/Tokenizer.js.map +0 -1
  81. package/dist/esm/utils/compiler.d.ts +0 -4
  82. package/dist/esm/utils/compiler.js +0 -62
  83. package/dist/esm/utils/compiler.js.map +0 -1
  84. package/dist/esm/utils/methods/deepClone.d.ts +0 -1
  85. package/dist/esm/utils/methods/deepClone.js +0 -4
  86. package/dist/esm/utils/methods/deepClone.js.map +0 -1
  87. package/dist/esm/utils/remarkMathBracket.d.ts +0 -7
  88. package/dist/esm/utils/remarkMathBracket.js +0 -36
  89. package/dist/esm/utils/remarkMathBracket.js.map +0 -1
  90. package/dist/esm/utils/rule.d.ts +0 -25
  91. package/dist/esm/utils/rule.js +0 -69
  92. package/dist/esm/utils/rule.js.map +0 -1
@@ -1,192 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { forwardRef, useImperativeHandle, useRef, useState } from 'react';
3
- import HighReactMarkdown from '../components/HighReactMarkdown/index.js';
4
- import classNames from 'classnames';
5
- import { __DEV__ } from '../constant.js';
6
- import { useTypingTask } from '../hooks/useTypingTask.js';
7
- const MarkdownCMD = forwardRef(({ interval = 30, onEnd, onStart, onTypedChar, onBeforeTypedChar, timerType = 'setTimeout', theme = 'light', math, plugins, disableTyping = false, autoStartTyping = true }, ref) => {
8
- /** 是否自动开启打字动画, 后面发生变化将不会生效 */
9
- const autoStartTypingRef = useRef(autoStartTyping);
10
- /** 是否打过字 */
11
- const isStartedTypingRef = useRef(false);
12
- /** 当前需要打字的内容 */
13
- const charsRef = useRef([]);
14
- /**
15
- * 打字是否已经完全结束
16
- * 如果打字已经完全结束,则不会再触发打字效果
17
- */
18
- const isWholeTypedEndRef = useRef(false);
19
- const charIndexRef = useRef(0);
20
- /** 整个内容引用 */
21
- const wholeContentRef = useRef({
22
- thinking: {
23
- content: '',
24
- length: 0,
25
- prevLength: 0,
26
- },
27
- answer: {
28
- content: '',
29
- length: 0,
30
- prevLength: 0,
31
- },
32
- allLength: 0,
33
- });
34
- const [, setUpdate] = useState(0);
35
- const triggerUpdate = () => {
36
- setUpdate((prev) => prev + 1);
37
- };
38
- /**
39
- * 处理字符显示逻辑
40
- */
41
- const processCharDisplay = (char) => {
42
- if (!isStartedTypingRef.current) {
43
- isStartedTypingRef.current = true;
44
- }
45
- if (char.answerType === 'thinking') {
46
- wholeContentRef.current.thinking.content += char.content;
47
- wholeContentRef.current.thinking.length += 1;
48
- }
49
- else {
50
- wholeContentRef.current.answer.content += char.content;
51
- wholeContentRef.current.answer.length += 1;
52
- }
53
- triggerUpdate();
54
- };
55
- const resetWholeContent = () => {
56
- wholeContentRef.current.thinking.content = '';
57
- wholeContentRef.current.thinking.length = 0;
58
- wholeContentRef.current.thinking.prevLength = 0;
59
- wholeContentRef.current.answer.content = '';
60
- wholeContentRef.current.answer.length = 0;
61
- wholeContentRef.current.answer.prevLength = 0;
62
- wholeContentRef.current.allLength = 0;
63
- };
64
- // 使用新的打字任务 hook
65
- const typingTask = useTypingTask({
66
- timerType,
67
- interval,
68
- charsRef,
69
- onEnd,
70
- onStart,
71
- onTypedChar,
72
- onBeforeTypedChar,
73
- processCharDisplay,
74
- wholeContentRef,
75
- disableTyping,
76
- triggerUpdate,
77
- resetWholeContent,
78
- });
79
- /**
80
- * 内部推送处理逻辑
81
- */
82
- const processHasTypingPush = (content, answerType) => {
83
- if (content.length === 0) {
84
- return;
85
- }
86
- charsRef.current.push(...content.split('').map((chatStr) => {
87
- const index = charIndexRef.current++;
88
- const charObj = {
89
- content: chatStr,
90
- answerType,
91
- tokenId: 0,
92
- index,
93
- };
94
- return charObj;
95
- }));
96
- wholeContentRef.current.allLength += content.length;
97
- // 如果关闭了自动打字, 并且没有打过字, 则不开启打字动画
98
- if (!autoStartTypingRef.current && !isStartedTypingRef.current) {
99
- return;
100
- }
101
- if (!typingTask.isTyping()) {
102
- typingTask.start();
103
- }
104
- };
105
- const processNoTypingPush = (content, answerType) => {
106
- wholeContentRef.current[answerType].content += content;
107
- // 记录打字前的长度
108
- wholeContentRef.current[answerType].prevLength = wholeContentRef.current[answerType].length;
109
- wholeContentRef.current[answerType].length += content.length;
110
- triggerUpdate();
111
- onEnd?.({
112
- str: content,
113
- answerStr: wholeContentRef.current.answer.content,
114
- thinkingStr: wholeContentRef.current.thinking.content,
115
- manual: false,
116
- });
117
- };
118
- useImperativeHandle(ref, () => ({
119
- /**
120
- * 添加内容
121
- * @param content 内容 {string}
122
- * @param answerType 回答类型 {AnswerType}
123
- */
124
- push: (content, answerType = 'answer') => {
125
- if (disableTyping) {
126
- processNoTypingPush(content, answerType);
127
- return;
128
- }
129
- processHasTypingPush(content, answerType);
130
- },
131
- /**
132
- * 清除打字任务
133
- */
134
- clear: () => {
135
- typingTask.stop();
136
- typingTask.typedIsManualStopRef.current = false;
137
- charsRef.current = [];
138
- resetWholeContent();
139
- isWholeTypedEndRef.current = false;
140
- charIndexRef.current = 0;
141
- isStartedTypingRef.current = false;
142
- triggerUpdate();
143
- },
144
- /** 开启打字,只有在关闭了自动打字才生效 */
145
- start: () => {
146
- if (!autoStartTypingRef.current) {
147
- typingTask.start();
148
- }
149
- },
150
- /** 停止打字任务 */
151
- stop: () => {
152
- typingTask.stop();
153
- },
154
- /** 重新开始打字任务 */
155
- resume: () => {
156
- typingTask.resume();
157
- },
158
- /**
159
- * 主动触发打字结束
160
- */
161
- triggerWholeEnd: () => {
162
- isWholeTypedEndRef.current = true;
163
- if (!typingTask.isTyping()) {
164
- // 这里需要手动触发结束回调,因为 hook 中的 triggerOnEnd 不能直接调用
165
- onEnd?.({
166
- str: wholeContentRef.current.answer.content,
167
- answerStr: wholeContentRef.current.answer.content,
168
- thinkingStr: wholeContentRef.current.thinking.content,
169
- manual: true,
170
- });
171
- }
172
- },
173
- /** 重新开始打字任务 */
174
- restart: () => {
175
- typingTask.restart();
176
- },
177
- }));
178
- const getParagraphs = (answerType) => {
179
- const content = wholeContentRef.current[answerType].content || '';
180
- return (_jsx("div", { className: `ds-markdown-paragraph ds-typed-${answerType}`, children: _jsx(HighReactMarkdown, { theme: theme, math: math, plugins: plugins, children: content }) }));
181
- };
182
- return (_jsxs("div", { className: classNames({
183
- 'ds-markdown': true,
184
- apple: true,
185
- 'ds-markdown-dark': theme === 'dark',
186
- }), children: [_jsx("div", { className: "ds-markdown-thinking", children: getParagraphs('thinking') }), _jsx("div", { className: "ds-markdown-answer", children: getParagraphs('answer') })] }));
187
- });
188
- if (__DEV__) {
189
- MarkdownCMD.displayName = 'MarkdownCMD';
190
- }
191
- export default MarkdownCMD;
192
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/MarkdownCMD/index.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE1E,OAAO,iBAAiB,MAAM,0CAA0C,CAAC;AACzE,OAAO,UAAU,MAAM,YAAY,CAAC;AAEpC,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,MAAM,WAAW,GAAG,UAAU,CAC5B,CAAC,EAAE,QAAQ,GAAG,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,SAAS,GAAG,YAAY,EAAE,KAAK,GAAG,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,GAAG,KAAK,EAAE,eAAe,GAAG,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;IAClL,8BAA8B;IAC9B,MAAM,kBAAkB,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;IAEnD,YAAY;IACZ,MAAM,kBAAkB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAEzC,gBAAgB;IAChB,MAAM,QAAQ,GAAG,MAAM,CAAU,EAAE,CAAC,CAAC;IAErC;;;OAGG;IACH,MAAM,kBAAkB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACzC,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAE/B,aAAa;IACb,MAAM,eAAe,GAAG,MAAM,CAAgB;QAC5C,QAAQ,EAAE;YACR,OAAO,EAAE,EAAE;YACX,MAAM,EAAE,CAAC;YACT,UAAU,EAAE,CAAC;SACd;QACD,MAAM,EAAE;YACN,OAAO,EAAE,EAAE;YACX,MAAM,EAAE,CAAC;YACT,UAAU,EAAE,CAAC;SACd;QACD,SAAS,EAAE,CAAC;KACb,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAClC,MAAM,aAAa,GAAG,GAAG,EAAE;QACzB,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;IAChC,CAAC,CAAC;IAEF;;OAEG;IACH,MAAM,kBAAkB,GAAG,CAAC,IAAW,EAAE,EAAE;QACzC,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC;YAChC,kBAAkB,CAAC,OAAO,GAAG,IAAI,CAAC;QACpC,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;YACnC,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC;YACzD,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,CAAC;QAC/C,CAAC;aAAM,CAAC;YACN,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC;YACvD,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;QAC7C,CAAC;QACD,aAAa,EAAE,CAAC;IAClB,CAAC,CAAC;IAEF,MAAM,iBAAiB,GAAG,GAAG,EAAE;QAC7B,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,GAAG,EAAE,CAAC;QAC9C,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QAC5C,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,GAAG,CAAC,CAAC;QAChD,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC;QAC5C,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QAC1C,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC;QAC9C,eAAe,CAAC,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;IACxC,CAAC,CAAC;IAEF,gBAAgB;IAChB,MAAM,UAAU,GAAG,aAAa,CAAC;QAC/B,SAAS;QACT,QAAQ;QACR,QAAQ;QACR,KAAK;QACL,OAAO;QACP,WAAW;QACX,iBAAiB;QACjB,kBAAkB;QAClB,eAAe;QACf,aAAa;QACb,aAAa;QACb,iBAAiB;KAClB,CAAC,CAAC;IAEH;;OAEG;IACH,MAAM,oBAAoB,GAAG,CAAC,OAAe,EAAE,UAAsB,EAAE,EAAE;QACvE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QAED,QAAQ,CAAC,OAAO,CAAC,IAAI,CACnB,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;YACnC,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,EAAE,CAAC;YACrC,MAAM,OAAO,GAAU;gBACrB,OAAO,EAAE,OAAO;gBAChB,UAAU;gBACV,OAAO,EAAE,CAAC;gBACV,KAAK;aACN,CAAC;YACF,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC,CACH,CAAC;QAEF,eAAe,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;QAEpD,+BAA+B;QAC/B,IAAI,CAAC,kBAAkB,CAAC,OAAO,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC;YAC/D,OAAO;QACT,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC;YAC3B,UAAU,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,mBAAmB,GAAG,CAAC,OAAe,EAAE,UAAsB,EAAE,EAAE;QACtE,eAAe,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC;QACvD,WAAW;QACX,eAAe,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,UAAU,GAAG,eAAe,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC;QAC5F,eAAe,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;QAC7D,aAAa,EAAE,CAAC;QAChB,KAAK,EAAE,CAAC;YACN,GAAG,EAAE,OAAO;YACZ,SAAS,EAAE,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO;YACjD,WAAW,EAAE,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO;YACrD,MAAM,EAAE,KAAK;SACd,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAC9B;;;;WAIG;QACH,IAAI,EAAE,CAAC,OAAe,EAAE,aAAyB,QAAQ,EAAE,EAAE;YAC3D,IAAI,aAAa,EAAE,CAAC;gBAClB,mBAAmB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;gBACzC,OAAO;YACT,CAAC;YACD,oBAAoB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAC5C,CAAC;QACD;;WAEG;QACH,KAAK,EAAE,GAAG,EAAE;YACV,UAAU,CAAC,IAAI,EAAE,CAAC;YAElB,UAAU,CAAC,oBAAoB,CAAC,OAAO,GAAG,KAAK,CAAC;YAChD,QAAQ,CAAC,OAAO,GAAG,EAAE,CAAC;YACtB,iBAAiB,EAAE,CAAC;YACpB,kBAAkB,CAAC,OAAO,GAAG,KAAK,CAAC;YACnC,YAAY,CAAC,OAAO,GAAG,CAAC,CAAC;YACzB,kBAAkB,CAAC,OAAO,GAAG,KAAK,CAAC;YAEnC,aAAa,EAAE,CAAC;QAClB,CAAC;QACD,yBAAyB;QACzB,KAAK,EAAE,GAAG,EAAE;YACV,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC;gBAChC,UAAU,CAAC,KAAK,EAAE,CAAC;YACrB,CAAC;QACH,CAAC;QACD,aAAa;QACb,IAAI,EAAE,GAAG,EAAE;YACT,UAAU,CAAC,IAAI,EAAE,CAAC;QACpB,CAAC;QACD,eAAe;QACf,MAAM,EAAE,GAAG,EAAE;YACX,UAAU,CAAC,MAAM,EAAE,CAAC;QACtB,CAAC;QACD;;WAEG;QACH,eAAe,EAAE,GAAG,EAAE;YACpB,kBAAkB,CAAC,OAAO,GAAG,IAAI,CAAC;YAClC,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC;gBAC3B,8CAA8C;gBAC9C,KAAK,EAAE,CAAC;oBACN,GAAG,EAAE,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO;oBAC3C,SAAS,EAAE,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO;oBACjD,WAAW,EAAE,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO;oBACrD,MAAM,EAAE,IAAI;iBACb,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,eAAe;QACf,OAAO,EAAE,GAAG,EAAE;YACZ,UAAU,CAAC,OAAO,EAAE,CAAC;QACvB,CAAC;KACF,CAAC,CAAC,CAAC;IAEJ,MAAM,aAAa,GAAG,CAAC,UAAsB,EAAE,EAAE;QAC/C,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC;QAClE,OAAO,CACL,cAAK,SAAS,EAAE,kCAAkC,UAAU,EAAE,YAC5D,KAAC,iBAAiB,IAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,YAC1D,OAAO,GACU,GAChB,CACP,CAAC;IACJ,CAAC,CAAC;IAEF,OAAO,CACL,eACE,SAAS,EAAE,UAAU,CAAC;YACpB,aAAa,EAAE,IAAI;YACnB,KAAK,EAAE,IAAI;YACX,kBAAkB,EAAE,KAAK,KAAK,MAAM;SACrC,CAAC,aAEF,cAAK,SAAS,EAAC,sBAAsB,YAAE,aAAa,CAAC,UAAU,CAAC,GAAO,EAEvE,cAAK,SAAS,EAAC,oBAAoB,YAAE,aAAa,CAAC,QAAQ,CAAC,GAAO,IAC/D,CACP,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,IAAI,OAAO,EAAE,CAAC;IACZ,WAAW,CAAC,WAAW,GAAG,aAAa,CAAC;AAC1C,CAAC;AAED,eAAe,WAAW,CAAC"}
@@ -1,9 +0,0 @@
1
- import React from 'react';
2
- import { Theme } from '../../defined.js';
3
- interface BlockWrapProps {
4
- children: React.ReactNode;
5
- language: string;
6
- theme?: Theme;
7
- }
8
- declare const BlockWrap: React.FC<BlockWrapProps>;
9
- export default BlockWrap;
@@ -1,6 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- const BlockWrap = ({ children, language, theme = 'light' }) => {
3
- 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: _jsx("div", { className: "md-code-block-banner-content", children: _jsx("div", { className: "md-code-block-language", children: language }) }) }) }), _jsx("div", { className: "md-code-block-content", children: children })] }));
4
- };
5
- export default BlockWrap;
6
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/BlockWrap/index.tsx"],"names":[],"mappings":";AASA,MAAM,SAAS,GAA6B,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,GAAG,OAAO,EAAE,EAAE,EAAE;IACtF,OAAO,CACL,eAAK,SAAS,EAAE,+BAA+B,KAAK,EAAE,aACpD,cAAK,SAAS,EAAC,2BAA2B,YACxC,cAAK,SAAS,EAAC,gDAAgD,YAC7D,cAAK,SAAS,EAAC,8BAA8B,YAC3C,cAAK,SAAS,EAAC,wBAAwB,YAAE,QAAQ,GAAO,GAEpD,GACF,GACF,EACN,cAAK,SAAS,EAAC,uBAAuB,YAAE,QAAQ,GAAO,IACnD,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,SAAS,CAAC"}
@@ -1,11 +0,0 @@
1
- import React from 'react';
2
- import type { Options } from 'react-markdown';
3
- import { IMarkdownMath, IMarkdownPlugin, Theme } from '../../defined.js';
4
- interface HighReactMarkdownProps extends Options {
5
- theme?: Theme;
6
- children: string;
7
- math?: IMarkdownMath;
8
- plugins?: IMarkdownPlugin[];
9
- }
10
- declare const _default: React.NamedExoticComponent<HighReactMarkdownProps>;
11
- export default _default;
@@ -1,53 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- /* eslint-disable @typescript-eslint/no-explicit-any */
3
- import { memo, useMemo } from 'react';
4
- import Markdown from 'react-markdown';
5
- import { Prism as SyntaxHighlighter } from 'react-syntax-highlighter';
6
- import gfmPlugin from 'remark-gfm';
7
- import { replaceMathBracket } from '../../utils/remarkMathBracket.js';
8
- import BlockWrap from '../BlockWrap/index.js';
9
- import { katexId } from '../../constant.js';
10
- const HighReactMarkdown = ({ theme = 'light', children: _children, math, plugins, ...props }) => {
11
- const mathSplitSymbol = math?.splitSymbol ?? 'dollar';
12
- const { remarkPlugins, rehypePlugins, hasKatexPlugin } = useMemo(() => {
13
- let hasKatexPlugin = false;
14
- const remarkPlugins = [gfmPlugin];
15
- const rehypePlugins = [];
16
- if (!plugins) {
17
- return {
18
- remarkPlugins,
19
- rehypePlugins,
20
- };
21
- }
22
- plugins.forEach((plugin) => {
23
- if (plugin.id === katexId) {
24
- hasKatexPlugin = true;
25
- remarkPlugins.push(plugin.remarkPlugin);
26
- rehypePlugins.push(plugin.rehypePlugin);
27
- }
28
- });
29
- return {
30
- remarkPlugins,
31
- rehypePlugins,
32
- hasKatexPlugin,
33
- };
34
- }, [plugins]);
35
- const children = useMemo(() => {
36
- /** 如果存在数学公式插件,并且数学公式分隔符为括号,则替换成 $ 符号 */
37
- if (hasKatexPlugin && mathSplitSymbol === 'bracket') {
38
- return replaceMathBracket(_children);
39
- }
40
- return _children;
41
- }, [hasKatexPlugin, mathSplitSymbol, _children]);
42
- return (_jsx(Markdown, { remarkPlugins: remarkPlugins, rehypePlugins: rehypePlugins, components: {
43
- code: ({ className, children, ...props }) => {
44
- const match = /language-(\w+)/.exec(className || '');
45
- return match ? (_jsx(BlockWrap, { language: match[1], theme: theme, children: _jsx(SyntaxHighlighter, { useInlineStyles: false, language: match[1], style: {}, children: String(children).replace(/\n$/, '') }) })) : (_jsx("code", { className: className, ...props, children: children }));
46
- },
47
- table: ({ children, ...props }) => {
48
- return (_jsx("div", { className: "markdown-table-wrapper", children: _jsx("table", { className: "ds-markdown-table", children: children }) }));
49
- },
50
- }, ...props, children: children }));
51
- };
52
- export default memo(HighReactMarkdown);
53
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/HighReactMarkdown/index.tsx"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- export declare const __DEV__: boolean;
2
- /** 数学公式插件id */
3
- export declare const katexId: unique symbol;
@@ -1,4 +0,0 @@
1
- export const __DEV__ = process.env.NODE_ENV === 'development';
2
- /** 数学公式插件id */
3
- export const katexId = Symbol('katex');
4
- //# sourceMappingURL=constant.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"constant.js","sourceRoot":"","sources":["../../src/constant.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,CAAC;AAE9D,eAAe;AACf,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC"}
@@ -1,132 +0,0 @@
1
- /**
2
- * 回答类型,思考和回答
3
- */
4
- export type AnswerType = 'answer' | 'thinking';
5
- export type Theme = 'light' | 'dark';
6
- /**
7
- * 字符接口
8
- */
9
- export interface IChar {
10
- content: string;
11
- answerType: AnswerType;
12
- tokenId: number;
13
- /** 字符索引 */
14
- index: number;
15
- }
16
- /**
17
- * 段落类型
18
- * 段落类型为br时,表示换行
19
- * 段落类型为text时,表示文本
20
- */
21
- export interface IParagraph {
22
- /** 段落内容 */
23
- content?: string;
24
- /** 是否已打字 */
25
- isTyped: boolean;
26
- /** 段落类型 */
27
- type: 'br' | 'text';
28
- /** 回答类型 */
29
- answerType: AnswerType;
30
- /** token 参考 */
31
- tokensReference: Record<string, ITokensReference>;
32
- }
33
- export interface ITokensReference {
34
- startIndex: number;
35
- raw: string;
36
- }
37
- export interface IOnTypedCharData {
38
- currentIndex: number;
39
- currentChar: string;
40
- answerType: AnswerType;
41
- prevStr: string;
42
- }
43
- export interface ITypedChar extends IOnTypedCharData {
44
- percent: number;
45
- currentStr: string;
46
- }
47
- export interface IBeforeTypedChar extends IOnTypedCharData {
48
- percent: number;
49
- }
50
- export interface MarkdownBaseProps {
51
- /** 计时类型: 支持setTimeout和requestAnimationFrame */
52
- timerType?: 'setTimeout' | 'requestAnimationFrame';
53
- /** 回答类型 */
54
- answerType?: 'thinking' | 'answer';
55
- /** 打字机效果间隔时间 */
56
- interval: number;
57
- /** 是否关闭打字机效果 */
58
- disableTyping?: boolean;
59
- /** 打字完成后回调, */
60
- onEnd?: (data?: IEndData) => void;
61
- /** 开始打字回调 */
62
- onStart?: (data?: IOnTypedCharData) => void;
63
- /** 打字前回调 */
64
- onBeforeTypedChar?: (data?: IBeforeTypedChar) => Promise<void>;
65
- /**
66
- * 打字机打完一个字符回调
67
- * @param char 字符
68
- * @param index 字符索引
69
- */
70
- onTypedChar?: (data?: ITypedChar) => void;
71
- /** 主题 */
72
- theme?: Theme;
73
- /** 数学公式配置 */
74
- math?: IMarkdownMath;
75
- /** 插件配置 */
76
- plugins?: IMarkdownPlugin[];
77
- /** 是否自动开启打字动画 */
78
- autoStartTyping?: boolean;
79
- }
80
- export interface MarkdownProps extends MarkdownBaseProps {
81
- children: string | undefined;
82
- }
83
- /** MarkdownCMD 组件不需要 children */
84
- export interface MarkdownCMDProps extends MarkdownBaseProps {
85
- children?: undefined;
86
- }
87
- export interface IMarkdownPlugin {
88
- remarkPlugin?: unknown;
89
- rehypePlugin?: unknown;
90
- type: 'buildIn' | 'custom';
91
- id?: any;
92
- }
93
- export interface IMarkdownMath {
94
- /** 是括号还是$作为分隔符, 默认是$ */
95
- splitSymbol: 'bracket' | 'dollar';
96
- }
97
- export interface IWholeContent {
98
- thinking: {
99
- content: string;
100
- length: number;
101
- prevLength: number;
102
- };
103
- answer: {
104
- content: string;
105
- length: number;
106
- prevLength: number;
107
- };
108
- allLength: number;
109
- }
110
- export interface MarkdownBaseRef {
111
- stop: () => void;
112
- resume: () => void;
113
- start: () => void;
114
- restart: () => void;
115
- }
116
- /** Markdown 组件的ref 类型 */
117
- export type MarkdownRef = MarkdownBaseRef;
118
- /** MarkdownCMD 组件的 ref 类型 */
119
- export interface MarkdownCMDRef extends MarkdownBaseRef {
120
- push: (content: string, answerType?: AnswerType) => void;
121
- clear: () => void;
122
- triggerWholeEnd: () => void;
123
- }
124
- export interface IEndData {
125
- manual: boolean;
126
- /** 回答字符串 */
127
- answerStr: string;
128
- /** 思考字符串 */
129
- thinkingStr: string;
130
- /** 打字机打过的字符串, 和answerStr 相同 */
131
- str: string;
132
- }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=defined.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"defined.js","sourceRoot":"","sources":["../../src/defined.ts"],"names":[],"mappings":""}
@@ -1,32 +0,0 @@
1
- import { AnswerType, IChar, ITypedChar, IWholeContent, MarkdownProps, IEndData, IBeforeTypedChar } from '../defined.js';
2
- interface UseTypingTaskOptions {
3
- timerType: MarkdownProps['timerType'];
4
- interval: number;
5
- charsRef: React.RefObject<IChar[]>;
6
- onEnd?: (data?: IEndData) => void;
7
- onStart?: (data?: {
8
- currentIndex: number;
9
- currentChar: string;
10
- answerType: AnswerType;
11
- prevStr: string;
12
- }) => void;
13
- onBeforeTypedChar?: (data?: IBeforeTypedChar) => Promise<void>;
14
- onTypedChar?: (data?: ITypedChar) => void;
15
- processCharDisplay: (char: IChar) => void;
16
- wholeContentRef: React.RefObject<IWholeContent>;
17
- disableTyping: boolean;
18
- triggerUpdate: () => void;
19
- resetWholeContent: () => void;
20
- }
21
- export interface TypingTaskController {
22
- start: () => void;
23
- stop: () => void;
24
- clear: () => void;
25
- isTyping: () => boolean;
26
- /** 是否主动调用 stop 方法 */
27
- typedIsManualStopRef: React.RefObject<boolean>;
28
- resume: () => void;
29
- restart: () => void;
30
- }
31
- export declare const useTypingTask: (options: UseTypingTaskOptions) => TypingTaskController;
32
- export {};