ds-markdown 0.1.2-beta.1 → 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 +6 -0
- package/dist/cjs/Markdown/index.js.map +1 -1
- package/dist/cjs/MarkdownCMD/index.js +49 -12
- package/dist/cjs/MarkdownCMD/index.js.map +1 -1
- package/dist/cjs/defined.d.ts +22 -8
- package/dist/cjs/hooks/useTypingTask.d.ts +5 -6
- package/dist/cjs/hooks/useTypingTask.js +93 -68
- package/dist/cjs/hooks/useTypingTask.js.map +1 -1
- package/dist/esm/Markdown/index.js +6 -0
- package/dist/esm/Markdown/index.js.map +1 -1
- package/dist/esm/MarkdownCMD/index.js +49 -12
- package/dist/esm/MarkdownCMD/index.js.map +1 -1
- package/dist/esm/defined.d.ts +22 -8
- package/dist/esm/hooks/useTypingTask.d.ts +5 -6
- package/dist/esm/hooks/useTypingTask.js +93 -68
- package/dist/esm/hooks/useTypingTask.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
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,SAAS,GAAG,YAAY,EAAE,KAAK,GAAG,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/MarkdownCMD/index.tsx"],"names":[],"mappings":"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"}
|
package/dist/esm/defined.d.ts
CHANGED
|
@@ -9,10 +9,6 @@ export type Theme = 'light' | 'dark';
|
|
|
9
9
|
export interface IChar {
|
|
10
10
|
content: string;
|
|
11
11
|
answerType: AnswerType;
|
|
12
|
-
/**
|
|
13
|
-
* split_segment 两个连续的段落,需要做分割
|
|
14
|
-
*/
|
|
15
|
-
contentType: 'space' | 'segment' | 'split_segment';
|
|
16
12
|
tokenId: number;
|
|
17
13
|
/** 字符索引 */
|
|
18
14
|
index: number;
|
|
@@ -46,6 +42,10 @@ export interface IOnTypedCharData {
|
|
|
46
42
|
}
|
|
47
43
|
export interface ITypedChar extends IOnTypedCharData {
|
|
48
44
|
percent: number;
|
|
45
|
+
currentStr: string;
|
|
46
|
+
}
|
|
47
|
+
export interface IBeforeTypedChar extends IOnTypedCharData {
|
|
48
|
+
percent: number;
|
|
49
49
|
}
|
|
50
50
|
export interface MarkdownBaseProps {
|
|
51
51
|
/** 计时类型: 支持setTimeout和requestAnimationFrame */
|
|
@@ -57,12 +57,11 @@ export interface MarkdownBaseProps {
|
|
|
57
57
|
/** 是否关闭打字机效果 */
|
|
58
58
|
disableTyping?: boolean;
|
|
59
59
|
/** 打字完成后回调, */
|
|
60
|
-
onEnd?: (data?:
|
|
61
|
-
str?: string;
|
|
62
|
-
answerType?: AnswerType;
|
|
63
|
-
}) => void;
|
|
60
|
+
onEnd?: (data?: IEndData) => void;
|
|
64
61
|
/** 开始打字回调 */
|
|
65
62
|
onStart?: (data?: IOnTypedCharData) => void;
|
|
63
|
+
/** 打字前回调 */
|
|
64
|
+
onBeforeTypedChar?: (data?: IBeforeTypedChar) => Promise<void>;
|
|
66
65
|
/**
|
|
67
66
|
* 打字机打完一个字符回调
|
|
68
67
|
* @param char 字符
|
|
@@ -75,6 +74,8 @@ export interface MarkdownBaseProps {
|
|
|
75
74
|
math?: IMarkdownMath;
|
|
76
75
|
/** 插件配置 */
|
|
77
76
|
plugins?: IMarkdownPlugin[];
|
|
77
|
+
/** 是否自动开启打字动画 */
|
|
78
|
+
autoStartTyping?: boolean;
|
|
78
79
|
}
|
|
79
80
|
export interface MarkdownProps extends MarkdownBaseProps {
|
|
80
81
|
children: string | undefined;
|
|
@@ -97,16 +98,20 @@ export interface IWholeContent {
|
|
|
97
98
|
thinking: {
|
|
98
99
|
content: string;
|
|
99
100
|
length: number;
|
|
101
|
+
prevLength: number;
|
|
100
102
|
};
|
|
101
103
|
answer: {
|
|
102
104
|
content: string;
|
|
103
105
|
length: number;
|
|
106
|
+
prevLength: number;
|
|
104
107
|
};
|
|
105
108
|
allLength: number;
|
|
106
109
|
}
|
|
107
110
|
export interface MarkdownBaseRef {
|
|
108
111
|
stop: () => void;
|
|
109
112
|
resume: () => void;
|
|
113
|
+
start: () => void;
|
|
114
|
+
restart: () => void;
|
|
110
115
|
}
|
|
111
116
|
/** Markdown 组件的ref 类型 */
|
|
112
117
|
export type MarkdownRef = MarkdownBaseRef;
|
|
@@ -116,3 +121,12 @@ export interface MarkdownCMDRef extends MarkdownBaseRef {
|
|
|
116
121
|
clear: () => void;
|
|
117
122
|
triggerWholeEnd: () => void;
|
|
118
123
|
}
|
|
124
|
+
export interface IEndData {
|
|
125
|
+
manual: boolean;
|
|
126
|
+
/** 回答字符串 */
|
|
127
|
+
answerStr: string;
|
|
128
|
+
/** 思考字符串 */
|
|
129
|
+
thinkingStr: string;
|
|
130
|
+
/** 打字机打过的字符串, 和answerStr 相同 */
|
|
131
|
+
str: string;
|
|
132
|
+
}
|
|
@@ -1,24 +1,22 @@
|
|
|
1
|
-
import { AnswerType, IChar, ITypedChar, IWholeContent, MarkdownProps } from '../defined.js';
|
|
1
|
+
import { AnswerType, IChar, ITypedChar, IWholeContent, MarkdownProps, IEndData, IBeforeTypedChar } from '../defined.js';
|
|
2
2
|
interface UseTypingTaskOptions {
|
|
3
3
|
timerType: MarkdownProps['timerType'];
|
|
4
4
|
interval: number;
|
|
5
5
|
charsRef: React.RefObject<IChar[]>;
|
|
6
|
-
onEnd?: (data?:
|
|
7
|
-
str?: string;
|
|
8
|
-
answerType?: AnswerType;
|
|
9
|
-
manual: boolean;
|
|
10
|
-
}) => void;
|
|
6
|
+
onEnd?: (data?: IEndData) => void;
|
|
11
7
|
onStart?: (data?: {
|
|
12
8
|
currentIndex: number;
|
|
13
9
|
currentChar: string;
|
|
14
10
|
answerType: AnswerType;
|
|
15
11
|
prevStr: string;
|
|
16
12
|
}) => void;
|
|
13
|
+
onBeforeTypedChar?: (data?: IBeforeTypedChar) => Promise<void>;
|
|
17
14
|
onTypedChar?: (data?: ITypedChar) => void;
|
|
18
15
|
processCharDisplay: (char: IChar) => void;
|
|
19
16
|
wholeContentRef: React.RefObject<IWholeContent>;
|
|
20
17
|
disableTyping: boolean;
|
|
21
18
|
triggerUpdate: () => void;
|
|
19
|
+
resetWholeContent: () => void;
|
|
22
20
|
}
|
|
23
21
|
export interface TypingTaskController {
|
|
24
22
|
start: () => void;
|
|
@@ -28,6 +26,7 @@ export interface TypingTaskController {
|
|
|
28
26
|
/** 是否主动调用 stop 方法 */
|
|
29
27
|
typedIsManualStopRef: React.RefObject<boolean>;
|
|
30
28
|
resume: () => void;
|
|
29
|
+
restart: () => void;
|
|
31
30
|
}
|
|
32
31
|
export declare const useTypingTask: (options: UseTypingTaskOptions) => TypingTaskController;
|
|
33
32
|
export {};
|
|
@@ -1,10 +1,10 @@
|
|
|
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
|
/** 是否正在打字 */
|
|
7
|
-
const
|
|
7
|
+
const isTypingRef = useRef(false);
|
|
8
8
|
/** 动画帧ID */
|
|
9
9
|
const animationFrameRef = useRef(null);
|
|
10
10
|
/** 传统定时器(兼容模式) */
|
|
@@ -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
|
};
|
|
@@ -112,7 +103,7 @@ export const useTypingTask = (options) => {
|
|
|
112
103
|
clearTimeout(timerRef.current);
|
|
113
104
|
timerRef.current = null;
|
|
114
105
|
}
|
|
115
|
-
|
|
106
|
+
isTypingRef.current = false;
|
|
116
107
|
typedCharsRef.current = undefined;
|
|
117
108
|
};
|
|
118
109
|
/** 开始打字任务 */
|
|
@@ -121,7 +112,7 @@ export const useTypingTask = (options) => {
|
|
|
121
112
|
if (typedIsManualStopRef.current) {
|
|
122
113
|
return;
|
|
123
114
|
}
|
|
124
|
-
if (
|
|
115
|
+
if (isTypingRef.current) {
|
|
125
116
|
return;
|
|
126
117
|
}
|
|
127
118
|
if (timerType === 'requestAnimationFrame') {
|
|
@@ -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
|
}
|
|
@@ -166,17 +157,17 @@ export const useTypingTask = (options) => {
|
|
|
166
157
|
wholeContentRef.current.answer.length += answerCharsStr.length;
|
|
167
158
|
wholeContentRef.current.allLength += thinkingCharsStr.length + answerCharsStr.length;
|
|
168
159
|
charsRef.current = [];
|
|
169
|
-
|
|
160
|
+
isTypingRef.current = false;
|
|
170
161
|
triggerOnEnd();
|
|
171
162
|
triggerUpdate();
|
|
172
163
|
}
|
|
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();
|
|
@@ -198,23 +189,23 @@ export const useTypingTask = (options) => {
|
|
|
198
189
|
const char = chars.shift();
|
|
199
190
|
if (char === undefined)
|
|
200
191
|
break;
|
|
201
|
-
if (!
|
|
202
|
-
|
|
192
|
+
if (!isTypingRef.current) {
|
|
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);
|
|
215
206
|
}
|
|
216
207
|
else {
|
|
217
|
-
|
|
208
|
+
isTypingRef.current = false;
|
|
218
209
|
triggerOnEnd();
|
|
219
210
|
}
|
|
220
211
|
};
|
|
@@ -222,7 +213,7 @@ export const useTypingTask = (options) => {
|
|
|
222
213
|
};
|
|
223
214
|
/** 停止动画帧模式 */
|
|
224
215
|
const stopAnimationFrame = (manual = false) => {
|
|
225
|
-
|
|
216
|
+
isTypingRef.current = false;
|
|
226
217
|
if (animationFrameRef.current) {
|
|
227
218
|
cancelAnimationFrame(animationFrameRef.current);
|
|
228
219
|
animationFrameRef.current = null;
|
|
@@ -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();
|
|
@@ -250,7 +241,7 @@ export const useTypingTask = (options) => {
|
|
|
250
241
|
const chars = getChars();
|
|
251
242
|
if (isUnmountRef.current)
|
|
252
243
|
return;
|
|
253
|
-
|
|
244
|
+
isTypingRef.current = true;
|
|
254
245
|
const char = chars.shift();
|
|
255
246
|
if (char === undefined) {
|
|
256
247
|
stopTimeout();
|
|
@@ -258,27 +249,26 @@ 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);
|
|
270
261
|
};
|
|
271
262
|
/** 停止超时模式 */
|
|
272
263
|
const stopTimeout = () => {
|
|
273
|
-
|
|
264
|
+
isTypingRef.current = false;
|
|
274
265
|
if (timerRef.current) {
|
|
275
266
|
clearTimeout(timerRef.current);
|
|
276
267
|
timerRef.current = null;
|
|
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,19 +276,54 @@ 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
|
-
|
|
299
|
-
typedCharsRef.current = undefined;
|
|
300
|
-
},
|
|
301
|
-
isTyping: () => isTypedRef.current,
|
|
324
|
+
resume: resume,
|
|
325
|
+
clear: clear,
|
|
326
|
+
isTyping: () => isTypingRef.current,
|
|
302
327
|
typedIsManualStopRef,
|
|
303
328
|
};
|
|
304
329
|
};
|
|
@@ -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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"}
|