@assistant-ui/react 0.4.0 → 0.4.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/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;
|