<!-- Docs styles -->
import { Story, Canvas, Preview, ArgsTable   } from '@storybook/addon-docs';
import image1 from '../../stories/assets/Docum_SDSS_Componentes/06_Casilla/01_Casilla_Opciones.png';
import image2 from '../../stories/assets/Docum_SDSS_Componentes/06_Casilla/02_Casilla_Anatomia_Anidados.png';
import image3 from '../../stories/assets/Docum_SDSS_Componentes/06_Casilla/03_Casilla_Anatomia_Controles.png';
import image4 from '../../stories/assets/Docum_SDSS_Componentes/06_Casilla/04_Casilla_Anatomia_Posicion.png';
import image5 from '../../stories/assets/Docum_SDSS_Componentes/06_Casilla/05_Casilla_Comportamiento.png';

<style>
  {`
    .sbdocs-table tr * {
      text-align: center;
      font-weight: bold;
    }

    img {
      display: block;
      margin: 0 auto;
    }


  `}
</style>


# Casilla / Checkbox

Utilizaremos las casillas para dar un rango cerrado de  **opciones**  al usuario, de las cuales podrá marcar todas las que considere, ninguna o un número cualquiera, incluso todas.

Este componente es similar al  **botón de radio**, con la particularidad de que permite múltiples selecciones.

<img src={image1}/>

También se usa una  **casilla aislada**  para dar opción de marcar una preferencia que presenta solo dos estados posibles “sí” y “no” según la casilla esté marcada o no.

No se debe usar nunca las casillas para conjuntos de opciones excluyentes, es decir, cuando solo se puede elegir una opción. En esos casos utilizaremos el componente botón de radio. En caso de tener un conjunto de casillas checkbox estos deberán estar agrupados mediante el atributo “group” al igual que sucede con los botones de radio.

### Contenido

Si se presenta un grupo de casillas, como es lo habitual, se suele tener una  **etiqueta del grupo**  en la parte superior para comunicar el grupo y dar guías al usuario para realizar la selección.

Para esta etiqueta de grupo se recomienda usar un texto en formato frase que indique claramente el contexto de la selección. Se debe ser claro en indicar las consecuencias de la selección solicitada al usuario.

Para las  **etiquetas**  de cada casilla se recomienda usar frases cortas y concisas. Si los textos son demasiado largos, el excedente continuará en la siguiente línea. No se recomienda truncar los textos largos.

Las casillas pueden  **anidarse**  creando jerarquías de opciones. Los usuarios pueden seleccionar un subgrupo completo de casillas, o una o varias de ellas individualmente.

<img src={image2}/>

Al contrario que con el botón de radio, dada la naturaleza de este componente, no se recomienda que haya un valor seleccionado por  **defecto**, a no ser que se decida ofrecer una respuesta predeterminada para el usuario.

### Anatomía
<!--
De manera similar al botón de radio, las casillas agrupadas tienen una  **etiqueta de grupo**, y cada opción tiene su  **control**  en forma de casilla con un icono de 16px y el  **texto**  de la etiqueta individual a la derecha de este con un padding estándar de 8px.
-->
<img src={image3}/>

El control de la casilla siempre estará **alineado** con la primera línea del texto. Tanto el control como la etiqueta están alineados por arriba, no se debe centrar el control y la etiqueta.
<!--
De igual manera que el botón de radio, los grupos de casillas pueden agruparse, y distribuirse  **vertical**  u  **horizontalmente**  dependiendo de las necesidades del interfaz, aunque se recomienda la distribución vertical de los elementos para facilitar la lectura de las opciones.

<img src={image4}/>
-->
### Comportamiento

Los usuarios pueden **activar** las opciones de un grupo de casillas clicando tanto en el control como en la etiqueta. Esta dualidad permite una mayor sencillez a la hora de usar este componente.

Si se usa un teclado, los usuarios pueden navegar entre las distintas opciones de un grupo con las teclas de “flecha arriba” y “flecha abajo”. Para seleccionar una opción se puede realizar con la tecla “espacio” cuando el control deseado tiene el foco.

En las casillas anidadas, al marcar una  **casilla padre**  se seleccionan automáticamente todas las casillas hijas. De la misma manera al deseleccionar una casilla padre, se deseleccionarán todas las hijas.

Las casillas presentan así tres **valores**, seleccionado, deseleccionado e indeterminado. Cuando solo algunas de las casillas hijo de un subgrupo están seleccionadas, la casilla padre tendrá el valor indeterminado.

Así pues, los **estados** del botón de radio son enabled, hover, focus, selected, indeterminated, disabled y skeleton.


<img src={image5}/>



### Código

```
<input id="checkbox" type="checkbox" part="input" class="bx--checkbox" aria-checked="false" value="Casilla 1">
<label for="checkbox" part="label" class="bx--checkbox-label">
  <span class="bx--checkbox-label-text"><slot><!----><!----></slot></span>
</label>
```



### Tokens

**Color**

| Class                     | Property         | Color token   |
| :------------------------ | :--------------- | :------------ |
| `.bx--label`              | text color       | `$text-02`    |
| `.bx--checkbox-label`     | text color       | `$text-01`    |
| `.bx--checkbox`           | border           | `$icon-01`    |
| `.bx--checkbox:unchecked` | background-color | transparent   |
| `.bx--checkbox:checked`   | background-color | `$icon-01`    |
| `.bx--checkbox:checked`   | checkmark        | `$inverse-01` |

| State       | Property   | Color token    |
| :---------- | :--------- | :------------- |
| `:focus`    | border     | `$focus`       |
| `:disabled` | text color | `$disabled-02` |
| `:disabled` | border     | `$disabled-02` |

**Tipografía**

| Class                 | Type token       |
| :-------------------- | :--------------- |
| `.bx--label`          | `$label-01`      |
| `.bx--checkbox-label` | `$body-short-01` |

**Estructura**

| Class                                 | Property       | Spacing token |
| :------------------------------------ | :------------- | :------------ |
| `.bx--checkbox`                       | height & width | –             |
| `.bx--checkbox`                       | border         | –             |
| `.bx--checkbox:focus`                 | border         | –             |
| `.bx--label`                          | margin-bottom  | `$spacing-03` |
| `.bx--checkbox-label`                 | padding-left   | `$spacing-03` |
| `.bx--form-item.bx--checkbox-wrapper` | margin-bottom  | `$spacing-03` |
