@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.
Files changed (81) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +389 -0
  3. package/dist/assets/logo-base64.d.ts +2 -0
  4. package/dist/assets/logo-base64.d.ts.map +1 -0
  5. package/dist/browser.d.ts +28 -0
  6. package/dist/browser.d.ts.map +1 -0
  7. package/dist/components/AudioRecorder.d.ts +9 -0
  8. package/dist/components/AudioRecorder.d.ts.map +1 -0
  9. package/dist/components/ChatInput.d.ts +6 -0
  10. package/dist/components/ChatInput.d.ts.map +1 -0
  11. package/dist/components/ChatLoader.d.ts +3 -0
  12. package/dist/components/ChatLoader.d.ts.map +1 -0
  13. package/dist/components/ChatPanel.d.ts +13 -0
  14. package/dist/components/ChatPanel.d.ts.map +1 -0
  15. package/dist/components/ChatWidget.d.ts +5 -0
  16. package/dist/components/ChatWidget.d.ts.map +1 -0
  17. package/dist/components/ConfirmationDialog.d.ts +14 -0
  18. package/dist/components/ConfirmationDialog.d.ts.map +1 -0
  19. package/dist/components/ConversationList.d.ts +4 -0
  20. package/dist/components/ConversationList.d.ts.map +1 -0
  21. package/dist/components/FileUpload.d.ts +11 -0
  22. package/dist/components/FileUpload.d.ts.map +1 -0
  23. package/dist/components/FloatingButton.d.ts +16 -0
  24. package/dist/components/FloatingButton.d.ts.map +1 -0
  25. package/dist/components/ImageGallery.d.ts +14 -0
  26. package/dist/components/ImageGallery.d.ts.map +1 -0
  27. package/dist/components/LanguageSwitcher.d.ts +10 -0
  28. package/dist/components/LanguageSwitcher.d.ts.map +1 -0
  29. package/dist/components/Map.d.ts +14 -0
  30. package/dist/components/Map.d.ts.map +1 -0
  31. package/dist/components/Map.example.d.ts +4 -0
  32. package/dist/components/Map.example.d.ts.map +1 -0
  33. package/dist/components/Message.d.ts +4 -0
  34. package/dist/components/Message.d.ts.map +1 -0
  35. package/dist/components/MessageList.d.ts +25 -0
  36. package/dist/components/MessageList.d.ts.map +1 -0
  37. package/dist/components/PaginatedGalleryStrip.d.ts +20 -0
  38. package/dist/components/PaginatedGalleryStrip.d.ts.map +1 -0
  39. package/dist/components/Spotlight.d.ts +7 -0
  40. package/dist/components/Spotlight.d.ts.map +1 -0
  41. package/dist/components/UrlPreview.d.ts +20 -0
  42. package/dist/components/UrlPreview.d.ts.map +1 -0
  43. package/dist/fusioni-sdk.umd.js +41642 -0
  44. package/dist/fusioni-sdk.umd.js.map +1 -0
  45. package/dist/hooks/useChatState.d.ts +26 -0
  46. package/dist/hooks/useChatState.d.ts.map +1 -0
  47. package/dist/hooks/useSSE.d.ts +2 -0
  48. package/dist/hooks/useSSE.d.ts.map +1 -0
  49. package/dist/hooks/useTheme.d.ts +8 -0
  50. package/dist/hooks/useTheme.d.ts.map +1 -0
  51. package/dist/hooks/useTranslation.d.ts +12 -0
  52. package/dist/hooks/useTranslation.d.ts.map +1 -0
  53. package/dist/i18n/el.d.ts +90 -0
  54. package/dist/i18n/el.d.ts.map +1 -0
  55. package/dist/i18n/en.d.ts +90 -0
  56. package/dist/i18n/en.d.ts.map +1 -0
  57. package/dist/i18n/index.d.ts +190 -0
  58. package/dist/i18n/index.d.ts.map +1 -0
  59. package/dist/index.css +1 -0
  60. package/dist/index.d.ts +495 -0
  61. package/dist/index.d.ts.map +1 -0
  62. package/dist/index.esm.css +1 -0
  63. package/dist/index.esm.js +6458 -0
  64. package/dist/index.esm.js.map +1 -0
  65. package/dist/index.js +6492 -0
  66. package/dist/index.js.map +1 -0
  67. package/dist/services/ApiClient.d.ts +17 -0
  68. package/dist/services/ApiClient.d.ts.map +1 -0
  69. package/dist/services/ConversationService.d.ts +45 -0
  70. package/dist/services/ConversationService.d.ts.map +1 -0
  71. package/dist/services/MessageService.d.ts +18 -0
  72. package/dist/services/MessageService.d.ts.map +1 -0
  73. package/dist/services/PipelineService.d.ts +16 -0
  74. package/dist/services/PipelineService.d.ts.map +1 -0
  75. package/dist/services/SDKClientService.d.ts +31 -0
  76. package/dist/services/SDKClientService.d.ts.map +1 -0
  77. package/dist/test.d.ts +4 -0
  78. package/dist/test.d.ts.map +1 -0
  79. package/dist/types/index.d.ts +163 -0
  80. package/dist/types/index.d.ts.map +1 -0
  81. 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,6 @@
1
+ import React from 'react';
2
+ import { ChatInputProps } from '../types';
3
+ declare const ChatInput: React.FC<ChatInputProps>;
4
+ export { ChatInput };
5
+ export default ChatInput;
6
+ //# sourceMappingURL=ChatInput.d.ts.map
@@ -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,3 @@
1
+ import React from 'react';
2
+ export declare const ChatLoader: React.FC;
3
+ //# sourceMappingURL=ChatLoader.d.ts.map
@@ -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,5 @@
1
+ import React from 'react';
2
+ import { ChatWidgetProps } from '../types';
3
+ import '../styles/index.css';
4
+ export declare const ChatWidget: React.FC<ChatWidgetProps>;
5
+ //# sourceMappingURL=ChatWidget.d.ts.map
@@ -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,4 @@
1
+ import React from 'react';
2
+ import { ConversationListProps } from '../types';
3
+ export declare const ConversationList: React.FC<ConversationListProps>;
4
+ //# sourceMappingURL=ConversationList.d.ts.map
@@ -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"}