Lista de Componentes

Índice

Alert

Mensajes cortos de distinto tipo.

¡Información! Este es un mensaje informativo.

¡Éxito!Este es un mensaje de éxito.

¡Aviso! Este es un mensaje de aviso.

¡Error! Este es un mensaje de error.

Código de ejemplo

<Alert type="info"> <strong>¡Información!</strong><span>Este es un mensaje informativo.</span> </Alert>

Propiedades

type por defecto info

Alert small

Mensajes cortos de distinto tipo en formato pequeño.

¡Información! Este es un mensaje informativo.

¡Éxito! Este es un mensaje de éxito.

¡Aviso! Este es un mensaje de aviso.

¡Error! Este es un mensaje de error.

Código de ejemplo

<Alert small type="info"> <strong>¡Información!</strong><span>Este es un mensaje informativo.</span> </Alert>

Propiedades

type por defecto info
small

Badge

Insignias de distinto tipo.

Información
Éxito
Aviso
Error

Código de ejemplo

<Badge type="info"> Información </Badge>

Propiedades

type por defecto info

Button

Este componente debe importarse dentro de una página o componente con 'use client'

  • Motivo: hace uso de función evento onClick

Botón para ser utilizado en el lado cliente.

Código de ejemplo

<Button onClick={() => alert("Mensaje de alerta")}> Botón </Button>

Propiedades

onClick
color por defecto current
size por defecto lg
round por defecto full

Space

Espacio vertical en blanco con alto indicado en píxeles.

Código de ejemplo

<Space height={40} />

Propiedades

height por defecto 10

Separator

Línea de separación horizontal o vertical. La línea vertical sólo es de utilidad entre elementos mostrados en línea.

Hola
Mundo

Código de ejemplo

<Separator /> <div className="flex gap-4 "> <div>Hola</div> <Separator type="vertical" /> <div>Mundo </div> </div>

Propiedades

type por defecto horizontal

Tooltip

Pequeño cuadro informativo que aparece cuando el usuario pasa el cursor por encima.

Al pasar el ratón por encima de este párrafo se mostrará un pequeño mensaje de ayuda o tooltip.

Código de ejemplo

<Tooltip title="Esto es un tooltip"> <div className="bg-blue-100 dark:bg-blue-500 px-4 py-2 border border-slate-300 dark:border-slate-600"> Al pasar el ratón por encima de este párrafo se mostrará un pequeño mensaje de ayuda o tooltip. </div> </Tooltip>

Propiedades

title

Popover

Cuadro que aparece cuando el usuario pasa el cursor por encima del title. Suele poseer un contenido más amplio e incluso elementos interactivo.

Popover

Código de ejemplo

<Popover title="Popover" className="bg-blue-100 dark:bg-blue-500 px-4 py-2 border border-slate-300 dark:border-slate-600"> <div className="flex flex-col gap-1"> <Link href="#" className="hover:opacity-60 active:opacity-40">Dashboard</Link> <Link href="#" className="hover:opacity-60 active:opacity-40">Autores</Link> <Link href="#" className="hover:opacity-60 active:opacity-40">Libros</Link> <Link href="#" className="hover:opacity-60 active:opacity-40">Prestamos</Link> </div> </Popover>

Propiedades

title

Dropdown

Cuadro desplegable que aparece cuando el usuario hace click en el title. El cuadro suele contener algún tipo de menú. Al pulsar en cualquier otro lugar de la página, el menu se repliega.

Dropdown

Código de ejemplo

<Dropdown title="Dropdown" className="bg-blue-100 dark:bg-blue-500 px-4 py-2 border border-slate-300 dark:border-slate-600"> <div className="flex flex-col gap-2"> <Link href="#" className="hover:opacity-60 active:opacity-40">Dashboard</Link> <Link href="#" className="hover:opacity-60 active:opacity-40">Autores</Link> <Link href="#" className="hover:opacity-60 active:opacity-40">Libros</Link> <Link href="#" className="hover:opacity-60 active:opacity-40">Prestamos</Link> </div> </Dropdown>

Propiedades

title

Dropdown2

Cuadro desplegable que aparece cuando el usuario hace click en el title. El cuadro suele contener algún tipo de menú. Al pulsar en el mismo sitio, el menu se repliega.

+Dropdown2

Código de ejemplo

<Dropdown2 title="Dropdown2" className="bg-blue-100 dark:bg-blue-500 px-4 py-2 border border-slate-300 dark:border-slate-600"> <div className="flex flex-col gap-2"> <Link href="#" className="hover:opacity-60 active:opacity-40">Dashboard</Link> <Link href="#" className="hover:opacity-60 active:opacity-40">Autores</Link> <Link href="#" className="hover:opacity-60 active:opacity-40">Libros</Link> <Link href="#" className="hover:opacity-60 active:opacity-40">Prestamos</Link> </div> </Dropdown2>

