beez-ui 0.6.1 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/CHANGELOG.md +134 -82
  2. package/README.md +25 -11
  3. package/dist/components/alert.js +1 -1
  4. package/dist/components/avatar.d.ts +2 -1
  5. package/dist/components/avatar.js +4 -3
  6. package/dist/components/calendar.js +102 -0
  7. package/dist/components/carousel.js +61 -48
  8. package/dist/components/checkbox.js +1 -1
  9. package/dist/components/data-table.js +34 -4
  10. package/dist/components/dropdown-menu.js +5 -2
  11. package/dist/components/filter-query-bar.js +11 -6
  12. package/dist/components/form.d.ts +5 -0
  13. package/dist/components/form.js +11 -9
  14. package/dist/components/input-group.js +1 -1
  15. package/dist/components/input.js +1 -1
  16. package/dist/components/pagination.d.ts +1 -0
  17. package/dist/components/pagination.js +9 -4
  18. package/dist/components/radio-group.js +1 -1
  19. package/dist/components/select.js +1 -1
  20. package/dist/components/sheet.js +12 -9
  21. package/dist/components/sidebar.js +9 -5
  22. package/dist/components/skeleton.d.ts +6 -0
  23. package/dist/components/skeleton.js +7 -1
  24. package/dist/components/switch.js +1 -1
  25. package/dist/components/textarea.js +1 -1
  26. package/dist/components/typing-animation.js +42 -15
  27. package/dist/lib/column-filter-value.d.ts +12 -0
  28. package/dist/lib/column-filter-value.js +52 -0
  29. package/dist/motion/glide-indicator.d.ts +37 -3
  30. package/dist/motion/glide-indicator.js +37 -3
  31. package/dist/motion/motion-slot.js +47 -18
  32. package/dist/motion/surface-keyframes.js +18 -6
  33. package/dist/motion/tokens.d.ts +24 -1
  34. package/dist/motion/tokens.js +23 -0
  35. package/dist/providers/beez-ui-provider.js +49 -17
  36. package/dist/styles.css +1 -1
  37. package/package.json +2 -2
