Vidtreo
Configuração

Personalização

Personalize a aparência, texto e comportamento do gravador VIDTREO.

Personalização

VIDTREO fornece múltiplas formas de personalizar a aparência e comportamento do gravador para combinar com o design da sua aplicação.

Personalização de Texto

Idiomas Integrados

VIDTREO suporta três idiomas por padrão:

// Inglês (padrão)
<VidtreoRecorder lang="en" />

// Espanhol
<VidtreoRecorder lang="es" />

// Português
<VidtreoRecorder lang="pt" />

Textos Personalizados

Sobrescreva qualquer texto da UI:

<VidtreoRecorder
  lang="pt"
  texts={{
    // Controles de gravação
    record: 'Iniciar Captura',
    stop: 'Finalizar Captura',
    pause: 'Aguardar',
    resume: 'Continuar',

    // Controles de áudio
    mute: 'Silêncio',
    unmute: 'Com Som',

    // Troca de fonte
    switchSource: 'Trocar Vista',

    // Mensagens de status
    initializingCamera: 'Configurando câmera...',
    grantPermissions: 'Acesso à câmera necessário',
    switchingDevice: 'Trocando dispositivo...',
    recordingStartsIn: 'Começa em',
    switchingSource: 'Trocando vista...',
    uploading: 'Enviando vídeo...',

    // Labels
    rec: 'AO VIVO',
    settings: 'Opções',
    camera: 'Webcam',
    microphone: 'Mic',
  }}
/>

Todas as Chaves de Texto Disponíveis

ChavePadrão (PT)Descrição
initializingCameraInicializando câmera...Mensagem de início da câmera
grantPermissionsPor favor conceda permissõesSolicitação de permissões
switchingDeviceTrocando dispositivo...Status de troca de dispositivo
recordingStartsInA gravação começa emPrefixo da contagem regressiva
switchingSourceTrocando fonte...Status de troca de fonte
recRECIndicador de gravação
settingsConfiguraçõesLabel do botão de configurações
recordGravarBotão de gravar
stopPararBotão de parar
pausePausarBotão de pausar
resumeRetomarBotão de retomar
muteSilenciarBotão de silenciar
unmuteAtivar ÁudioBotão de ativar áudio
switchSourceTrocar FonteBotão de troca de fonte
cameraCâmeraLabel do seletor de câmera
microphoneMicrofoneLabel do seletor de microfone
uploadingEnviando...Status de upload

Estilos do Componente React

Estilo do Container

<VidtreoRecorder
  className="meu-gravador"
  style={{
    width: '100%',
    maxWidth: '640px',
    borderRadius: '12px',
    overflow: 'hidden'
  }}
/>
.meu-gravador {
  box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
  border: 1px solid #e5e7eb;
}

Componente Wrapper

Crie um wrapper para estilos consistentes:

function StyledRecorder(props) {
  return (
    <div className="recorder-wrapper">
      <VidtreoRecorder {...props} />
    </div>
  );
}
.recorder-wrapper {
  padding: 1rem;
  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
  border-radius: 16px;
}

.recorder-wrapper > div {
  border-radius: 12px;
  overflow: hidden;
}

Estilos do Web Component

Estilo do Container Externo

vidtreo-recorder {
  /* Dimensões */
  display: block;
  width: 100%;
  max-width: 640px;
  height: 480px;

  /* Aparência */
  border-radius: 12px;
  overflow: hidden;
  box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);

  /* Posicionamento */
  margin: 0 auto;
}

/* Tamanho responsivo */
@media (max-width: 768px) {
  vidtreo-recorder {
    height: 360px;
  }
}

Propriedades CSS Personalizadas (Em Breve)

vidtreo-recorder {
  --vidtreo-primary-color: #3b82f6;
  --vidtreo-primary-hover: #2563eb;
  --vidtreo-background: #1f2937;
  --vidtreo-surface: #374151;
  --vidtreo-text-primary: #ffffff;
  --vidtreo-text-secondary: #9ca3af;
  --vidtreo-border-radius: 8px;
  --vidtreo-font-family: system-ui, sans-serif;
}