Propiedades

title

Modal

Diálogo modal que aparece al hacer click en el trigger y se muestra centrado en pantalla. Para cerrar se puede hacer clic fuera del diálogo o pulsar la tecla Esc.

Abrir Modal

Esto es un diálogo modal.

Lorem, ipsum dolor sit amet consectetur adipisicing elit. Quam, nostrum dignissimos illum, ratione molestiae aut, esse a porro debitis quia eius modi nulla consequuntur! Iusto nulla eaque quis libero ducimus! Sint corrupti soluta, doloremque beatae vero facilis praesentium, perferendis officiis nam enim ratione exercitationem dolore aliquid adipisci veniam quos error obcaecati! Quis voluptatum aut alias ad placeat aliquid nihil obcaecati. Iste repellat culpa eligendi dolorem deleniti officiis ex magni, placeat magnam numquam nobis eveniet beatae. Debitis labore voluptate at, sint consequuntur minus ipsum optio vero quibusdam quam fugit ullam. Nostrum? Nam obcaecati error id, facilis ipsum, cupiditate omnis deserunt saepe aliquam maiores in perspiciatis consequatur consequuntur iure excepturi rerum provident. Cupiditate quis impedit atque, aspernatur alias itaque. Sint, cupiditate ipsa! Adipisci vel ad quos temporibus dicta quidem doloremque sed deleniti eos! Quis aspernatur veniam dolor, nulla blanditiis totam molestias perspiciatis nostrum laudantium corrupti, aliquam dolore? Ab amet officiis eligendi autem.

Código de ejemplo

<Modal trigger={ <div className="bg-blue-100 dark:bg-blue-500 px-4 py-2 border border-slate-300 dark:border-slate-600"> Abrir Modal </div> }> <div className="p-8"> <p className="text-blue-500 font-bold">Esto es un diálogo modal.</p> <div className="text-wrap"> Lorem, ipsum dolor sit amet consectetur adipisicing elit. Quam, nostrum dignissimos illum, ratione molestiae aut, esse a porro debitis quia eius modi nulla consequuntur! Iusto nulla eaque quis libero ducimus! Sint corrupti soluta, doloremque beatae vero facilis praesentium, perferendis officiis nam enim ratione exercitationem dolore aliquid adipisci veniam quos error obcaecati! Quis voluptatum aut alias ad placeat aliquid nihil obcaecati. Iste repellat culpa eligendi dolorem deleniti officiis ex magni, placeat magnam numquam nobis eveniet beatae. Debitis labore voluptate at, sint consequuntur minus ipsum optio vero quibusdam quam fugit ullam. Nostrum? Nam obcaecati error id, facilis ipsum, cupiditate omnis deserunt saepe aliquam maiores in perspiciatis consequatur consequuntur iure excepturi rerum provident. Cupiditate quis impedit atque, aspernatur alias itaque. Sint, cupiditate ipsa! Adipisci vel ad quos temporibus dicta quidem doloremque sed deleniti eos! Quis aspernatur veniam dolor, nulla blanditiis totam molestias perspiciatis nostrum laudantium corrupti, aliquam dolore? Ab amet officiis eligendi autem. </div> </div> </Modal>

Propiedades

trigger

Skeleton

Estructura de ejemplo para su uso como fallback de Suspense.

Código de ejemplo

<Skeleton />

Propiedades

Ninguna. Deberás hacer un copia del componente y editar a tu gusto.

Spinner

Icono animado para su uso como fallback de Suspense.

Código de ejemplo

<div className="flex items-center gap-2"> <Spinner type={0} size={12} color="text-orange-500 dark:text-orange-600" /> <Spinner type={1} size={8} color="text-blue-600 dark:text-blue-300" /> <Spinner type={2} size={9} /> <Spinner type={3} size={11} /> <Spinner type={4} size={11} color="text-blue-500 dark:text-blue-400" /> <Spinner type={5} size={7} color="text-slate-500 dark:text-slate-400" /> <Spinner type={6} size={9} color="text-zinc-500 dark:text-zinc-400" /> <Spinner type={7} size={9} /> </div>

Propiedades

type por defecto 0
size por defecto 10
color por defecto text-black dark:text-white

Bonus

Los siguientes spinners no están incluidos en esta biblioteca. Se muestran aquí para demostrar lo fácil que es crear nuestros propios spinners.

#🔥
🦘
❤️

Código de ejemplo

<div className="flex items-center gap-2"> <div className="size-10 inline-block border-x-4 border-blue-600 dark:border-blue-500 rounded-full animate-spin" /> <span className="text-5xl text-slate-200 animate-spin">#</span> <span className="text-4xl animate-pulse">🔥</span> <div className="inline-block text-5xl animate-bounce">🦘</div> <span className="inline-block text-lg text-red-500 animate-ping">❤️</span> </div>

