Aller au contenu

Checkbox

Composant de case à cocher pour sélectionner plusieurs options avec différents styles et support de groupe.

import { Checkbox } from 'asterui'

Utilisation de base

Case à cocher simple avec étiquette.

import { Checkbox } from 'asterui'

function App() {
  return (
      <Checkbox>Accept terms and conditions</Checkbox>
    )
}

export default App

Couleurs

Différentes couleurs de case à cocher pour divers contextes.

import { Checkbox, Space } from 'asterui'

function App() {
  return (
      <Space direction="vertical" size="sm">
        <Checkbox color="primary" defaultChecked>Primary</Checkbox>
        <Checkbox color="secondary" defaultChecked>Secondary</Checkbox>
        <Checkbox color="accent" defaultChecked>Accent</Checkbox>
        <Checkbox color="success" defaultChecked>Success</Checkbox>
        <Checkbox color="warning" defaultChecked>Warning</Checkbox>
        <Checkbox color="info" defaultChecked>Info</Checkbox>
        <Checkbox color="error" defaultChecked>Error</Checkbox>
      </Space>
    )
}

export default App

Tailles

Cinq tailles de case à cocher de xs à xl.

import { Checkbox, Space } from 'asterui'

function App() {
  return (
      <Space direction="horizontal" size="md" align="center">
        <Checkbox size="xs" defaultChecked>XS</Checkbox>
        <Checkbox size="sm" defaultChecked>SM</Checkbox>
        <Checkbox size="md" defaultChecked>MD</Checkbox>
        <Checkbox size="lg" defaultChecked>LG</Checkbox>
        <Checkbox size="xl" defaultChecked>XL</Checkbox>
      </Space>
    )
}

export default App

Désactivée

États de case à cocher désactivée.

import { Checkbox, Space } from 'asterui'

function App() {
  return (
      <Space direction="horizontal" size="md">
        <Checkbox disabled>Disabled</Checkbox>
        <Checkbox disabled defaultChecked>Disabled Checked</Checkbox>
      </Space>
    )
}

export default App

Indéterminée

État indéterminé pour la fonctionnalité tout cocher.

import { Checkbox, Space } from 'asterui'
import { useState } from 'react'

function App() {
  const [items, setItems] = useState([true, false, true])
  const allChecked = items.every(Boolean)
  const someChecked = items.some(Boolean) && !allChecked
  
  const handleSelectAll = () => {
    setItems(allChecked ? [false, false, false] : [true, true, true])
  }
  
  return (
      <Space direction="vertical" size="sm">
        <Checkbox
          checked={allChecked}
          indeterminate={someChecked}
          onChange={handleSelectAll}
          className="font-medium"
        >
          Select All
        </Checkbox>
        <div className="ml-6">
          <Space direction="vertical" size="xs">
            {['Item 1', 'Item 2', 'Item 3'].map((item, i) => (
              <Checkbox
                key={i}
                checked={items[i]}
                onChange={() => {
                  const newItems = [...items]
                  newItems[i] = !newItems[i]
                  setItems(newItems)
                }}
              >
                {item}
              </Checkbox>
            ))}
          </Space>
        </div>
      </Space>
    )
}

export default App

Groupe de cases à cocher

Grouper plusieurs cases à cocher avec état partagé.

import { Checkbox, Modal } from 'asterui'

function App() {
  const options = [
    { label: 'Apple', value: 'apple' },
    { label: 'Banana', value: 'banana' },
    { label: 'Orange', value: 'orange' },
    { label: 'Mango', value: 'mango' },
  ]
  
  return (
      <Checkbox.Group
        options={options}
        defaultValue={['apple', 'orange']}
        onChange={(values) => Modal.info({ title: 'Selected', content: values.join(', ') })}
      />
    )
}

export default App

Groupe avec options

Générer des cases à cocher à partir d'un tableau d'options avec support de désactivation.

import { Checkbox } from 'asterui'

function App() {
  const options = [
    { label: 'Read', value: 'read' },
    { label: 'Write', value: 'write' },
    { label: 'Delete', value: 'delete', disabled: true },
  ]
  
  return (
      <Checkbox.Group
        options={options}
        defaultValue={['read']}
      />
    )
}

export default App

Direction du groupe

Dispositions de groupe horizontales et verticales.

Horizontal (default)

Vertical

import { Checkbox, Space } from 'asterui'

