SplitButton

El componente SplitButton permite a las personas usuarias ejecutar acciones haciendo clic en un botón principal y mostrando un menú desplegable con acciones adicionales.

Combina un botón principal con acciones secundarias en un menú desplegable.

import React from "react";
import { SplitButton } from "@nimbus-ds/components";

const Example: React.FC = () => (
  <SplitButton>
    <SplitButton.Primary>Add product</SplitButton.Primary>
    <SplitButton.Secondary>
      <SplitButton.Action>Add product and duplicate</SplitButton.Action>
      <SplitButton.Action>Add product from template</SplitButton.Action>
      <SplitButton.Action>Add multiple products</SplitButton.Action>
    </SplitButton.Secondary>
  </SplitButton>
);

export default Example;

El SplitButton es un componente compuesto que combina una acción principal con un conjunto de acciones secundarias relacionadas. Ofrece eficiencia al permitir ejecutar la acción más común directamente, y al mismo tiempo, acceder a opciones adicionales desde un menú desplegable. Es ideal para mantener la interfaz limpia sin sacrificar funcionalidades clave.

El SplitButton se compone de:

  1. Main Button: Ejecuta la acción predeterminada.
  2. Secondary Button: Abre un Popover con acciones secundarias.
  3. Popover: Contiene las opciones adicionales en un menú desplegable.

Este componente utiliza:

  • Popover - Para mostrar el menú desplegable con las acciones secundarias.
  • Icon - Para mostrar iconos en las opciones del menú.
  • Label - Para las etiquetas de texto en los botones y opciones.

Usá el SplitButton cuando:

  • Existe una acción principal clara y predecible (como "Guardar" o "Crear").
  • Existen acciones adicionales relacionadas, pero de menor frecuencia de uso.
  • Se quiere evitar ocupar múltiples espacios con botones secundarios.
  • Las acciones secundarias están contextualmente relacionadas con la acción principal.

Evitá usarlo cuando:

  • No hay una acción principal destacada entre las opciones.
  • El menú contiene más de 4 opciones, ya que puede dificultar la navegación.
  • Las acciones del menú no están relacionadas entre sí.
  • Todas las acciones tienen la misma importancia.
  • Minimiza el uso del mouse: Permite ejecutar la acción principal con Enter o click directo.
  • Optimiza el flujo de trabajo: Prioriza la opción más usada, reduciendo pasos.
  • Evita sobrecargar la interfaz: Agrupa acciones similares en un solo punto.
  • Facilita el descubrimiento: Las personas usuarias pueden explorar opciones relacionadas sin abandonar el contexto actual.
  • Navegación completa con teclado: Tab para foco, Enter para acción principal, flecha abajo para abrir menú.
  • Etiquetas claras y descripciones en cada opción del menú desplegable.
  • Roles ARIA: aria-haspopup="menu" en el botón desplegable.
  • Tamaños de click/tap mínimos: 32×32 px para cumplir con estándares de accesibilidad.
  • Indicadores de foco visibles para cada acción.
  • Evitar depender del color para distinguir estados.
  • Soporte para lectores de pantalla que comuniquen claramente la estructura y opciones disponibles.
  • Agrupar acciones de exportación (Exportar como PDF, Exportar como Excel).
  • Combinar acciones de guardado (Guardar, Guardar y continuar, Guardar como borrador).
  • Gestionar acciones de creación (Crear producto, Crear producto y duplicar, Crear producto desde plantilla).
  • Button - Puede ser usado para acciones individuales sin opciones secundarias.
  • Dropdown - Puede ser usado cuando todas las opciones tienen el mismo nivel de importancia.

Instalá el componente via terminal.

npm install @nimbus-ds/split-button

Las propiedades adicionales se pasan al elemento <SplitButton>. Consultá la documentación para ver la lista de atributos aceptados por el elemento <SplitButton>.

SplitButton

NameTypeDefaultDescription

children*

React.ReactNode

The subcomponents (Primary and Secondary).

disabled

boolean

'false'

Disables the entire split button.

open

boolean

Controls the visibility of the popover.

onOpenChange

(open: boolean) => void;

Callback function to control popover opening and closing.

popoverPosition

'bottom'
'bottom-end'
'bottom-start'
'left'
'left-end'
'left-start'
'right'
'right-end'
'right-start'
'top'
'top-end'
'top-start'

'bottom-end'

Position of the popover relative to the button.