Icons

Algunos iconos para su uso con InputCheck e InputGroup. Probablemente no necesites hacer uso de ellos de forma directa.

Código de ejemplo

<div className="flex items-center gap-2"> <CircleIcon color="fill-violet-400" /> <SquareIcon color="fill-blue-400" /> <HexagonIcon color="fill-teal-400" /> <CrossIcon color="fill-lime-400" /> <StarIcon color="fill-yellow-400" /> <HeartIcon color="fill-red-400" /> </div>

Propiedades

color por defecto fill-white

InputText

Input de tipo texto. La mayoría de las veces no necesitarás hacer uso de forma directa, sino a través del componente Form.

Código de ejemplo

<InputText label="Introduce tu nombre" name="nombre" value={"José"} />

Propiedades

label
name
value

InputNumber

Input de tipo número. La mayoría de las veces no necesitarás hacer uso de forma directa, sino a través del componente Form.

Código de ejemplo

<InputNumber label="Introduce tu edad" name="edad" value={18} />

Propiedades

label
name
value

InputRange

Input de tipo rango. La mayoría de las veces no necesitarás hacer uso de forma directa, sino a través del componente Form.

50

Código de ejemplo

<InputRange label="Volumen" name="volume" value={50} min={0} max={100} step={1} />

Propiedades

label
name
value
min
max
step

InputDate

Input de varios tipos de tiempo. La mayoría de las veces no necesitarás hacer uso de forma directa, sino a través del componente Form.

Código de ejemplo

<InputDate type="datetime-local" label="Evento musical" name="evento" />

Propiedades

type
label
name
value
min
max
step

InputImage

Input de tipo file para imágenes. La mayoría de las veces no necesitarás hacer uso de forma directa, sino a través del componente Form.

image

Código de ejemplo

<InputImage label="Foto de empleado" name="foto" src="https://randomuser.me/api/portraits/men/85.jpg" width={300} height={300} />

Propiedades

label por defecto Imagen
name por defecto image
src
width por defecto 320
height por defecto 200

InputCheck

Input de tipo radio. La mayoría de las veces no necesitarás hacer uso de forma directa, sino a través del componente InputGroup.

Código de ejemplo

<InputCheck label="Amateur" name="nivel" value="amateur" checked={false} icon={<CrossIcon />} />

Propiedades

label
name
value
icon por defecto check circular

InputCheck multiple

Input de tipo checkbox. La mayoría de las veces no necesitarás hacer uso de forma directa, sino a través del componente InputGroup.

Código de ejemplo

<InputCheck multiple label="Lectura" name="gustos" value="leer" checked={true} icon={<HeartIcon />} />

Propiedades

label
name
value
icon por defecto check cuadrado
multiple

InputGroup

Grupo de inputs de tipo radio. La mayoría de las veces no necesitarás hacer uso de forma directa, sino a través del componente Form.

Categoria

Código de ejemplo

