beez-ui 0.8.0 → 0.8.2

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.
package/CHANGELOG.md CHANGED
@@ -1,152 +1,166 @@
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.2] - 2026-09-27
8
+
9
+ ### Fixed
10
+
11
+ - Con movimiento reducido, `PresenceSwap`, `AnimatedListItem` y `AnimatedCollapse` conservan un fundido breve en lugar de cambiar sin transición; `PresenceSwap` ya no queda trabado en el estado anterior cuando su contenido cambia varias veces seguidas (por ejemplo, error → cargando → cargado).
12
+
13
+ ## [0.8.1] - 2026-09-27
14
+
15
+ ### Changed
16
+
17
+ - 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.
18
+ - 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`.
19
+ - 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.
20
+
7
21
  ## [0.8.0] - 2026-09-26
8
22
 
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
-
23
+ ### Added
24
+
25
+ - 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.
26
+ - Primitivas de movimiento `PresenceSwap`, `AnimatedCount`, `AnimatedCollapse` y `AnimatedListItem`, que respetan el movimiento reducido.
27
+ - `BouncingDotsLoader`, `ProgressRing`, `EmptyState`, `ErrorState`, `InfoPopover`, `ConfirmDeleteButton` y `ReactionButton`.
28
+ - `AccountMenu`: menú de cuenta con avatar, identidad, inicio de sesión como link o callback, cierre de sesión y variante para sidebar.
29
+ - `RichTextContent`, `RichMarkdownContent`, `RichLinkEditor` y `useRichLinkEditor` para mostrar y editar texto con links en markdown sin interpretar HTML, junto con `parseRichTextSegments` y `parseRichMarkdownBlocks`.
30
+ - `OpenInBrowserCta` y `ExternalBrowserHandoff` para salir de navegadores internos de otras apps, con `detectInAppBrowser` y `buildExternalBrowserUrl`.
31
+ - `PwaUpdateControl`, que ofrece aplicar una actualización pendiente del service worker.
32
+ - `NotificationBell` y `NotificationPanel`: bandeja de notificaciones en popover o en sheet según el viewport, a partir de ítems ya resueltos por la app.
33
+ - `MonthGrid` y `MonthCalendarHeader` para calendarios mensuales, con `createMonthGridDays`, `groupItemsByDateKey`, `shiftMonthKey` y `useMonthTransitionDirection`.
34
+ - `FileUpload`, `FileUploadDropZone`, `FileUploadList` y `FileUploadItem`, con validación por tipo y tamaño (`classifyFiles`, `isFileTypeAccepted`).
35
+ - `EmojiPicker` en el entrypoint opcional `beez-ui/emoji-picker`; requiere instalar `emoji-picker-react`.
36
+ - Hooks `useIsHydrated`, `useMinuteClock`, `useViewerTimeZone`, `useHorizontalSwipe` y `usePrefersReducedMotion`.
37
+ - Utilidades `formatFileSize`, `copyTextToClipboard`, `getNameInitials`, búsqueda difusa (`getFuzzyMatchRank`, `renderHighlightedText`) y helpers de URL (`replaceCurrentUrlSearchParams`).
38
+
39
+ ### Fixed
40
+
27
41
  - `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
