@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.js
CHANGED
@@ -1244,7 +1244,8 @@ var import_react36 = require("react");
|
|
1244
1244
|
// src/utils/hooks/useSmooth.tsx
|
1245
1245
|
var import_react35 = require("react");
|
1246
1246
|
var TextStreamAnimator = class {
|
1247
|
-
constructor(setText) {
|
1247
|
+
constructor(currentText, setText) {
|
1248
|
+
this.currentText = currentText;
|
1248
1249
|
this.setText = setText;
|
1249
1250
|
}
|
1250
1251
|
animationFrameId = null;
|
@@ -1265,33 +1266,31 @@ var TextStreamAnimator = class {
|
|
1265
1266
|
const currentTime = Date.now();
|
1266
1267
|
const deltaTime = currentTime - this.lastUpdateTime;
|
1267
1268
|
let timeToConsume = deltaTime;
|
1268
|
-
this.
|
1269
|
-
|
1270
|
-
|
1271
|
-
|
1272
|
-
|
1273
|
-
|
1274
|
-
|
1275
|
-
|
1276
|
-
let charsToAdd = 0;
|
1277
|
-
while (timeToConsume >= baseTimePerChar && charsToAdd < remainingChars) {
|
1278
|
-
charsToAdd++;
|
1279
|
-
timeToConsume -= baseTimePerChar;
|
1280
|
-
}
|
1269
|
+
const remainingChars = this.targetText.length - this.currentText.length;
|
1270
|
+
const baseTimePerChar = Math.min(5, 250 / remainingChars);
|
1271
|
+
let charsToAdd = 0;
|
1272
|
+
while (timeToConsume >= baseTimePerChar && charsToAdd < remainingChars) {
|
1273
|
+
charsToAdd++;
|
1274
|
+
timeToConsume -= baseTimePerChar;
|
1275
|
+
}
|
1276
|
+
if (charsToAdd !== remainingChars) {
|
1281
1277
|
this.animationFrameId = requestAnimationFrame(this.animate);
|
1282
|
-
|
1283
|
-
|
1284
|
-
|
1285
|
-
|
1286
|
-
|
1287
|
-
|
1288
|
-
|
1278
|
+
} else {
|
1279
|
+
this.animationFrameId = null;
|
1280
|
+
}
|
1281
|
+
if (charsToAdd === 0) return;
|
1282
|
+
this.currentText = this.targetText.slice(
|
1283
|
+
0,
|
1284
|
+
this.currentText.length + charsToAdd
|
1285
|
+
);
|
1286
|
+
this.lastUpdateTime = currentTime - timeToConsume;
|
1287
|
+
this.setText(this.currentText);
|
1289
1288
|
};
|
1290
1289
|
};
|
1291
1290
|
var useSmooth = (text, smooth = false) => {
|
1292
1291
|
const [displayedText, setDisplayedText] = (0, import_react35.useState)(text);
|
1293
1292
|
const [animatorRef] = (0, import_react35.useState)(
|
1294
|
-
new TextStreamAnimator(setDisplayedText)
|
1293
|
+
new TextStreamAnimator(text, setDisplayedText)
|
1295
1294
|
);
|
1296
1295
|
(0, import_react35.useEffect)(() => {
|
1297
1296
|
if (!smooth) {
|
@@ -1300,6 +1299,7 @@ var useSmooth = (text, smooth = false) => {
|
|
1300
1299
|
}
|
1301
1300
|
if (!text.startsWith(animatorRef.targetText)) {
|
1302
1301
|
setDisplayedText(text);
|
1302
|
+
animatorRef.currentText = text;
|
1303
1303
|
animatorRef.targetText = text;
|
1304
1304
|
animatorRef.stop();
|
1305
1305
|
return;
|