diff --git a/src/renderer/features/lyrics/components/lyrics-scroll-content.module.css b/src/renderer/features/lyrics/components/lyrics-scroll-content.module.css index 18fc85fdc..4299b0802 100644 --- a/src/renderer/features/lyrics/components/lyrics-scroll-content.module.css +++ b/src/renderer/features/lyrics/components/lyrics-scroll-content.module.css @@ -11,3 +11,7 @@ padding-left: var(--lyric-padding-left, 0%) !important; } } + +.preview { + padding: 0 !important; +} diff --git a/src/renderer/features/lyrics/components/lyrics-scroll-content.tsx b/src/renderer/features/lyrics/components/lyrics-scroll-content.tsx index e6a014536..ea355bd3e 100644 --- a/src/renderer/features/lyrics/components/lyrics-scroll-content.tsx +++ b/src/renderer/features/lyrics/components/lyrics-scroll-content.tsx @@ -10,6 +10,7 @@ export interface LyricsScrollContentProps { gap?: number; paddingLeft?: number; paddingRight?: number; + preview?: boolean; style?: React.CSSProperties; } @@ -20,25 +21,35 @@ export const LyricsScrollContent = ({ gap, paddingLeft = 0, paddingRight = 0, + preview = false, style, }: LyricsScrollContentProps) => { - const contentStyle = useMemo( - () => - ({ - '--lyric-padding-left': `${paddingLeft}%`, - '--lyric-padding-right': `${paddingRight}%`, + const contentStyle = useMemo(() => { + if (preview) { + return { gap: gap !== undefined ? `${gap}px` : undefined, - paddingBottom: bottomScrollPadding, - paddingLeft: `${paddingLeft}%`, - paddingRight: `${paddingRight}%`, - paddingTop: '10vh', + padding: 0, ...style, - }) as React.CSSProperties, - [bottomScrollPadding, gap, paddingLeft, paddingRight, style], - ); + } as React.CSSProperties; + } + + return { + '--lyric-padding-left': `${paddingLeft}%`, + '--lyric-padding-right': `${paddingRight}%`, + gap: gap !== undefined ? `${gap}px` : undefined, + paddingBottom: bottomScrollPadding, + paddingLeft: `${paddingLeft}%`, + paddingRight: `${paddingRight}%`, + paddingTop: '10vh', + ...style, + } as React.CSSProperties; + }, [bottomScrollPadding, gap, paddingLeft, paddingRight, preview, style]); return ( -
+
{children}
); diff --git a/src/renderer/features/lyrics/components/lyrics-search-form.module.css b/src/renderer/features/lyrics/components/lyrics-search-form.module.css index eabaca981..d5470d656 100644 --- a/src/renderer/features/lyrics/components/lyrics-search-form.module.css +++ b/src/renderer/features/lyrics/components/lyrics-search-form.module.css @@ -33,22 +33,3 @@ } } } - -.lyrics-preview { - :global(.synchronized-lyrics) { - height: auto !important; - padding: 1rem 0 !important; - overflow: visible !important; - transform: none !important; - } -} - -.lyrics-content-wrapper { - :global(> div) { - height: auto !important; - max-height: none !important; - padding: 1rem 0 !important; - overflow: visible !important; - transform: none !important; - } -} diff --git a/src/renderer/features/lyrics/components/lyrics-search-form.tsx b/src/renderer/features/lyrics/components/lyrics-search-form.tsx index 230e3bffa..02d968bf0 100644 --- a/src/renderer/features/lyrics/components/lyrics-search-form.tsx +++ b/src/renderer/features/lyrics/components/lyrics-search-form.tsx @@ -246,7 +246,6 @@ export const LyricsSearchForm = ({ artist, name, onSearchOverride }: LyricSearch {selectedResult && ( ) : previewData ? ( -
- {Array.isArray(previewData) ? ( - lyricsHasWordCues(previewData) ? ( - - ) : ( - - ) - ) : ( - - )} -
+ ) : ( + + ) + ) : ( + + ) ) : (
{t('page.fullscreenPlayer.noLyrics')} diff --git a/src/renderer/features/lyrics/synchronized-karaoke-lyrics.module.css b/src/renderer/features/lyrics/synchronized-karaoke-lyrics.module.css index c6bc21817..d06624b15 100644 --- a/src/renderer/features/lyrics/synchronized-karaoke-lyrics.module.css +++ b/src/renderer/features/lyrics/synchronized-karaoke-lyrics.module.css @@ -7,3 +7,11 @@ overflow: hidden auto; word-break: break-all; } + +.preview { + height: auto; + max-height: none; + padding: 1rem 0; + overflow: visible; + transform: none; +} diff --git a/src/renderer/features/lyrics/synchronized-karaoke-lyrics.tsx b/src/renderer/features/lyrics/synchronized-karaoke-lyrics.tsx index f1188b9ff..f2170f4f7 100644 --- a/src/renderer/features/lyrics/synchronized-karaoke-lyrics.tsx +++ b/src/renderer/features/lyrics/synchronized-karaoke-lyrics.tsx @@ -34,6 +34,7 @@ export interface SynchronizedKaraokeLyricsProps extends Omit normalizeLyrics(lyrics), [lyrics]); const rafRef = useRef(null); const statusRef = useRef(usePlayerStoreBase.getState().player.status); @@ -97,13 +106,13 @@ export const SynchronizedKaraokeLyrics = ({ containerRef, followRef, followScrollAlignmentRef, - fontSize: settings.fontSize, - gap: settings.gap, + fontSize: effectiveFontSize, + gap: effectiveGap, lineIdPrefix: 'karaoke-line', lineLeadTimeMsRef, lyrics: normalizedLyrics, - paddingLeft: settings.paddingLeft, - paddingRight: settings.paddingRight, + paddingLeft: effectivePaddingLeft, + paddingRight: effectivePaddingRight, scrollContainerId: LYRICS_SCROLL_CONTAINER_ID, }); @@ -328,7 +337,11 @@ export const SynchronizedKaraokeLyrics = ({ return (
{settings.showProvider && source && ( )} @@ -353,7 +367,7 @@ export const SynchronizedKaraokeLyrics = ({ )} @@ -396,7 +410,7 @@ export const SynchronizedKaraokeLyrics = ({ alignment={settings.alignment} className="lyric-line synchronized" data-lyric-time={lineStartMs} - fontSize={settings.fontSize} + fontSize={effectiveFontSize} id={`karaoke-line-${idx}`} key={idx} romajiText={pronunciationText} @@ -414,7 +428,7 @@ export const SynchronizedKaraokeLyrics = ({ cueLines={rawLine.cueLines} data-lyric-time={lineStartMs} extraOverlays={extraOverlays} - fontSize={settings.fontSize} + fontSize={effectiveFontSize} id={`karaoke-line-${idx}`} key={idx} lineIndex={idx} diff --git a/src/renderer/features/lyrics/synchronized-lyrics.module.css b/src/renderer/features/lyrics/synchronized-lyrics.module.css index 7f722d293..5f3d3845d 100644 --- a/src/renderer/features/lyrics/synchronized-lyrics.module.css +++ b/src/renderer/features/lyrics/synchronized-lyrics.module.css @@ -8,3 +8,11 @@ word-break: break-all; transform: translateY(-2rem); } + +.preview { + height: auto; + max-height: none; + padding: 1rem 0; + overflow: visible; + transform: none; +} diff --git a/src/renderer/features/lyrics/synchronized-lyrics.tsx b/src/renderer/features/lyrics/synchronized-lyrics.tsx index 3f02ae443..5bd1e6dec 100644 --- a/src/renderer/features/lyrics/synchronized-lyrics.tsx +++ b/src/renderer/features/lyrics/synchronized-lyrics.tsx @@ -29,6 +29,7 @@ export interface SynchronizedLyricsProps extends Omit normalizeLyrics(lyrics), [lyrics]); const rafRef = useRef(null); const statusRef = useRef(usePlayerStoreBase.getState().player.status); @@ -83,13 +92,13 @@ export const SynchronizedLyrics = ({ containerRef, followRef, followScrollAlignmentRef, - fontSize: settings.fontSize, - gap: settings.gap, + fontSize: effectiveFontSize, + gap: effectiveGap, lineIdPrefix: 'lyric', lineLeadTimeMsRef, lyrics: normalizedLyrics, - paddingLeft: settings.paddingLeft, - paddingRight: settings.paddingRight, + paddingLeft: effectivePaddingLeft, + paddingRight: effectivePaddingRight, scrollContainerId: LYRICS_SCROLL_CONTAINER_ID, }); @@ -240,7 +249,11 @@ export const SynchronizedLyrics = ({ return (
{settings.showProvider && source && ( )} @@ -265,7 +279,7 @@ export const SynchronizedLyrics = ({ )} @@ -290,7 +304,7 @@ export const SynchronizedLyrics = ({ alignment={settings.alignment} className="lyric-line synchronized" data-lyric-time={lineStartMs} - fontSize={settings.fontSize} + fontSize={effectiveFontSize} id={`lyric-${idx}`} key={idx} romajiText={pronunciationText} diff --git a/src/renderer/features/lyrics/unsynchronized-lyrics.module.css b/src/renderer/features/lyrics/unsynchronized-lyrics.module.css index 4f2133c7a..43c853d51 100644 --- a/src/renderer/features/lyrics/unsynchronized-lyrics.module.css +++ b/src/renderer/features/lyrics/unsynchronized-lyrics.module.css @@ -7,3 +7,11 @@ overflow: hidden auto; transform: translateY(-2rem); } + +.preview { + height: auto; + max-height: none; + padding: 1rem 0; + overflow: visible; + transform: none; +} diff --git a/src/renderer/features/lyrics/unsynchronized-lyrics.tsx b/src/renderer/features/lyrics/unsynchronized-lyrics.tsx index 5ae3d1b7d..0e6623552 100644 --- a/src/renderer/features/lyrics/unsynchronized-lyrics.tsx +++ b/src/renderer/features/lyrics/unsynchronized-lyrics.tsx @@ -1,3 +1,4 @@ +import clsx from 'clsx'; import { useMemo } from 'react'; import styles from './unsynchronized-lyrics.module.css'; @@ -9,15 +10,20 @@ import { FullLyricsMetadata } from '/@/shared/types/domain-types'; export interface UnsynchronizedLyricsProps extends Omit { lyrics: string; + preview?: boolean; romajiLyrics?: null | string; settingsKey?: string; translatedLyrics?: null | string; } +const PREVIEW_FONT_SIZE = 20; +const PREVIEW_GAP = 20; + export const UnsynchronizedLyrics = ({ artist, lyrics, name, + preview = false, romajiLyrics, settingsKey = 'default', source, @@ -27,14 +33,16 @@ export const UnsynchronizedLyrics = ({ const displaySettings = useLyricsDisplaySettings(settingsKey); const settings = { ...lyricsSettings, - fontSizeUnsync: - displaySettings.fontSizeUnsync && displaySettings.fontSizeUnsync !== 0 - ? displaySettings.fontSizeUnsync - : 24, - gapUnsync: - displaySettings.gapUnsync && displaySettings.gapUnsync !== 0 - ? displaySettings.gapUnsync - : 24, + fontSizeUnsync: preview + ? PREVIEW_FONT_SIZE + : displaySettings.fontSizeUnsync && displaySettings.fontSizeUnsync !== 0 + ? displaySettings.fontSizeUnsync + : 24, + gapUnsync: preview + ? PREVIEW_GAP + : displaySettings.gapUnsync && displaySettings.gapUnsync !== 0 + ? displaySettings.gapUnsync + : 24, }; const lines = useMemo(() => { return lyrics.split('\n'); @@ -49,12 +57,13 @@ export const UnsynchronizedLyrics = ({ }, [romajiLyrics]); return ( -
+
{settings.showProvider && source && (