@botuyo/chat-widget-standalone 1.0.0 → 1.0.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/README.md +243 -290
- package/dist/{ChatWidget-B6W68bT_.js → ChatWidget-BCHSZnMy.js} +17 -17
- package/dist/{ChatWidget-B6W68bT_.js.map → ChatWidget-BCHSZnMy.js.map} +1 -1
- package/dist/botuyo-chat.css +1 -1
- package/dist/botuyo-chat.js +1 -1
- package/dist/{chunk-audio-CgduwQLl.js → chunk-audio-BT2WWPfS.js} +2 -2
- package/dist/{chunk-audio-CgduwQLl.js.map → chunk-audio-BT2WWPfS.js.map} +1 -1
- package/dist/{chunk-chat-ui-EAAXXtnK.js → chunk-chat-ui-BHfnFN_3.js} +10 -10
- package/dist/{chunk-chat-ui-EAAXXtnK.js.map → chunk-chat-ui-BHfnFN_3.js.map} +1 -1
- package/dist/{chunk-gallery-B9sBFYYc.js → chunk-gallery-CHMxgXlB.js} +2 -2
- package/dist/{chunk-gallery-B9sBFYYc.js.map → chunk-gallery-CHMxgXlB.js.map} +1 -1
- package/dist/src/chat-widget/ChatWidget.d.ts +3 -0
- package/dist/src/chat-widget/ChatWidget.d.ts.map +1 -0
- package/dist/src/chat-widget/ChatWidgetProvider.d.ts +81 -0
- package/dist/src/chat-widget/ChatWidgetProvider.d.ts.map +1 -0
- package/dist/src/chat-widget/components/AudioPlayer.d.ts +8 -0
- package/dist/src/chat-widget/components/AudioPlayer.d.ts.map +1 -0
- package/dist/src/chat-widget/components/AudioPlayer.stories.d.ts +37 -0
- package/dist/src/chat-widget/components/AudioPlayer.stories.d.ts.map +1 -0
- package/dist/src/chat-widget/components/ChatWindow.d.ts +28 -0
- package/dist/src/chat-widget/components/ChatWindow.d.ts.map +1 -0
- package/dist/src/chat-widget/components/ChatWindow.stories.d.ts +71 -0
- package/dist/src/chat-widget/components/ChatWindow.stories.d.ts.map +1 -0
- package/dist/src/chat-widget/components/ErrorBoundary.d.ts +36 -0
- package/dist/src/chat-widget/components/ErrorBoundary.d.ts.map +1 -0
- package/dist/src/chat-widget/components/ErrorBoundary.stories.d.ts +29 -0
- package/dist/src/chat-widget/components/ErrorBoundary.stories.d.ts.map +1 -0
- package/dist/src/chat-widget/components/Gallery.d.ts +14 -0
- package/dist/src/chat-widget/components/Gallery.d.ts.map +1 -0
- package/dist/src/chat-widget/components/Gallery.stories.d.ts +33 -0
- package/dist/src/chat-widget/components/Gallery.stories.d.ts.map +1 -0
- package/dist/src/chat-widget/components/Icons.d.ts +7 -0
- package/dist/src/chat-widget/components/Icons.d.ts.map +1 -0
- package/dist/src/chat-widget/components/InputArea.d.ts +20 -0
- package/dist/src/chat-widget/components/InputArea.d.ts.map +1 -0
- package/dist/src/chat-widget/components/InputArea.stories.d.ts +61 -0
- package/dist/src/chat-widget/components/InputArea.stories.d.ts.map +1 -0
- package/dist/src/chat-widget/components/LanguageSelector.d.ts +25 -0
- package/dist/src/chat-widget/components/LanguageSelector.d.ts.map +1 -0
- package/dist/src/chat-widget/components/Launcher.d.ts +21 -0
- package/dist/src/chat-widget/components/Launcher.d.ts.map +1 -0
- package/dist/src/chat-widget/components/Launcher.stories.d.ts +75 -0
- package/dist/src/chat-widget/components/Launcher.stories.d.ts.map +1 -0
- package/dist/src/chat-widget/components/LiveCallInputArea.d.ts +29 -0
- package/dist/src/chat-widget/components/LiveCallInputArea.d.ts.map +1 -0
- package/dist/src/chat-widget/components/MessageBubble.d.ts +14 -0
- package/dist/src/chat-widget/components/MessageBubble.d.ts.map +1 -0
- package/dist/src/chat-widget/components/MessageBubble.stories.d.ts +70 -0
- package/dist/src/chat-widget/components/MessageBubble.stories.d.ts.map +1 -0
- package/dist/src/chat-widget/components/MessageList.d.ts +15 -0
- package/dist/src/chat-widget/components/MessageList.d.ts.map +1 -0
- package/dist/src/chat-widget/components/MessageList.stories.d.ts +52 -0
- package/dist/src/chat-widget/components/MessageList.stories.d.ts.map +1 -0
- package/dist/src/chat-widget/components/TypingIndicator.d.ts +2 -0
- package/dist/src/chat-widget/components/TypingIndicator.d.ts.map +1 -0
- package/dist/src/chat-widget/components/TypingIndicator.stories.d.ts +39 -0
- package/dist/src/chat-widget/components/TypingIndicator.stories.d.ts.map +1 -0
- package/dist/src/chat-widget/components/VoiceInputArea.d.ts +26 -0
- package/dist/src/chat-widget/components/VoiceInputArea.d.ts.map +1 -0
- package/dist/src/chat-widget/components/index.d.ts +16 -0
- package/dist/src/chat-widget/components/index.d.ts.map +1 -0
- package/dist/src/chat-widget/hooks/useAnalytics.d.ts +19 -0
- package/dist/src/chat-widget/hooks/useAnalytics.d.ts.map +1 -0
- package/dist/src/chat-widget/hooks/useChatSocket.d.ts +30 -0
- package/dist/src/chat-widget/hooks/useChatSocket.d.ts.map +1 -0
- package/dist/src/chat-widget/hooks/useChatState.d.ts +23 -0
- package/dist/src/chat-widget/hooks/useChatState.d.ts.map +1 -0
- package/dist/src/chat-widget/hooks/useChatWidget.d.ts +48 -0
- package/dist/src/chat-widget/hooks/useChatWidget.d.ts.map +1 -0
- package/dist/src/chat-widget/hooks/useDarkMode.d.ts +6 -0
- package/dist/src/chat-widget/hooks/useDarkMode.d.ts.map +1 -0
- package/dist/src/chat-widget/hooks/useDynamicHeight.d.ts +10 -0
- package/dist/src/chat-widget/hooks/useDynamicHeight.d.ts.map +1 -0
- package/dist/src/chat-widget/hooks/useFocusTrap.d.ts +34 -0
- package/dist/src/chat-widget/hooks/useFocusTrap.d.ts.map +1 -0
- package/dist/src/chat-widget/hooks/useHighContrast.d.ts +6 -0
- package/dist/src/chat-widget/hooks/useHighContrast.d.ts.map +1 -0
- package/dist/src/chat-widget/hooks/useIsMobile.d.ts +2 -0
- package/dist/src/chat-widget/hooks/useIsMobile.d.ts.map +1 -0
- package/dist/src/chat-widget/hooks/useNotifications.d.ts +23 -0
- package/dist/src/chat-widget/hooks/useNotifications.d.ts.map +1 -0
- package/dist/src/chat-widget/hooks/useRateLimit.d.ts +15 -0
- package/dist/src/chat-widget/hooks/useRateLimit.d.ts.map +1 -0
- package/dist/src/chat-widget/hooks/useSEOMetadata.d.ts +10 -0
- package/dist/src/chat-widget/hooks/useSEOMetadata.d.ts.map +1 -0
- package/dist/src/chat-widget/hooks/useWidgetTheme.d.ts +12 -0
- package/dist/src/chat-widget/hooks/useWidgetTheme.d.ts.map +1 -0
- package/dist/src/chat-widget/i18n/LanguageContext.d.ts +33 -0
- package/dist/src/chat-widget/i18n/LanguageContext.d.ts.map +1 -0
- package/dist/src/chat-widget/i18n/index.d.ts +8 -0
- package/dist/src/chat-widget/i18n/index.d.ts.map +1 -0
- package/dist/src/chat-widget/i18n/translations.d.ts +177 -0
- package/dist/src/chat-widget/i18n/translations.d.ts.map +1 -0
- package/dist/src/chat-widget/i18n/useTranslations.d.ts +27 -0
- package/dist/src/chat-widget/i18n/useTranslations.d.ts.map +1 -0
- package/dist/src/chat-widget/index.d.ts +11 -0
- package/dist/src/chat-widget/index.d.ts.map +1 -0
- package/dist/src/chat-widget/types/index.d.ts +268 -0
- package/dist/src/chat-widget/types/index.d.ts.map +1 -0
- package/dist/src/chat-widget/types/socket.d.ts +101 -0
- package/dist/src/chat-widget/types/socket.d.ts.map +1 -0
- package/dist/src/chat-widget/utils/dateUtils.d.ts +33 -0
- package/dist/src/chat-widget/utils/dateUtils.d.ts.map +1 -0
- package/dist/src/chat-widget/utils/defaultAssets.d.ts +20 -0
- package/dist/src/chat-widget/utils/defaultAssets.d.ts.map +1 -0
- package/dist/src/chat-widget/utils/deviceId.d.ts +18 -0
- package/dist/src/chat-widget/utils/deviceId.d.ts.map +1 -0
- package/dist/src/chat-widget/utils/fileValidation.d.ts +75 -0
- package/dist/src/chat-widget/utils/fileValidation.d.ts.map +1 -0
- package/dist/src/chat-widget/utils/logger.d.ts +31 -0
- package/dist/src/chat-widget/utils/logger.d.ts.map +1 -0
- package/dist/src/chat-widget/utils/performance.d.ts +50 -0
- package/dist/src/chat-widget/utils/performance.d.ts.map +1 -0
- package/dist/src/chat-widget/utils/storage.d.ts +24 -0
- package/dist/src/chat-widget/utils/storage.d.ts.map +1 -0
- package/dist/src/chat-widget/utils/theme.d.ts +122 -0
- package/dist/src/chat-widget/utils/theme.d.ts.map +1 -0
- package/dist/src/chat-widget/utils/theme.examples.d.ts +47 -0
- package/dist/src/chat-widget/utils/theme.examples.d.ts.map +1 -0
- package/dist/src/chat-widget/utils/themes/index.d.ts +12 -0
- package/dist/src/chat-widget/utils/themes/index.d.ts.map +1 -0
- package/dist/src/chat-widget/voice/components/CallButton.d.ts +12 -0
- package/dist/src/chat-widget/voice/components/CallButton.d.ts.map +1 -0
- package/dist/src/chat-widget/voice/components/LiveCallOverlay.d.ts +12 -0
- package/dist/src/chat-widget/voice/components/LiveCallOverlay.d.ts.map +1 -0
- package/dist/src/chat-widget/voice/components/VoiceButton.d.ts +13 -0
- package/dist/src/chat-widget/voice/components/VoiceButton.d.ts.map +1 -0
- package/dist/src/chat-widget/voice/components/VoiceChatOverlay.d.ts +12 -0
- package/dist/src/chat-widget/voice/components/VoiceChatOverlay.d.ts.map +1 -0
- package/dist/src/chat-widget/voice/components/WaveformVisualizer.d.ts +12 -0
- package/dist/src/chat-widget/voice/components/WaveformVisualizer.d.ts.map +1 -0
- package/dist/src/chat-widget/voice/components/index.d.ts +10 -0
- package/dist/src/chat-widget/voice/components/index.d.ts.map +1 -0
- package/dist/src/chat-widget/voice/index.d.ts +11 -0
- package/dist/src/chat-widget/voice/index.d.ts.map +1 -0
- package/dist/src/chat-widget/voice/types.d.ts +232 -0
- package/dist/src/chat-widget/voice/types.d.ts.map +1 -0
- package/dist/src/chat-widget/voice/useLiveCall.d.ts +13 -0
- package/dist/src/chat-widget/voice/useLiveCall.d.ts.map +1 -0
- package/dist/src/chat-widget/voice/useVoiceChat.d.ts +13 -0
- package/dist/src/chat-widget/voice/useVoiceChat.d.ts.map +1 -0
- package/dist/src/chat-widget/voice/useVoiceState.d.ts +38 -0
- package/dist/src/chat-widget/voice/useVoiceState.d.ts.map +1 -0
- package/dist/src/lib/utils.d.ts +3 -0
- package/dist/src/lib/utils.d.ts.map +1 -0
- package/dist/standalone.d.ts +95 -0
- package/dist/standalone.d.ts.map +1 -0
- package/dist/stats.html +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,208 +1,169 @@
|
|
|
1
|
-
# BotUyo Chat Widget
|
|
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
|
-
|
|
55
|
-
-
|
|
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
|
+
[](https://www.npmjs.com/package/@botuyo/chat-widget-standalone)
|
|
6
|
+
[](https://opensource.org/licenses/MIT)
|
|
60
7
|
|
|
61
|
-
|
|
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
|
|
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.
|
|
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: '
|
|
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
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
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
|
-
|
|
58
|
+
---
|
|
159
59
|
|
|
160
|
-
|
|
60
|
+
## ⚙️ Configuración Completa
|
|
161
61
|
|
|
162
62
|
```typescript
|
|
163
63
|
interface StandaloneConfig {
|
|
164
|
-
//
|
|
64
|
+
// ═══════════════════════════════════════════
|
|
65
|
+
// REQUERIDO
|
|
66
|
+
// ═══════════════════════════════════════════
|
|
165
67
|
apiKey: string; // Tu API key de BotUyo
|
|
166
|
-
apiBaseUrl: string; // URL del backend
|
|
68
|
+
apiBaseUrl: string; // URL del backend (ej: https://api.botuyo.com)
|
|
167
69
|
|
|
168
|
-
//
|
|
70
|
+
// ═══════════════════════════════════════════
|
|
71
|
+
// TEMA (opcional)
|
|
72
|
+
// ═══════════════════════════════════════════
|
|
169
73
|
theme?: {
|
|
170
|
-
primaryColor?: string;
|
|
171
|
-
botName?: string;
|
|
172
|
-
logoUrl?: string;
|
|
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;
|
|
175
|
-
inputPlaceholder?: string;
|
|
176
|
-
borderRadius?: string;
|
|
177
|
-
launcherBorderRadius?: string; // Border radius
|
|
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
|
-
//
|
|
123
|
+
// ═══════════════════════════════════════════
|
|
124
|
+
// CONTEXTO DEL USUARIO (opcional)
|
|
125
|
+
// ═══════════════════════════════════════════
|
|
181
126
|
userContext?: {
|
|
182
|
-
token?: string; // Token de autenticación
|
|
183
|
-
metadata?:
|
|
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
|
-
//
|
|
136
|
+
// ═══════════════════════════════════════════
|
|
137
|
+
// CONTEXTO DE LA PÁGINA (opcional)
|
|
138
|
+
// ═══════════════════════════════════════════
|
|
187
139
|
pageContext?: {
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
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
|
-
//
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
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
|
-
|
|
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
|
|
177
|
+
<h1>Bienvenido</h1>
|
|
217
178
|
|
|
218
|
-
<script src="https://cdn.
|
|
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: '
|
|
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: '#
|
|
239
|
-
botName: 'Asistente
|
|
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! ¿
|
|
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: '
|
|
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
|
|
236
|
+
console.log('Evento:', eventName, data);
|
|
268
237
|
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
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
|
|
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
|
-
###
|
|
253
|
+
### Control Programático
|
|
283
254
|
|
|
284
|
-
```
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
});
|
|
255
|
+
```javascript
|
|
256
|
+
// Inicializar
|
|
257
|
+
BotUyoChat.init({
|
|
258
|
+
apiKey: 'mi-api-key',
|
|
259
|
+
apiBaseUrl: 'https://api.botuyo.com'
|
|
260
|
+
});
|
|
291
261
|
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
262
|
+
// Abrir el chat
|
|
263
|
+
document.getElementById('btn-ayuda').onclick = () => {
|
|
264
|
+
BotUyoChat.open();
|
|
265
|
+
};
|
|
296
266
|
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
BotUyoChat.close();
|
|
300
|
-
});
|
|
267
|
+
// Cerrar el chat
|
|
268
|
+
BotUyoChat.close();
|
|
301
269
|
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
BotUyoChat.sendMessage('Hola, necesito ayuda');
|
|
305
|
-
});
|
|
270
|
+
// Enviar mensaje programáticamente
|
|
271
|
+
BotUyoChat.sendMessage('Necesito ayuda con mi pedido #12345');
|
|
306
272
|
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
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
|
-
|
|
313
|
-
|
|
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
|
-
|
|
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
|
-
|
|
352
|
-
- `config` (Partial<StandaloneConfig>): Configuración parcial a actualizar.
|
|
287
|
+
## 🛠️ API Pública
|
|
353
288
|
|
|
354
|
-
|
|
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
|
-
|
|
298
|
+
---
|
|
357
299
|
|
|
358
|
-
## 🎨
|
|
300
|
+
## 🎨 Temas Predefinidos
|
|
359
301
|
|
|
360
|
-
|
|
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
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
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
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
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
|
-
|
|
333
|
+
}
|
|
377
334
|
```
|
|
378
335
|
|
|
379
|
-
|
|
336
|
+
---
|
|
380
337
|
|
|
381
|
-
|
|
338
|
+
## 🌐 Compatibilidad
|
|
382
339
|
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
395
|
-
npm install
|
|
396
|
-
```
|
|
351
|
+
## 📦 Build Local
|
|
397
352
|
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
353
|
+
```bash
|
|
354
|
+
# Clonar repositorio
|
|
355
|
+
git clone https://github.com/botuyo/chat-widget.git
|
|
356
|
+
cd chat-widget
|
|
402
357
|
|
|
403
|
-
|
|
358
|
+
# Instalar dependencias
|
|
359
|
+
npm install
|
|
404
360
|
|
|
405
|
-
|
|
361
|
+
# Desarrollo
|
|
362
|
+
npm run dev
|
|
406
363
|
|
|
407
|
-
|
|
364
|
+
# Build producción
|
|
408
365
|
npm run build
|
|
409
|
-
```
|
|
410
366
|
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
- `dist/botuyo-chat.js.map` - Source map para debugging
|
|
367
|
+
# Tests
|
|
368
|
+
npm test
|
|
369
|
+
```
|
|
415
370
|
|
|
416
|
-
|
|
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
|
-
|
|
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 - ©
|
|
381
|
+
MIT License - © 2026 BotUyo
|
|
427
382
|
|
|
428
|
-
|
|
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
|
-
- [
|
|
437
|
-
-
|
|
438
|
-
-
|
|
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
|