42
 
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.
43
+ ## [0.7.0] - 2026-09-26
44
+
45
+ ### Added
46
+
47
+ - `PaginationContent` desliza el resaltado de la página actual hacia la página elegida cuando la lista permanece montada (paginación en el cliente).
48
+ - `Calendar` desliza el mes entrante desde el lado de la navegación (también en RTL) y se mantiene estático con movimiento reducido.
49
+ - `AvatarImage` revela la imagen con un desenfoque y un zoom breves al terminar de cargar, en lugar de aparecer de golpe sobre el fallback.
50
+ - Las sugerencias de `FilterQueryBar` deslizan el resaltado entre opciones con teclado, como los menús y `Select`.
51
+ - `AvatarGroup` eleva levemente el avatar bajo el puntero en dispositivos con hover real.
52
+ - El chevron de `DropdownMenuSubTrigger` se desplaza hacia el submenú abierto.
53
+
54
+ ### Changed
55
+
56
+ - `Skeleton` muestra un brillo que recorre el placeholder en lugar del pulso de opacidad; con movimiento reducido queda como un bloque liso.
57
+ - `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`.
58
+ - `Alert` entra con un leve desplazamiento y desenfoque.
59
+ - Los anillos de foco y bordes de `Input`, `Textarea`, `InputGroup`, `SelectTrigger`, `Checkbox` y `RadioGroupItem` aparecen con una transición en lugar de saltar.
60
+ - 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.
61
+ - El sidebar colapsa y expande con una curva de cajón de 300 ms en lugar de una transición lineal.
62
+ - El thumb de `Switch` tiene una sombra sutil que lo separa del track.
63
+
64
+ ### Fixed
65
+
66
+ - El cursor de `TypingAnimation` vuelve a parpadear: queda fijo mientras escribe o borra, parpadea en reposo y los lectores de pantalla lo ignoran.
67
+ - `Carousel` vertical responde a las flechas arriba y abajo; antes solo reaccionaba a izquierda y derecha.
68
+ - `SidebarMenuButton` con `variant="outline"` vuelve a pintar su borde con los tokens `oklch` del tema.
69
+ - `FormLabel`, `FormControl`, `FormDescription` y `FormMessage` fuera de un `FormField` lanzan un error claro en lugar de fallar en silencio.
70
+ - 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.
71
+ - `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.
72
+ - `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.
73
+ - Las `Card` interactivas conservan su contorno mientras muestran la sombra de hover; antes la sombra reemplazaba el anillo del borde.
74
+
75
+ ## [0.6.2] - 2026-09-26
76
+
77
+ ### Changed
78
+
79
+ - 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.
80
+ - Las cajas del comando de release ajustan el texto largo en varias líneas en lugar de cortarlo.
81
+ - Un release interrumpido reusa automáticamente el artefacto ya preparado cuando es posterior al último cambio de código.
82
+
83
+ ### Removed
84
+
85
+ - La opción `--notes` y las preguntas sobre las notas del CHANGELOG y sobre reusar el artefacto preparado.
86
+
87
+ ## 0.6.1 - 2026-09-26
88
+
89
+ - Actualiza pnpm a 12.6.0 y next a 16.3.6
90
+ - Add terminal UI for interactive prompts and spinners
91
+ - Update release banner and icons for improved visibility
92
+ - Remove create-version script
93
+ - Update release command to create-version and improve documentation
94
+
95
+ ## 0.6.0 - 2026-09-23
96
+
97
+ - Actualiza el paquete a la versión 0.6.0.
98
+
99
+ ## 0.5.6 - 2026-09-09
100
+
101
+ - Actualiza el paquete a la versión 0.5.6.
102
+
103
+ ## 0.5.5 - 2026-09-09
104
+
105
+ - Actualiza el paquete a la versión 0.5.5.
106
+
107
+ ## 0.5.4 - 2026-09-09
108
+
109
+ - Actualiza el paquete a la versión 0.5.4.
110
+
111
+ ## 0.5.3 - 2026-09-09
112
+
113
+ - Actualiza el paquete a la versión 0.5.3.
114
+
115
+ ## 0.5.2 - 2026-09-09
116
+
117
+ - Actualiza el paquete a la versión 0.5.2.
118
+
119
+ ## 0.5.1 - 2026-09-08
120
+
121
+ - Actualiza el paquete a la versión 0.5.1.
122
+
123
+ ## 0.5.0 - 2026-09-08
124
+
125
+ - Actualiza el paquete a la versión 0.5.0.
126
+
127
+ ## 0.4.2 - 2026-09-08
128
+
129
+ - Actualiza el paquete a la versión 0.4.2.
130
+
131
+ ## 0.4.1 - 2026-09-08
132
+
133
+ - Actualiza el paquete a la versión 0.4.1.
134
+
135
+ ## 0.4.0 - 2026-09-08
136
+
137
+ - Distribuye los providers nativo, Next y TanStack con tema compartido, navegación e imágenes adaptadas al framework.
138
+ - Incluye CSS precompilado, tema y fuentes; los consumidores sólo importan `beez-ui/styles.css`, sin configurar Tailwind.
139
+ - Valida el tarball sin compiladores CSS y las integraciones en Chromium y WebKit.
140
+
141
+ ## 0.3.1 - 2026-09-08
142
+
143
+ - Publica CSS precompilado para que los estilos funcionen sin Tailwind ni detección de clases en el consumidor.
144
+ - Conserva el tema, las fuentes y las utilidades compartidas mediante `beez-ui/styles.css`.
145
+ - Verifica estilos computados del tarball servido por HTTP sin procesadores CSS en Chromium y WebKit.
146
+
147
+ ## 0.2.0 - 2026-09-08
148
+
149
+ - Unifica el nombre `BeezUIProvider` en los entrypoints nativo, Next y TanStack; reemplaza `NextBeezUIProvider`.
150
+ - Comparte el tema mediante `next-themes`, `themeOptions` y `useTheme` en todos los providers.
151
+ - Restaura `Link` desde la raíz con navegación por adaptadores y prefetch desactivado por defecto.
152
+ - Integra Unpic para imágenes nativas y de TanStack, y conserva Next Image en el provider de Next.
153
+ - Separa los tipos de tests y valida navegación, imágenes y tema en Chromium y WebKit.
154
+
155
+ ## 0.1.1 - 2026-09-08
156
+
157
+ - Publica JavaScript ESM y declaraciones TypeScript en `dist`.
158
+ - Conserva los componentes agrupados y el tema de LaTribu.
159
+ - Mantiene visible el área del avatar durante la carga diferida para permitir que el navegador solicite la imagen.
160
+ - Agrega `BeezUIProvider` para adaptadores nativos o propios y `NextBeezUIProvider` como integración opcional.
161
+ - Incorpora preparación de releases con checks, control del contenido del paquete y checksum SHA-256.
162
+ - Documenta la autenticación con `NPM_TOKEN` y la publicación del artefacto validado.
163
+
164
+ ## 0.1.0 - 2026-09-08
165
+
166
+ - 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
 
