@botuyo/chat-widget-standalone 1.0.0 → 1.0.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.
Files changed (149) hide show
  1. package/README.md +243 -290
  2. package/dist/{ChatWidget-B6W68bT_.js → ChatWidget-BCHSZnMy.js} +17 -17
  3. package/dist/{ChatWidget-B6W68bT_.js.map → ChatWidget-BCHSZnMy.js.map} +1 -1
  4. package/dist/botuyo-chat.css +1 -1
  5. package/dist/botuyo-chat.js +1 -1
  6. package/dist/{chunk-audio-CgduwQLl.js → chunk-audio-BT2WWPfS.js} +2 -2
  7. package/dist/{chunk-audio-CgduwQLl.js.map → chunk-audio-BT2WWPfS.js.map} +1 -1
  8. package/dist/{chunk-chat-ui-EAAXXtnK.js → chunk-chat-ui-BHfnFN_3.js} +10 -10
  9. package/dist/{chunk-chat-ui-EAAXXtnK.js.map → chunk-chat-ui-BHfnFN_3.js.map} +1 -1
  10. package/dist/{chunk-gallery-B9sBFYYc.js → chunk-gallery-CHMxgXlB.js} +2 -2
  11. package/dist/{chunk-gallery-B9sBFYYc.js.map → chunk-gallery-CHMxgXlB.js.map} +1 -1
  12. package/dist/src/chat-widget/ChatWidget.d.ts +3 -0
  13. package/dist/src/chat-widget/ChatWidget.d.ts.map +1 -0
  14. package/dist/src/chat-widget/ChatWidgetProvider.d.ts +81 -0
  15. package/dist/src/chat-widget/ChatWidgetProvider.d.ts.map +1 -0
  16. package/dist/src/chat-widget/components/AudioPlayer.d.ts +8 -0
  17. package/dist/src/chat-widget/components/AudioPlayer.d.ts.map +1 -0
  18. package/dist/src/chat-widget/components/AudioPlayer.stories.d.ts +37 -0
  19. package/dist/src/chat-widget/components/AudioPlayer.stories.d.ts.map +1 -0
  20. package/dist/src/chat-widget/components/ChatWindow.d.ts +28 -0
  21. package/dist/src/chat-widget/components/ChatWindow.d.ts.map +1 -0
  22. package/dist/src/chat-widget/components/ChatWindow.stories.d.ts +71 -0
  23. package/dist/src/chat-widget/components/ChatWindow.stories.d.ts.map +1 -0
  24. package/dist/src/chat-widget/components/ErrorBoundary.d.ts +36 -0
  25. package/dist/src/chat-widget/components/ErrorBoundary.d.ts.map +1 -0
  26. package/dist/src/chat-widget/components/ErrorBoundary.stories.d.ts +29 -0
  27. package/dist/src/chat-widget/components/ErrorBoundary.stories.d.ts.map +1 -0
  28. package/dist/src/chat-widget/components/Gallery.d.ts +14 -0
  29. package/dist/src/chat-widget/components/Gallery.d.ts.map +1 -0
  30. package/dist/src/chat-widget/components/Gallery.stories.d.ts +33 -0
  31. package/dist/src/chat-widget/components/Gallery.stories.d.ts.map +1 -0
  32. package/dist/src/chat-widget/components/Icons.d.ts +7 -0
  33. package/dist/src/chat-widget/components/Icons.d.ts.map +1 -0
  34. package/dist/src/chat-widget/components/InputArea.d.ts +20 -0
  35. package/dist/src/chat-widget/components/InputArea.d.ts.map +1 -0
  36. package/dist/src/chat-widget/components/InputArea.stories.d.ts +61 -0
  37. package/dist/src/chat-widget/components/InputArea.stories.d.ts.map +1 -0
  38. package/dist/src/chat-widget/components/LanguageSelector.d.ts +25 -0
  39. package/dist/src/chat-widget/components/LanguageSelector.d.ts.map +1 -0
  40. package/dist/src/chat-widget/components/Launcher.d.ts +21 -0
  41. package/dist/src/chat-widget/components/Launcher.d.ts.map +1 -0
  42. package/dist/src/chat-widget/components/Launcher.stories.d.ts +75 -0
  43. package/dist/src/chat-widget/components/Launcher.stories.d.ts.map +1 -0
  44. package/dist/src/chat-widget/components/LiveCallInputArea.d.ts +29 -0
  45. package/dist/src/chat-widget/components/LiveCallInputArea.d.ts.map +1 -0
  46. package/dist/src/chat-widget/components/MessageBubble.d.ts +14 -0
  47. package/dist/src/chat-widget/components/MessageBubble.d.ts.map +1 -0
  48. package/dist/src/chat-widget/components/MessageBubble.stories.d.ts +70 -0
  49. package/dist/src/chat-widget/components/MessageBubble.stories.d.ts.map +1 -0
  50. package/dist/src/chat-widget/components/MessageList.d.ts +15 -0
  51. package/dist/src/chat-widget/components/MessageList.d.ts.map +1 -0
  52. package/dist/src/chat-widget/components/MessageList.stories.d.ts +52 -0
  53. package/dist/src/chat-widget/components/MessageList.stories.d.ts.map +1 -0
  54. package/dist/src/chat-widget/components/TypingIndicator.d.ts +2 -0
  55. package/dist/src/chat-widget/components/TypingIndicator.d.ts.map +1 -0
  56. package/dist/src/chat-widget/components/TypingIndicator.stories.d.ts +39 -0
  57. package/dist/src/chat-widget/components/TypingIndicator.stories.d.ts.map +1 -0
  58. package/dist/src/chat-widget/components/VoiceInputArea.d.ts +26 -0
  59. package/dist/src/chat-widget/components/VoiceInputArea.d.ts.map +1 -0
  60. package/dist/src/chat-widget/components/index.d.ts +16 -0
  61. package/dist/src/chat-widget/components/index.d.ts.map +1 -0
  62. package/dist/src/chat-widget/hooks/useAnalytics.d.ts +19 -0
  63. package/dist/src/chat-widget/hooks/useAnalytics.d.ts.map +1 -0
  64. package/dist/src/chat-widget/hooks/useChatSocket.d.ts +30 -0
  65. package/dist/src/chat-widget/hooks/useChatSocket.d.ts.map +1 -0
  66. package/dist/src/chat-widget/hooks/useChatState.d.ts +23 -0
  67. package/dist/src/chat-widget/hooks/useChatState.d.ts.map +1 -0
  68. package/dist/src/chat-widget/hooks/useChatWidget.d.ts +48 -0
  69. package/dist/src/chat-widget/hooks/useChatWidget.d.ts.map +1 -0
  70. package/dist/src/chat-widget/hooks/useDarkMode.d.ts +6 -0
  71. package/dist/src/chat-widget/hooks/useDarkMode.d.ts.map +1 -0
  72. package/dist/src/chat-widget/hooks/useDynamicHeight.d.ts +10 -0
  73. package/dist/src/chat-widget/hooks/useDynamicHeight.d.ts.map +1 -0
  74. package/dist/src/chat-widget/hooks/useFocusTrap.d.ts +34 -0
  75. package/dist/src/chat-widget/hooks/useFocusTrap.d.ts.map +1 -0
  76. package/dist/src/chat-widget/hooks/useHighContrast.d.ts +6 -0
  77. package/dist/src/chat-widget/hooks/useHighContrast.d.ts.map +1 -0
  78. package/dist/src/chat-widget/hooks/useIsMobile.d.ts +2 -0
  79. package/dist/src/chat-widget/hooks/useIsMobile.d.ts.map +1 -0
  80. package/dist/src/chat-widget/hooks/useNotifications.d.ts +23 -0
  81. package/dist/src/chat-widget/hooks/useNotifications.d.ts.map +1 -0
  82. package/dist/src/chat-widget/hooks/useRateLimit.d.ts +15 -0
  83. package/dist/src/chat-widget/hooks/useRateLimit.d.ts.map +1 -0
  84. package/dist/src/chat-widget/hooks/useSEOMetadata.d.ts +10 -0
  85. package/dist/src/chat-widget/hooks/useSEOMetadata.d.ts.map +1 -0
  86. package/dist/src/chat-widget/hooks/useWidgetTheme.d.ts +12 -0
  87. package/dist/src/chat-widget/hooks/useWidgetTheme.d.ts.map +1 -0
  88. package/dist/src/chat-widget/i18n/LanguageContext.d.ts +33 -0
  89. package/dist/src/chat-widget/i18n/LanguageContext.d.ts.map +1 -0
  90. package/dist/src/chat-widget/i18n/index.d.ts +8 -0
  91. package/dist/src/chat-widget/i18n/index.d.ts.map +1 -0
  92. package/dist/src/chat-widget/i18n/translations.d.ts +177 -0
  93. package/dist/src/chat-widget/i18n/translations.d.ts.map +1 -0
  94. package/dist/src/chat-widget/i18n/useTranslations.d.ts +27 -0
  95. package/dist/src/chat-widget/i18n/useTranslations.d.ts.map +1 -0
  96. package/dist/src/chat-widget/index.d.ts +11 -0
  97. package/dist/src/chat-widget/index.d.ts.map +1 -0
  98. package/dist/src/chat-widget/types/index.d.ts +268 -0
  99. package/dist/src/chat-widget/types/index.d.ts.map +1 -0
  100. package/dist/src/chat-widget/types/socket.d.ts +101 -0
  101. package/dist/src/chat-widget/types/socket.d.ts.map +1 -0
  102. package/dist/src/chat-widget/utils/dateUtils.d.ts +33 -0
  103. package/dist/src/chat-widget/utils/dateUtils.d.ts.map +1 -0
  104. package/dist/src/chat-widget/utils/defaultAssets.d.ts +20 -0
  105. package/dist/src/chat-widget/utils/defaultAssets.d.ts.map +1 -0
  106. package/dist/src/chat-widget/utils/deviceId.d.ts +18 -0
  107. package/dist/src/chat-widget/utils/deviceId.d.ts.map +1 -0
  108. package/dist/src/chat-widget/utils/fileValidation.d.ts +75 -0
  109. package/dist/src/chat-widget/utils/fileValidation.d.ts.map +1 -0
  110. package/dist/src/chat-widget/utils/logger.d.ts +31 -0
  111. package/dist/src/chat-widget/utils/logger.d.ts.map +1 -0
  112. package/dist/src/chat-widget/utils/performance.d.ts +50 -0
  113. package/dist/src/chat-widget/utils/performance.d.ts.map +1 -0
  114. package/dist/src/chat-widget/utils/storage.d.ts +24 -0
  115. package/dist/src/chat-widget/utils/storage.d.ts.map +1 -0
  116. package/dist/src/chat-widget/utils/theme.d.ts +122 -0
  117. package/dist/src/chat-widget/utils/theme.d.ts.map +1 -0
  118. package/dist/src/chat-widget/utils/theme.examples.d.ts +47 -0
  119. package/dist/src/chat-widget/utils/theme.examples.d.ts.map +1 -0
  120. package/dist/src/chat-widget/utils/themes/index.d.ts +12 -0
  121. package/dist/src/chat-widget/utils/themes/index.d.ts.map +1 -0
  122. package/dist/src/chat-widget/voice/components/CallButton.d.ts +12 -0
  123. package/dist/src/chat-widget/voice/components/CallButton.d.ts.map +1 -0
  124. package/dist/src/chat-widget/voice/components/LiveCallOverlay.d.ts +12 -0
  125. package/dist/src/chat-widget/voice/components/LiveCallOverlay.d.ts.map +1 -0
  126. package/dist/src/chat-widget/voice/components/VoiceButton.d.ts +13 -0
  127. package/dist/src/chat-widget/voice/components/VoiceButton.d.ts.map +1 -0
  128. package/dist/src/chat-widget/voice/components/VoiceChatOverlay.d.ts +12 -0
  129. package/dist/src/chat-widget/voice/components/VoiceChatOverlay.d.ts.map +1 -0
  130. package/dist/src/chat-widget/voice/components/WaveformVisualizer.d.ts +12 -0
  131. package/dist/src/chat-widget/voice/components/WaveformVisualizer.d.ts.map +1 -0
  132. package/dist/src/chat-widget/voice/components/index.d.ts +10 -0
  133. package/dist/src/chat-widget/voice/components/index.d.ts.map +1 -0
  134. package/dist/src/chat-widget/voice/index.d.ts +11 -0
  135. package/dist/src/chat-widget/voice/index.d.ts.map +1 -0
  136. package/dist/src/chat-widget/voice/types.d.ts +232 -0
  137. package/dist/src/chat-widget/voice/types.d.ts.map +1 -0
  138. package/dist/src/chat-widget/voice/useLiveCall.d.ts +13 -0
  139. package/dist/src/chat-widget/voice/useLiveCall.d.ts.map +1 -0
  140. package/dist/src/chat-widget/voice/useVoiceChat.d.ts +13 -0
  141. package/dist/src/chat-widget/voice/useVoiceChat.d.ts.map +1 -0
  142. package/dist/src/chat-widget/voice/useVoiceState.d.ts +38 -0
  143. package/dist/src/chat-widget/voice/useVoiceState.d.ts.map +1 -0
  144. package/dist/src/lib/utils.d.ts +3 -0
  145. package/dist/src/lib/utils.d.ts.map +1 -0
  146. package/dist/standalone.d.ts +95 -0
  147. package/dist/standalone.d.ts.map +1 -0
  148. package/dist/stats.html +1 -1
  149. package/package.json +3 -7
