genassist-chat-react 1.0.37 → 1.0.38

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.
@@ -1,9 +1,7 @@
1
1
  import React from 'react';
2
2
  interface VoiceInputProps {
3
- onTranscription: (text: string) => void;
3
+ onAudioReady: (blob: Blob, format: string) => void;
4
4
  onError: (error: Error) => void;
5
- baseUrl: string;
6
- apiKey: string;
7
5
  theme?: {
8
6
  primaryColor?: string;
9
7
  backgroundColor?: string;
@@ -1,52 +1,266 @@
1
- import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { Mic } from 'lucide-react';
3
- import { Spinner } from './Spinner';
4
- import { useVoiceInput } from '../hooks/useVoiceInput';
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ var __generator = (this && this.__generator) || function (thisArg, body) {
11
+ 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);
12
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13
+ function verb(n) { return function (v) { return step([n, v]); }; }
14
+ function step(op) {
15
+ if (f) throw new TypeError("Generator is already executing.");
16
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
17
+ 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;
18
+ if (y = 0, t) op = [op[0] & 2, t.value];
19
+ switch (op[0]) {
20
+ case 0: case 1: t = op; break;
21
+ case 4: _.label++; return { value: op[1], done: false };
22
+ case 5: _.label++; y = op[1]; op = [0]; continue;
23
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
24
+ default:
25
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
26
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
29
+ if (t[2]) _.ops.pop();
30
+ _.trys.pop(); continue;
31
+ }
32
+ op = body.call(thisArg, _);
33
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
+ }
36
+ };
37
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
38
+ import { useState, useRef, useCallback, useEffect } from 'react';
39
+ import { Mic, Square, Send, Trash2 } from 'lucide-react';
40
+ import { useAudioRecorder } from '../hooks/useAudioRecorder';
41
+ import { AudioPlayer } from './AudioPlayer';
42
+ var BAR_COUNT = 32;
43
+ var BAR_HEIGHTS = Array.from({ length: BAR_COUNT }, function (_, i) {
44
+ var center = BAR_COUNT / 2;
45
+ var dist = Math.abs(i - center) / center;
46
+ return 0.3 + 0.7 * (1 - dist * dist);
47
+ });
5
48
  export var VoiceInput = function (_a) {
6
- var onTranscription = _a.onTranscription, onError = _a.onError, baseUrl = _a.baseUrl, apiKey = _a.apiKey, theme = _a.theme, _b = _a.disabled, disabled = _b === void 0 ? false : _b;
7
- var _c = useVoiceInput({
8
- baseUrl: baseUrl,
9
- apiKey: apiKey,
10
- onTranscription: onTranscription,
11
- onError: onError,
12
- }), isRecording = _c.isRecording, isLoading = _c.isLoading, toggleRecording = _c.toggleRecording;
13
- var handleClick = function (e) {
14
- e.preventDefault();
15
- e.stopPropagation();
16
- if (disabled)
17
- return;
18
- toggleRecording();
19
- };
20
- var getButtonContent = function () {
21
- if (isLoading)
22
- return _jsx(Spinner, { size: 18, color: "#ffffff" });
23
- return _jsx(Mic, { size: 18, color: "#ffffff" });
24
- };
25
- var getTitle = function () {
26
- if (isLoading)
27
- return 'Connecting...';
28
- return isRecording ? 'Stop Recording' : 'Start Recording';
49
+ var onAudioReady = _a.onAudioReady, onError = _a.onError, theme = _a.theme, _b = _a.disabled, disabled = _b === void 0 ? false : _b;
50
+ var _c = useState('idle'), voiceState = _c[0], setVoiceState = _c[1];
51
+ var _d = useState(null), pendingBlob = _d[0], setPendingBlob = _d[1];
52
+ var _e = useState('webm'), pendingFormat = _e[0], setPendingFormat = _e[1];
53
+ var _f = useState(null), blobUrl = _f[0], setBlobUrl = _f[1];
54
+ var _g = useState(0), recordingTime = _g[0], setRecordingTime = _g[1];
55
+ var timerRef = useRef(null);
56
+ var handleRecordingDone = useCallback(function (blob, format) {
57
+ setPendingBlob(blob);
58
+ setPendingFormat(format);
59
+ var url = URL.createObjectURL(blob);
60
+ setBlobUrl(url);
61
+ setVoiceState('preview');
62
+ if (timerRef.current) {
63
+ clearInterval(timerRef.current);
64
+ timerRef.current = null;
65
+ }
66
+ }, []);
67
+ var _h = useAudioRecorder(handleRecordingDone, onError), isRecording = _h.isRecording, startRecording = _h.startRecording, stopRecording = _h.stopRecording, cancelRecording = _h.cancelRecording;
68
+ var handleMicClick = useCallback(function () { return __awaiter(void 0, void 0, void 0, function () {
69
+ return __generator(this, function (_a) {
70
+ switch (_a.label) {
71
+ case 0:
72
+ if (disabled)
73
+ return [2 /*return*/];
74
+ setRecordingTime(0);
75
+ return [4 /*yield*/, startRecording()];
76
+ case 1:
77
+ _a.sent();
78
+ setVoiceState('recording');
79
+ timerRef.current = window.setInterval(function () { return setRecordingTime(function (t) { return t + 1; }); }, 1000);
80
+ return [2 /*return*/];
81
+ }
82
+ });
83
+ }); }, [disabled, startRecording]);
84
+ var handleStop = useCallback(function () {
85
+ stopRecording();
86
+ }, [stopRecording]);
87
+ var handleSend = useCallback(function () {
88
+ if (pendingBlob) {
89
+ onAudioReady(pendingBlob, pendingFormat);
90
+ }
91
+ cleanup();
92
+ }, [pendingBlob, pendingFormat, onAudioReady]);
93
+ var handleDiscard = useCallback(function () {
94
+ cleanup();
95
+ }, []);
96
+ var cleanup = function () {
97
+ if (blobUrl)
98
+ URL.revokeObjectURL(blobUrl);
99
+ setBlobUrl(null);
100
+ setPendingBlob(null);
101
+ setVoiceState('idle');
102
+ setRecordingTime(0);
103
+ if (timerRef.current) {
104
+ clearInterval(timerRef.current);
105
+ timerRef.current = null;
106
+ }
29
107
  };
30
- var idleBg = (theme === null || theme === void 0 ? void 0 : theme.primaryColor) || '#2962FF';
31
- var activeBg = '#FF3B30'; // red when recording
32
- var isDisabled = disabled || isLoading;
33
- var buttonStyle = {
34
- backgroundColor: isRecording ? activeBg : idleBg,
35
- color: '#ffffff',
36
- border: 'none',
37
- borderRadius: '50%',
38
- width: '36px',
39
- height: '36px',
40
- display: 'flex',
41
- alignItems: 'center',
42
- justifyContent: 'center',
43
- cursor: isDisabled ? 'not-allowed' : 'pointer',
44
- outline: 'none',
45
- transition: 'all 0.2s ease',
46
- flexShrink: 0,
47
- boxShadow: '0 1px 3px rgba(0, 0, 0, 0.08)',
48
- opacity: isDisabled ? 0.6 : 1,
108
+ useEffect(function () {
109
+ return function () {
110
+ if (timerRef.current)
111
+ clearInterval(timerRef.current);
112
+ if (blobUrl)
113
+ URL.revokeObjectURL(blobUrl);
114
+ };
115
+ }, []);
116
+ var primaryColor = (theme === null || theme === void 0 ? void 0 : theme.primaryColor) || '#4f46e5';
117
+ var formatTime = function (s) {
118
+ var m = Math.floor(s / 60);
119
+ var sec = s % 60;
120
+ return "".concat(m, ":").concat(sec.toString().padStart(2, '0'));
49
121
  };
50
- return (_jsx(_Fragment, { children: _jsx("button", { type: "button", style: buttonStyle, onClick: handleClick, title: getTitle(), disabled: isDisabled, children: getButtonContent() }) }));
122
+ if (voiceState === 'idle') {
123
+ return (_jsx("button", { type: "button", onClick: handleMicClick, disabled: disabled, style: {
124
+ position: 'absolute',
125
+ right: 6,
126
+ top: '50%',
127
+ transform: 'translateY(-50%)',
128
+ backgroundColor: primaryColor,
129
+ color: '#ffffff',
130
+ border: 'none',
131
+ borderRadius: '50%',
132
+ width: 36,
133
+ height: 36,
134
+ display: 'flex',
135
+ alignItems: 'center',
136
+ justifyContent: 'center',
137
+ cursor: disabled ? 'not-allowed' : 'pointer',
138
+ flexShrink: 0,
139
+ boxShadow: '0 1px 3px rgba(0, 0, 0, 0.12)',
140
+ opacity: disabled ? 0.5 : 1,
141
+ zIndex: 5,
142
+ transition: 'opacity 0.15s ease',
143
+ }, title: "Start Recording", children: _jsx(Mic, { size: 18, color: "#ffffff" }) }));
144
+ }
145
+ if (voiceState === 'recording') {
146
+ return (_jsxs("div", { style: {
147
+ position: 'absolute',
148
+ inset: 0,
149
+ display: 'flex',
150
+ alignItems: 'center',
151
+ gap: 0,
152
+ padding: '0 6px',
153
+ backgroundColor: '#fff',
154
+ borderRadius: 24,
155
+ zIndex: 10,
156
+ overflow: 'hidden',
157
+ }, children: [_jsx("button", { type: "button", onClick: function () { cancelRecording(); cleanup(); }, style: {
158
+ background: 'none',
159
+ border: 'none',
160
+ cursor: 'pointer',
161
+ padding: 6,
162
+ display: 'flex',
163
+ alignItems: 'center',
164
+ justifyContent: 'center',
165
+ color: '#9ca3af',
166
+ borderRadius: '50%',
167
+ flexShrink: 0,
168
+ transition: 'color 0.15s ease',
169
+ }, title: "Cancel", onMouseEnter: function (e) { return (e.currentTarget.style.color = '#6b7280'); }, onMouseLeave: function (e) { return (e.currentTarget.style.color = '#9ca3af'); }, children: _jsx(Trash2, { size: 18 }) }), _jsxs("div", { style: {
170
+ display: 'flex',
171
+ alignItems: 'center',
172
+ gap: 6,
173
+ padding: '0 8px 0 4px',
174
+ flexShrink: 0,
175
+ }, children: [_jsx("div", { style: {
176
+ width: 8,
177
+ height: 8,
178
+ borderRadius: '50%',
179
+ backgroundColor: '#ef4444',
180
+ animation: 'ga-rec-pulse 1.5s ease-in-out infinite',
181
+ flexShrink: 0,
182
+ } }), _jsx("span", { style: {
183
+ fontSize: 13,
184
+ fontWeight: 600,
185
+ color: '#374151',
186
+ fontVariantNumeric: 'tabular-nums',
187
+ minWidth: 32,
188
+ fontFamily: 'inherit',
189
+ }, children: formatTime(recordingTime) })] }), _jsx("div", { style: {
190
+ flex: 1,
191
+ display: 'flex',
192
+ alignItems: 'center',
193
+ justifyContent: 'center',
194
+ gap: 2,
195
+ height: '100%',
196
+ padding: '0 4px',
197
+ overflow: 'hidden',
198
+ }, children: BAR_HEIGHTS.map(function (scale, i) { return (_jsx("div", { style: {
199
+ width: 2.5,
200
+ borderRadius: 3,
201
+ backgroundColor: primaryColor,
202
+ opacity: 0.55 + 0.45 * scale,
203
+ animation: "ga-wave ".concat(0.6 + (i % 5) * 0.15, "s ease-in-out ").concat(i * 0.04, "s infinite alternate"),
204
+ minHeight: 3,
205
+ maxHeight: Math.round(scale * 26),
206
+ flexShrink: 0,
207
+ } }, i)); }) }), _jsx("button", { type: "button", onClick: handleStop, style: {
208
+ backgroundColor: '#ef4444',
209
+ color: '#fff',
210
+ border: 'none',
211
+ borderRadius: '50%',
212
+ width: 36,
213
+ height: 36,
214
+ display: 'flex',
215
+ alignItems: 'center',
216
+ justifyContent: 'center',
217
+ cursor: 'pointer',
218
+ flexShrink: 0,
219
+ boxShadow: '0 1px 4px rgba(239, 68, 68, 0.3)',
220
+ transition: 'box-shadow 0.15s ease',
221
+ }, title: "Stop Recording", onMouseEnter: function (e) { return (e.currentTarget.style.boxShadow = '0 2px 8px rgba(239, 68, 68, 0.4)'); }, onMouseLeave: function (e) { return (e.currentTarget.style.boxShadow = '0 1px 4px rgba(239, 68, 68, 0.3)'); }, children: _jsx(Square, { size: 12, fill: "#fff" }) }), _jsx("style", { children: "\n @keyframes ga-wave {\n 0% { height: 3px; }\n 100% { height: var(--ga-wave-h, 22px); }\n }\n @keyframes ga-rec-pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.3; }\n }\n " })] }));
222
+ }
223
+ return (_jsxs("div", { style: {
224
+ position: 'absolute',
225
+ inset: 0,
226
+ display: 'flex',
227
+ alignItems: 'center',
228
+ gap: 0,
229
+ padding: '0 6px',
230
+ backgroundColor: '#fff',
231
+ borderRadius: 24,
232
+ zIndex: 10,
233
+ overflow: 'hidden',
234
+ }, children: [_jsx("button", { type: "button", onClick: handleDiscard, style: {
235
+ background: 'none',
236
+ border: 'none',
237
+ cursor: 'pointer',
238
+ padding: 6,
239
+ display: 'flex',
240
+ alignItems: 'center',
241
+ justifyContent: 'center',
242
+ color: '#9ca3af',
243
+ borderRadius: '50%',
244
+ flexShrink: 0,
245
+ transition: 'color 0.15s ease',
246
+ }, title: "Discard", onMouseEnter: function (e) { return (e.currentTarget.style.color = '#ef4444'); }, onMouseLeave: function (e) { return (e.currentTarget.style.color = '#9ca3af'); }, children: _jsx(Trash2, { size: 18 }) }), _jsx("div", { style: {
247
+ flex: 1,
248
+ minWidth: 0,
249
+ padding: '0 4px',
250
+ }, children: blobUrl && _jsx(AudioPlayer, { blobUrl: blobUrl, primaryColor: primaryColor, compact: true }) }), _jsx("button", { type: "button", onClick: handleSend, style: {
251
+ backgroundColor: primaryColor,
252
+ color: '#fff',
253
+ border: 'none',
254
+ borderRadius: '50%',
255
+ width: 36,
256
+ height: 36,
257
+ display: 'flex',
258
+ alignItems: 'center',
259
+ justifyContent: 'center',
260
+ cursor: 'pointer',
261
+ flexShrink: 0,
262
+ boxShadow: "0 1px 4px ".concat(primaryColor, "44"),
263
+ transition: 'box-shadow 0.15s ease',
264
+ }, title: "Send", onMouseEnter: function (e) { return (e.currentTarget.style.boxShadow = "0 2px 8px ".concat(primaryColor, "55")); }, onMouseLeave: function (e) { return (e.currentTarget.style.boxShadow = "0 1px 4px ".concat(primaryColor, "44")); }, children: _jsx(Send, { size: 16 }) })] }));
51
265
  };
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVm9pY2VJbnB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL1ZvaWNlSW5wdXQudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ25DLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBZXZELE1BQU0sQ0FBQyxJQUFNLFVBQVUsR0FBOEIsVUFBQyxFQU9yRDtRQU5DLGVBQWUscUJBQUEsRUFDZixPQUFPLGFBQUEsRUFDUCxPQUFPLGFBQUEsRUFDUCxNQUFNLFlBQUEsRUFDTixLQUFLLFdBQUEsRUFDTCxnQkFBZ0IsRUFBaEIsUUFBUSxtQkFBRyxLQUFLLEtBQUE7SUFFVixJQUFBLEtBQThDLGFBQWEsQ0FBQztRQUNoRSxPQUFPLFNBQUE7UUFDUCxNQUFNLFFBQUE7UUFDTixlQUFlLGlCQUFBO1FBQ2YsT0FBTyxTQUFBO0tBQ1IsQ0FBQyxFQUxNLFdBQVcsaUJBQUEsRUFBRSxTQUFTLGVBQUEsRUFBRSxlQUFlLHFCQUs3QyxDQUFDO0lBRUgsSUFBTSxXQUFXLEdBQUcsVUFBQyxDQUFtQjtRQUN0QyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDbkIsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3BCLElBQUksUUFBUTtZQUFFLE9BQU87UUFDckIsZUFBZSxFQUFFLENBQUM7SUFDcEIsQ0FBQyxDQUFDO0lBRUYsSUFBTSxnQkFBZ0IsR0FBRztRQUN2QixJQUFJLFNBQVM7WUFBRSxPQUFPLEtBQUMsT0FBTyxJQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFDLFNBQVMsR0FBRyxDQUFDO1FBQzVELE9BQU8sS0FBQyxHQUFHLElBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUMsU0FBUyxHQUFHLENBQUM7SUFDM0MsQ0FBQyxDQUFDO0lBRUYsSUFBTSxRQUFRLEdBQUc7UUFDZixJQUFJLFNBQVM7WUFBRSxPQUFPLGVBQWUsQ0FBQztRQUN0QyxPQUFPLFdBQVcsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDO0lBQzVELENBQUMsQ0FBQztJQUVGLElBQU0sTUFBTSxHQUFHLENBQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLFlBQVksS0FBSSxTQUFTLENBQUM7SUFDaEQsSUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLENBQUMscUJBQXFCO0lBQ2pELElBQU0sVUFBVSxHQUFHLFFBQVEsSUFBSSxTQUFTLENBQUM7SUFDekMsSUFBTSxXQUFXLEdBQXdCO1FBQ3ZDLGVBQWUsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTTtRQUNoRCxLQUFLLEVBQUUsU0FBUztRQUNoQixNQUFNLEVBQUUsTUFBTTtRQUNkLFlBQVksRUFBRSxLQUFLO1FBQ25CLEtBQUssRUFBRSxNQUFNO1FBQ2IsTUFBTSxFQUFFLE1BQU07UUFDZCxPQUFPLEVBQUUsTUFBTTtRQUNmLFVBQVUsRUFBRSxRQUFRO1FBQ3BCLGNBQWMsRUFBRSxRQUFRO1FBQ3hCLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsU0FBUztRQUM5QyxPQUFPLEVBQUUsTUFBTTtRQUNmLFVBQVUsRUFBRSxlQUFlO1FBQzNCLFVBQVUsRUFBRSxDQUFDO1FBQ2IsU0FBUyxFQUFFLCtCQUErQjtRQUMxQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDOUIsQ0FBQztJQUVGLE9BQU8sQ0FDTCw0QkFDRSxpQkFDRSxJQUFJLEVBQUMsUUFBUSxFQUNiLEtBQUssRUFBRSxXQUFXLEVBQ2xCLE9BQU8sRUFBRSxXQUFXLEVBQ3BCLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFDakIsUUFBUSxFQUFFLFVBQVUsWUFFbkIsZ0JBQWdCLEVBQUUsR0FDWixHQUNSLENBQ0osQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBNaWMgfSBmcm9tICdsdWNpZGUtcmVhY3QnO1xuaW1wb3J0IHsgU3Bpbm5lciB9IGZyb20gJy4vU3Bpbm5lcic7XG5pbXBvcnQgeyB1c2VWb2ljZUlucHV0IH0gZnJvbSAnLi4vaG9va3MvdXNlVm9pY2VJbnB1dCc7XG5cbmludGVyZmFjZSBWb2ljZUlucHV0UHJvcHMge1xuICBvblRyYW5zY3JpcHRpb246ICh0ZXh0OiBzdHJpbmcpID0+IHZvaWQ7XG4gIG9uRXJyb3I6IChlcnJvcjogRXJyb3IpID0+IHZvaWQ7XG4gIGJhc2VVcmw6IHN0cmluZztcbiAgYXBpS2V5OiBzdHJpbmc7XG4gIHRoZW1lPzoge1xuICAgIHByaW1hcnlDb2xvcj86IHN0cmluZztcbiAgICBiYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmc7XG4gICAgZm9udEZhbWlseT86IHN0cmluZztcbiAgfTtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgVm9pY2VJbnB1dDogUmVhY3QuRkM8Vm9pY2VJbnB1dFByb3BzPiA9ICh7XG4gIG9uVHJhbnNjcmlwdGlvbixcbiAgb25FcnJvcixcbiAgYmFzZVVybCxcbiAgYXBpS2V5LFxuICB0aGVtZSxcbiAgZGlzYWJsZWQgPSBmYWxzZVxufSkgPT4ge1xuICBjb25zdCB7IGlzUmVjb3JkaW5nLCBpc0xvYWRpbmcsIHRvZ2dsZVJlY29yZGluZyB9ID0gdXNlVm9pY2VJbnB1dCh7XG4gICAgYmFzZVVybCxcbiAgICBhcGlLZXksXG4gICAgb25UcmFuc2NyaXB0aW9uLFxuICAgIG9uRXJyb3IsXG4gIH0pO1xuXG4gIGNvbnN0IGhhbmRsZUNsaWNrID0gKGU6IFJlYWN0Lk1vdXNlRXZlbnQpID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAoZGlzYWJsZWQpIHJldHVybjtcbiAgICB0b2dnbGVSZWNvcmRpbmcoKTtcbiAgfTtcblxuICBjb25zdCBnZXRCdXR0b25Db250ZW50ID0gKCkgPT4ge1xuICAgIGlmIChpc0xvYWRpbmcpIHJldHVybiA8U3Bpbm5lciBzaXplPXsxOH0gY29sb3I9XCIjZmZmZmZmXCIgLz47XG4gICAgcmV0dXJuIDxNaWMgc2l6ZT17MTh9IGNvbG9yPVwiI2ZmZmZmZlwiIC8+O1xuICB9O1xuXG4gIGNvbnN0IGdldFRpdGxlID0gKCkgPT4ge1xuICAgIGlmIChpc0xvYWRpbmcpIHJldHVybiAnQ29ubmVjdGluZy4uLic7XG4gICAgcmV0dXJuIGlzUmVjb3JkaW5nID8gJ1N0b3AgUmVjb3JkaW5nJyA6ICdTdGFydCBSZWNvcmRpbmcnO1xuICB9O1xuXG4gIGNvbnN0IGlkbGVCZyA9IHRoZW1lPy5wcmltYXJ5Q29sb3IgfHwgJyMyOTYyRkYnO1xuICBjb25zdCBhY3RpdmVCZyA9ICcjRkYzQjMwJzsgLy8gcmVkIHdoZW4gcmVjb3JkaW5nXG4gIGNvbnN0IGlzRGlzYWJsZWQgPSBkaXNhYmxlZCB8fCBpc0xvYWRpbmc7XG4gIGNvbnN0IGJ1dHRvblN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGJhY2tncm91bmRDb2xvcjogaXNSZWNvcmRpbmcgPyBhY3RpdmVCZyA6IGlkbGVCZyxcbiAgICBjb2xvcjogJyNmZmZmZmYnLFxuICAgIGJvcmRlcjogJ25vbmUnLFxuICAgIGJvcmRlclJhZGl1czogJzUwJScsXG4gICAgd2lkdGg6ICczNnB4JyxcbiAgICBoZWlnaHQ6ICczNnB4JyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIGN1cnNvcjogaXNEaXNhYmxlZCA/ICdub3QtYWxsb3dlZCcgOiAncG9pbnRlcicsXG4gICAgb3V0bGluZTogJ25vbmUnLFxuICAgIHRyYW5zaXRpb246ICdhbGwgMC4ycyBlYXNlJyxcbiAgICBmbGV4U2hyaW5rOiAwLFxuICAgIGJveFNoYWRvdzogJzAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMDgpJyxcbiAgICBvcGFjaXR5OiBpc0Rpc2FibGVkID8gMC42IDogMSxcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBzdHlsZT17YnV0dG9uU3R5bGV9XG4gICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfVxuICAgICAgICB0aXRsZT17Z2V0VGl0bGUoKX1cbiAgICAgICAgZGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICA+XG4gICAgICAgIHtnZXRCdXR0b25Db250ZW50KCl9XG4gICAgICA8L2J1dHRvbj5cbiAgICA8Lz5cbiAgKTtcbn07XG4iXX0=
266
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVm9pY2VJbnB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL1ZvaWNlSW5wdXQudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQWU1QyxJQUFNLFNBQVMsR0FBRyxFQUFFLENBQUM7QUFDckIsSUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsRUFBRSxVQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3pELElBQU0sTUFBTSxHQUFHLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFDN0IsSUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0lBQzNDLE9BQU8sR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDdkMsQ0FBQyxDQUFDLENBQUM7QUFFSCxNQUFNLENBQUMsSUFBTSxVQUFVLEdBQThCLFVBQUMsRUFLckQ7UUFKQyxZQUFZLGtCQUFBLEVBQ1osT0FBTyxhQUFBLEVBQ1AsS0FBSyxXQUFBLEVBQ0wsZ0JBQWdCLEVBQWhCLFFBQVEsbUJBQUcsS0FBSyxLQUFBO0lBRVYsSUFBQSxLQUE4QixRQUFRLENBQWEsTUFBTSxDQUFDLEVBQXpELFVBQVUsUUFBQSxF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b0JBQ2pCLFVBQVUsRUFBRSxDQUFDO29CQUNiLFNBQVMsRUFBRSxvQkFBYSxZQUFZLE9BQUk7b0JBQ3hDLFVBQVUsRUFBRSx1QkFBdUI7aUJBQ3BDLEVBQ0QsS0FBSyxFQUFDLE1BQU0sRUFDWixZQUFZLEVBQUUsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxvQkFBYSxZQUFZLE9BQUksQ0FBQyxFQUFqRSxDQUFpRSxFQUNwRixZQUFZLEVBQUUsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxvQkFBYSxZQUFZLE9BQUksQ0FBQyxFQUFqRSxDQUFpRSxZQUVwRixLQUFDLElBQUksSUFBQyxJQUFJLEVBQUUsRUFBRSxHQUFJLEdBQ1gsSUFDTCxDQUNQLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZVJlZiwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IE1pYywgU3F1YXJlLCBTZW5kLCBUcmFzaDIgfSBmcm9tICdsdWNpZGUtcmVhY3QnO1xuaW1wb3J0IHsgdXNlQXVkaW9SZWNvcmRlciB9IGZyb20gJy4uL2hvb2tzL3VzZUF1ZGlvUmVjb3JkZXInO1xuaW1wb3J0IHsgQXVkaW9QbGF5ZXIgfSBmcm9tICcuL0F1ZGlvUGxheWVyJztcblxudHlwZSBWb2ljZVN0YXRlID0gJ2lkbGUnIHwgJ3JlY29yZGluZycgfCAncHJldmlldyc7XG5cbmludGVyZmFjZSBWb2ljZUlucHV0UHJvcHMge1xuICBvbkF1ZGlvUmVhZHk6IChibG9iOiBCbG9iLCBmb3JtYXQ6IHN0cmluZykgPT4gdm9pZDtcbiAgb25FcnJvcjogKGVycm9yOiBFcnJvcikgPT4gdm9pZDtcbiAgdGhlbWU/OiB7XG4gICAgcHJpbWFyeUNvbG9yPzogc3RyaW5nO1xuICAgIGJhY2tncm91bmRDb2xvcj86IHN0cmluZztcbiAgICBmb250RmFtaWx5Pzogc3RyaW5nO1xuICB9O1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG59XG5cbmNvbnN0IEJBUl9DT1VOVCA9IDMyO1xuY29uc3QgQkFSX0hFSUdIVFMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiBCQVJfQ09VTlQgfSwgKF8sIGkpID0+IHtcbiAgY29uc3QgY2VudGVyID0gQkFSX0NPVU5UIC8gMjtcbiAgY29uc3QgZGlzdCA9IE1hdGguYWJzKGkgLSBjZW50ZXIpIC8gY2VudGVyO1xuICByZXR1cm4gMC4zICsgMC43ICogKDEgLSBkaXN0ICogZGlzdCk7XG59KTtcblxuZXhwb3J0IGNvbnN0IFZvaWNlSW5wdXQ6IFJlYWN0LkZDPFZvaWNlSW5wdXRQcm9wcz4gPSAoe1xuICBvbkF1ZGlvUmVhZHksXG4gIG9uRXJyb3IsXG4gIHRoZW1lLFxuICBkaXNhYmxlZCA9IGZhbHNlLFxufSkgPT4ge1xuICBjb25zdCBbdm9pY2VTdGF0ZSwgc2V0Vm9pY2VTdGF0ZV0gPSB1c2VTdGF0ZTxWb2ljZVN0YXRlPignaWRsZScpO1xuICBjb25zdCBbcGVuZGluZ0Jsb2IsIHNldFBlbmRpbmdCbG9iXSA9IHVzZVN0YXRlPEJsb2IgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW3BlbmRpbmdGb3JtYXQsIHNldFBlbmRpbmdGb3JtYXRdID0gdXNlU3RhdGU8c3RyaW5nPignd2VibScpO1xuICBjb25zdCBbYmxvYlVybCwgc2V0QmxvYlVybF0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW3JlY29yZGluZ1RpbWUsIHNldFJlY29yZGluZ1RpbWVdID0gdXNlU3RhdGUoMCk7XG4gIGNvbnN0IHRpbWVyUmVmID0gdXNlUmVmPG51bWJlciB8IG51bGw+KG51bGwpO1xuXG4gIGNvbnN0IGhhbmRsZVJlY29yZGluZ0RvbmUgPSB1c2VDYWxsYmFjaygoYmxvYjogQmxvYiwgZm9ybWF0OiBzdHJpbmcpID0+IHtcbiAgICBzZXRQZW5kaW5nQmxvYihibG9iKTtcbiAgICBzZXRQZW5kaW5nRm9ybWF0KGZvcm1hdCk7XG4gICAgY29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICBzZXRCbG9iVXJsKHVybCk7XG4gICAgc2V0Vm9pY2VTdGF0ZSgncHJldmlldycpO1xuICAgIGlmICh0aW1lclJlZi5jdXJyZW50KSB7IGNsZWFySW50ZXJ2YWwodGltZXJSZWYuY3VycmVudCk7IHRpbWVyUmVmLmN1cnJlbnQgPSBudWxsOyB9XG4gIH0sIFtdKTtcblxuICBjb25zdCB7IGlzUmVjb3JkaW5nLCBzdGFydFJlY29yZGluZywgc3RvcFJlY29yZGluZywgY2FuY2VsUmVjb3JkaW5nIH0gPSB1c2VBdWRpb1JlY29yZGVyKGhhbmRsZVJlY29yZGluZ0RvbmUsIG9uRXJyb3IpO1xuXG4gIGNvbnN0IGhhbmRsZU1pY0NsaWNrID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGlmIChkaXNhYmxlZCkgcmV0dXJuO1xuICAgIHNldFJlY29yZGluZ1RpbWUoMCk7XG4gICAgYXdhaXQgc3RhcnRSZWNvcmRpbmcoKTtcbiAgICBzZXRWb2ljZVN0YXRlKCdyZWNvcmRpbmcnKTtcbiAgICB0aW1lclJlZi5jdXJyZW50ID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHNldFJlY29yZGluZ1RpbWUoKHQpID0+IHQgKyAxKSwgMTAwMCk7XG4gIH0sIFtkaXNhYmxlZCwgc3RhcnRSZWNvcmRpbmddKTtcblxuICBjb25zdCBoYW5kbGVTdG9wID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHN0b3BSZWNvcmRpbmcoKTtcbiAgfSwgW3N0b3BSZWNvcmRpbmddKTtcblxuICBjb25zdCBoYW5kbGVTZW5kID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChwZW5kaW5nQmxvYikge1xuICAgICAgb25BdWRpb1JlYWR5KHBlbmRpbmdCbG9iLCBwZW5kaW5nRm9ybWF0KTtcbiAgICB9XG4gICAgY2xlYW51cCgpO1xuICB9LCBbcGVuZGluZ0Jsb2IsIHBlbmRpbmdGb3JtYXQsIG9uQXVkaW9SZWFkeV0pO1xuXG4gIGNvbnN0IGhhbmRsZURpc2NhcmQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY2xlYW51cCgpO1xuICB9LCBbXSk7XG5cbiAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICBpZiAoYmxvYlVybCkgVVJMLnJldm9rZU9iamVjdFVSTChibG9iVXJsKTtcbiAgICBzZXRCbG9iVXJsKG51bGwpO1xuICAgIHNldFBlbmRpbmdCbG9iKG51bGwpO1xuICAgIHNldFZvaWNlU3RhdGUoJ2lkbGUnKTtcbiAgICBzZXRSZWNvcmRpbmdUaW1lKDApO1xuICAgIGlmICh0aW1lclJlZi5jdXJyZW50KSB7IGNsZWFySW50ZXJ2YWwodGltZXJSZWYuY3VycmVudCk7IHRpbWVyUmVmLmN1cnJlbnQgPSBudWxsOyB9XG4gIH07XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKHRpbWVyUmVmLmN1cnJlbnQpIGNsZWFySW50ZXJ2YWwodGltZXJSZWYuY3VycmVudCk7XG4gICAgICBpZiAoYmxvYlVybCkgVVJMLnJldm9rZU9iamVjdFVSTChibG9iVXJsKTtcbiAgICB9O1xuICB9LCBbXSk7XG5cbiAgY29uc3QgcHJpbWFyeUNvbG9yID0gdGhlbWU/LnByaW1hcnlDb2xvciB8fCAnIzRmNDZlNSc7XG5cbiAgY29uc3QgZm9ybWF0VGltZSA9IChzOiBudW1iZXIpID0+IHtcbiAgICBjb25zdCBtID0gTWF0aC5mbG9vcihzIC8gNjApO1xuICAgIGNvbnN0IHNlYyA9IHMgJSA2MDtcbiAgICByZXR1cm4gYCR7bX06JHtzZWMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfWA7XG4gIH07XG5cbiAgaWYgKHZvaWNlU3RhdGUgPT09ICdpZGxlJykge1xuICAgIHJldHVybiAoXG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBvbkNsaWNrPXtoYW5kbGVNaWNDbGlja31cbiAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgIHJpZ2h0OiA2LFxuICAgICAgICAgIHRvcDogJzUwJScsXG4gICAgICAgICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgtNTAlKScsXG4gICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBwcmltYXJ5Q29sb3IsXG4gICAgICAgICAgY29sb3I6ICcjZmZmZmZmJyxcbiAgICAgICAgICBib3JkZXI6ICdub25lJyxcbiAgICAgICAgICBib3JkZXJSYWRpdXM6ICc1MCUnLFxuICAgICAgICAgIHdpZHRoOiAzNixcbiAgICAgICAgICBoZWlnaHQ6IDM2LFxuICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgY3Vyc29yOiBkaXNhYmxlZCA/ICdub3QtYWxsb3dlZCcgOiAncG9pbnRlcicsXG4gICAgICAgICAgZmxleFNocmluazogMCxcbiAgICAgICAgICBib3hTaGFkb3c6ICcwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEyKScsXG4gICAgICAgICAgb3BhY2l0eTogZGlzYWJsZWQgPyAwLjUgOiAxLFxuICAgICAgICAgIHpJbmRleDogNSxcbiAgICAgICAgICB0cmFuc2l0aW9uOiAnb3BhY2l0eSAwLjE1cyBlYXNlJyxcbiAgICAgICAgfX1cbiAgICAgICAgdGl0bGU9XCJTdGFydCBSZWNvcmRpbmdcIlxuICAgICAgPlxuICAgICAgICA8TWljIHNpemU9ezE4fSBjb2xvcj1cIiNmZmZmZmZcIiAvPlxuICAgICAgPC9idXR0b24+XG4gICAgKTtcbiAgfVxuXG4gIGlmICh2b2ljZVN0YXRlID09PSAncmVjb3JkaW5nJykge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHN0eWxlPXt7XG4gICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICBpbnNldDogMCxcbiAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgZ2FwOiAwLFxuICAgICAgICBwYWRkaW5nOiAnMCA2cHgnLFxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZmZmJyxcbiAgICAgICAgYm9yZGVyUmFkaXVzOiAyNCxcbiAgICAgICAgekluZGV4OiAxMCxcbiAgICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgICAgfX0+XG4gICAgICAgIHsvKiBEaXNjYXJkICovfVxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgb25DbGljaz17KCkgPT4geyBjYW5jZWxSZWNvcmRpbmcoKTsgY2xlYW51cCgpOyB9fVxuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAnbm9uZScsXG4gICAgICAgICAgICBib3JkZXI6ICdub25lJyxcbiAgICAgICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgICAgICAgICAgcGFkZGluZzogNixcbiAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgY29sb3I6ICcjOWNhM2FmJyxcbiAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzUwJScsXG4gICAgICAgICAgICBmbGV4U2hyaW5rOiAwLFxuICAgICAgICAgICAgdHJhbnNpdGlvbjogJ2NvbG9yIDAuMTVzIGVhc2UnLFxuICAgICAgICAgIH19XG4gICAgICAgICAgdGl0bGU9XCJDYW5jZWxcIlxuICAgICAgICAgIG9uTW91c2VFbnRlcj17ZSA9PiAoZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmNvbG9yID0gJyM2YjcyODAnKX1cbiAgICAgICAgICBvbk1vdXNlTGVhdmU9e2UgPT4gKGUuY3VycmVudFRhcmdldC5zdHlsZS5jb2xvciA9ICcjOWNhM2FmJyl9XG4gICAgICAgID5cbiAgICAgICAgICA8VHJhc2gyIHNpemU9ezE4fSAvPlxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICB7LyogUmVkIGRvdCArIFRpbWVyICovfVxuICAgICAgICA8ZGl2IHN0eWxlPXt7XG4gICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgIGdhcDogNixcbiAgICAgICAgICBwYWRkaW5nOiAnMCA4cHggMCA0cHgnLFxuICAgICAgICAgIGZsZXhTaHJpbms6IDAsXG4gICAgICAgIH19PlxuICAgICAgICAgIDxkaXYgc3R5bGU9e3tcbiAgICAgICAgICAgIHdpZHRoOiA4LFxuICAgICAgICAgICAgaGVpZ2h0OiA4LFxuICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNTAlJyxcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJyNlZjQ0NDQnLFxuICAgICAgICAgICAgYW5pbWF0aW9uOiAnZ2EtcmVjLXB1bHNlIDEuNXMgZWFzZS1pbi1vdXQgaW5maW5pdGUnLFxuICAgICAgICAgICAgZmxleFNocmluazogMCxcbiAgICAgICAgICB9fSAvPlxuICAgICAgICAgIDxzcGFuIHN0eWxlPXt7XG4gICAgICAgICAgICBmb250U2l6ZTogMTMsXG4gICAgICAgICAgICBmb250V2VpZ2h0OiA2MDAsXG4gICAgICAgICAgICBjb2xvcjogJyMzNzQxNTEnLFxuICAgICAgICAgICAgZm9udFZhcmlhbnROdW1lcmljOiAndGFidWxhci1udW1zJyxcbiAgICAgICAgICAgIG1pbldpZHRoOiAzMixcbiAgICAgICAgICAgIGZvbnRGYW1pbHk6ICdpbmhlcml0JyxcbiAgICAgICAgICB9fT5cbiAgICAgICAgICAgIHtmb3JtYXRUaW1lKHJlY29yZGluZ1RpbWUpfVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgey8qIFdhdmUgYW5pbWF0aW9uICovfVxuICAgICAgICA8ZGl2IHN0eWxlPXt7XG4gICAgICAgICAgZmxleDogMSxcbiAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgIGdhcDogMixcbiAgICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgICBwYWRkaW5nOiAnMCA0cHgnLFxuICAgICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICAgICAgfX0+XG4gICAgICAgICAge0JBUl9IRUlHSFRTLm1hcCgoc2NhbGUsIGkpID0+IChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAga2V5PXtpfVxuICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgIHdpZHRoOiAyLjUsXG4gICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAzLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogcHJpbWFyeUNvbG9yLFxuICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuNTUgKyAwLjQ1ICogc2NhbGUsXG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uOiBgZ2Etd2F2ZSAkezAuNiArIChpICUgNSkgKiAwLjE1fXMgZWFzZS1pbi1vdXQgJHtpICogMC4wNH1zIGluZmluaXRlIGFsdGVybmF0ZWAsXG4gICAgICAgICAgICAgICAgbWluSGVpZ2h0OiAzLFxuICAgICAgICAgICAgICAgIG1heEhlaWdodDogTWF0aC5yb3VuZChzY2FsZSAqIDI2KSxcbiAgICAgICAgICAgICAgICBmbGV4U2hyaW5rOiAwLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgey8qIFN0b3AgYnV0dG9uICovfVxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgb25DbGljaz17aGFuZGxlU3RvcH1cbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnI2VmNDQ0NCcsXG4gICAgICAgICAgICBjb2xvcjogJyNmZmYnLFxuICAgICAgICAgICAgYm9yZGVyOiAnbm9uZScsXG4gICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc1MCUnLFxuICAgICAgICAgICAgd2lkdGg6IDM2LFxuICAgICAgICAgICAgaGVpZ2h0OiAzNixcbiAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgICAgICAgICBmbGV4U2hyaW5rOiAwLFxuICAgICAgICAgICAgYm94U2hhZG93OiAnMCAxcHggNHB4IHJnYmEoMjM5LCA2OCwgNjgsIDAuMyknLFxuICAgICAgICAgICAgdHJhbnNpdGlvbjogJ2JveC1zaGFkb3cgMC4xNXMgZWFzZScsXG4gICAgICAgICAgfX1cbiAgICAgICAgICB0aXRsZT1cIlN0b3AgUmVjb3JkaW5nXCJcbiAgICAgICAgICBvbk1vdXNlRW50ZXI9e2UgPT4gKGUuY3VycmVudFRhcmdldC5zdHlsZS5ib3hTaGFkb3cgPSAnMCAycHggOHB4IHJnYmEoMjM5LCA2OCwgNjgsIDAuNCknKX1cbiAgICAgICAgICBvbk1vdXNlTGVhdmU9e2UgPT4gKGUuY3VycmVudFRhcmdldC5zdHlsZS5ib3hTaGFkb3cgPSAnMCAxcHggNHB4IHJnYmEoMjM5LCA2OCwgNjgsIDAuMyknKX1cbiAgICAgICAgPlxuICAgICAgICAgIDxTcXVhcmUgc2l6ZT17MTJ9IGZpbGw9XCIjZmZmXCIgLz5cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPHN0eWxlPntgXG4gICAgICAgICAgQGtleWZyYW1lcyBnYS13YXZlIHtcbiAgICAgICAgICAgIDAlIHsgaGVpZ2h0OiAzcHg7IH1cbiAgICAgICAgICAgIDEwMCUgeyBoZWlnaHQ6IHZhcigtLWdhLXdhdmUtaCwgMjJweCk7IH1cbiAgICAgICAgICB9XG4gICAgICAgICAgQGtleWZyYW1lcyBnYS1yZWMtcHVsc2Uge1xuICAgICAgICAgICAgMCUsIDEwMCUgeyBvcGFjaXR5OiAxOyB9XG4gICAgICAgICAgICA1MCUgeyBvcGFjaXR5OiAwLjM7IH1cbiAgICAgICAgICB9XG4gICAgICAgIGB9PC9zdHlsZT5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXYgc3R5bGU9e3tcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgaW5zZXQ6IDAsXG4gICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgIGdhcDogMCxcbiAgICAgIHBhZGRpbmc6ICcwIDZweCcsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZmZmJyxcbiAgICAgIGJvcmRlclJhZGl1czogMjQsXG4gICAgICB6SW5kZXg6IDEwLFxuICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgIH19PlxuICAgICAgey8qIERpc2NhcmQgKi99XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBvbkNsaWNrPXtoYW5kbGVEaXNjYXJkfVxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIGJhY2tncm91bmQ6ICdub25lJyxcbiAgICAgICAgICBib3JkZXI6ICdub25lJyxcbiAgICAgICAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICAgICAgICBwYWRkaW5nOiA2LFxuICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgY29sb3I6ICcjOWNhM2FmJyxcbiAgICAgICAgICBib3JkZXJSYWRpdXM6ICc1MCUnLFxuICAgICAgICAgIGZsZXhTaHJpbms6IDAsXG4gICAgICAgICAgdHJhbnNpdGlvbjogJ2NvbG9yIDAuMTVzIGVhc2UnLFxuICAgICAgICB9fVxuICAgICAgICB0aXRsZT1cIkRpc2NhcmRcIlxuICAgICAgICBvbk1vdXNlRW50ZXI9e2UgPT4gKGUuY3VycmVudFRhcmdldC5zdHlsZS5jb2xvciA9ICcjZWY0NDQ0Jyl9XG4gICAgICAgIG9uTW91c2VMZWF2ZT17ZSA9PiAoZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmNvbG9yID0gJyM5Y2EzYWYnKX1cbiAgICAgID5cbiAgICAgICAgPFRyYXNoMiBzaXplPXsxOH0gLz5cbiAgICAgIDwvYnV0dG9uPlxuXG4gICAgICB7LyogQXVkaW8gcGxheWVyICovfVxuICAgICAgPGRpdiBzdHlsZT17e1xuICAgICAgICBmbGV4OiAxLFxuICAgICAgICBtaW5XaWR0aDogMCxcbiAgICAgICAgcGFkZGluZzogJzAgNHB4JyxcbiAgICAgIH19PlxuICAgICAgICB7YmxvYlVybCAmJiA8QXVkaW9QbGF5ZXIgYmxvYlVybD17YmxvYlVybH0gcHJpbWFyeUNvbG9yPXtwcmltYXJ5Q29sb3J9IGNvbXBhY3QgLz59XG4gICAgICA8L2Rpdj5cblxuICAgICAgey8qIFNlbmQgKi99XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBvbkNsaWNrPXtoYW5kbGVTZW5kfVxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogcHJpbWFyeUNvbG9yLFxuICAgICAgICAgIGNvbG9yOiAnI2ZmZicsXG4gICAgICAgICAgYm9yZGVyOiAnbm9uZScsXG4gICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNTAlJyxcbiAgICAgICAgICB3aWR0aDogMzYsXG4gICAgICAgICAgaGVpZ2h0OiAzNixcbiAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgICAgICAgIGZsZXhTaHJpbms6IDAsXG4gICAgICAgICAgYm94U2hhZG93OiBgMCAxcHggNHB4ICR7cHJpbWFyeUNvbG9yfTQ0YCxcbiAgICAgICAgICB0cmFuc2l0aW9uOiAnYm94LXNoYWRvdyAwLjE1cyBlYXNlJyxcbiAgICAgICAgfX1cbiAgICAgICAgdGl0bGU9XCJTZW5kXCJcbiAgICAgICAgb25Nb3VzZUVudGVyPXtlID0+IChlLmN1cnJlbnRUYXJnZXQuc3R5bGUuYm94U2hhZG93ID0gYDAgMnB4IDhweCAke3ByaW1hcnlDb2xvcn01NWApfVxuICAgICAgICBvbk1vdXNlTGVhdmU9e2UgPT4gKGUuY3VycmVudFRhcmdldC5zdHlsZS5ib3hTaGFkb3cgPSBgMCAxcHggNHB4ICR7cHJpbWFyeUNvbG9yfTQ0YCl9XG4gICAgICA+XG4gICAgICAgIDxTZW5kIHNpemU9ezE2fSAvPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuIl19
@@ -0,0 +1,8 @@
1
+ interface UseAudioRecorderReturn {
2
+ isRecording: boolean;
3
+ startRecording: () => Promise<void>;
4
+ stopRecording: () => void;
5
+ cancelRecording: () => void;
6
+ }
7
+ export declare function useAudioRecorder(onAudioReady: (blob: Blob, format: string) => void, onError?: (error: Error) => void): UseAudioRecorderReturn;
8
+ export {};
@@ -0,0 +1,124 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ var __generator = (this && this.__generator) || function (thisArg, body) {
11
+ 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);
12
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13
+ function verb(n) { return function (v) { return step([n, v]); }; }
14
+ function step(op) {
15
+ if (f) throw new TypeError("Generator is already executing.");
16
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
17
+ 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;
18
+ if (y = 0, t) op = [op[0] & 2, t.value];
19
+ switch (op[0]) {
20
+ case 0: case 1: t = op; break;
21
+ case 4: _.label++; return { value: op[1], done: false };
22
+ case 5: _.label++; y = op[1]; op = [0]; continue;
23
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
24
+ default:
25
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
26
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
29
+ if (t[2]) _.ops.pop();
30
+ _.trys.pop(); continue;
31
+ }
32
+ op = body.call(thisArg, _);
33
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
+ }
36
+ };
37
+ import { useCallback, useRef, useState } from 'react';
38
+ function getMimeType() {
39
+ if (typeof MediaRecorder === 'undefined')
40
+ return '';
41
+ if (MediaRecorder.isTypeSupported('audio/webm;codecs=opus'))
42
+ return 'audio/webm;codecs=opus';
43
+ if (MediaRecorder.isTypeSupported('audio/webm'))
44
+ return 'audio/webm';
45
+ if (MediaRecorder.isTypeSupported('audio/mp4'))
46
+ return 'audio/mp4';
47
+ return '';
48
+ }
49
+ function formatFromMime(mimeType) {
50
+ if (mimeType.includes('webm'))
51
+ return 'webm';
52
+ if (mimeType.includes('mp4'))
53
+ return 'mp4';
54
+ return 'webm';
55
+ }
56
+ export function useAudioRecorder(onAudioReady, onError) {
57
+ var _this = this;
58
+ var _a = useState(false), isRecording = _a[0], setIsRecording = _a[1];
59
+ var mediaRecorderRef = useRef(null);
60
+ var chunksRef = useRef([]);
61
+ var streamRef = useRef(null);
62
+ var cancelledRef = useRef(false);
63
+ var startRecording = useCallback(function () { return __awaiter(_this, void 0, void 0, function () {
64
+ var mimeType_1, stream, recorder, err_1;
65
+ return __generator(this, function (_a) {
66
+ switch (_a.label) {
67
+ case 0:
68
+ _a.trys.push([0, 2, , 3]);
69
+ mimeType_1 = getMimeType();
70
+ if (!mimeType_1) {
71
+ throw new Error('Audio recording is not supported in this browser');
72
+ }
73
+ cancelledRef.current = false;
74
+ return [4 /*yield*/, navigator.mediaDevices.getUserMedia({ audio: true })];
75
+ case 1:
76
+ stream = _a.sent();
77
+ streamRef.current = stream;
78
+ chunksRef.current = [];
79
+ recorder = new MediaRecorder(stream, { mimeType: mimeType_1 });
80
+ mediaRecorderRef.current = recorder;
81
+ recorder.ondataavailable = function (e) {
82
+ if (e.data.size > 0) {
83
+ chunksRef.current.push(e.data);
84
+ }
85
+ };
86
+ recorder.onstop = function () {
87
+ var _a;
88
+ var wasCancelled = cancelledRef.current;
89
+ var blob = new Blob(chunksRef.current, { type: mimeType_1 });
90
+ var format = formatFromMime(mimeType_1);
91
+ chunksRef.current = [];
92
+ (_a = streamRef.current) === null || _a === void 0 ? void 0 : _a.getTracks().forEach(function (t) { return t.stop(); });
93
+ streamRef.current = null;
94
+ if (!wasCancelled) {
95
+ onAudioReady(blob, format);
96
+ }
97
+ };
98
+ recorder.start();
99
+ setIsRecording(true);
100
+ return [3 /*break*/, 3];
101
+ case 2:
102
+ err_1 = _a.sent();
103
+ onError === null || onError === void 0 ? void 0 : onError(err_1 instanceof Error ? err_1 : new Error(String(err_1)));
104
+ return [3 /*break*/, 3];
105
+ case 3: return [2 /*return*/];
106
+ }
107
+ });
108
+ }); }, [onAudioReady, onError]);
109
+ var stopRecording = useCallback(function () {
110
+ if (mediaRecorderRef.current && mediaRecorderRef.current.state !== 'inactive') {
111
+ mediaRecorderRef.current.stop();
112
+ }
113
+ setIsRecording(false);
114
+ }, []);
115
+ var cancelRecording = useCallback(function () {
116
+ cancelledRef.current = true;
117
+ if (mediaRecorderRef.current && mediaRecorderRef.current.state !== 'inactive') {
118
+ mediaRecorderRef.current.stop();
119
+ }
120
+ setIsRecording(false);
121
+ }, []);
122
+ return { isRecording: isRecording, startRecording: startRecording, stopRecording: stopRecording, cancelRecording: cancelRecording };
123
+ }
124
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlQXVkaW9SZWNvcmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy91c2VBdWRpb1JlY29yZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQVN0RCxTQUFTLFdBQVc7SUFDbEIsSUFBSSxPQUFPLGFBQWEsS0FBSyxXQUFXO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFDcEQsSUFBSSxhQUFhLENBQUMsZUFBZSxDQUFDLHdCQUF3QixDQUFDO1FBQUUsT0FBTyx3QkFBd0IsQ0FBQztJQUM3RixJQUFJLGFBQWEsQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDO1FBQUUsT0FBTyxZQUFZLENBQUM7SUFDckUsSUFBSSxhQUFhLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQztRQUFFLE9BQU8sV0FBVyxDQUFDO0lBQ25FLE9BQU8sRUFBRSxDQUFDO0FBQ1osQ0FBQztBQUVELFNBQVMsY0FBYyxDQUFDLFFBQWdCO0lBQ3RDLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFBRSxPQUFPLE1BQU0sQ0FBQztJQUM3QyxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDM0MsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELE1BQU0sVUFBVSxnQkFBZ0IsQ0FDOUIsWUFBa0QsRUFDbEQsT0FBZ0M7SUFGbEMsaUJBb0VDO0lBaEVPLElBQUEsS0FBZ0MsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUE5QyxXQUFXLFFBQUEsRUFBRSxjQUFjLFFBQW1CLENBQUM7SUFDdEQsSUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQXVCLElBQUksQ0FBQyxDQUFDO0lBQzVELElBQU0sU0FBUyxHQUFHLE1BQU0s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RyxJQUFJLENBQUM7UUFDNUIsSUFBSSxnQkFBZ0IsQ0FBQyxPQUFPLElBQUksZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEtBQUssS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUM5RSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbEMsQ0FBQztRQUNELGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFUCxPQUFPLEVBQUUsV0FBVyxhQUFBLEVBQUUsY0FBYyxnQkFBQSxFQUFFLGFBQWEsZUFBQSxFQUFFLGVBQWUsaUJBQUEsRUFBRSxDQUFDO0FBQ3pFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcblxuaW50ZXJmYWNlIFVzZUF1ZGlvUmVjb3JkZXJSZXR1cm4ge1xuICBpc1JlY29yZGluZzogYm9vbGVhbjtcbiAgc3RhcnRSZWNvcmRpbmc6ICgpID0+IFByb21pc2U8dm9pZD47XG4gIHN0b3BSZWNvcmRpbmc6ICgpID0+IHZvaWQ7XG4gIGNhbmNlbFJlY29yZGluZzogKCkgPT4gdm9pZDtcbn1cblxuZnVuY3Rpb24gZ2V0TWltZVR5cGUoKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiBNZWRpYVJlY29yZGVyID09PSAndW5kZWZpbmVkJykgcmV0dXJuICcnO1xuICBpZiAoTWVkaWFSZWNvcmRlci5pc1R5cGVTdXBwb3J0ZWQoJ2F1ZGlvL3dlYm07Y29kZWNzPW9wdXMnKSkgcmV0dXJuICdhdWRpby93ZWJtO2NvZGVjcz1vcHVzJztcbiAgaWYgKE1lZGlhUmVjb3JkZXIuaXNUeXBlU3VwcG9ydGVkKCdhdWRpby93ZWJtJykpIHJldHVybiAnYXVkaW8vd2VibSc7XG4gIGlmIChNZWRpYVJlY29yZGVyLmlzVHlwZVN1cHBvcnRlZCgnYXVkaW8vbXA0JykpIHJldHVybiAnYXVkaW8vbXA0JztcbiAgcmV0dXJuICcnO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRGcm9tTWltZShtaW1lVHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKG1pbWVUeXBlLmluY2x1ZGVzKCd3ZWJtJykpIHJldHVybiAnd2VibSc7XG4gIGlmIChtaW1lVHlwZS5pbmNsdWRlcygnbXA0JykpIHJldHVybiAnbXA0JztcbiAgcmV0dXJuICd3ZWJtJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZUF1ZGlvUmVjb3JkZXIoXG4gIG9uQXVkaW9SZWFkeTogKGJsb2I6IEJsb2IsIGZvcm1hdDogc3RyaW5nKSA9PiB2b2lkLFxuICBvbkVycm9yPzogKGVycm9yOiBFcnJvcikgPT4gdm9pZCxcbik6IFVzZUF1ZGlvUmVjb3JkZXJSZXR1cm4ge1xuICBjb25zdCBbaXNSZWNvcmRpbmcsIHNldElzUmVjb3JkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgbWVkaWFSZWNvcmRlclJlZiA9IHVzZVJlZjxNZWRpYVJlY29yZGVyIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IGNodW5rc1JlZiA9IHVzZVJlZjxCbG9iW10+KFtdKTtcbiAgY29uc3Qgc3RyZWFtUmVmID0gdXNlUmVmPE1lZGlhU3RyZWFtIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IGNhbmNlbGxlZFJlZiA9IHVzZVJlZihmYWxzZSk7XG5cbiAgY29uc3Qgc3RhcnRSZWNvcmRpbmcgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG1pbWVUeXBlID0gZ2V0TWltZVR5cGUoKTtcbiAgICAgIGlmICghbWltZVR5cGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdWRpbyByZWNvcmRpbmcgaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJyb3dzZXInKTtcbiAgICAgIH1cblxuICAgICAgY2FuY2VsbGVkUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIGNvbnN0IHN0cmVhbSA9IGF3YWl0IG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKHsgYXVkaW86IHRydWUgfSk7XG4gICAgICBzdHJlYW1SZWYuY3VycmVudCA9IHN0cmVhbTtcbiAgICAgIGNodW5rc1JlZi5jdXJyZW50ID0gW107XG5cbiAgICAgIGNvbnN0IHJlY29yZGVyID0gbmV3IE1lZGlhUmVjb3JkZXIoc3RyZWFtLCB7IG1pbWVUeXBlIH0pO1xuICAgICAgbWVkaWFSZWNvcmRlclJlZi5jdXJyZW50ID0gcmVjb3JkZXI7XG5cbiAgICAgIHJlY29yZGVyLm9uZGF0YWF2YWlsYWJsZSA9IChlKSA9PiB7XG4gICAgICAgIGlmIChlLmRhdGEuc2l6ZSA+IDApIHtcbiAgICAgICAgICBjaHVua3NSZWYuY3VycmVudC5wdXNoKGUuZGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHJlY29yZGVyLm9uc3RvcCA9ICgpID0+IHtcbiAgICAgICAgY29uc3Qgd2FzQ2FuY2VsbGVkID0gY2FuY2VsbGVkUmVmLmN1cnJlbnQ7XG4gICAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihjaHVua3NSZWYuY3VycmVudCwgeyB0eXBlOiBtaW1lVHlwZSB9KTtcbiAgICAgICAgY29uc3QgZm9ybWF0ID0gZm9ybWF0RnJvbU1pbWUobWltZVR5cGUpO1xuICAgICAgICBjaHVua3NSZWYuY3VycmVudCA9IFtdO1xuXG4gICAgICAgIHN0cmVhbVJlZi5jdXJyZW50Py5nZXRUcmFja3MoKS5mb3JFYWNoKCh0KSA9PiB0LnN0b3AoKSk7XG4gICAgICAgIHN0cmVhbVJlZi5jdXJyZW50ID0gbnVsbDtcblxuICAgICAgICBpZiAoIXdhc0NhbmNlbGxlZCkge1xuICAgICAgICAgIG9uQXVkaW9SZWFkeShibG9iLCBmb3JtYXQpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICByZWNvcmRlci5zdGFydCgpO1xuICAgICAgc2V0SXNSZWNvcmRpbmcodHJ1ZSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBvbkVycm9yPy4oZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIgOiBuZXcgRXJyb3IoU3RyaW5nKGVycikpKTtcbiAgICB9XG4gIH0sIFtvbkF1ZGlvUmVhZHksIG9uRXJyb3JdKTtcblxuICBjb25zdCBzdG9wUmVjb3JkaW5nID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChtZWRpYVJlY29yZGVyUmVmLmN1cnJlbnQgJiYgbWVkaWFSZWNvcmRlclJlZi5jdXJyZW50LnN0YXRlICE9PSAnaW5hY3RpdmUnKSB7XG4gICAgICBtZWRpYVJlY29yZGVyUmVmLmN1cnJlbnQuc3RvcCgpO1xuICAgIH1cbiAgICBzZXRJc1JlY29yZGluZyhmYWxzZSk7XG4gIH0sIFtdKTtcblxuICBjb25zdCBjYW5jZWxSZWNvcmRpbmcgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY2FuY2VsbGVkUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgIGlmIChtZWRpYVJlY29yZGVyUmVmLmN1cnJlbnQgJiYgbWVkaWFSZWNvcmRlclJlZi5jdXJyZW50LnN0YXRlICE9PSAnaW5hY3RpdmUnKSB7XG4gICAgICBtZWRpYVJlY29yZGVyUmVmLmN1cnJlbnQuc3RvcCgpO1xuICAgIH1cbiAgICBzZXRJc1JlY29yZGluZyhmYWxzZSk7XG4gIH0sIFtdKTtcblxuICByZXR1cm4geyBpc1JlY29yZGluZywgc3RhcnRSZWNvcmRpbmcsIHN0b3BSZWNvcmRpbmcsIGNhbmNlbFJlY29yZGluZyB9O1xufVxuIl19
@@ -22,6 +22,7 @@ export declare const useChat: ({ baseUrl, websocketUrl, apiKey, tenant, metadata
22
22
  messages: ChatMessage[];
23
23
  isLoading: boolean;
24
24
  sendMessage: (text: string, files?: File[], extraMetadata?: Record<string, any>, reCaptchaToken?: string) => Promise<void>;
25
+ sendAudioMessage: (audioBlob: Blob, audioFormat: string) => Promise<void>;
25
26
  uploadFile: (file: File) => Promise<Attachment | null>;
26
27
  resetConversation: (reCaptchaToken?: string | undefined) => Promise<void>;
27
28
  startConversation: (reCaptchaToken?: string | undefined) => Promise<void>;