beez-ui 0.8.0 → 0.8.1

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 (3) hide show
  1. package/CHANGELOG.md +154 -146
  2. package/README.md +15 -25
  3. package/package.json +24 -23
package/CHANGELOG.md CHANGED
@@ -1,152 +1,160 @@
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
-
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
5
  ## [Unreleased]
6
6
 
7
+ ## [0.8.1] - 2026-09-27
8
+
9
+ ### Changed
10
+
11
+ - Cada versión publicada queda en un commit `X.Y.Z` con el tag `vX.Y.Z` en GitHub (antes era un commit `chore(release): prepara la versión X.Y.Z` sin tag), para ubicar el código exacto de cada versión.
12
+ - La publicación en npm la hace el comando compartido de beez-rp, que vuelve a verificar el SHA-256 y el contenido del tarball antes de subirlo; se retira `pnpm release:publish`.
13
+ - Publicar con `pnpm publish` queda bloqueado por `beez-rp guard-publish`: cada versión sale sólo desde `pnpm create-version`, que publica con npm el tarball verificado.
14
+
7
15
  ## [0.8.0] - 2026-09-26
8
16
 
9
- ### Added
10
-
11
- - Los tokens de movimiento (`MOTION_TIMING`, `MOTION_EASE`, springs y distancias) se exportan desde la raíz y desde `beez-ui/motion-tokens`, con los nuevos `SPRING_POP`, `MOTION_ITEM_ENTER_SCALE` y las duraciones `pop` y `collapse`, para animar superficies propias igual que la biblioteca.
12
- - Primitivas de movimiento `PresenceSwap`, `AnimatedCount`, `AnimatedCollapse` y `AnimatedListItem`, que respetan el movimiento reducido.
13
- - `BouncingDotsLoader`, `ProgressRing`, `EmptyState`, `ErrorState`, `InfoPopover`, `ConfirmDeleteButton` y `ReactionButton`.
14
- - `AccountMenu`: menú de cuenta con avatar, identidad, inicio de sesión como link o callback, cierre de sesión y variante para sidebar.
15
- - `RichTextContent`, `RichMarkdownContent`, `RichLinkEditor` y `useRichLinkEditor` para mostrar y editar texto con links en markdown sin interpretar HTML, junto con `parseRichTextSegments` y `parseRichMarkdownBlocks`.
16
- - `OpenInBrowserCta` y `ExternalBrowserHandoff` para salir de navegadores internos de otras apps, con `detectInAppBrowser` y `buildExternalBrowserUrl`.
17
- - `PwaUpdateControl`, que ofrece aplicar una actualización pendiente del service worker.
18
- - `NotificationBell` y `NotificationPanel`: bandeja de notificaciones en popover o en sheet según el viewport, a partir de ítems ya resueltos por la app.
19
- - `MonthGrid` y `MonthCalendarHeader` para calendarios mensuales, con `createMonthGridDays`, `groupItemsByDateKey`, `shiftMonthKey` y `useMonthTransitionDirection`.
20
- - `FileUpload`, `FileUploadDropZone`, `FileUploadList` y `FileUploadItem`, con validación por tipo y tamaño (`classifyFiles`, `isFileTypeAccepted`).
21
- - `EmojiPicker` en el entrypoint opcional `beez-ui/emoji-picker`; requiere instalar `emoji-picker-react`.
22
- - Hooks `useIsHydrated`, `useMinuteClock`, `useViewerTimeZone`, `useHorizontalSwipe` y `usePrefersReducedMotion`.
23
- - Utilidades `formatFileSize`, `copyTextToClipboard`, `getNameInitials`, búsqueda difusa (`getFuzzyMatchRank`, `renderHighlightedText`) y helpers de URL (`replaceCurrentUrlSearchParams`).
24
-
25
- ### Fixed
26
-
17
+ ### Added
18
+
19
+ - Los tokens de movimiento (`MOTION_TIMING`, `MOTION_EASE`, springs y distancias) se exportan desde la raíz y desde `beez-ui/motion-tokens`, con los nuevos `SPRING_POP`, `MOTION_ITEM_ENTER_SCALE` y las duraciones `pop` y `collapse`, para animar superficies propias igual que la biblioteca.
20
+ - Primitivas de movimiento `PresenceSwap`, `AnimatedCount`, `AnimatedCollapse` y `AnimatedListItem`, que respetan el movimiento reducido.
21
+ - `BouncingDotsLoader`, `ProgressRing`, `EmptyState`, `ErrorState`, `InfoPopover`, `ConfirmDeleteButton` y `ReactionButton`.
22
+ - `AccountMenu`: menú de cuenta con avatar, identidad, inicio de sesión como link o callback, cierre de sesión y variante para sidebar.
23
+ - `RichTextContent`, `RichMarkdownContent`, `RichLinkEditor` y `useRichLinkEditor` para mostrar y editar texto con links en markdown sin interpretar HTML, junto con `parseRichTextSegments` y `parseRichMarkdownBlocks`.
24
+ - `OpenInBrowserCta` y `ExternalBrowserHandoff` para salir de navegadores internos de otras apps, con `detectInAppBrowser` y `buildExternalBrowserUrl`.
25
+ - `PwaUpdateControl`, que ofrece aplicar una actualización pendiente del service worker.
26
+ - `NotificationBell` y `NotificationPanel`: bandeja de notificaciones en popover o en sheet según el viewport, a partir de ítems ya resueltos por la app.
27
+ - `MonthGrid` y `MonthCalendarHeader` para calendarios mensuales, con `createMonthGridDays`, `groupItemsByDateKey`, `shiftMonthKey` y `useMonthTransitionDirection`.
28
+ - `FileUpload`, `FileUploadDropZone`, `FileUploadList` y `FileUploadItem`, con validación por tipo y tamaño (`classifyFiles`, `isFileTypeAccepted`).
29
+ - `EmojiPicker` en el entrypoint opcional `beez-ui/emoji-picker`; requiere instalar `emoji-picker-react`.
30
+ - Hooks `useIsHydrated`, `useMinuteClock`, `useViewerTimeZone`, `useHorizontalSwipe` y `usePrefersReducedMotion`.
31
+ - Utilidades `formatFileSize`, `copyTextToClipboard`, `getNameInitials`, búsqueda difusa (`getFuzzyMatchRank`, `renderHighlightedText`) y helpers de URL (`replaceCurrentUrlSearchParams`).
32
+
33
+ ### Fixed
34
+
27
35
  - `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.
28
36
 
29
- ## [0.7.0] - 2026-09-26
30
-
31
- ### Added
32
-
33
- - `PaginationContent` desliza el resaltado de la página actual hacia la página elegida cuando la lista permanece montada (paginación en el cliente).
34
- - `Calendar` desliza el mes entrante desde el lado de la navegación (también en RTL) y se mantiene estático con movimiento reducido.
35
- - `AvatarImage` revela la imagen con un desenfoque y un zoom breves al terminar de cargar, en lugar de aparecer de golpe sobre el fallback.
36
- - Las sugerencias de `FilterQueryBar` deslizan el resaltado entre opciones con teclado, como los menús y `Select`.
37
- - `AvatarGroup` eleva levemente el avatar bajo el puntero en dispositivos con hover real.
38
- - El chevron de `DropdownMenuSubTrigger` se desplaza hacia el submenú abierto.
39
-
40
- ### Changed
41
-
42
- - `Skeleton` muestra un brillo que recorre el placeholder en lugar del pulso de opacidad; con movimiento reducido queda como un bloque liso.
43
- - `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`.
44
- - `Alert` entra con un leve desplazamiento y desenfoque.
45
- - Los anillos de foco y bordes de `Input`, `Textarea`, `InputGroup`, `SelectTrigger`, `Checkbox` y `RadioGroupItem` aparecen con una transición en lugar de saltar.
46
- - 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.
47
- - El sidebar colapsa y expande con una curva de cajón de 300 ms en lugar de una transición lineal.
48
- - El thumb de `Switch` tiene una sombra sutil que lo separa del track.
49
-
50
- ### Fixed
51
-
52
- - El cursor de `TypingAnimation` vuelve a parpadear: queda fijo mientras escribe o borra, parpadea en reposo y los lectores de pantalla lo ignoran.
53
- - `Carousel` vertical responde a las flechas arriba y abajo; antes solo reaccionaba a izquierda y derecha.
54
- - `SidebarMenuButton` con `variant="outline"` vuelve a pintar su borde con los tokens `oklch` del tema.
55
- - `FormLabel`, `FormControl`, `FormDescription` y `FormMessage` fuera de un `FormField` lanzan un error claro en lugar de fallar en silencio.
56
- - 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.
57
- - `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.
58
- - `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.
59
- - Las `Card` interactivas conservan su contorno mientras muestran la sombra de hover; antes la sombra reemplazaba el anillo del borde.
60
-
61
- ## [0.6.2] - 2026-09-26
62
-
63
- ### Changed
64
-
65
- - 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.
66
- - Las cajas del comando de release ajustan el texto largo en varias líneas en lugar de cortarlo.
67
- - Un release interrumpido reusa automáticamente el artefacto ya preparado cuando es posterior al último cambio de código.
68
-
69
- ### Removed
70
-
71
- - La opción `--notes` y las preguntas sobre las notas del CHANGELOG y sobre reusar el artefacto preparado.
72
-
73
- ## 0.6.1 - 2026-09-26
74
-
75
- - Actualiza pnpm a 12.6.0 y next a 16.3.6
76
- - Add terminal UI for interactive prompts and spinners
77
- - Update release banner and icons for improved visibility
78
- - Remove create-version script
79
- - Update release command to create-version and improve documentation
80
-
81
- ## 0.6.0 - 2026-09-23
82
-
83
- - Actualiza el paquete a la versión 0.6.0.
84
-
85
- ## 0.5.6 - 2026-09-09
86
-
87
- - Actualiza el paquete a la versión 0.5.6.
88
-
89
- ## 0.5.5 - 2026-09-09
90
-
91
- - Actualiza el paquete a la versión 0.5.5.
92
-
93
- ## 0.5.4 - 2026-09-09
94
-
95
- - Actualiza el paquete a la versión 0.5.4.
96
-
97
- ## 0.5.3 - 2026-09-09
98
-
99
- - Actualiza el paquete a la versión 0.5.3.
100
-
101
- ## 0.5.2 - 2026-09-09
102
-
103
- - Actualiza el paquete a la versión 0.5.2.
104
-
105
- ## 0.5.1 - 2026-09-08
106
-
107
- - Actualiza el paquete a la versión 0.5.1.
108
-
109
- ## 0.5.0 - 2026-09-08
110
-
111
- - Actualiza el paquete a la versión 0.5.0.
112
-
113
- ## 0.4.2 - 2026-09-08
114
-
115
- - Actualiza el paquete a la versión 0.4.2.
116
-
117
- ## 0.4.1 - 2026-09-08
118
-
119
- - Actualiza el paquete a la versión 0.4.1.
120
-
121
- ## 0.4.0 - 2026-09-08
122
-
123
- - Distribuye los providers nativo, Next y TanStack con tema compartido, navegación e imágenes adaptadas al framework.
124
- - Incluye CSS precompilado, tema y fuentes; los consumidores sólo importan `beez-ui/styles.css`, sin configurar Tailwind.
125
- - Valida el tarball sin compiladores CSS y las integraciones en Chromium y WebKit.
126
-
127
- ## 0.3.1 - 2026-09-08
128
-
129
- - Publica CSS precompilado para que los estilos funcionen sin Tailwind ni detección de clases en el consumidor.
130
- - Conserva el tema, las fuentes y las utilidades compartidas mediante `beez-ui/styles.css`.
131
- - Verifica estilos computados del tarball servido por HTTP sin procesadores CSS en Chromium y WebKit.
132
-
133
- ## 0.2.0 - 2026-09-08
134
-
135
- - Unifica el nombre `BeezUIProvider` en los entrypoints nativo, Next y TanStack; reemplaza `NextBeezUIProvider`.
136
- - Comparte el tema mediante `next-themes`, `themeOptions` y `useTheme` en todos los providers.
137
- - Restaura `Link` desde la raíz con navegación por adaptadores y prefetch desactivado por defecto.
138
- - Integra Unpic para imágenes nativas y de TanStack, y conserva Next Image en el provider de Next.
139
- - Separa los tipos de tests y valida navegación, imágenes y tema en Chromium y WebKit.
140
-
141
- ## 0.1.1 - 2026-09-08
142
-
143
- - Publica JavaScript ESM y declaraciones TypeScript en `dist`.
144
- - Conserva los componentes agrupados y el tema de LaTribu.
145
- - Mantiene visible el área del avatar durante la carga diferida para permitir que el navegador solicite la imagen.
146
- - Agrega `BeezUIProvider` para adaptadores nativos o propios y `NextBeezUIProvider` como integración opcional.
147
- - Incorpora preparación de releases con checks, control del contenido del paquete y checksum SHA-256.
148
- - Documenta la autenticación con `NPM_TOKEN` y la publicación del artefacto validado.
149
-
150
- ## 0.1.0 - 2026-09-08
151
-
152
- - Centraliza los componentes de LaTribu y agenda-mensual con su tema, fuentes y pruebas.
37
+ ## [0.7.0] - 2026-09-26
38
+
39
+ ### Added
40
+
41
+ - `PaginationContent` desliza el resaltado de la página actual hacia la página elegida cuando la lista permanece montada (paginación en el cliente).
42
+ - `Calendar` desliza el mes entrante desde el lado de la navegación (también en RTL) y se mantiene estático con movimiento reducido.
43
+ - `AvatarImage` revela la imagen con un desenfoque y un zoom breves al terminar de cargar, en lugar de aparecer de golpe sobre el fallback.
44
+ - Las sugerencias de `FilterQueryBar` deslizan el resaltado entre opciones con teclado, como los menús y `Select`.
45
+ - `AvatarGroup` eleva levemente el avatar bajo el puntero en dispositivos con hover real.
46
+ - El chevron de `DropdownMenuSubTrigger` se desplaza hacia el submenú abierto.
47
+
48
+ ### Changed
49
+
50
+ - `Skeleton` muestra un brillo que recorre el placeholder en lugar del pulso de opacidad; con movimiento reducido queda como un bloque liso.
51
+ - `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`.
52
+ - `Alert` entra con un leve desplazamiento y desenfoque.
53
+ - Los anillos de foco y bordes de `Input`, `Textarea`, `InputGroup`, `SelectTrigger`, `Checkbox` y `RadioGroupItem` aparecen con una transición en lugar de saltar.
54
+ - 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.
55
+ - El sidebar colapsa y expande con una curva de cajón de 300 ms en lugar de una transición lineal.
56
+ - El thumb de `Switch` tiene una sombra sutil que lo separa del track.
57
+
58
+ ### Fixed
59
+
60
+ - El cursor de `TypingAnimation` vuelve a parpadear: queda fijo mientras escribe o borra, parpadea en reposo y los lectores de pantalla lo ignoran.
61
+ - `Carousel` vertical responde a las flechas arriba y abajo; antes solo reaccionaba a izquierda y derecha.
62
+ - `SidebarMenuButton` con `variant="outline"` vuelve a pintar su borde con los tokens `oklch` del tema.
63
+ - `FormLabel`, `FormControl`, `FormDescription` y `FormMessage` fuera de un `FormField` lanzan un error claro en lugar de fallar en silencio.
64
+ - 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.
65
+ - `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.
66
+ - `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.
67
+ - Las `Card` interactivas conservan su contorno mientras muestran la sombra de hover; antes la sombra reemplazaba el anillo del borde.
68
+
69
+ ## [0.6.2] - 2026-09-26
70
+
71
+ ### Changed
72
+
73
+ - 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.
74
+ - Las cajas del comando de release ajustan el texto largo en varias líneas en lugar de cortarlo.
75
+ - Un release interrumpido reusa automáticamente el artefacto ya preparado cuando es posterior al último cambio de código.
76
+
77
+ ### Removed
78
+
79
+ - La opción `--notes` y las preguntas sobre las notas del CHANGELOG y sobre reusar el artefacto preparado.
80
+
81
+ ## 0.6.1 - 2026-09-26
82
+
83
+ - Actualiza pnpm a 12.6.0 y next a 16.3.6
84
+ - Add terminal UI for interactive prompts and spinners
85
+ - Update release banner and icons for improved visibility
86
+ - Remove create-version script
87
+ - Update release command to create-version and improve documentation
88
+
89
+ ## 0.6.0 - 2026-09-23
90
+
91
+ - Actualiza el paquete a la versión 0.6.0.
92
+
93
+ ## 0.5.6 - 2026-09-09
94
+
95
+ - Actualiza el paquete a la versión 0.5.6.
96
+
97
+ ## 0.5.5 - 2026-09-09
98
+
99
+ - Actualiza el paquete a la versión 0.5.5.
100
+
101
+ ## 0.5.4 - 2026-09-09
102
+
103
+ - Actualiza el paquete a la versión 0.5.4.
104
+
105
+ ## 0.5.3 - 2026-09-09
106
+
107
+ - Actualiza el paquete a la versión 0.5.3.
108
+
109
+ ## 0.5.2 - 2026-09-09
110
+
111
+ - Actualiza el paquete a la versión 0.5.2.
112
+
113
+ ## 0.5.1 - 2026-09-08
114
+
115
+ - Actualiza el paquete a la versión 0.5.1.
116
+
117
+ ## 0.5.0 - 2026-09-08
118
+
119
+ - Actualiza el paquete a la versión 0.5.0.
120
+
121
+ ## 0.4.2 - 2026-09-08
122
+
123
+ - Actualiza el paquete a la versión 0.4.2.
124
+
125
+ ## 0.4.1 - 2026-09-08
126
+
127
+ - Actualiza el paquete a la versión 0.4.1.
128
+
129
+ ## 0.4.0 - 2026-09-08
130
+
131
+ - Distribuye los providers nativo, Next y TanStack con tema compartido, navegación e imágenes adaptadas al framework.
132
+ - Incluye CSS precompilado, tema y fuentes; los consumidores sólo importan `beez-ui/styles.css`, sin configurar Tailwind.
133
+ - Valida el tarball sin compiladores CSS y las integraciones en Chromium y WebKit.
134
+
135
+ ## 0.3.1 - 2026-09-08
136
+
137
+ - Publica CSS precompilado para que los estilos funcionen sin Tailwind ni detección de clases en el consumidor.
138
+ - Conserva el tema, las fuentes y las utilidades compartidas mediante `beez-ui/styles.css`.
139
+ - Verifica estilos computados del tarball servido por HTTP sin procesadores CSS en Chromium y WebKit.
140
+
141
+ ## 0.2.0 - 2026-09-08
142
+
143
+ - Unifica el nombre `BeezUIProvider` en los entrypoints nativo, Next y TanStack; reemplaza `NextBeezUIProvider`.
144
+ - Comparte el tema mediante `next-themes`, `themeOptions` y `useTheme` en todos los providers.
145
+ - Restaura `Link` desde la raíz con navegación por adaptadores y prefetch desactivado por defecto.
146
+ - Integra Unpic para imágenes nativas y de TanStack, y conserva Next Image en el provider de Next.
147
+ - Separa los tipos de tests y valida navegación, imágenes y tema en Chromium y WebKit.
148
+
149
+ ## 0.1.1 - 2026-09-08
150
+
151
+ - Publica JavaScript ESM y declaraciones TypeScript en `dist`.
152
+ - Conserva los componentes agrupados y el tema de LaTribu.
153
+ - Mantiene visible el área del avatar durante la carga diferida para permitir que el navegador solicite la imagen.
154
+ - Agrega `BeezUIProvider` para adaptadores nativos o propios y `NextBeezUIProvider` como integración opcional.
155
+ - Incorpora preparación de releases con checks, control del contenido del paquete y checksum SHA-256.
156
+ - Documenta la autenticación con `NPM_TOKEN` y la publicación del artefacto validado.
157
+
158
+ ## 0.1.0 - 2026-09-08
159
+
160
+ - Centraliza los componentes de LaTribu y agenda-mensual con su tema, fuentes y pruebas.
package/README.md CHANGED
@@ -240,44 +240,34 @@ pnpm create-version --dry-run # solo muestra el diagnóstico y el
240
240
  pnpm cv # alias de pnpm create-version
241
241
  ```
