react-markdown-typer 1.0.3 → 1.0.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.
- package/README.md +239 -729
- package/README.zh.md +239 -699
- package/es/MarkdownTyperCMD/index.d.ts.map +1 -1
- package/es/MarkdownTyperCMD/index.js +93 -24
- package/es/MarkdownTyperCMD/index.js.map +1 -1
- package/es/components/CursorSpan.d.ts +14 -0
- package/es/components/CursorSpan.d.ts.map +1 -0
- package/es/components/CursorSpan.js +19 -0
- package/es/components/CursorSpan.js.map +1 -0
- package/es/constant.d.ts +1 -1
- package/es/constant.d.ts.map +1 -1
- package/es/constant.js +1 -1
- package/es/constant.js.map +1 -1
- package/es/defined.d.ts +32 -26
- package/es/defined.d.ts.map +1 -1
- package/es/hooks/useTypingTask.d.ts +3 -1
- package/es/hooks/useTypingTask.d.ts.map +1 -1
- package/es/hooks/useTypingTask.js +46 -45
- package/es/hooks/useTypingTask.js.map +1 -1
- package/es/index.d.ts +2 -1
- package/es/index.d.ts.map +1 -1
- package/es/index.js +2 -1
- package/es/index.js.map +1 -1
- package/es/plugins/rehypeCursor.d.ts +8 -0
- package/es/plugins/rehypeCursor.d.ts.map +1 -0
- package/es/plugins/rehypeCursor.js +54 -0
- package/es/plugins/rehypeCursor.js.map +1 -0
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/MarkdownTyperCMD/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAwB,mBAAmB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/MarkdownTyperCMD/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAwB,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAQ9F,QAAA,MAAM,gBAAgB,uHAgQrB,CAAC;AAMF,eAAe,gBAAgB,CAAC"}
|
|
@@ -4,31 +4,33 @@ import { __DEV__ } from '../constant.js';
|
|
|
4
4
|
import { useTypingTask } from '../hooks/useTypingTask.js';
|
|
5
5
|
import ReactMarkdown from 'react-markdown';
|
|
6
6
|
import { splitGraphemes } from '../utils/grapheme.js';
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
import { createRehypeCursorPlugin } from '../plugins/rehypeCursor.js';
|
|
8
|
+
import { CursorSpan } from '../components/CursorSpan.js';
|
|
9
|
+
const MarkdownTyperCMD = forwardRef(({ interval = 30, onEnd, onStart, onTypedChar, onBeforeTypedChar, timerType = 'setTimeout', reactMarkdownProps, disableTyping = false, autoStartTyping = true, customConvertMarkdownString, showCursor = false, cursor = '|', showCursorOnPause = true }, ref) => {
|
|
10
|
+
/** Whether to automatically start typing animation, changes after initialization will not take effect */
|
|
9
11
|
const autoStartTypingRef = useRef(autoStartTyping);
|
|
10
|
-
/**
|
|
12
|
+
/** Whether typing has started */
|
|
11
13
|
const isStartedTypingRef = useRef(false);
|
|
12
|
-
/**
|
|
14
|
+
/** Current content to be typed */
|
|
13
15
|
const charsRef = useRef([]);
|
|
14
16
|
/**
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
+
* Whether typing has completely ended
|
|
18
|
+
* If typing has completely ended, typing animation will not be triggered again
|
|
17
19
|
*/
|
|
18
20
|
const isWholeTypedEndRef = useRef(false);
|
|
19
21
|
const charIndexRef = useRef(0);
|
|
20
|
-
/**
|
|
22
|
+
/** Reference to the entire content */
|
|
21
23
|
const wholeContentRef = useRef({
|
|
22
24
|
content: '',
|
|
23
25
|
length: 0,
|
|
24
26
|
prevLength: 0,
|
|
25
27
|
});
|
|
26
|
-
const [, setUpdate] = useState(0);
|
|
28
|
+
const [updateCount, setUpdate] = useState(0);
|
|
27
29
|
const triggerUpdate = () => {
|
|
28
30
|
setUpdate((prev) => prev + 1);
|
|
29
31
|
};
|
|
30
32
|
/**
|
|
31
|
-
*
|
|
33
|
+
* Handle character display logic
|
|
32
34
|
*/
|
|
33
35
|
const processCharDisplay = (char) => {
|
|
34
36
|
if (!isStartedTypingRef.current) {
|
|
@@ -44,7 +46,7 @@ const MarkdownTyperCMD = forwardRef(({ interval = 30, onEnd, onStart, onTypedCha
|
|
|
44
46
|
wholeContentRef.current.length = 0;
|
|
45
47
|
wholeContentRef.current.prevLength = 0;
|
|
46
48
|
};
|
|
47
|
-
//
|
|
49
|
+
// Use new typing task hook
|
|
48
50
|
const typingTask = useTypingTask({
|
|
49
51
|
timerType,
|
|
50
52
|
interval,
|
|
@@ -60,7 +62,7 @@ const MarkdownTyperCMD = forwardRef(({ interval = 30, onEnd, onStart, onTypedCha
|
|
|
60
62
|
resetWholeContent,
|
|
61
63
|
});
|
|
62
64
|
/**
|
|
63
|
-
*
|
|
65
|
+
* Internal push processing logic
|
|
64
66
|
*/
|
|
65
67
|
const processHasTypingPush = (content) => {
|
|
66
68
|
if (content.length === 0) {
|
|
@@ -76,7 +78,7 @@ const MarkdownTyperCMD = forwardRef(({ interval = 30, onEnd, onStart, onTypedCha
|
|
|
76
78
|
};
|
|
77
79
|
return charObj;
|
|
78
80
|
}));
|
|
79
|
-
//
|
|
81
|
+
// If auto typing is disabled and typing hasn't started, do not start typing animation
|
|
80
82
|
if (!autoStartTypingRef.current && !isStartedTypingRef.current) {
|
|
81
83
|
return;
|
|
82
84
|
}
|
|
@@ -86,7 +88,7 @@ const MarkdownTyperCMD = forwardRef(({ interval = 30, onEnd, onStart, onTypedCha
|
|
|
86
88
|
};
|
|
87
89
|
const processNoTypingPush = (content) => {
|
|
88
90
|
wholeContentRef.current.content += content;
|
|
89
|
-
//
|
|
91
|
+
// Record length before typing
|
|
90
92
|
wholeContentRef.current.prevLength = wholeContentRef.current.length;
|
|
91
93
|
wholeContentRef.current.length += content.length;
|
|
92
94
|
triggerUpdate();
|
|
@@ -97,9 +99,9 @@ const MarkdownTyperCMD = forwardRef(({ interval = 30, onEnd, onStart, onTypedCha
|
|
|
97
99
|
};
|
|
98
100
|
useImperativeHandle(ref, () => ({
|
|
99
101
|
/**
|
|
100
|
-
*
|
|
101
|
-
* @param content
|
|
102
|
-
* @param answerType
|
|
102
|
+
* Add content
|
|
103
|
+
* @param content Content {string}
|
|
104
|
+
* @param answerType Answer type {AnswerType}
|
|
103
105
|
*/
|
|
104
106
|
push: (content) => {
|
|
105
107
|
if (disableTyping) {
|
|
@@ -109,7 +111,7 @@ const MarkdownTyperCMD = forwardRef(({ interval = 30, onEnd, onStart, onTypedCha
|
|
|
109
111
|
processHasTypingPush(content);
|
|
110
112
|
},
|
|
111
113
|
/**
|
|
112
|
-
*
|
|
114
|
+
* Clear typing task
|
|
113
115
|
*/
|
|
114
116
|
clear: () => {
|
|
115
117
|
typingTask.stop();
|
|
@@ -121,34 +123,40 @@ const MarkdownTyperCMD = forwardRef(({ interval = 30, onEnd, onStart, onTypedCha
|
|
|
121
123
|
isStartedTypingRef.current = false;
|
|
122
124
|
triggerUpdate();
|
|
123
125
|
},
|
|
124
|
-
/**
|
|
126
|
+
/** Start typing, only takes effect when auto typing is disabled */
|
|
125
127
|
start: () => {
|
|
126
128
|
if (!autoStartTypingRef.current) {
|
|
127
129
|
typingTask.start();
|
|
130
|
+
// Trigger re-render to show cursor placeholder
|
|
131
|
+
triggerUpdate();
|
|
128
132
|
}
|
|
129
133
|
},
|
|
130
|
-
/**
|
|
134
|
+
/** Stop typing task */
|
|
131
135
|
stop: () => {
|
|
132
136
|
typingTask.stop();
|
|
137
|
+
// Trigger re-render to remove cursor placeholder
|
|
138
|
+
triggerUpdate();
|
|
133
139
|
},
|
|
134
|
-
/**
|
|
140
|
+
/** Resume typing task */
|
|
135
141
|
resume: () => {
|
|
136
142
|
typingTask.resume();
|
|
143
|
+
// Trigger re-render to show cursor placeholder
|
|
144
|
+
triggerUpdate();
|
|
137
145
|
},
|
|
138
146
|
/**
|
|
139
|
-
*
|
|
147
|
+
* Manually trigger typing end
|
|
140
148
|
*/
|
|
141
149
|
triggerWholeEnd: () => {
|
|
142
150
|
isWholeTypedEndRef.current = true;
|
|
143
151
|
if (!typingTask.isTyping()) {
|
|
144
|
-
//
|
|
152
|
+
// Need to manually trigger end callback here, because triggerOnEnd in hook cannot be called directly
|
|
145
153
|
onEnd === null || onEnd === void 0 ? void 0 : onEnd({
|
|
146
154
|
str: wholeContentRef.current.content,
|
|
147
155
|
manual: true,
|
|
148
156
|
});
|
|
149
157
|
}
|
|
150
158
|
},
|
|
151
|
-
/**
|
|
159
|
+
/** Restart typing task */
|
|
152
160
|
restart: () => {
|
|
153
161
|
typingTask.restart();
|
|
154
162
|
},
|
|
@@ -156,7 +164,68 @@ const MarkdownTyperCMD = forwardRef(({ interval = 30, onEnd, onStart, onTypedCha
|
|
|
156
164
|
const markdownString = useMemo(() => {
|
|
157
165
|
return (customConvertMarkdownString === null || customConvertMarkdownString === void 0 ? void 0 : customConvertMarkdownString(wholeContentRef.current.content)) || wholeContentRef.current.content;
|
|
158
166
|
}, [wholeContentRef.current.content, customConvertMarkdownString]);
|
|
159
|
-
|
|
167
|
+
// Build display string with cursor placeholder
|
|
168
|
+
// Include updateCount to ensure re-calculation when typing state changes
|
|
169
|
+
const displayString = useMemo(() => {
|
|
170
|
+
// Show cursor when:
|
|
171
|
+
// 1. Currently typing (isTypingRef.current = true), or
|
|
172
|
+
// 2. Paused and showCursorOnPause is true and has pending content
|
|
173
|
+
const isTyping = typingTask.isTypingRef.current;
|
|
174
|
+
const hasPendingContent = charsRef.current.length > 0;
|
|
175
|
+
const isPaused = !isTyping && hasPendingContent;
|
|
176
|
+
const shouldShowCursorNow = showCursor && (isTyping || (isPaused && showCursorOnPause)) && !disableTyping;
|
|
177
|
+
if (shouldShowCursorNow) {
|
|
178
|
+
// Use a unique marker that won't conflict with markdown syntax
|
|
179
|
+
// Using zero-width space to make it invisible if somehow rendered
|
|
180
|
+
return markdownString + '\u200B__MDTYPER_CURSOR__\u200B';
|
|
181
|
+
}
|
|
182
|
+
return markdownString;
|
|
183
|
+
}, [markdownString, showCursor, showCursorOnPause, disableTyping, updateCount]);
|
|
184
|
+
// Show cursor when typing is in progress (or paused based on config) and showCursor is enabled
|
|
185
|
+
// Must calculate after displayString to use same updateCount
|
|
186
|
+
const shouldShowCursor = useMemo(() => {
|
|
187
|
+
const isTyping = typingTask.isTypingRef.current;
|
|
188
|
+
const hasPendingContent = charsRef.current.length > 0;
|
|
189
|
+
const isPaused = !isTyping && hasPendingContent;
|
|
190
|
+
return showCursor && (isTyping || (isPaused && showCursorOnPause)) && !disableTyping;
|
|
191
|
+
}, [showCursor, showCursorOnPause, disableTyping, updateCount]);
|
|
192
|
+
// Create rehype plugin to handle cursor placeholder
|
|
193
|
+
const rehypeCursorPlugin = useMemo(() => {
|
|
194
|
+
if (!shouldShowCursor) {
|
|
195
|
+
return null;
|
|
196
|
+
}
|
|
197
|
+
return createRehypeCursorPlugin(cursor);
|
|
198
|
+
}, [shouldShowCursor, cursor]);
|
|
199
|
+
// Merge rehype plugins
|
|
200
|
+
const mergedRehypePlugins = useMemo(() => {
|
|
201
|
+
const basePlugins = (reactMarkdownProps === null || reactMarkdownProps === void 0 ? void 0 : reactMarkdownProps.rehypePlugins) || [];
|
|
202
|
+
if (rehypeCursorPlugin) {
|
|
203
|
+
return [...basePlugins, rehypeCursorPlugin];
|
|
204
|
+
}
|
|
205
|
+
return basePlugins;
|
|
206
|
+
}, [reactMarkdownProps === null || reactMarkdownProps === void 0 ? void 0 : reactMarkdownProps.rehypePlugins, rehypeCursorPlugin]);
|
|
207
|
+
// Merge components
|
|
208
|
+
const mergedComponents = useMemo(() => {
|
|
209
|
+
if (!shouldShowCursor || typeof cursor === 'string') {
|
|
210
|
+
return reactMarkdownProps === null || reactMarkdownProps === void 0 ? void 0 : reactMarkdownProps.components;
|
|
211
|
+
}
|
|
212
|
+
// For ReactNode cursor, wrap span component to handle cursor placeholder
|
|
213
|
+
return {
|
|
214
|
+
...reactMarkdownProps === null || reactMarkdownProps === void 0 ? void 0 : reactMarkdownProps.components,
|
|
215
|
+
span: (props) => {
|
|
216
|
+
var _a;
|
|
217
|
+
return (_jsx(CursorSpan, { cursor: cursor, userSpanComponent: (_a = reactMarkdownProps === null || reactMarkdownProps === void 0 ? void 0 : reactMarkdownProps.components) === null || _a === void 0 ? void 0 : _a.span, ...props }));
|
|
218
|
+
},
|
|
219
|
+
};
|
|
220
|
+
}, [shouldShowCursor, cursor, reactMarkdownProps === null || reactMarkdownProps === void 0 ? void 0 : reactMarkdownProps.components]);
|
|
221
|
+
const mergedReactMarkdownProps = useMemo(() => {
|
|
222
|
+
return {
|
|
223
|
+
...reactMarkdownProps,
|
|
224
|
+
rehypePlugins: mergedRehypePlugins,
|
|
225
|
+
components: mergedComponents,
|
|
226
|
+
};
|
|
227
|
+
}, [reactMarkdownProps, mergedRehypePlugins, mergedComponents]);
|
|
228
|
+
return _jsx(ReactMarkdown, { ...mergedReactMarkdownProps, children: displayString });
|
|
160
229
|
});
|
|
161
230
|
if (__DEV__) {
|
|
162
231
|
MarkdownTyperCMD.displayName = 'MarkdownTyperCMD';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/MarkdownTyperCMD/index.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEnF,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,aAAa,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/MarkdownTyperCMD/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface CursorSpanProps {
|
|
3
|
+
cursor: React.ReactNode;
|
|
4
|
+
userSpanComponent?: React.ComponentType<any>;
|
|
5
|
+
node?: any;
|
|
6
|
+
[key: string]: any;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Span component that handles cursor placeholder rendering
|
|
10
|
+
* Falls back to user's custom span component if not a cursor placeholder
|
|
11
|
+
*/
|
|
12
|
+
export declare const CursorSpan: React.FC<CursorSpanProps>;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=CursorSpan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CursorSpan.d.ts","sourceRoot":"","sources":["../../src/components/CursorSpan.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,UAAU,eAAe;IACvB,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,iBAAiB,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAC7C,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAmBhD,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* Span component that handles cursor placeholder rendering
|
|
4
|
+
* Falls back to user's custom span component if not a cursor placeholder
|
|
5
|
+
*/
|
|
6
|
+
export const CursorSpan = ({ cursor, userSpanComponent, node, ...props }) => {
|
|
7
|
+
// Render cursor component for placeholder
|
|
8
|
+
if (props['data-cursor-placeholder'] === 'true') {
|
|
9
|
+
return _jsx(_Fragment, { children: cursor });
|
|
10
|
+
}
|
|
11
|
+
// Normal span rendering - use user's custom component if provided
|
|
12
|
+
if (userSpanComponent) {
|
|
13
|
+
const UserSpan = userSpanComponent;
|
|
14
|
+
return _jsx(UserSpan, { node: node, ...props });
|
|
15
|
+
}
|
|
16
|
+
// Default span
|
|
17
|
+
return _jsx("span", { ...props });
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=CursorSpan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CursorSpan.js","sourceRoot":"","sources":["../../src/components/CursorSpan.tsx"],"names":[],"mappings":";AASA;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAA8B,CAAC,EACpD,MAAM,EACN,iBAAiB,EACjB,IAAI,EACJ,GAAG,KAAK,EACT,EAAE,EAAE;IACH,0CAA0C;IAC1C,IAAI,KAAK,CAAC,yBAAyB,CAAC,KAAK,MAAM,EAAE,CAAC;QAChD,OAAO,4BAAG,MAAM,GAAI,CAAC;IACvB,CAAC;IAED,kEAAkE;IAClE,IAAI,iBAAiB,EAAE,CAAC;QACtB,MAAM,QAAQ,GAAG,iBAAiB,CAAC;QACnC,OAAO,KAAC,QAAQ,IAAC,IAAI,EAAE,IAAI,KAAM,KAAK,GAAI,CAAC;IAC7C,CAAC;IAED,eAAe;IACf,OAAO,kBAAU,KAAK,GAAI,CAAC;AAC7B,CAAC,CAAC"}
|
package/es/constant.d.ts
CHANGED
package/es/constant.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constant.d.ts","sourceRoot":"","sources":["../src/constant.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,SAAyC,CAAC;AAE9D,
|
|
1
|
+
{"version":3,"file":"constant.d.ts","sourceRoot":"","sources":["../src/constant.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,SAAyC,CAAC;AAE9D,sBAAsB;AACtB,eAAO,MAAM,OAAO,eAAkB,CAAC"}
|
package/es/constant.js
CHANGED
package/es/constant.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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,
|
|
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,sBAAsB;AACtB,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC"}
|
package/es/defined.d.ts
CHANGED
|
@@ -1,32 +1,32 @@
|
|
|
1
1
|
import { Options } from 'react-markdown';
|
|
2
2
|
export type IntervalType = number | {
|
|
3
|
-
/**
|
|
3
|
+
/** Maximum interval */
|
|
4
4
|
max: number;
|
|
5
|
-
/**
|
|
5
|
+
/** Minimum interval */
|
|
6
6
|
min: number;
|
|
7
|
-
/**
|
|
7
|
+
/** Custom curve function */
|
|
8
8
|
curveFn?: (x: number) => number;
|
|
9
|
-
/**
|
|
9
|
+
/** Curve function, if curveFn is configured, curve will be ignored */
|
|
10
10
|
curve?: 'ease' | 'ease-in' | 'ease-out' | 'ease-in-out' | 'linear' | 'step-start' | 'step-end';
|
|
11
11
|
};
|
|
12
12
|
/**
|
|
13
|
-
*
|
|
13
|
+
* Character interface
|
|
14
14
|
*/
|
|
15
15
|
export interface IChar {
|
|
16
16
|
content: string;
|
|
17
17
|
tokenId: number;
|
|
18
|
-
/**
|
|
18
|
+
/** Character index */
|
|
19
19
|
index: number;
|
|
20
20
|
}
|
|
21
21
|
/**
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
22
|
+
* Paragraph type
|
|
23
|
+
* When paragraph type is br, it represents a line break
|
|
24
|
+
* When paragraph type is text, it represents text
|
|
25
25
|
*/
|
|
26
26
|
export interface IParagraph {
|
|
27
|
-
/**
|
|
27
|
+
/** Paragraph content */
|
|
28
28
|
content?: string;
|
|
29
|
-
/**
|
|
29
|
+
/** Whether it has been typed */
|
|
30
30
|
isTyped: boolean;
|
|
31
31
|
}
|
|
32
32
|
export interface ITokensReference {
|
|
@@ -47,33 +47,39 @@ export interface IBeforeTypedChar extends IOnTypedCharData {
|
|
|
47
47
|
}
|
|
48
48
|
export interface MarkdownTyperBaseProps {
|
|
49
49
|
reactMarkdownProps?: Options;
|
|
50
|
-
/**
|
|
50
|
+
/** Timer type: supports setTimeout and requestAnimationFrame */
|
|
51
51
|
timerType?: 'setTimeout' | 'requestAnimationFrame';
|
|
52
|
-
/**
|
|
52
|
+
/** Typing animation interval time */
|
|
53
53
|
interval: IntervalType;
|
|
54
|
-
/**
|
|
54
|
+
/** Whether to disable typing animation */
|
|
55
55
|
disableTyping?: boolean;
|
|
56
|
-
/**
|
|
56
|
+
/** Callback after typing is complete */
|
|
57
57
|
onEnd?: (data?: IEndData) => void;
|
|
58
|
-
/**
|
|
58
|
+
/** Callback when typing starts */
|
|
59
59
|
onStart?: (data?: IOnTypedCharData) => void;
|
|
60
|
-
/**
|
|
60
|
+
/** Callback before typing a character */
|
|
61
61
|
onBeforeTypedChar?: (data?: IBeforeTypedChar) => Promise<void>;
|
|
62
62
|
/**
|
|
63
|
-
*
|
|
64
|
-
* @param char
|
|
65
|
-
* @param index
|
|
63
|
+
* Callback after typing a character
|
|
64
|
+
* @param char Character
|
|
65
|
+
* @param index Character index
|
|
66
66
|
*/
|
|
67
67
|
onTypedChar?: (data?: ITypedChar) => void;
|
|
68
|
-
/**
|
|
68
|
+
/** Whether to automatically start typing animation */
|
|
69
69
|
autoStartTyping?: boolean;
|
|
70
|
-
/**
|
|
70
|
+
/** Custom function to convert markdown string */
|
|
71
71
|
customConvertMarkdownString?: (markdownString: string) => string;
|
|
72
|
+
/** Whether to show cursor during typing */
|
|
73
|
+
showCursor?: boolean;
|
|
74
|
+
/** Custom cursor, can be string or ReactNode, default is '|' */
|
|
75
|
+
cursor?: React.ReactNode;
|
|
76
|
+
/** Whether to show cursor when typing is paused, default is true */
|
|
77
|
+
showCursorOnPause?: boolean;
|
|
72
78
|
}
|
|
73
79
|
export interface MarkdownTyperProps extends MarkdownTyperBaseProps {
|
|
74
80
|
children: string | undefined;
|
|
75
81
|
}
|
|
76
|
-
/**
|
|
82
|
+
/** MarkdownCMD component does not need children */
|
|
77
83
|
export interface MarkdownTyperCMDProps extends MarkdownTyperBaseProps {
|
|
78
84
|
children?: undefined;
|
|
79
85
|
}
|
|
@@ -94,9 +100,9 @@ export interface MarkdownBaseRef {
|
|
|
94
100
|
start: () => void;
|
|
95
101
|
restart: () => void;
|
|
96
102
|
}
|
|
97
|
-
/** Markdown
|
|
103
|
+
/** Markdown component ref type */
|
|
98
104
|
export type MarkdownTyperRef = MarkdownBaseRef;
|
|
99
|
-
/** MarkdownCMD
|
|
105
|
+
/** MarkdownCMD component ref type */
|
|
100
106
|
export interface MarkdownTyperCMDRef extends MarkdownBaseRef {
|
|
101
107
|
push: (content: string) => void;
|
|
102
108
|
clear: () => void;
|
|
@@ -104,7 +110,7 @@ export interface MarkdownTyperCMDRef extends MarkdownBaseRef {
|
|
|
104
110
|
}
|
|
105
111
|
export interface IEndData {
|
|
106
112
|
manual: boolean;
|
|
107
|
-
/**
|
|
113
|
+
/** The string typed by the typewriter, same as answerStr */
|
|
108
114
|
str: string;
|
|
109
115
|
}
|
|
110
116
|
//# sourceMappingURL=defined.d.ts.map
|
package/es/defined.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defined.d.ts","sourceRoot":"","sources":["../src/defined.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC,MAAM,MAAM,YAAY,GACpB,MAAM,GACN;IACE,
|
|
1
|
+
{"version":3,"file":"defined.d.ts","sourceRoot":"","sources":["../src/defined.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,10 +22,12 @@ export interface TypingTaskController {
|
|
|
22
22
|
stop: () => void;
|
|
23
23
|
clear: () => void;
|
|
24
24
|
isTyping: () => boolean;
|
|
25
|
-
/**
|
|
25
|
+
/** Whether stop method was called manually */
|
|
26
26
|
typedIsManualStopRef: React.RefObject<boolean>;
|
|
27
27
|
resume: () => void;
|
|
28
28
|
restart: () => void;
|
|
29
|
+
/** Whether currently typing (for cursor display) */
|
|
30
|
+
isTypingRef: React.RefObject<boolean>;
|
|
29
31
|
}
|
|
30
32
|
export declare const useTypingTask: (options: UseTypingTaskOptions) => TypingTaskController;
|
|
31
33
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTypingTask.d.ts","sourceRoot":"","sources":["../../src/hooks/useTypingTask.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,kBAAkB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE5H,UAAU,oBAAoB;IAC5B,SAAS,EAAE,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAC3C,QAAQ,EAAE,YAAY,CAAC;IACvB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC;IACnC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,QAAQ,KAAK,IAAI,CAAC;IAClC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAC1F,iBAAiB,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,gBAAgB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/D,WAAW,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IAC1C,kBAAkB,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,CAAC;IAC1C,eAAe,EAAE,KAAK,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IAChD,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,iBAAiB,EAAE,MAAM,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,QAAQ,EAAE,MAAM,OAAO,CAAC;IACxB,
|
|
1
|
+
{"version":3,"file":"useTypingTask.d.ts","sourceRoot":"","sources":["../../src/hooks/useTypingTask.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,kBAAkB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE5H,UAAU,oBAAoB;IAC5B,SAAS,EAAE,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAC3C,QAAQ,EAAE,YAAY,CAAC;IACvB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC;IACnC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,QAAQ,KAAK,IAAI,CAAC;IAClC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAC1F,iBAAiB,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,gBAAgB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/D,WAAW,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IAC1C,kBAAkB,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,CAAC;IAC1C,eAAe,EAAE,KAAK,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IAChD,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,iBAAiB,EAAE,MAAM,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,QAAQ,EAAE,MAAM,OAAO,CAAC;IACxB,8CAA8C;IAC9C,oBAAoB,EAAE,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,oDAAoD;IACpD,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;CACvC;AAED,eAAO,MAAM,aAAa,GAAI,SAAS,oBAAoB,KAAG,oBA8Z7D,CAAC"}
|