@@ -17,8 +17,14 @@ const COLLAPSE_TRANSITION = {
17
17
  ease: MOTION_EASE
18
18
  }
19
19
  };
20
- /** Reduced motion keeps the open/closed contract but applies it instantly. */
21
- const INSTANT_TRANSITION = { duration: 0 };
20
+ /** Reduced motion applies the height at once but keeps the short fade, so exits always settle. */
21
+ const REDUCED_MOTION_COLLAPSE_TRANSITION = {
22
+ height: { duration: 0 },
23
+ opacity: {
24
+ duration: MOTION_TIMING.panel,
25
+ ease: MOTION_EASE
26
+ }
27
+ };
22
28
  /**
23
29
  * Renders `children` only while `isOpen`, animating height and opacity.
24
30
  * Keep padding inside `children`: the animated wrapper collapses to zero height.
@@ -50,7 +56,7 @@ export function AnimatedCollapse(t0) {
50
56
  height: 0,
51
57
  opacity: 0
52
58
  },
53
- transition: shouldReduceMotion ? INSTANT_TRANSITION : COLLAPSE_TRANSITION,
59
+ transition: shouldReduceMotion ? REDUCED_MOTION_COLLAPSE_TRANSITION : COLLAPSE_TRANSITION,
54
60
  onAnimationStart: () => setIsSettled(false),
55
61
  onAnimationComplete: () => setIsSettled(true),
56
62
  children
@@ -19,8 +19,6 @@ const LIST_ITEM_EXIT_TRANSITION = {
19
19
  duration: MOTION_TIMING.exit,
20
20
  ease: MOTION_EASE
21
21
  };
22
- /** Reduced motion keeps enter/exit semantics (inert while leaving) but without travel or delay. */
23
- const INSTANT_TRANSITION = { duration: 0 };
24
22
  /**
25
23
  * Wrap the list in `<AnimatePresence initial={false}>` so only items added after the
26
24
  * first render animate in, and removed items animate out before leaving the DOM.
@@ -30,7 +28,7 @@ const INSTANT_TRANSITION = { duration: 0 };
30
28
  * @returns The animated item.
31
29
  */
