genassist-chat-react 1.0.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.
@@ -0,0 +1,520 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
13
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
14
+ return new (P || (P = Promise))(function (resolve, reject) {
15
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
16
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
17
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
18
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
19
+ });
20
+ };
21
+ var __generator = (this && this.__generator) || function (thisArg, body) {
22
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
23
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
24
+ function verb(n) { return function (v) { return step([n, v]); }; }
25
+ function step(op) {
26
+ if (f) throw new TypeError("Generator is already executing.");
27
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
28
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
29
+ if (y = 0, t) op = [op[0] & 2, t.value];
30
+ switch (op[0]) {
31
+ case 0: case 1: t = op; break;
32
+ case 4: _.label++; return { value: op[1], done: false };
33
+ case 5: _.label++; y = op[1]; op = [0]; continue;
34
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
35
+ default:
36
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
37
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
38
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
39
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
40
+ if (t[2]) _.ops.pop();
41
+ _.trys.pop(); continue;
42
+ }
43
+ op = body.call(thisArg, _);
44
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
45
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
46
+ }
47
+ };
48
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
49
+ import { useState, useRef, useEffect, useLayoutEffect } from 'react';
50
+ import { ChatMessageComponent } from './ChatMessage';
51
+ import { useChat } from '../hooks/useChat';
52
+ import { VoiceInput } from './VoiceInput';
53
+ import { AudioService } from '../services/audioService';
54
+ import { Send, Paperclip, MoreVertical, RefreshCw, XIcon, MessageSquareMore } from 'lucide-react';
55
+ import chatLogo from '../../assets/chat-logo.png';
56
+ export var GenAgentChat = function (_a) {
57
+ var baseUrl = _a.baseUrl, apiKey = _a.apiKey, metadata = _a.metadata, onError = _a.onError, onTakeover = _a.onTakeover, onFinalize = _a.onFinalize, theme = _a.theme, _b = _a.headerTitle, headerTitle = _b === void 0 ? 'Genassist' : _b, _c = _a.placeholder, placeholder = _c === void 0 ? 'Ask a question' : _c, _d = _a.mode, mode = _d === void 0 ? 'embedded' : _d, _e = _a.floatingConfig, floatingConfig = _e === void 0 ? {} : _e;
58
+ var _f = useState(''), inputValue = _f[0], setInputValue = _f[1];
59
+ var _g = useState(false), showResetConfirm = _g[0], setShowResetConfirm = _g[1];
60
+ var _h = useState(false), showMenu = _h[0], setShowMenu = _h[1];
61
+ var _j = useState(false), isPlayingAudio = _j[0], setIsPlayingAudio = _j[1];
62
+ var _k = useState(false), isFloatingOpen = _k[0], setIsFloatingOpen = _k[1];
63
+ var menuRef = useRef(null);
64
+ var _l = useChat({
65
+ baseUrl: baseUrl,
66
+ apiKey: apiKey,
67
+ metadata: metadata,
68
+ onError: onError,
69
+ onTakeover: onTakeover,
70
+ onFinalize: onFinalize
71
+ }), messages = _l.messages, isLoading = _l.isLoading, sendMessage = _l.sendMessage, resetConversation = _l.resetConversation, startConversation = _l.startConversation, connectionState = _l.connectionState, conversationId = _l.conversationId, possibleQueries = _l.possibleQueries, isTakenOver = _l.isTakenOver, isFinalized = _l.isFinalized;
72
+ var messagesEndRef = useRef(null);
73
+ var audioService = useRef(null);
74
+ var hasUserMessages = messages.some(function (message) { return message.speaker === 'customer'; });
75
+ useEffect(function () {
76
+ audioService.current = new AudioService({ baseUrl: baseUrl, apiKey: apiKey });
77
+ }, [baseUrl, apiKey]);
78
+ // Auto-scroll to the latest message
79
+ useLayoutEffect(function () {
80
+ if (messagesEndRef.current) {
81
+ messagesEndRef.current.scrollIntoView({ behavior: 'smooth' });
82
+ }
83
+ }, [messages]);
84
+ // Close menu when clicking outside
85
+ // useEffect(() => {
86
+ // const handleClickOutside = (event: MouseEvent) => {
87
+ // if (menuRef.current && !menuRef.current.contains(event.target as Node)) {
88
+ // setShowMenu(false);
89
+ // }
90
+ // };
91
+ // document.addEventListener('mousedown', handleClickOutside);
92
+ // return () => {
93
+ // document.removeEventListener('mousedown', handleClickOutside);
94
+ // };
95
+ // }, []);
96
+ var handleSubmit = function (e) { return __awaiter(void 0, void 0, void 0, function () {
97
+ var error_1;
98
+ return __generator(this, function (_a) {
99
+ switch (_a.label) {
100
+ case 0:
101
+ e.preventDefault();
102
+ if (inputValue.trim() === '' || isLoading)
103
+ return [2 /*return*/];
104
+ _a.label = 1;
105
+ case 1:
106
+ _a.trys.push([1, 3, , 4]);
107
+ setInputValue('');
108
+ return [4 /*yield*/, sendMessage(inputValue)];
109
+ case 2:
110
+ _a.sent();
111
+ return [3 /*break*/, 4];
112
+ case 3:
113
+ error_1 = _a.sent();
114
+ console.error('Error sending message:', error_1);
115
+ return [3 /*break*/, 4];
116
+ case 4: return [2 /*return*/];
117
+ }
118
+ });
119
+ }); };
120
+ var handleVoiceTranscription = function (text) { return __awaiter(void 0, void 0, void 0, function () {
121
+ return __generator(this, function (_a) {
122
+ if (text.trim() === '')
123
+ return [2 /*return*/];
124
+ setInputValue(text);
125
+ return [2 /*return*/];
126
+ });
127
+ }); };
128
+ var handleVoiceError = function (error) {
129
+ console.error('Voice input error:', error);
130
+ if (onError) {
131
+ onError(error);
132
+ }
133
+ };
134
+ var playResponseAudio = function (text) { return __awaiter(void 0, void 0, void 0, function () {
135
+ var audioBlob, error_2;
136
+ return __generator(this, function (_a) {
137
+ switch (_a.label) {
138
+ case 0:
139
+ if (!audioService.current || isPlayingAudio)
140
+ return [2 /*return*/];
141
+ _a.label = 1;
142
+ case 1:
143
+ _a.trys.push([1, 4, 5, 6]);
144
+ setIsPlayingAudio(true);
145
+ return [4 /*yield*/, audioService.current.textToSpeech(text)];
146
+ case 2:
147
+ audioBlob = _a.sent();
148
+ return [4 /*yield*/, audioService.current.playAudio(audioBlob)];
149
+ case 3:
150
+ _a.sent();
151
+ return [3 /*break*/, 6];
152
+ case 4:
153
+ error_2 = _a.sent();
154
+ console.error('Error playing audio:', error_2);
155
+ if (onError) {
156
+ onError(error_2);
157
+ }
158
+ return [3 /*break*/, 6];
159
+ case 5:
160
+ setIsPlayingAudio(false);
161
+ return [7 /*endfinally*/];
162
+ case 6: return [2 /*return*/];
163
+ }
164
+ });
165
+ }); };
166
+ var handleQueryClick = function (query) { return __awaiter(void 0, void 0, void 0, function () {
167
+ var error_3;
168
+ return __generator(this, function (_a) {
169
+ switch (_a.label) {
170
+ case 0:
171
+ if (isLoading)
172
+ return [2 /*return*/];
173
+ _a.label = 1;
174
+ case 1:
175
+ _a.trys.push([1, 3, , 4]);
176
+ return [4 /*yield*/, sendMessage(query)];
177
+ case 2:
178
+ _a.sent();
179
+ return [3 /*break*/, 4];
180
+ case 3:
181
+ error_3 = _a.sent();
182
+ console.error('Error sending quick query:', error_3);
183
+ return [3 /*break*/, 4];
184
+ case 4: return [2 /*return*/];
185
+ }
186
+ });
187
+ }); };
188
+ var handleStartConversation = function () { return __awaiter(void 0, void 0, void 0, function () {
189
+ var error_4;
190
+ return __generator(this, function (_a) {
191
+ switch (_a.label) {
192
+ case 0:
193
+ if (isLoading)
194
+ return [2 /*return*/];
195
+ _a.label = 1;
196
+ case 1:
197
+ _a.trys.push([1, 3, , 4]);
198
+ return [4 /*yield*/, startConversation()];
199
+ case 2:
200
+ _a.sent();
201
+ return [3 /*break*/, 4];
202
+ case 3:
203
+ error_4 = _a.sent();
204
+ console.error('Error starting conversation:', error_4);
205
+ return [3 /*break*/, 4];
206
+ case 4: return [2 /*return*/];
207
+ }
208
+ });
209
+ }); };
210
+ var handleMenuClick = function () {
211
+ setShowMenu(function (prev) { return !prev; });
212
+ };
213
+ var handleResetClick = function () {
214
+ setShowMenu(false);
215
+ setShowResetConfirm(true);
216
+ };
217
+ var handleConfirmReset = function () { return __awaiter(void 0, void 0, void 0, function () {
218
+ return __generator(this, function (_a) {
219
+ switch (_a.label) {
220
+ case 0: return [4 /*yield*/, resetConversation()];
221
+ case 1:
222
+ _a.sent();
223
+ setShowResetConfirm(false);
224
+ return [2 /*return*/];
225
+ }
226
+ });
227
+ }); };
228
+ var handleCancelReset = function () {
229
+ setShowResetConfirm(false);
230
+ };
231
+ var toggleFloatingChat = function () {
232
+ setIsFloatingOpen(function (prev) { return !prev; });
233
+ };
234
+ // Extract theme colors or use defaults
235
+ var primaryColor = (theme === null || theme === void 0 ? void 0 : theme.primaryColor) || '#2962FF';
236
+ var backgroundColor = (theme === null || theme === void 0 ? void 0 : theme.backgroundColor) || '#ffffff';
237
+ var textColor = (theme === null || theme === void 0 ? void 0 : theme.textColor) || '#000000';
238
+ var fontFamily = (theme === null || theme === void 0 ? void 0 : theme.fontFamily) || 'Roboto, Arial, sans-serif';
239
+ var fontSize = (theme === null || theme === void 0 ? void 0 : theme.fontSize) || '14px';
240
+ // Floating configuration defaults
241
+ var position = floatingConfig.position || 'bottom-right';
242
+ var offset = floatingConfig.offset || { x: 20, y: 20 };
243
+ var offsetX = offset.x || 20;
244
+ var offsetY = offset.y || 20;
245
+ var toggleButtonIcon = floatingConfig.toggleButtonIcon || _jsx(MessageSquareMore, {});
246
+ var closeButtonIcon = floatingConfig.closeButtonIcon || _jsx(XIcon, {});
247
+ var containerStyle = {
248
+ display: 'flex',
249
+ flexDirection: 'column',
250
+ height: '100%',
251
+ maxHeight: '600px',
252
+ width: '100%',
253
+ maxWidth: '400px',
254
+ border: '1px solid #e0e0e0',
255
+ borderRadius: '8px',
256
+ overflow: 'hidden',
257
+ backgroundColor: backgroundColor,
258
+ fontFamily: fontFamily,
259
+ boxShadow: '0 2px 10px rgba(0, 0, 0, 0.1)',
260
+ position: 'relative'
261
+ };
262
+ var headerStyle = {
263
+ padding: '15px',
264
+ backgroundColor: primaryColor,
265
+ color: '#ffffff',
266
+ fontWeight: 'bold',
267
+ display: 'flex',
268
+ justifyContent: 'space-between',
269
+ alignItems: 'center',
270
+ position: 'relative'
271
+ };
272
+ var logoContainerStyle = {
273
+ display: 'flex',
274
+ alignItems: 'center',
275
+ gap: '10px'
276
+ };
277
+ var logoStyle = {
278
+ width: '28px',
279
+ height: '28px',
280
+ };
281
+ var headerTitleContainerStyle = {
282
+ display: 'flex',
283
+ flexDirection: 'column',
284
+ };
285
+ var headerTitleStyle = {
286
+ fontSize: '16px',
287
+ fontWeight: 'bold',
288
+ margin: 0,
289
+ fontFamily: fontFamily,
290
+ };
291
+ var headerSubtitleStyle = {
292
+ fontSize: '14px',
293
+ fontWeight: 'normal',
294
+ margin: 0,
295
+ fontFamily: fontFamily,
296
+ };
297
+ var menuButtonStyle = {
298
+ backgroundColor: 'transparent',
299
+ color: '#ffffff',
300
+ border: 'none',
301
+ borderRadius: '50%',
302
+ width: '32px',
303
+ height: '32px',
304
+ display: 'flex',
305
+ alignItems: 'center',
306
+ justifyContent: 'center',
307
+ cursor: 'pointer',
308
+ outline: 'none',
309
+ };
310
+ var menuPopupStyle = {
311
+ position: 'absolute',
312
+ top: '50px',
313
+ right: '15px',
314
+ backgroundColor: backgroundColor,
315
+ borderRadius: '8px',
316
+ boxShadow: '0 2px 10px rgba(0, 0, 0, 0.1)',
317
+ zIndex: 10,
318
+ display: showMenu ? 'block' : 'none',
319
+ minWidth: '150px',
320
+ overflow: 'hidden',
321
+ };
322
+ var menuItemStyle = {
323
+ display: 'flex',
324
+ alignItems: 'center',
325
+ gap: '8px',
326
+ padding: '10px 15px',
327
+ color: textColor,
328
+ cursor: 'pointer',
329
+ fontSize: fontSize,
330
+ fontFamily: fontFamily,
331
+ borderBottom: '1px solid #f0f0f0',
332
+ };
333
+ var chatContainerStyle = {
334
+ flex: 1,
335
+ overflowY: 'auto',
336
+ padding: '15px',
337
+ backgroundColor: backgroundColor,
338
+ display: 'flex',
339
+ flexDirection: 'column',
340
+ };
341
+ var inputContainerStyle = {
342
+ display: 'flex',
343
+ padding: '15px',
344
+ backgroundColor: '#f5f5f5',
345
+ alignItems: 'center',
346
+ gap: '8px',
347
+ borderTop: '1px solid #e0e0e0',
348
+ };
349
+ var inputWrapperStyle = {
350
+ display: 'flex',
351
+ flex: 1,
352
+ alignItems: 'center',
353
+ backgroundColor: '#ffffff',
354
+ borderRadius: '8px',
355
+ padding: '0 15px',
356
+ height: '48px',
357
+ boxShadow: '0 1px 3px rgba(0, 0, 0, 0.05)',
358
+ };
359
+ var inputStyle = {
360
+ flex: 1,
361
+ border: 'none',
362
+ outline: 'none',
363
+ background: 'transparent',
364
+ fontSize: fontSize,
365
+ fontFamily: fontFamily,
366
+ padding: '0 10px',
367
+ color: textColor,
368
+ };
369
+ var attachButtonStyle = {
370
+ backgroundColor: 'transparent',
371
+ border: 'none',
372
+ display: 'flex',
373
+ alignItems: 'center',
374
+ justifyContent: 'center',
375
+ cursor: 'pointer',
376
+ outline: 'none',
377
+ color: '#757575',
378
+ padding: 0,
379
+ };
380
+ var sendButtonStyle = {
381
+ backgroundColor: primaryColor,
382
+ color: '#ffffff',
383
+ border: 'none',
384
+ borderRadius: '8px',
385
+ width: '48px',
386
+ height: '48px',
387
+ display: 'flex',
388
+ alignItems: 'center',
389
+ justifyContent: 'center',
390
+ cursor: 'pointer',
391
+ outline: 'none',
392
+ flexShrink: 0,
393
+ boxShadow: '0 1px 3px rgba(0, 0, 0, 0.05)',
394
+ };
395
+ var possibleQueriesContainerStyle = {
396
+ display: 'flex',
397
+ flexDirection: 'column',
398
+ gap: '8px',
399
+ padding: '0',
400
+ paddingLeft: '28px',
401
+ paddingRight: '28px',
402
+ marginTop: '5px',
403
+ marginBottom: '15px',
404
+ width: '100%',
405
+ fontFamily: fontFamily,
406
+ };
407
+ var queryButtonStyle = {
408
+ padding: '12px 15px',
409
+ backgroundColor: (theme === null || theme === void 0 ? void 0 : theme.secondaryColor) || '#f5f5f5',
410
+ color: textColor,
411
+ border: 'none',
412
+ borderRadius: '6px',
413
+ fontSize: fontSize,
414
+ cursor: 'pointer',
415
+ textAlign: 'left',
416
+ fontWeight: 'normal',
417
+ boxShadow: 'none',
418
+ width: '100%',
419
+ maxWidth: '240px',
420
+ fontFamily: fontFamily,
421
+ };
422
+ var confirmOverlayStyle = {
423
+ display: showResetConfirm ? 'flex' : 'none',
424
+ position: 'absolute',
425
+ top: 0,
426
+ left: 0,
427
+ right: 0,
428
+ bottom: 0,
429
+ backgroundColor: 'rgba(0, 0, 0, 0.5)',
430
+ zIndex: 10,
431
+ justifyContent: 'center',
432
+ alignItems: 'center',
433
+ };
434
+ var confirmDialogStyle = {
435
+ backgroundColor: backgroundColor,
436
+ padding: '20px',
437
+ borderRadius: '8px',
438
+ maxWidth: '300px',
439
+ textAlign: 'center',
440
+ fontFamily: fontFamily,
441
+ color: textColor,
442
+ };
443
+ var confirmButtonsStyle = {
444
+ display: 'flex',
445
+ justifyContent: 'center',
446
+ marginTop: '15px',
447
+ gap: '10px',
448
+ };
449
+ var confirmButtonStyle = function (isConfirm) { return ({
450
+ padding: '8px 16px',
451
+ backgroundColor: isConfirm ? '#F44336' : '#e0e0e0',
452
+ color: isConfirm ? '#ffffff' : textColor,
453
+ border: 'none',
454
+ borderRadius: '4px',
455
+ cursor: 'pointer',
456
+ fontFamily: fontFamily,
457
+ fontSize: fontSize,
458
+ }); };
459
+ // Floating mode styles
460
+ var getPositionStyles = function () {
461
+ var base = {
462
+ position: 'fixed',
463
+ zIndex: 1000,
464
+ };
465
+ switch (position) {
466
+ case 'bottom-right':
467
+ return __assign(__assign({}, base), { bottom: offsetY, right: offsetX });
468
+ case 'bottom-left':
469
+ return __assign(__assign({}, base), { bottom: offsetY, left: offsetX });
470
+ case 'top-right':
471
+ return __assign(__assign({}, base), { top: offsetY, right: offsetX });
472
+ case 'top-left':
473
+ return __assign(__assign({}, base), { top: offsetY, left: offsetX });
474
+ default:
475
+ return __assign(__assign({}, base), { bottom: offsetY, right: offsetX });
476
+ }
477
+ };
478
+ var getChatPositionStyles = function () {
479
+ var base = {
480
+ position: 'fixed',
481
+ zIndex: 999,
482
+ };
483
+ switch (position) {
484
+ case 'bottom-right':
485
+ return __assign(__assign({}, base), { bottom: offsetY + 80, right: offsetX });
486
+ case 'bottom-left':
487
+ return __assign(__assign({}, base), { bottom: offsetY + 80, left: offsetX });
488
+ case 'top-right':
489
+ return __assign(__assign({}, base), { top: offsetY + 80, right: offsetX });
490
+ case 'top-left':
491
+ return __assign(__assign({}, base), { top: offsetY + 80, left: offsetX });
492
+ default:
493
+ return __assign(__assign({}, base), { bottom: offsetY + 80, right: offsetX });
494
+ }
495
+ };
496
+ var getResponsiveDimensions = function () {
497
+ var screenWidth = typeof window !== 'undefined' ? window.innerWidth : 1024;
498
+ if (screenWidth <= 480) {
499
+ return { width: 'calc(100vw - 40px)', height: '450px' };
500
+ }
501
+ else if (screenWidth <= 768) {
502
+ return { width: '350px', height: '500px' };
503
+ }
504
+ else {
505
+ return { width: '380px', height: '600px' };
506
+ }
507
+ };
508
+ var floatingContainerStyle = __assign(__assign({}, getChatPositionStyles()), getResponsiveDimensions());
509
+ var toggleButtonStyle = __assign(__assign({}, getPositionStyles()), { width: '60px', height: '60px', borderRadius: '50%', backgroundColor: primaryColor, border: 'none', color: 'white', fontSize: '24px', cursor: 'pointer', boxShadow: '0 4px 12px rgba(41, 98, 255, 0.3)', transition: 'all 0.3s ease', display: 'flex', alignItems: 'center', justifyContent: 'center', zIndex: 1001 });
510
+ var renderChatComponent = function () { return (_jsxs("div", { style: containerStyle, children: [_jsxs("div", { style: headerStyle, children: [_jsxs("div", { style: logoContainerStyle, children: [_jsx("img", { src: chatLogo, alt: "Logo", style: logoStyle }), _jsxs("div", { style: headerTitleContainerStyle, children: [_jsx("div", { style: headerTitleStyle, children: headerTitle }), _jsx("div", { style: headerSubtitleStyle, children: "Support" })] })] }), _jsx("button", { style: menuButtonStyle, onClick: handleMenuClick, title: "Menu", children: _jsx(MoreVertical, { size: 24, color: "#ffffff" }) }), _jsx("div", { ref: menuRef, style: menuPopupStyle, children: _jsxs("div", { style: menuItemStyle, onClick: handleResetClick, children: [_jsx(RefreshCw, { size: 16 }), "Reset conversation"] }) })] }), _jsxs("div", { style: chatContainerStyle, children: [messages.map(function (message, index) {
511
+ var isNextSameSpeaker = index < messages.length - 1 && messages[index + 1].speaker === message.speaker;
512
+ var isPrevSameSpeaker = index > 0 && messages[index - 1].speaker === message.speaker;
513
+ return (_jsx(ChatMessageComponent, { message: message, theme: theme, onPlayAudio: message.speaker === 'agent' ? playResponseAudio : undefined, isPlayingAudio: isPlayingAudio, isFirstMessage: index === 0 && message.speaker === 'agent' && !hasUserMessages, isNextSameSpeaker: isNextSameSpeaker, isPrevSameSpeaker: isPrevSameSpeaker }, index));
514
+ }), _jsx("div", { ref: messagesEndRef })] }), possibleQueries.length > 0 && !hasUserMessages && (_jsx("div", { style: possibleQueriesContainerStyle, children: possibleQueries.map(function (query, index) { return (_jsx("button", { style: queryButtonStyle, onClick: function () { return handleQueryClick(query); }, disabled: isLoading, children: query }, index)); }) })), !conversationId || isFinalized ? (_jsx("div", { style: inputContainerStyle, children: _jsx("button", { style: __assign(__assign({}, sendButtonStyle), { width: '100%', height: '48px', borderRadius: '8px' }), onClick: handleStartConversation, disabled: isLoading, children: "Start Conversation" }) })) : (_jsxs("form", { onSubmit: handleSubmit, style: inputContainerStyle, children: [_jsxs("div", { style: inputWrapperStyle, children: [_jsx("button", { type: "button", style: attachButtonStyle, title: "Attach", children: _jsx(Paperclip, { size: 24, color: "#757575" }) }), _jsx("input", { style: inputStyle, type: "text", value: inputValue, onChange: function (e) { return setInputValue(e.target.value); }, placeholder: placeholder, disabled: connectionState !== 'connected' })] }), _jsx(VoiceInput, { onTranscription: handleVoiceTranscription, onError: handleVoiceError, baseUrl: baseUrl, apiKey: apiKey, theme: theme }), _jsx("button", { type: "submit", style: sendButtonStyle, disabled: inputValue.trim() === '' || connectionState !== 'connected', children: _jsx(Send, { size: 20, color: "#ffffff" }) })] })), _jsx("div", { style: confirmOverlayStyle, children: _jsxs("div", { style: confirmDialogStyle, children: [_jsx("h3", { style: { fontFamily: fontFamily, marginTop: 0 }, children: "Reset Conversation" }), _jsx("p", { style: { fontFamily: fontFamily, fontSize: fontSize }, children: "This will clear the current conversation history and start a new conversation. Are you sure?" }), _jsxs("div", { style: confirmButtonsStyle, children: [_jsx("button", { style: confirmButtonStyle(false), onClick: handleCancelReset, children: "Cancel" }), _jsx("button", { style: confirmButtonStyle(true), onClick: handleConfirmReset, children: "Reset" })] })] }) })] })); };
515
+ if (mode === 'floating') {
516
+ return (_jsxs(_Fragment, { children: [_jsx("button", { style: toggleButtonStyle, onClick: toggleFloatingChat, title: isFloatingOpen ? "Close Chat" : "Open Chat", children: isFloatingOpen ? _jsx(XIcon, { size: 24 }) : _jsx(MessageSquareMore, { size: 24 }) }), isFloatingOpen && (_jsx("div", { style: floatingContainerStyle, children: renderChatComponent() }))] }));
517
+ }
518
+ return renderChatComponent();
519
+ };
520
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2VuQWdlbnRDaGF0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvR2VuQWdlbnRDaGF0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDeEQsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDbEcsT0FBTyxRQUFRLE1BQU0sNEJBQTRCLENBQUM7QUFFbEQsTUFBTSxDQUFDLElBQU0sWUFBWSxHQUFnQyxVQUFDLEVBWXpEO1FBWEMsT0FBTyxhQUFBLEVBQ1AsTUFBTSxZQUFBLEVBQ04sUUFBUSxjQUFBLEVBQ1IsT0FBTyxhQUFBLEVBQ1AsVUFBVSxnQkFBQSxFQUNWLFVBQVUsZ0JBQUEsRUFDVixLQUFLLFdBQUEsRUFDTCxtQkFBeUIsRUFBekIsV0FBVyxtQkFBRyxXQUFXLEtBQUEsRUFDekIsbUJBQThCLEVBQTlCLFdBQVcsbUJBQUcsZ0JBQWdCLEtBQUEsRUFDOUIsWUFBaUIsRUFBakIsSUFBSSxtQkFBRyxVQUFVLEtBQUEsRUFDakIsc0JBQW1CLEVBQW5CLGNBQWMsbUJBQUcsRUFBRSxLQUFBO0lBRWIsSUFBQSxLQUE4QixRQUFRLENBQUMsRUFBRSxDQUFDLEVBQXpDLFVBQVUs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QUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsV0FBVyxZQUVqRCxjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQUMsS0FBSyxJQUFDLElBQUksRUFBRSxFQUFFLEdBQUksQ0FBQyxDQUFDLENBQUMsS0FBQyxpQkFBaUIsSUFBQyxJQUFJLEVBQUUsRUFBRSxHQUFJLEdBQ2hFLEVBRVIsY0FBYyxJQUFJLENBQ2pCLGNBQUssS0FBSyxFQUFFLHNCQUFzQixZQUMvQixtQkFBbUIsRUFBRSxHQUNsQixDQUNQLElBQ0EsQ0FDSixDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8sbUJBQW1CLEVBQUUsQ0FBQztBQUMvQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZVJlZiwgdXNlRWZmZWN0LCB1c2VMYXlvdXRFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBDaGF0TWVzc2FnZUNvbXBvbmVudCB9IGZyb20gJy4vQ2hhdE1lc3NhZ2UnO1xuaW1wb3J0IHsgdXNlQ2hhdCB9IGZyb20gJy4uL2hvb2tzL3VzZUNoYXQnO1xuaW1wb3J0IHsgQ2hhdE1lc3NhZ2UsIEdlbkFnZW50Q2hhdFByb3BzIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgVm9pY2VJbnB1dCB9IGZyb20gJy4vVm9pY2VJbnB1dCc7XG5pbXBvcnQgeyBBdWRpb1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9hdWRpb1NlcnZpY2UnO1xuaW1wb3J0IHsgU2VuZCwgUGFwZXJjbGlwLCBNb3JlVmVydGljYWwsIFJlZnJlc2hDdywgWEljb24sIE1lc3NhZ2VTcXVhcmVNb3JlIH0gZnJvbSAnbHVjaWRlLXJlYWN0JztcbmltcG9ydCBjaGF0TG9nbyBmcm9tICcuLi8uLi9hc3NldHMvY2hhdC1sb2dvLnBuZyc7XG5cbmV4cG9ydCBjb25zdCBHZW5BZ2VudENoYXQ6IFJlYWN0LkZDPEdlbkFnZW50Q2hhdFByb3BzPiA9ICh7XG4gIGJhc2VVcmwsXG4gIGFwaUtleSxcbiAgbWV0YWRhdGEsXG4gIG9uRXJyb3IsXG4gIG9uVGFrZW92ZXIsXG4gIG9uRmluYWxpemUsXG4gIHRoZW1lLFxuICBoZWFkZXJUaXRsZSA9ICdHZW5hc3Npc3QnLFxuICBwbGFjZWhvbGRlciA9ICdBc2sgYSBxdWVzdGlvbicsXG4gIG1vZGUgPSAnZW1iZWRkZWQnLFxuICBmbG9hdGluZ0NvbmZpZyA9IHt9XG59KSA9PiB7XG4gIGNvbnN0IFtpbnB1dFZhbHVlLCBzZXRJbnB1dFZhbHVlXSA9IHVzZVN0YXRlKCcnKTtcbiAgY29uc3QgW3Nob3dSZXNldENvbmZpcm0sIHNldFNob3dSZXNldENvbmZpcm1dID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbc2hvd01lbnUsIHNldFNob3dNZW51XSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2lzUGxheWluZ0F1ZGlvLCBzZXRJc1BsYXlpbmdBdWRpb10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtpc0Zsb2F0aW5nT3Blbiwgc2V0SXNGbG9hdGluZ09wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBtZW51UmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3QgeyBcbiAgICBtZXNzYWdlcywgXG4gICAgaXNMb2FkaW5nLCBcbiAgICBzZW5kTWVzc2FnZSwgXG4gICAgcmVzZXRDb252ZXJzYXRpb24sXG4gICAgc3RhcnRDb252ZXJzYXRpb24sXG4gICAgY29ubmVjdGlvblN0YXRlLCBcbiAgICBjb252ZXJzYXRpb25JZCxcbiAgICBwb3NzaWJsZVF1ZXJpZXMsXG4gICAgaXNUYWtlbk92ZXIsXG4gICAgaXNGaW5hbGl6ZWRcbiAgfSA9IHVzZUNoYXQoe1xuICAgIGJhc2VVcmwsXG4gICAgYXBpS2V5LFxuICAgIG1ldGFkYXRhLFxuICAgIG9uRXJyb3IsXG4gICAgb25UYWtlb3ZlcixcbiAgICBvbkZpbmFsaXplXG4gIH0pO1xuICBjb25zdCBtZXNzYWdlc0VuZFJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IGF1ZGlvU2VydmljZSA9IHVzZVJlZjxBdWRpb1NlcnZpY2UgfCBudWxsPihudWxsKTtcblxuICBjb25zdCBoYXNVc2VyTWVzc2FnZXMgPSBtZXNzYWdlcy5zb21lKG1lc3NhZ2UgPT4gbWVzc2FnZS5zcGVha2VyID09PSAnY3VzdG9tZXInKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGF1ZGlvU2VydmljZS5jdXJyZW50ID0gbmV3IEF1ZGlvU2VydmljZSh7IGJhc2VVcmwsIGFwaUtleSB9KTtcbiAgfSwgW2Jhc2VVcmwsIGFwaUtleV0pO1xuXG4gIC8vIEF1dG8tc2Nyb2xsIHRvIHRoZSBsYXRlc3QgbWVzc2FnZVxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChtZXNzYWdlc0VuZFJlZi5jdXJyZW50KSB7XG4gICAgICBtZXNzYWdlc0VuZFJlZi5jdXJyZW50LnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xuICAgIH1cbiAgfSwgW21lc3NhZ2VzXSk7XG5cbiAgLy8gQ2xvc2UgbWVudSB3aGVuIGNsaWNraW5nIG91dHNpZGVcbiAgLy8gdXNlRWZmZWN0KCgpID0+IHtcbiAgLy8gICBjb25zdCBoYW5kbGVDbGlja091dHNpZGUgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgLy8gICAgIGlmIChtZW51UmVmLmN1cnJlbnQgJiYgIW1lbnVSZWYuY3VycmVudC5jb250YWlucyhldmVudC50YXJnZXQgYXMgTm9kZSkpIHtcbiAgLy8gICAgICAgc2V0U2hvd01lbnUoZmFsc2UpO1xuICAvLyAgICAgfVxuICAvLyAgIH07XG5cbiAgLy8gICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBoYW5kbGVDbGlja091dHNpZGUpO1xuICAvLyAgIHJldHVybiAoKSA9PiB7XG4gIC8vICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBoYW5kbGVDbGlja091dHNpZGUpO1xuICAvLyAgIH07XG4gIC8vIH0sIFtdKTtcblxuICBjb25zdCBoYW5kbGVTdWJtaXQgPSBhc3luYyAoZTogUmVhY3QuRm9ybUV2ZW50KSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmIChpbnB1dFZhbHVlLnRyaW0oKSA9PT0gJycgfHwgaXNMb2FkaW5nKSByZXR1cm47XG5cbiAgICB0cnkge1xuICAgICAgc2V0SW5wdXRWYWx1ZSgnJyk7XG4gICAgICBhd2FpdCBzZW5kTWVzc2FnZShpbnB1dFZhbHVlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igc2VuZGluZyBtZXNzYWdlOicsIGVycm9yKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlVm9pY2VUcmFuc2NyaXB0aW9uID0gYXN5bmMgKHRleHQ6IHN0cmluZykgPT4ge1xuICAgIGlmICh0ZXh0LnRyaW0oKSA9PT0gJycpIHJldHVybjtcbiAgICBzZXRJbnB1dFZhbHVlKHRleHQpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVZvaWNlRXJyb3IgPSAoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgY29uc29sZS5lcnJvcignVm9pY2UgaW5wdXQgZXJyb3I6JywgZXJyb3IpO1xuICAgIGlmIChvbkVycm9yKSB7XG4gICAgICBvbkVycm9yKGVycm9yKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgcGxheVJlc3BvbnNlQXVkaW8gPSBhc3luYyAodGV4dDogc3RyaW5nKSA9PiB7XG4gICAgaWYgKCFhdWRpb1NlcnZpY2UuY3VycmVudCB8fCBpc1BsYXlpbmdBdWRpbykgcmV0dXJuO1xuXG4gICAgdHJ5IHtcbiAgICAgIHNldElzUGxheWluZ0F1ZGlvKHRydWUpO1xuICAgICAgY29uc3QgYXVkaW9CbG9iID0gYXdhaXQgYXVkaW9TZXJ2aWNlLmN1cnJlbnQudGV4dFRvU3BlZWNoKHRleHQpO1xuICAgICAgYXdhaXQgYXVkaW9TZXJ2aWNlLmN1cnJlbnQucGxheUF1ZGlvKGF1ZGlvQmxvYik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHBsYXlpbmcgYXVkaW86JywgZXJyb3IpO1xuICAgICAgaWYgKG9uRXJyb3IpIHtcbiAgICAgICAgb25FcnJvcihlcnJvciBhcyBFcnJvcik7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldElzUGxheWluZ0F1ZGlvKGZhbHNlKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlUXVlcnlDbGljayA9IGFzeW5jIChxdWVyeTogc3RyaW5nKSA9PiB7XG4gICAgaWYgKGlzTG9hZGluZykgcmV0dXJuO1xuICAgIFxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBzZW5kTWVzc2FnZShxdWVyeSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHNlbmRpbmcgcXVpY2sgcXVlcnk6JywgZXJyb3IpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVTdGFydENvbnZlcnNhdGlvbiA9IGFzeW5jICgpID0+IHtcbiAgICBpZiAoaXNMb2FkaW5nKSByZXR1cm47XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgc3RhcnRDb252ZXJzYXRpb24oKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igc3RhcnRpbmcgY29udmVyc2F0aW9uOicsIGVycm9yKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlTWVudUNsaWNrID0gKCkgPT4ge1xuICAgIHNldFNob3dNZW51KHByZXYgPT4gIXByZXYpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVJlc2V0Q2xpY2sgPSAoKSA9PiB7XG4gICAgc2V0U2hvd01lbnUoZmFsc2UpO1xuICAgIHNldFNob3dSZXNldENvbmZpcm0odHJ1ZSk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlQ29uZmlybVJlc2V0ID0gYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IHJlc2V0Q29udmVyc2F0aW9uKCk7XG4gICAgc2V0U2hvd1Jlc2V0Q29uZmlybShmYWxzZSk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlQ2FuY2VsUmVzZXQgPSAoKSA9PiB7XG4gICAgc2V0U2hvd1Jlc2V0Q29uZmlybShmYWxzZSk7XG4gIH07XG5cbiAgY29uc3QgdG9nZ2xlRmxvYXRpbmdDaGF0ID0gKCkgPT4ge1xuICAgIHNldElzRmxvYXRpbmdPcGVuKHByZXYgPT4gIXByZXYpO1xuICB9O1xuXG4gIC8vIEV4dHJhY3QgdGhlbWUgY29sb3JzIG9yIHVzZSBkZWZhdWx0c1xuICBjb25zdCBwcmltYXJ5Q29sb3IgPSB0aGVtZT8ucHJpbWFyeUNvbG9yIHx8ICcjMjk2MkZGJztcbiAgY29uc3QgYmFja2dyb3VuZENvbG9yID0gdGhlbWU/LmJhY2tncm91bmRDb2xvciB8fCAnI2ZmZmZmZic7XG4gIGNvbnN0IHRleHRDb2xvciA9IHRoZW1lPy50ZXh0Q29sb3IgfHwgJyMwMDAwMDAnO1xuICBjb25zdCBmb250RmFtaWx5ID0gdGhlbWU/LmZvbnRGYW1pbHkgfHwgJ1JvYm90bywgQXJpYWwsIHNhbnMtc2VyaWYnO1xuICBjb25zdCBmb250U2l6ZSA9IHRoZW1lPy5mb250U2l6ZSB8fCAnMTRweCc7XG5cbiAgLy8gRmxvYXRpbmcgY29uZmlndXJhdGlvbiBkZWZhdWx0c1xuICBjb25zdCBwb3NpdGlvbiA9IGZsb2F0aW5nQ29uZmlnLnBvc2l0aW9uIHx8ICdib3R0b20tcmlnaHQnO1xuICBjb25zdCBvZmZzZXQgPSBmbG9hdGluZ0NvbmZpZy5vZmZzZXQgfHwgeyB4OiAyMCwgeTogMjAgfTtcbiAgY29uc3Qgb2Zmc2V0WCA9IG9mZnNldC54IHx8IDIwO1xuICBjb25zdCBvZmZzZXRZID0gb2Zmc2V0LnkgfHwgMjA7XG4gIGNvbnN0IHRvZ2dsZUJ1dHRvbkljb24gPSBmbG9hdGluZ0NvbmZpZy50b2dnbGVCdXR0b25JY29uIHx8IDxNZXNzYWdlU3F1YXJlTW9yZSAvPjtcbiAgY29uc3QgY2xvc2VCdXR0b25JY29uID0gZmxvYXRpbmdDb25maWcuY2xvc2VCdXR0b25JY29uIHx8IDxYSWNvbiAvPjtcblxuICBjb25zdCBjb250YWluZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgbWF4SGVpZ2h0OiAnNjAwcHgnLFxuICAgIHdpZHRoOiAnMTAwJScsXG4gICAgbWF4V2lkdGg6ICc0MDBweCcsXG4gICAgYm9yZGVyOiAnMXB4IHNvbGlkICNlMGUwZTAnLFxuICAgIGJvcmRlclJhZGl1czogJzhweCcsXG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgIGJhY2tncm91bmRDb2xvcixcbiAgICBmb250RmFtaWx5LFxuICAgIGJveFNoYWRvdzogJzAgMnB4IDEwcHggcmdiYSgwLCAwLCAwLCAwLjEpJyxcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJ1xuICB9O1xuXG4gIGNvbnN0IGhlYWRlclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIHBhZGRpbmc6ICcxNXB4JyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHByaW1hcnlDb2xvcixcbiAgICBjb2xvcjogJyNmZmZmZmYnLFxuICAgIGZvbnRXZWlnaHQ6ICdib2xkJyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1iZXR3ZWVuJyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJ1xuICB9O1xuXG4gIGNvbnN0IGxvZ29Db250YWluZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgZ2FwOiAnMTBweCdcbiAgfTtcblxuICBjb25zdCBsb2dvU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgd2lkdGg6ICcyOHB4JyxcbiAgICBoZWlnaHQ6ICcyOHB4JyxcbiAgfTtcblxuICBjb25zdCBoZWFkZXJUaXRsZUNvbnRhaW5lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgfTtcblxuICBjb25zdCBoZWFkZXJUaXRsZVN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGZvbnRTaXplOiAnMTZweCcsXG4gICAgZm9udFdlaWdodDogJ2JvbGQnLFxuICAgIG1hcmdpbjogMCxcbiAgICBmb250RmFtaWx5LFxuICB9O1xuXG4gIGNvbnN0IGhlYWRlclN1YnRpdGxlU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZm9udFNpemU6ICcxNHB4JyxcbiAgICBmb250V2VpZ2h0OiAnbm9ybWFsJyxcbiAgICBtYXJnaW46IDAsXG4gICAgZm9udEZhbWlseSxcbiAgfTtcblxuICBjb25zdCBtZW51QnV0dG9uU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgIGNvbG9yOiAnI2ZmZmZmZicsXG4gICAgYm9yZGVyOiAnbm9uZScsXG4gICAgYm9yZGVyUmFkaXVzOiAnNTAlJyxcbiAgICB3aWR0aDogJzMycHgnLFxuICAgIGhlaWdodDogJzMycHgnLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgb3V0bGluZTogJ25vbmUnLFxuICB9O1xuXG4gIGNvbnN0IG1lbnVQb3B1cFN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIHRvcDogJzUwcHgnLFxuICAgIHJpZ2h0OiAnMTVweCcsXG4gICAgYmFja2dyb3VuZENvbG9yOiBiYWNrZ3JvdW5kQ29sb3IsXG4gICAgYm9yZGVyUmFkaXVzOiAnOHB4JyxcbiAgICBib3hTaGFkb3c6ICcwIDJweCAxMHB4IHJnYmEoMCwgMCwgMCwgMC4xKScsXG4gICAgekluZGV4OiAxMCxcbiAgICBkaXNwbGF5OiBzaG93TWVudSA/ICdibG9jaycgOiAnbm9uZScsXG4gICAgbWluV2lkdGg6ICcxNTBweCcsXG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICB9O1xuXG4gIGNvbnN0IG1lbnVJdGVtU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGdhcDogJzhweCcsXG4gICAgcGFkZGluZzogJzEwcHggMTVweCcsXG4gICAgY29sb3I6IHRleHRDb2xvcixcbiAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICBmb250U2l6ZSxcbiAgICBmb250RmFtaWx5LFxuICAgIGJvcmRlckJvdHRvbTogJzFweCBzb2xpZCAjZjBmMGYwJyxcbiAgfTtcblxuICBjb25zdCBjaGF0Q29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZmxleDogMSxcbiAgICBvdmVyZmxvd1k6ICdhdXRvJyxcbiAgICBwYWRkaW5nOiAnMTVweCcsXG4gICAgYmFja2dyb3VuZENvbG9yLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgfTtcblxuICBjb25zdCBpbnB1dENvbnRhaW5lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBwYWRkaW5nOiAnMTVweCcsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2Y1ZjVmNScsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgZ2FwOiAnOHB4JyxcbiAgICBib3JkZXJUb3A6ICcxcHggc29saWQgI2UwZTBlMCcsXG4gIH07XG5cbiAgY29uc3QgaW5wdXRXcmFwcGVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXg6IDEsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2ZmZmZmZicsXG4gICAgYm9yZGVyUmFkaXVzOiAnOHB4JyxcbiAgICBwYWRkaW5nOiAnMCAxNXB4JyxcbiAgICBoZWlnaHQ6ICc0OHB4JyxcbiAgICBib3hTaGFkb3c6ICcwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjA1KScsXG4gIH07XG5cbiAgY29uc3QgaW5wdXRTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBmbGV4OiAxLFxuICAgIGJvcmRlcjogJ25vbmUnLFxuICAgIG91dGxpbmU6ICdub25lJyxcbiAgICBiYWNrZ3JvdW5kOiAndHJhbnNwYXJlbnQnLFxuICAgIGZvbnRTaXplLFxuICAgIGZvbnRGYW1pbHksXG4gICAgcGFkZGluZzogJzAgMTBweCcsXG4gICAgY29sb3I6IHRleHRDb2xvcixcbiAgfTtcblxuICBjb25zdCBhdHRhY2hCdXR0b25TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgYm9yZGVyOiAnbm9uZScsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICBvdXRsaW5lOiAnbm9uZScsXG4gICAgY29sb3I6ICcjNzU3NTc1JyxcbiAgICBwYWRkaW5nOiAwLFxuICB9O1xuXG4gIGNvbnN0IHNlbmRCdXR0b25TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHByaW1hcnlDb2xvcixcbiAgICBjb2xvcjogJyNmZmZmZmYnLFxuICAgIGJvcmRlcjogJ25vbmUnLFxuICAgIGJvcmRlclJhZGl1czogJzhweCcsXG4gICAgd2lkdGg6ICc0OHB4JyxcbiAgICBoZWlnaHQ6ICc0OHB4JyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgIG91dGxpbmU6ICdub25lJyxcbiAgICBmbGV4U2hyaW5rOiAwLFxuICAgIGJveFNoYWRvdzogJzAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMDUpJyxcbiAgfTtcblxuICBjb25zdCBwb3NzaWJsZVF1ZXJpZXNDb250YWluZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgZ2FwOiAnOHB4JyxcbiAgICBwYWRkaW5nOiAnMCcsXG4gICAgcGFkZGluZ0xlZnQ6ICcyOHB4JyxcbiAgICBwYWRkaW5nUmlnaHQ6ICcyOHB4JyxcbiAgICBtYXJnaW5Ub3A6ICc1cHgnLFxuICAgIG1hcmdpbkJvdHRvbTogJzE1cHgnLFxuICAgIHdpZHRoOiAnMTAwJScsXG4gICAgZm9udEZhbWlseSxcbiAgfTtcbiAgXG4gIGNvbnN0IHF1ZXJ5QnV0dG9uU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgcGFkZGluZzogJzEycHggMTVweCcsXG4gICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZT8uc2Vjb25kYXJ5Q29sb3IgfHwgJyNmNWY1ZjUnLFxuICAgIGNvbG9yOiB0ZXh0Q29sb3IsXG4gICAgYm9yZGVyOiAnbm9uZScsXG4gICAgYm9yZGVyUmFkaXVzOiAnNnB4JyxcbiAgICBmb250U2l6ZSxcbiAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICB0ZXh0QWxpZ246ICdsZWZ0JyxcbiAgICBmb250V2VpZ2h0OiAnbm9ybWFsJyxcbiAgICBib3hTaGFkb3c6ICdub25lJyxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIG1heFdpZHRoOiAnMjQwcHgnLFxuICAgIGZvbnRGYW1pbHksXG4gIH07XG5cbiAgY29uc3QgY29uZmlybU92ZXJsYXlTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiBzaG93UmVzZXRDb25maXJtID8gJ2ZsZXgnIDogJ25vbmUnLFxuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIHRvcDogMCxcbiAgICBsZWZ0OiAwLFxuICAgIHJpZ2h0OiAwLFxuICAgIGJvdHRvbTogMCxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDAsIDAsIDAsIDAuNSknLFxuICAgIHpJbmRleDogMTAsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICB9O1xuXG4gIGNvbnN0IGNvbmZpcm1EaWFsb2dTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGJhY2tncm91bmRDb2xvcixcbiAgICBwYWRkaW5nOiAnMjBweCcsXG4gICAgYm9yZGVyUmFkaXVzOiAnOHB4JyxcbiAgICBtYXhXaWR0aDogJzMwMHB4JyxcbiAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgIGZvbnRGYW1pbHksXG4gICAgY29sb3I6IHRleHRDb2xvcixcbiAgfTtcblxuICBjb25zdCBjb25maXJtQnV0dG9uc1N0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgbWFyZ2luVG9wOiAnMTVweCcsXG4gICAgZ2FwOiAnMTBweCcsXG4gIH07XG5cbiAgY29uc3QgY29uZmlybUJ1dHRvblN0eWxlID0gKGlzQ29uZmlybTogYm9vbGVhbik6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPT4gKHtcbiAgICBwYWRkaW5nOiAnOHB4IDE2cHgnLFxuICAgIGJhY2tncm91bmRDb2xvcjogaXNDb25maXJtID8gJyNGNDQzMzYnIDogJyNlMGUwZTAnLFxuICAgIGNvbG9yOiBpc0NvbmZpcm0gPyAnI2ZmZmZmZicgOiB0ZXh0Q29sb3IsXG4gICAgYm9yZGVyOiAnbm9uZScsXG4gICAgYm9yZGVyUmFkaXVzOiAnNHB4JyxcbiAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICBmb250RmFtaWx5LFxuICAgIGZvbnRTaXplLFxuICB9KTtcblxuICAvLyBGbG9hdGluZyBtb2RlIHN0eWxlc1xuICBjb25zdCBnZXRQb3NpdGlvblN0eWxlcyA9ICgpOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0+IHtcbiAgICBjb25zdCBiYXNlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgICAgcG9zaXRpb246ICdmaXhlZCcsXG4gICAgICB6SW5kZXg6IDEwMDAsXG4gICAgfTtcblxuICAgIHN3aXRjaCAocG9zaXRpb24pIHtcbiAgICAgIGNhc2UgJ2JvdHRvbS1yaWdodCc6XG4gICAgICAgIHJldHVybiB7IC4uLmJhc2UsIGJvdHRvbTogb2Zmc2V0WSwgcmlnaHQ6IG9mZnNldFggfTtcbiAgICAgIGNhc2UgJ2JvdHRvbS1sZWZ0JzpcbiAgICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgYm90dG9tOiBvZmZzZXRZLCBsZWZ0OiBvZmZzZXRYIH07XG4gICAgICBjYXNlICd0b3AtcmlnaHQnOlxuICAgICAgICByZXR1cm4geyAuLi5iYXNlLCB0b3A6IG9mZnNldFksIHJpZ2h0OiBvZmZzZXRYIH07XG4gICAgICBjYXNlICd0b3AtbGVmdCc6XG4gICAgICAgIHJldHVybiB7IC4uLmJhc2UsIHRvcDogb2Zmc2V0WSwgbGVmdDogb2Zmc2V0WCB9O1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgYm90dG9tOiBvZmZzZXRZLCByaWdodDogb2Zmc2V0WCB9O1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBnZXRDaGF0UG9zaXRpb25TdHlsZXMgPSAoKTogUmVhY3QuQ1NTUHJvcGVydGllcyA9PiB7XG4gICAgY29uc3QgYmFzZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICAgIHBvc2l0aW9uOiAnZml4ZWQnLFxuICAgICAgekluZGV4OiA5OTksXG4gICAgfTtcblxuICAgIHN3aXRjaCAocG9zaXRpb24pIHtcbiAgICAgIGNhc2UgJ2JvdHRvbS1yaWdodCc6XG4gICAgICAgIHJldHVybiB7IFxuICAgICAgICAgIC4uLmJhc2UsIFxuICAgICAgICAgIGJvdHRvbTogb2Zmc2V0WSArIDgwLFxuICAgICAgICAgIHJpZ2h0OiBvZmZzZXRYIFxuICAgICAgICB9O1xuICAgICAgY2FzZSAnYm90dG9tLWxlZnQnOlxuICAgICAgICByZXR1cm4geyBcbiAgICAgICAgICAuLi5iYXNlLCBcbiAgICAgICAgICBib3R0b206IG9mZnNldFkgKyA4MCxcbiAgICAgICAgICBsZWZ0OiBvZmZzZXRYIFxuICAgICAgICB9O1xuICAgICAgY2FzZSAndG9wLXJpZ2h0JzpcbiAgICAgICAgcmV0dXJuIHsgXG4gICAgICAgICAgLi4uYmFzZSwgXG4gICAgICAgICAgdG9wOiBvZmZzZXRZICsgODAsXG4gICAgICAgICAgcmlnaHQ6IG9mZnNldFggXG4gICAgICAgIH07XG4gICAgICBjYXNlICd0b3AtbGVmdCc6XG4gICAgICAgIHJldHVybiB7IFxuICAgICAgICAgIC4uLmJhc2UsIFxuICAgICAgICAgIHRvcDogb2Zmc2V0WSArIDgwLFxuICAgICAgICAgIGxlZnQ6IG9mZnNldFggXG4gICAgICAgIH07XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4geyBcbiAgICAgICAgICAuLi5iYXNlLCBcbiAgICAgICAgICBib3R0b206IG9mZnNldFkgKyA4MCxcbiAgICAgICAgICByaWdodDogb2Zmc2V0WCBcbiAgICAgICAgfTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZ2V0UmVzcG9uc2l2ZURpbWVuc2lvbnMgPSAoKSA9PiB7XG4gICAgY29uc3Qgc2NyZWVuV2lkdGggPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdy5pbm5lcldpZHRoIDogMTAyNDtcbiAgICBpZiAoc2NyZWVuV2lkdGggPD0gNDgwKSB7XG4gICAgICByZXR1cm4geyB3aWR0aDogJ2NhbGMoMTAwdncgLSA0MHB4KScsIGhlaWdodDogJzQ1MHB4JyB9O1xuICAgIH0gZWxzZSBpZiAoc2NyZWVuV2lkdGggPD0gNzY4KSB7XG4gICAgICByZXR1cm4geyB3aWR0aDogJzM1MHB4JywgaGVpZ2h0OiAnNTAwcHgnIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7IHdpZHRoOiAnMzgwcHgnLCBoZWlnaHQ6ICc2MDBweCcgfTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZmxvYXRpbmdDb250YWluZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICAuLi5nZXRDaGF0UG9zaXRpb25TdHlsZXMoKSxcbiAgICAuLi5nZXRSZXNwb25zaXZlRGltZW5zaW9ucygpLFxuICB9O1xuXG4gIGNvbnN0IHRvZ2dsZUJ1dHRvblN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIC4uLmdldFBvc2l0aW9uU3R5bGVzKCksXG4gICAgd2lkdGg6ICc2MHB4JyxcbiAgICBoZWlnaHQ6ICc2MHB4JyxcbiAgICBib3JkZXJSYWRpdXM6ICc1MCUnLFxuICAgIGJhY2tncm91bmRDb2xvcjogcHJpbWFyeUNvbG9yLFxuICAgIGJvcmRlcjogJ25vbmUnLFxuICAgIGNvbG9yOiAnd2hpdGUnLFxuICAgIGZvbnRTaXplOiAnMjRweCcsXG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgYm94U2hhZG93OiAnMCA0cHggMTJweCByZ2JhKDQxLCA5OCwgMjU1LCAwLjMpJyxcbiAgICB0cmFuc2l0aW9uOiAnYWxsIDAuM3MgZWFzZScsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICB6SW5kZXg6IDEwMDEsXG4gIH07XG5cbiAgY29uc3QgcmVuZGVyQ2hhdENvbXBvbmVudCA9ICgpID0+IChcbiAgICA8ZGl2IHN0eWxlPXtjb250YWluZXJTdHlsZX0+XG4gICAgICA8ZGl2IHN0eWxlPXtoZWFkZXJTdHlsZX0+XG4gICAgICAgIDxkaXYgc3R5bGU9e2xvZ29Db250YWluZXJTdHlsZX0+XG4gICAgICAgICAgPGltZyBzcmM9e2NoYXRMb2dvfSBhbHQ9XCJMb2dvXCIgc3R5bGU9e2xvZ29TdHlsZX0gLz5cbiAgICAgICAgICA8ZGl2IHN0eWxlPXtoZWFkZXJUaXRsZUNvbnRhaW5lclN0eWxlfT5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e2hlYWRlclRpdGxlU3R5bGV9PntoZWFkZXJUaXRsZX08L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e2hlYWRlclN1YnRpdGxlU3R5bGV9PlN1cHBvcnQ8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxidXR0b24gXG4gICAgICAgICAgc3R5bGU9e21lbnVCdXR0b25TdHlsZX0gXG4gICAgICAgICAgb25DbGljaz17aGFuZGxlTWVudUNsaWNrfVxuICAgICAgICAgIHRpdGxlPVwiTWVudVwiXG4gICAgICAgID5cbiAgICAgICAgICA8TW9yZVZlcnRpY2FsIHNpemU9ezI0fSBjb2xvcj1cIiNmZmZmZmZcIiAvPlxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8ZGl2IHJlZj17bWVudVJlZn0gc3R5bGU9e21lbnVQb3B1cFN0eWxlfT5cbiAgICAgICAgICA8ZGl2IHN0eWxlPXttZW51SXRlbVN0eWxlfSBvbkNsaWNrPXtoYW5kbGVSZXNldENsaWNrfT5cbiAgICAgICAgICAgIDxSZWZyZXNoQ3cgc2l6ZT17MTZ9IC8+XG4gICAgICAgICAgICBSZXNldCBjb252ZXJzYXRpb25cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIFxuICAgICAgPGRpdiBzdHlsZT17Y2hhdENvbnRhaW5lclN0eWxlfT5cbiAgICAgICAge21lc3NhZ2VzLm1hcCgobWVzc2FnZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCBpc05leHRTYW1lU3BlYWtlciA9IGluZGV4IDwgbWVzc2FnZXMubGVuZ3RoIC0gMSAmJiBtZXNzYWdlc1tpbmRleCArIDFdLnNwZWFrZXIgPT09IG1lc3NhZ2Uuc3BlYWtlcjtcbiAgICAgICAgICBjb25zdCBpc1ByZXZTYW1lU3BlYWtlciA9IGluZGV4ID4gMCAmJiBtZXNzYWdlc1tpbmRleCAtIDFdLnNwZWFrZXIgPT09IG1lc3NhZ2Uuc3BlYWtlcjtcbiAgICAgICAgICBcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPENoYXRNZXNzYWdlQ29tcG9uZW50IFxuICAgICAgICAgICAgICBrZXk9e2luZGV4fSBcbiAgICAgICAgICAgICAgbWVzc2FnZT17bWVzc2FnZX0gXG4gICAgICAgICAgICAgIHRoZW1lPXt0aGVtZX1cbiAgICAgICAgICAgICAgb25QbGF5QXVkaW89e21lc3NhZ2Uuc3BlYWtlciA9PT0gJ2FnZW50JyA/IHBsYXlSZXNwb25zZUF1ZGlvIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICBpc1BsYXlpbmdBdWRpbz17aXNQbGF5aW5nQXVkaW99XG4gICAgICAgICAgICAgIGlzRmlyc3RNZXNzYWdlPXtpbmRleCA9PT0gMCAmJiBtZXNzYWdlLnNwZWFrZXIgPT09ICdhZ2VudCcgJiYgIWhhc1VzZXJNZXNzYWdlc31cbiAgICAgICAgICAgICAgaXNOZXh0U2FtZVNwZWFrZXI9e2lzTmV4dFNhbWVTcGVha2VyfVxuICAgICAgICAgICAgICBpc1ByZXZTYW1lU3BlYWtlcj17aXNQcmV2U2FtZVNwZWFrZXJ9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICk7XG4gICAgICAgIH0pfVxuICAgICAgICA8ZGl2IHJlZj17bWVzc2FnZXNFbmRSZWZ9IC8+XG4gICAgICA8L2Rpdj5cblxuICAgICAge3Bvc3NpYmxlUXVlcmllcy5sZW5ndGggPiAwICYmICFoYXNVc2VyTWVzc2FnZXMgJiYgKFxuICAgICAgICA8ZGl2IHN0eWxlPXtwb3NzaWJsZVF1ZXJpZXNDb250YWluZXJTdHlsZX0+XG4gICAgICAgICAge3Bvc3NpYmxlUXVlcmllcy5tYXAoKHF1ZXJ5LCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgPGJ1dHRvbiBcbiAgICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgICAgc3R5bGU9e3F1ZXJ5QnV0dG9uU3R5bGV9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVF1ZXJ5Q2xpY2socXVlcnkpfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17aXNMb2FkaW5nfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7cXVlcnl9XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgICAgXG4gICAgICB7IWNvbnZlcnNhdGlvbklkIHx8IGlzRmluYWxpemVkID8gKFxuICAgICAgICA8ZGl2IHN0eWxlPXtpbnB1dENvbnRhaW5lclN0eWxlfT5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBzdHlsZT17ey4uLnNlbmRCdXR0b25TdHlsZSwgd2lkdGg6ICcxMDAlJywgaGVpZ2h0OiAnNDhweCcsIGJvcmRlclJhZGl1czogJzhweCd9fVxuICAgICAgICAgICAgb25DbGljaz17aGFuZGxlU3RhcnRDb252ZXJzYXRpb259XG4gICAgICAgICAgICBkaXNhYmxlZD17aXNMb2FkaW5nfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIFN0YXJ0IENvbnZlcnNhdGlvblxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICkgOiAoXG4gICAgICAgIDxmb3JtIG9uU3VibWl0PXtoYW5kbGVTdWJtaXR9IHN0eWxlPXtpbnB1dENvbnRhaW5lclN0eWxlfT5cbiAgICAgICAgICA8ZGl2IHN0eWxlPXtpbnB1dFdyYXBwZXJTdHlsZX0+XG4gICAgICAgICAgICA8YnV0dG9uIFxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCIgXG4gICAgICAgICAgICAgIHN0eWxlPXthdHRhY2hCdXR0b25TdHlsZX1cbiAgICAgICAgICAgICAgdGl0bGU9XCJBdHRhY2hcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8UGFwZXJjbGlwIHNpemU9ezI0fSBjb2xvcj1cIiM3NTc1NzVcIiAvPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgc3R5bGU9e2lucHV0U3R5bGV9XG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgdmFsdWU9e2lucHV0VmFsdWV9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0SW5wdXRWYWx1ZShlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2Nvbm5lY3Rpb25TdGF0ZSAhPT0gJ2Nvbm5lY3RlZCd9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIFxuICAgICAgICAgIDxWb2ljZUlucHV0XG4gICAgICAgICAgICBvblRyYW5zY3JpcHRpb249e2hhbmRsZVZvaWNlVHJhbnNjcmlwdGlvbn1cbiAgICAgICAgICAgIG9uRXJyb3I9e2hhbmRsZVZvaWNlRXJyb3J9XG4gICAgICAgICAgICBiYXNlVXJsPXtiYXNlVXJsfVxuICAgICAgICAgICAgYXBpS2V5PXthcGlLZXl9XG4gICAgICAgICAgICB0aGVtZT17dGhlbWV9XG4gICAgICAgICAgLz5cbiAgICAgICAgICBcbiAgICAgICAgICA8YnV0dG9uIFxuICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiIFxuICAgICAgICAgICAgc3R5bGU9e3NlbmRCdXR0b25TdHlsZX1cbiAgICAgICAgICAgIGRpc2FibGVkPXtpbnB1dFZhbHVlLnRyaW0oKSA9PT0gJycgfHwgY29ubmVjdGlvblN0YXRlICE9PSAnY29ubmVjdGVkJ31cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U2VuZCBzaXplPXsyMH0gY29sb3I9XCIjZmZmZmZmXCIgLz5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9mb3JtPlxuICAgICAgKX1cblxuICAgICAgPGRpdiBzdHlsZT17Y29uZmlybU92ZXJsYXlTdHlsZX0+XG4gICAgICAgIDxkaXYgc3R5bGU9e2NvbmZpcm1EaWFsb2dTdHlsZX0+XG4gICAgICAgICAgPGgzIHN0eWxlPXt7Zm9udEZhbWlseSwgbWFyZ2luVG9wOiAwfX0+UmVzZXQgQ29udmVyc2F0aW9uPC9oMz5cbiAgICAgICAgICA8cCBzdHlsZT17e2ZvbnRGYW1pbHksIGZvbnRTaXplfX0+VGhpcyB3aWxsIGNsZWFyIHRoZSBjdXJyZW50IGNvbnZlcnNhdGlvbiBoaXN0b3J5IGFuZCBzdGFydCBhIG5ldyBjb252ZXJzYXRpb24uIEFyZSB5b3Ugc3VyZT88L3A+XG4gICAgICAgICAgPGRpdiBzdHlsZT17Y29uZmlybUJ1dHRvbnNTdHlsZX0+XG4gICAgICAgICAgICA8YnV0dG9uIHN0eWxlPXtjb25maXJtQnV0dG9uU3R5bGUoZmFsc2UpfSBvbkNsaWNrPXtoYW5kbGVDYW5jZWxSZXNldH0+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIHN0eWxlPXtjb25maXJtQnV0dG9uU3R5bGUodHJ1ZSl9IG9uQ2xpY2s9e2hhbmRsZUNvbmZpcm1SZXNldH0+UmVzZXQ8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcblxuICBpZiAobW9kZSA9PT0gJ2Zsb2F0aW5nJykge1xuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgc3R5bGU9e3RvZ2dsZUJ1dHRvblN0eWxlfVxuICAgICAgICAgIG9uQ2xpY2s9e3RvZ2dsZUZsb2F0aW5nQ2hhdH1cbiAgICAgICAgICB0aXRsZT17aXNGbG9hdGluZ09wZW4gPyBcIkNsb3NlIENoYXRcIiA6IFwiT3BlbiBDaGF0XCJ9XG4gICAgICAgID5cbiAgICAgICAgICB7aXNGbG9hdGluZ09wZW4gPyA8WEljb24gc2l6ZT17MjR9IC8+IDogPE1lc3NhZ2VTcXVhcmVNb3JlIHNpemU9ezI0fSAvPn1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIFxuICAgICAgICB7aXNGbG9hdGluZ09wZW4gJiYgKFxuICAgICAgICAgIDxkaXYgc3R5bGU9e2Zsb2F0aW5nQ29udGFpbmVyU3R5bGV9PlxuICAgICAgICAgICAge3JlbmRlckNoYXRDb21wb25lbnQoKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gcmVuZGVyQ2hhdENvbXBvbmVudCgpO1xufTsgIl19
@@ -0,0 +1,14 @@
1
+ import React from 'react';
2
+ interface VoiceInputProps {
3
+ onTranscription: (text: string) => void;
4
+ onError: (error: Error) => void;
5
+ baseUrl: string;
6
+ apiKey: string;
7
+ theme?: {
8
+ primaryColor?: string;
9
+ backgroundColor?: string;
10
+ fontFamily?: string;
11
+ };
12
+ }
13
+ export declare const VoiceInput: React.FC<VoiceInputProps>;
14
+ export {};