diff --git a/plugins/radiant-lyrics-luna/src/index.ts b/plugins/radiant-lyrics-luna/src/index.ts index cb6bc67..174bc88 100644 --- a/plugins/radiant-lyrics-luna/src/index.ts +++ b/plugins/radiant-lyrics-luna/src/index.ts @@ -2050,6 +2050,19 @@ let syncButtonListener: (() => void) | null = null; let syncButtonEl: HTMLElement | null = null; let syncButtonObserverUnload: (() => void) | null = null; +/* Stops tidal from thinking RL line changes are User Scrolls (Hides sync button manually until user scrolls) */ +const applyScrollOwnerState = (): void => { + document.body.classList.toggle( + "rl-owns-lyric-scroll", + isActive && scrollSynced, + ); +}; + +const setScrollSynced = (value: boolean): void => { + scrollSynced = value; + applyScrollOwnerState(); +}; + // scroll bounce animation state let scrollAnimIsAnimating = false; let scrollAnimPending: { @@ -3518,9 +3531,10 @@ const teardown = (): void => { clearLineSlideTimers(); clearSyntheticNativeLyrics(); restoreTidalLyrics(); + applyScrollOwnerState(); }; -// find scrollable parent — walk up but never past the now-playing boundary +// find scrollable parent // to avoid scrolling a shared ancestor that would shift the play queue const findScroller = (el: HTMLElement): HTMLElement => { const lyricsPanel = el.closest( @@ -3630,7 +3644,7 @@ const scrollToActiveLine = (): void => { // Resync lyric scroll (scrubbing and lyric jumps) const resync = (syncNativeButton = true): void => { - scrollSynced = true; + setScrollSynced(true); applyInactiveBlurState(primaryLineIdx, activeLineIdxs.size === 0, activeLineIdxs); scrollToActiveLine(); const nativeSyncButton = syncButtonEl; @@ -3646,7 +3660,7 @@ const hookUserScroll = (parent: HTMLElement): void => { unhookUserScroll(); const onUserScroll = () => { if (!scrollSynced) return; - scrollSynced = false; + setScrollSynced(false); clearScrollAnim(); if (settings.blurInactive) { clearInactiveBlurState(); @@ -3711,6 +3725,7 @@ const unhookSyncButton = (): void => { // Tick Loop: determine active line and word const startTickLoop = (): void => { clearTickLoop(); + applyScrollOwnerState(); sylLog("[RL-Syllable] Tick loop started"); diff --git a/plugins/radiant-lyrics-luna/src/styles.css b/plugins/radiant-lyrics-luna/src/styles.css index 40b8c36..2e24e0a 100644 --- a/plugins/radiant-lyrics-luna/src/styles.css +++ b/plugins/radiant-lyrics-luna/src/styles.css @@ -568,6 +568,11 @@ body.rl-integrated-seekbar [data-test="footer-player"] [class*="playerContent"] color 0.15s ease-out; } +/* Hides sync button untilt he user aactually scrolls (Stops tidal from thinking RL line changes are user scroll) */ +body.rl-owns-lyric-scroll [class*="_syncButtonContainer_"] { + display: none !important; +} + /* Hover word (Grouped Syllables) */ .rl-wbw-line:not(.rl-wbw-line-active) > .rl-wbw-word:hover, .rl-wbw-line:not(.rl-wbw-line-active) > .rl-wbw-word.rl-wbw-word-hover,