import { ReactNode } from 'react'; import { ContextMenu } from '/@/shared/components/context-menu/context-menu'; export interface LyricsContextMenuProps { canExport: boolean; canSearch: boolean; canTranslate: boolean; children: ReactNode; hasOffset: boolean; hasOverride: boolean; isShowingTranslation: boolean; languages?: null | { label: string; value: string }[]; onAdjustOffset: (deltaMs: number) => void; onClearOverride: () => void; onExport: () => void; onPickLanguage?: (index: number) => void; onResetOffset: () => void; onSearchOverride: () => void; onSuppress: () => void; onToggleTranslation: () => void; selectedLanguage?: number; } export const LyricsContextMenu = ({ canExport, canSearch, canTranslate, children, hasOffset, hasOverride, isShowingTranslation, languages, onAdjustOffset, onClearOverride, onExport, onPickLanguage, onResetOffset, onSearchOverride, onSuppress, onToggleTranslation, selectedLanguage, }: LyricsContextMenuProps) => { const showLanguagePicker = languages && languages.length > 1; return (
{children}
Adjust sync onAdjustOffset(-100)}> 100 ms earlier onAdjustOffset(-50)}> 50 ms earlier onAdjustOffset(-20)}> 20 ms earlier onAdjustOffset(20)}> 20 ms later onAdjustOffset(50)}> 50 ms later onAdjustOffset(100)}> 100 ms later {hasOffset && ( <> Reset to default )} {showLanguagePicker && onPickLanguage && ( Switch language {languages.map((lang) => { const idx = parseInt(lang.value, 10); return ( onPickLanguage(idx)} > {lang.label} ); })} )} {canTranslate && ( {isShowingTranslation ? 'Hide translation' : 'Show translation'} )} {canSearch && ( Find different lyrics… )} {hasOverride && ( Use automatic lyrics )} Hide lyrics for this song {canExport && ( <> Export lyrics… )}
); };