32
30
  export function AnimatedListItem(t0) {
33
- const $ = _c(22);
31
+ const $ = _c(24);
34
32
  let children;
35
33
  let className;
36
34
  let elementProps;
@@ -56,6 +54,8 @@ export function AnimatedListItem(t0) {
56
54
  const MotionElement = ANIMATED_LIST_ITEM_ELEMENTS[as];
57
55
  const isPresent = useIsPresent();
58
56
  const shouldReduceMotion = usePrefersReducedMotion();
57
+ const distance = shouldReduceMotion ? 0 : MOTION_LIST_ITEM_DISTANCE;
58
+ const enterScale = shouldReduceMotion ? 1 : MOTION_ITEM_ENTER_SCALE;
59
59
  const t3 = isPresent ? elementProps["aria-hidden"] : true;
60
60
  const t4 = !isPresent || undefined;
61
61
  let t5;
@@ -68,41 +68,44 @@ export function AnimatedListItem(t0) {
68
68
  }
69
69
  const t6 = layout && !shouldReduceMotion ? "position" : false;
70
70
  let t7;
71
- let t8;
72
- if ($[8] === Symbol.for("react.memo_cache_sentinel")) {
71
+ if ($[8] !== distance || $[9] !== enterScale) {
73
72
  t7 = {
74
73
  opacity: 0,
75
- y: MOTION_LIST_ITEM_DISTANCE,
76
- scale: MOTION_ITEM_ENTER_SCALE
74
+ y: distance,
75
+ scale: enterScale
77
76
  };
77
+ $[8] = distance;
78
+ $[9] = enterScale;
79
+ $[10] = t7;
80
+ } else {
81
+ t7 = $[10];
82
+ }
83
+ let t8;
84
+ if ($[11] === Symbol.for("react.memo_cache_sentinel")) {
78
85
  t8 = {
79
86
  opacity: 1,
80
87
  y: 0,
81
88
  scale: 1
82
89
  };
83
- $[8] = t7;
84
- $[9] = t8;
90
+ $[11] = t8;
85
91
  } else {
86
- t7 = $[8];
87
- t8 = $[9];
92
+ t8 = $[11];
88
93
  }
89
- const t9 = shouldReduceMotion ? INSTANT_TRANSITION : LIST_ITEM_EXIT_TRANSITION;
90
- let t10;
91
- if ($[10] !== t9) {
92
- t10 = {
94
+ let t9;
95
+ if ($[12] !== enterScale) {
96
+ t9 = {
93
97
  opacity: 0,
94
- scale: MOTION_ITEM_ENTER_SCALE,
95
- transition: t9
98
+ scale: enterScale,
99
+ transition: LIST_ITEM_EXIT_TRANSITION
96
100
  };
97
- $[10] = t9;
98
- $[11] = t10;
101
+ $[12] = enterScale;
102
+ $[13] = t9;
99
103
  } else {
100
- t10 = $[11];
104
+ t9 = $[13];
101
105
  }
102
- const t11 = shouldReduceMotion ? INSTANT_TRANSITION : LIST_ITEM_TRANSITION;
103
- let t12;
104
- if ($[12] !== MotionElement || $[13] !== children || $[14] !== elementProps || $[15] !== t10 || $[16] !== t11 || $[17] !== t3 || $[18] !== t4 || $[19] !== t5 || $[20] !== t6) {
105
- t12 = /* @__PURE__ */ _jsx(MotionElement, {
106
+ let t10;
107
+ if ($[14] !== MotionElement || $[15] !== children || $[16] !== elementProps || $[17] !== t3 || $[18] !== t4 || $[19] !== t5 || $[20] !== t6 || $[21] !== t7 || $[22] !== t9) {
108
+ t10 = /* @__PURE__ */ _jsx(MotionElement, {
106
109
  "data-slot": "animated-list-item",
107
110
  ...elementProps,
108
111
  "aria-hidden": t3,
@@ -111,22 +114,22 @@ export function AnimatedListItem(t0) {
111
114
  layout: t6,
112
115
  initial: t7,
113
116
  animate: t8,
114
- exit: t10,
115
- transition: t11,
117
+ exit: t9,
118
+ transition: LIST_ITEM_TRANSITION,
116
119
  children
117
120
  });
118
- $[12] = MotionElement;
119
- $[13] = children;
120
- $[14] = elementProps;
121
- $[15] = t10;
122
- $[16] = t11;
121
+ $[14] = MotionElement;
122
+ $[15] = children;
123
+ $[16] = elementProps;
123
124
  $[17] = t3;
124
125
  $[18] = t4;
125
126
  $[19] = t5;
126
127
  $[20] = t6;
127
- $[21] = t12;
128
+ $[21] = t7;
129
+ $[22] = t9;
130
+ $[23] = t10;
128
131
  } else {
129
- t12 = $[21];
132
+ t10 = $[23];
130
133
  }
131
- return t12;
134
+ return t10;
132
135
  }
@@ -9,7 +9,6 @@ const PRESENCE_SWAP_ELEMENTS = {
9
9
  div: motion.div,
10
10
  span: motion.span
11
11
  };
12
- const INSTANT_TRANSITION = { duration: 0 };
13
12
  /**
14
13
  * One keyed state of the swap. While it animates out it turns inert and hidden
15
14
  * from assistive technology, so stale controls cannot be clicked or announced.
@@ -17,7 +16,7 @@ const INSTANT_TRANSITION = { duration: 0 };
17
16
  * @returns The animated state.
18
17
  */
19
18
  function PresenceSwapItem(t0) {
20
- const $ = _c(20);
19
+ const $ = _c(14);
21
20
  const { as, className, children } = t0;
22
21
  const MotionElement = PRESENCE_SWAP_ELEMENTS[as];
23
22
  const isPresent = useIsPresent();
@@ -37,78 +36,66 @@ function PresenceSwapItem(t0) {
37
36
  t3 = $[1];
38
37
  }
39
38
  let t4;
40
- if ($[2] !== shouldReduceMotion) {
41
- t4 = shouldReduceMotion ? INSTANT_TRANSITION : {
42
- duration: MOTION_TIMING.enter,
43
- ease: MOTION_EASE
44
- };
45
- $[2] = shouldReduceMotion;
46
- $[3] = t4;
47
- } else {
48
- t4 = $[3];
49
- }
50
- let t5;
51
- if ($[4] !== t4) {
52
- t5 = {
39
+ if ($[2] === Symbol.for("react.memo_cache_sentinel")) {
40
+ t4 = {
53
41
  opacity: 1,
54
42
  y: 0,
55
- transition: t4
43
+ transition: {
44
+ duration: MOTION_TIMING.enter,
45
+ ease: MOTION_EASE
46
+ }
56
47
  };
57
- $[4] = t4;
58
- $[5] = t5;
48
+ $[2] = t4;
59
49
  } else {
60
- t5 = $[5];
50
+ t4 = $[2];
61
51
  }
62
- const t6 = -distance;
63
- let t7;
64
- if ($[6] !== shouldReduceMotion) {
65
- t7 = shouldReduceMotion ? INSTANT_TRANSITION : {
52
+ const t5 = -distance;
53
+ let t6;
54
+ if ($[3] === Symbol.for("react.memo_cache_sentinel")) {
55
+ t6 = {
66
56
  duration: MOTION_TIMING.exit,
67
57
  ease: MOTION_EASE
68
58
  };
69
- $[6] = shouldReduceMotion;
70
- $[7] = t7;
59
+ $[3] = t6;
71
60
  } else {
72
- t7 = $[7];
61
+ t6 = $[3];
73
62
  }
74
- let t8;
75
- if ($[8] !== t6 || $[9] !== t7) {
76
- t8 = {
63
+ let t7;
64
+ if ($[4] !== t5) {
65
+ t7 = {
77
66
  opacity: 0,
78
- y: t6,
79
- transition: t7
67
+ y: t5,
68
+ transition: t6
80
69
  };
81
- $[8] = t6;
82
- $[9] = t7;
83
- $[10] = t8;
70
+ $[4] = t5;
71
+ $[5] = t7;
84
72
  } else {
85
- t8 = $[10];
73
+ t7 = $[5];
86
74
  }
87
- let t9;
88
- if ($[11] !== MotionElement || $[12] !== children || $[13] !== className || $[14] !== t1 || $[15] !== t2 || $[16] !== t3 || $[17] !== t5 || $[18] !== t8) {
89
- t9 = /* @__PURE__ */ _jsx(MotionElement, {
75
+ let t8;
76
+ if ($[6] !== MotionElement || $[7] !== children || $[8] !== className || $[9] !== t1 || $[10] !== t2 || $[11] !== t3 || $[12] !== t7) {
77
+ t8 = /* @__PURE__ */ _jsx(MotionElement, {
90
78
  "data-slot": "presence-swap",
91
79
  "aria-hidden": t1,
92
80
  inert: t2,
93
81
  className,
94
82
  initial: t3,
95
- animate: t5,
96
- exit: t8,
83
+ animate: t4,
84
+ exit: t7,
97
85
  children
98
86
  });
99
- $[11] = MotionElement;
100
- $[12] = children;
101
- $[13] = className;
102
- $[14] = t1;
103
- $[15] = t2;
104
- $[16] = t3;
105
- $[17] = t5;
106
- $[18] = t8;
107
- $[19] = t9;
87
+ $[6] = MotionElement;
88
+ $[7] = children;
89
+ $[8] = className;
90
+ $[9] = t1;
91
+ $[10] = t2;
92
+ $[11] = t3;
93
+ $[12] = t7;
94
+ $[13] = t8;
108
95
  } else {
109
- t9 = $[19];
96
+ t8 = $[13];
110
97
  }
111
- return t9;
98
+ return t8;
112
99
  }
113
100
  /**
114
101
  * Swaps keyed content with a short lift-and-fade; the first render is not animated.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "beez-ui",
3
- "version": "0.8.0",
3
+ "version": "0.8.2",
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
+ }