<InputGroup label="Categoria" name="categoria" options={[ // [label, name, checked] ["Amateur", "amateur", false], ["Junior", "junior", false], ["Senior", "senior", true], ["Veterano", "veterano", false] ]} icon={<CrossIcon />} />

Propiedades

label
name
options
icon por defecto check circular

InputGroup multiple

Grupo de inputs de tipo checkbox. La mayoría de las veces no necesitarás hacer uso de forma directa, sino a través del componente Form.

Aficiones

Código de ejemplo

<InputGroup multiple label="Aficiones" name="aficiones" options={[ // [label, name, checked] ["Lectura", "leer", true], ["Actividad física", "deporte", false], ["Cine", "cine", true], ["Playa", "playa", true] ]} icon={<HeartIcon />} />

Propiedades

label
name
options
icon por defecto check cuadrado
multiple

InputSelect

Select. La mayoría de las veces no necesitarás hacer uso de forma directa, sino a través del componente Form.

Categoría

Código de ejemplo

<InputSelect label="Categoría" name="categoria2" options={[ // [label, name, checked] ["Amateur", "amateur", false], ["Junior", "junior", false], ["Senior", "senior", true], ["Veterano", "veterano", false] ]} className="w-80" />

Propiedades

label
name
options
icon por defecto check circular

InputSelect multiple

Select múltiple. La mayoría de las veces no necesitarás hacer uso de forma directa, sino a través del componente Form.

Aficiones

Código de ejemplo

<InputSelect multiple label="Aficiones" name="aficiones2" options={[ // [label, name, checked] ["Lectura", "leer", true], ["Actividad física", "deporte", false], ["Cine", "cine", true], ["Playa", "playa", true] ]} className="w-80" />

Propiedades

label
name
options
icon por defecto check cuadrado
multiple

Submit

Botón para enviar datos de un formulario. La mayoría de las veces no necesitarás hacer uso de forma directa, sino a través del componente Form. Consultar Form.

Código de ejemplo

<Submit formAction={async () => {}}> Submit </Submit>

Propiedades

labels
formAction
color por defecto current
size por defecto lg
round por defecto full

Form

Este componente debe importarse dentro de una página o componente con 'use client'

  • Motivo: hace uso de función toast

Formulario de recogida de datos.

image
Perfil laboral:
Hobbies:

Código de ejemplo

<Form action={async () => { await new Promise(resolve => setTimeout(resolve, 1000)) toast.info("Acción desactivada.") }} data={{ nombre: "Ana", empresa: "Junta Andalucía" }} className="border border-slate-100 shadow-lg rounded-md p-8 md:w-3/4 mx-auto" fields={[ { name: "image", component: "InputImage", className: "self-end" }, { name: "nombre", label: "Introduzca nombre:", }, { name: "empresa", label: "Introduzca empresa:", }, { name: "perfil", label: "Perfil laboral:", component: "InputGroup", options: [ // [label, name, checked] ["Conserje", "conserje", false], ["Administrativo", "administrativo", true], ["Profesor", "profesor", true], ["Alumno", "alumno", false], ] }, { name: "hobbies", label: "Hobbies:", component: "InputGroup", multiple: true, options: [ // [label, name, checked] ["Lectura", "leer", false], ["Cine", "cine", true], ["Música", "musica", true], ["Playa", "playa", false] ] }, { labels: ["Guardar datos", "Guardando datos ..."], component: "Submit", // color: "green", // round: "none" } ]} />

Propiedades

data
action
fields

Table

Lista de empleados
NombreEmpresaCargo
1Adán Guerrero RenteríaGil Zambrano y Baca IrizarryAdministrador de Métricas Adelante
2Agustín Aguilera BernalVéliz Mendoza S.A.Oficial de Contabilidad Dinánmico
3Adriana Reyes DíazMaya Montañez y Valentín VillarrealProductor de Grupo Gerente

Código de ejemplo

<Table data={[ { nombre: 'Adán Guerrero Rentería', empresa: 'Gil Zambrano y Baca Irizarry', cargo: 'Administrador de Métricas Adelante', }, { nombre: 'Adriana Reyes Díaz', empresa: 'Maya Montañez y Valentín Villarreal', cargo: 'Productor de Grupo Gerente', }, { nombre: 'Agustín Aguilera Bernal', empresa: 'Véliz Mendoza S.A.', cargo: 'Oficial de Contabilidad Dinánmico', } ]} columns={[ { name: "nombre", label: "Nombre" }, { name: "empresa", label: "Empresa" }, { name: "cargo", label: "Cargo" }, ]} sort="empresa" direction="desc" width={1000} />

Propiedades

data
columns
sort por defecto nombre
direction por defecto asc
width por defecto 1200
actions

DragAndDrop

Componente con varias columnas donde arrastrar y soltar notas. Proporciona un tablero similar a Kanban.

To Do

Diseñar base de datos

Urgente

Crear componentes

Urgente

In Progress

Configurar enrutador

Normal

Done

Instalar dependencias

Baja

Código de ejemplo

const initColumns = { todo: { titulo: 'To Do', items: [ { id: '1', titulo: 'Diseñar base de datos', badge: 'Urgente', color: 'bg-red-100' }, { id: '2', titulo: 'Crear componentes', badge: 'Urgente', color: 'bg-red-100' } ] }, inProgress: { titulo: 'In Progress', items: [ { id: '3', titulo: 'Configurar enrutador', badge: 'Normal', color: 'bg-amber-100' } ] }, done: { titulo: 'Done', items: [ { id: '4', titulo: 'Instalar dependencias', badge: 'Baja', color: 'bg-lime-100' } ] } } <DragAndDrop cols={initColumns} />

Propiedades

cols por defecto el mostrado en pantalla

Drawer

Abrir Drawer

Código de ejemplo

<Drawer trigger={<p className="text-red-400 dark:text-blue-300 cursor-pointer">Abrir Drawer</p>} position="right" duration={700} area="w-20 md:w-40" > <p>Uno</p> <p>Dos</p> <p>Tres</p> </Drawer>

Propiedades

position por defecto left
duraction por defecto 300
area por defecto w-40 md:w-80

Para mayor flexibilidad se usan clases tailwindcss para definir el área.
De esta manera podemos definir el ancho (w-) y el alto (h-) para diferentes tamaños de pantalla (sm:, md:, ...)

  • Por defecto, para left y right el valor por defecto es w-40 md:w-80.
  • Por defecto, para top y bottom el valor por defecto es h-1/3 sm:h-80.
sábado, 8 de agosto de 2026