242
242
 
243
- 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:
243
+ El comando es el motor compartido de los proyectos Beez, `beez-rp create-version` (devDependency `beez-rp`). Su funcionamiento general (diagnóstico, bloqueos, reanudación, Codex, versiones permitidas) está documentado en el README de [beez-rp](https://github.com/guidomodarelli/beez-rp#create-version). Lo propio de beez-ui vive en `beez-rp.config.js`: la audiencia del CHANGELOG, la descripción de cada tipo de versión, el hook `prepare` de `scripts/release-hooks.js` y la publicación en npm del tarball preparado (`publish: "npm"` + `artifact`).
244
244
 
245
- - **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).
246
- - **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.
247
- - **Todo al día**: si la versión está publicada y no hay commits nuevos, no hace nada.
245
+ Los releases salen sólo desde `main`, limpio y al día con origin (sólo `CHANGELOG.md` puede quedar sin commitear). En otra rama explica qué falta: pushear, abrir o mergear el PR. El último release es el último commit de `origin/main` que cambió el `version` de `package.json`, así que reconoce tanto los commits `X.Y.Z` como los anteriores `chore(release): prepara la versión X.Y.Z`.
248
246
 
249
- `--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.
247
+ ### Flujo validado de un release nuevo
250
248
 
251
- 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.
249
+ 1. Actualiza `main` con fast-forward si está atrás.
250
+ 2. Si `## [Unreleased]` está vacío, Codex lo completa desde los commits sin publicar; si no puede, el release se corta.
251
+ 3. Pide la versión (sugiere `patch`, `minor` o `major` según los commits), renombra `## [Unreleased]` a `## [X.Y.Z] - AAAA-MM-DD` dejando un `[Unreleased]` vacío arriba y crea el commit `X.Y.Z` con `package.json` y `CHANGELOG.md` y el tag anotado `vX.Y.Z`, antes de las validaciones largas.
252
+ 4. `prepare` (`scripts/release-hooks.js`): reusa el tarball ya preparado para esa versión si es posterior al último cambio de código (el commit de versión no cuenta); si no, ejecuta `pnpm release:prepare` sobre el commit de versión: instalación congelada, tests sin React Compiler, build optimizado, lint, typechecks, tests unitarios y pruebas de navegador, y genera el tarball verificado con `npm pack --ignore-scripts` (npm y no pnpm, para que sea reproducible) en `releases/<version>-<sha256>/beez-ui-<version>.tgz`.
253
+ 5. Sube `main` y el tag `vX.Y.Z` a origin con un único `git push --atomic`.
254
+ 6. Publicación: beez-rp exige que el commit de versión siga sin cambios, toma `releases/<version>-<sha256>/beez-ui-<version>.tgz`, verifica el SHA-256 de su ruta y compara su SHA-512 con el `integrity` de `npm pack --dry-run` sobre ese commit (`npm pack` es reproducible, así que coincidir prueba que es byte a byte lo que npm empaqueta) y recién ahí lo publica con acceso público y etiqueta `latest`. Además, `prepublishOnly` ejecuta `beez-rp guard-publish`, que corta un `pnpm publish` manual (o yarn/bun): se publica sólo con `pnpm create-version`, que usa npm.
252
255
 
