Formulários
cosmemilton-ui/client

CmOptionRow

Linha de preferência: o que a opção liga à esquerda, o controle à direita. É o bloco de uma tela de configurações — e a descrição existe para explicar a consequência de ligar (ou de deixar desligado), que é justamente o que um switch solto nunca conta.

Import

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

Bloco de preferências

Linhas com switch, uma controlada, uma com ícone e uma desabilitada cuja descrição explica o porquê.

Atualizações e privacidade

Preferências aplicadas somente a esta máquina.

Atualizações automáticasBaixa e aplica correções de segurança assim que saem do canal estável.
Reiniciar fora do horário de trabalhoO reinício acontece às 3h, e só quando houver atualização pendente.
Telemetria anônimaEnvia contadores de uso sem identificar a máquina nem quem a usa.
Instantâneos do sistemaExige a partição raiz em btrfs; esta máquina foi instalada em ext4.

Outro controle no lugar do switch

A prop control recebe os ids do título e da descrição — é assim que o controle substituto ganha nome acessível.

Origem dos pacotes

De onde o sistema baixa as atualizações e como confere o que chegou.

Canal de atualizaçãoO canário recebe cada versão uma semana antes do estável.
Assinatura dos pacotesChave ED25519 do repositório oficial, conferida há 2 horas.
Baixar em segundo planoSem control, a linha volta ao switch padrão, já rotulado pelo título.

API rápida

Props principais de cada peça exportada.

CmOptionRow

titledescriptioniconchecked/defaultCheckedonCheckedChangedisabledcontrolname

Notas

A linha inteira NÃO é clicável, de propósito: um <label> só rotula controle de formulário e o CmSwitch é um <button role="switch"> — envolvê-lo num label não liga o clique nem o nome acessível, só dá a impressão de que liga. O que funciona de verdade é o que o componente faz: aria-labelledby/aria-describedby apontando para o título e a descrição da linha.

A linha desligada continua LEGÍVEL de propósito: é a descrição dela que explica por que o controle está fora de alcance ("instantâneos só existem em btrfs"). Esmaecer a ponto de não se ler seria esconder a explicação.

control substitui o switch por outro controle (um CmSelect, um botão) e recebe { titleId, descriptionId }. Quem passa control fica responsável por ligar o nome acessível do próprio controle nesses ids.

name sincroniza o input espelho do CmSwitch, para envio direto em <form> nativo.

O componente não desenha borda nem fundo: empilhe as linhas dentro de um CmCard e use CmSeparator quando quiser divisória.