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.
@@ -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;AAM9F,QAAA,MAAM,gBAAgB,uHAkLrB,CAAC;AAMF,eAAe,gBAAgB,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
- const MarkdownTyperCMD = forwardRef(({ interval = 30, onEnd, onStart, onTypedChar, onBeforeTypedChar, timerType = 'setTimeout', reactMarkdownProps, disableTyping = false, autoStartTyping = true, customConvertMarkdownString }, ref) => {
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
- // 使用新的打字任务 hook
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 内容 {string}
102
- * @param answerType 回答类型 {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
- // 这里需要手动触发结束回调,因为 hook 中的 triggerOnEnd 不能直接调用
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
- return _jsx(ReactMarkdown, { ...reactMarkdownProps, children: markdownString });
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":"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"}
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;AACnD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,MAAM,gBAAgB,GAAG,UAAU,CACjC,CACE,EAAE,QAAQ,GAAG,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,SAAS,GAAG,YAAY,EAAE,kBAAkB,EAAE,aAAa,GAAG,KAAK,EAAE,eAAe,GAAG,IAAI,EAAE,2BAA2B,EAAE,UAAU,GAAG,KAAK,EAAE,MAAM,GAAG,GAAG,EAAE,iBAAiB,GAAG,IAAI,EAAE,EACvP,GAAG,EACH,EAAE;IACF,yGAAyG;IACzG,MAAM,kBAAkB,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;IAEnD,iCAAiC;IACjC,MAAM,kBAAkB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAEzC,kCAAkC;IAClC,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,sCAAsC;IACtC,MAAM,eAAe,GAAG,MAAM,CAAgB;QAC5C,OAAO,EAAE,EAAE;QACX,MAAM,EAAE,CAAC;QACT,UAAU,EAAE,CAAC;KACd,CAAC,CAAC;IAEH,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC7C,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,eAAe,CAAC,OAAO,CAAC,UAAU,GAAG,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC;QACpE,eAAe,CAAC,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC;QAChD,eAAe,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;QACtD,aAAa,EAAE,CAAC;IAClB,CAAC,CAAC;IAEF,MAAM,iBAAiB,GAAG,GAAG,EAAE;QAC7B,eAAe,CAAC,OAAO,CAAC,OAAO,GAAG,EAAE,CAAC;QACrC,eAAe,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QACnC,eAAe,CAAC,OAAO,CAAC,UAAU,GAAG,CAAC,CAAC;IACzC,CAAC,CAAC;IAEF,2BAA2B;IAC3B,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,EAAE;QAC/C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QACD,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;QACzC,QAAQ,CAAC,OAAO,CAAC,IAAI,CACnB,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;YAC1B,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,EAAE,CAAC;YACrC,MAAM,OAAO,GAAU;gBACrB,OAAO,EAAE,OAAO;gBAChB,OAAO,EAAE,CAAC;gBACV,KAAK;aACN,CAAC;YACF,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC,CACH,CAAC;QAEF,sFAAsF;QACtF,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,EAAE;QAC9C,eAAe,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC;QAE3C,8BAA8B;QAC9B,eAAe,CAAC,OAAO,CAAC,UAAU,GAAG,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC;QACpE,eAAe,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;QACjD,aAAa,EAAE,CAAC;QAChB,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAG;YACN,GAAG,EAAE,OAAO;YACZ,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,EAAE;YACxB,IAAI,aAAa,EAAE,CAAC;gBAClB,mBAAmB,CAAC,OAAO,CAAC,CAAC;gBAC7B,OAAO;YACT,CAAC;YACD,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAChC,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,mEAAmE;QACnE,KAAK,EAAE,GAAG,EAAE;YACV,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC;gBAChC,UAAU,CAAC,KAAK,EAAE,CAAC;gBACnB,+CAA+C;gBAC/C,aAAa,EAAE,CAAC;YAClB,CAAC;QACH,CAAC;QACD,uBAAuB;QACvB,IAAI,EAAE,GAAG,EAAE;YACT,UAAU,CAAC,IAAI,EAAE,CAAC;YAClB,iDAAiD;YACjD,aAAa,EAAE,CAAC;QAClB,CAAC;QACD,yBAAyB;QACzB,MAAM,EAAE,GAAG,EAAE;YACX,UAAU,CAAC,MAAM,EAAE,CAAC;YACpB,+CAA+C;YAC/C,aAAa,EAAE,CAAC;QAClB,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,qGAAqG;gBACrG,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAG;oBACN,GAAG,EAAE,eAAe,CAAC,OAAO,CAAC,OAAO;oBACpC,MAAM,EAAE,IAAI;iBACb,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,0BAA0B;QAC1B,OAAO,EAAE,GAAG,EAAE;YACZ,UAAU,CAAC,OAAO,EAAE,CAAC;QACvB,CAAC;KACF,CAAC,CAAC,CAAC;IAEJ,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,EAAE;QAClC,OAAO,CAAA,2BAA2B,aAA3B,2BAA2B,uBAA3B,2BAA2B,CAAG,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,KAAI,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC;IAC3G,CAAC,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,OAAO,EAAE,2BAA2B,CAAC,CAAC,CAAC;IAEnE,+CAA+C;IAC/C,yEAAyE;IACzE,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE;QACjC,oBAAoB;QACpB,uDAAuD;QACvD,kEAAkE;QAClE,MAAM,QAAQ,GAAG,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC;QAChD,MAAM,iBAAiB,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QACtD,MAAM,QAAQ,GAAG,CAAC,QAAQ,IAAI,iBAAiB,CAAC;QAChD,MAAM,mBAAmB,GAAG,UAAU,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,iBAAiB,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC;QAE1G,IAAI,mBAAmB,EAAE,CAAC;YACxB,+DAA+D;YAC/D,kEAAkE;YAClE,OAAO,cAAc,GAAG,gCAAgC,CAAC;QAC3D,CAAC;QACD,OAAO,cAAc,CAAC;IACxB,CAAC,EAAE,CAAC,cAAc,EAAE,UAAU,EAAE,iBAAiB,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC;IAEhF,+FAA+F;IAC/F,6DAA6D;IAC7D,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,EAAE;QACpC,MAAM,QAAQ,GAAG,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC;QAChD,MAAM,iBAAiB,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QACtD,MAAM,QAAQ,GAAG,CAAC,QAAQ,IAAI,iBAAiB,CAAC;QAChD,OAAO,UAAU,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,iBAAiB,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC;IACvF,CAAC,EAAE,CAAC,UAAU,EAAE,iBAAiB,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC;IAEhE,oDAAoD;IACpD,MAAM,kBAAkB,GAAG,OAAO,CAAC,GAAG,EAAE;QACtC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,wBAAwB,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC,EAAE,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC;IAE/B,uBAAuB;IACvB,MAAM,mBAAmB,GAAG,OAAO,CAAC,GAAG,EAAE;QACvC,MAAM,WAAW,GAAG,CAAA,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAE,aAAa,KAAI,EAAE,CAAC;QAC5D,IAAI,kBAAkB,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,WAAW,EAAE,kBAAkB,CAAC,CAAC;QAC9C,CAAC;QACD,OAAO,WAAW,CAAC;IACrB,CAAC,EAAE,CAAC,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAE,aAAa,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAE5D,mBAAmB;IACnB,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,EAAE;QACpC,IAAI,CAAC,gBAAgB,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YACpD,OAAO,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAE,UAAU,CAAC;QACxC,CAAC;QAED,yEAAyE;QACzE,OAAO;YACL,GAAG,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAE,UAAU;YACjC,IAAI,EAAE,CAAC,KAAU,EAAE,EAAE;;gBAAC,OAAA,CACpB,KAAC,UAAU,IACT,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,MAAA,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAE,UAAU,0CAAE,IAAI,KACnD,KAAK,GACT,CACH,CAAA;aAAA;SACF,CAAC;IACJ,CAAC,EAAE,CAAC,gBAAgB,EAAE,MAAM,EAAE,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAE,UAAU,CAAC,CAAC,CAAC;IAE/D,MAAM,wBAAwB,GAAG,OAAO,CAAC,GAAG,EAAE;QAC5C,OAAO;YACL,GAAG,kBAAkB;YACrB,aAAa,EAAE,mBAAmB;YAClC,UAAU,EAAE,gBAAgB;SAC7B,CAAC;IACJ,CAAC,EAAE,CAAC,kBAAkB,EAAE,mBAAmB,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAEhE,OAAO,KAAC,aAAa,OAAK,wBAAwB,YAAG,aAAa,GAAiB,CAAC;AACtF,CAAC,CACF,CAAC;AAEF,IAAI,OAAO,EAAE,CAAC;IACZ,gBAAgB,CAAC,WAAW,GAAG,kBAAkB,CAAC;AACpD,CAAC;AAED,eAAe,gBAAgB,CAAC"}
@@ -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
@@ -1,4 +1,4 @@
1
1
  export declare const __DEV__: boolean;
2
- /** 数学公式插件id */
2
+ /** KaTeX plugin ID */
3
3
  export declare const katexId: unique symbol;
4
4
  //# sourceMappingURL=constant.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constant.d.ts","sourceRoot":"","sources":["../src/constant.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,SAAyC,CAAC;AAE9D,eAAe;AACf,eAAO,MAAM,OAAO,eAAkB,CAAC"}
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
@@ -1,4 +1,4 @@
1
1
  export const __DEV__ = process.env.NODE_ENV === 'development';
2
- /** 数学公式插件id */
2
+ /** KaTeX plugin ID */
3
3
  export const katexId = Symbol('katex');
4
4
  //# sourceMappingURL=constant.js.map
@@ -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,eAAe;AACf,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC"}
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
- /** 曲线函数,如果配置了curveFn,则curve无效 */
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
- * 段落类型为br时,表示换行
24
- * 段落类型为text时,表示文本
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
- /** 计时类型: 支持setTimeoutrequestAnimationFrame */
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
- /** 自定义转换markdown string 函数 */
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
- /** MarkdownCMD 组件不需要 children */
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 组件的ref 类型 */
103
+ /** Markdown component ref type */
98
104
  export type MarkdownTyperRef = MarkdownBaseRef;
99
- /** MarkdownCMD 组件的 ref 类型 */
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
- /** 打字机打过的字符串, answerStr 相同 */
113
+ /** The string typed by the typewriter, same as answerStr */
108
114
  str: string;
109
115
  }
110
116
  //# sourceMappingURL=defined.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"defined.d.ts","sourceRoot":"","sources":["../src/defined.ts"],"names":[],"mappings":"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"}
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
- /** 是否主动调用 stop 方法 */
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,qBAAqB;IACrB,oBAAoB,EAAE,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,eAAO,MAAM,aAAa,GAAI,SAAS,oBAAoB,KAAG,oBA6Z7D,CAAC"}
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"}