beez-ui 0.6.2 → 0.8.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 (127) hide show
  1. package/CHANGELOG.md +150 -96
  2. package/README.md +33 -6
  3. package/dist/components/account-menu.d.ts +53 -0
  4. package/dist/components/account-menu.js +405 -0
  5. package/dist/components/alert.js +1 -1
  6. package/dist/components/animated-collapse.d.ts +19 -0
  7. package/dist/components/animated-collapse.js +81 -0
  8. package/dist/components/animated-count.d.ts +13 -0
  9. package/dist/components/animated-count.js +105 -0
  10. package/dist/components/animated-list-item.d.ts +25 -0
  11. package/dist/components/animated-list-item.js +132 -0
  12. package/dist/components/avatar.d.ts +2 -1
  13. package/dist/components/avatar.js +4 -3
  14. package/dist/components/bouncing-dots-loader.d.ts +19 -0
  15. package/dist/components/bouncing-dots-loader.js +47 -0
  16. package/dist/components/calendar.js +102 -0
  17. package/dist/components/carousel.js +61 -48
  18. package/dist/components/checkbox.js +1 -1
  19. package/dist/components/confirm-delete-button.d.ts +29 -0
  20. package/dist/components/confirm-delete-button.js +254 -0
  21. package/dist/components/data-table.js +34 -4
  22. package/dist/components/dropdown-menu.js +5 -2
  23. package/dist/components/empty-state.d.ts +24 -0
  24. package/dist/components/empty-state.js +37 -0
  25. package/dist/components/error-state.d.ts +20 -0
  26. package/dist/components/error-state.js +145 -0
  27. package/dist/components/external-browser-handoff.d.ts +27 -0
  28. package/dist/components/external-browser-handoff.js +306 -0
  29. package/dist/components/file-upload.d.ts +78 -0
  30. package/dist/components/file-upload.js +678 -0
  31. package/dist/components/filter-query-bar.js +11 -6
  32. package/dist/components/form.d.ts +5 -0
  33. package/dist/components/form.js +11 -9
  34. package/dist/components/info-popover.d.ts +23 -0
  35. package/dist/components/info-popover.js +158 -0
  36. package/dist/components/input-group.js +1 -1
  37. package/dist/components/input.js +1 -1
  38. package/dist/components/month-calendar-header.d.ts +65 -0
  39. package/dist/components/month-calendar-header.js +337 -0
  40. package/dist/components/month-grid.d.ts +59 -0
  41. package/dist/components/month-grid.js +301 -0
  42. package/dist/components/notification-bell.d.ts +50 -0
  43. package/dist/components/notification-bell.js +338 -0
  44. package/dist/components/notification-panel.d.ts +56 -0
  45. package/dist/components/notification-panel.js +281 -0
  46. package/dist/components/open-in-browser-cta.d.ts +22 -0
  47. package/dist/components/open-in-browser-cta.js +61 -0
  48. package/dist/components/pagination.d.ts +1 -0
  49. package/dist/components/pagination.js +9 -4
  50. package/dist/components/presence-swap.d.ts +22 -0
  51. package/dist/components/presence-swap.js +162 -0
  52. package/dist/components/progress-ring.d.ts +20 -0
  53. package/dist/components/progress-ring.js +53 -0
  54. package/dist/components/pwa-update-control.d.ts +18 -0
  55. package/dist/components/pwa-update-control.js +119 -0
  56. package/dist/components/radio-group.js +1 -1
  57. package/dist/components/reaction-button.d.ts +26 -0
  58. package/dist/components/reaction-button.js +114 -0
  59. package/dist/components/rich-link-editor.d.ts +25 -0
  60. package/dist/components/rich-link-editor.js +320 -0
  61. package/dist/components/rich-markdown-content.d.ts +10 -0
  62. package/dist/components/rich-markdown-content.js +56 -0
  63. package/dist/components/rich-text-content.d.ts +19 -0
  64. package/dist/components/rich-text-content.js +26 -0
  65. package/dist/components/select.js +1 -1
  66. package/dist/components/sheet.js +12 -9
  67. package/dist/components/sidebar.js +9 -5
  68. package/dist/components/skeleton.d.ts +6 -0
  69. package/dist/components/skeleton.js +7 -1
  70. package/dist/components/switch.js +1 -1
  71. package/dist/components/textarea.js +1 -1
  72. package/dist/components/typing-animation.js +42 -15
  73. package/dist/emoji-picker.d.ts +27 -0
  74. package/dist/emoji-picker.js +283 -0
  75. package/dist/hooks/use-horizontal-swipe.d.ts +23 -0
  76. package/dist/hooks/use-horizontal-swipe.js +80 -0
  77. package/dist/hooks/use-is-hydrated.d.ts +6 -0
  78. package/dist/hooks/use-is-hydrated.js +20 -0
  79. package/dist/hooks/use-minute-clock.d.ts +23 -0
  80. package/dist/hooks/use-minute-clock.js +147 -0
  81. package/dist/hooks/use-month-transition-direction.d.ts +21 -0
  82. package/dist/hooks/use-month-transition-direction.js +110 -0
  83. package/dist/hooks/use-rich-link-editor.d.ts +55 -0
  84. package/dist/hooks/use-rich-link-editor.js +515 -0
  85. package/dist/hooks/use-viewer-time-zone.d.ts +6 -0
  86. package/dist/hooks/use-viewer-time-zone.js +20 -0
  87. package/dist/index.d.ts +44 -0
  88. package/dist/index.js +43 -0
  89. package/dist/lib/browser-clipboard.d.ts +13 -0
  90. package/dist/lib/browser-clipboard.js +48 -0
  91. package/dist/lib/browser-navigation.d.ts +21 -0
  92. package/dist/lib/browser-navigation.js +42 -0
  93. package/dist/lib/column-filter-value.d.ts +12 -0
  94. package/dist/lib/column-filter-value.js +52 -0
  95. package/dist/lib/file-acceptance.d.ts +43 -0
  96. package/dist/lib/file-acceptance.js +107 -0
  97. package/dist/lib/format-file-size.d.ts +16 -0
  98. package/dist/lib/format-file-size.js +34 -0
  99. package/dist/lib/fuzzy-search.d.ts +17 -0
  100. package/dist/lib/fuzzy-search.js +183 -0
  101. package/dist/lib/horizontal-swipe.d.ts +23 -0
  102. package/dist/lib/horizontal-swipe.js +29 -0
  103. package/dist/lib/in-app-browser.d.ts +35 -0
  104. package/dist/lib/in-app-browser.js +80 -0
  105. package/dist/lib/month-grid.d.ts +42 -0
  106. package/dist/lib/month-grid.js +74 -0
  107. package/dist/lib/name-initials.d.ts +7 -0
  108. package/dist/lib/name-initials.js +11 -0
  109. package/dist/lib/rich-text/link-markdown-constants.d.ts +147 -0
  110. package/dist/lib/rich-text/link-markdown-constants.js +458 -0
  111. package/dist/lib/rich-text/link-markdown-types.d.ts +53 -0
  112. package/dist/lib/rich-text/link-markdown-types.js +1 -0
  113. package/dist/lib/rich-text/link-markdown.d.ts +193 -0
  114. package/dist/lib/rich-text/link-markdown.js +592 -0
  115. package/dist/lib/rich-text/rich-markdown.d.ts +41 -0
  116. package/dist/lib/rich-text/rich-markdown.js +105 -0
  117. package/dist/lib/rich-text/rich-text-editor-dom.d.ts +26 -0
  118. package/dist/lib/rich-text/rich-text-editor-dom.js +79 -0
  119. package/dist/motion/glide-indicator.d.ts +37 -3
  120. package/dist/motion/glide-indicator.js +37 -3
  121. package/dist/motion/motion-slot.js +47 -18
  122. package/dist/motion/surface-keyframes.js +18 -6
  123. package/dist/motion/tokens.d.ts +41 -2
  124. package/dist/motion/tokens.js +40 -1
  125. package/dist/providers/beez-ui-provider.js +49 -17
  126. package/dist/styles.css +1 -1
  127. package/package.json +212 -2