function App() {
  const options = ['Option A', 'Option B', 'Option C']
  
  return (
      <Space direction="vertical" size="lg">
        <div>
          <p className="text-sm font-medium mb-2">Horizontal (default)</p>
          <Checkbox.Group options={options} direction="horizontal" defaultValue={['Option A']} />
        </div>
        <div>
          <p className="text-sm font-medium mb-2">Vertical</p>
          <Checkbox.Group options={options} direction="vertical" defaultValue={['Option B']} />
        </div>
      </Space>
    )
}

export default App

Contrôlée

Case à cocher contrôlée avec gestion d'état externe.

Checked: No

import { Checkbox, Space } from 'asterui'
import { useState } from 'react'

function App() {
  const [checked, setChecked] = useState(false)
  
  return (
      <Space direction="vertical" size="sm">
        <Checkbox
          checked={checked}
          onChange={(e) => setChecked(e.target.checked)}
        >
          Controlled checkbox
        </Checkbox>
        <p className="text-sm text-base-content/70">
          Checked: {checked ? 'Yes' : 'No'}
        </p>
      </Space>
    )
}

export default App

Mode échange

Basculer entre deux états visuels avec effets d'animation.

import { Checkbox, Space } from 'asterui'
import { SpeakerWaveIcon, SpeakerXMarkIcon } from '@aster-ui/icons/solid'
import { useState } from 'react'

function App() {
  const [volume, setVolume] = useState(true)
  
  return (
      <Space size="lg">
        <Checkbox
          checked={volume}
          onChange={(e) => setVolume(e.target.checked)}
          swap={{
            on: <SpeakerWaveIcon size={32} />,
            off: <SpeakerXMarkIcon size={32} />,
          }}
        />
        <Checkbox
          swap={{
            on: <span className="text-2xl">😀</span>,
            off: <span className="text-2xl">😴</span>,
            effect: 'rotate',
          }}
        />
        <Checkbox
          swap={{
            on: <span className="text-xl font-bold text-success">ON</span>,
            off: <span className="text-xl font-bold text-error">OFF</span>,
            effect: 'flip',
          }}
        />
      </Space>
    )
}

export default App
PropriétéDescriptionTypeDéfaut
checkedÉtat coché contrôléboolean-
defaultCheckedÉtat coché par défautboolean-
disabledDésactiver la case à cocherbooleanfalse
indeterminateÉtat indéterminé (sélection partielle)booleanfalse
sizeTaille de la case à cocher'xs' | 'sm' | 'md' | 'lg' | 'xl'-
colorCouleur de la case à cocher'primary' | 'secondary' | 'accent' | 'neutral' | 'success' | 'warning' | 'info' | 'error'-
swapConfiguration du mode échangeCheckboxSwapConfig-
valueValeur lorsqu’elle est utilisée dans un groupestring | number-
onChangeGestionnaire d’événement de changement(e: ChangeEvent) => void-
nameAttribut HTML name pour l’inputstring-
autoFocusFocus automatique au montagebooleanfalse
classNameClasses CSS supplémentairesstring-
childrenContenu de l’étiquette (automatiquement enveloppé dans un élément label)ReactNode-
PropriétéDescriptionTypeDéfaut
valueValeurs sélectionnées contrôlées(string | number)[]-
defaultValueValeurs sélectionnées par défaut(string | number)[]-
onChangeCallback de changement de sélection(values: (string | number)[]) => void-
disabledDésactiver toutes les cases à cocherbooleanfalse
optionsOptions de cases à cocher(string | number | CheckboxOptionType)[]-
directionDirection de la disposition'horizontal' | 'vertical''vertical'
nameAttribut HTML name pour toutes les cases à cocher (pour la soumission de formulaire)string-
childrenÉléments de case à cocher manuelsReactNode-
PropriétéDescriptionTypeDéfaut
onContenu affiché lorsque cochéReactNode-
offContenu affiché lorsque décochéReactNode-
effectEffet d’animation'rotate' | 'flip'-
PropriétéDescriptionTypeDéfaut
labelÉtiquette de l’optionReactNode-
valueValeur de l’optionstring | number-
disabledDésactiver cette optionbooleanfalse
  • Utilise l’input de case à cocher native pour le support du clavier et du lecteur d’écran
  • Associe correctement les étiquettes aux cases à cocher
  • L’état indéterminé est communiqué via la propriété native indeterminate
  • L’état désactivé empêche l’interaction et est communiqué aux technologies d’assistance
  • Les états de focus sont visibles pour la navigation au clavier