@assistant-ui/react 0.4.0 → 0.4.1
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/index.js +22 -22
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +22 -22
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
@@ -1171,7 +1171,8 @@ import { forwardRef as forwardRef7 } from "react";
|
|
1171
1171
|
// src/utils/hooks/useSmooth.tsx
|
1172
1172
|
import { useEffect as useEffect8, useState as useState5 } from "react";
|
1173
1173
|
var TextStreamAnimator = class {
|
1174
|
-
constructor(setText) {
|
1174
|
+
constructor(currentText, setText) {
|
1175
|
+
this.currentText = currentText;
|
1175
1176
|
this.setText = setText;
|
1176
1177
|
}
|
1177
1178
|
animationFrameId = null;
|
@@ -1192,33 +1193,31 @@ var TextStreamAnimator = class {
|
|
1192
1193
|
const currentTime = Date.now();
|
1193
1194
|
const deltaTime = currentTime - this.lastUpdateTime;
|
1194
1195
|
let timeToConsume = deltaTime;
|
1195
|
-
this.
|
1196
|
-
|
1197
|
-
|
1198
|
-
|
1199
|
-
|
1200
|
-
|
1201
|
-
|
1202
|
-
|
1203
|
-
let charsToAdd = 0;
|
1204
|
-
while (timeToConsume >= baseTimePerChar && charsToAdd < remainingChars) {
|
1205
|
-
charsToAdd++;
|
1206
|
-
timeToConsume -= baseTimePerChar;
|
1207
|
-
}
|
1196
|
+
const remainingChars = this.targetText.length - this.currentText.length;
|
1197
|
+
const baseTimePerChar = Math.min(5, 250 / remainingChars);
|
1198
|
+
let charsToAdd = 0;
|
1199
|
+
while (timeToConsume >= baseTimePerChar && charsToAdd < remainingChars) {
|
1200
|
+
charsToAdd++;
|
1201
|
+
timeToConsume -= baseTimePerChar;
|
1202
|
+
}
|
1203
|
+
if (charsToAdd !== remainingChars) {
|
1208
1204
|
this.animationFrameId = requestAnimationFrame(this.animate);
|
1209
|
-
|
1210
|
-
|
1211
|
-
|
1212
|
-
|
1213
|
-
|
1214
|
-
|
1215
|
-
|
1205
|
+
} else {
|
1206
|
+
this.animationFrameId = null;
|
1207
|
+
}
|
1208
|
+
if (charsToAdd === 0) return;
|
1209
|
+
this.currentText = this.targetText.slice(
|
1210
|
+
0,
|
1211
|
+
this.currentText.length + charsToAdd
|
1212
|
+
);
|
1213
|
+
this.lastUpdateTime = currentTime - timeToConsume;
|
1214
|
+
this.setText(this.currentText);
|
1216
1215
|
};
|
1217
1216
|
};
|
1218
1217
|
var useSmooth = (text, smooth = false) => {
|
1219
1218
|
const [displayedText, setDisplayedText] = useState5(text);
|
1220
1219
|
const [animatorRef] = useState5(
|
1221
|
-
new TextStreamAnimator(setDisplayedText)
|
1220
|
+
new TextStreamAnimator(text, setDisplayedText)
|
1222
1221
|
);
|
1223
1222
|
useEffect8(() => {
|
1224
1223
|
if (!smooth) {
|
@@ -1227,6 +1226,7 @@ var useSmooth = (text, smooth = false) => {
|
|
1227
1226
|
}
|
1228
1227
|
if (!text.startsWith(animatorRef.targetText)) {
|
1229
1228
|
setDisplayedText(text);
|
1229
|
+
animatorRef.currentText = text;
|
1230
1230
|
animatorRef.targetText = text;
|
1231
1231
|
animatorRef.stop();
|
1232
1232
|
return;
|