Saltar al contenido
EspañolEnglish
Todos los componentes (204)

Plegable

Estructura · Collapsible · .amset-collapsible

Qué es y cuándo usarlo

Un bloque que se pliega, suelto: «Ver más», «Detalles del envío», un filtro avanzado que no estorba hasta que hace falta.

Cuándo usarlo

  • Cuando es UNA sección y va dentro de algo que ya está pintado. No trae caja ni rayas a propósito.
  • arrowEnd para una fila de ajustes, donde el título manda a la izquierda.
  • defaultExpanded para que empiece abierto; expanded con onExpandedChange para llevar el estado desde fuera.

Cuándo no

  • Si son dos o más y van juntas, es un Accordion: trae la caja, las rayas y la posibilidad de que solo haya una abierta.
  • Para esconder algo que aparece encima del contenido, Dropdown.

Por qué no es un <details>: el <summary> nativo no admite un título con estructura dentro sin romper el nombre accesible, y un clic en él cambia open por su cuenta, sin pasar por el estado de React. Aquí el disparador es un <button> de verdad.

Teclado: Tab llega al disparador; Intro y Espacio lo abren y lo cierran. Con disabled no coge el foco.

Accesibilidad: el disparador lleva aria-expanded y aria-controls, y el panel se llama como él. Cerrado, el panel va con hidden="until-found": el buscador del navegador (Ctrl+F) encuentra su texto y lo abre. Al cerrarse con el foco DENTRO del panel, el foco vuelve al disparador. Sin eso el navegador lo dejaría en el body y quien navega con teclado tendría que empezar a tabular desde el principio de la página. Con el dedo, el disparador llega a los 44 px.

Aspecto fino: --amset-collapsible-font, --amset-collapsible-gap (el hueco entre el título y el texto, que solo existe abierto: cerrado, el plegable mide lo que mide su título),--amset-collapsible-color, --amset-collapsible-arrow y --amset-collapsible-inset.

Cómo se ve

<Collapsible title="Detalle del envio">
  <Text>Salio el 1 de octubre de Madrid.</Text>
</Collapsible>

Props

Se importa con import { Collapsible } from '@amset/ui'. Las obligatorias van marcadas.

PropTipoPara qué sirve
childrenobligatoriaReactNode—
titleobligatoriaReactNodeLo que se lee en el disparador. Es el nombre del panel.
arrowEndbooleanLa flecha a la derecha, para una fila de ajustes.
classNamestringSe une a las clases de la biblioteca, no las sustituye.
defaultExpandedbooleanAbierto al empezar. Para lo que se usa casi siempre.
disabledboolean—
expandedbooleanControlado desde fuera. Con esto hay que pasar `onExpandedChange`.
onExpandedChange(expanded: boolean) => void—
size"sm" | "md" | "lg"—

Acepta además los atributos del elemento que pinta: className, style, data-*, aria-* y sus eventos.

Mandos

Estas variables CSS son la forma de adaptarlo. Se declaran sobre el selector del componente, no en :root: la hoja las redeclara en la propia regla y una declaración en el mismo elemento gana siempre.

VariablePor defecto
--amset-collapsible-fontvar(--amset-text-base)
--amset-collapsible-gapvar(--amset-space-2)
--amset-collapsible-colorvar(--amset-ink)
--amset-collapsible-arrowvar(--amset-ink-2)
--amset-collapsible-insetvar(--amset-space-5)

Cómo se cambia

.amset-collapsible {
  --amset-collapsible-font: ...;
  --amset-collapsible-gap: ...;
}

En el banco de pruebas

Cada estado y cada variante, para tocarlos de uno en uno, en su ficha de ui.amset.tech: