ds-markdown 0.0.14-beta.0 → 0.0.14-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.
- package/README.en.md +7 -7
- package/README.ja.md +7 -7
- package/README.ko.md +7 -7
- package/README.md +8 -7
- package/dist/cjs/Markdown/index.d.ts +1 -1
- package/dist/cjs/Markdown/index.js +12 -4
- package/dist/cjs/Markdown/index.js.map +1 -1
- package/dist/cjs/MarkdownCMD/index.d.ts +2 -7
- package/dist/cjs/MarkdownCMD/index.js +43 -186
- package/dist/cjs/MarkdownCMD/index.js.map +1 -1
- package/dist/cjs/defined.d.ts +13 -0
- package/dist/cjs/hooks/useTypingTask.d.ts +4 -0
- package/dist/cjs/hooks/useTypingTask.js +36 -9
- package/dist/cjs/hooks/useTypingTask.js.map +1 -1
- package/dist/cjs/index.d.ts +3 -2
- package/dist/cjs/index.js.map +1 -1
- package/dist/esm/Markdown/index.d.ts +1 -1
- package/dist/esm/Markdown/index.js +13 -5
- package/dist/esm/Markdown/index.js.map +1 -1
- package/dist/esm/MarkdownCMD/index.d.ts +2 -7
- package/dist/esm/MarkdownCMD/index.js +44 -187
- package/dist/esm/MarkdownCMD/index.js.map +1 -1
- package/dist/esm/defined.d.ts +13 -0
- package/dist/esm/hooks/useTypingTask.d.ts +4 -0
- package/dist/esm/hooks/useTypingTask.js +36 -9
- package/dist/esm/hooks/useTypingTask.js.map +1 -1
- package/dist/esm/index.d.ts +3 -2
- package/dist/esm/index.js.map +1 -1
- package/package.json +1 -1
package/README.en.md
CHANGED
|
@@ -180,9 +180,9 @@ Let's explore these new features together!`);
|
|
|
180
180
|
### Imperative API (Recommended for Streaming Scenarios)
|
|
181
181
|
|
|
182
182
|
```typescript
|
|
183
|
-
import { MarkdownCMD,
|
|
183
|
+
import { MarkdownCMD, MarkdownCMDRef } from 'ds-markdown';
|
|
184
184
|
|
|
185
|
-
interface
|
|
185
|
+
interface MarkdownCMDRef {
|
|
186
186
|
push: (content: string, answerType: AnswerType) => void;
|
|
187
187
|
clear: () => void;
|
|
188
188
|
triggerWholeEnd: () => void;
|
|
@@ -252,10 +252,10 @@ High-frequency recommends `requestAnimationFrame`, low-frequency recommends `set
|
|
|
252
252
|
|
|
253
253
|
````tsx
|
|
254
254
|
import { useRef } from 'react';
|
|
255
|
-
import { MarkdownCMD,
|
|
255
|
+
import { MarkdownCMD, MarkdownCMDRef } from 'ds-markdown';
|
|
256
256
|
|
|
257
257
|
function StreamingChat() {
|
|
258
|
-
const markdownRef = useRef<
|
|
258
|
+
const markdownRef = useRef<MarkdownCMDRef>(null);
|
|
259
259
|
|
|
260
260
|
// Simulate AI streaming response
|
|
261
261
|
const simulateAIResponse = async () => {
|
|
@@ -382,7 +382,7 @@ const handleStreamingMarkdown = () => {
|
|
|
382
382
|
|
|
383
383
|
```tsx
|
|
384
384
|
// ✅ Recommended: Imperative API
|
|
385
|
-
const ref = useRef<
|
|
385
|
+
const ref = useRef<MarkdownCMDRef>(null);
|
|
386
386
|
useEffect(() => {
|
|
387
387
|
ref.current?.push(newChunk, 'answer');
|
|
388
388
|
}, [newChunk]);
|
|
@@ -395,9 +395,9 @@ const [content, setContent] = useState('');
|
|
|
395
395
|
### 3. Type Safety
|
|
396
396
|
|
|
397
397
|
```tsx
|
|
398
|
-
import {
|
|
398
|
+
import { MarkdownCMDRef } from 'ds-markdown';
|
|
399
399
|
|
|
400
|
-
const ref = useRef<
|
|
400
|
+
const ref = useRef<MarkdownCMDRef>(null);
|
|
401
401
|
// Complete TypeScript type hints
|
|
402
402
|
```
|
|
403
403
|
|
package/README.ja.md
CHANGED
|
@@ -180,9 +180,9 @@ React 19 は多くのエキサイティングな新機能をもたらします
|
|
|
180
180
|
### 命令的 API(ストリーミングシナリオにおすすめ)
|
|
181
181
|
|
|
182
182
|
```typescript
|
|
183
|
-
import { MarkdownCMD,
|
|
183
|
+
import { MarkdownCMD, MarkdownCMDRef } from 'ds-markdown';
|
|
184
184
|
|
|
185
|
-
interface
|
|
185
|
+
interface MarkdownCMDRef {
|
|
186
186
|
push: (content: string, answerType: AnswerType) => void;
|
|
187
187
|
clear: () => void;
|
|
188
188
|
triggerWholeEnd: () => void;
|
|
@@ -250,10 +250,10 @@ interface MarkdownRef {
|
|
|
250
250
|
|
|
251
251
|
````tsx
|
|
252
252
|
import { useRef } from 'react';
|
|
253
|
-
import { MarkdownCMD,
|
|
253
|
+
import { MarkdownCMD, MarkdownCMDRef } from 'ds-markdown';
|
|
254
254
|
|
|
255
255
|
function StreamingChat() {
|
|
256
|
-
const markdownRef = useRef<
|
|
256
|
+
const markdownRef = useRef<MarkdownCMDRef>(null);
|
|
257
257
|
|
|
258
258
|
// AI ストリーミング応答をシミュレート
|
|
259
259
|
const simulateAIResponse = async () => {
|
|
@@ -380,7 +380,7 @@ const handleStreamingMarkdown = () => {
|
|
|
380
380
|
|
|
381
381
|
```tsx
|
|
382
382
|
// ✅ 推奨:命令的 API
|
|
383
|
-
const ref = useRef<
|
|
383
|
+
const ref = useRef<MarkdownCMDRef>(null);
|
|
384
384
|
useEffect(() => {
|
|
385
385
|
ref.current?.push(newChunk, 'answer');
|
|
386
386
|
}, [newChunk]);
|
|
@@ -393,9 +393,9 @@ const [content, setContent] = useState('');
|
|
|
393
393
|
### 3. 型安全
|
|
394
394
|
|
|
395
395
|
```tsx
|
|
396
|
-
import {
|
|
396
|
+
import { MarkdownCMDRef } from 'ds-markdown';
|
|
397
397
|
|
|
398
|
-
const ref = useRef<
|
|
398
|
+
const ref = useRef<MarkdownCMDRef>(null);
|
|
399
399
|
// 完全な TypeScript 型ヒント
|
|
400
400
|
```
|
|
401
401
|
|
package/README.ko.md
CHANGED
|
@@ -180,9 +180,9 @@ React 19는 많은 흥미로운 새 기능을 제공합니다:
|
|
|
180
180
|
### 명령형 API (스트리밍 시나리오 추천)
|
|
181
181
|
|
|
182
182
|
```typescript
|
|
183
|
-
import { MarkdownCMD,
|
|
183
|
+
import { MarkdownCMD, MarkdownCMDRef } from 'ds-markdown';
|
|
184
184
|
|
|
185
|
-
interface
|
|
185
|
+
interface MarkdownCMDRef {
|
|
186
186
|
push: (content: string, answerType: AnswerType) => void;
|
|
187
187
|
clear: () => void;
|
|
188
188
|
triggerWholeEnd: () => void;
|
|
@@ -250,10 +250,10 @@ interface MarkdownRef {
|
|
|
250
250
|
|
|
251
251
|
````tsx
|
|
252
252
|
import { useRef } from 'react';
|
|
253
|
-
import { MarkdownCMD,
|
|
253
|
+
import { MarkdownCMD, MarkdownCMDRef } from 'ds-markdown';
|
|
254
254
|
|
|
255
255
|
function StreamingChat() {
|
|
256
|
-
const markdownRef = useRef<
|
|
256
|
+
const markdownRef = useRef<MarkdownCMDRef>(null);
|
|
257
257
|
|
|
258
258
|
// AI 스트리밍 응답 시뮬레이션
|
|
259
259
|
const simulateAIResponse = async () => {
|
|
@@ -380,7 +380,7 @@ const handleStreamingMarkdown = () => {
|
|
|
380
380
|
|
|
381
381
|
```tsx
|
|
382
382
|
// ✅ 추천: 명령형 API
|
|
383
|
-
const ref = useRef<
|
|
383
|
+
const ref = useRef<MarkdownCMDRef>(null);
|
|
384
384
|
useEffect(() => {
|
|
385
385
|
ref.current?.push(newChunk, 'answer');
|
|
386
386
|
}, [newChunk]);
|
|
@@ -393,9 +393,9 @@ const [content, setContent] = useState('');
|
|
|
393
393
|
### 3. 타입 안전성
|
|
394
394
|
|
|
395
395
|
```tsx
|
|
396
|
-
import {
|
|
396
|
+
import { MarkdownCMDRef } from 'ds-markdown';
|
|
397
397
|
|
|
398
|
-
const ref = useRef<
|
|
398
|
+
const ref = useRef<MarkdownCMDRef>(null);
|
|
399
399
|
// 완전한 TypeScript 타입 힌트
|
|
400
400
|
```
|
|
401
401
|
|
package/README.md
CHANGED
|
@@ -38,6 +38,7 @@
|
|
|
38
38
|
- 高频打字支持(`requestAnimationFrame`模式下打字间隔最低可接近于`0ms`)
|
|
39
39
|
- 帧同步渲染,与浏览器 60fps 完美配合
|
|
40
40
|
- 智能字符批量处理,视觉效果更自然
|
|
41
|
+
- 支持打字的中断 `stop` 和 继续`resume`
|
|
41
42
|
|
|
42
43
|
### 🔧 **灵活易用**
|
|
43
44
|
|
|
@@ -180,9 +181,9 @@ React 19 带来了许多激动人心的新特性:
|
|
|
180
181
|
### 命令式 API (推荐流式场景)
|
|
181
182
|
|
|
182
183
|
```typescript
|
|
183
|
-
import { MarkdownCMD,
|
|
184
|
+
import { MarkdownCMD, MarkdownCMDRef } from 'ds-markdown';
|
|
184
185
|
|
|
185
|
-
interface
|
|
186
|
+
interface MarkdownCMDRef {
|
|
186
187
|
push: (content: string, answerType: AnswerType) => void;
|
|
187
188
|
clear: () => void;
|
|
188
189
|
triggerWholeEnd: () => void;
|
|
@@ -252,10 +253,10 @@ interface MarkdownRef {
|
|
|
252
253
|
|
|
253
254
|
````tsx
|
|
254
255
|
import { useRef } from 'react';
|
|
255
|
-
import { MarkdownCMD,
|
|
256
|
+
import { MarkdownCMD, MarkdownCMDRef } from 'ds-markdown';
|
|
256
257
|
|
|
257
258
|
function StreamingChat() {
|
|
258
|
-
const markdownRef = useRef<
|
|
259
|
+
const markdownRef = useRef<MarkdownCMDRef>(null);
|
|
259
260
|
|
|
260
261
|
// 模拟 AI 流式响应
|
|
261
262
|
const simulateAIResponse = async () => {
|
|
@@ -382,7 +383,7 @@ const handleStreamingMarkdown = () => {
|
|
|
382
383
|
|
|
383
384
|
```tsx
|
|
384
385
|
// ✅ 推荐:命令式 API
|
|
385
|
-
const ref = useRef<
|
|
386
|
+
const ref = useRef<MarkdownCMDRef>(null);
|
|
386
387
|
useEffect(() => {
|
|
387
388
|
ref.current?.push(newChunk, 'answer');
|
|
388
389
|
}, [newChunk]);
|
|
@@ -395,9 +396,9 @@ const [content, setContent] = useState('');
|
|
|
395
396
|
### 3. 类型安全
|
|
396
397
|
|
|
397
398
|
```tsx
|
|
398
|
-
import {
|
|
399
|
+
import { MarkdownCMDRef } from 'ds-markdown';
|
|
399
400
|
|
|
400
|
-
const ref = useRef<
|
|
401
|
+
const ref = useRef<MarkdownCMDRef>(null);
|
|
401
402
|
// 完整的 TypeScript 类型提示
|
|
402
403
|
```
|
|
403
404
|
|
|
@@ -5,5 +5,5 @@ interface MarkdownImplProps extends MarkdownProps {
|
|
|
5
5
|
answerType: AnswerType;
|
|
6
6
|
theme?: Theme;
|
|
7
7
|
}
|
|
8
|
-
declare const _default: React.NamedExoticComponent<MarkdownImplProps
|
|
8
|
+
declare const _default: React.NamedExoticComponent<MarkdownImplProps & React.RefAttributes<import("../defined.js").MarkdownBaseRef>>;
|
|
9
9
|
export default _default;
|
|
@@ -7,7 +7,7 @@ const jsx_runtime_1 = require("react/jsx-runtime");
|
|
|
7
7
|
const react_1 = require("react");
|
|
8
8
|
const constant_js_1 = require("../constant.js");
|
|
9
9
|
const index_js_1 = __importDefault(require("../MarkdownCMD/index.js"));
|
|
10
|
-
const MarkdownInner = ({ children: _children = '', answerType,
|
|
10
|
+
const MarkdownInner = ({ children: _children = '', answerType, markdownRef, ...rest }) => {
|
|
11
11
|
const cmdRef = (0, react_1.useRef)(null);
|
|
12
12
|
const prefixRef = (0, react_1.useRef)('');
|
|
13
13
|
const content = (0, react_1.useMemo)(() => {
|
|
@@ -38,9 +38,17 @@ const MarkdownInner = ({ children: _children = '', answerType, onTypedChar, ...r
|
|
|
38
38
|
prefixRef.current = content;
|
|
39
39
|
}
|
|
40
40
|
}, [answerType, content]);
|
|
41
|
+
(0, react_1.useImperativeHandle)(markdownRef, () => ({
|
|
42
|
+
stop: () => {
|
|
43
|
+
cmdRef.current.stop();
|
|
44
|
+
},
|
|
45
|
+
resume: () => {
|
|
46
|
+
cmdRef.current.resume();
|
|
47
|
+
},
|
|
48
|
+
}));
|
|
41
49
|
return (0, jsx_runtime_1.jsx)(index_js_1.default, { ref: cmdRef, ...rest });
|
|
42
50
|
};
|
|
43
|
-
const Markdown = (props) => {
|
|
51
|
+
const Markdown = (0, react_1.forwardRef)((props, ref) => {
|
|
44
52
|
const { children = '', answerType = 'answer' } = props;
|
|
45
53
|
if (constant_js_1.__DEV__) {
|
|
46
54
|
if (!['thinking', 'answer'].includes(answerType)) {
|
|
@@ -50,7 +58,7 @@ const Markdown = (props) => {
|
|
|
50
58
|
throw new Error('Markdown组件的子元素必须是一个字符串');
|
|
51
59
|
}
|
|
52
60
|
}
|
|
53
|
-
return (0, jsx_runtime_1.jsx)(MarkdownInner, { ...props, answerType: answerType });
|
|
54
|
-
};
|
|
61
|
+
return (0, jsx_runtime_1.jsx)(MarkdownInner, { ...props, answerType: answerType, markdownRef: ref });
|
|
62
|
+
});
|
|
55
63
|
exports.default = (0, react_1.memo)(Markdown);
|
|
56
64
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/Markdown/index.tsx"],"names":[],"mappings":";;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/Markdown/index.tsx"],"names":[],"mappings":";;;;;;AAAA,iCAAiG;AACjG,gDAAyC;AAEzC,uEAAkD;AAYlD,MAAM,aAAa,GAAiC,CAAC,EAAE,QAAQ,EAAE,SAAS,GAAG,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE;IACrH,MAAM,MAAM,GAAG,IAAA,cAAM,EAAiB,IAAK,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,IAAA,cAAM,EAAC,EAAE,CAAC,CAAC;IAC7B,MAAM,OAAO,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE;QAC3B,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;YAClC,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IAAI,qBAAO,EAAE,CAAC;YACZ,OAAO,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhB,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,SAAS,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;YAClC,IAAI,UAAU,GAAG,EAAE,CAAC;YACpB,IAAI,SAAS,CAAC,OAAO,KAAK,EAAE,EAAE,CAAC;gBAC7B,UAAU,GAAG,OAAO,CAAC;YACvB,CAAC;iBAAM,CAAC;gBACN,IAAI,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC1C,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBACvD,CAAC;qBAAM,CAAC;oBACN,UAAU,GAAG,OAAO,CAAC;oBACrB,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBACzB,CAAC;YACH,CAAC;YACD,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YAC5C,SAAS,CAAC,OAAO,GAAG,OAAO,CAAC;QAC9B,CAAC;IACH,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;IAE1B,IAAA,2BAAmB,EAAC,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC;QACtC,IAAI,EAAE,GAAG,EAAE;YACT,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACxB,CAAC;QACD,MAAM,EAAE,GAAG,EAAE;YACX,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QAC1B,CAAC;KACF,CAAC,CAAC,CAAC;IAEJ,OAAO,uBAAC,kBAAW,IAAC,GAAG,EAAE,MAAM,KAAM,IAAI,GAAI,CAAC;AAChD,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,IAAA,kBAAU,EAAiC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;IACzE,MAAM,EAAE,QAAQ,GAAG,EAAE,EAAE,UAAU,GAAG,QAAQ,EAAE,GAAG,KAAK,CAAC;IAEvD,IAAI,qBAAO,EAAE,CAAC;QACZ,IAAI,CAAC,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YACjD,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC7D,CAAC;QACD,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,OAAO,uBAAC,aAAa,OAAK,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,GAAI,CAAC;AAChF,CAAC,CAAC,CAAC;AAEH,kBAAe,IAAA,YAAI,EAAC,QAAQ,CAAC,CAAC"}
|
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
push: (content: string, answerType: AnswerType) => void;
|
|
4
|
-
clear: () => void;
|
|
5
|
-
triggerWholeEnd: () => void;
|
|
6
|
-
}
|
|
7
|
-
declare const MarkdownCMD: import("react").ForwardRefExoticComponent<MarkdownProps & import("react").RefAttributes<MarkdownRef>>;
|
|
1
|
+
import { MarkdownProps, MarkdownCMDRef } from '../defined.js';
|
|
2
|
+
declare const MarkdownCMD: import("react").ForwardRefExoticComponent<MarkdownProps & import("react").RefAttributes<MarkdownCMDRef>>;
|
|
8
3
|
export default MarkdownCMD;
|
|
@@ -7,9 +7,7 @@ const jsx_runtime_1 = require("react/jsx-runtime");
|
|
|
7
7
|
const react_1 = require("react");
|
|
8
8
|
const index_js_1 = __importDefault(require("../components/HighReactMarkdown/index.js"));
|
|
9
9
|
const classnames_1 = __importDefault(require("classnames"));
|
|
10
|
-
const compiler_js_1 = require("../utils/compiler.js");
|
|
11
10
|
const constant_js_1 = require("../constant.js");
|
|
12
|
-
const deepClone_js_1 = __importDefault(require("../utils/methods/deepClone.js"));
|
|
13
11
|
const useTypingTask_js_1 = require("../hooks/useTypingTask.js");
|
|
14
12
|
const MarkdownCMD = (0, react_1.forwardRef)(({ interval = 30, onEnd, onStart, onTypedChar, timerType = 'setTimeout', theme = 'light' }, ref) => {
|
|
15
13
|
/** 当前需要打字的内容 */
|
|
@@ -19,15 +17,7 @@ const MarkdownCMD = (0, react_1.forwardRef)(({ interval = 30, onEnd, onStart, on
|
|
|
19
17
|
* 如果打字已经完全结束,则不会再触发打字效果
|
|
20
18
|
*/
|
|
21
19
|
const isWholeTypedEndRef = (0, react_1.useRef)(false);
|
|
22
|
-
|
|
23
|
-
* 稳定段落
|
|
24
|
-
* 稳定段落是已经打过字,并且不会再变化的段落
|
|
25
|
-
*/
|
|
26
|
-
const stableSegmentsRef = (0, react_1.useRef)([]);
|
|
27
|
-
const stableSegments = stableSegmentsRef.current;
|
|
28
|
-
/** 当前段落引用 */
|
|
29
|
-
const currentParagraphRef = (0, react_1.useRef)(undefined);
|
|
30
|
-
const currentSegment = currentParagraphRef.current;
|
|
20
|
+
const charIndexRef = (0, react_1.useRef)(0);
|
|
31
21
|
/** 整个内容引用 */
|
|
32
22
|
const wholeContentRef = (0, react_1.useRef)({
|
|
33
23
|
thinking: {
|
|
@@ -38,8 +28,8 @@ const MarkdownCMD = (0, react_1.forwardRef)(({ interval = 30, onEnd, onStart, on
|
|
|
38
28
|
content: '',
|
|
39
29
|
length: 0,
|
|
40
30
|
},
|
|
31
|
+
allLength: 0,
|
|
41
32
|
});
|
|
42
|
-
/** 触发更新 */
|
|
43
33
|
const [, setUpdate] = (0, react_1.useState)(false);
|
|
44
34
|
const triggerUpdate = () => {
|
|
45
35
|
setUpdate((prev) => !prev);
|
|
@@ -48,66 +38,16 @@ const MarkdownCMD = (0, react_1.forwardRef)(({ interval = 30, onEnd, onStart, on
|
|
|
48
38
|
* 处理字符显示逻辑
|
|
49
39
|
*/
|
|
50
40
|
const processCharDisplay = (char) => {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
if (char.contentType === 'space' || char.contentType === 'split_segment') {
|
|
55
|
-
if (currentSegment) {
|
|
56
|
-
const newStableSegments = [...stableSegmentsRef.current];
|
|
57
|
-
// 放入到稳定队列
|
|
58
|
-
if (currentSegment) {
|
|
59
|
-
newStableSegments.push({ ...currentSegment, isTyped: false });
|
|
60
|
-
}
|
|
61
|
-
stableSegmentsRef.current = newStableSegments;
|
|
62
|
-
currentParagraphRef.current = undefined;
|
|
63
|
-
triggerUpdate();
|
|
64
|
-
}
|
|
65
|
-
return;
|
|
66
|
-
}
|
|
67
|
-
// 处理当前段落
|
|
68
|
-
const newCurrentParagraph = {
|
|
69
|
-
content: '',
|
|
70
|
-
isTyped: false,
|
|
71
|
-
type: 'text',
|
|
72
|
-
answerType: char.answerType,
|
|
73
|
-
tokensReference: {},
|
|
74
|
-
};
|
|
75
|
-
let _currentParagraph = currentSegment;
|
|
76
|
-
if (!_currentParagraph) {
|
|
77
|
-
// 如果当前没有段落,则直接设置为新当前段落
|
|
78
|
-
_currentParagraph = newCurrentParagraph;
|
|
79
|
-
}
|
|
80
|
-
else if (currentSegment && currentSegment?.answerType !== char.answerType) {
|
|
81
|
-
// 如果当前段落和当前字符的回答类型不一致,则需要处理成两个段落
|
|
82
|
-
const newStableSegments = [...stableSegmentsRef.current];
|
|
83
|
-
newStableSegments.push({ ...currentSegment, isTyped: false });
|
|
84
|
-
stableSegmentsRef.current = newStableSegments;
|
|
85
|
-
_currentParagraph = newCurrentParagraph;
|
|
86
|
-
}
|
|
87
|
-
const tokensReference = (0, deepClone_js_1.default)(_currentParagraph.tokensReference);
|
|
88
|
-
if (tokensReference[char.tokenId]) {
|
|
89
|
-
tokensReference[char.tokenId].raw += char.content;
|
|
90
|
-
tokensReference[char.tokenId].startIndex = currentSegment?.content?.length || 0;
|
|
41
|
+
if (char.answerType === 'thinking') {
|
|
42
|
+
wholeContentRef.current.thinking.content += char.content;
|
|
43
|
+
wholeContentRef.current.thinking.length += 1;
|
|
91
44
|
}
|
|
92
45
|
else {
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
raw: char.content,
|
|
96
|
-
};
|
|
46
|
+
wholeContentRef.current.answer.content += char.content;
|
|
47
|
+
wholeContentRef.current.answer.length += 1;
|
|
97
48
|
}
|
|
98
|
-
const newCurrentSegment = {
|
|
99
|
-
..._currentParagraph,
|
|
100
|
-
tokensReference,
|
|
101
|
-
content: (currentSegment?.content || '') + char.content,
|
|
102
|
-
isTyped: true,
|
|
103
|
-
};
|
|
104
|
-
currentParagraphRef.current = newCurrentSegment;
|
|
105
49
|
triggerUpdate();
|
|
106
50
|
};
|
|
107
|
-
/** 思考段落 */
|
|
108
|
-
const thinkingParagraphs = (0, react_1.useMemo)(() => stableSegments.filter((paragraph) => paragraph.answerType === 'thinking'), [stableSegments]);
|
|
109
|
-
/** 回答段落 */
|
|
110
|
-
const answerParagraphs = (0, react_1.useMemo)(() => stableSegments.filter((paragraph) => paragraph.answerType === 'answer'), [stableSegments]);
|
|
111
51
|
// 使用新的打字任务 hook
|
|
112
52
|
const typingTask = (0, useTypingTask_js_1.useTypingTask)({
|
|
113
53
|
timerType,
|
|
@@ -119,10 +59,6 @@ const MarkdownCMD = (0, react_1.forwardRef)(({ interval = 30, onEnd, onStart, on
|
|
|
119
59
|
processCharDisplay,
|
|
120
60
|
wholeContentRef,
|
|
121
61
|
});
|
|
122
|
-
const lastSegmentRawRef = (0, react_1.useRef)({
|
|
123
|
-
thinkingReference: null,
|
|
124
|
-
answerReference: null,
|
|
125
|
-
});
|
|
126
62
|
/**
|
|
127
63
|
* 内部推送处理逻辑
|
|
128
64
|
*/
|
|
@@ -130,103 +66,18 @@ const MarkdownCMD = (0, react_1.forwardRef)(({ interval = 30, onEnd, onStart, on
|
|
|
130
66
|
if (content.length === 0) {
|
|
131
67
|
return;
|
|
132
68
|
}
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
if (lastSegmentReference) {
|
|
146
|
-
lastSegmentRaw = lastSegmentReference.raw;
|
|
147
|
-
currentLastSegmentRaw = lastSegmentRaw + content;
|
|
148
|
-
}
|
|
149
|
-
else {
|
|
150
|
-
currentLastSegmentRaw = content;
|
|
151
|
-
}
|
|
152
|
-
const tokens = (0, compiler_js_1.compiler)(currentLastSegmentRaw);
|
|
153
|
-
// 如果最后一个token是space,则把lastSegmentRaw设置为空
|
|
154
|
-
if (tokens[tokens.length - 1].type === 'space') {
|
|
155
|
-
currentLastSegmentReference = null;
|
|
156
|
-
}
|
|
157
|
-
else {
|
|
158
|
-
// 如果上一个segment存在并且当前只有一个token,则说明是同一个segment
|
|
159
|
-
if (lastSegmentReference !== null && tokens.length === 1) {
|
|
160
|
-
const newCurrentLastSegmentReference = lastSegmentReference;
|
|
161
|
-
newCurrentLastSegmentReference.raw = newCurrentLastSegmentReference.raw + content;
|
|
162
|
-
currentLastSegmentReference = newCurrentLastSegmentReference;
|
|
163
|
-
}
|
|
164
|
-
else {
|
|
165
|
-
currentLastSegmentReference = tokens[tokens.length - 1];
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
const pushAndSplitSegment = (raw, tokenIndex, segmentTokenId) => {
|
|
169
|
-
const currentToken = tokens[tokenIndex];
|
|
170
|
-
if (tokenIndex > 0) {
|
|
171
|
-
const prevToken = tokens[tokenIndex - 1];
|
|
172
|
-
if (prevToken.type !== 'space' && currentToken.type !== 'space') {
|
|
173
|
-
charsRef.current.push({ content: '', answerType, contentType: 'split_segment', tokenId: currentToken.id, index: currentIndex++ });
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
charsRef.current.push(...raw.split('').map((char) => ({ content: char, answerType, contentType: 'segment', tokenId: segmentTokenId, index: currentIndex++ })));
|
|
177
|
-
};
|
|
178
|
-
if (!lastSegmentReference) {
|
|
179
|
-
tokens.forEach((token, i) => {
|
|
180
|
-
if (token.type === 'space') {
|
|
181
|
-
charsRef.current.push(...token.raw.split('').map((char) => ({ content: char, answerType, contentType: 'space', tokenId: token.id, index: currentIndex++ })));
|
|
182
|
-
}
|
|
183
|
-
else {
|
|
184
|
-
pushAndSplitSegment(token.raw, i, token.id);
|
|
185
|
-
}
|
|
186
|
-
});
|
|
187
|
-
}
|
|
188
|
-
else {
|
|
189
|
-
// debugger;
|
|
190
|
-
let str = '';
|
|
191
|
-
let nextTokenIndex = lastSegmentRaw.length;
|
|
192
|
-
for (let i = 0; i < tokens.length; i++) {
|
|
193
|
-
const token = tokens[i];
|
|
194
|
-
if (token.type === 'space') {
|
|
195
|
-
charsRef.current.push(...token.raw.split('').map((char) => ({ content: char, answerType, contentType: 'space', tokenId: token.id, index: currentIndex++ })));
|
|
196
|
-
str += token.raw;
|
|
197
|
-
}
|
|
198
|
-
else {
|
|
199
|
-
str += token.raw;
|
|
200
|
-
if (str.length < nextTokenIndex && i == 0) {
|
|
201
|
-
/** 如果当前字符串长度小于下一个token的索引,则需要将当前段落更新, 以修正不完整的token */
|
|
202
|
-
const lastSegmentReferenceId = lastSegmentReference.id;
|
|
203
|
-
const currentSegment = currentParagraphRef.current;
|
|
204
|
-
const tokensReference = currentSegment?.tokensReference || {};
|
|
205
|
-
const lastTokenReference = tokensReference[lastSegmentReferenceId];
|
|
206
|
-
if (lastTokenReference) {
|
|
207
|
-
const newTokensReference = { [lastSegmentReferenceId]: { startIndex: lastTokenReference.startIndex, raw: token.raw } };
|
|
208
|
-
// 去除charsRef中 tokenId = lastSegmentReferenceId 的字符
|
|
209
|
-
charsRef.current = charsRef.current.filter((char) => char.tokenId !== lastSegmentReferenceId);
|
|
210
|
-
const newCurrentSegment = { ...currentSegment, tokensReference: newTokensReference, isTyped: false, type: 'text', answerType };
|
|
211
|
-
newCurrentSegment.content = Object.values(newTokensReference).reduce((acc, curr) => acc + curr.raw, '');
|
|
212
|
-
currentParagraphRef.current = newCurrentSegment;
|
|
213
|
-
triggerUpdate();
|
|
214
|
-
}
|
|
215
|
-
else {
|
|
216
|
-
// TODO
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
const realRaw = str.slice(nextTokenIndex);
|
|
220
|
-
if (realRaw.length > 0) {
|
|
221
|
-
pushAndSplitSegment(realRaw, i, lastSegmentReference.id);
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
nextTokenIndex = str.length;
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
lastSegmentRawRef.current[`${answerType}Reference`] = currentLastSegmentReference;
|
|
228
|
-
wholeContent.content = wholeContent.content + content;
|
|
229
|
-
wholeContent.length = wholeContent.content.length;
|
|
69
|
+
charsRef.current.push(...content.split('').map((chatStr) => {
|
|
70
|
+
const index = charIndexRef.current++;
|
|
71
|
+
const charObj = {
|
|
72
|
+
content: chatStr,
|
|
73
|
+
answerType,
|
|
74
|
+
contentType: 'segment',
|
|
75
|
+
tokenId: 0,
|
|
76
|
+
index,
|
|
77
|
+
};
|
|
78
|
+
return charObj;
|
|
79
|
+
}));
|
|
80
|
+
wholeContentRef.current.allLength += content.length;
|
|
230
81
|
if (!typingTask.isTyping()) {
|
|
231
82
|
typingTask.start();
|
|
232
83
|
}
|
|
@@ -245,20 +96,31 @@ const MarkdownCMD = (0, react_1.forwardRef)(({ interval = 30, onEnd, onStart, on
|
|
|
245
96
|
*/
|
|
246
97
|
clear: () => {
|
|
247
98
|
typingTask.stop();
|
|
99
|
+
typingTask.typedIsManualStopRef.current = false;
|
|
248
100
|
charsRef.current = [];
|
|
101
|
+
wholeContentRef.current = {
|
|
102
|
+
thinking: {
|
|
103
|
+
content: '',
|
|
104
|
+
length: 0,
|
|
105
|
+
},
|
|
106
|
+
answer: {
|
|
107
|
+
content: '',
|
|
108
|
+
length: 0,
|
|
109
|
+
},
|
|
110
|
+
allLength: 0,
|
|
111
|
+
};
|
|
249
112
|
isWholeTypedEndRef.current = false;
|
|
250
|
-
|
|
251
|
-
typingTask.clear();
|
|
252
|
-
// 清理缓冲区
|
|
253
|
-
const lastSegmentRef = lastSegmentRawRef.current;
|
|
254
|
-
lastSegmentRef.thinkingReference = null;
|
|
255
|
-
lastSegmentRef.answerReference = null;
|
|
256
|
-
wholeContentRef.current.thinking.content = '';
|
|
257
|
-
wholeContentRef.current.thinking.length = 0;
|
|
258
|
-
wholeContentRef.current.answer.content = '';
|
|
259
|
-
wholeContentRef.current.answer.length = 0;
|
|
113
|
+
charIndexRef.current = 0;
|
|
260
114
|
triggerUpdate();
|
|
261
115
|
},
|
|
116
|
+
/** 停止打字任务 */
|
|
117
|
+
stop: () => {
|
|
118
|
+
typingTask.stop();
|
|
119
|
+
},
|
|
120
|
+
/** 重新开始打字任务 */
|
|
121
|
+
resume: () => {
|
|
122
|
+
typingTask.resume();
|
|
123
|
+
},
|
|
262
124
|
/**
|
|
263
125
|
* 主动触发打字结束
|
|
264
126
|
*/
|
|
@@ -276,19 +138,14 @@ const MarkdownCMD = (0, react_1.forwardRef)(({ interval = 30, onEnd, onStart, on
|
|
|
276
138
|
* 刷新缓冲区 (新增方法)
|
|
277
139
|
*/
|
|
278
140
|
}));
|
|
279
|
-
const getParagraphs = (
|
|
280
|
-
return ((0, jsx_runtime_1.
|
|
281
|
-
if (paragraph.type === 'br') {
|
|
282
|
-
return null;
|
|
283
|
-
}
|
|
284
|
-
return ((0, jsx_runtime_1.jsx)(index_js_1.default, { theme: theme, children: paragraph.content || '' }, index));
|
|
285
|
-
}), currentSegment?.answerType === answerType && ((0, jsx_runtime_1.jsx)(index_js_1.default, { theme: theme, children: currentSegment.content || '' }, currentSegment.content))] }));
|
|
141
|
+
const getParagraphs = (answerType) => {
|
|
142
|
+
return ((0, jsx_runtime_1.jsx)("div", { className: `ds-markdown-paragraph ds-typed-${answerType}`, children: (0, jsx_runtime_1.jsx)(index_js_1.default, { theme: theme, children: wholeContentRef.current[answerType].content || '' }) }));
|
|
286
143
|
};
|
|
287
144
|
return ((0, jsx_runtime_1.jsxs)("div", { className: (0, classnames_1.default)({
|
|
288
145
|
'ds-markdown': true,
|
|
289
146
|
apple: true,
|
|
290
147
|
'ds-markdown-dark': theme === 'dark',
|
|
291
|
-
}), children: [(
|
|
148
|
+
}), children: [(0, jsx_runtime_1.jsx)("div", { className: "ds-markdown-thinking", children: getParagraphs('thinking') }), (0, jsx_runtime_1.jsx)("div", { className: "ds-markdown-answer", children: getParagraphs('answer') })] }));
|
|
292
149
|
});
|
|
293
150
|
if (constant_js_1.__DEV__) {
|
|
294
151
|
MarkdownCMD.displayName = 'MarkdownCMD';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/MarkdownCMD/index.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/MarkdownCMD/index.tsx"],"names":[],"mappings":"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"}
|
package/dist/cjs/defined.d.ts
CHANGED
|
@@ -79,4 +79,17 @@ export interface IWholeContent {
|
|
|
79
79
|
content: string;
|
|
80
80
|
length: number;
|
|
81
81
|
};
|
|
82
|
+
allLength: number;
|
|
83
|
+
}
|
|
84
|
+
export interface MarkdownBaseRef {
|
|
85
|
+
stop: () => void;
|
|
86
|
+
resume: () => void;
|
|
87
|
+
}
|
|
88
|
+
/** Markdown 组件的ref 类型 */
|
|
89
|
+
export type MarkdownRef = MarkdownBaseRef;
|
|
90
|
+
/** MarkdownCMD 组件的 ref 类型 */
|
|
91
|
+
export interface MarkdownCMDRef extends MarkdownBaseRef {
|
|
92
|
+
push: (content: string, answerType: AnswerType) => void;
|
|
93
|
+
clear: () => void;
|
|
94
|
+
triggerWholeEnd: () => void;
|
|
82
95
|
}
|
|
@@ -6,6 +6,7 @@ interface UseTypingTaskOptions {
|
|
|
6
6
|
onEnd?: (data?: {
|
|
7
7
|
str?: string;
|
|
8
8
|
answerType?: AnswerType;
|
|
9
|
+
manual: boolean;
|
|
9
10
|
}) => void;
|
|
10
11
|
onStart?: (data?: {
|
|
11
12
|
currentIndex: number;
|
|
@@ -22,6 +23,9 @@ export interface TypingTaskController {
|
|
|
22
23
|
stop: () => void;
|
|
23
24
|
clear: () => void;
|
|
24
25
|
isTyping: () => boolean;
|
|
26
|
+
/** 是否主动调用 stop 方法 */
|
|
27
|
+
typedIsManualStopRef: React.RefObject<boolean>;
|
|
28
|
+
resume: () => void;
|
|
25
29
|
}
|
|
26
30
|
export declare const useTypingTask: (options: UseTypingTaskOptions) => TypingTaskController;
|
|
27
31
|
export {};
|