@theonexai/chartsconnect-chat-widget 1.0.18

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 (69) hide show
  1. package/README.md +270 -0
  2. package/dist/ChatWidget-Bs0XV_7i.js +1356 -0
  3. package/dist/ChatWidget-Bs0XV_7i.js.map +1 -0
  4. package/dist/ChatWidget-PcqRrOmi.cjs +2 -0
  5. package/dist/ChatWidget-PcqRrOmi.cjs.map +1 -0
  6. package/dist/adapters/vue/index.d.ts +7 -0
  7. package/dist/adapters/vue/index.d.ts.map +1 -0
  8. package/dist/adapters/vue/useChatMode.d.ts +21 -0
  9. package/dist/adapters/vue/useChatMode.d.ts.map +1 -0
  10. package/dist/components/ChatWidget.d.ts +39 -0
  11. package/dist/components/ChatWidget.d.ts.map +1 -0
  12. package/dist/composables/useChatWidget.d.ts +35 -0
  13. package/dist/composables/useChatWidget.d.ts.map +1 -0
  14. package/dist/core/stateManager.d.ts +136 -0
  15. package/dist/core/stateManager.d.ts.map +1 -0
  16. package/dist/core/types.d.ts +64 -0
  17. package/dist/core/types.d.ts.map +1 -0
  18. package/dist/entry/next.d.ts +9 -0
  19. package/dist/entry/next.d.ts.map +1 -0
  20. package/dist/entry/nuxt.d.ts +12 -0
  21. package/dist/entry/nuxt.d.ts.map +1 -0
  22. package/dist/entry/react.d.ts +10 -0
  23. package/dist/entry/react.d.ts.map +1 -0
  24. package/dist/entry/vanilla.d.ts +33 -0
  25. package/dist/entry/vanilla.d.ts.map +1 -0
  26. package/dist/entry/vite.d.ts +11 -0
  27. package/dist/entry/vite.d.ts.map +1 -0
  28. package/dist/entry/vue.d.ts +12 -0
  29. package/dist/entry/vue.d.ts.map +1 -0
  30. package/dist/hooks/useChatMode.d.ts +17 -0
  31. package/dist/hooks/useChatMode.d.ts.map +1 -0
  32. package/dist/index.cjs.js +2 -0
  33. package/dist/index.cjs.js.map +1 -0
  34. package/dist/index.d.ts +21 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.esm.js +1383 -0
  37. package/dist/index.esm.js.map +1 -0
  38. package/dist/nuxt.cjs.js +2 -0
  39. package/dist/nuxt.cjs.js.map +1 -0
  40. package/dist/nuxt.esm.js +9 -0
  41. package/dist/nuxt.esm.js.map +1 -0
  42. package/dist/sanitize-C8MB41vY.cjs +4 -0
  43. package/dist/sanitize-C8MB41vY.cjs.map +1 -0
  44. package/dist/sanitize-Cm1kskSD.js +1842 -0
  45. package/dist/sanitize-Cm1kskSD.js.map +1 -0
  46. package/dist/services/chatService.d.ts +144 -0
  47. package/dist/services/chatService.d.ts.map +1 -0
  48. package/dist/services/dialogflowBackendService.d.ts +36 -0
  49. package/dist/services/dialogflowBackendService.d.ts.map +1 -0
  50. package/dist/services/dialogflowClient.d.ts +36 -0
  51. package/dist/services/dialogflowClient.d.ts.map +1 -0
  52. package/dist/services/sessionManager.d.ts +13 -0
  53. package/dist/services/sessionManager.d.ts.map +1 -0
  54. package/dist/styles.css +1 -0
  55. package/dist/types.d.ts +5 -0
  56. package/dist/types.d.ts.map +1 -0
  57. package/dist/utils/dialogflowHandler.d.ts +31 -0
  58. package/dist/utils/dialogflowHandler.d.ts.map +1 -0
  59. package/dist/utils/frameworkDetector.d.ts +17 -0
  60. package/dist/utils/frameworkDetector.d.ts.map +1 -0
  61. package/dist/utils/sanitize.d.ts +25 -0
  62. package/dist/utils/sanitize.d.ts.map +1 -0
  63. package/dist/utils/ssr.d.ts +35 -0
  64. package/dist/utils/ssr.d.ts.map +1 -0
  65. package/dist/vue.cjs.js +2 -0
  66. package/dist/vue.cjs.js.map +1 -0
  67. package/dist/vue.esm.js +9 -0
  68. package/dist/vue.esm.js.map +1 -0
  69. package/package.json +114 -0
