Feedback & overlays
cosmemilton-ui/client

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

tsx
import { CmLogView } from "cosmemilton-ui/client";

Os cinco estados

done, running, pending, failed e skipped numa execução com duração por linha.

Instalação do nó app-03
  1. concluída: sgdisk --zap-all /dev/sda0,4 s
  2. concluída: mkfs.ext4 -L raiz /dev/sda26,1 s
  3. concluída: mount /dev/sda2 /mnt0,1 s
  4. concluída: debootstrap --arch=amd64 bookworm /mnt3 min 12 s
  5. falhou: curl -fsSL https://apt.interno/chave.gpg -o /mnt/etc/apt/keyrings/interno.gpgsaída 22
  6. pulada: chroot /mnt apt-get install -y agente-monitoramentosem repositório interno
  7. em andamento: chroot /mnt apt-get install -y linux-image-amd64142/318 pacotes
  8. pendente: grub-install --target=x86_64-efi --efi-directory=/boot/efi
  9. pendente: systemctl --root=/mnt enable ssh

Execução ao vivo

autoScroll e live acompanhando uma instalação que avança etapa por etapa.

Publicação da versão 3.20.0
  1. em andamento: systemctl stop cosme-api.serviceem execução

Etapa 1 de 7

Marcadores e rótulos próprios

statusMarkers troca o glifo; statusLabels troca o que o leitor de tela ouve.

Rotina noturna de backup
  1. concluída: pg_dump --format=custom folha_pagamento > /backup/folha.dump1 min 48 s
  2. concluída: gpg --encrypt --recipient backup@interno /backup/folha.dump22 s
  3. falhou: restic forget --keep-daily 7 --prunesaída 1
  4. ignorada: restic check --read-data-subset=5%repositório travado
  5. em execução: rclone sync /backup remoto:frios12,4 GB de 31,8 GB
  6. na fila: systemctl start relatorio-backup.service

API rápida

Props principais de cada peça exportada.

CmLogView

entriesmaxHeightautoScrolllivelabelstatusMarkersstatusLabels

CmLogEntry

idtextstatusmeta

CmLogEntryStatus

pendingrunningdonefailedskipped

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.