ds-markdown 0.1.2-beta.2 → 0.1.2-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.
- package/README.en.md +254 -28
- package/README.ja.md +49 -33
- package/README.ko.md +49 -28
- package/README.md +330 -28
- package/dist/cjs/Markdown/index.js +3 -0
- package/dist/cjs/Markdown/index.js.map +1 -1
- package/dist/cjs/MarkdownCMD/index.js +26 -13
- package/dist/cjs/MarkdownCMD/index.js.map +1 -1
- package/dist/cjs/defined.d.ts +15 -6
- package/dist/cjs/hooks/useTypingTask.d.ts +4 -1
- package/dist/cjs/hooks/useTypingTask.js +82 -57
- package/dist/cjs/hooks/useTypingTask.js.map +1 -1
- package/dist/esm/Markdown/index.js +3 -0
- package/dist/esm/Markdown/index.js.map +1 -1
- package/dist/esm/MarkdownCMD/index.js +26 -13
- package/dist/esm/MarkdownCMD/index.js.map +1 -1
- package/dist/esm/defined.d.ts +15 -6
- package/dist/esm/hooks/useTypingTask.d.ts +4 -1
- package/dist/esm/hooks/useTypingTask.js +82 -57
- package/dist/esm/hooks/useTypingTask.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useEffect, useRef } from 'react';
|
|
2
2
|
export const useTypingTask = (options) => {
|
|
3
|
-
const { timerType = 'setTimeout', interval, charsRef, onEnd, onStart, onTypedChar, processCharDisplay, wholeContentRef, disableTyping, triggerUpdate } = options;
|
|
3
|
+
const { timerType = 'setTimeout', interval, charsRef, onEnd, onStart, onBeforeTypedChar, onTypedChar, processCharDisplay, wholeContentRef, disableTyping, triggerUpdate, resetWholeContent, } = options;
|
|
4
4
|
/** 是否卸载 */
|
|
5
5
|
const isUnmountRef = useRef(false);
|
|
6
6
|
/** 是否正在打字 */
|
|
@@ -24,30 +24,6 @@ export const useTypingTask = (options) => {
|
|
|
24
24
|
isUnmountRef.current = true;
|
|
25
25
|
};
|
|
26
26
|
}, []);
|
|
27
|
-
/**
|
|
28
|
-
* 记录打过的字
|
|
29
|
-
* @param char 当前字符
|
|
30
|
-
* @returns
|
|
31
|
-
*/
|
|
32
|
-
const recordTypedChars = (char) => {
|
|
33
|
-
let prevStr = '';
|
|
34
|
-
if (!typedCharsRef.current || typedCharsRef.current.answerType !== char.answerType) {
|
|
35
|
-
typedCharsRef.current = {
|
|
36
|
-
typedContent: char.content,
|
|
37
|
-
answerType: char.answerType,
|
|
38
|
-
prevStr: '',
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
else {
|
|
42
|
-
prevStr = typedCharsRef.current.typedContent;
|
|
43
|
-
typedCharsRef.current.typedContent += char.content;
|
|
44
|
-
typedCharsRef.current.prevStr = prevStr;
|
|
45
|
-
}
|
|
46
|
-
return {
|
|
47
|
-
prevStr,
|
|
48
|
-
nextStr: typedCharsRef.current?.typedContent || '',
|
|
49
|
-
};
|
|
50
|
-
};
|
|
51
27
|
/**
|
|
52
28
|
* 触发打字开始回调
|
|
53
29
|
* @param char 当前字符
|
|
@@ -56,7 +32,7 @@ export const useTypingTask = (options) => {
|
|
|
56
32
|
if (!onStart) {
|
|
57
33
|
return;
|
|
58
34
|
}
|
|
59
|
-
const
|
|
35
|
+
const prevStr = wholeContentRef.current[char.answerType].content;
|
|
60
36
|
onStart({
|
|
61
37
|
currentIndex: prevStr.length,
|
|
62
38
|
currentChar: char.content,
|
|
@@ -72,20 +48,34 @@ export const useTypingTask = (options) => {
|
|
|
72
48
|
return;
|
|
73
49
|
}
|
|
74
50
|
onEnd({
|
|
75
|
-
str:
|
|
76
|
-
|
|
51
|
+
str: wholeContentRef.current.answer.content,
|
|
52
|
+
answerStr: wholeContentRef.current.answer.content,
|
|
53
|
+
thinkingStr: wholeContentRef.current.thinking.content,
|
|
77
54
|
manual: data?.manual ?? false,
|
|
78
55
|
});
|
|
79
56
|
};
|
|
80
57
|
/**
|
|
81
58
|
* 触发打字过程中回调
|
|
82
59
|
* @param char 当前字符
|
|
83
|
-
* @param isStartPoint 是否是开始打字(第一个字)
|
|
84
60
|
*/
|
|
85
|
-
const
|
|
86
|
-
if (!
|
|
87
|
-
|
|
61
|
+
const triggerOnBeforeTypedChar = async (char) => {
|
|
62
|
+
if (!onBeforeTypedChar) {
|
|
63
|
+
return;
|
|
88
64
|
}
|
|
65
|
+
const { answerType, content, index } = char;
|
|
66
|
+
const allLength = wholeContentRef.current.allLength;
|
|
67
|
+
// 计算之前字符的百分比
|
|
68
|
+
const percent = (char.index / allLength) * 100;
|
|
69
|
+
await onBeforeTypedChar({
|
|
70
|
+
currentIndex: index,
|
|
71
|
+
currentChar: content,
|
|
72
|
+
answerType: answerType,
|
|
73
|
+
prevStr: wholeContentRef.current[answerType].content,
|
|
74
|
+
percent,
|
|
75
|
+
});
|
|
76
|
+
};
|
|
77
|
+
/** 打字完成回调 */
|
|
78
|
+
const triggerOnTypedChar = async (char) => {
|
|
89
79
|
if (!onTypedChar) {
|
|
90
80
|
return;
|
|
91
81
|
}
|
|
@@ -96,7 +86,8 @@ export const useTypingTask = (options) => {
|
|
|
96
86
|
currentIndex: index,
|
|
97
87
|
currentChar: content,
|
|
98
88
|
answerType: answerType,
|
|
99
|
-
prevStr:
|
|
89
|
+
prevStr: wholeContentRef.current[answerType].content.slice(0, index),
|
|
90
|
+
currentStr: wholeContentRef.current[answerType].content,
|
|
100
91
|
percent,
|
|
101
92
|
});
|
|
102
93
|
};
|
|
@@ -132,7 +123,7 @@ export const useTypingTask = (options) => {
|
|
|
132
123
|
}
|
|
133
124
|
};
|
|
134
125
|
/** 打字机打完所有字符 */
|
|
135
|
-
function typingRemainAll() {
|
|
126
|
+
async function typingRemainAll() {
|
|
136
127
|
const chars = getChars();
|
|
137
128
|
const thinkingCharsStr = chars
|
|
138
129
|
.filter((char) => char.answerType === 'thinking')
|
|
@@ -143,20 +134,20 @@ export const useTypingTask = (options) => {
|
|
|
143
134
|
.map((char) => char.content)
|
|
144
135
|
.join('');
|
|
145
136
|
if (thinkingCharsStr) {
|
|
146
|
-
|
|
137
|
+
await onBeforeTypedChar?.({
|
|
147
138
|
currentIndex: wholeContentRef.current.thinking.length,
|
|
148
139
|
currentChar: thinkingCharsStr,
|
|
149
140
|
answerType: 'thinking',
|
|
150
|
-
prevStr:
|
|
141
|
+
prevStr: wholeContentRef.current.thinking.content,
|
|
151
142
|
percent: 100,
|
|
152
143
|
});
|
|
153
144
|
}
|
|
154
145
|
if (answerCharsStr) {
|
|
155
|
-
|
|
146
|
+
await onBeforeTypedChar?.({
|
|
156
147
|
currentIndex: wholeContentRef.current.answer.length,
|
|
157
148
|
currentChar: answerCharsStr,
|
|
158
149
|
answerType: 'answer',
|
|
159
|
-
prevStr:
|
|
150
|
+
prevStr: wholeContentRef.current.answer.content,
|
|
160
151
|
percent: 100,
|
|
161
152
|
});
|
|
162
153
|
}
|
|
@@ -173,10 +164,10 @@ export const useTypingTask = (options) => {
|
|
|
173
164
|
/** requestAnimationFrame 模式 */
|
|
174
165
|
const startAnimationFrameMode = () => {
|
|
175
166
|
let lastFrameTime = 0;
|
|
176
|
-
const frameLoop = (currentTime) => {
|
|
167
|
+
const frameLoop = async (currentTime) => {
|
|
177
168
|
// 如果关闭打字机效果,则打完所有字符
|
|
178
169
|
if (disableTypingRef.current) {
|
|
179
|
-
typingRemainAll();
|
|
170
|
+
await typingRemainAll();
|
|
180
171
|
return;
|
|
181
172
|
}
|
|
182
173
|
const chars = getChars();
|
|
@@ -201,14 +192,14 @@ export const useTypingTask = (options) => {
|
|
|
201
192
|
if (!isTypingRef.current) {
|
|
202
193
|
isTypingRef.current = true;
|
|
203
194
|
triggerOnStart(char);
|
|
204
|
-
triggerOnTypedChar(char, true);
|
|
205
|
-
}
|
|
206
|
-
else {
|
|
207
|
-
triggerOnTypedChar(char);
|
|
208
195
|
}
|
|
196
|
+
/** 打字前回调 */
|
|
197
|
+
await triggerOnBeforeTypedChar(char);
|
|
209
198
|
processCharDisplay(char);
|
|
199
|
+
/** 打字完成回调 */
|
|
200
|
+
triggerOnTypedChar(char);
|
|
210
201
|
}
|
|
211
|
-
lastFrameTime =
|
|
202
|
+
lastFrameTime = performance.now();
|
|
212
203
|
// 继续下一帧
|
|
213
204
|
if (chars.length > 0) {
|
|
214
205
|
animationFrameRef.current = requestAnimationFrame(frameLoop);
|
|
@@ -241,7 +232,7 @@ export const useTypingTask = (options) => {
|
|
|
241
232
|
}
|
|
242
233
|
timerRef.current = setTimeout(startTyped, interval);
|
|
243
234
|
};
|
|
244
|
-
const startTyped = (isStartPoint = false) => {
|
|
235
|
+
const startTyped = async (isStartPoint = false) => {
|
|
245
236
|
// 如果关闭打字机效果,则打完所有字符
|
|
246
237
|
if (disableTypingRef.current) {
|
|
247
238
|
typingRemainAll();
|
|
@@ -258,12 +249,12 @@ export const useTypingTask = (options) => {
|
|
|
258
249
|
}
|
|
259
250
|
if (isStartPoint) {
|
|
260
251
|
triggerOnStart(char);
|
|
261
|
-
triggerOnTypedChar(char, isStartPoint);
|
|
262
|
-
}
|
|
263
|
-
else {
|
|
264
|
-
triggerOnTypedChar(char);
|
|
265
252
|
}
|
|
253
|
+
/** 打字前回调 */
|
|
254
|
+
await triggerOnBeforeTypedChar(char);
|
|
266
255
|
processCharDisplay(char);
|
|
256
|
+
/** 打字完成回调 */
|
|
257
|
+
triggerOnTypedChar(char);
|
|
267
258
|
nextTyped();
|
|
268
259
|
};
|
|
269
260
|
startTyped(true);
|
|
@@ -277,8 +268,7 @@ export const useTypingTask = (options) => {
|
|
|
277
268
|
}
|
|
278
269
|
triggerOnEnd();
|
|
279
270
|
};
|
|
280
|
-
const
|
|
281
|
-
typedIsManualStopRef.current = true;
|
|
271
|
+
const cancelTask = () => {
|
|
282
272
|
if (timerType === 'requestAnimationFrame') {
|
|
283
273
|
stopAnimationFrame();
|
|
284
274
|
}
|
|
@@ -286,18 +276,53 @@ export const useTypingTask = (options) => {
|
|
|
286
276
|
stopTimeout();
|
|
287
277
|
}
|
|
288
278
|
};
|
|
279
|
+
/** 暂时停止 */
|
|
280
|
+
const stopTask = () => {
|
|
281
|
+
typedIsManualStopRef.current = true;
|
|
282
|
+
cancelTask();
|
|
283
|
+
};
|
|
284
|
+
/** 停止打字任务 */
|
|
285
|
+
const endTask = () => {
|
|
286
|
+
cancelTask();
|
|
287
|
+
};
|
|
289
288
|
function restartTypedTask() {
|
|
289
|
+
endTask();
|
|
290
|
+
// 将wholeContentRef的内容放到charsRef中
|
|
291
|
+
charsRef.current.unshift(...wholeContentRef.current.thinking.content.split('').map((charUnit) => {
|
|
292
|
+
const char = {
|
|
293
|
+
content: charUnit,
|
|
294
|
+
answerType: 'thinking',
|
|
295
|
+
tokenId: 0,
|
|
296
|
+
index: 0,
|
|
297
|
+
};
|
|
298
|
+
return char;
|
|
299
|
+
}));
|
|
300
|
+
charsRef.current.unshift(...wholeContentRef.current.answer.content.split('').map((charUnit) => {
|
|
301
|
+
const char = {
|
|
302
|
+
content: charUnit,
|
|
303
|
+
answerType: 'answer',
|
|
304
|
+
tokenId: 0,
|
|
305
|
+
index: 0,
|
|
306
|
+
};
|
|
307
|
+
return char;
|
|
308
|
+
}));
|
|
309
|
+
resetWholeContent();
|
|
310
|
+
triggerUpdate();
|
|
311
|
+
startTypedTask();
|
|
312
|
+
}
|
|
313
|
+
function clear() {
|
|
314
|
+
clearTimer();
|
|
315
|
+
}
|
|
316
|
+
function resume() {
|
|
290
317
|
typedIsManualStopRef.current = false;
|
|
291
318
|
startTypedTask();
|
|
292
319
|
}
|
|
293
320
|
return {
|
|
294
321
|
start: startTypedTask,
|
|
322
|
+
restart: restartTypedTask,
|
|
295
323
|
stop: stopTask,
|
|
296
|
-
resume:
|
|
297
|
-
clear:
|
|
298
|
-
clearTimer();
|
|
299
|
-
typedCharsRef.current = undefined;
|
|
300
|
-
},
|
|
324
|
+
resume: resume,
|
|
325
|
+
clear: clear,
|
|
301
326
|
isTyping: () => isTypingRef.current,
|
|
302
327
|
typedIsManualStopRef,
|
|
303
328
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTypingTask.js","sourceRoot":"","sources":["../../../src/hooks/useTypingTask.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"useTypingTask.js","sourceRoot":"","sources":["../../../src/hooks/useTypingTask.ts"],"names":[],"mappings":"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"}
|