Start fade spans when appended

This commit is contained in:
Rod Boev 2026-07-03 22:32:53 -04:00
parent af2f534f21
commit 28d058ad2e
2 changed files with 5 additions and 16 deletions

View file

@ -2543,7 +2543,6 @@ function attachLiveStream(activeSid, streamId, uploaded=[], options={}){
let _streamFadeLastArrivalMs=0;
let _streamFadeArrivalWps=0;
let _streamFadeLatestAnimationEndAt=0;
let _streamFadeAppendOffset=0;
let _streamFadeVisibleWords=0;
let _streamFadeHoldUntilMs=0;
let _streamFadeCurrentMs=200;
@ -2560,7 +2559,6 @@ function attachLiveStream(activeSid, streamId, uploaded=[], options={}){
let _lastRunJournalEventId='';
const _STREAM_FADE_MS=200;
const _STREAM_FADE_MAX_MS=350;
const _STREAM_FADE_STAGGER_MS=16;
const _STREAM_FADE_DONE_MAX_MS=320;
const _STREAM_FADE_DONE_DRAIN_MAX_MS=900;
const _anchorApi=(typeof window!=='undefined'&&window.HermesAssistantTurnAnchors)
@ -4088,7 +4086,6 @@ function attachLiveStream(activeSid, streamId, uploaded=[], options={}){
_streamFadeLastArrivalMs=0;
_streamFadeArrivalWps=0;
_streamFadeLatestAnimationEndAt=0;
_streamFadeAppendOffset=0;
_streamFadeVisibleWords=0;
_streamFadeHoldUntilMs=0;
_streamFadeCurrentMs=_STREAM_FADE_MS;
@ -4162,13 +4159,10 @@ function attachLiveStream(activeSid, streamId, uploaded=[], options={}){
const span=document.createElement('span');
span.className='stream-fade-word is-new';
const fadeMs=_streamFadeCurrentMs||_STREAM_FADE_MS;
const delayMs=_streamFadeAppendOffset*_STREAM_FADE_STAGGER_MS;
span.style.animationDelay=delayMs+'ms';
if(fadeMs!==_STREAM_FADE_MS) span.style.setProperty('--stream-fade-ms',fadeMs+'ms');
span.textContent=match[1];
frag.appendChild(span);
_streamFadeAppendOffset+=1;
_streamFadeLatestAnimationEndAt=Math.max(_streamFadeLatestAnimationEndAt,appendStartedAt+delayMs+fadeMs);
_streamFadeLatestAnimationEndAt=Math.max(_streamFadeLatestAnimationEndAt,appendStartedAt+fadeMs);
if(match[2]) frag.appendChild(document.createTextNode(match[2]));
last=match.index+match[0].length;
changed=true;
@ -4241,7 +4235,6 @@ function attachLiveStream(activeSid, streamId, uploaded=[], options={}){
const wordRe=/(\S+)(\s*)/g;
const appendStartedAt=performance.now();
let last=0, match, changed=false;
_streamFadeAppendOffset=0;
while((match=wordRe.exec(value))){
if(match.index>last) frag.appendChild(document.createTextNode(value.slice(last,match.index)));
if(reduceMotion){
@ -4250,13 +4243,10 @@ function attachLiveStream(activeSid, streamId, uploaded=[], options={}){
const span=document.createElement('span');
span.className='stream-fade-word is-new';
const fadeMs=_streamFadeCurrentMs||_STREAM_FADE_MS;
const delayMs=_streamFadeAppendOffset*_STREAM_FADE_STAGGER_MS;
span.style.animationDelay=delayMs+'ms';
if(fadeMs!==_STREAM_FADE_MS) span.style.setProperty('--stream-fade-ms',fadeMs+'ms');
span.textContent=match[1];
frag.appendChild(span);
_streamFadeAppendOffset+=1;
_streamFadeLatestAnimationEndAt=Math.max(_streamFadeLatestAnimationEndAt,appendStartedAt+delayMs+fadeMs);
_streamFadeLatestAnimationEndAt=Math.max(_streamFadeLatestAnimationEndAt,appendStartedAt+fadeMs);
}
if(match[2]) frag.appendChild(document.createTextNode(match[2]));
last=match.index+match[0].length;

View file

@ -82,14 +82,12 @@ let _streamFadeLastTargetWords=0;
let _streamFadeLastArrivalMs=0;
let _streamFadeArrivalWps=0;
let _streamFadeLatestAnimationEndAt=0;
let _streamFadeAppendOffset=0;
let _streamFadeVisibleWords=0;
let _streamFadeHoldUntilMs=0;
let _streamFadeCurrentMs=200;
let _streamFadeDomText='';
const _STREAM_FADE_MS=200;
const _STREAM_FADE_MAX_MS=350;
const _STREAM_FADE_STAGGER_MS=16;
const _STREAM_FADE_DONE_MAX_MS=320;
const _STREAM_FADE_DONE_DRAIN_MAX_MS=900;
const performance={performance_stub};
@ -202,6 +200,9 @@ def test_stream_fade_uses_incremental_renderer_without_changing_default_path():
["animationend", "span.replaceWith(document.createTextNode"],
)
assert "_wrapStreamingFadeWords" not in MESSAGES_JS
assert "animationDelay" not in renderer_block
assert "_STREAM_FADE_STAGGER_MS" not in MESSAGES_JS
assert "_streamFadeAppendOffset" not in MESSAGES_JS
def test_stream_fade_appends_new_spans_without_replacing_existing_nodes():
@ -209,8 +210,6 @@ def test_stream_fade_appends_new_spans_without_replacing_existing_nodes():
function_block(MESSAGES_JS, "_streamFadeAppendText")
+ r"""
const _STREAM_FADE_MS=200;
const _STREAM_FADE_STAGGER_MS=16;
let _streamFadeAppendOffset=0;
let _streamFadeLatestAnimationEndAt=0;
let _streamFadeCurrentMs=200;
const performance={_t:0,now(){return this._t;}};