253
- ### CHANGELOG
256
+ Si algo falla después del commit de versión, basta con volver a ejecutar `pnpm create-version`: si `HEAD` es el commit `X.Y.Z` y npm todavía no tiene esa versión, retoma sólo la preparación (reusando el tarball si sigue vigente), el push si falta y la publicación. Nunca vuelve a subir la versión.
254
257
 
255
- `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`.
256
-
257
- ### Flujo validado de un release nuevo
258
+ La publicación usa el cliente oficial de npm y hereda la terminal, así que admite su verificación interactiva en el navegador/2FA: hay que ejecutar el release desde una terminal interactiva cuando la cuenta la requiera. Instalación, build y checks siguen usando pnpm 12. `NPM_TOKEN` se toma del entorno o del `.env` ignorado y no se imprime; el repositorio no tiene `.npmrc`: beez-rp crea un config temporal de npm fuera del repositorio que sólo referencia `${NPM_TOKEN}` (npm lo expande desde el entorno; el token no se escribe en disco ni en la línea de comandos), lo pasa con `--userconfig` y lo borra al terminar, también si la publicación falla.
258
259
 
259
- 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.
260
- 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.
261
- 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.
262
- 4. Genera el tarball en `releases/<version>-<sha256>/beez-ui-<version>.tgz` y valida su contenido, exports e integridad.
263
- 5. Pushea el commit de release a la rama upstream configurada, sólo si sigue siendo el commit actual.
264
- 6. Publica ese mismo artefacto en npm con acceso público y etiqueta `latest`.
265
-
266
- La publicación usa el cliente oficial de npm para admitir su flujo interactivo de verificación en el navegador/2FA. Instalación, build y checks siguen usando pnpm 12. Ejecutar desde una terminal interactiva cuando la cuenta requiera autenticación adicional. El token se carga sólo al publicar y no se imprime. El repositorio no tiene `.npmrc`: pnpm 12 ignora las variables de entorno en credenciales controladas por el repositorio y avisaba en cada comando. `release:publish` crea un config temporal de npm fuera del repositorio que sólo referencia `${NPM_TOKEN}` (npm lo expande desde el entorno; el token no se escribe en disco ni en la línea de comandos), lo pasa con `--userconfig` y lo borra al terminar, también si la publicación falla (`scripts/npm-auth.js`).
260
+ ### CHANGELOG
267
261
 
