Cajas animadas
Actualizado 2026-10-11
Cada caja de Ghosty es un robot con cabeza de tele: su cara dice qué hace (dormida, escuchando, trabajando, con error), sigue al mouse y brinca si le das clic. Es el mismo que ves en Cajas del espacio, y lo publicamos como paquete libre (MIT) para que lo uses en tus propias páginas y apps: @ghostystudio/boxes.
Instalación
Funciona en HTML pelón y en cualquier framework: es un custom element. En React hay dos componentes: <RobotHead> (una caja) y <GhostyBoxes> (el resumen). Ya traen "use client", así que en Next.js (App Router) se usan tal cual dentro de un Server Component. Cada ejemplo de abajo tiene su pestaña React.
Estados
Lo que la caja está haciendo. Cada estado tiene su cara, su movimiento y su luz.
Formas
De temporada también hay tree (navidad) y pumpkin (halloween).
Pantalla
face elige qué enseña: los ojos, una terminal o nada. Con la terminal, screen-icon pone un ícono: mail, inbox, build, ci, preview, desktop o web (y puedes registrar los tuyos con registerScreenIcon).
Colores, temas y acabados
Un tema pinta la caja con una palabra; lo que pongas a mano le gana. color es la carcasa, trim-color las orejas y screen-color los LEDs. texture cambia el acabado y wear (0–1) le pone desgaste.
Tu propio tema: registerTheme('mimarca', { color: '#…', trimColor: '#…', screenColor: '#…' }) y luego theme="mimarca".
Resumen que se reordena arrastrando
<ghosty-boxes> es la fila de resumen: título, contador, una caja por elemento con su nombre, estado y puntitos, y lugares libres apagados. Agarra una caja: se levanta, se columpia y sonríe; al soltarla cae con un brinco. También con el teclado: Alt + ← / →.
Los datos también entran por código, y el orden nuevo sale en un evento:
Cada elemento lleva id, name, y opcionales label, tone (work, talk, error, sleep, calm), dots ({ on, cap }), off (lugar libre, fijo), group (sólo se reordena dentro de su grupo) y head (las props de su caja). Los colores de la tarjeta salen de variables CSS sobre .gbx: --gbx-bg, --gbx-border, --gbx-fg, --gbx-muted, --gbx-work, --gbx-talk, --gbx-error, --gbx-dot, --gbx-radius.
Atributos de <ghosty-box>
En React son las mismas props en camelCase (trimColor, screenIcon, floorShadow) y los números y banderas van entre llaves (size={96}, antenna={false}). Respeta prefers-reduced-motion. Los cambios de atributo se ven al instante.
El robot es de Fayaz Ahmed (MIT), con estados, formas, pantallas, temas y acabados añadidos por Ghosty.