@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.
- package/README.md +270 -0
- package/dist/ChatWidget-Bs0XV_7i.js +1356 -0
- package/dist/ChatWidget-Bs0XV_7i.js.map +1 -0
- package/dist/ChatWidget-PcqRrOmi.cjs +2 -0
- package/dist/ChatWidget-PcqRrOmi.cjs.map +1 -0
- package/dist/adapters/vue/index.d.ts +7 -0
- package/dist/adapters/vue/index.d.ts.map +1 -0
- package/dist/adapters/vue/useChatMode.d.ts +21 -0
- package/dist/adapters/vue/useChatMode.d.ts.map +1 -0
- package/dist/components/ChatWidget.d.ts +39 -0
- package/dist/components/ChatWidget.d.ts.map +1 -0
- package/dist/composables/useChatWidget.d.ts +35 -0
- package/dist/composables/useChatWidget.d.ts.map +1 -0
- package/dist/core/stateManager.d.ts +136 -0
- package/dist/core/stateManager.d.ts.map +1 -0
- package/dist/core/types.d.ts +64 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/entry/next.d.ts +9 -0
- package/dist/entry/next.d.ts.map +1 -0
- package/dist/entry/nuxt.d.ts +12 -0
- package/dist/entry/nuxt.d.ts.map +1 -0
- package/dist/entry/react.d.ts +10 -0
- package/dist/entry/react.d.ts.map +1 -0
- package/dist/entry/vanilla.d.ts +33 -0
- package/dist/entry/vanilla.d.ts.map +1 -0
- package/dist/entry/vite.d.ts +11 -0
- package/dist/entry/vite.d.ts.map +1 -0
- package/dist/entry/vue.d.ts +12 -0
- package/dist/entry/vue.d.ts.map +1 -0
- package/dist/hooks/useChatMode.d.ts +17 -0
- package/dist/hooks/useChatMode.d.ts.map +1 -0
- package/dist/index.cjs.js +2 -0
- package/dist/index.cjs.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.esm.js +1383 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/nuxt.cjs.js +2 -0
- package/dist/nuxt.cjs.js.map +1 -0
- package/dist/nuxt.esm.js +9 -0
- package/dist/nuxt.esm.js.map +1 -0
- package/dist/sanitize-C8MB41vY.cjs +4 -0
- package/dist/sanitize-C8MB41vY.cjs.map +1 -0
- package/dist/sanitize-Cm1kskSD.js +1842 -0
- package/dist/sanitize-Cm1kskSD.js.map +1 -0
- package/dist/services/chatService.d.ts +144 -0
- package/dist/services/chatService.d.ts.map +1 -0
- package/dist/services/dialogflowBackendService.d.ts +36 -0
- package/dist/services/dialogflowBackendService.d.ts.map +1 -0
- package/dist/services/dialogflowClient.d.ts +36 -0
- package/dist/services/dialogflowClient.d.ts.map +1 -0
- package/dist/services/sessionManager.d.ts +13 -0
- package/dist/services/sessionManager.d.ts.map +1 -0
- package/dist/styles.css +1 -0
- package/dist/types.d.ts +5 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/utils/dialogflowHandler.d.ts +31 -0
- package/dist/utils/dialogflowHandler.d.ts.map +1 -0
- package/dist/utils/frameworkDetector.d.ts +17 -0
- package/dist/utils/frameworkDetector.d.ts.map +1 -0
- package/dist/utils/sanitize.d.ts +25 -0
- package/dist/utils/sanitize.d.ts.map +1 -0
- package/dist/utils/ssr.d.ts +35 -0
- package/dist/utils/ssr.d.ts.map +1 -0
- package/dist/vue.cjs.js +2 -0
- package/dist/vue.cjs.js.map +1 -0
- package/dist/vue.esm.js +9 -0
- package/dist/vue.esm.js.map +1 -0
- 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
|