// Menu: o menu que abre do botão "+". Popover branco, cantos 20 px, sombra longa. Abre a partir do canto // (escala 0.92 -> 1 + desfoque) e uma faixa de seleção desce pelos itens nos quadros de `passar`. // `x`/`y` = canto de cima à esquerda, em px da tela. Ícones: 'clipe' 'pasta' 'luz' 'plug' 'lupa' 'globo' 'pincel'. import React from 'react'; import {useCurrentFrame} from 'remotion'; import {COR, FONTE_U, SOMBRA, e3, e4, seg} from '../base'; export type ItemMenu = {texto: string; icone?: string; seta?: boolean; apagado?: boolean}; export type MenuProps = {itens: ItemMenu[]; x?: number; y?: number; largura?: number; inicio?: number; passar?: {em: number; item: number}[]; fechar?: number}; const ICONES: Record = { clipe: 'M15 7l-6.5 6.5a2.5 2.5 0 003.5 3.5L18.5 10a4.5 4.5 0 00-6.4-6.4L5.6 10.1a6.5 6.5 0 009.2 9.2L20 14', pasta: 'M3 7h6l2 2h10v10H3z', luz: 'M9 18h6M10 21h4M12 3a6 6 0 00-3.5 10.9V16h7v-2.1A6 6 0 0012 3z', plug: 'M9 3v5M15 3v5M6 8h12v3a6 6 0 01-12 0zM12 17v4', lupa: 'M11 4a7 7 0 100 14 7 7 0 000-14zM20 20l-4-4', globo: 'M12 3a9 9 0 100 18 9 9 0 000-18zM3 12h18M12 3c3 3 3 15 0 18M12 3c-3 3-3 15 0 18', pincel: 'M4 20c2 0 4-1 4-3a2 2 0 00-4 0M8 15l11-11 1 1-11 11', }; export const Menu: React.FC = ({itens, x = 330, y = 120, largura = 440, inicio = 0, passar = [], fechar}) => { const f = useCurrentFrame(); const p = e4(seg(f, inicio, inicio + 12)); const sai = fechar !== undefined ? e4(seg(f, fechar, fechar + 8)) : 0; const alturaItem = 62; let sel = -1, ySel = 0; const ps = [...passar].sort((a, b) => a.em - b.em); for (let i = 0; i < ps.length; i++) if (f >= ps[i].em) { const ant = i > 0 ? ps[i - 1].item : ps[i].item; const t = e3(seg(f, ps[i].em, ps[i].em + 6)); sel = ps[i].item; ySel = (ant + (ps[i].item - ant) * t) * alturaItem; } return
{sel >= 0 &&
} {itens.map((it, i) =>
{it.texto} {it.seta && ›}
)}
; };