CmLogView
Bloco de log de execução: uma linha por etapa, com o estado de cada uma. É a tela de "instalando…", de migração, de importação em lote. O texto de cada linha deve ser o comando REAL — quem entende audita, quem não entende ignora; paráfrase não serve nem para um nem para outro.
Import
import { CmLogView } from "cosmemilton-ui/client";Os cinco estados
done, running, pending, failed e skipped numa execução com duração por linha.
- concluída: sgdisk --zap-all /dev/sda
- concluída: mkfs.ext4 -L raiz /dev/sda2
- concluída: mount /dev/sda2 /mnt
- concluída: debootstrap --arch=amd64 bookworm /mnt
- falhou: curl -fsSL https://apt.interno/chave.gpg -o /mnt/etc/apt/keyrings/interno.gpg
- pulada: chroot /mnt apt-get install -y agente-monitoramento
- em andamento: chroot /mnt apt-get install -y linux-image-amd64
- pendente: grub-install --target=x86_64-efi --efi-directory=/boot/efi
- pendente: systemctl --root=/mnt enable ssh
Execução ao vivo
autoScroll e live acompanhando uma instalação que avança etapa por etapa.
- em andamento: systemctl stop cosme-api.service
Etapa 1 de 7
Marcadores e rótulos próprios
statusMarkers troca o glifo; statusLabels troca o que o leitor de tela ouve.
- concluída: pg_dump --format=custom folha_pagamento > /backup/folha.dump
- concluída: gpg --encrypt --recipient backup@interno /backup/folha.dump
- falhou: restic forget --keep-daily 7 --prune
- ignorada: restic check --read-data-subset=5%
- em execução: rclone sync /backup remoto:frios
- na fila: systemctl start relatorio-backup.service
API rápida
Props principais de cada peça exportada.
CmLogView
CmLogEntry
CmLogEntryStatus
Notas
O marcador de estado é um glifo (· ▸ ✓ ✗ –) e fica aria-hidden; o estado vai em texto só-leitor ao lado. Um ✓ lido como "marca de seleção" no meio de uma linha de comando é pior do que silêncio — e um ícone SVG quebraria a coluna da monoespaçada.
live (aria-live) é opt-in e vem desligado: em log longo, anunciar toda linha nova vira ruído em vez de informação.
autoScroll rola para a última linha quando entries muda. Sem maxHeight o bloco simplesmente cresce, então os dois costumam andar juntos.
A etapa running é a única em destaque — é a resposta para "o que está acontecendo agora", que é a única pergunta de quem olha esta tela.
statusMarkers e statusLabels sobrescrevem glifo e texto por estado, parcialmente: passe só o que quiser trocar.
As linhas saem num <ol>, então a ordem das etapas é semântica e não só visual.