package/CHANGELOG.md CHANGED
@@ -1,98 +1,152 @@
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.6.2] - 2026-09-26
8
-
9
- ### Changed
10
-
11
- - 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.
12
- - Las cajas del comando de release ajustan el texto largo en varias líneas en lugar de cortarlo.
13
- - Un release interrumpido reusa automáticamente el artefacto ya preparado cuando es posterior al último cambio de código.
14
-
15
- ### Removed
16
-
17
- - La opción `--notes` y las preguntas sobre las notas del CHANGELOG y sobre reusar el artefacto preparado.
18
-
19
- ## 0.6.1 - 2026-09-26
20
-
21
- - Actualiza pnpm a 12.6.0 y next a 16.3.6
22
- - Add terminal UI for interactive prompts and spinners
23
- - Update release banner and icons for improved visibility
24
- - Remove create-version script
25
- - Update release command to create-version and improve documentation
26
-
27
- ## 0.6.0 - 2026-09-23
28
-
29
- - Actualiza el paquete a la versión 0.6.0.
30
-
31
- ## 0.5.6 - 2026-09-09
32
-
33
- - Actualiza el paquete a la versión 0.5.6.
34
-
35
- ## 0.5.5 - 2026-09-09
36
-
37
- - Actualiza el paquete a la versión 0.5.5.
38
-
39
- ## 0.5.4 - 2026-09-09
40
-
41
- - Actualiza el paquete a la versión 0.5.4.
42
-
43
- ## 0.5.3 - 2026-09-09
44
-
45
- - Actualiza el paquete a la versión 0.5.3.
46
-
47
- ## 0.5.2 - 2026-09-09
48
-
49
- - Actualiza el paquete a la versión 0.5.2.
50
-
51
- ## 0.5.1 - 2026-09-08
52
-
53
- - Actualiza el paquete a la versión 0.5.1.
54
-
55
- ## 0.5.0 - 2026-09-08
56
-
57
- - Actualiza el paquete a la versión 0.5.0.
58
-
59
- ## 0.4.2 - 2026-09-08
60
-
61
- - Actualiza el paquete a la versión 0.4.2.
62
-
63
- ## 0.4.1 - 2026-09-08
64
-
65
- - Actualiza el paquete a la versión 0.4.1.
66
-
67
- ## 0.4.0 - 2026-09-08
68
-
69
- - Distribuye los providers nativo, Next y TanStack con tema compartido, navegación e imágenes adaptadas al framework.
70
- - Incluye CSS precompilado, tema y fuentes; los consumidores sólo importan `beez-ui/styles.css`, sin configurar Tailwind.
71
- - Valida el tarball sin compiladores CSS y las integraciones en Chromium y WebKit.
72
-
73
- ## 0.3.1 - 2026-09-08
74
-
75
- - Publica CSS precompilado para que los estilos funcionen sin Tailwind ni detección de clases en el consumidor.
76
- - Conserva el tema, las fuentes y las utilidades compartidas mediante `beez-ui/styles.css`.
77
- - Verifica estilos computados del tarball servido por HTTP sin procesadores CSS en Chromium y WebKit.
78
-
79
- ## 0.2.0 - 2026-09-08
80
-
81
- - Unifica el nombre `BeezUIProvider` en los entrypoints nativo, Next y TanStack; reemplaza `NextBeezUIProvider`.
82
- - Comparte el tema mediante `next-themes`, `themeOptions` y `useTheme` en todos los providers.
83
- - Restaura `Link` desde la raíz con navegación por adaptadores y prefetch desactivado por defecto.
84
- - Integra Unpic para imágenes nativas y de TanStack, y conserva Next Image en el provider de Next.
85
- - Separa los tipos de tests y valida navegación, imágenes y tema en Chromium y WebKit.
86
-
87
- ## 0.1.1 - 2026-09-08
88
-
89
- - Publica JavaScript ESM y declaraciones TypeScript en `dist`.
90
- - Conserva los componentes agrupados y el tema de LaTribu.
91
- - Mantiene visible el área del avatar durante la carga diferida para permitir que el navegador solicite la imagen.
92
- - Agrega `BeezUIProvider` para adaptadores nativos o propios y `NextBeezUIProvider` como integración opcional.
93
- - Incorpora preparación de releases con checks, control del contenido del paquete y checksum SHA-256.
94
- - Documenta la autenticación con `NPM_TOKEN` y la publicación del artefacto validado.
95
-
96
- ## 0.1.0 - 2026-09-08
97
-
98
- - Centraliza los componentes de LaTribu y agenda-mensual con su tema, fuentes y pruebas.
7
+ ## [0.8.0] - 2026-09-26
8
+
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
+
27
+ - `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
+
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.
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.
@@ -160,6 +171,22 @@ La tabla conserva agrupación estable, columnas configurables, memoización, exc
160
171
 
161
172
  Los componentes compartidos conservan el tema de LaTribu. Se incorporaron atributos `data-variant`/`data-size` del botón, scroll para paneles largos y persistencia opcional del sidebar. Se mantienen `Button.asChild`, estados deshabilitados y skeletons deterministas. `AvatarImage` delega carga y fallback a Base UI; conserva carga diferida y recuperación al cambiar `src`. El export original `Toaster` permanece disponible; `ThemedToaster` agrega los estilos e iconos compartidos.
162
173
 
174
+ ## Componentes de producto reutilizables
175
+
176
+ Provienen de las carpetas de producto de LaTribu y agenda-mensual y quedaron desacoplados de su dominio: reciben datos ya resueltos y textos por props, con valores por defecto en español.
177
+
178
+ - Movimiento: `PresenceSwap`, `AnimatedCount`, `AnimatedCollapse` y `AnimatedListItem`. Los tokens que usa la biblioteca se exportan desde la raíz y desde `beez-ui/motion-tokens`, así las apps animan sus superficies con las mismas curvas y springs en lugar de copiarlos.
179
+ - Feedback: `BouncingDotsLoader`, `ProgressRing`, `EmptyState`, `ErrorState`, `InfoPopover`, `ConfirmDeleteButton` y `ReactionButton`. El loader y la entrada del título de `MonthCalendarHeader` usan keyframes CSS porque se renderizan en el servidor; el fallback de movimiento reducido los detiene.
180
+ - Cuenta y sesión: `AccountMenu` (inicio de sesión mediante `signInHref` o `onSignIn`), `OpenInBrowserCta`, `ExternalBrowserHandoff` y los helpers `detectInAppBrowser` y `buildExternalBrowserUrl`.
181
+ - Contenido: `RichTextContent`, `RichMarkdownContent`, `RichLinkEditor` y `useRichLinkEditor`. Solo interpretan links en markdown, URLs sueltas, listas y negrita; el HTML del contenido nunca se renderiza como markup.
182
+ - Notificaciones: `NotificationBell` y `NotificationPanel` reciben `NotificationPanelItem` (`id`, `title`, `detail`, `sentAtLabel`, `href`, `isUnread`); la app traduce sus notificaciones a ese formato. Con `surface="responsive"` se renderizan el popover y el sheet hasta hidratar, y después solo el que corresponde al viewport.
183
+ - Calendario: `MonthGrid` y `MonthCalendarHeader` trabajan con claves `YYYY-MM` y `YYYY-MM-DD` sin zona horaria; la app decide en qué zona convierte cada instante en día. La navegación acepta `href` (link del router) o `onSelect`.
184
+ - Archivos: `FileUpload`, `FileUploadDropZone`, `FileUploadList` y `FileUploadItem` validan tipo y tamaño, pero no suben archivos: el progreso y los errores los informa la app.
185
+ - PWA: `PwaUpdateControl` aparece solo cuando hay un service worker en espera y le envía `{ type: "SKIP_WAITING" }` (configurable con `skipWaitingMessage`).
186
+ - Hooks y utilidades: `useIsHydrated`, `useMinuteClock`, `useViewerTimeZone`, `useHorizontalSwipe`, `usePrefersReducedMotion`, `formatFileSize`, `copyTextToClipboard`, `getNameInitials`, búsqueda difusa y helpers de URL.
187
+
188
+ `EmojiPicker` vive en el entrypoint opcional `beez-ui/emoji-picker` para no sumar `emoji-picker-react` a quien no lo usa. Hay que instalarlo como dependencia de la app (`pnpm add emoji-picker-react`); la librería se carga recién al abrir el selector, nunca durante el render del servidor.
189
+
163
190
  ## React Compiler
164
191
 
165
192
  El build usa el port de React Compiler en Rust de [Oxc](https://oxc.rs/blog/2026-08-18-react-compiler-support), mediante `oxc-transform-react`. Esta integración sigue marcada como experimental por Oxc.
@@ -195,7 +222,7 @@ pnpm release:prepare
195
222
 
196
223
  `pnpm build` genera las declaraciones con TypeScript 7, JavaScript con Oxc/React Compiler y CSS con el CLI de Tailwind. `pnpm check` ejecuta ESLint 10, los typechecks separados de código y tests con TypeScript 7, y Vitest 5. `tests/tsconfig.json` incorpora los matchers de Testing Library y los tipos de Vite sin incluirlos en el código de producción. `test:browser` verifica una app React/Vite nativa y una app Next real en Chromium y WebKit, tanto en desktop como en móvil. Los tests unitarios importan los archivos compilados. Los consumidores de navegador no instalan plugins de Tailwind, y una prueba adicional sirve el tarball por HTTP sin procesadores CSS para verificar estilos computados y carga de fuentes. Una prueba adicional instala el tarball en un consumidor aislado sin Next y verifica render, filtrado y declaraciones públicas.
197
224
 
198
- Los tests resuelven `beez-ui`, `beez-ui/next` y `beez-ui/tanstack` mediante rutas explícitas a las declaraciones compiladas en `tests/tsconfig.json`. Ejecutar `pnpm build` después de clonar o si falta `dist`; los comandos de validación completos ya lo hacen. Si el editor conserva diagnósticos anteriores después del build, reiniciar su servidor de TypeScript.
225
+ Los tests resuelven `beez-ui`, `beez-ui/next`, `beez-ui/tanstack` y `beez-ui/emoji-picker` mediante rutas explícitas a las declaraciones compiladas en `tests/tsconfig.json`. Ejecutar `pnpm build` después de clonar o si falta `dist`; los comandos de validación completos ya lo hacen. Si el editor conserva diagnósticos anteriores después del build, reiniciar su servidor de TypeScript.
199
226
 
200
227
  El compilador `tsc` es TypeScript 7. Para `typescript-eslint`, se mantiene la [API de compatibilidad oficial de TypeScript 6](https://devblogs.microsoft.com/typescript/announcing-typescript-7-0/#running-side-by-side-with-typescript-6.0) mediante un alias; no reemplaza el compilador de los typechecks.
201
228
 
@@ -0,0 +1,53 @@
1
+ /** Account menu: avatar trigger, account identity and the sign-in or sign-out action. */
2
+ import type { ReactNode } from "react";
3
+ export type AccountMenuStatus = "authenticated" | "unauthenticated";
4
+ export interface AccountMenuLabels {
5
+ signIn?: string;
6
+ signOut?: string;
7
+ /** Accessible name of the trigger button. */
8
+ trigger?: string;
9
+ }
10
+ export interface AccountMenuClassNames {
11
+ trigger?: string;
12
+ triggerAvatar?: string;
13
+ content?: string;
14
+ /** Badge shown while authenticated, when `showStatusBadge` is enabled. */
15
+ connectedBadge?: string;
16
+ /** Badge shown while signed out, when `showStatusBadge` is enabled. */
17
+ disconnectedBadge?: string;
18
+ }
19
+ export interface AccountMenuProps {
20
+ name: string;
21
+ email: string;
22
+ status: AccountMenuStatus;
23
+ image?: string | null;
24
+ /** Avatar text when there is no image; defaults to the name initials. */
25
+ avatarFallback?: string;
26
+ /** Called by the sign-out item. The menu stays mounted while a returned promise settles. */
27
+ onSignOut: () => void | Promise<void>;
28
+ signOutDisabled?: boolean;
29
+ /** Called by the sign-in item. Ignored when `signInHref` is set. */
30
+ onSignIn?: () => void;
31
+ /** Navigates to a sign-in page through the configured router adapter instead of calling `onSignIn`. */
32
+ signInHref?: string;
33
+ /** `avatar` shows only the avatar; `sidebar` also shows name, email and a chevron. */
34
+ triggerVariant?: "avatar" | "sidebar";
35
+ /** Adds a connected/disconnected badge to the avatar and greys it out while signed out. */
36
+ showStatusBadge?: boolean;
37
+ /** Optional hint shown when hovering or focusing the trigger. */
38
+ tooltipLabel?: ReactNode;
39
+ labels?: AccountMenuLabels;
40
+ classNames?: AccountMenuClassNames;
41
+ align?: "start" | "center" | "end";
42
+ side?: "top" | "right" | "bottom" | "left";
43
+ sideOffset?: number;
44
+ /** Extra items rendered between the identity header and the session action. */
45
+ children?: ReactNode;
46
+ }
47
+ /**
48
+ * Presentational account menu: the session and its side effects stay with the caller. Signed in,
49
+ * the menu offers sign-out; signed out, it offers sign-in as a link (`signInHref`) or a callback.
50
+ * @param props - Identity, session status, callbacks, copy and layout.
51
+ * @returns The trigger and its menu.
52
+ */
53
+ export declare function AccountMenu({ name, email, status, image, avatarFallback, onSignOut, signOutDisabled, onSignIn, signInHref, triggerVariant, showStatusBadge, tooltipLabel, labels, classNames, align, side, sideOffset, children, }: AccountMenuProps): import("react").JSX.Element;