268
- El commit se limita a los dos archivos de metadatos, incluidos sus cambios previos; revisar el código antes de ejecutar la release. No crea tags ni hace force push. Si cambian el checkout, el upstream o los metadatos durante las validaciones, se detiene. También comprueba que los hooks de Git no hayan agregado archivos ni alterado los metadatos validados antes de pushear. Si falla una validación o el push, no publica y el commit de release queda en local: `pnpm create-version` lo detecta y retoma sólo lo que falte (preparar, pushear, publicar), sin volver a subir la versión. Si falla la publicación, comprobar primero si npm recibió la versión; si no, `pnpm create-version` reintenta sólo la publicación del mismo tarball.
262
+ `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`.
269
263
 
270
- Los pasos individuales siguen disponibles:
264
+ Para validar y empaquetar la versión actual sin publicarla:
271
265
 
272
266
  ```sh
273
- # Sólo validar y empaquetar la versión actual, sin publicarla.
274
267
  pnpm release:prepare
275
-
276
- # Publicar un artefacto ya preparado.
277
- pnpm release:publish releases/<version>-<sha256>/beez-ui-<version>.tgz
278
268
  ```
279
269
 
280
- `release:publish` vuelve a verificar nombre, versión, contenido y checksum antes de invocar `npm publish`. El paquete excluye fuentes privadas, tests, scripts, `.env` y `.npmrc`; incluye JavaScript, declaraciones, CSS, fuentes tipográficas y licencias. Conserva releases anteriores.
270
+ El paquete excluye fuentes privadas, tests, scripts, `.env` y `.npmrc`; incluye JavaScript, declaraciones, CSS, fuentes tipográficas y licencias. Conserva releases anteriores.
281
271
 