package/CHANGELOG.md CHANGED
@@ -1,82 +1,134 @@
1
- # Cambios
2
-
3
- ## 0.6.1 - 2026-09-26
4
-
5
- - Actualiza pnpm a 12.6.0 y next a 16.3.6
6
- - Add terminal UI for interactive prompts and spinners
7
- - Update release banner and icons for improved visibility
8
- - Remove create-version script
9
- - Update release command to create-version and improve documentation
10
-
11
- ## 0.6.0 - 2026-09-23
12
-
13
- - Actualiza el paquete a la versión 0.6.0.
14
-
15
- ## 0.5.6 - 2026-09-09
16
-
17
- - Actualiza el paquete a la versión 0.5.6.
18
-
19
- ## 0.5.5 - 2026-09-09
20
-
21
- - Actualiza el paquete a la versión 0.5.5.
22
-
23
- ## 0.5.4 - 2026-09-09
24
-
25
- - Actualiza el paquete a la versión 0.5.4.
26
-
27
- ## 0.5.3 - 2026-09-09
28
-
29
- - Actualiza el paquete a la versión 0.5.3.
30
-
31
- ## 0.5.2 - 2026-09-09
32
-
33
- - Actualiza el paquete a la versión 0.5.2.
34
-
35
- ## 0.5.1 - 2026-09-08
36
-
37
- - Actualiza el paquete a la versión 0.5.1.
38
-
39
- ## 0.5.0 - 2026-09-08
40
-
41
- - Actualiza el paquete a la versión 0.5.0.
42
-
43
- ## 0.4.2 - 2026-09-08
44
-
45
- - Actualiza el paquete a la versión 0.4.2.
46
-
47
- ## 0.4.1 - 2026-09-08
48
-
49
- - Actualiza el paquete a la versión 0.4.1.
50
-
51
- ## 0.4.0 - 2026-09-08
52
-
53
- - Distribuye los providers nativo, Next y TanStack con tema compartido, navegación e imágenes adaptadas al framework.
54
- - Incluye CSS precompilado, tema y fuentes; los consumidores sólo importan `beez-ui/styles.css`, sin configurar Tailwind.
55
- - Valida el tarball sin compiladores CSS y las integraciones en Chromium y WebKit.
56
-
57
- ## 0.3.1 - 2026-09-08
58
-
59
- - Publica CSS precompilado para que los estilos funcionen sin Tailwind ni detección de clases en el consumidor.
60
- - Conserva el tema, las fuentes y las utilidades compartidas mediante `beez-ui/styles.css`.
61
- - Verifica estilos computados del tarball servido por HTTP sin procesadores CSS en Chromium y WebKit.
62
-
63
- ## 0.2.0 - 2026-09-08
64
-
65
- - Unifica el nombre `BeezUIProvider` en los entrypoints nativo, Next y TanStack; reemplaza `NextBeezUIProvider`.
66
- - Comparte el tema mediante `next-themes`, `themeOptions` y `useTheme` en todos los providers.
67
- - Restaura `Link` desde la raíz con navegación por adaptadores y prefetch desactivado por defecto.
68
- - Integra Unpic para imágenes nativas y de TanStack, y conserva Next Image en el provider de Next.
69
- - Separa los tipos de tests y valida navegación, imágenes y tema en Chromium y WebKit.
70
-
71
- ## 0.1.1 - 2026-09-08
72
-
73
- - Publica JavaScript ESM y declaraciones TypeScript en `dist`.
74
- - Conserva los componentes agrupados y el tema de LaTribu.
75
- - Mantiene visible el área del avatar durante la carga diferida para permitir que el navegador solicite la imagen.
76
- - Agrega `BeezUIProvider` para adaptadores nativos o propios y `NextBeezUIProvider` como integración opcional.
77
- - Incorpora preparación de releases con checks, control del contenido del paquete y checksum SHA-256.
78
- - Documenta la autenticación con `NPM_TOKEN` y la publicación del artefacto validado.
79
-
80
- ## 0.1.0 - 2026-09-08
81
-
82
- - Centraliza los componentes de LaTribu y agenda-mensual con su tema, fuentes y pruebas.
1
+ # Cambios
2
+
3
+ Todos los cambios relevantes de beez-ui se documentan en este archivo con el formato de [Keep a Changelog](https://keepachangelog.com/es-ES/1.1.0/) y versionado [SemVer](https://semver.org/lang/es/). Cada cambio agrega sus entradas en `[Unreleased]`; `pnpm create-version` las pasa a la versión publicada con su fecha.
4
+
5
+ ## [Unreleased]
6
+
7
+ ### Fixed
8
+
9
+ - `BeezUIProvider` ya no provoca el aviso de React «Encountered a script tag» en apps renderizadas solo en el cliente; con SSR conserva el script que aplica el tema antes de hidratar, sin parpadeo.
10
+
11
+ ## [0.7.0] - 2026-09-26
12
+
13
+ ### Added
14
+
15
+ - `PaginationContent` desliza el resaltado de la página actual hacia la página elegida cuando la lista permanece montada (paginación en el cliente).
16
+ - `Calendar` desliza el mes entrante desde el lado de la navegación (también en RTL) y se mantiene estático con movimiento reducido.
17
+ - `AvatarImage` revela la imagen con un desenfoque y un zoom breves al terminar de cargar, en lugar de aparecer de golpe sobre el fallback.
18
+ - Las sugerencias de `FilterQueryBar` deslizan el resaltado entre opciones con teclado, como los menús y `Select`.
19
+ - `AvatarGroup` eleva levemente el avatar bajo el puntero en dispositivos con hover real.
20
+ - El chevron de `DropdownMenuSubTrigger` se desplaza hacia el submenú abierto.
21
+
22
+ ### Changed
23
+
24
+ - `Skeleton` muestra un brillo que recorre el placeholder en lugar del pulso de opacidad; con movimiento reducido queda como un bloque liso.
25
+ - `Sheet` se cierra con una curva de cajón breve en lugar de un spring, y su botón de cierre aparece con un pop demorado como el de `Dialog`.
26
+ - `Alert` entra con un leve desplazamiento y desenfoque.
27
+ - Los anillos de foco y bordes de `Input`, `Textarea`, `InputGroup`, `SelectTrigger`, `Checkbox` y `RadioGroupItem` aparecen con una transición en lugar de saltar.
28
+ - En menús, `Select` y sugerencias, el resaltado sigue al puntero al instante y solo se desliza al navegar con teclado, con un spring más rápido.
29
+ - El sidebar colapsa y expande con una curva de cajón de 300 ms en lugar de una transición lineal.
30
+ - El thumb de `Switch` tiene una sombra sutil que lo separa del track.
31
+
32
+ ### Fixed
33
+
34
+ - El cursor de `TypingAnimation` vuelve a parpadear: queda fijo mientras escribe o borra, parpadea en reposo y los lectores de pantalla lo ignoran.
35
+ - `Carousel` vertical responde a las flechas arriba y abajo; antes solo reaccionaba a izquierda y derecha.
36
+ - `SidebarMenuButton` con `variant="outline"` vuelve a pintar su borde con los tokens `oklch` del tema.
37
+ - `FormLabel`, `FormControl`, `FormDescription` y `FormMessage` fuera de un `FormField` lanzan un error claro en lugar de fallar en silencio.
38
+ - Los bordes sin color explícito (footers de `Card`, `Dialog` y `AlertDialog`, `Alert`, filas de `Table`, bordes de `Sheet` y del sidebar) usan el token `--border` del tema en lugar del color del texto cuando se consume `beez-ui/styles.css` sin Tailwind.
39
+ - `DropdownMenu`, sus submenús, `Popover`, `HoverCard` y `Select` muestran su borde y su sombra desde el primer frame al abrirse; antes el revelado los recortaba durante ~650 ms.
40
+ - `DataTable` filtra las columnas apuntadas por `queryFilterConfig` que no declaran `filterFn` (rangos numéricos, enums y año-mes); antes un rango sobre una columna numérica lanzaba `TypeError: val is not iterable` y un enum ocultaba todas las filas. Un `filterFn` propio de la columna sigue teniendo prioridad.
41
+ - Las `Card` interactivas conservan su contorno mientras muestran la sombra de hover; antes la sombra reemplazaba el anillo del borde.
42
+
43
+ ## [0.6.2] - 2026-09-26
44
+
45
+ ### Changed
46
+
47
+ - El comando de release (`pnpm create-version`, alias `pnpm cv`) toma las notas del bloque `[Unreleased]` del CHANGELOG, les asigna la versión y la fecha, y pide a Codex que lo complete cuando está vacío.
48
+ - Las cajas del comando de release ajustan el texto largo en varias líneas en lugar de cortarlo.
49
+ - Un release interrumpido reusa automáticamente el artefacto ya preparado cuando es posterior al último cambio de código.
50
+
51
+ ### Removed
52
+
53
+ - La opción `--notes` y las preguntas sobre las notas del CHANGELOG y sobre reusar el artefacto preparado.
54
+
55
+ ## 0.6.1 - 2026-09-26
56
+
57
+ - Actualiza pnpm a 12.6.0 y next a 16.3.6
58
+ - Add terminal UI for interactive prompts and spinners
59
+ - Update release banner and icons for improved visibility
60
+ - Remove create-version script
61
+ - Update release command to create-version and improve documentation
62
+
63
+ ## 0.6.0 - 2026-09-23
64
+
65
+ - Actualiza el paquete a la versión 0.6.0.
66
+
67
+ ## 0.5.6 - 2026-09-09
68
+
69
+ - Actualiza el paquete a la versión 0.5.6.
70
+
71
+ ## 0.5.5 - 2026-09-09
72
+
73
+ - Actualiza el paquete a la versión 0.5.5.
74
+
75
+ ## 0.5.4 - 2026-09-09
76
+
77
+ - Actualiza el paquete a la versión 0.5.4.
78
+
79
+ ## 0.5.3 - 2026-09-09
80
+
81
+ - Actualiza el paquete a la versión 0.5.3.
82
+
83
+ ## 0.5.2 - 2026-09-09
84
+
85
+ - Actualiza el paquete a la versión 0.5.2.
86
+
87
+ ## 0.5.1 - 2026-09-08
88
+
89
+ - Actualiza el paquete a la versión 0.5.1.
90
+
91
+ ## 0.5.0 - 2026-09-08
92
+
93
+ - Actualiza el paquete a la versión 0.5.0.
94
+
95
+ ## 0.4.2 - 2026-09-08
96
+
97
+ - Actualiza el paquete a la versión 0.4.2.
98
+
99
+ ## 0.4.1 - 2026-09-08
100
+
101
+ - Actualiza el paquete a la versión 0.4.1.
102
+
103
+ ## 0.4.0 - 2026-09-08
104
+
105
+ - Distribuye los providers nativo, Next y TanStack con tema compartido, navegación e imágenes adaptadas al framework.
106
+ - Incluye CSS precompilado, tema y fuentes; los consumidores sólo importan `beez-ui/styles.css`, sin configurar Tailwind.
107
+ - Valida el tarball sin compiladores CSS y las integraciones en Chromium y WebKit.
108
+
109
+ ## 0.3.1 - 2026-09-08
110
+
111
+ - Publica CSS precompilado para que los estilos funcionen sin Tailwind ni detección de clases en el consumidor.
112
+ - Conserva el tema, las fuentes y las utilidades compartidas mediante `beez-ui/styles.css`.
113
+ - Verifica estilos computados del tarball servido por HTTP sin procesadores CSS en Chromium y WebKit.
114
+
115
+ ## 0.2.0 - 2026-09-08
116
+
117
+ - Unifica el nombre `BeezUIProvider` en los entrypoints nativo, Next y TanStack; reemplaza `NextBeezUIProvider`.
118
+ - Comparte el tema mediante `next-themes`, `themeOptions` y `useTheme` en todos los providers.
119
+ - Restaura `Link` desde la raíz con navegación por adaptadores y prefetch desactivado por defecto.
120
+ - Integra Unpic para imágenes nativas y de TanStack, y conserva Next Image en el provider de Next.
121
+ - Separa los tipos de tests y valida navegación, imágenes y tema en Chromium y WebKit.
122
+
123
+ ## 0.1.1 - 2026-09-08
124
+
125
+ - Publica JavaScript ESM y declaraciones TypeScript en `dist`.
126
+ - Conserva los componentes agrupados y el tema de LaTribu.
127
+ - Mantiene visible el área del avatar durante la carga diferida para permitir que el navegador solicite la imagen.
128
+ - Agrega `BeezUIProvider` para adaptadores nativos o propios y `NextBeezUIProvider` como integración opcional.
129
+ - Incorpora preparación de releases con checks, control del contenido del paquete y checksum SHA-256.
130
+ - Documenta la autenticación con `NPM_TOKEN` y la publicación del artefacto validado.
131
+
132
+ ## 0.1.0 - 2026-09-08
133
+
134
+ - Centraliza los componentes de LaTribu y agenda-mensual con su tema, fuentes y pruebas.
package/README.md CHANGED
@@ -77,10 +77,15 @@ siguen los tokens de [beui motion](https://beui.dev/components/motion):
77
77
  - `Tooltip` entra con blur, escala y desplazamiento desde el trigger.
78
78
  `Popover`, `HoverCard`, `DropdownMenu` y `Select` escalan desde 0.96 y se revelan
79
79
  con un clip desde la esquina más cercana al trigger.
80
- - `Dialog` y `AlertDialog` suben con spring; `Sheet` entra desde su borde con spring.
80
+ - `Dialog` y `AlertDialog` suben con spring; `Sheet` entra desde su borde con spring
81
+ y sale con la curva de cajón (0.24 s), sin demorar la siguiente interacción.
81
82
  - `GlideSlot` desliza el indicador activo entre ítems como un `layoutId` compartido:
82
- la pestaña activa de `Tabs` (fondo o subrayado), el ítem activo de `SidebarMenu` y
83
- el ítem resaltado de `DropdownMenu` y `Select`, también con teclado. Una copia
83
+ la pestaña activa de `Tabs` (fondo o subrayado), el ítem activo de `SidebarMenu`, la
84
+ página actual de `PaginationContent`, y al navegar con teclado el ítem resaltado de
85
+ `DropdownMenu` y `Select` y la sugerencia activa de `FilterQueryBar`. Con el puntero,
86
+ esos resaltados lo siguen al instante: el propio puntero ya marca la posición.
87
+ - Las superficies flotantes se revelan con un clip que deja 24 px libres fuera de la
88
+ caja, así su borde (`ring`) y su sombra se ven desde el primer frame. Una copia
84
89
  transitoria viaja entre ítems y se elimina al llegar, devolviendo el estilo al ítem.
85
90
  - El chevron de `SelectTrigger` gira 180° al abrir y los chevrons de `DataTable`
86
91
  (grupos y columnas) giran en lugar de cambiar de ícono; CSS define el ángulo final.
@@ -88,8 +93,14 @@ siguen los tokens de [beui motion](https://beui.dev/components/motion):
88
93
  solo se desvanece) y los checks de ítems de `Select` y `DropdownMenu` aparecen con pop.
89
94
  - El ícono de `AnimatedThemeToggler` cambia con blur y escala; el botón de cierre de
90
95
  `Dialog` aparece con un pop demorado.
91
- - El contenido de `Tabs` entra con un desplazamiento de 4 px. Cards y enlaces
92
- responden al hover. El skeleton pulsa con Motion. Las animaciones especializadas
96
+ - El contenido de `Tabs` entra con un desplazamiento de 4 px y `Alert` entra con blur.
97
+ Cards y enlaces responden al hover; el avatar bajo el puntero de un `AvatarGroup` se
98
+ eleva. Un brillo recorre el `Skeleton` desde su `::after` con reproducción nativa,
99
+ sin trabajo por frame en JavaScript.
100
+ - `Calendar` desliza el mes entrante desde el lado de la navegación (invertido en RTL).
101
+ - `AvatarImage` se revela con blur y un zoom de 1.06 al terminar de cargar; las imágenes
102
+ ya cargadas al montar no se animan.
103
+ - El cursor de `TypingAnimation` queda fijo mientras escribe y parpadea en reposo. Las animaciones especializadas
93
104
  existentes de Embla, Sonner y rough-notation se conservan.
94
105
 
95
106
  El contenido que está saliendo deja de ser interactivo y accesible de inmediato.
@@ -209,24 +220,27 @@ Desde el repositorio de beez-ui, configurar `NPM_TOKEN` con permiso de publicaci
209
220
  pnpm create-version # diagnóstico, plan y release interactivo
210
221
  pnpm create-version --bump minor # patch | minor | major sin preguntar
211
222
  pnpm create-version --set-version 0.7.0 # versión exacta
212
- pnpm create-version --notes "Agrega glide" # notas del CHANGELOG; se puede repetir
213
223
  pnpm create-version --dry-run # solo muestra el diagnóstico y el plan
214
224
  pnpm cv # alias de pnpm create-version
215
225
  ```
216
226
 
217
227
  El comando hace `git fetch`, consulta npm y muestra un panel con la rama, el upstream, el working tree, `main` frente a origin, la versión local, la última versión publicada, los commits posteriores al último cambio de versión y el artefacto ya preparado. Después decide qué falta:
218
228
 
219
- - **Release nuevo**: si hay commits sin publicar, sugiere `patch`, `minor` o `major` según los commits (breaking change, funcionalidades o solo arreglos) y pregunta con las flechas; las notas del CHANGELOG pueden salir de los commits (sin prefijos convencionales), escribirse en el momento o ser la nota básica. Tras confirmar ejecuta el flujo validado completo (ver abajo).
220
- - **Release a medio terminar**: si `package.json` tiene una versión que npm todavía no tiene, completa solo lo que falta: prepara el artefacto (u ofrece reusar el ya preparado, que `release:publish` vuelve a verificar), si `package.json` y `CHANGELOG.md` quedaron sin commitear los commitea primero, después prepara, pushea el commit de release si todavía no está en origin y publica pidiendo confirmación. Nunca vuelve a subir la versión.
229
+ - **Release nuevo**: si hay commits sin publicar, sugiere `patch`, `minor` o `major` según los commits (breaking change, funcionalidades o solo arreglos) y pregunta con las flechas. Las notas salen del bloque `## [Unreleased]` de `CHANGELOG.md` (ver la sección CHANGELOG más abajo); si está vacío, invoca a Codex (`codex exec`) para completarlo desde los commits sin publicar y muestra el resultado, y si Codex no está o no escribe nada válido, el release se corta. Tras confirmar ejecuta el flujo validado completo (ver abajo).
230
+ - **Release a medio terminar**: si `package.json` tiene una versión que npm todavía no tiene, completa solo lo que falta: si `package.json` y `CHANGELOG.md` quedaron sin commitear los commitea primero; después prepara el artefacto (reusa automáticamente el ya preparado cuando es posterior al último cambio de código, y `release:publish` lo vuelve a verificar), pushea el commit de release si todavía no está en origin y publica (la confirmación del inicio cubre la publicación). Nunca vuelve a subir la versión.
221
231
  - **Todo al día**: si la versión está publicada y no hay commits nuevos, no hace nada.
222
232
 
223
- `--set-version` sólo acepta el siguiente patch, minor o major de la versión actual (desde `0.6.0`: `0.6.1`, `0.7.0` o `1.0.0`); rechaza versiones menores, iguales, prerelease o que salteen versiones. Los releases salen sólo desde `main` con upstream configurado. Se detiene y explica qué hacer ante otra rama, `HEAD` desacoplado, cambios sin commitear (salvo `package.json` y `CHANGELOG.md` de un release a medio terminar), `main` divergida o npm sin respuesta; un bloqueo termina con código 0 porque ya está explicado en pantalla, y un paso fallido termina con código 1. Si `main` está atrás, la actualiza con fast-forward antes de versionar. Si algo falla, basta con volver a ejecutar `pnpm create-version`: retoma desde el primer paso pendiente. Sin terminal interactiva cada pregunta toma su opción por defecto.
233
+ `--set-version` sólo acepta el siguiente patch, minor o major de la versión actual (desde `0.6.0`: `0.6.1`, `0.7.0` o `1.0.0`); rechaza versiones menores, iguales, prerelease o que salteen versiones. Los releases salen sólo desde `main` con upstream configurado. Se detiene y explica qué hacer ante otra rama, `HEAD` desacoplado, cambios sin commitear (salvo `CHANGELOG.md` en un release nuevo, que viaja en el commit de release, o `package.json` y `CHANGELOG.md` de un release a medio terminar), secciones de `[Unreleased]` fuera de las de Keep a Changelog, `main` divergida o npm sin respuesta; un bloqueo termina con código 0 porque ya está explicado en pantalla, y un paso fallido termina con código 1. Si `main` está atrás, la actualiza con fast-forward antes de versionar. Si algo falla, basta con volver a ejecutar `pnpm create-version`: retoma desde el primer paso pendiente. Las opciones de cada pregunta están numeradas: se eligen apretando su número, o con las flechas y Enter; cada versión muestra debajo qué significa patch, minor o major. Sin terminal interactiva cada pregunta toma su opción por defecto. El tiempo total que muestra al final no cuenta el tiempo que espera tus respuestas.
224
234
 
225
- La lógica pura vive en `scripts/release-plan.js`, la lectura de Git y npm en `scripts/release-state.js`, la UI de terminal (cajas, colores, íconos Nerd Font, spinner y selector) en `scripts/terminal-ui.js` y el orquestador en `scripts/release.js`, sin dependencias nuevas. Los íconos requieren una Nerd Font en la terminal.
235
+ La lógica pura vive en `scripts/release-plan.js` y `scripts/changelog.js` (lectura y release de `[Unreleased]`), la invocación de Codex en `scripts/changelog-ai.js`, la lectura de Git y npm en `scripts/release-state.js`, la UI de terminal (cajas, colores, íconos Nerd Font, spinner y selector) en `scripts/terminal-ui.js` y el orquestador en `scripts/release.js`, sin dependencias nuevas. Los íconos requieren una Nerd Font en la terminal.
236
+
237
+ ### CHANGELOG
238
+
239
+ `CHANGELOG.md` sigue [Keep a Changelog](https://keepachangelog.com/es-ES/1.1.0/). Cada cambio agrega sus entradas en el bloque `## [Unreleased]`, agrupadas en `### Added`, `### Changed`, `### Deprecated`, `### Removed`, `### Fixed` y `### Security` (solo las que apliquen). Nunca se escriben la versión ni la fecha a mano: `pnpm create-version` las agrega al publicar. Las versiones anteriores a este formato (`## 0.6.1 - 2026-09-26`) siguen siendo válidas. La regla completa está en `AGENTS.md`.
226
240
 
227
241
  ### Flujo validado de un release nuevo
228
242
 
229
- 1. Actualiza `package.json` y agrega la entrada del changelog con fecha UTC, conservando el historial (`scripts/release-version.js`).
243
+ 1. Actualiza `package.json` y renombra `## [Unreleased]` a `## [X.Y.Z] - AAAA-MM-DD` (fecha UTC), dejando un `[Unreleased]` vacío arriba y conservando el historial (`scripts/release-version.js`). Si `[Unreleased]` no tiene cambios o usa secciones no válidas, no toca nada.
230
244
  2. Commitea en el momento `package.json` y `CHANGELOG.md` (sólo esos dos archivos, conservando otros archivos staged), antes de las validaciones largas: si algo se corta después, queda un commit local y nunca metadata suelta.
231
245
  3. Prepara la release: instalación congelada, tests sin React Compiler, build optimizado de JavaScript, tipos y CSS, lint, typechecks, tests unitarios y pruebas de navegador.
232
246
  4. Genera el tarball en `releases/<version>-<sha256>/beez-ui-<version>.tgz` y valida su contenido, exports e integridad.
@@ -40,7 +40,7 @@ function Alert(t0) {
40
40
  let t2;
41
41
  if ($[7] !== props || $[8] !== t1) {
42
42
  t2 = /* @__PURE__ */ _jsx(MotionSlot, {
43
- kind: "fade",
43
+ kind: "message",
44
44
  children: /* @__PURE__ */ _jsx("div", {
45
45
  "data-slot": "alert",
46
46
  role: "alert",
@@ -7,10 +7,11 @@ export type AvatarImageProps = Omit<React.ComponentProps<"img">, "src"> & {
7
7
  declare function Avatar({ className, size, ...props }: AvatarPrimitive.Root.Props & {
8
8
  size?: "default" | "sm" | "lg";
9
9
  }): React.JSX.Element;
10
- /** Delegates loading, failure and fallback synchronization to the avatar primitive. */
10
+ /** Delegates loading, failure and fallback synchronization to the avatar primitive; loaded images develop in place. */
11
11
  declare function AvatarImage({ alt, className, src, ...props }: AvatarImageProps): React.JSX.Element;
12
12
  declare function AvatarFallback({ className, ...props }: AvatarPrimitive.Fallback.Props): React.JSX.Element;
13
13
  declare function AvatarBadge({ className, ...props }: React.ComponentProps<"span">): React.JSX.Element;
14
+ /** Overlaps avatars; the hovered one lifts slightly above its neighbours. */
14
15
  declare function AvatarGroup({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
15
16
  declare function AvatarGroupCount({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
16
17
  export { Avatar, AvatarImage, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarBadge, };
@@ -51,7 +51,7 @@ function Avatar(t0) {
51
51
  }
52
52
  return t3;
53
53
  }
54
- /** Delegates loading, failure and fallback synchronization to the avatar primitive. */
54
+ /** Delegates loading, failure and fallback synchronization to the avatar primitive; loaded images develop in place. */
55
55
  function AvatarImage(t0) {
56
56
  const $ = _c(15);
57
57
  let className;
@@ -94,7 +94,7 @@ function AvatarImage(t0) {
94
94
  let t6;
95
95
  if ($[9] !== alt || $[10] !== props || $[11] !== t3 || $[12] !== t4 || $[13] !== t5) {
96
96
  t6 = /* @__PURE__ */ _jsx(MotionSlot, {
97
- kind: "field",
97
+ kind: "reveal",
98
98
  children: /* @__PURE__ */ _jsx(AvatarPrimitive.Image, {
99
99
  render: t3,
100
100
  keepMounted: true,
@@ -190,6 +190,7 @@ function AvatarBadge(t0) {
190
190
  }
191
191
  return t2;
192
192
  }
193
+ /** Overlaps avatars; the hovered one lifts slightly above its neighbours. */
193
194
  function AvatarGroup(t0) {
194
195
  const $ = _c(8);
195
196
  let className;
@@ -205,7 +206,7 @@ function AvatarGroup(t0) {
205
206
  }
206
207
  let t1;
207
208
  if ($[3] !== className) {
208
- t1 = cn("group/avatar-group flex -space-x-2 *:data-[slot=avatar]:ring-2 *:data-[slot=avatar]:ring-background", className);
209
+ t1 = cn("group/avatar-group flex -space-x-2 *:data-[slot=avatar]:ring-2 *:data-[slot=avatar]:ring-background *:data-[slot=avatar]:transition-[translate] *:data-[slot=avatar]:duration-200 *:data-[slot=avatar]:ease-out *:data-[slot=avatar]:hover:z-10 *:data-[slot=avatar]:hover:-translate-y-0.5", className);
209
210
  $[3] = className;
210
211
  $[4] = t1;
211
212
  } else {
@@ -3,6 +3,9 @@ import { c as _c } from "react/compiler-runtime";
3
3
  import * as React from "react";
4
4
  import { es } from "react-day-picker/locale";
5
5
  import { DayPicker, getDefaultClassNames } from "react-day-picker";
6
+ import { animate, frame } from "motion/react";
7
+ import { usePrefersReducedMotion } from "../hooks/use-prefers-reduced-motion.js";
8
+ import { MOTION_EASE, MOTION_MONTH_DISTANCE, MOTION_TIMING } from "../motion/tokens.js";
6
9
  import { cn } from "../lib/utils.js";
7
10
  import { Button, buttonVariants } from "./button.js";
8
11
  import { ChevronLeft, ChevronRight, ChevronDown } from "lucide-react";
@@ -173,6 +176,7 @@ function Calendar(t0) {
173
176
  Root: _temp,
174
177
  Chevron: _temp2,
175
178
  DayButton: t34,
179
+ Month: CalendarMonth,
176
180
  WeekNumber: _temp3,
177
181
  ...components
178
182
  };
@@ -247,6 +251,104 @@ function _temp(t0) {
247
251
  ...props_0
248
252
  });
249
253
  }
254
+ /**
255
+ * Renders one displayed month and slides it in from the side the user navigated from.
256
+ * DayPicker keys months by display position, so this instance survives navigation and can
257
+ * compare the new month with the previous one. The first render and reduced motion stay static.
258
+ * @param props - DayPicker month properties, including the month being displayed.
259
+ * @returns The month container with its caption and grid.
260
+ */
261
+ function CalendarMonth(t0) {
262
+ const $ = _c(13);
263
+ let calendarMonth;
264
+ let children;
265
+ let displayIndex;
266
+ let props;
267
+ if ($[0] !== t0) {
268
+ ({calendarMonth, displayIndex, children, ...props} = t0);
269
+ $[0] = t0;
270
+ $[1] = calendarMonth;
271
+ $[2] = children;
272
+ $[3] = displayIndex;
273
+ $[4] = props;
274
+ } else {
275
+ calendarMonth = $[1];
276
+ children = $[2];
277
+ displayIndex = $[3];
278
+ props = $[4];
279
+ }
280
+ const monthRef = React.useRef(null);
281
+ const monthTime = calendarMonth.date.getTime();
282
+ const previousMonthTimeRef = React.useRef(monthTime);
283
+ const reduceMotion = usePrefersReducedMotion();
284
+ let t1;
285
+ let t2;
286
+ if ($[5] !== monthTime || $[6] !== reduceMotion) {
287
+ t1 = () => {
288
+ const previousMonthTime = previousMonthTimeRef.current;
289
+ previousMonthTimeRef.current = monthTime;
290
+ const element = monthRef.current;
291
+ if (!element || reduceMotion || previousMonthTime === monthTime) {
292
+ return;
293
+ }
294
+ const isForward = monthTime > previousMonthTime;
295
+ const isRightToLeft = getComputedStyle(element).direction === "rtl";
296
+ const direction = isForward !== isRightToLeft ? 1 : -1;
297
+ const original = {
298
+ opacity: element.style.opacity,
299
+ transform: element.style.transform
300
+ };
301
+ const restore = () => {
302
+ element.style.opacity = original.opacity;
303
+ element.style.transform = original.transform;
304
+ };
305
+ const animation = animate(element, {
306
+ opacity: [0, 1],
307
+ transform: [`translateX(${direction * MOTION_MONTH_DISTANCE}px)`, "translateX(0px)"]
308
+ }, {
309
+ duration: MOTION_TIMING.monthSwap,
310
+ ease: [...MOTION_EASE]
311
+ });
312
+ let isActive = true;
313
+ animation.then(() => frame.postRender(() => {
314
+ if (isActive) {
315
+ restore();
316
+ }
317
+ }));
318
+ return () => {
319
+ isActive = false;
320
+ animation.cancel();
321
+ restore();
322
+ };
323
+ };
324
+ t2 = [monthTime, reduceMotion];
325
+ $[5] = monthTime;
326
+ $[6] = reduceMotion;
327
+ $[7] = t1;
328
+ $[8] = t2;
329
+ } else {
330
+ t1 = $[7];
331
+ t2 = $[8];
332
+ }
333
+ React.useLayoutEffect(t1, t2);
334
+ let t3;
335
+ if ($[9] !== children || $[10] !== displayIndex || $[11] !== props) {
336
+ t3 = /* @__PURE__ */ _jsx("div", {
337
+ ref: monthRef,
338
+ "data-slot": "calendar-month",
339
+ "data-display-index": displayIndex,
340
+ ...props,
341
+ children
342
+ });
343
+ $[9] = children;
344
+ $[10] = displayIndex;
345
+ $[11] = props;
346
+ $[12] = t3;
347
+ } else {
348
+ t3 = $[12];
349
+ }
350
+ return t3;
351
+ }
250
352
  function CalendarDayButton(t0) {
251
353
  const $ = _c(21);
252
354
  let className;