mirror of
https://github.com/th-ch/youtube-music.git
synced 2026-01-13 03:11:46 +00:00
feat(synced-lyrics): Better-Lyrics Styling for Synced-Lyrics (#2554)
Co-authored-by: JellyBrick <shlee1503@naver.com>
This commit is contained in:
@ -1,4 +1,4 @@
|
||||
import { createEffect, createMemo } from 'solid-js';
|
||||
import { createEffect, createMemo, For } from 'solid-js';
|
||||
|
||||
import { currentTime } from './LyricsContainer';
|
||||
|
||||
@ -32,7 +32,16 @@ export const SyncedLine = ({ line }: SyncedLineProps) => {
|
||||
return config()?.defaultTextString ?? '';
|
||||
});
|
||||
|
||||
// prettier-ignore
|
||||
if (!text()) {
|
||||
return (
|
||||
<yt-formatted-string
|
||||
text={{
|
||||
runs: [{ text: '' }],
|
||||
}}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<div
|
||||
ref={ref}
|
||||
@ -41,14 +50,33 @@ export const SyncedLine = ({ line }: SyncedLineProps) => {
|
||||
_ytAPI?.seekTo(line.timeInMs / 1000);
|
||||
}}
|
||||
>
|
||||
<yt-formatted-string
|
||||
class="text-lyrics description ytmusic-description-shelf-renderer"
|
||||
text={{
|
||||
runs: [
|
||||
{ text: config()?.showTimeCodes ? `[${line.time}]` : '' },
|
||||
{ text: text() }],
|
||||
}}
|
||||
/>
|
||||
<div class="text-lyrics description ytmusic-description-shelf-renderer">
|
||||
<yt-formatted-string
|
||||
text={{
|
||||
runs: [{ text: config()?.showTimeCodes ? `[${line.time}] ` : '' }],
|
||||
}}
|
||||
/>
|
||||
|
||||
<For each={text().split(' ')}>
|
||||
{(word, index) => {
|
||||
return (
|
||||
<span
|
||||
style={{
|
||||
'transition-delay': `${index() * 0.05}s`,
|
||||
'animation-delay': `${index() * 0.05}s`,
|
||||
'--lyrics-duration:': `${line.duration / 1000}s;`,
|
||||
}}
|
||||
>
|
||||
<yt-formatted-string
|
||||
text={{
|
||||
runs: [{ text: `${word} ` }],
|
||||
}}
|
||||
/>
|
||||
</span>
|
||||
);
|
||||
}}
|
||||
</For>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
@ -17,35 +17,85 @@ createEffect(() => {
|
||||
|
||||
// Set the line effect
|
||||
switch (config()?.lineEffect) {
|
||||
case 'scale':
|
||||
case 'fancy':
|
||||
root.style.setProperty('--lyrics-font-size', '3rem');
|
||||
root.style.setProperty('--lyrics-line-height', '1.333');
|
||||
root.style.setProperty('--lyrics-width', '100%');
|
||||
root.style.setProperty('--lyrics-padding', '2rem');
|
||||
root.style.setProperty(
|
||||
'--previous-lyrics',
|
||||
'var(--ytmusic-text-primary)',
|
||||
'--lyrics-animations',
|
||||
'lyrics-glow var(--lyrics-glow-duration) forwards, lyrics-wobble var(--lyrics-wobble-duration) forwards',
|
||||
);
|
||||
root.style.setProperty('--current-lyrics', 'var(--ytmusic-text-primary)');
|
||||
root.style.setProperty('--size-lyrics', '1.2');
|
||||
root.style.setProperty('--offset-lyrics', '0');
|
||||
root.style.setProperty('--lyric-width', '83%');
|
||||
|
||||
root.style.setProperty('--lyrics-inactive-font-weight', '700');
|
||||
root.style.setProperty('--lyrics-inactive-opacity', '0.33');
|
||||
root.style.setProperty('--lyrics-inactive-scale', '0.95');
|
||||
root.style.setProperty('--lyrics-inactive-offset', '0');
|
||||
|
||||
root.style.setProperty('--lyrics-active-font-weight', '700');
|
||||
root.style.setProperty('--lyrics-active-opacity', '1');
|
||||
root.style.setProperty('--lyrics-active-scale', '1');
|
||||
root.style.setProperty('--lyrics-active-offset', '0');
|
||||
break;
|
||||
case 'scale':
|
||||
root.style.setProperty('--lyrics-font-size', '1.4rem');
|
||||
root.style.setProperty(
|
||||
'--lyrics-line-height',
|
||||
'var(--ytmusic-body-line-height)',
|
||||
);
|
||||
root.style.setProperty('--lyrics-width', '83%');
|
||||
root.style.setProperty('--lyrics-padding', '0');
|
||||
root.style.setProperty('--lyrics-animations', 'none');
|
||||
|
||||
root.style.setProperty('--lyrics-inactive-font-weight', '400');
|
||||
root.style.setProperty('--lyrics-inactive-opacity', '0.33');
|
||||
root.style.setProperty('--lyrics-inactive-scale', '1');
|
||||
root.style.setProperty('--lyrics-inactive-offset', '0');
|
||||
|
||||
root.style.setProperty('--lyrics-active-font-weight', '700');
|
||||
root.style.setProperty('--lyrics-active-opacity', '1');
|
||||
root.style.setProperty('--lyrics-active-scale', '1.2');
|
||||
root.style.setProperty('--lyrics-active-offset', '0');
|
||||
break;
|
||||
case 'offset':
|
||||
root.style.setProperty('--lyrics-font-size', '1.4rem');
|
||||
root.style.setProperty(
|
||||
'--previous-lyrics',
|
||||
'var(--ytmusic-text-primary)',
|
||||
'--lyrics-line-height',
|
||||
'var(--ytmusic-body-line-height)',
|
||||
);
|
||||
root.style.setProperty('--current-lyrics', 'var(--ytmusic-text-primary)');
|
||||
root.style.setProperty('--size-lyrics', '1');
|
||||
root.style.setProperty('--offset-lyrics', '5%');
|
||||
root.style.setProperty('--lyric-width', '100%');
|
||||
root.style.setProperty('--lyrics-width', '100%');
|
||||
root.style.setProperty('--lyrics-padding', '0');
|
||||
root.style.setProperty('--lyrics-animations', 'none');
|
||||
|
||||
root.style.setProperty('--lyrics-inactive-font-weight', '400');
|
||||
root.style.setProperty('--lyrics-inactive-opacity', '0.33');
|
||||
root.style.setProperty('--lyrics-inactive-scale', '1');
|
||||
root.style.setProperty('--lyrics-inactive-offset', '0');
|
||||
|
||||
root.style.setProperty('--lyrics-active-font-weight', '700');
|
||||
root.style.setProperty('--lyrics-active-opacity', '1');
|
||||
root.style.setProperty('--lyrics-active-scale', '1');
|
||||
root.style.setProperty('--lyrics-active-offset', '5%');
|
||||
break;
|
||||
case 'focus':
|
||||
root.style.setProperty('--lyrics-font-size', '1.4rem');
|
||||
root.style.setProperty(
|
||||
'--previous-lyrics',
|
||||
'var(--ytmusic-text-secondary)',
|
||||
'--lyrics-line-height',
|
||||
'var(--ytmusic-body-line-height)',
|
||||
);
|
||||
root.style.setProperty('--current-lyrics', 'var(--ytmusic-text-primary)');
|
||||
root.style.setProperty('--size-lyrics', '1');
|
||||
root.style.setProperty('--offset-lyrics', '0');
|
||||
root.style.setProperty('--lyric-width', '100%');
|
||||
root.style.setProperty('--lyrics-width', '100%');
|
||||
root.style.setProperty('--lyrics-padding', '0');
|
||||
root.style.setProperty('--lyrics-animations', 'none');
|
||||
|
||||
root.style.setProperty('--lyrics-inactive-font-weight', '400');
|
||||
root.style.setProperty('--lyrics-inactive-opacity', '0.33');
|
||||
root.style.setProperty('--lyrics-inactive-scale', '1');
|
||||
root.style.setProperty('--lyrics-inactive-offset', '0');
|
||||
|
||||
root.style.setProperty('--lyrics-active-font-weight', '700');
|
||||
root.style.setProperty('--lyrics-active-opacity', '1');
|
||||
root.style.setProperty('--lyrics-active-scale', '1');
|
||||
root.style.setProperty('--lyrics-active-offset', '0');
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user