Skip to content

Checkbox

Caixa de seleção do Arrow. v-model aceita boolean (seleção única) ou array (grupo — idiomático do Vue). Consome o DNA dos Fundamentos (04 Forma · interactive.sm, 01 Cor · action, 02 Tipografia).

Playground

Importação

ts
import { Checkbox } from '@arrow/components-vue'

Uso básico

vue
<script setup>
import { ref } from 'vue'
const aceito = ref(false)
</script>

<template>
  <Checkbox v-model="aceito" label="Aceito os termos de uso" />
</template>

Estados

vue
<Checkbox :model-value="false" label="Desmarcado" />
<Checkbox :model-value="true" label="Marcado" />
<Checkbox :indeterminate="true" label="Indeterminado" />
<Checkbox :model-value="true" disabled label="Desabilitado" />

Grupo (v-model em array)

Passe um array no v-model e um value em cada checkbox — o Vue gerencia a inclusão/remoção sozinho (sem prop multiSelect).

Selecionados: [ "email" ]

vue
<script setup>
import { ref } from 'vue'
const grupo = ref(['email'])
</script>

<template>
  <Checkbox v-model="grupo" value="email" label="E-mail" />
  <Checkbox v-model="grupo" value="sms" label="SMS" />
  <Checkbox v-model="grupo" value="push" label="Push" />
</template>

Tamanho · size

sm (caixa 16px) · md (20px, padrão).

vue
<Checkbox v-model="sm" size="sm" label="Small" />
<Checkbox v-model="md" size="md" label="Medium" />

API

Props

PropTipoPadrãoDescrição
modelValueboolean | unknown[]falseEstado (single) ou array de selecionados (grupo). Use com v-model.
valueunknownValor deste item quando modelValue é array (modo grupo).
labelstringTexto ao lado da caixa. Alternativa ao slot default.
indeterminatebooleanfalseEstado parcial (seleção mista).
disabledbooleanfalseDesabilita interação.
size'sm' | 'md''md'Tamanho da caixa: 16 / 20 px.

Eventos

EventoPayloadDescrição
update:modelValueboolean | unknown[]v-model. Single → novo booleano; array → novo array com o value incluído/removido.

Slots

NomeDescrição
defaultConteúdo do label (tem prioridade sobre label).

Acessibilidade

  • <input type="checkbox"> nativo (oculto, mas focável) — teclado e leitores de tela de fábrica; indeterminate é refletido na propriedade nativa (anunciado como "mixed").
  • :focus-visible com anel de 3px no box (color.state.focus-ring).
  • O <label> envolve tudo → clicar no texto também alterna.

Migração do MeCheckbox

  • multiSelect + toggle manual → v-model em array nativo. Passe um array e o value; o Vue cuida do resto.
  • labelSize (8 tamanhos, até 48px) → removido. Label fixo em type.body.sm; a caixa tem size sm/md.
  • fontWeight (Montserrat) → removido. Arrow é Inter; o peso vem do token.
  • Novo: indeterminate.