beez-ui 0.5.6 → 0.6.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.
- package/CHANGELOG.md +12 -0
- package/README.md +127 -90
- package/dist/components/animated-theme-toggler.js +6 -4
- package/dist/components/checkbox.js +4 -3
- package/dist/components/data-table.js +16 -8
- package/dist/components/dialog.js +11 -8
- package/dist/components/dropdown-menu.js +27 -14
- package/dist/components/form.js +1 -1
- package/dist/components/radio-group.js +1 -1
- package/dist/components/select.js +29 -16
- package/dist/components/sidebar.js +11 -7
- package/dist/components/tabs.js +12 -8
- package/dist/components/tooltip.js +1 -1
- package/dist/constants/motion.d.ts +4 -0
- package/dist/constants/motion.js +4 -0
- package/dist/motion/glide-indicator.d.ts +66 -0
- package/dist/motion/glide-indicator.js +252 -0
- package/dist/motion/glide-slot.d.ts +9 -0
- package/dist/motion/glide-slot.js +71 -0
- package/dist/motion/motion-slot.js +506 -179
- package/dist/motion/surface-keyframes.d.ts +13 -0
- package/dist/motion/surface-keyframes.js +205 -0
- package/dist/motion/tokens.d.ts +89 -6
- package/dist/motion/tokens.js +107 -6
- package/dist/motion/use-attached-element.d.ts +7 -0
- package/dist/motion/use-attached-element.js +22 -0
- package/dist/styles.css +1 -1
- package/package.json +5 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# Cambios
|
|
2
2
|
|
|
3
|
+
## 0.6.1 - 2026-09-26
|
|
4
|
+
|
|
5
|
+
- Actualiza pnpm a 12.6.0 y next a 16.3.6
|
|
6
|
+
- Add terminal UI for interactive prompts and spinners
|
|
7
|
+
- Update release banner and icons for improved visibility
|
|
8
|
+
- Remove create-version script
|
|
9
|
+
- Update release command to create-version and improve documentation
|
|
10
|
+
|
|
11
|
+
## 0.6.0 - 2026-09-23
|
|
12
|
+
|
|
13
|
+
- Actualiza el paquete a la versión 0.6.0.
|
|
14
|
+
|
|
3
15
|
## 0.5.6 - 2026-09-09
|
|
4
16
|
|
|
5
17
|
- Actualiza el paquete a la versión 0.5.6.
|
package/README.md
CHANGED
|
@@ -2,44 +2,44 @@
|
|
|
2
2
|
|
|
3
3
|
Biblioteca de componentes React reutilizables, con adaptadores opcionales por framework y tema compartido. Reúne los componentes de LaTribu y las funcionalidades reutilizables de agenda-mensual.
|
|
4
4
|
|
|
5
|
-
## Storybook
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
pnpm storybook
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
Abre `http://localhost:6006` para explorar los componentes con controles de texto,
|
|
12
|
-
variantes, tamaños, estados y comportamiento. El selector de la barra permite
|
|
13
|
-
probar el tema claro, oscuro o del sistema. Las stories de componentes compuestos
|
|
14
|
-
incluyen sus piezas en ejemplos completos; los campos editables y selectores
|
|
15
|
-
sincronizan sus interacciones con Controls. `BeezUIProvider` configura el preview
|
|
16
|
-
y no forma parte del catálogo. Las notificaciones se exploran en `ThemedToaster`,
|
|
17
|
-
sin duplicar una story de `Toaster`; `WhatsappIcon` está en la sección `Icons`.
|
|
18
|
-
|
|
19
|
-
```bash
|
|
20
|
-
pnpm build-storybook # Genera storybook-static para servirlo o publicarlo
|
|
21
|
-
pnpm typecheck:stories # Comprueba stories y configuración con TypeScript
|
|
22
|
-
pnpm test:storybook # Build y navegación/interacciones en Chromium y WebKit
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
El catálogo consume los exports públicos y el CSS compilado de la librería. Los
|
|
26
|
-
scripts compilan `beez-ui` antes de arrancar; si editás sus fuentes con Storybook
|
|
27
|
-
abierto, ejecutá `pnpm build` para actualizar el paquete que muestra el preview.
|
|
28
|
-
Los cambios en las stories se actualizan durante el desarrollo. Storybook y sus
|
|
29
|
-
addons son dependencias de desarrollo y no se incluyen en el paquete publicado.
|
|
30
|
-
|
|
31
|
-
Configuración basada en [React con Vite](https://storybook.js.org/docs/get-started/frameworks/react-vite)
|
|
32
|
-
y [Controls](https://storybook.js.org/docs/essentials/controls).
|
|
33
|
-
|
|
34
|
-
## Uso del paquete
|
|
5
|
+
## Storybook
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
pnpm storybook
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Abre `http://localhost:6006` para explorar los componentes con controles de texto,
|
|
12
|
+
variantes, tamaños, estados y comportamiento. El selector de la barra permite
|
|
13
|
+
probar el tema claro, oscuro o del sistema. Las stories de componentes compuestos
|
|
14
|
+
incluyen sus piezas en ejemplos completos; los campos editables y selectores
|
|
15
|
+
sincronizan sus interacciones con Controls. `BeezUIProvider` configura el preview
|
|
16
|
+
y no forma parte del catálogo. Las notificaciones se exploran en `ThemedToaster`,
|
|
17
|
+
sin duplicar una story de `Toaster`; `WhatsappIcon` está en la sección `Icons`.
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
pnpm build-storybook # Genera storybook-static para servirlo o publicarlo
|
|
21
|
+
pnpm typecheck:stories # Comprueba stories y configuración con TypeScript
|
|
22
|
+
pnpm test:storybook # Build y navegación/interacciones en Chromium y WebKit
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
El catálogo consume los exports públicos y el CSS compilado de la librería. Los
|
|
26
|
+
scripts compilan `beez-ui` antes de arrancar; si editás sus fuentes con Storybook
|
|
27
|
+
abierto, ejecutá `pnpm build` para actualizar el paquete que muestra el preview.
|
|
28
|
+
Los cambios en las stories se actualizan durante el desarrollo. Storybook y sus
|
|
29
|
+
addons son dependencias de desarrollo y no se incluyen en el paquete publicado.
|
|
30
|
+
|
|
31
|
+
Configuración basada en [React con Vite](https://storybook.js.org/docs/get-started/frameworks/react-vite)
|
|
32
|
+
y [Controls](https://storybook.js.org/docs/essentials/controls).
|
|
33
|
+
|
|
34
|
+
## Uso del paquete
|
|
35
35
|
|
|
36
36
|
```tsx
|
|
37
37
|
import { Button, Avatar, AvatarImage, DataTable, Calendar } from "beez-ui";
|
|
38
38
|
```
|
|
39
39
|
|
|
40
|
-
Agrupar los imports de componentes desde la raíz. El paquete publica JavaScript ESM y declaraciones TypeScript en `dist`; el consumidor no necesita transpilar el código fuente de la librería. La gramática de filtros y los helpers de mes-año son independientes de React.
|
|
41
|
-
|
|
42
|
-
La utilidad `cn`, también exportada desde `beez-ui`, usa el paquete `cn` para combinar clases condicionales y resolver conflictos de Tailwind.
|
|
40
|
+
Agrupar los imports de componentes desde la raíz. El paquete publica JavaScript ESM y declaraciones TypeScript en `dist`; el consumidor no necesita transpilar el código fuente de la librería. La gramática de filtros y los helpers de mes-año son independientes de React.
|
|
41
|
+
|
|
42
|
+
La utilidad `cn`, también exportada desde `beez-ui`, usa el paquete `cn` para combinar clases condicionales y resolver conflictos de Tailwind.
|
|
43
43
|
|
|
44
44
|
```css
|
|
45
45
|
@import "beez-ui/styles.css";
|
|
@@ -47,47 +47,70 @@ La utilidad `cn`, también exportada desde `beez-ui`, usa el paquete `cn` para c
|
|
|
47
47
|
|
|
48
48
|
`beez-ui/styles.css` es CSS listo para el navegador: incluye reset, utilidades, tema claro/oscuro, radios y fuentes locales Geist, Poppins e IBM Plex Mono. No requiere Tailwind, plugins PostCSS ni declaraciones `@source` en el consumidor. Las clases se compilan en el build de la biblioteca y se publican en `dist/styles.css`; `styles.source.css` es la entrada de desarrollo y no se distribuye.
|
|
49
49
|
|
|
50
|
-
Los consumidores pueden sobrescribir tokens mediante CSS normal. Poppins se reserva para títulos grandes mediante `--font-display`; las licencias se incluyen en `assets/fonts`. Si la aplicación usa Tailwind para sus propios estilos puede mantenerlo, pero ya no necesita escanear beez-ui.
|
|
51
|
-
|
|
52
|
-
`DropdownMenuContent` toma el ancho natural de sus opciones, con un mínimo de 12 rem y un máximo limitado por el espacio disponible. No hereda el ancho del botón disparador: los menús abiertos desde un icono deben mantener sus etiquetas legibles. Para un ancho específico, usar `className` y ajustar también el mínimo cuando se necesite un menú más pequeño.
|
|
53
|
-
|
|
54
|
-
Los componentes usan por defecto los espaciados compactos de Agenda: `Select` mide 2 rem (1.75 rem en tamaño pequeño), `TabsList` horizontal mide 2 rem y `PopoverContent` usa 0.625 rem de padding. Los menús y submenús tienen un mínimo de 12 rem, con filas compactas. `Dialog` y `AlertDialog` usan 1 rem de padding y un footer con borde superior y fondo diferenciado; `Textarea` distingue el estado deshabilitado mediante su fondo. Estos valores conservan los colores y fuentes del tema compartido. Son cambios de los defaults, sin una prop adicional para activarlos; los consumidores pueden personalizarlos mediante `className`.
|
|
55
|
-
|
|
56
|
-
Los `Sheet` superiores e inferiores limitan su altura al viewport dinámico (`100dvh`) y permiten desplazar el contenido para mantener accesibles las acciones de paneles largos.
|
|
57
|
-
|
|
58
|
-
## Movimiento
|
|
59
|
-
|
|
60
|
-
Las nuevas animaciones usan la dependencia `motion`: `animate` controla la
|
|
61
|
-
reproducción, `hover` y `press` los gestos, y `AnimatePresence` / `usePresence`
|
|
62
|
-
retienen los overlays durante su salida. Los presets y tiempos viven en
|
|
63
|
-
`src/motion/`. No se usan keyframes CSS para estas animaciones.
|
|
64
|
-
|
|
65
|
-
`MotionSlot` anima el nodo original del primitive mediante refs compuestos,
|
|
66
|
-
sin agregar wrappers al DOM ni reemplazar sus handlers. Las
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
El
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
50
|
+
Los consumidores pueden sobrescribir tokens mediante CSS normal. Poppins se reserva para títulos grandes mediante `--font-display`; las licencias se incluyen en `assets/fonts`. Si la aplicación usa Tailwind para sus propios estilos puede mantenerlo, pero ya no necesita escanear beez-ui.
|
|
51
|
+
|
|
52
|
+
`DropdownMenuContent` toma el ancho natural de sus opciones, con un mínimo de 12 rem y un máximo limitado por el espacio disponible. No hereda el ancho del botón disparador: los menús abiertos desde un icono deben mantener sus etiquetas legibles. Para un ancho específico, usar `className` y ajustar también el mínimo cuando se necesite un menú más pequeño.
|
|
53
|
+
|
|
54
|
+
Los componentes usan por defecto los espaciados compactos de Agenda: `Select` mide 2 rem (1.75 rem en tamaño pequeño), `TabsList` horizontal mide 2 rem y `PopoverContent` usa 0.625 rem de padding. Los menús y submenús tienen un mínimo de 12 rem, con filas compactas. `Dialog` y `AlertDialog` usan 1 rem de padding y un footer con borde superior y fondo diferenciado; `Textarea` distingue el estado deshabilitado mediante su fondo. Estos valores conservan los colores y fuentes del tema compartido. Son cambios de los defaults, sin una prop adicional para activarlos; los consumidores pueden personalizarlos mediante `className`.
|
|
55
|
+
|
|
56
|
+
Los `Sheet` superiores e inferiores limitan su altura al viewport dinámico (`100dvh`) y permiten desplazar el contenido para mantener accesibles las acciones de paneles largos.
|
|
57
|
+
|
|
58
|
+
## Movimiento
|
|
59
|
+
|
|
60
|
+
Las nuevas animaciones usan la dependencia `motion`: `animate` controla la
|
|
61
|
+
reproducción, `hover` y `press` los gestos, y `AnimatePresence` / `usePresence`
|
|
62
|
+
retienen los overlays durante su salida. Los presets y tiempos viven en
|
|
63
|
+
`src/motion/`. No se usan keyframes CSS para estas animaciones.
|
|
64
|
+
|
|
65
|
+
`MotionSlot` anima el nodo original del primitive mediante refs compuestos,
|
|
66
|
+
sin agregar wrappers al DOM ni reemplazar sus handlers. Las curvas y springs
|
|
67
|
+
siguen los tokens de [beui motion](https://beui.dev/components/motion):
|
|
68
|
+
|
|
69
|
+
- `Button` se comprime con spring a 0.93 y se eleva a 1.02 al hover, solo en
|
|
70
|
+
dispositivos con hover real (`(hover: hover) and (pointer: fine)`); los ítems de
|
|
71
|
+
`Sidebar` y `Tabs` se comprimen a 0.98.
|
|
72
|
+
- `Checkbox` y `RadioGroup` se comprimen a 0.92. La marca del checkbox aparece
|
|
73
|
+
con pop y trazo (`pathLength`) y sale con blur; el punto del radio aparece con spring.
|
|
74
|
+
- El thumb de `Switch` viaja con un spring pesado y se aplasta mientras se presiona.
|
|
75
|
+
- `Input`, `Textarea`, `InputGroup` y `SelectTrigger` tiemblan al pasar a
|
|
76
|
+
`aria-invalid="true"`; `FormMessage` entra con blur.
|
|
77
|
+
- `Tooltip` entra con blur, escala y desplazamiento desde el trigger.
|
|
78
|
+
`Popover`, `HoverCard`, `DropdownMenu` y `Select` escalan desde 0.96 y se revelan
|
|
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.
|
|
81
|
+
- `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
|
|
84
|
+
transitoria viaja entre ítems y se elimina al llegar, devolviendo el estilo al ítem.
|
|
85
|
+
- El chevron de `SelectTrigger` gira 180° al abrir y los chevrons de `DataTable`
|
|
86
|
+
(grupos y columnas) giran en lugar de cambiar de ícono; CSS define el ángulo final.
|
|
87
|
+
- Las opciones del `Select` entran escalonadas con blur (las primeras 10; el resto
|
|
88
|
+
solo se desvanece) y los checks de ítems de `Select` y `DropdownMenu` aparecen con pop.
|
|
89
|
+
- El ícono de `AnimatedThemeToggler` cambia con blur y escala; el botón de cierre de
|
|
90
|
+
`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
|
|
93
|
+
existentes de Embla, Sonner y rough-notation se conservan.
|
|
94
|
+
|
|
95
|
+
El contenido que está saliendo deja de ser interactivo y accesible de inmediato.
|
|
96
|
+
Cada familia de overlays tiene un contexto de visibilidad independiente para
|
|
97
|
+
soportar composiciones anidadas; los portales sin nodo visible no bloquean el
|
|
98
|
+
cierre del padre. `Select` conserva su desmontaje nativo y usa Motion en la entrada.
|
|
99
|
+
La elección explícita de `forceMount` permanece bajo control del consumidor.
|
|
100
|
+
|
|
101
|
+
Se respeta `prefers-reduced-motion`: las nuevas animaciones se cancelan y se
|
|
102
|
+
restauran los estilos; las anotaciones se dibujan sin animación y el texto aparece
|
|
103
|
+
completo, incluidas todas las palabras de una secuencia. Los controles del carrusel
|
|
104
|
+
avanzan directamente. El CSS solo aporta el fallback de movimiento reducido para
|
|
105
|
+
los efectos heredados. `BeezUIProvider` configura `MotionConfig` con
|
|
106
|
+
`reducedMotion="user"`. El primer render conserva el contrato de SSR.
|
|
107
|
+
|
|
108
|
+
El selector aplica el tema inmediatamente y anima su icono con Motion; no depende
|
|
109
|
+
de View Transitions nativas ni de una animación para completar el cambio. Los estilos temporales se liberan al terminar
|
|
110
|
+
la reproducción. Las stories permiten probar los gestos y estados reales; el
|
|
111
|
+
selector de tema de la story y la barra de Storybook se mantienen sincronizados.
|
|
112
|
+
|
|
113
|
+
## Providers de UI
|
|
91
114
|
|
|
92
115
|
Elegir un único `BeezUIProvider` según el framework. Los componentes y `useTheme` siempre se importan desde `beez-ui`.
|
|
93
116
|
|
|
@@ -129,9 +152,9 @@ Next y TanStack Router son peers opcionales aislados en sus entrypoints. El prov
|
|
|
129
152
|
|
|
130
153
|
## Componentes incorporados desde agenda-mensual
|
|
131
154
|
|
|
132
|
-
`Alert`, `AnimatedThemeToggler`, `Calendar`, `DataTable`, `FilterQueryBar`, `Form`, `Highlighter`, `InputGroup`, `Label`, `RadioGroup`, `TypingAnimation` y `ThemedToaster`, junto con sus subcomponentes, tipos y gramática de filtros.
|
|
133
|
-
|
|
134
|
-
`FilterQueryBar` mantiene el foco en el input mientras se recorren las sugerencias con el puntero o las flechas. Enter aplica la opción activa; interactuar con el input no cierra la lista.
|
|
155
|
+
`Alert`, `AnimatedThemeToggler`, `Calendar`, `DataTable`, `FilterQueryBar`, `Form`, `Highlighter`, `InputGroup`, `Label`, `RadioGroup`, `TypingAnimation` y `ThemedToaster`, junto con sus subcomponentes, tipos y gramática de filtros.
|
|
156
|
+
|
|
157
|
+
`FilterQueryBar` mantiene el foco en el input mientras se recorren las sugerencias con el puntero o las flechas. Enter aplica la opción activa; interactuar con el input no cierra la lista.
|
|
135
158
|
|
|
136
159
|
La tabla conserva agrupación estable, columnas configurables, memoización, exclusiones y sincronización de qualifiers por identificadores. La barra conserva navegación por teclado, autocompletado y filtros de texto, rangos, fechas, presencia y carpetas. `Calendar` usa español por defecto y acepta otra locale. Los textos y configuraciones de filtros se pueden personalizar por props.
|
|
137
160
|
|
|
@@ -178,27 +201,41 @@ El compilador `tsc` es TypeScript 7. Para `typescript-eslint`, se mantiene la [A
|
|
|
178
201
|
|
|
179
202
|
## Crear y publicar una versión
|
|
180
203
|
|
|
181
|
-
Desde el repositorio de beez-ui, configurar `NPM_TOKEN` con permiso de publicación en el entorno o en `.env`, tomando `.env.example` como referencia. Mantener el archivo local existente si ya está configurado.
|
|
204
|
+
Desde el repositorio de beez-ui, configurar `NPM_TOKEN` con permiso de publicación en el entorno o en `.env`, tomando `.env.example` como referencia. Mantener el archivo local existente si ya está configurado.
|
|
205
|
+
|
|
206
|
+
### Un solo comando: `pnpm create-version` (alias `pnpm cv`)
|
|
182
207
|
|
|
183
208
|
```sh
|
|
184
|
-
pnpm
|
|
185
|
-
pnpm
|
|
186
|
-
pnpm
|
|
209
|
+
pnpm create-version # diagnóstico, plan y release interactivo
|
|
210
|
+
pnpm create-version --bump minor # patch | minor | major sin preguntar
|
|
211
|
+
pnpm create-version --set-version 0.7.0 # versión exacta
|
|
212
|
+
pnpm create-version --notes "Agrega glide" # notas del CHANGELOG; se puede repetir
|
|
213
|
+
pnpm create-version --dry-run # solo muestra el diagnóstico y el plan
|
|
214
|
+
pnpm cv # alias de pnpm create-version
|
|
187
215
|
```
|
|
188
216
|
|
|
189
|
-
|
|
217
|
+
El comando hace `git fetch`, consulta npm y muestra un panel con la rama, el upstream, el working tree, `main` frente a origin, la versión local, la última versión publicada, los commits posteriores al último cambio de versión y el artefacto ya preparado. Después decide qué falta:
|
|
218
|
+
|
|
219
|
+
- **Release nuevo**: si hay commits sin publicar, sugiere `patch`, `minor` o `major` según los commits (breaking change, funcionalidades o solo arreglos) y pregunta con las flechas; las notas del CHANGELOG pueden salir de los commits (sin prefijos convencionales), escribirse en el momento o ser la nota básica. Tras confirmar ejecuta el flujo validado completo (ver abajo).
|
|
220
|
+
- **Release a medio terminar**: si `package.json` tiene una versión que npm todavía no tiene, completa solo lo que falta: prepara el artefacto (u ofrece reusar el ya preparado, que `release:publish` vuelve a verificar), si `package.json` y `CHANGELOG.md` quedaron sin commitear los commitea primero, después prepara, pushea el commit de release si todavía no está en origin y publica pidiendo confirmación. Nunca vuelve a subir la versión.
|
|
221
|
+
- **Todo al día**: si la versión está publicada y no hay commits nuevos, no hace nada.
|
|
222
|
+
|
|
223
|
+
`--set-version` sólo acepta el siguiente patch, minor o major de la versión actual (desde `0.6.0`: `0.6.1`, `0.7.0` o `1.0.0`); rechaza versiones menores, iguales, prerelease o que salteen versiones. Los releases salen sólo desde `main` con upstream configurado. Se detiene y explica qué hacer ante otra rama, `HEAD` desacoplado, cambios sin commitear (salvo `package.json` y `CHANGELOG.md` de un release a medio terminar), `main` divergida o npm sin respuesta; un bloqueo termina con código 0 porque ya está explicado en pantalla, y un paso fallido termina con código 1. Si `main` está atrás, la actualiza con fast-forward antes de versionar. Si algo falla, basta con volver a ejecutar `pnpm create-version`: retoma desde el primer paso pendiente. Sin terminal interactiva cada pregunta toma su opción por defecto.
|
|
224
|
+
|
|
225
|
+
La lógica pura vive en `scripts/release-plan.js`, la lectura de Git y npm en `scripts/release-state.js`, la UI de terminal (cajas, colores, íconos Nerd Font, spinner y selector) en `scripts/terminal-ui.js` y el orquestador en `scripts/release.js`, sin dependencias nuevas. Los íconos requieren una Nerd Font en la terminal.
|
|
190
226
|
|
|
191
|
-
|
|
227
|
+
### Flujo validado de un release nuevo
|
|
192
228
|
|
|
193
|
-
1. Actualiza `package.json` y agrega la entrada del changelog con fecha UTC, conservando el historial.
|
|
194
|
-
2.
|
|
195
|
-
3.
|
|
196
|
-
4.
|
|
197
|
-
5.
|
|
229
|
+
1. Actualiza `package.json` y agrega la entrada del changelog con fecha UTC, conservando el historial (`scripts/release-version.js`).
|
|
230
|
+
2. Commitea en el momento `package.json` y `CHANGELOG.md` (sólo esos dos archivos, conservando otros archivos staged), antes de las validaciones largas: si algo se corta después, queda un commit local y nunca metadata suelta.
|
|
231
|
+
3. Prepara la release: instalación congelada, tests sin React Compiler, build optimizado de JavaScript, tipos y CSS, lint, typechecks, tests unitarios y pruebas de navegador.
|
|
232
|
+
4. Genera el tarball en `releases/<version>-<sha256>/beez-ui-<version>.tgz` y valida su contenido, exports e integridad.
|
|
233
|
+
5. Pushea el commit de release a la rama upstream configurada, sólo si sigue siendo el commit actual.
|
|
234
|
+
6. Publica ese mismo artefacto en npm con acceso público y etiqueta `latest`.
|
|
198
235
|
|
|
199
|
-
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
|
|
236
|
+
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`).
|
|
200
237
|
|
|
201
|
-
El
|
|
238
|
+
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.
|
|
202
239
|
|
|
203
240
|
Los pasos individuales siguen disponibles:
|
|
204
241
|
|
|
@@ -3,10 +3,11 @@ import { c as _c } from "react/compiler-runtime";
|
|
|
3
3
|
import { useEffect, useRef, useSyncExternalStore } from "react";
|
|
4
4
|
import { Monitor, Moon, Sun, SunMoon } from "lucide-react";
|
|
5
5
|
import { animate, frame } from "motion/react";
|
|
6
|
+
import { MotionSlot } from "../motion/motion-slot.js";
|
|
6
7
|
import { MOTION_EASE } from "../motion/tokens.js";
|
|
7
8
|
import { useTheme } from "next-themes";
|
|
8
9
|
import { DropdownMenu, DropdownMenuContent, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuTrigger } from "./dropdown-menu.js";
|
|
9
|
-
import { REDUCED_MOTION_QUERY } from "../constants/motion.js";
|
|
10
|
+
import { MILLISECONDS_PER_SECOND, REDUCED_MOTION_QUERY } from "../constants/motion.js";
|
|
10
11
|
import { cn } from "../lib/utils.js";
|
|
11
12
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
12
13
|
const THEME_OPTIONS = [
|
|
@@ -26,8 +27,6 @@ const THEME_OPTIONS = [
|
|
|
26
27
|
value: "system"
|
|
27
28
|
}
|
|
28
29
|
];
|
|
29
|
-
/** Converts the public duration (milliseconds) to Motion seconds. */
|
|
30
|
-
const MILLISECONDS_PER_SECOND = 1e3;
|
|
31
30
|
export const AnimatedThemeToggler = (t0) => {
|
|
32
31
|
const $ = _c(34);
|
|
33
32
|
let className;
|
|
@@ -134,7 +133,10 @@ export const AnimatedThemeToggler = (t0) => {
|
|
|
134
133
|
}
|
|
135
134
|
let t6;
|
|
136
135
|
if ($[16] !== isDark || $[17] !== isThemeReady) {
|
|
137
|
-
t6 = !isThemeReady ? /* @__PURE__ */ _jsx(SunMoon, { "aria-hidden": "true" }) :
|
|
136
|
+
t6 = !isThemeReady ? /* @__PURE__ */ _jsx(SunMoon, { "aria-hidden": "true" }) : /* @__PURE__ */ _jsx(MotionSlot, {
|
|
137
|
+
kind: "icon-swap",
|
|
138
|
+
children: isDark ? /* @__PURE__ */ _jsx(Moon, { "aria-hidden": "true" }) : /* @__PURE__ */ _jsx(Sun, { "aria-hidden": "true" })
|
|
139
|
+
}, isDark ? "dark" : "light");
|
|
138
140
|
$[16] = isDark;
|
|
139
141
|
$[17] = isThemeReady;
|
|
140
142
|
$[18] = t6;
|
|
@@ -30,10 +30,11 @@ function Checkbox(t0) {
|
|
|
30
30
|
let t2;
|
|
31
31
|
if ($[5] === Symbol.for("react.memo_cache_sentinel")) {
|
|
32
32
|
t2 = /* @__PURE__ */ _jsx(MotionSlot, {
|
|
33
|
-
kind: "
|
|
33
|
+
kind: "check",
|
|
34
34
|
children: /* @__PURE__ */ _jsx(CheckboxPrimitive.Indicator, {
|
|
35
|
+
forceMount: true,
|
|
35
36
|
"data-slot": "checkbox-indicator",
|
|
36
|
-
className: "grid place-content-center text-current transition-none [&>svg]:size-3.5",
|
|
37
|
+
className: "grid place-content-center text-current transition-none data-unchecked:opacity-0 [&>svg]:size-3.5",
|
|
37
38
|
children: /* @__PURE__ */ _jsx(CheckIcon, {})
|
|
38
39
|
})
|
|
39
40
|
});
|
|
@@ -44,7 +45,7 @@ function Checkbox(t0) {
|
|
|
44
45
|
let t3;
|
|
45
46
|
if ($[6] !== props || $[7] !== t1) {
|
|
46
47
|
t3 = /* @__PURE__ */ _jsx(MotionSlot, {
|
|
47
|
-
kind: "
|
|
48
|
+
kind: "toggle",
|
|
48
49
|
children: /* @__PURE__ */ _jsx(CheckboxPrimitive.Root, {
|
|
49
50
|
"data-slot": "checkbox",
|
|
50
51
|
className: t1,
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
import * as React from "react";
|
|
3
3
|
import { flexRender, getCoreRowModel, getFilteredRowModel, getSortedRowModel, useReactTable } from "@tanstack/react-table";
|
|
4
4
|
import { CircleAlert, ChevronDown, ChevronRight, Ellipsis, Eraser, X } from "lucide-react";
|
|
5
|
+
import { cn } from "../lib/utils.js";
|
|
6
|
+
import { MotionSlot } from "../motion/motion-slot.js";
|
|
5
7
|
import { Button } from "./button.js";
|
|
6
8
|
import { Badge } from "./badge.js";
|
|
7
9
|
import { FilterQueryBar } from "./filter-query-bar.js";
|
|
@@ -510,12 +512,12 @@ export function DataTable({ columns, data, emptyMessage, toolbarActions, onVisib
|
|
|
510
512
|
className: "flex w-full items-center gap-1.5 text-left",
|
|
511
513
|
onClick: () => handleGroupToggle(groupKey),
|
|
512
514
|
type: "button",
|
|
513
|
-
children: [
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
515
|
+
children: [/* @__PURE__ */ _jsx(MotionSlot, {
|
|
516
|
+
kind: "rotate",
|
|
517
|
+
children: /* @__PURE__ */ _jsx(ChevronRight, {
|
|
518
|
+
"aria-hidden": "true",
|
|
519
|
+
className: cn("size-4 shrink-0", !isGroupCollapsed && "rotate-90")
|
|
520
|
+
})
|
|
519
521
|
}), groupHeaderContent]
|
|
520
522
|
}) : groupHeaderContent
|
|
521
523
|
})
|
|
@@ -765,12 +767,18 @@ export function DataTable({ columns, data, emptyMessage, toolbarActions, onVisib
|
|
|
765
767
|
asChild: true,
|
|
766
768
|
children: /* @__PURE__ */ _jsxs(Button, {
|
|
767
769
|
"aria-label": columnVisibilityButtonLabel,
|
|
768
|
-
className: "relative",
|
|
770
|
+
className: "relative aria-expanded:*:data-[slot=data-table-columns-chevron]:rotate-180",
|
|
769
771
|
type: "button",
|
|
770
772
|
variant: "outline",
|
|
771
773
|
children: [
|
|
772
774
|
columnVisibilityButtonLabel,
|
|
773
|
-
/* @__PURE__ */ _jsx(
|
|
775
|
+
/* @__PURE__ */ _jsx(MotionSlot, {
|
|
776
|
+
kind: "rotate",
|
|
777
|
+
children: /* @__PURE__ */ _jsx(ChevronDown, {
|
|
778
|
+
"aria-hidden": "true",
|
|
779
|
+
"data-slot": "data-table-columns-chevron"
|
|
780
|
+
})
|
|
781
|
+
}),
|
|
774
782
|
hasToolbarChanges ? /* @__PURE__ */ _jsxs(_Fragment, { children: [/* @__PURE__ */ _jsx("span", {
|
|
775
783
|
"aria-hidden": "true",
|
|
776
784
|
className: "absolute -right-0.5 -top-0.5 size-2 rounded-full bg-destructive ring-2 ring-background"
|
|
@@ -203,14 +203,17 @@ function DialogContent(t0) {
|
|
|
203
203
|
t5 = showCloseButton && /* @__PURE__ */ _jsx(DialogPrimitive.Close, {
|
|
204
204
|
"data-slot": "dialog-close",
|
|
205
205
|
asChild: true,
|
|
206
|
-
children: /* @__PURE__ */
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
children: "
|
|
213
|
-
|
|
206
|
+
children: /* @__PURE__ */ _jsx(MotionSlot, {
|
|
207
|
+
kind: "delayed-pop",
|
|
208
|
+
children: /* @__PURE__ */ _jsxs(Button, {
|
|
209
|
+
variant: "ghost",
|
|
210
|
+
className: "absolute top-2 right-2",
|
|
211
|
+
size: "icon-sm",
|
|
212
|
+
children: [/* @__PURE__ */ _jsx(XIcon, {}), /* @__PURE__ */ _jsx("span", {
|
|
213
|
+
className: "sr-only",
|
|
214
|
+
children: "Cerrar"
|
|
215
|
+
})]
|
|
216
|
+
})
|
|
214
217
|
})
|
|
215
218
|
});
|
|
216
219
|
$[8] = showCloseButton;
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { c as _c } from "react/compiler-runtime";
|
|
3
3
|
import * as React from "react";
|
|
4
4
|
import { DropdownMenu as DropdownMenuPrimitive } from "radix-ui";
|
|
5
|
+
import { GlideSlot } from "../motion/glide-slot.js";
|
|
5
6
|
import { MotionSlot } from "../motion/motion-slot.js";
|
|
6
7
|
import { MotionPresence, MotionOpenProvider, useMotionOpenState } from "../motion/presence.js";
|
|
7
8
|
import { cn } from "../lib/utils.js";
|
|
@@ -129,13 +130,16 @@ function DropdownMenuContent(t0) {
|
|
|
129
130
|
if ($[7] !== align || $[8] !== props || $[9] !== sideOffset || $[10] !== t4) {
|
|
130
131
|
t5 = /* @__PURE__ */ _jsx(MotionSlot, {
|
|
131
132
|
kind: "surface",
|
|
132
|
-
children: /* @__PURE__ */ _jsx(
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
133
|
+
children: /* @__PURE__ */ _jsx(GlideSlot, {
|
|
134
|
+
preset: "menu",
|
|
135
|
+
children: /* @__PURE__ */ _jsx(DropdownMenuPrimitive.Content, {
|
|
136
|
+
forceMount: true,
|
|
137
|
+
"data-slot": "dropdown-menu-content",
|
|
138
|
+
sideOffset,
|
|
139
|
+
align,
|
|
140
|
+
className: t4,
|
|
141
|
+
...props
|
|
142
|
+
})
|
|
139
143
|
})
|
|
140
144
|
});
|
|
141
145
|
$[7] = align;
|
|
@@ -279,7 +283,10 @@ function DropdownMenuCheckboxItem(t0) {
|
|
|
279
283
|
t2 = /* @__PURE__ */ _jsx("span", {
|
|
280
284
|
className: "pointer-events-none absolute right-2 flex items-center justify-center",
|
|
281
285
|
"data-slot": "dropdown-menu-checkbox-item-indicator",
|
|
282
|
-
children: /* @__PURE__ */ _jsx(
|
|
286
|
+
children: /* @__PURE__ */ _jsx(MotionSlot, {
|
|
287
|
+
kind: "item-check",
|
|
288
|
+
children: /* @__PURE__ */ _jsx(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ _jsx(CheckIcon, {}) })
|
|
289
|
+
})
|
|
283
290
|
});
|
|
284
291
|
$[8] = t2;
|
|
285
292
|
} else {
|
|
@@ -366,7 +373,10 @@ function DropdownMenuRadioItem(t0) {
|
|
|
366
373
|
t2 = /* @__PURE__ */ _jsx("span", {
|
|
367
374
|
className: "pointer-events-none absolute right-2 flex items-center justify-center",
|
|
368
375
|
"data-slot": "dropdown-menu-radio-item-indicator",
|
|
369
|
-
children: /* @__PURE__ */ _jsx(
|
|
376
|
+
children: /* @__PURE__ */ _jsx(MotionSlot, {
|
|
377
|
+
kind: "item-check",
|
|
378
|
+
children: /* @__PURE__ */ _jsx(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ _jsx(CheckIcon, {}) })
|
|
379
|
+
})
|
|
370
380
|
});
|
|
371
381
|
$[7] = t2;
|
|
372
382
|
} else {
|
|
@@ -639,11 +649,14 @@ function DropdownMenuSubContent(t0) {
|
|
|
639
649
|
if ($[5] !== props || $[6] !== t2) {
|
|
640
650
|
t3 = /* @__PURE__ */ _jsx(MotionSlot, {
|
|
641
651
|
kind: "surface",
|
|
642
|
-
children: /* @__PURE__ */ _jsx(
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
652
|
+
children: /* @__PURE__ */ _jsx(GlideSlot, {
|
|
653
|
+
preset: "menu",
|
|
654
|
+
children: /* @__PURE__ */ _jsx(DropdownMenuPrimitive.SubContent, {
|
|
655
|
+
forceMount: true,
|
|
656
|
+
"data-slot": "dropdown-menu-sub-content",
|
|
657
|
+
className: t2,
|
|
658
|
+
...props
|
|
659
|
+
})
|
|
647
660
|
})
|
|
648
661
|
});
|
|
649
662
|
$[5] = props;
|
package/dist/components/form.js
CHANGED
|
@@ -306,7 +306,7 @@ function FormMessage(t0) {
|
|
|
306
306
|
let t2;
|
|
307
307
|
if ($[5] !== body || $[6] !== formMessageId || $[7] !== props || $[8] !== t1) {
|
|
308
308
|
t2 = /* @__PURE__ */ _jsx(MotionSlot, {
|
|
309
|
-
kind: "
|
|
309
|
+
kind: "message",
|
|
310
310
|
children: /* @__PURE__ */ _jsx("p", {
|
|
311
311
|
"data-slot": "form-message",
|
|
312
312
|
id: formMessageId,
|
|
@@ -79,7 +79,7 @@ function RadioGroupItem(t0) {
|
|
|
79
79
|
let t3;
|
|
80
80
|
if ($[6] !== props || $[7] !== t1) {
|
|
81
81
|
t3 = /* @__PURE__ */ _jsx(MotionSlot, {
|
|
82
|
-
kind: "
|
|
82
|
+
kind: "toggle",
|
|
83
83
|
children: /* @__PURE__ */ _jsx(RadioGroupPrimitive.Item, {
|
|
84
84
|
"data-slot": "radio-group-item",
|
|
85
85
|
className: t1,
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { c as _c } from "react/compiler-runtime";
|
|
3
3
|
import * as React from "react";
|
|
4
4
|
import { Select as SelectPrimitive } from "radix-ui";
|
|
5
|
+
import { GlideSlot } from "../motion/glide-slot.js";
|
|
5
6
|
import { MotionSlot } from "../motion/motion-slot.js";
|
|
6
7
|
import { cn } from "../lib/utils.js";
|
|
7
8
|
import { ChevronDownIcon, CheckIcon, ChevronUpIcon } from "lucide-react";
|
|
@@ -115,7 +116,7 @@ function SelectTrigger(t0) {
|
|
|
115
116
|
const size = t1 === undefined ? "default" : t1;
|
|
116
117
|
let t2;
|
|
117
118
|
if ($[5] !== className) {
|
|
118
|
-
t2 = cn("flex w-fit items-center justify-between gap-1.5 rounded-lg border border-input bg-transparent py-2 pr-2 pl-2.5 text-sm whitespace-nowrap transition-colors outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-placeholder:text-muted-foreground data-[size=default]:h-8 data-[size=sm]:h-7 data-[size=sm]:rounded-[min(var(--radius-md),10px)] *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className);
|
|
119
|
+
t2 = cn("flex w-fit items-center justify-between gap-1.5 rounded-lg border data-[state=open]:*:data-[slot=select-icon]:rotate-180 border-input bg-transparent py-2 pr-2 pl-2.5 text-sm whitespace-nowrap transition-colors outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-placeholder:text-muted-foreground data-[size=default]:h-8 data-[size=sm]:h-7 data-[size=sm]:rounded-[min(var(--radius-md),10px)] *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className);
|
|
119
120
|
$[5] = className;
|
|
120
121
|
$[6] = t2;
|
|
121
122
|
} else {
|
|
@@ -125,7 +126,13 @@ function SelectTrigger(t0) {
|
|
|
125
126
|
if ($[7] === Symbol.for("react.memo_cache_sentinel")) {
|
|
126
127
|
t3 = /* @__PURE__ */ _jsx(SelectPrimitive.Icon, {
|
|
127
128
|
asChild: true,
|
|
128
|
-
children: /* @__PURE__ */ _jsx(
|
|
129
|
+
children: /* @__PURE__ */ _jsx(MotionSlot, {
|
|
130
|
+
kind: "rotate",
|
|
131
|
+
children: /* @__PURE__ */ _jsx(ChevronDownIcon, {
|
|
132
|
+
"data-slot": "select-icon",
|
|
133
|
+
className: "pointer-events-none size-4 text-muted-foreground"
|
|
134
|
+
})
|
|
135
|
+
})
|
|
129
136
|
});
|
|
130
137
|
$[7] = t3;
|
|
131
138
|
} else {
|
|
@@ -234,18 +241,21 @@ function SelectContent(t0) {
|
|
|
234
241
|
if ($[17] !== align || $[18] !== position || $[19] !== props || $[20] !== t3 || $[21] !== t5 || $[22] !== t9) {
|
|
235
242
|
t11 = /* @__PURE__ */ _jsx(SelectPrimitive.Portal, { children: /* @__PURE__ */ _jsx(MotionSlot, {
|
|
236
243
|
kind: "surface",
|
|
237
|
-
children: /* @__PURE__ */
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
244
|
+
children: /* @__PURE__ */ _jsx(GlideSlot, {
|
|
245
|
+
preset: "menu",
|
|
246
|
+
children: /* @__PURE__ */ _jsxs(SelectPrimitive.Content, {
|
|
247
|
+
"data-slot": "select-content",
|
|
248
|
+
"data-align-trigger": t3,
|
|
249
|
+
className: t5,
|
|
250
|
+
position,
|
|
251
|
+
align,
|
|
252
|
+
...props,
|
|
253
|
+
children: [
|
|
254
|
+
t6,
|
|
255
|
+
t9,
|
|
256
|
+
t10
|
|
257
|
+
]
|
|
258
|
+
})
|
|
249
259
|
})
|
|
250
260
|
}) });
|
|
251
261
|
$[17] = align;
|
|
@@ -334,7 +344,10 @@ function SelectItem(t0) {
|
|
|
334
344
|
if ($[6] === Symbol.for("react.memo_cache_sentinel")) {
|
|
335
345
|
t2 = /* @__PURE__ */ _jsx("span", {
|
|
336
346
|
className: "pointer-events-none absolute right-2 flex size-4 items-center justify-center",
|
|
337
|
-
children: /* @__PURE__ */ _jsx(
|
|
347
|
+
children: /* @__PURE__ */ _jsx(MotionSlot, {
|
|
348
|
+
kind: "item-check",
|
|
349
|
+
children: /* @__PURE__ */ _jsx(SelectPrimitive.ItemIndicator, { children: /* @__PURE__ */ _jsx(CheckIcon, { className: "pointer-events-none" }) })
|
|
350
|
+
})
|
|
338
351
|
});
|
|
339
352
|
$[6] = t2;
|
|
340
353
|
} else {
|
|
@@ -351,7 +364,7 @@ function SelectItem(t0) {
|
|
|
351
364
|
let t4;
|
|
352
365
|
if ($[9] !== props || $[10] !== t1 || $[11] !== t3) {
|
|
353
366
|
t4 = /* @__PURE__ */ _jsx(MotionSlot, {
|
|
354
|
-
kind: "
|
|
367
|
+
kind: "list-item",
|
|
355
368
|
children: /* @__PURE__ */ _jsxs(SelectPrimitive.Item, {
|
|
356
369
|
"data-slot": "select-item",
|
|
357
370
|
className: t1,
|