@fusioni/client-sdk 1.1.0
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/LICENSE +21 -0
- package/README.md +389 -0
- package/dist/assets/logo-base64.d.ts +2 -0
- package/dist/assets/logo-base64.d.ts.map +1 -0
- package/dist/browser.d.ts +28 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/components/AudioRecorder.d.ts +9 -0
- package/dist/components/AudioRecorder.d.ts.map +1 -0
- package/dist/components/ChatInput.d.ts +6 -0
- package/dist/components/ChatInput.d.ts.map +1 -0
- package/dist/components/ChatLoader.d.ts +3 -0
- package/dist/components/ChatLoader.d.ts.map +1 -0
- package/dist/components/ChatPanel.d.ts +13 -0
- package/dist/components/ChatPanel.d.ts.map +1 -0
- package/dist/components/ChatWidget.d.ts +5 -0
- package/dist/components/ChatWidget.d.ts.map +1 -0
- package/dist/components/ConfirmationDialog.d.ts +14 -0
- package/dist/components/ConfirmationDialog.d.ts.map +1 -0
- package/dist/components/ConversationList.d.ts +4 -0
- package/dist/components/ConversationList.d.ts.map +1 -0
- package/dist/components/FileUpload.d.ts +11 -0
- package/dist/components/FileUpload.d.ts.map +1 -0
- package/dist/components/FloatingButton.d.ts +16 -0
- package/dist/components/FloatingButton.d.ts.map +1 -0
- package/dist/components/ImageGallery.d.ts +14 -0
- package/dist/components/ImageGallery.d.ts.map +1 -0
- package/dist/components/LanguageSwitcher.d.ts +10 -0
- package/dist/components/LanguageSwitcher.d.ts.map +1 -0
- package/dist/components/Map.d.ts +14 -0
- package/dist/components/Map.d.ts.map +1 -0
- package/dist/components/Map.example.d.ts +4 -0
- package/dist/components/Map.example.d.ts.map +1 -0
- package/dist/components/Message.d.ts +4 -0
- package/dist/components/Message.d.ts.map +1 -0
- package/dist/components/MessageList.d.ts +25 -0
- package/dist/components/MessageList.d.ts.map +1 -0
- package/dist/components/PaginatedGalleryStrip.d.ts +20 -0
- package/dist/components/PaginatedGalleryStrip.d.ts.map +1 -0
- package/dist/components/Spotlight.d.ts +7 -0
- package/dist/components/Spotlight.d.ts.map +1 -0
- package/dist/components/UrlPreview.d.ts +20 -0
- package/dist/components/UrlPreview.d.ts.map +1 -0
- package/dist/fusioni-sdk.umd.js +41642 -0
- package/dist/fusioni-sdk.umd.js.map +1 -0
- package/dist/hooks/useChatState.d.ts +26 -0
- package/dist/hooks/useChatState.d.ts.map +1 -0
- package/dist/hooks/useSSE.d.ts +2 -0
- package/dist/hooks/useSSE.d.ts.map +1 -0
- package/dist/hooks/useTheme.d.ts +8 -0
- package/dist/hooks/useTheme.d.ts.map +1 -0
- package/dist/hooks/useTranslation.d.ts +12 -0
- package/dist/hooks/useTranslation.d.ts.map +1 -0
- package/dist/i18n/el.d.ts +90 -0
- package/dist/i18n/el.d.ts.map +1 -0
- package/dist/i18n/en.d.ts +90 -0
- package/dist/i18n/en.d.ts.map +1 -0
- package/dist/i18n/index.d.ts +190 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/index.css +1 -0
- package/dist/index.d.ts +495 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.esm.css +1 -0
- package/dist/index.esm.js +6458 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/index.js +6492 -0
- package/dist/index.js.map +1 -0
- package/dist/services/ApiClient.d.ts +17 -0
- package/dist/services/ApiClient.d.ts.map +1 -0
- package/dist/services/ConversationService.d.ts +45 -0
- package/dist/services/ConversationService.d.ts.map +1 -0
- package/dist/services/MessageService.d.ts +18 -0
- package/dist/services/MessageService.d.ts.map +1 -0
- package/dist/services/PipelineService.d.ts +16 -0
- package/dist/services/PipelineService.d.ts.map +1 -0
- package/dist/services/SDKClientService.d.ts +31 -0
- package/dist/services/SDKClientService.d.ts.map +1 -0
- package/dist/test.d.ts +4 -0
- package/dist/test.d.ts.map +1 -0
- package/dist/types/index.d.ts +163 -0
- package/dist/types/index.d.ts.map +1 -0
- package/package.json +77 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 Fusioni Team
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,389 @@
|
|
|
1
|
+
# Fusioni Chat SDK
|
|
2
|
+
|
|
3
|
+
A React TypeScript SDK for integrating Fusioni Chat functionality into web applications. This SDK provides a floating chat widget that can be embedded into any webpage, offering AI-powered chat capabilities with support for text, images, and audio messages.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- 🤖 **AI Chat Interface** - Modern, responsive chat UI with real-time messaging
|
|
8
|
+
- 🎤 **Audio Recording** - Voice message support with recording and playback
|
|
9
|
+
- 📁 **File Upload** - Image upload and preview functionality
|
|
10
|
+
- 💬 **Conversation Management** - Create, manage, and delete conversations
|
|
11
|
+
- 🎨 **Customizable Theming** - Light/dark theme support with custom colors
|
|
12
|
+
- 📱 **Responsive Design** - Works seamlessly on desktop and mobile devices
|
|
13
|
+
- 🔄 **Real-time Updates** - Server-sent events for live message streaming
|
|
14
|
+
- 🛡️ **TypeScript Support** - Full type safety and IntelliSense support
|
|
15
|
+
|
|
16
|
+
## Installation
|
|
17
|
+
|
|
18
|
+
You can use the SDK in two ways:
|
|
19
|
+
|
|
20
|
+
### As a library (npm)
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
npm install @fusioni/client-sdk
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### As a script (no build step)
|
|
27
|
+
|
|
28
|
+
Add a single script tag to your page. The UMD bundle includes React and styles.
|
|
29
|
+
|
|
30
|
+
```html
|
|
31
|
+
<script src="https://unpkg.com/@fusioni/client-sdk/dist/fusioni-sdk.umd.js"></script>
|
|
32
|
+
<!-- or use your own path -->
|
|
33
|
+
<script src="/path/to/fusioni-sdk.umd.js"></script>
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Quick Start
|
|
37
|
+
|
|
38
|
+
### Basic Usage
|
|
39
|
+
|
|
40
|
+
```tsx
|
|
41
|
+
import React from 'react';
|
|
42
|
+
import { ChatWidget } from '@fusioni/client-sdk';
|
|
43
|
+
|
|
44
|
+
function App() {
|
|
45
|
+
const config = {
|
|
46
|
+
apiBaseUrl: 'https://your-fusioni-api.com',
|
|
47
|
+
agencyId: 'your-agency-id',
|
|
48
|
+
accessToken: 'your-access-token', // Optional
|
|
49
|
+
theme: 'light', // 'light' | 'dark' | 'auto'
|
|
50
|
+
position: 'bottom-right', // 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left'
|
|
51
|
+
primaryColor: '#6366f1',
|
|
52
|
+
showConversationList: true,
|
|
53
|
+
enableAudioRecording: true,
|
|
54
|
+
enableFileUpload: true,
|
|
55
|
+
maxFileSize: 10, // MB
|
|
56
|
+
allowedFileTypes: ['image/*']
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
return (
|
|
60
|
+
<div className="App">
|
|
61
|
+
<h1>My Website</h1>
|
|
62
|
+
<ChatWidget config={config} />
|
|
63
|
+
</div>
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export default App;
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Script-tag usage (no React app required)
|
|
71
|
+
|
|
72
|
+
When including via `<script src="...">`, the SDK exposes a global `Fusioni` object. No build step or React setup needed.
|
|
73
|
+
|
|
74
|
+
**Default placement (floating widget):**
|
|
75
|
+
|
|
76
|
+
```html
|
|
77
|
+
<script src="path/to/fusioni-sdk.umd.js"></script>
|
|
78
|
+
<script>
|
|
79
|
+
Fusioni.init({
|
|
80
|
+
apiBaseUrl: 'https://your-fusioni-api.com',
|
|
81
|
+
agencyId: 'your-agency-id',
|
|
82
|
+
accessToken: 'your-access-token',
|
|
83
|
+
theme: 'light',
|
|
84
|
+
position: 'bottom-right',
|
|
85
|
+
primaryColor: '#6366f1',
|
|
86
|
+
showConversationList: true,
|
|
87
|
+
enableAudioRecording: true,
|
|
88
|
+
enableFileUpload: true,
|
|
89
|
+
maxFileSize: 10,
|
|
90
|
+
allowedFileTypes: ['image/*']
|
|
91
|
+
});
|
|
92
|
+
</script>
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
**Mount into a specific container:**
|
|
96
|
+
|
|
97
|
+
```html
|
|
98
|
+
<div id="my-chat"></div>
|
|
99
|
+
<script src="path/to/fusioni-sdk.umd.js"></script>
|
|
100
|
+
<script>
|
|
101
|
+
Fusioni.mount('#my-chat', {
|
|
102
|
+
apiBaseUrl: 'https://your-fusioni-api.com',
|
|
103
|
+
agencyId: 'your-agency-id',
|
|
104
|
+
theme: 'light',
|
|
105
|
+
position: 'bottom-right',
|
|
106
|
+
primaryColor: '#6366f1'
|
|
107
|
+
});
|
|
108
|
+
// Optional: unmount later
|
|
109
|
+
// const result = Fusioni.mount('#my-chat', config);
|
|
110
|
+
// result.unmount();
|
|
111
|
+
</script>
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
**Script API:**
|
|
115
|
+
|
|
116
|
+
| Method | Description |
|
|
117
|
+
|--------|-------------|
|
|
118
|
+
| `Fusioni.init(config)` | Mounts the chat widget with default placement (creates `#fusioni-chat-root`). Returns `{ unmount }`. |
|
|
119
|
+
| `Fusioni.mount(container, config)` | Mounts into `container` (CSS selector string or `HTMLElement`). Returns `{ unmount }`. |
|
|
120
|
+
| `Fusioni.version` | SDK version string. |
|
|
121
|
+
|
|
122
|
+
### Advanced Usage with Event Handlers
|
|
123
|
+
|
|
124
|
+
```tsx
|
|
125
|
+
import React from 'react';
|
|
126
|
+
import type { Conversation, FusioniMemoryMessage, FusioniSDKConfig } from '@fusioni/client-sdk';
|
|
127
|
+
import { ChatWidget } from '@fusioni/client-sdk';
|
|
128
|
+
|
|
129
|
+
function App() {
|
|
130
|
+
const config: FusioniSDKConfig = {
|
|
131
|
+
apiBaseUrl: 'https://your-fusioni-api.com',
|
|
132
|
+
agencyId: 'your-agency-id',
|
|
133
|
+
accessToken: 'your-access-token',
|
|
134
|
+
theme: 'auto',
|
|
135
|
+
position: 'bottom-right',
|
|
136
|
+
primaryColor: '#6366f1',
|
|
137
|
+
showConversationList: true,
|
|
138
|
+
enableAudioRecording: true,
|
|
139
|
+
enableFileUpload: true,
|
|
140
|
+
maxFileSize: 10,
|
|
141
|
+
allowedFileTypes: ['image/*', 'application/pdf']
|
|
142
|
+
};
|
|
143
|
+
|
|
144
|
+
const handleMessageSent = (message: FusioniMemoryMessage) => {
|
|
145
|
+
console.log('Message sent:', message);
|
|
146
|
+
// Track analytics, update UI, etc.
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
const handleMessageReceived = (message: FusioniMemoryMessage) => {
|
|
150
|
+
console.log('Message received:', message);
|
|
151
|
+
// Handle AI responses
|
|
152
|
+
};
|
|
153
|
+
|
|
154
|
+
const handleConversationCreated = (conversation: Conversation) => {
|
|
155
|
+
console.log('New conversation:', conversation);
|
|
156
|
+
// Update conversation list, analytics, etc.
|
|
157
|
+
};
|
|
158
|
+
|
|
159
|
+
const handleError = (error) => {
|
|
160
|
+
console.error('Chat error:', error);
|
|
161
|
+
// Handle errors, show notifications, etc.
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
return (
|
|
165
|
+
<div className="App">
|
|
166
|
+
<h1>My Website</h1>
|
|
167
|
+
<ChatWidget
|
|
168
|
+
config={config}
|
|
169
|
+
onMessageSent={handleMessageSent}
|
|
170
|
+
onMessageReceived={handleMessageReceived}
|
|
171
|
+
onConversationCreated={handleConversationCreated}
|
|
172
|
+
onError={handleError}
|
|
173
|
+
/>
|
|
174
|
+
</div>
|
|
175
|
+
);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
export default App;
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
## Configuration Options
|
|
182
|
+
|
|
183
|
+
### FusioniSDKConfig
|
|
184
|
+
|
|
185
|
+
| Option | Type | Default | Description |
|
|
186
|
+
|--------|------|---------|-------------|
|
|
187
|
+
| `apiBaseUrl` | `string` | **Required** | Base URL of your Fusioni API |
|
|
188
|
+
| `agencyId` | `string` | **Required** | Your agency ID |
|
|
189
|
+
| `accessToken` | `string` | `undefined` | Optional access token for authentication |
|
|
190
|
+
| `theme` | `'light' \| 'dark' \| 'auto'` | `'light'` | UI theme preference |
|
|
191
|
+
| `position` | `'bottom-right' \| 'bottom-left' \| 'top-right' \| 'top-left'` | `'bottom-right'` | Position of the floating button |
|
|
192
|
+
| `primaryColor` | `string` | `'#6366f1'` | Primary color for the UI |
|
|
193
|
+
| `showConversationList` | `boolean` | `true` | Whether to show the conversation sidebar |
|
|
194
|
+
| `enableAudioRecording` | `boolean` | `true` | Enable voice message recording |
|
|
195
|
+
| `enableFileUpload` | `boolean` | `true` | Enable file upload functionality |
|
|
196
|
+
| `maxFileSize` | `number` | `10` | Maximum file size in MB |
|
|
197
|
+
| `allowedFileTypes` | `string[]` | `['image/*']` | Allowed MIME types for uploads |
|
|
198
|
+
|
|
199
|
+
## Event Handlers
|
|
200
|
+
|
|
201
|
+
### ChatWidgetProps
|
|
202
|
+
|
|
203
|
+
| Handler | Type | Description |
|
|
204
|
+
|---------|------|-------------|
|
|
205
|
+
| `onMessageSent` | `(message: FusioniMemoryMessage) => void` | Called when a user sends a message |
|
|
206
|
+
| `onMessageReceived` | `(message: FusioniMemoryMessage) => void` | Called when an AI response is received |
|
|
207
|
+
| `onConversationCreated` | `(conversation: Conversation) => void` | Called when a new conversation is created |
|
|
208
|
+
| `onConversationDeleted` | `(conversationId: string) => void` | Called when a conversation is deleted |
|
|
209
|
+
| `onError` | `(error: Error) => void` | Called when an error occurs |
|
|
210
|
+
|
|
211
|
+
## API Integration
|
|
212
|
+
|
|
213
|
+
The SDK automatically handles communication with your Fusioni API endpoints:
|
|
214
|
+
|
|
215
|
+
- **Conversations**: `/api/conversation`
|
|
216
|
+
- **Messages**: `/api/mem`
|
|
217
|
+
- **Pipeline**: `/api/pipeline/exec`
|
|
218
|
+
- **File Upload**: `/api/upload`
|
|
219
|
+
- **Server-Sent Events**: `/api/sse/connect`
|
|
220
|
+
|
|
221
|
+
## Styling
|
|
222
|
+
|
|
223
|
+
The SDK includes comprehensive CSS styles that can be customized using CSS variables:
|
|
224
|
+
|
|
225
|
+
```css
|
|
226
|
+
:root {
|
|
227
|
+
--fusioni-primary: #6366f1;
|
|
228
|
+
--fusioni-primary-light: #818cf8;
|
|
229
|
+
--fusioni-primary-dark: #4f46e5;
|
|
230
|
+
--fusioni-bg-primary: #ffffff;
|
|
231
|
+
--fusioni-text-primary: #1e293b;
|
|
232
|
+
/* ... more variables */
|
|
233
|
+
}
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
### Dark Theme
|
|
237
|
+
|
|
238
|
+
The SDK automatically applies dark theme styles when `theme: 'dark'` or `theme: 'auto'` (with system preference) is set.
|
|
239
|
+
|
|
240
|
+
## Browser Support
|
|
241
|
+
|
|
242
|
+
- Chrome 60+
|
|
243
|
+
- Firefox 55+
|
|
244
|
+
- Safari 12+
|
|
245
|
+
- Edge 79+
|
|
246
|
+
|
|
247
|
+
### Audio Recording Requirements
|
|
248
|
+
|
|
249
|
+
- HTTPS or localhost (secure context)
|
|
250
|
+
- Microphone permissions
|
|
251
|
+
- Modern browser with MediaRecorder API support
|
|
252
|
+
|
|
253
|
+
## Development
|
|
254
|
+
|
|
255
|
+
### Building the SDK
|
|
256
|
+
|
|
257
|
+
```bash
|
|
258
|
+
npm run build
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
### Development Mode
|
|
262
|
+
|
|
263
|
+
```bash
|
|
264
|
+
npm run dev
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
### Type Checking
|
|
268
|
+
|
|
269
|
+
```bash
|
|
270
|
+
npm run type-check
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
### Linting
|
|
274
|
+
|
|
275
|
+
```bash
|
|
276
|
+
npm run lint
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
## Examples
|
|
280
|
+
|
|
281
|
+
### Custom Styling
|
|
282
|
+
|
|
283
|
+
```tsx
|
|
284
|
+
import React from 'react';
|
|
285
|
+
import { ChatWidget } from '@fusioni/client-sdk';
|
|
286
|
+
import './custom-chat-styles.css';
|
|
287
|
+
|
|
288
|
+
function App() {
|
|
289
|
+
const config = {
|
|
290
|
+
apiBaseUrl: 'https://your-fusioni-api.com',
|
|
291
|
+
agencyId: 'your-agency-id',
|
|
292
|
+
theme: 'light',
|
|
293
|
+
position: 'bottom-right',
|
|
294
|
+
primaryColor: '#6366f1'
|
|
295
|
+
};
|
|
296
|
+
|
|
297
|
+
return (
|
|
298
|
+
<div>
|
|
299
|
+
<ChatWidget config={config} />
|
|
300
|
+
</div>
|
|
301
|
+
);
|
|
302
|
+
}
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
```css
|
|
306
|
+
/* custom-chat-styles.css */
|
|
307
|
+
.fusioni-chat-widget {
|
|
308
|
+
--fusioni-primary: #your-brand-color;
|
|
309
|
+
--fusioni-bg-primary: #your-background-color;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
.fusioni-floating-button {
|
|
313
|
+
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
|
|
314
|
+
}
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
### Conditional Rendering
|
|
318
|
+
|
|
319
|
+
```tsx
|
|
320
|
+
import React, { useState } from 'react';
|
|
321
|
+
import { ChatWidget } from '@fusioni/client-sdk';
|
|
322
|
+
|
|
323
|
+
function App() {
|
|
324
|
+
const [showChat, setShowChat] = useState(false);
|
|
325
|
+
|
|
326
|
+
const config = {
|
|
327
|
+
apiBaseUrl: 'https://your-fusioni-api.com',
|
|
328
|
+
agencyId: 'your-agency-id',
|
|
329
|
+
theme: 'light',
|
|
330
|
+
position: 'bottom-right',
|
|
331
|
+
primaryColor: '#6366f1'
|
|
332
|
+
};
|
|
333
|
+
|
|
334
|
+
return (
|
|
335
|
+
<div>
|
|
336
|
+
<button onClick={() => setShowChat(!showChat)}>
|
|
337
|
+
Toggle Chat
|
|
338
|
+
</button>
|
|
339
|
+
{showChat && <ChatWidget config={config} />}
|
|
340
|
+
</div>
|
|
341
|
+
);
|
|
342
|
+
}
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
## Troubleshooting
|
|
346
|
+
|
|
347
|
+
### Common Issues
|
|
348
|
+
|
|
349
|
+
1. **Audio recording not working**
|
|
350
|
+
- Ensure you're on HTTPS or localhost
|
|
351
|
+
- Check microphone permissions
|
|
352
|
+
- Verify browser support for MediaRecorder API
|
|
353
|
+
|
|
354
|
+
2. **File uploads failing**
|
|
355
|
+
- Check file size limits
|
|
356
|
+
- Verify allowed file types
|
|
357
|
+
- Ensure proper API endpoint configuration
|
|
358
|
+
|
|
359
|
+
3. **Messages not appearing**
|
|
360
|
+
- Verify API base URL and agency ID
|
|
361
|
+
- Check network connectivity
|
|
362
|
+
- Review browser console for errors
|
|
363
|
+
|
|
364
|
+
### Debug Mode
|
|
365
|
+
|
|
366
|
+
The SDK uses `accessToken` for authenticated requests to your Fusioni API. (Logging, if present, is controlled by your app/build environment rather than by the token value.)
|
|
367
|
+
|
|
368
|
+
```tsx
|
|
369
|
+
const config = {
|
|
370
|
+
// ... other config
|
|
371
|
+
accessToken: 'your-access-token',
|
|
372
|
+
};
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
## License
|
|
376
|
+
|
|
377
|
+
MIT License - see LICENSE file for details.
|
|
378
|
+
|
|
379
|
+
## Support
|
|
380
|
+
|
|
381
|
+
For support and questions:
|
|
382
|
+
- Create an issue on GitHub
|
|
383
|
+
- Contact the Fusioni team
|
|
384
|
+
|
|
385
|
+
## Linking npm
|
|
386
|
+
|
|
387
|
+
./fusioni-client-sdk && npm run build && npm link
|
|
388
|
+
|
|
389
|
+
./usion-client-sdk-example && npm link @fusioni/client-sdk
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const FUSIONI_LOGO_BASE64 = "data:image/png;base64,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";
|
|
2
|
+
//# sourceMappingURL=logo-base64.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logo-base64.d.ts","sourceRoot":"","sources":["../../src/assets/logo-base64.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,mBAAmB,+xYAA+xY,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { FusioniSDKConfig } from './types';
|
|
2
|
+
import './styles/index.css';
|
|
3
|
+
export interface FusioniScriptConfig extends FusioniSDKConfig {
|
|
4
|
+
}
|
|
5
|
+
export interface FusioniMountResult {
|
|
6
|
+
unmount: () => void;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Mount the chat widget into a container.
|
|
10
|
+
* @param container - CSS selector (e.g. '#chat') or HTMLElement
|
|
11
|
+
* @param config - Fusioni SDK configuration
|
|
12
|
+
* @returns Object with unmount() to tear down the widget
|
|
13
|
+
*/
|
|
14
|
+
export declare function mount(container: string | HTMLElement, config: FusioniScriptConfig): FusioniMountResult;
|
|
15
|
+
/**
|
|
16
|
+
* Initialize the chat widget with default placement (floating, bottom-right).
|
|
17
|
+
* Creates a div#fusioni-chat-root and mounts the widget there.
|
|
18
|
+
* @param config - Fusioni SDK configuration
|
|
19
|
+
* @returns Object with unmount() to tear down the widget
|
|
20
|
+
*/
|
|
21
|
+
export declare function init(config: FusioniScriptConfig): FusioniMountResult;
|
|
22
|
+
declare const Fusioni: {
|
|
23
|
+
init: typeof init;
|
|
24
|
+
mount: typeof mount;
|
|
25
|
+
version: string;
|
|
26
|
+
};
|
|
27
|
+
export default Fusioni;
|
|
28
|
+
//# sourceMappingURL=browser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,oBAAoB,CAAC;AAI5B,MAAM,WAAW,mBAAoB,SAAQ,gBAAgB;CAAG;AAEhE,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AA4BD;;;;;GAKG;AACH,wBAAgB,KAAK,CACnB,SAAS,EAAE,MAAM,GAAG,WAAW,EAC/B,MAAM,EAAE,mBAAmB,GAC1B,kBAAkB,CAYpB;AAED;;;;;GAKG;AACH,wBAAgB,IAAI,CAAC,MAAM,EAAE,mBAAmB,GAAG,kBAAkB,CAGpE;AAED,QAAA,MAAM,OAAO;;;;CAIZ,CAAC;AAMF,eAAe,OAAO,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface AudioRecorderProps {
|
|
3
|
+
onRecordingComplete: (audioBlob: Blob, duration: number) => void;
|
|
4
|
+
disabled?: boolean;
|
|
5
|
+
className?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare const AudioRecorder: React.FC<AudioRecorderProps>;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=AudioRecorder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AudioRecorder.d.ts","sourceRoot":"","sources":["../../src/components/AudioRecorder.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmD,MAAM,OAAO,CAAC;AAExE,UAAU,kBAAkB;IAC1B,mBAAmB,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACjE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAqNtD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChatInput.d.ts","sourceRoot":"","sources":["../../src/components/ChatInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAiD,MAAM,OAAO,CAAC;AACtE,OAAO,EAAC,cAAc,EAAC,MAAM,UAAU,CAAC;AAIxC,QAAA,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CAiTvC,CAAC;AACF,OAAO,EAAE,SAAS,EAAE,CAAC;AACrB,eAAe,SAAS,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChatLoader.d.ts","sourceRoot":"","sources":["../../src/components/ChatLoader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAa9B,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Position } from '../types';
|
|
3
|
+
interface ChatPanelProps {
|
|
4
|
+
isOpen: boolean;
|
|
5
|
+
onClose: () => void;
|
|
6
|
+
position?: Position;
|
|
7
|
+
isFullscreen?: boolean;
|
|
8
|
+
floatingButtonRef?: React.RefObject<HTMLButtonElement>;
|
|
9
|
+
children: React.ReactNode;
|
|
10
|
+
}
|
|
11
|
+
export declare const ChatPanel: React.FC<ChatPanelProps>;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=ChatPanel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChatPanel.d.ts","sourceRoot":"","sources":["../../src/components/ChatPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAiB,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEpC,UAAU,cAAc;IACtB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,iBAAiB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IACvD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CAyC9C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChatWidget.d.ts","sourceRoot":"","sources":["../../src/components/ChatWidget.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAiD,MAAM,OAAO,CAAC;AACtE,OAAO,EAAC,eAAe,EAAuD,MAAM,UAAU,CAAC;AAiB/F,OAAO,qBAAqB,CAAC;AAE7B,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAgxBhD,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface ConfirmationDialogProps {
|
|
3
|
+
isOpen: boolean;
|
|
4
|
+
title: string;
|
|
5
|
+
message: string;
|
|
6
|
+
confirmText?: string;
|
|
7
|
+
cancelText?: string;
|
|
8
|
+
onConfirm: () => void;
|
|
9
|
+
onCancel: () => void;
|
|
10
|
+
currentLanguage?: 'en' | 'el';
|
|
11
|
+
variant?: 'danger' | 'warning' | 'info';
|
|
12
|
+
}
|
|
13
|
+
export declare const ConfirmationDialog: React.FC<ConfirmationDialogProps>;
|
|
14
|
+
//# sourceMappingURL=ConfirmationDialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfirmationDialog.d.ts","sourceRoot":"","sources":["../../src/components/ConfirmationDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,eAAe,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAC9B,OAAO,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;CACzC;AAED,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CA+ChE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConversationList.d.ts","sourceRoot":"","sources":["../../src/components/ConversationList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AACxC,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAIjD,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CAsO5D,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface FileUploadProps {
|
|
3
|
+
onFileSelect: (file: File) => void;
|
|
4
|
+
accept?: string;
|
|
5
|
+
maxSize?: number;
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
className?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare const FileUpload: React.FC<FileUploadProps>;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=FileUpload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileUpload.d.ts","sourceRoot":"","sources":["../../src/components/FileUpload.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAEnD,UAAU,eAAe;IACvB,YAAY,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CA8EhD,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Position } from '../types';
|
|
3
|
+
interface FloatingButtonProps {
|
|
4
|
+
isOpen: boolean;
|
|
5
|
+
onClick: () => void;
|
|
6
|
+
position?: Position;
|
|
7
|
+
primaryColor?: string;
|
|
8
|
+
buttonRef?: React.RefObject<HTMLButtonElement>;
|
|
9
|
+
showNotification?: boolean;
|
|
10
|
+
notificationCount?: number;
|
|
11
|
+
variant?: 'minimal' | 'glass' | 'solid';
|
|
12
|
+
shouldDisplay?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export declare const FloatingButton: React.FC<FloatingButtonProps>;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=FloatingButton.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FloatingButton.d.ts","sourceRoot":"","sources":["../../src/components/FloatingButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEpC,UAAU,mBAAmB;IAC3B,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IAC/C,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;IACxC,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAsJxD,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface ImageGalleryProps {
|
|
3
|
+
images: string[];
|
|
4
|
+
initialIndex?: number;
|
|
5
|
+
onClose: () => void;
|
|
6
|
+
/** Used for overlay gradient when rendered outside `.fusioni-chat-widget` (e.g. portal). */
|
|
7
|
+
theme?: 'light' | 'dark';
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Full-screen image lightbox: main image + prev/next, keyboard nav,
|
|
11
|
+
* and a two-row thumbnail strip with horizontal pages and dot indicators (fusioni-web parity).
|
|
12
|
+
*/
|
|
13
|
+
export declare const ImageGallery: React.FC<ImageGalleryProps>;
|
|
14
|
+
//# sourceMappingURL=ImageGallery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImageGallery.d.ts","sourceRoot":"","sources":["../../src/components/ImageGallery.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4D,MAAM,OAAO,CAAC;AAGjF,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,4FAA4F;IAC5F,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CAC1B;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAiOpD,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Language } from '../i18n';
|
|
3
|
+
interface LanguageSwitcherProps {
|
|
4
|
+
currentLanguage: Language;
|
|
5
|
+
onLanguageChange: (language: Language) => void;
|
|
6
|
+
className?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare const LanguageSwitcher: React.FC<LanguageSwitcherProps>;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=LanguageSwitcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LanguageSwitcher.d.ts","sourceRoot":"","sources":["../../src/components/LanguageSwitcher.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAGnC,UAAU,qBAAqB;IAC7B,eAAe,EAAE,QAAQ,CAAC;IAC1B,gBAAgB,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,IAAI,CAAC;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CA0F5D,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface MapProps {
|
|
3
|
+
lat: string | number;
|
|
4
|
+
lng: string | number;
|
|
5
|
+
zoom?: string | number;
|
|
6
|
+
staticMap?: boolean;
|
|
7
|
+
width?: number;
|
|
8
|
+
height?: number;
|
|
9
|
+
apiBaseUrl?: string;
|
|
10
|
+
apiKey?: string;
|
|
11
|
+
agencyId: string;
|
|
12
|
+
}
|
|
13
|
+
export declare const Map: React.FC<MapProps>;
|
|
14
|
+
//# sourceMappingURL=Map.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Map.d.ts","sourceRoot":"","sources":["../../src/components/Map.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAEnD,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC,QAAQ,CA0KlC,CAAC"}
|