package/README.md CHANGED
@@ -1,208 +1,169 @@
1
- # BotUyo Chat Widget - Standalone/CDN Version
2
-
3
- Widget de chat embebible enterprise-ready que puede ser usado en cualquier sitio web sin necesidad de React, Next.js u otros frameworks. También disponible como componente React con Provider y hooks.
4
-
5
- ## 🎉 Última Actualización (25 Enero 2026)
6
-
7
- **Stack Modernizado + Optimización en Progreso**
8
-
9
- ### ✅ Completado
10
- - 🚀 **React 19.2.3** - Última versión estable con concurrent features
11
- - ⚡ **Vite 7.3.1** - Build tool más rápido y optimizado
12
- - 📏 **ESLint 9.39.2** - Migrado a flat config (eslint.config.js)
13
- - 🟢 **Node.js 22.22.0** - LTS actual
14
- - 🔧 **TypeScript ESLint 8.53.1** - Mejores reglas de linting
15
-
16
- ### ✅ Code Splitting Completado (26 Ene 2026)
17
- - ✅ **Code Splitting Implementado**: 7 chunks separados
18
- - ✅ **33% Reducción**: Carga inicial de 306KB → 208KB gzip
19
- - ✅ **ES Module Format**: Lazy loading real con chunks
20
- - ✅ **React.lazy() + Suspense**: ChatWidget bajo demanda
21
- - 📦 **Bundle**: 683KB inicial + 324KB lazy (total 1,007KB)
22
-
23
- ### 🔄 En Optimización (Semana 4)
24
- - ⏳ **Lazy Loading Adicional**: Gallery y AudioPlayer
25
- - 📋 **CSS Optimization**: cssnano compression
26
- - 📋 **Preload Hints**: Recursos críticos
27
-
28
- ### 📊 Estado del Proyecto
29
- - ✅ **Build**: Exitoso (Vite 7.3.1)
30
- - ✅ **Tests**: 616/626 pasando (98.4%)
31
- - 📦 **Bundle**: 1,021 kB JS (306 kB gzip), 45 kB CSS (8.7 kB gzip)
32
- - ⏳ **Optimización**: Code splitting en implementación
33
- - ✅ **Lint**: 0 errores, 9 warnings informativos
34
- - ✅ **TypeScript**: Tipos generados correctamente
35
-
36
- ### 🔧 Cambios Técnicos Recientes
37
- - Creado `vite.config.mjs` (JavaScript puro, evita transpilación)
38
- - Migrado a `eslint.config.js` (flat config ESLint 9)
39
- - Agregado `.nvmrc` para fijar Node 22
40
- - Actualizado `tsconfig.json` con `esModuleInterop`
41
- - Test fixes para React 19 concurrent rendering
42
- - Instalado `rollup-plugin-visualizer` para análisis de bundle
43
-
44
- 📖 **[Ver roadmap completo en MEJORAS_PROPUESTAS.md](./MEJORAS_PROPUESTAS.md)**
45
- 🎯 **[Ver plan de optimización en OPTIMIZATION_PLAN.md](./OPTIMIZATION_PLAN.md)**
46
- 📊 **[Ver estado actual en STATUS.md](./STATUS.md)**
1
+ # BotUyo Chat Widget
47
2
 