282
272
  `prepack` ejecuta el build para los empaquetados manuales. `dist` y `releases` son generados e ignorados por Git. La CI verifica los checks y los tres providers en ambos motores de navegador en Linux y Windows; no publica automáticamente.
283
273
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "beez-ui",
3
- "version": "0.8.0",
3
+ "version": "0.8.1",
4
4
  "description": "Shared UI components with the customizations extracted from TuTribu.",
5
5
  "type": "module",
6
6
  "sideEffects": [
@@ -451,6 +451,26 @@
451
451
  "type": "git",
452
452
  "url": "git+https://github.com/guidomodarelli/beez-ui.git"
453
453
  },
454
+ "scripts": {
455
+ "typecheck": "pnpm build && pnpm typecheck:src && pnpm typecheck:tests && pnpm typecheck:stories",
456
+ "typecheck:src": "tsc --noEmit -p tsconfig.json",
457
+ "typecheck:tests": "tsc --noEmit -p tests/tsconfig.json",
458
+ "test": "pnpm build && vitest run",
459
+ "test:uncompiled": "pnpm build --no-react-compiler && vitest run",
460
+ "check": "pnpm build && pnpm lint && pnpm typecheck:src && pnpm typecheck:tests && pnpm typecheck:stories && pnpm exec vitest run",
461
+ "lint": "eslint .",
462
+ "test:browser": "pnpm build && playwright test",
463
+ "build": "node scripts/build.js",
464
+ "prepack": "pnpm build",
465
+ "prepublishOnly": "beez-rp guard-publish",
466
+ "create-version": "beez-rp create-version",
467
+ "cv": "beez-rp create-version",
468
+ "release:prepare": "node scripts/prepare-release.js",
469
+ "storybook": "pnpm build && storybook dev -p 6006 --no-open",
470
+ "build-storybook": "pnpm build && storybook build",
471
+ "typecheck:stories": "tsc --noEmit -p stories/tsconfig.json",
472
+ "test:storybook": "pnpm build-storybook && playwright test --config playwright.storybook.config.ts"
473
+ },
454
474
  "peerDependencies": {
455
475
  "@tanstack/react-router": "^1.170.33",
456
476
  "emoji-picker-react": "^4.19.1",
@@ -488,9 +508,9 @@
488
508
  "@types/node": "^25.9.5",
489
509
  "@types/react": "^19.3.0",
490
510
  "@types/react-dom": "^19.3.0",
491
- "@types/semver": "^7.8.0",
492
511
  "@typescript/native": "npm:typescript@^7.0.2",
493
512
  "@vitejs/plugin-react": "^6.1.1",
513
+ "beez-rp": "^0.3.0",
494
514
  "emoji-picker-react": "^4.22.2",
495
515
  "eslint": "^10.10.0",
496
516
  "eslint-plugin-react-hooks": "^7.1.1",
@@ -501,7 +521,6 @@
501
521
  "oxc-transform-react": "^0.149.0",
502
522
  "react": "^19.3.0",
503
523
  "react-dom": "^19.3.0",
504
- "semver": "^7.8.5",
505
524
  "shadcn": "^4.21.0",
506
525
  "storybook": "^10.6.0",
507
526
  "tailwindcss": "^4.3.3",
@@ -511,6 +530,7 @@
511
530
  "vite": "^8.2.2",
512
531
  "vitest": "^5.0.0"
513
532
  },
