// TerminalComando: uma janela de terminal de borda branca de 3 px. O comando é digitado letra a letra, depois as linhas de resposta // aparecem de uma vez (corte seco), cada uma com ✓, e a última linha fica invertida (bloco branco). import React from 'react'; import {useCurrentFrame} from 'remotion'; import {COR, FONTE_T, c01, seg} from '../base'; import {inverso} from '../formas/Quadro'; export type TerminalComandoProps = {comando: string; saidas: string[]; cor?: string; inicio?: number; y?: number; /** letras por quadro */ ritmo?: number; /** quadros entre linhas de saída */ intervalo?: number}; export const TerminalComando: React.FC = ({comando, saidas, cor = COR.branco, inicio = 0, y = 700, ritmo = 1.4, intervalo = 7}) => { const f = useCurrentFrame(); const fundo = inverso(cor), LH = 96; const letras = Math.min(comando.length, Math.max(0, Math.floor((f - inicio - 4) * ritmo))); const t1 = inicio + 4 + comando.length / ritmo + 4; const H = 150 + (saidas.length + 1) * LH + 50; const visivel = f >= inicio; if (!visivel) return null; return
{[0, 1, 2].map((i) =>
)}
~/projeto
$ {comando.slice(0, letras)}= comando.length ? 0 : 1}} />
{saidas.map((s, i) => { const on = f >= t1 + i * intervalo, ultima = i === saidas.length - 1; return
{ultima ? '▲ ' : '✓ '}{s}
; })}
; };