package/README.md ADDED
@@ -0,0 +1,270 @@
1
+ # chartsconnect Chat Widget
2
+
3
+ A universal JavaScript chat widget library that connects directly with Dialogflow CX - no backend API required!
4
+
5
+ **Supports:** React, Next.js, Vue.js, Nuxt 3, Vite, and Vanilla JavaScript
6
+
7
+ ## Installation
8
+
9
+ ### Option 1: Install from Local Path (Recommended for Development)
10
+
11
+ ```bash
12
+ # In your website project directory
13
+ npm install /path/to/chartsconnect-chat-widget
14
+ # or
15
+ npm install ../chartsconnect-chat-widget
16
+ ```
17
+
18
+ ### Option 2: Use npm link (For Development)
19
+
20
+ ```bash
21
+ # In the chartsconnect-chat-widget directory
22
+ npm link
23
+
24
+ # In your website project directory
25
+ npm link @chartsconnect/chat-widget
26
+ ```
27
+
28
+ ### Option 3: Publish to npm (For Production)
29
+
30
+ ```bash
31
+ # Build the library first
32
+ npm run build
33
+
34
+ # Publish to npm (make sure you're logged in)
35
+ npm publish
36
+ ```
37
+
38
+ Then install in your project:
39
+ ```bash
40
+ npm install @chartsconnect/chat-widget
41
+ ```
42
+
43
+ ## Usage
44
+
45
+ ### Vue.js 3
46
+
47
+ ```vue
48
+ <template>
49
+ <ChatWidget
50
+ df-project-id="your-project-id"
51
+ df-agent-id="your-agent-id"
52
+ :service-account-key="serviceAccountKey"
53
+ backendBaseUrl="https://chartconnect.chartsconnect.in"
54
+ backendWsUrl="wss://chartconnect.chartsconnect.in"
55
+ />
56
+ </template>
57
+
58
+ <script setup>
59
+ import ChatWidget from '@chartsconnect/chat-widget/vue';
60
+ // ⚠️ REQUIRED: Import CSS separately
61
+ import '@chartsconnect/chat-widget/styles';
62
+ import serviceAccountKey from './credentials/dialogflow.json';
63
+ </script>
64
+ ```
65
+
66
+ **CSS Import Options:**
67
+ - `import '@chartsconnect/chat-widget/styles'` (recommended)
68
+ - `import '@chartsconnect/chat-widget/dist/styles.css'` (alternative)
69
+
70
+ ### Nuxt 3 / Vue.js 3 (Important: Use ClientOnly!)
71
+
72
+ ```vue
73
+ <template>
74
+ <ClientOnly>
75
+ <ChatWidget
76
+ df-project-id="your-project-id"
77
+ df-agent-id="your-agent-id"
78
+ :service-account-key="serviceAccountKey"
79
+ />
80
+ </ClientOnly>
81
+ </template>
82
+
83
+ <script setup>
84
+ import ChatWidget from '@chartsconnect/chat-widget/nuxt';
85
+ import '@chartsconnect/chat-widget/styles';
86
+ import serviceAccountKey from './credentials/dialogflow.json';
87
+ </script>
88
+ ```
89
+
90
+ **In `nuxt.config.ts`:**
91
+ ```typescript
92
+ export default defineNuxtConfig({
93
+ css: ['@chartsconnect/chat-widget/dist/styles.css'],
94
+
95
+ vite: {
96
+ optimizeDeps: {
97
+ exclude: ['@chartsconnect/chat-widget'],
98
+ },
99
+ },
100
+ });
101
+ ```
102
+
103
+ **⚠️ CRITICAL for Nuxt:** The component MUST be wrapped in `<ClientOnly>` because it uses browser-only APIs (`localStorage`, `window`, `WebSocket`) that don't exist during SSR.
104
+
105
+ **CSS Import Options:**
106
+ - `import '@chartsconnect/chat-widget/styles'` (recommended - shorter path)
107
+ - `import '@chartsconnect/chat-widget/dist/styles.css'` (alternative)
108
+
109
+ ### React/Next.js
110
+
111
+ ```tsx
112
+ import ChatWidget from '@chartsconnect/chat-widget';
113
+ import '@chartsconnect/chat-widget/dist/styles.css';
114
+ import serviceAccountKey from './service-account-key.json';
115
+
116
+ function App() {
117
+ return (
118
+ <ChatWidget
119
+ dfProjectId="your-project-id"
120
+ dfLocation="us-central1"
121
+ dfAgentId="your-agent-id"
122
+ serviceAccountKey={serviceAccountKey}
123
+ languageCode="en"
124
+ />
125
+ );
126
+ }
127
+ ```
128
+
129
+ ## Props
130
+
131
+ | Prop | Type | Required | Default | Description |
132
+ |------|------|----------|---------|-------------|
133
+ | `dfProjectId` | `string` | Yes | - | Dialogflow project ID |
134
+ | `dfLocation` | `string` | No | `"us-central1"` | Dialogflow location |
135
+ | `dfAgentId` | `string` | Yes | - | Dialogflow agent ID |
136
+ | `serviceAccountKey` | `object` | Yes* | - | Google Cloud service account key JSON object |
137
+ | `accessToken` | `string` | Yes* | - | Access token (alternative to serviceAccountKey) |
138
+ | `languageCode` | `string` | No | `"en"` | Language code for Dialogflow |
139
+ | `title` | `string` | No | `"💬 chartsconnect AI Assistant"` | Chat widget title |
140
+ | `subtitle` | `string` | No | `"We're here to help"` | Chat widget subtitle |
141
+ | `welcomeTitle` | `string` | No | `"👋 Welcome to chartsconnect"` | Welcome popup title |
142
+ | `welcomeMessage` | `string` | No | `"My name is chartsconnect..."` | Welcome popup message |
143
+ | `welcomeCta` | `string` | No | `"💬 Click here to start chatting!"` | Welcome popup CTA text |
144
+ | `showWelcomePopup` | `boolean` | No | `true` | Whether to show welcome popup |
145
+ | `welcomePopupDelay` | `number` | No | `1500` | Delay before showing welcome popup (ms) |
146
+ | `fallbackWelcomeMessage` | `string` | No | `"Hello! I'm chartsconnect..."` | Fallback message if API fails |
147
+ | `inputPlaceholder` | `string` | No | `"Type your message..."` | Input field placeholder |
148
+ | `emptyStateMessage` | `string` | No | `"Hi! I'm chartsconnect..."` | Empty state message |
149
+ | `debug` | `boolean` | No | `false` | Enable debug logging |
150
+ | `backendBaseUrl` | `string` | No | `"http://localhost:8012"` | Backend REST API base URL for Human Support Mode |
151
+ | `backendWsUrl` | `string` | No | `"ws://localhost:8012"` | Backend WebSocket URL for Human Support Mode |
152
+
153
+ \* Either `serviceAccountKey` or `accessToken` must be provided.
154
+
155
+ ## Features
156
+
157
+ - ✅ **Direct Dialogflow CX Integration** - No backend required
158
+ - ✅ **Human Handoff Support** - Automatic transition from bot to human agents
159
+ - ✅ **Rich Content** - Supports Dialogflow chips, cards, and more
160
+ - ✅ **Real-time Messaging** - WebSocket support for human agents
161
+ - ✅ **SSR Compatible** - Works with Next.js and Nuxt 3 (with ClientOnly wrapper)
162
+ - ✅ **Framework Agnostic** - Same UI across React and Vue
163
+ - ✅ **TypeScript Support** - Full type definitions included
164
+ - ✅ **Tree-shakeable** - Only import what you need
165
+
166
+ ## How It Works
167
+
168
+ The widget connects **directly** to Dialogflow CX using the REST API - no backend required!
169
+
170
+ 1. **Authentication**: Uses Google Cloud service account key to generate OAuth2 access tokens
171
+ 2. **Session Management**: Creates and manages Dialogflow sessions automatically
172
+ 3. **Message Handling**: Sends messages directly to Dialogflow and displays responses
173
+ 4. **Rich Content**: Supports Dialogflow rich content (chips, cards, etc.)
174
+ 5. **Human Handoff**: Automatically switches to human support mode when Dialogflow returns handoff signal
175
+
176
+ ## Requirements
177
+
178
+ ### For React/Next.js
179
+ - React 16.8.0 or higher (peer dependency)
180
+ - React DOM 16.8.0 or higher (peer dependency)
181
+
182
+ ### For Vue.js/Nuxt
183
+ - Vue 3.0.0 or higher (peer dependency)
184
+
185
+ **Note:** Peer dependencies are optional - install only what you need for your framework.
186
+
187
+ ## Getting Your Service Account Key
188
+
189
+ 1. Go to [Google Cloud Console](https://console.cloud.google.com/)
190
+ 2. Select your project
191
+ 3. Navigate to **IAM & Admin** > **Service Accounts**
192
+ 4. Create a new service account or select an existing one
193
+ 5. Create a JSON key and download it
194
+ 6. Enable **Dialogflow API** for your project
195
+ 7. Grant the service account **Dialogflow API User** role
196
+
197
+ ## Security Warning ⚠️
198
+
199
+ **Important**: Service account keys contain sensitive credentials.
200
+
201
+ - **For Development**: You can import the key directly (as shown in examples)
202
+ - **For Production**:
203
+ - **DO NOT** expose service account keys in client-side code
204
+ - Use a backend proxy to handle authentication
205
+ - Or use OAuth2 flow to get access tokens securely
206
+ - Consider using restricted service account keys with minimal permissions
207
+
208
+ ## Development
209
+
210
+ ```bash
211
+ # Install dependencies
212
+ npm install
213
+
214
+ # Build for production
215
+ npm run build
216
+
217
+ # Watch mode for development
218
+ npm run dev
219
+ ```
220
+
221
+ ## Troubleshooting
222
+
223
+ ### Vue.js/Nuxt Issues
224
+
225
+ **Widget not displaying?**
226
+ - ✅ Make sure you imported the CSS: `import '@chartsconnect/chat-widget/styles'`
227
+ - ✅ For Nuxt: Wrap in `<ClientOnly>` component
228
+ - ✅ For Nuxt: Add CSS to `nuxt.config.ts` and exclude from optimization
229
+
230
+ **Vue warnings about attributes?**
231
+ - ✅ This is fixed in the latest version
232
+ - ✅ Ensure you're using the latest package version
233
+
234
+ **Nuxt vite-node errors?**
235
+ - ✅ Wrap component in `<ClientOnly>`
236
+ - ✅ Add to `nuxt.config.ts`:
237
+ ```ts
238
+ vite: {
239
+ optimizeDeps: {
240
+ exclude: ['@chartsconnect/chat-widget'],
241
+ },
242
+ }
243
+ ```
244
+ - ✅ Clear cache: `rm -rf .nuxt node_modules/.vite`
245
+
246
+ **504 Outdated Optimize Dep error?**
247
+ - ✅ Clear Vite cache: `rm -rf node_modules/.vite && npm run dev`
248
+ - ✅ Or add to `vite.config.ts`:
249
+ ```ts
250
+ optimizeDeps: {
251
+ exclude: ['@chartsconnect/chat-widget'],
252
+ }
253
+ ```
254
+
255
+ ### General Issues
256
+
257
+ **Chat not opening?**
258
+ - ✅ Check CSS is imported
259
+ - ✅ Verify Dialogflow config is provided
260
+ - ✅ Enable debug mode: `:debug="true"` or `debug={true}` to see console logs
261
+
262
+ **Dialogflow errors?**
263
+ - ✅ Verify service account key is valid
264
+ - ✅ Check Dialogflow API is enabled
265
+ - ✅ Ensure service account has Dialogflow API User role
266
+ - ✅ Verify project ID, location, and agent ID are correct
267
+
268
+ ## License
269
+
270
+ MIT