533
+ "packageManager": "pnpm@12.6.0",
514
534
  "engines": {
515
535
  "node": ">=22",
516
536
  "pnpm": ">=12 <13"
@@ -537,24 +557,5 @@
537
557
  "@tanstack/react-router": {
538
558
  "optional": true
539
559
  }
540
- },
541
- "scripts": {
542
- "typecheck": "pnpm build && pnpm typecheck:src && pnpm typecheck:tests && pnpm typecheck:stories",
543
- "typecheck:src": "tsc --noEmit -p tsconfig.json",
544
- "typecheck:tests": "tsc --noEmit -p tests/tsconfig.json",
545
- "test": "pnpm build && vitest run",
546
- "test:uncompiled": "pnpm build --no-react-compiler && vitest run",
547
- "check": "pnpm build && pnpm lint && pnpm typecheck:src && pnpm typecheck:tests && pnpm typecheck:stories && pnpm exec vitest run",
548
- "lint": "eslint .",
549
- "test:browser": "pnpm build && playwright test",
550
- "build": "node scripts/build.js",
551
- "create-version": "node scripts/release.js",
552
- "cv": "node scripts/release.js",
553
- "release:prepare": "node scripts/prepare-release.js",
554
- "release:publish": "node scripts/publish-release.js",
555
- "storybook": "pnpm build && storybook dev -p 6006 --no-open",
556
- "build-storybook": "pnpm build && storybook build",
557
- "typecheck:stories": "tsc --noEmit -p stories/tsconfig.json",
558
- "test:storybook": "pnpm build-storybook && playwright test --config playwright.storybook.config.ts"
559
560
  }
560
- }
561
+ }