// MenuOSD: menu de seleção (caixa preta a 72% com borda de 6 px branco quente): título, e itens em VT323 84 px. O cursor `►` e // a barra azul pulam de item em item a cada 18 quadros (a barra muda em 2 quadros). A caixa abre de 0,7x a 1x com sobra. import React from 'react'; import {useCurrentFrame} from 'remotion'; import {COR, FONTE, LARGURA_UTIL, SEGURA, caber, eb} from '../base'; export type MenuOSDProps = {titulo?: string; itens: string[]; inicio?: number; passo?: number; y?: number; fim?: number}; export const MenuOSD: React.FC = ({titulo = 'SELECIONE A FITA', itens, inicio = 0, passo = 18, y = 700, fim}) => { const f = useCurrentFrame(); const t = f - inicio; if (t < 0 || (fim !== undefined && f >= fim)) return null; const p = eb(t / 12, 1.6); const sel = Math.min(itens.length - 1, Math.floor(Math.max(0, t - 10) / passo)); const linha = 120; const altura = 150 + itens.length * linha + 50; const tam = Math.min(84, ...itens.map((it) => caber(it.toUpperCase(), 84, LARGURA_UTIL - 200, 400, 0, FONTE.apoio.split('"')[1]))); return
{titulo}
{itens.map((it, i) => { const ativo = i === sel; return
6 + i * 2 ? 1 : 0, textShadow: '3px 0 rgba(255,40,70,0.6), -3px 0 rgba(0,220,255,0.6)'}}> {ativo && ►}{it.toUpperCase()}
; })}
; };