48
- ---
49
-
50
- ## 🎨 Theme Builder (Herramienta de Configuración)
51
-
52
- **[Abre el Theme Builder](./theme-builder.html)** - Herramienta visual para crear y personalizar temas en tiempo real.
3
+ Widget de chat AI embebible enterprise-ready. Disponible via **NPM** y **CDN** para cualquier sitio web.
53
4
 
54
- Características:
55
- - 🎨 **5 Temas Predefinidos**: Default, Ocean, Sunset, Midnight, Nature
56
- - 🖌️ **Editor Visual**: Personaliza colores, espaciado, dimensiones
57
- - 👁️ **Preview en Vivo**: Ve los cambios en tiempo real
58
- - 📋 **Copiar Config**: Exporta la configuración lista para usar
59
- - 🎯 **Para Dashboard**: Herramienta oficial para generar configs de clientes
5
+ [![npm version](https://badge.fury.io/js/%40botuyo%2Fchat-widget-standalone.svg)](https://www.npmjs.com/package/@botuyo/chat-widget-standalone)
6
+ [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT)
60
7
 
61
- ## 📚 Documentación
62
- - **[🎯 Roadmap y Mejoras](./MEJORAS_PROPUESTAS.md)** - Estado actual y próximos pasos
63
- - **[✅ Cobertura de Personalización](./CUSTOMIZATION_COVERAGE.md)** - ¡TODO lo que puedes personalizar!
64
- - **[🎯 Guía Rápida de Temas](./QUICK_THEME_SETUP.md)** - ¡Empieza aquí si el widget se ve transparente!
65
- - **[🎨 Guía Completa de Personalización](./THEME_GUIDE.md)** - Temas, colores y ejemplos avanzados
66
- - **[📖 Documentación CSS Variables](./CSS_CUSTOMIZATION.md)** - Detalles técnicos del sistema de diseño
8
+ ---
67
9
 
68
10
  ## 🚀 Instalación Rápida
69
11
 
70
12
  ### Opción 1: CDN (JavaScript Vanilla)
71
13
 
72
- Agrega este código antes del cierre del `</body>` en tu HTML:
14
+ Agrega este código antes del cierre de `</body>`:
73
15
 
74
16
  ```html
75
17
  <!-- BotUyo Chat Widget -->
76
- <script src="https://cdn.botuyo.com/chat-widget.js"></script>
77
- <script>
18
+ <script type="module" src="https://cdn.jsdelivr.net/npm/@botuyo/chat-widget-standalone@1.0.0/dist/botuyo-chat.js"></script>
19
+ <script type="module">
78
20
  BotUyoChat.init({
79
21
  apiKey: 'tu-api-key-aqui',
80
22
  apiBaseUrl: 'https://api.botuyo.com',
81
23
  theme: {
82
- primaryColor: 'hsl(160, 84%, 39%)',
24
+ primaryColor: '#10b981',
83
25
  botName: 'Asistente BotUyo',
84
- position: 'bottom-right',
85
- // ⚠️ IMPORTANTE: Variables CSS necesarias
86
- cssVariables: {
87
- background: '0 0% 100%', // Fondo blanco
88
- foreground: '240 10% 3.9%', // Texto oscuro
89
- primary: '160 84% 39%', // Color principal
90
- // ... Ver QUICK_THEME_SETUP.md para más opciones
91
- }
26
+ position: 'bottom-right'
92
27
  }
93
28
  });
94
29
  </script>
95
30
  ```
96
31
 
32
+ **CDN Alternativo (unpkg):**
33
+ ```html
34
+ <script type="module" src="https://unpkg.com/@botuyo/chat-widget-standalone@1.0.0/dist/botuyo-chat.js"></script>
35
+ ```
36
+
97
37
  ### Opción 2: NPM Package (React/Next.js)
98
38
 
99
- **Instalación:**
100
39
  ```bash
101
40
  npm install @botuyo/chat-widget-standalone
102
41
  ```
103
42
 
104
- **Uso con Provider:**
105
- ```tsx
106
- import { ChatWidgetProvider, useChatWidget } from '@botuyo/chat-widget-standalone';
107
-
108
- function App() {
109
- return (
110
- <ChatWidgetProvider
111
- apiKey="tu-api-key-aqui"
112
- apiBaseUrl="https://api.botuyo.com"
113
- theme={{
114
- primaryColor: 'hsl(160, 84%, 39%)',
115
- // ⚠️ IMPORTANTE: Variables CSS necesarias
116
- cssVariables: {
117
- background: '0 0% 100%',
118
- foreground: '240 10% 3.9%',
119
- primary: '160 84% 39%',
120
- // ... Ver QUICK_THEME_SETUP.md para configuración completa
121
- }
122
- }}
123
- >
124
- <YourApp />
125
- </ChatWidgetProvider>
126
- );
127
- }
128
-
129
- // En cualquier componente:
130
- function MyComponent() {
131
- const chat = useChatWidget();
132
- return <button onClick={chat.open}>Abrir Chat</button>;
133
- }
134
- ```
135
-
136
43
  **Uso directo:**
137
44
  ```tsx
138
- import { ChatWidget } from '@botuyo/chat-widget-standalone';
139
-
140
- function App() {
141
- return (
142
- <ChatWidget
143
- apiKey="tu-api-key-aqui"
144
- apiBaseUrl="https://api.botuyo.com"
145
- theme={{
146
- primaryColor: 'hsl(160, 84%, 39%)',
147
- cssVariables: {
148
- background: '0 0% 100%',
149
- foreground: '240 10% 3.9%',
150
- primary: '160 84% 39%',
151
- }
152
- }}
153
- />
154
- );
155
- }
45
+ import BotUyoChat from '@botuyo/chat-widget-standalone';
46
+
47
+ // En tu componente o useEffect
48
+ BotUyoChat.init({
49
+ apiKey: 'tu-api-key-aqui',
50
+ apiBaseUrl: 'https://api.botuyo.com',
51
+ theme: {
52
+ primaryColor: '#10b981',
53
+ botName: 'Asistente Virtual'
54
+ }
55
+ });
156
56
  ```
157
57
 
158
- ## ⚙️ Configuración
58
+ ---
159
59
 
160
- ### Opciones Disponibles
60
+ ## ⚙️ Configuración Completa
161
61
 
162
62
  ```typescript
163
63
  interface StandaloneConfig {
164
- // Requerido
64
+ // ═══════════════════════════════════════════
65
+ // REQUERIDO
66
+ // ═══════════════════════════════════════════
165
67
  apiKey: string; // Tu API key de BotUyo
166
- apiBaseUrl: string; // URL del backend Socket.IO
68
+ apiBaseUrl: string; // URL del backend (ej: https://api.botuyo.com)
167
69
 
168
- // Tema (opcional)
70
+ // ═══════════════════════════════════════════
71
+ // TEMA (opcional)
72
+ // ═══════════════════════════════════════════
169
73
  theme?: {
170
- primaryColor?: string; // Color principal (default: '#10b981')
171
- botName?: string; // Nombre del bot (default: 'Asistente Virtual')
172
- logoUrl?: string; // URL del logo (default: '/avatar/mar_default.webp')
74
+ primaryColor?: string; // Color principal (default: '#10b981')
75
+ botName?: string; // Nombre del bot (default: 'Asistente Virtual')
76
+ logoUrl?: string; // URL del avatar del bot
173
77
  position?: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left';
174
- welcomeMessage?: string; // Mensaje de bienvenida
175
- inputPlaceholder?: string; // Placeholder del input
176
- borderRadius?: string; // Border radius (default: '0.75rem')
177
- launcherBorderRadius?: string; // Border radius del botón (default: '50%')
78
+ welcomeMessage?: string; // Mensaje de bienvenida inicial
79
+ inputPlaceholder?: string; // Placeholder del input (default: 'Escribe tu mensaje...')
80
+ borderRadius?: string; // Border radius ventana (default: '0.75rem')
81
+ launcherBorderRadius?: string; // Border radius botón (default: '50%')
82
+ starterPrompt?: string; // Prompt inicial sugerido
83
+ avatarScale?: number; // Escala del avatar (default: 1)
84
+
85
+ // Variables CSS para control total del tema
86
+ cssVariables?: {
87
+ background?: string; // HSL sin paréntesis: '0 0% 100%'
88
+ foreground?: string; // Color del texto
89
+ card?: string; // Fondo de cards
90
+ cardForeground?: string; // Texto en cards
91
+ primary?: string; // Color primario
92
+ primaryForeground?: string; // Texto sobre primario
93
+ muted?: string; // Color muted
94
+ mutedForeground?: string; // Texto muted
95
+ border?: string; // Color de bordes
96
+ destructive?: string; // Color de errores
97
+ radius?: string; // Border radius global
98
+ };
99
+
100
+ // Estilos de burbujas
101
+ bubbleStyles?: {
102
+ radius?: {
103
+ bubble?: string;
104
+ image?: string;
105
+ button?: string;
106
+ card?: string;
107
+ };
108
+ bot?: {
109
+ bg?: string;
110
+ text?: string;
111
+ border?: string;
112
+ };
113
+ user?: {
114
+ text?: string;
115
+ };
116
+ launcher?: {
117
+ bg?: string;
118
+ pulse?: boolean;
119
+ };
120
+ };
178
121
  };
179
122
 
180
- // Contexto del usuario (opcional)
123
+ // ═══════════════════════════════════════════
124
+ // CONTEXTO DEL USUARIO (opcional)
125
+ // ═══════════════════════════════════════════
181
126
  userContext?: {
182
- token?: string; // Token de autenticación
183
- metadata?: any; // Metadata adicional
127
+ token?: string; // Token de autenticación del usuario
128
+ metadata?: { // Metadata adicional del usuario
129
+ userId?: string;
130
+ email?: string;
131
+ name?: string;
132
+ [key: string]: any;
133
+ };
184
134
  };
185
135
 
186
- // Contexto de la página (opcional)
136
+ // ═══════════════════════════════════════════
137
+ // CONTEXTO DE LA PÁGINA (opcional)
138
+ // ═══════════════════════════════════════════
187
139
  pageContext?: {
188
- url?: string;
189
- title?: string;
190
- path?: string;
191
- referrer?: string;
140
+ page?: string; // Identificador de la página
141
+ id?: string | number; // ID del recurso actual
142
+ url?: string; // URL actual
143
+ title?: string; // Título de la página
144
+ path?: string; // Path de la URL
145
+ referrer?: string; // Página de origen
146
+ [key: string]: any; // Metadata adicional
192
147
  };
193
148
 
149
+ // ═══════════════════════════════════════════
194
150
  // SEO (opcional)
151
+ // ═══════════════════════════════════════════
195
152
  includeSEOMetadata?: boolean; // Incluir metadata SEO (default: false)
196
153
 
197
- // Callbacks (opcional)
198
- onNavigate?: (url: string) => void;
199
- onLogin?: (loginUrl: string) => void;
200
- onEvent?: (eventName: string, data: any) => void;
201
- onStateChange?: (isOpen: boolean) => void;
154
+ // ═══════════════════════════════════════════
155
+ // CALLBACKS (opcional)
156
+ // ═══════════════════════════════════════════
157
+ onNavigate?: (url: string) => void; // Cuando el bot sugiere navegar
158
+ onLogin?: (userData: any) => void; // Cuando el usuario se autentica
159
+ onEvent?: (eventName: string, data: any) => void; // Eventos personalizados
160
+ onStateChange?: (isOpen: boolean) => void; // Cuando el chat se abre/cierra
202
161
  }
203
162
  ```
204
163
 
205
- ## 📚 Ejemplos de Uso
164
+ ---
165
+
166
+ ## 📚 Ejemplos
206
167
 
207
168
  ### Ejemplo Básico
208
169
 
@@ -213,13 +174,13 @@ interface StandaloneConfig {
213
174
  <title>Mi Sitio Web</title>
214
175
  </head>
215
176
  <body>
216
- <h1>Bienvenido a mi sitio</h1>
177
+ <h1>Bienvenido</h1>
217
178
 
218
- <script src="https://cdn.botuyo.com/chat-widget.js"></script>
219
- <script>
179
+ <script type="module" src="https://cdn.jsdelivr.net/npm/@botuyo/chat-widget-standalone@1.0.0/dist/botuyo-chat.js"></script>
180
+ <script type="module">
220
181
  BotUyoChat.init({
221
182
  apiKey: 'demo-key-12345',
222
- apiBaseUrl: 'http://localhost:4000'
183
+ apiBaseUrl: 'https://api.botuyo.com'
223
184
  });
224
185
  </script>
225
186
  </body>
@@ -229,33 +190,41 @@ interface StandaloneConfig {
229
190
  ### Ejemplo con Personalización Completa
230
191
 
231
192
  ```html
232
- <script>
193
+ <script type="module">
233
194
  BotUyoChat.init({
234
195
  apiKey: 'mi-api-key',
235
196
  apiBaseUrl: 'https://api.botuyo.com',
236
197
 
237
198
  theme: {
238
- primaryColor: '#ff6b6b',
239
- botName: 'Asistente Virtual de Mi Empresa',
199
+ primaryColor: '#6366f1',
200
+ botName: 'Asistente de Mi Empresa',
240
201
  logoUrl: 'https://mi-sitio.com/logo.png',
241
202
  position: 'bottom-left',
242
- welcomeMessage: '¡Hola! ¿Necesitas ayuda?',
203
+ welcomeMessage: '¡Hola! 👋 ¿En qué puedo ayudarte hoy?',
243
204
  inputPlaceholder: 'Pregúntame lo que quieras...',
205
+ cssVariables: {
206
+ background: '0 0% 100%',
207
+ foreground: '240 10% 3.9%',
208
+ primary: '239 84% 67%',
209
+ card: '0 0% 100%',
210
+ border: '240 6% 90%'
211
+ }
244
212
  },
245
213
 
246
214
  userContext: {
247
- token: 'user-auth-token',
215
+ token: 'user-auth-token-jwt',
248
216
  metadata: {
249
217
  userId: '12345',
250
- email: 'user@example.com'
218
+ email: 'usuario@ejemplo.com',
219
+ plan: 'premium'
251
220
  }
252
221
  },
253
222
 
254
223
  pageContext: {
224
+ page: 'producto',
225
+ id: 'SKU-12345',
255
226
  url: window.location.href,
256
- title: document.title,
257
- path: window.location.pathname,
258
- referrer: document.referrer
227
+ title: document.title
259
228
  },
260
229
 
261
230
  onNavigate: (url) => {
@@ -264,175 +233,159 @@ interface StandaloneConfig {
264
233
  },
265
234
 
266
235
  onEvent: (eventName, data) => {
267
- console.log('Evento recibido:', eventName, data);
236
+ console.log('Evento:', eventName, data);
268
237
 
269
- // Manejo de eventos personalizados
270
- if (eventName === 'reservation_created') {
271
- alert('¡Reserva creada! ID: ' + data.reservationId);
238
+ if (eventName === 'lead_captured') {
239
+ // Enviar a tu CRM
240
+ sendToCRM(data);
272
241
  }
273
242
  },
274
243
 
275
244
  onStateChange: (isOpen) => {
276
- console.log('Chat está', isOpen ? 'abierto' : 'cerrado');
245
+ console.log('Chat:', isOpen ? 'abierto' : 'cerrado');
246
+ // Analytics
247
+ gtag('event', isOpen ? 'chat_opened' : 'chat_closed');
277
248
  }
278
249
  });
279
250
  </script>
280
251
  ```
281
252
 
282
- ### Ejemplo con Control Programático
253
+ ### Control Programático
283
254
 
284
- ```html
285
- <script>
286
- // Inicializar
287
- const chat = BotUyoChat.init({
288
- apiKey: 'demo-key',
289
- apiBaseUrl: 'http://localhost:4000'
290
- });
255
+ ```javascript
256
+ // Inicializar
257
+ BotUyoChat.init({
258
+ apiKey: 'mi-api-key',
259
+ apiBaseUrl: 'https://api.botuyo.com'
260
+ });
291
261
 
292
- // Abrir el chat programáticamente
293
- document.getElementById('btnAbrir').addEventListener('click', () => {
294
- BotUyoChat.open();
295
- });
262
+ // Abrir el chat
263
+ document.getElementById('btn-ayuda').onclick = () => {
264
+ BotUyoChat.open();
265
+ };
296
266
 
297
- // Cerrar el chat programáticamente
298
- document.getElementById('btnCerrar').addEventListener('click', () => {
299
- BotUyoChat.close();
300
- });
267
+ // Cerrar el chat
268
+ BotUyoChat.close();
301
269
 
302
- // Enviar un mensaje programáticamente
303
- document.getElementById('btnEnviar').addEventListener('click', () => {
304
- BotUyoChat.sendMessage('Hola, necesito ayuda');
305
- });
270
+ // Enviar mensaje programáticamente
271
+ BotUyoChat.sendMessage('Necesito ayuda con mi pedido #12345');
306
272
 
307
- // Destruir el widget
308
- document.getElementById('btnDestruir').addEventListener('click', () => {
309
- BotUyoChat.destroy();
310
- });
273
+ // Actualizar configuración en tiempo real
274
+ BotUyoChat.update({
275
+ theme: {
276
+ primaryColor: '#ef4444',
277
+ botName: 'Soporte Urgente'
278
+ }
279
+ });
311
280
 
312
- // Actualizar configuración
313
- document.getElementById('btnActualizar').addEventListener('click', () => {
314
- BotUyoChat.update({
315
- theme: {
316
- primaryColor: '#ff6b6b',
317
- botName: 'Nuevo Nombre'
318
- }
319
- });
320
- });
321
- </script>
281
+ // Destruir el widget
282
+ BotUyoChat.destroy();
322
283
  ```
323
284
 
324
- ## 🛠️ API Pública
325
-
326
- ### `BotUyoChat.init(config)`
327
-
328
- Inicializa el widget con la configuración proporcionada.
329
-
330
- **Retorna**: Instancia del widget para encadenamiento.
331
-
332
- ### `BotUyoChat.open()`
333
-
334
- Abre la ventana del chat programáticamente.
335
-
336
- ### `BotUyoChat.close()`
337
-
338
- Cierra la ventana del chat programáticamente.
339
-
340
- ### `BotUyoChat.sendMessage(message)`
341
-
342
- Envía un mensaje al chat programáticamente.
343
-
344
- **Parámetros**:
345
- - `message` (string): El mensaje a enviar.
346
-
347
- ### `BotUyoChat.update(config)`
348
-
349
- Actualiza la configuración del widget sin reiniciarlo.
285
+ ---
350
286
 
351
- **Parámetros**:
352
- - `config` (Partial<StandaloneConfig>): Configuración parcial a actualizar.
287
+ ## 🛠️ API Pública
353
288
 
354
- ### `BotUyoChat.destroy()`
289
+ | Método | Descripción |
290
+ |--------|-------------|
291
+ | `BotUyoChat.init(config)` | Inicializa el widget. Retorna la instancia. |
292
+ | `BotUyoChat.open()` | Abre la ventana del chat |
293
+ | `BotUyoChat.close()` | Cierra la ventana del chat |
294
+ | `BotUyoChat.sendMessage(message)` | Envía un mensaje programáticamente |
295
+ | `BotUyoChat.update(config)` | Actualiza la configuración sin reiniciar |
296
+ | `BotUyoChat.destroy()` | Destruye el widget y limpia recursos |
355
297
 
356
- Destruye el widget y limpia todos los recursos.
298
+ ---
357
299
 
358
- ## 🎨 Personalización de Estilos
300
+ ## 🎨 Temas Predefinidos
359
301
 
360
- El widget utiliza variables CSS que puedes sobrescribir:
302
+ ### Tema Claro (Default)
303
+ ```javascript
304
+ cssVariables: {
305
+ background: '0 0% 100%',
306
+ foreground: '240 10% 3.9%',
307
+ primary: '160 84% 39%',
308
+ card: '0 0% 100%',
309
+ border: '240 6% 90%'
310
+ }
311
+ ```
361
312
 
362
- ```html
363
- <style>
364
- /* Sobrescribir estilos del widget */
365
- #botuyo-chat-widget-root {
366
- /* Tus estilos personalizados */
367
- }
313
+ ### Tema Oscuro
314
+ ```javascript
315
+ cssVariables: {
316
+ background: '240 10% 3.9%',
317
+ foreground: '0 0% 98%',
318
+ primary: '160 84% 39%',
319
+ card: '240 4% 16%',
320
+ border: '240 4% 20%'
321
+ }
322
+ ```
368
323
 
369
- /* Variables CSS globales */
370
- :root {
371
- --paseo-chat-primary: #10b981;
372
- --paseo-chat-background: #ffffff;
373
- --paseo-chat-text: #1f2937;
374
- --paseo-chat-border: #e5e7eb;
324
+ ### Tema Ocean
325
+ ```javascript
326
+ theme: {
327
+ primaryColor: '#0ea5e9',
328
+ cssVariables: {
329
+ background: '200 50% 98%',
330
+ foreground: '200 50% 10%',
331
+ primary: '199 89% 48%'
375
332
  }
376
- </style>
333
+ }
377
334
  ```
378
335
 
379
- ## 🧪 Testing Local
336
+ ---
380
337
 
381
- Para probar el widget localmente:
338
+ ## 🌐 Compatibilidad
382
339
 
383
- 1. Clona el repositorio
384
- 2. Instala dependencias:
385
- ```bash
386
- c� Documentación
340
+ | Navegador | Versión Mínima |
341
+ |-----------|----------------|
342
+ | Chrome | 90+ |
343
+ | Firefox | 88+ |
344
+ | Safari | 14+ |
345
+ | Edge | 90+ |
346
+ | iOS Safari | 14+ |
347
+ | Chrome Mobile | 90+ |
387
348
 
388
- - **[Guía de Inicio Rápido](QUICK_START.md)** - Comienza en 5 minutos
389
- - **[Guía de Instalación Completa](INSTALLATION_GUIDE.md)** - Instrucciones detalladas para CDN y React
390
- - **[Checklist de Verificación](VERIFICATION_CHECKLIST.md)** - Verifica que todo funcione correctamente
391
- - **[Resumen de Implementación](INSTALLATION_SUMMARY.md)** - Resumen técnico completo
392
- - **[Ejemplos](examples/)** - Ejemplos funcionales (CDN, React, Next.js)
349
+ ---
393
350
 
394
- ## �d standalone-widget
395
- npm install
396
- ```
351
+ ## 📦 Build Local
397
352
 
398
- 3. Inicia el servidor de desarrollo:
399
- ```bash
400
- npm run dev
401
- ```
353
+ ```bash
354
+ # Clonar repositorio
355
+ git clone https://github.com/botuyo/chat-widget.git
356
+ cd chat-widget
402
357
 
403
- 4. Abre `http://localhost:3001` en tu navegador
358
+ # Instalar dependencias
359
+ npm install
404
360
 
405
- ## 📦 Build para Producción
361
+ # Desarrollo
362
+ npm run dev
406
363
 
407
- ```bash
364
+ # Build producción
408
365
  npm run build
409
- ```
410
366
 
411
- Esto generará:
412
- - `dist/botuyo-chat.js` - Bundle minificado para CDN
413
- - `dist/botuyo-chat.css` - Estilos del widget
414
- - `dist/botuyo-chat.js.map` - Source map para debugging
367
+ # Tests
368
+ npm test
369
+ ```
415
370
 
416
- ## 🌐 Compatibilidad
371
+ **Archivos generados:**
372
+ - `dist/botuyo-chat.js` - Bundle principal (~3KB, carga chunks lazy)
373
+ - `dist/botuyo-chat.css` - Estilos (~25KB)
374
+ - `dist/vendor-react-*.js` - React (~194KB, lazy)
375
+ - `dist/chunk-chat-ui-*.js` - UI del chat (~89KB, lazy)
417
376
 
418
- - ✅ Chrome 90+
419
- - ✅ Firefox 88+
420
- - ✅ Safari 14+
421
- - ✅ Edge 90+
422
- - ✅ Mobile browsers (iOS Safari, Chrome Mobile)
377
+ ---
423
378
 
424
379
  ## 📄 Licencia
425
380
 
426
- MIT License - © 2025 BotUyo
381
+ MIT License - © 2026 BotUyo
427
382
 
428
- ## 🆘 Soporte
429
-
430
- - 📧 Email: soporte@botuyo.com
431
- - 💬 Chat: https://botuyo.com/soporte
432
- - 📖 Docs: https://docs.botuyo.com/chat-widget
383
+ ---
433
384
 
434
385
  ## 🔗 Links
435
386
 
436
- - [Documentación completa](https://docs.botuyo.com)
437
- - [Ejemplos en vivo](https://botuyo.com/widget-demo)
438
- - [Repositorio GitHub](https://github.com/botuyo/chat-widget)
387
+ - **NPM**: [npmjs.com/package/@botuyo/chat-widget-standalone](https://www.npmjs.com/package/@botuyo/chat-widget-standalone)
388
+ - **CDN jsDelivr**: `https://cdn.jsdelivr.net/npm/@botuyo/chat-widget-standalone@1.0.0/dist/botuyo-chat.js`
389
+ - **CDN unpkg**: `https://unpkg.com/@botuyo/chat-widget-standalone@1.0.0/dist/botuyo-chat.js`
390
+ - **Documentación**: [docs.botuyo.com](https://docs.botuyo.com)
391
+ - **Soporte**: soporte@botuyo.com