UI Personalizada com Hook

Para controle completo da UI, use o hook useVidtreoRecorder:

import { useVidtreoRecorder } from '@vidtreo/recorder-react';

function CustomRecorder() {
  const { state, actions, audioLevel } = useVidtreoRecorder({
    apiKey: import.meta.env.VITE_VIDTREO_API_KEY,
  });

  return (
    <div className="custom-recorder">
      {/* Preview de vídeo personalizado */}
      <div className="preview">
        <video
          ref={(el) => {
            if (el && state.stream) el.srcObject = state.stream;
          }}
          autoPlay
          muted
          playsInline
        />

        {/* Overlay personalizado */}
        {state.recordingState === 'recording' && (
          <div className="recording-overlay">
            <span className="rec-dot" />
            <span className="timer">{state.timer}</span>
          </div>
        )}
      </div>

      {/* Medidor de áudio personalizado */}
      <div className="audio-meter">
        <div
          className="audio-level"
          style={{ width: `${audioLevel * 100}%` }}
        />
      </div>

      {/* Controles personalizados */}
      <div className="controls">
        {state.recordingState === 'idle' ? (
          <button
            className="record-btn"
            onClick={() => actions.startRecording()}
          >
            Gravar
          </button>
        ) : (
          <>
            <button
              className="mute-btn"
              onClick={() => actions.toggleMute()}
            >
              {state.isMuted ? 'Ativar Áudio' : 'Silenciar'}
            </button>

            <button
              className="stop-btn"
              onClick={() => actions.stopRecording()}
            >
              Parar
            </button>
          </>
        )}
      </div>
    </div>
  );
}

Design Responsivo

Tamanho Amigável para Mobile

.recorder-container {
  width: 100%;
  max-width: 640px;
  margin: 0 auto;
}

/* Manter proporção */
vidtreo-recorder {
  aspect-ratio: 4/3;
  height: auto;
}

/* Empilhar controles no mobile */
@media (max-width: 480px) {
  .controls {
    flex-direction: column;
    gap: 0.5rem;
  }
}

Controles Amigáveis ao Toque

/* Alvos de toque maiores */
.recorder-button {
  min-height: 44px;
  min-width: 44px;
  padding: 12px 24px;
}

Integração de Temas

Modo Escuro

function ThemedRecorder() {
  const isDark = useTheme().mode === 'dark';

  return (
    <div className={isDark ? 'dark-theme' : 'light-theme'}>
      <VidtreoRecorder
        apiKey="..."
        style={{
          background: isDark ? '#1f2937' : '#ffffff',
          borderColor: isDark ? '#374151' : '#e5e7eb'
        }}
      />
    </div>
  );
}

Cores da Marca

.brand-recorder {
  --accent-color: #sua-cor-de-marca;
}

.brand-recorder .record-button {
  background-color: var(--accent-color);
}

.brand-recorder .record-button:hover {
  background-color: color-mix(in srgb, var(--accent-color), black 10%);
}

Acessibilidade

O gravador suporta navegação completa por teclado:

  • Tab — Navegar entre controles
  • Enter/Espaço — Ativar controle focado
  • Escape — Fechar painel de configurações

Suporte a Leitores de Tela

Todos os controles têm labels ARIA apropriados. Implementações personalizadas devem manter a acessibilidade:

<button
  aria-label={isRecording ? 'Parar gravação' : 'Iniciar gravação'}
  aria-pressed={isRecording}
  onClick={toggleRecording}
>
  {isRecording ? 'Parar' : 'Gravar'}
</button>

Indicadores de Foco

.recorder-button:focus-visible {
  outline: 2px solid #3b82f6;
  outline-offset: 2px;
}

Para personalização completa da UI, use o hook useVidtreoRecorder com seus próprios componentes. Isso dá controle total sobre o design enquanto aproveita o motor de gravação do VIDTREO.

Próximos Passos

Nesta página