/v1.0

ButtonGroup

Renderiza un grupo de botones en fila desde un arreglo buttons. Cada botón puede tener su propio texto, íconos, estilo, tipo, tamaño y un payload extraData que se pasa al handler onClick. Opcionalmente, los títulos pueden revelarse con un efecto de escritura secuencial.

Props

| Prop | Tipo | Requerido | Por defecto | Descripción | |------|------|-----------|-------------|-------------| | buttons | ButtonType[] | Sí | — | Arreglo de objetos de configuración de botones. | | containerStyle | React.CSSProperties | No | — | Estilos del contenedor envolvente. | | buttonStyle | React.CSSProperties | No | — | Estilos aplicados a todos los botones. | | enableAnimation | boolean | No | false | Activa la animación de escritura en los títulos. | | animationSpeed | number | No | 20 | Milisegundos por carácter de la animación. | | onAnimationComplete | () => void | No | — | Se ejecuta cuando todas las animaciones finalizan. |

Forma de ButtonType

| Campo | Tipo | Requerido | Descripción | |-------|------|-----------|-------------| | title | string | Sí | Texto del botón. | | onClick | (extraData: any) => void | No | Handler del clic; recibe extraData. | | extraData | any | No | Datos arbitrarios enviados al handler. | | type | 'outline' \| 'clear' \| 'solid' | No | Estilo visual del botón. | | size | 'xs' \| 'sm' \| 'md' \| 'lg' \| 'xl' | No | Tamaño del botón. | | startIcon | string | No | Ícono antes del título. | | endIcon | string | No | Ícono después del título. | | style | React.CSSProperties | No | Estilos individuales del botón. |

Uso

Básico

import ButtonGroup from '@/components/ButtonGroup';

const buttons = [
  { title: 'Editar', startIcon: 'edit', onClick: () => console.log('editar') },
  { title: 'Eliminar', startIcon: 'delete', onClick: () => console.log('eliminar') },
];

export default function Example() {
  return <ButtonGroup buttons={buttons} />;
}

Con extraData y animación

import ButtonGroup from '@/components/ButtonGroup';

const buttons = [
  {
    title: 'Ver Factura',
    startIcon: 'document',
    extraData: { facturaId: 42 },
    onClick: (data) => console.log('Factura:', data.facturaId),
  },
];

export default function Example() {
  return (
    <ButtonGroup
      buttons={buttons}
      enableAnimation
      animationSpeed={30}
      onAnimationComplete={() => console.log('Botones revelados')}
    />
  );
}