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.
@@ -0,0 +1,183 @@
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
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
49
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
50
+ if (ar || !(i in from)) {
51
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
52
+ ar[i] = from[i];
53
+ }
54
+ }
55
+ return to.concat(ar || Array.prototype.slice.call(from));
56
+ };
57
+ import { useState, useRef, useEffect } from 'react';
58
+ export function useFileAttachments(_a) {
59
+ var _this = this;
60
+ var uploadFile = _a.uploadFile, t = _a.t;
61
+ var _b = useState([]), attachments = _b[0], setAttachments = _b[1];
62
+ var _c = useState(new Set()), uploadingFiles = _c[0], setUploadingFiles = _c[1];
63
+ var _d = useState(null), fileErrorToast = _d[0], setFileErrorToast = _d[1];
64
+ var fileErrorToastTimeoutRef = useRef(null);
65
+ var fileInputRef = useRef(null);
66
+ useEffect(function () {
67
+ return function () {
68
+ if (fileErrorToastTimeoutRef.current) {
69
+ clearTimeout(fileErrorToastTimeoutRef.current);
70
+ }
71
+ };
72
+ }, []);
73
+ var handleFileChange = function (e) { return __awaiter(_this, void 0, void 0, function () {
74
+ var newFiles_1, newAttachments_1, newUploadingFiles_1, settled, fileToAttachmentMap_1, failedFileKeys_1, hasFailedUploads, error_1, finalUploadingFiles_1;
75
+ var _this = this;
76
+ return __generator(this, function (_a) {
77
+ switch (_a.label) {
78
+ case 0:
79
+ if (!(e.target.files && e.target.files.length > 0)) return [3 /*break*/, 5];
80
+ newFiles_1 = Array.from(e.target.files);
81
+ newAttachments_1 = newFiles_1.map(function (file) { return ({ file: file, attachment: null }); });
82
+ setAttachments(function (prev) { return __spreadArray(__spreadArray([], prev, true), newAttachments_1, true); });
83
+ newUploadingFiles_1 = new Set(uploadingFiles);
84
+ newFiles_1.forEach(function (file) { return newUploadingFiles_1.add(file.name); });
85
+ setUploadingFiles(newUploadingFiles_1);
86
+ _a.label = 1;
87
+ case 1:
88
+ _a.trys.push([1, 3, 4, 5]);
89
+ return [4 /*yield*/, Promise.allSettled(newFiles_1.map(function (file) { return __awaiter(_this, void 0, void 0, function () {
90
+ var _a;
91
+ return __generator(this, function (_b) {
92
+ switch (_b.label) {
93
+ case 0:
94
+ _a = { file: file };
95
+ return [4 /*yield*/, uploadFile(file)];
96
+ case 1: return [2 /*return*/, (_a.attachment = _b.sent(), _a)];
97
+ }
98
+ });
99
+ }); }))];
100
+ case 2:
101
+ settled = _a.sent();
102
+ fileToAttachmentMap_1 = new Map();
103
+ failedFileKeys_1 = new Set();
104
+ settled.forEach(function (result, index) {
105
+ var file = newFiles_1[index];
106
+ if (!file)
107
+ return;
108
+ var fileKey = "".concat(file.name, ":").concat(file.size, ":").concat(file.lastModified);
109
+ if (result.status === 'rejected') {
110
+ fileToAttachmentMap_1.set(fileKey, null);
111
+ failedFileKeys_1.add(fileKey);
112
+ return;
113
+ }
114
+ var attachment = result.value.attachment;
115
+ fileToAttachmentMap_1.set(fileKey, attachment);
116
+ if (attachment === null) {
117
+ failedFileKeys_1.add(fileKey);
118
+ }
119
+ });
120
+ hasFailedUploads = failedFileKeys_1.size > 0;
121
+ setAttachments(function (prev) {
122
+ return prev
123
+ .filter(function (att) {
124
+ var fileKey = "".concat(att.file.name, ":").concat(att.file.size, ":").concat(att.file.lastModified);
125
+ return !failedFileKeys_1.has(fileKey);
126
+ })
127
+ .map(function (att) {
128
+ var fileKey = "".concat(att.file.name, ":").concat(att.file.size, ":").concat(att.file.lastModified);
129
+ var uploadedAttachment = fileToAttachmentMap_1.get(fileKey);
130
+ if (uploadedAttachment !== undefined) {
131
+ return __assign(__assign({}, att), { attachment: uploadedAttachment });
132
+ }
133
+ return att;
134
+ });
135
+ });
136
+ if (hasFailedUploads) {
137
+ if (fileErrorToastTimeoutRef.current) {
138
+ clearTimeout(fileErrorToastTimeoutRef.current);
139
+ }
140
+ setFileErrorToast(t('fileUpload.fileTypeNotSupported', 'This file type is not supported.'));
141
+ fileErrorToastTimeoutRef.current = setTimeout(function () {
142
+ setFileErrorToast(null);
143
+ fileErrorToastTimeoutRef.current = null;
144
+ }, 4000);
145
+ }
146
+ return [3 /*break*/, 5];
147
+ case 3:
148
+ error_1 = _a.sent();
149
+ console.error('Error uploading file', error_1);
150
+ return [3 /*break*/, 5];
151
+ case 4:
152
+ finalUploadingFiles_1 = new Set(uploadingFiles);
153
+ newFiles_1.forEach(function (file) { return finalUploadingFiles_1.delete(file.name); });
154
+ setUploadingFiles(finalUploadingFiles_1);
155
+ if (fileInputRef.current) {
156
+ fileInputRef.current.value = '';
157
+ }
158
+ return [7 /*endfinally*/];
159
+ case 5: return [2 /*return*/];
160
+ }
161
+ });
162
+ }); };
163
+ var handleRemoveAttachment = function (fileName) {
164
+ setAttachments(function (prev) { return prev.filter(function (att) { return att.file.name !== fileName; }); });
165
+ };
166
+ var clearAttachments = function () {
167
+ setAttachments([]);
168
+ if (fileInputRef.current) {
169
+ fileInputRef.current.value = '';
170
+ }
171
+ };
172
+ return {
173
+ attachments: attachments,
174
+ setAttachments: setAttachments,
175
+ uploadingFiles: uploadingFiles,
176
+ fileErrorToast: fileErrorToast,
177
+ fileInputRef: fileInputRef,
178
+ handleFileChange: handleFileChange,
179
+ handleRemoveAttachment: handleRemoveAttachment,
180
+ clearAttachments: clearAttachments,
181
+ };
182
+ }
183
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlRmlsZUF0dGFjaG1lbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hvb2tzL3VzZUZpbGVBdHRhY2htZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQVFwRCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsRUFBNEM7SUFBL0UsaUJBK0dDO1FBL0dvQyxVQUFVLGdCQUFBLEVBQUUsQ0FBQyxPQUFBO0lBQzFDLElBQUEsS0FBZ0MsUUFBUSxDQUF1QixFQUFFLENBQUMsRUFBakUsV0FBVyxRQUFBLEVBQUUsY0FBYyxRQUFzQyxDQUFDO0lBQ25FLElBQUEsS0FBc0MsUUFBUSxDQUFjLElBQUksR0FBRyxFQUFFLENBQUMsRUFBckUsY0FBYyxRQUFBLEVBQUUsaUJBQWlCLFFBQW9DLENBQUM7SUFDdkUsSUFBQSxLQUFzQyxRQUFRLENBQWdCLElBQUksQ0FBQyxFQUFsRSxjQUFjLFFBQUEsRUFBRSxpQkFBaUIsUUFBaUMsQ0FBQztJQUMxRSxJQUFNLHdCQUF3QixHQUFHLE1BQU0sQ0FBdUMsSUFBSSxDQUFDLENBQUM7SUFDcEYsSUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFtQixJQUFJLENBQUMsQ0FBQztJQUVwRCxTQUFTLENBQUM7UUFDUixPQUFPO1lBQ0wsSUFBSSx3QkFBd0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDckMsWUFBWSxDQUFDLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2pELENBQUM7UUFDSCxDQUFDLENBQUM7SUFDSixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFUCxJQUFNLGdCQUFnQixHQUFHLFVBQU8sQ0FBc0M7Ozs7Ozt5QkFDaEUsQ0FBQSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFBLEVBQTNDLHdCQUEyQztvQkFDdkMsYUFBVyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBRXRDLG1CQUF1QyxVQUFRLENBQUMsR0FBRyxDQUFDLFVBQUEsSUFBSSxJQUFJLE9BQUEsQ0FBQyxFQUFFLElBQUksTUFBQSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUE1QixDQUE0QixDQUFDLENBQUM7b0JBQ2hHLGNBQWMsQ0FBQyxVQUFBLElBQUksSUFBSSx1Q0FBSSxJQUFJLFNBQUssZ0JBQWMsU0FBM0IsQ0FBNEIsQ0FBQyxDQUFDO29CQUUvQyxzQkFBb0IsSUFBSSxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7b0JBQ2xELFVBQVEsQ0FBQyxPQUFPLENBQUMsVUFBQSxJQUFJLElBQUksT0FBQSxtQkFBaUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFoQyxDQUFnQyxDQUFDLENBQUM7b0JBQzNELGlCQUFpQixDQUFDLG1CQUFpQixDQUFDLENBQUM7Ozs7b0JBR25CLHFCQUFNLE9BQU8sQ0FBQyxVQUFVLENBQ3RDLFVBQVEsQ0FBQyxHQUFHLENBQUMsVUFBTyxJQUFJOzs7OzsrQ0FBUSxJQUFJLE1BQUE7d0NBQWMscUJBQU0sVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFBOzRDQUEzQyxzQkFBQSxDQUFTLGFBQVUsR0FBRSxTQUFzQixLQUFHLEVBQUE7Ozs2QkFBQSxDQUFDLENBQzdFLEVBQUE7O29CQUZLLE9BQU8sR0FBRyxTQUVmO29CQUVLLHdCQUFzQixJQUFJLEdBQUcsRUFBNkIsQ0FBQztvQkFDM0QsbUJBQWlCLElBQUksR0FBRyxFQUFVLENBQUM7b0JBQ3pDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBQyxNQUFNLEVBQUUsS0FBSzt3QkFDNUIsSUFBTSxJQUFJLEdBQUcsVUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUM3QixJQUFJLENBQUMsSUFBSTs0QkFBRSxPQUFPO3dCQUNsQixJQUFNLE9BQU8sR0FBRyxVQUFHLElBQUksQ0FBQyxJQUFJLGNBQUksSUFBSSxDQUFDLElBQUksY0FBSSxJQUFJLENBQUMsWUFBWSxDQUFFLENBQUM7d0JBQ2pFLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxVQUFVLEVBQUUsQ0FBQzs0QkFDakMscUJBQW1CLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQzs0QkFDdkMsZ0JBQWMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7NEJBQzVCLE9BQU87d0JBQ1QsQ0FBQzt3QkFDTyxJQUFBLFVBQVUsR0FBSyxNQUFNLENBQUMsS0FBSyxXQUFqQixDQUFrQjt3QkFDcEMscUJBQW1CLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQzt3QkFDN0MsSUFBSSxVQUFVLEtBQUssSUFBSSxFQUFFLENBQUM7NEJBQ3hCLGdCQUFjLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO3dCQUM5QixDQUFDO29CQUNILENBQUMsQ0FBQyxDQUFDO29CQUVHLGdCQUFnQixHQUFHLGdCQUFjLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztvQkFFakQsY0FBYyxDQUFDLFVBQUEsSUFBSTt3QkFDakIsT0FBTyxJQUFJOzZCQUNSLE1BQU0sQ0FBQyxVQUFBLEdBQUc7NEJBQ1QsSUFBTSxPQUFPLEdBQUcsVUFBRyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksY0FBSSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksY0FBSSxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBRSxDQUFDOzRCQUM3RSxPQUFPLENBQUMsZ0JBQWMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7d0JBQ3RDLENBQUMsQ0FBQzs2QkFDRCxHQUFHLENBQUMsVUFBQSxHQUFHOzRCQUNOLElBQU0sT0FBTyxHQUFHLFVBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLGNBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLGNBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUUsQ0FBQzs0QkFDN0UsSUFBTSxrQkFBa0IsR0FBRyxxQkFBbUIsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7NEJBQzVELElBQUksa0JBQWtCLEtBQUssU0FBUyxFQUFFLENBQUM7Z0NBQ3JDLDZCQUFZLEdBQUcsS0FBRSxVQUFVLEVBQUUsa0JBQWtCLElBQUc7NEJBQ3BELENBQUM7NEJBQ0QsT0FBTyxHQUFHLENBQUM7d0JBQ2IsQ0FBQyxDQUFDLENBQUM7b0JBQ1AsQ0FBQyxDQUFDLENBQUM7b0JBRUgsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO3dCQUNyQixJQUFJLHdCQUF3QixDQUFDLE9BQU8sRUFBRSxDQUFDOzRCQUNyQyxZQUFZLENBQUMsd0JBQXdCLENBQUMsT0FBTyxDQUFDLENBQUM7d0JBQ2pELENBQUM7d0JBQ0QsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLGlDQUFpQyxFQUFFLGtDQUFrQyxDQUFDLENBQUMsQ0FBQzt3QkFDNUYsd0JBQXdCLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQzs0QkFDNUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7NEJBQ3hCLHdCQUF3QixDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7d0JBQzFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDWCxDQUFDOzs7O29CQUVELE9BQU8sQ0FBQyxLQUFLLENBQUMsc0JBQXNCLEVBQUUsT0FBSyxDQUFDLENBQUM7OztvQkFFdkMsd0JBQXNCLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO29CQUNwRCxVQUFRLENBQUMsT0FBTyxDQUFDLFVBQUEsSUFBSSxJQUFJLE9BQUEscUJBQW1CLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBckMsQ0FBcUMsQ0FBQyxDQUFDO29CQUNoRSxpQkFBaUIsQ0FBQyxxQkFBbUIsQ0FBQyxDQUFDO29CQUN2QyxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQzt3QkFDekIsWUFBWSxDQUFDLE9BQVEsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO29CQUNuQyxDQUFDOzs7OztTQUdOLENBQUM7SUFFRixJQUFNLHNCQUFzQixHQUFHLFVBQUMsUUFBZ0I7UUFDOUMsY0FBYyxDQUFDLFVBQUEsSUFBSSxJQUFJLE9BQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFBLEdBQUcsSUFBSSxPQUFBLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBMUIsQ0FBMEIsQ0FBQyxFQUE5QyxDQUE4QyxDQUFDLENBQUM7SUFDekUsQ0FBQyxDQUFDO0lBRUYsSUFBTSxnQkFBZ0IsR0FBRztRQUN2QixjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbkIsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDekIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2xDLENBQUM7SUFDSCxDQUFDLENBQUM7SUFFRixPQUFPO1FBQ0wsV0FBVyxhQUFBO1FBQ1gsY0FBYyxnQkFBQTtRQUNkLGNBQWMsZ0JBQUE7UUFDZCxjQUFjLGdCQUFBO1FBQ2QsWUFBWSxjQUFBO1FBQ1osZ0JBQWdCLGtCQUFBO1FBQ2hCLHNCQUFzQix3QkFBQTtRQUN0QixnQkFBZ0Isa0JBQUE7S0FDakIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VTdGF0ZSwgdXNlUmVmLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBBdHRhY2htZW50LCBBdHRhY2htZW50V2l0aEZpbGUgfSBmcm9tICcuLi90eXBlcyc7XG5cbmludGVyZmFjZSBVc2VGaWxlQXR0YWNobWVudHNPcHRpb25zIHtcbiAgdXBsb2FkRmlsZTogKGZpbGU6IEZpbGUpID0+IFByb21pc2U8QXR0YWNobWVudCB8IG51bGw+O1xuICB0OiAoa2V5OiBzdHJpbmcsIGZhbGxiYWNrPzogc3RyaW5nKSA9PiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VGaWxlQXR0YWNobWVudHMoeyB1cGxvYWRGaWxlLCB0IH06IFVzZUZpbGVBdHRhY2htZW50c09wdGlvbnMpIHtcbiAgY29uc3QgW2F0dGFjaG1lbnRzLCBzZXRBdHRhY2htZW50c10gPSB1c2VTdGF0ZTxBdHRhY2htZW50V2l0aEZpbGVbXT4oW10pO1xuICBjb25zdCBbdXBsb2FkaW5nRmlsZXMsIHNldFVwbG9hZGluZ0ZpbGVzXSA9IHVzZVN0YXRlPFNldDxzdHJpbmc+PihuZXcgU2V0KCkpO1xuICBjb25zdCBbZmlsZUVycm9yVG9hc3QsIHNldEZpbGVFcnJvclRvYXN0XSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBjb25zdCBmaWxlRXJyb3JUb2FzdFRpbWVvdXRSZWYgPSB1c2VSZWY8UmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCBudWxsPihudWxsKTtcbiAgY29uc3QgZmlsZUlucHV0UmVmID0gdXNlUmVmPEhUTUxJbnB1dEVsZW1lbnQ+KG51bGwpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChmaWxlRXJyb3JUb2FzdFRpbWVvdXRSZWYuY3VycmVudCkge1xuICAgICAgICBjbGVhclRpbWVvdXQoZmlsZUVycm9yVG9hc3RUaW1lb3V0UmVmLmN1cnJlbnQpO1xuICAgICAgfVxuICAgIH07XG4gIH0sIFtdKTtcblxuICBjb25zdCBoYW5kbGVGaWxlQ2hhbmdlID0gYXN5bmMgKGU6IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgaWYgKGUudGFyZ2V0LmZpbGVzICYmIGUudGFyZ2V0LmZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IG5ld0ZpbGVzID0gQXJyYXkuZnJvbShlLnRhcmdldC5maWxlcyk7XG5cbiAgICAgIGNvbnN0IG5ld0F0dGFjaG1lbnRzOiBBdHRhY2htZW50V2l0aEZpbGVbXSA9IG5ld0ZpbGVzLm1hcChmaWxlID0+ICh7IGZpbGUsIGF0dGFjaG1lbnQ6IG51bGwgfSkpO1xuICAgICAgc2V0QXR0YWNobWVudHMocHJldiA9PiBbLi4ucHJldiwgLi4ubmV3QXR0YWNobWVudHNdKTtcblxuICAgICAgY29uc3QgbmV3VXBsb2FkaW5nRmlsZXMgPSBuZXcgU2V0KHVwbG9hZGluZ0ZpbGVzKTtcbiAgICAgIG5ld0ZpbGVzLmZvckVhY2goZmlsZSA9PiBuZXdVcGxvYWRpbmdGaWxlcy5hZGQoZmlsZS5uYW1lKSk7XG4gICAgICBzZXRVcGxvYWRpbmdGaWxlcyhuZXdVcGxvYWRpbmdGaWxlcyk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHNldHRsZWQgPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoXG4gICAgICAgICAgbmV3RmlsZXMubWFwKGFzeW5jIChmaWxlKSA9PiAoeyBmaWxlLCBhdHRhY2htZW50OiBhd2FpdCB1cGxvYWRGaWxlKGZpbGUpIH0pKVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IGZpbGVUb0F0dGFjaG1lbnRNYXAgPSBuZXcgTWFwPHN0cmluZywgQXR0YWNobWVudCB8IG51bGw+KCk7XG4gICAgICAgIGNvbnN0IGZhaWxlZEZpbGVLZXlzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgIHNldHRsZWQuZm9yRWFjaCgocmVzdWx0LCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGZpbGUgPSBuZXdGaWxlc1tpbmRleF07XG4gICAgICAgICAgaWYgKCFmaWxlKSByZXR1cm47XG4gICAgICAgICAgY29uc3QgZmlsZUtleSA9IGAke2ZpbGUubmFtZX06JHtmaWxlLnNpemV9OiR7ZmlsZS5sYXN0TW9kaWZpZWR9YDtcbiAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gJ3JlamVjdGVkJykge1xuICAgICAgICAgICAgZmlsZVRvQXR0YWNobWVudE1hcC5zZXQoZmlsZUtleSwgbnVsbCk7XG4gICAgICAgICAgICBmYWlsZWRGaWxlS2V5cy5hZGQoZmlsZUtleSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHsgYXR0YWNobWVudCB9ID0gcmVzdWx0LnZhbHVlO1xuICAgICAgICAgIGZpbGVUb0F0dGFjaG1lbnRNYXAuc2V0KGZpbGVLZXksIGF0dGFjaG1lbnQpO1xuICAgICAgICAgIGlmIChhdHRhY2htZW50ID09PSBudWxsKSB7XG4gICAgICAgICAgICBmYWlsZWRGaWxlS2V5cy5hZGQoZmlsZUtleSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBoYXNGYWlsZWRVcGxvYWRzID0gZmFpbGVkRmlsZUtleXMuc2l6ZSA+IDA7XG5cbiAgICAgICAgc2V0QXR0YWNobWVudHMocHJldiA9PiB7XG4gICAgICAgICAgcmV0dXJuIHByZXZcbiAgICAgICAgICAgIC5maWx0ZXIoYXR0ID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZmlsZUtleSA9IGAke2F0dC5maWxlLm5hbWV9OiR7YXR0LmZpbGUuc2l6ZX06JHthdHQuZmlsZS5sYXN0TW9kaWZpZWR9YDtcbiAgICAgICAgICAgICAgcmV0dXJuICFmYWlsZWRGaWxlS2V5cy5oYXMoZmlsZUtleSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLm1hcChhdHQgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBmaWxlS2V5ID0gYCR7YXR0LmZpbGUubmFtZX06JHthdHQuZmlsZS5zaXplfToke2F0dC5maWxlLmxhc3RNb2RpZmllZH1gO1xuICAgICAgICAgICAgICBjb25zdCB1cGxvYWRlZEF0dGFjaG1lbnQgPSBmaWxlVG9BdHRhY2htZW50TWFwLmdldChmaWxlS2V5KTtcbiAgICAgICAgICAgICAgaWYgKHVwbG9hZGVkQXR0YWNobWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uYXR0LCBhdHRhY2htZW50OiB1cGxvYWRlZEF0dGFjaG1lbnQgfTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gYXR0O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChoYXNGYWlsZWRVcGxvYWRzKSB7XG4gICAgICAgICAgaWYgKGZpbGVFcnJvclRvYXN0VGltZW91dFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoZmlsZUVycm9yVG9hc3RUaW1lb3V0UmVmLmN1cnJlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzZXRGaWxlRXJyb3JUb2FzdCh0KCdmaWxlVXBsb2FkLmZpbGVUeXBlTm90U3VwcG9ydGVkJywgJ1RoaXMgZmlsZSB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQuJykpO1xuICAgICAgICAgIGZpbGVFcnJvclRvYXN0VGltZW91dFJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBzZXRGaWxlRXJyb3JUb2FzdChudWxsKTtcbiAgICAgICAgICAgIGZpbGVFcnJvclRvYXN0VGltZW91dFJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgICB9LCA0MDAwKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdXBsb2FkaW5nIGZpbGUnLCBlcnJvcik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBjb25zdCBmaW5hbFVwbG9hZGluZ0ZpbGVzID0gbmV3IFNldCh1cGxvYWRpbmdGaWxlcyk7XG4gICAgICAgIG5ld0ZpbGVzLmZvckVhY2goZmlsZSA9PiBmaW5hbFVwbG9hZGluZ0ZpbGVzLmRlbGV0ZShmaWxlLm5hbWUpKTtcbiAgICAgICAgc2V0VXBsb2FkaW5nRmlsZXMoZmluYWxVcGxvYWRpbmdGaWxlcyk7XG4gICAgICAgIGlmIChmaWxlSW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgICAgIGZpbGVJbnB1dFJlZi5jdXJyZW50IS52YWx1ZSA9ICcnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVJlbW92ZUF0dGFjaG1lbnQgPSAoZmlsZU5hbWU6IHN0cmluZykgPT4ge1xuICAgIHNldEF0dGFjaG1lbnRzKHByZXYgPT4gcHJldi5maWx0ZXIoYXR0ID0+IGF0dC5maWxlLm5hbWUgIT09IGZpbGVOYW1lKSk7XG4gIH07XG5cbiAgY29uc3QgY2xlYXJBdHRhY2htZW50cyA9ICgpID0+IHtcbiAgICBzZXRBdHRhY2htZW50cyhbXSk7XG4gICAgaWYgKGZpbGVJbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICBmaWxlSW5wdXRSZWYuY3VycmVudC52YWx1ZSA9ICcnO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGF0dGFjaG1lbnRzLFxuICAgIHNldEF0dGFjaG1lbnRzLFxuICAgIHVwbG9hZGluZ0ZpbGVzLFxuICAgIGZpbGVFcnJvclRvYXN0LFxuICAgIGZpbGVJbnB1dFJlZixcbiAgICBoYW5kbGVGaWxlQ2hhbmdlLFxuICAgIGhhbmRsZVJlbW92ZUF0dGFjaG1lbnQsXG4gICAgY2xlYXJBdHRhY2htZW50cyxcbiAgfTtcbn1cbiJdfQ==
@@ -0,0 +1,15 @@
1
+ import { ChatMessage } from '../types';
2
+ interface UseScrollManagementOptions {
3
+ messages: ChatMessage[];
4
+ isAgentTyping: boolean;
5
+ currentThinkingPartIndex: number;
6
+ currentThinkingPartsLength: number;
7
+ conversationId: string | null | undefined;
8
+ isFloatingOpen: boolean;
9
+ mode: string;
10
+ }
11
+ export declare function useScrollManagement({ messages, isAgentTyping, currentThinkingPartIndex, currentThinkingPartsLength, conversationId, isFloatingOpen, mode, }: UseScrollManagementOptions): {
12
+ messagesEndRef: import("react").RefObject<HTMLDivElement>;
13
+ chatContainerRef: import("react").RefObject<HTMLDivElement>;
14
+ };
15
+ export {};
@@ -0,0 +1,124 @@
1
+ import { useRef, useLayoutEffect, useEffect } from 'react';
2
+ export function useScrollManagement(_a) {
3
+ var messages = _a.messages, isAgentTyping = _a.isAgentTyping, currentThinkingPartIndex = _a.currentThinkingPartIndex, currentThinkingPartsLength = _a.currentThinkingPartsLength, conversationId = _a.conversationId, isFloatingOpen = _a.isFloatingOpen, mode = _a.mode;
4
+ var messagesEndRef = useRef(null);
5
+ var chatContainerRef = useRef(null);
6
+ var hasAnchoredHistory = useRef(false);
7
+ var isUserAtBottomRef = useRef(true);
8
+ var prevIsFloatingOpenRef = useRef(isFloatingOpen);
9
+ var anchorHistory = function () {
10
+ var el = chatContainerRef.current;
11
+ if (!el || !messages.length || hasAnchoredHistory.current)
12
+ return;
13
+ if (el.clientHeight === 0)
14
+ return;
15
+ el.scrollTop = el.scrollHeight;
16
+ hasAnchoredHistory.current = true;
17
+ isUserAtBottomRef.current = true;
18
+ };
19
+ var scrollToBottom = function (behavior, force) {
20
+ if (behavior === void 0) { behavior = 'smooth'; }
21
+ if (force === void 0) { force = false; }
22
+ var container = chatContainerRef.current;
23
+ var el = messagesEndRef.current;
24
+ if (!container || !el)
25
+ return;
26
+ if (!force && !isUserAtBottomRef.current) {
27
+ return;
28
+ }
29
+ var doScroll = function () {
30
+ container.scrollTo({ top: container.scrollHeight, behavior: behavior });
31
+ isUserAtBottomRef.current = true;
32
+ };
33
+ if (behavior === 'auto') {
34
+ doScroll();
35
+ }
36
+ else {
37
+ requestAnimationFrame(doScroll);
38
+ }
39
+ };
40
+ useLayoutEffect(function () {
41
+ if (!messages.length)
42
+ return;
43
+ if (hasAnchoredHistory.current) {
44
+ scrollToBottom('smooth', false);
45
+ }
46
+ else {
47
+ anchorHistory();
48
+ }
49
+ }, [messages]);
50
+ useLayoutEffect(function () {
51
+ if (!isAgentTyping)
52
+ return;
53
+ scrollToBottom('auto', true);
54
+ }, [isAgentTyping, currentThinkingPartIndex, currentThinkingPartsLength]);
55
+ useEffect(function () {
56
+ hasAnchoredHistory.current = false;
57
+ }, [conversationId]);
58
+ useEffect(function () {
59
+ if ((mode === 'floating' || mode === 'fullscreen') && isFloatingOpen && !prevIsFloatingOpenRef.current && messages.length > 0) {
60
+ hasAnchoredHistory.current = false;
61
+ isUserAtBottomRef.current = true;
62
+ var scrollWhenVisible_1 = function () {
63
+ var container = chatContainerRef.current;
64
+ if (!container) {
65
+ requestAnimationFrame(scrollWhenVisible_1);
66
+ return;
67
+ }
68
+ if (container.clientHeight === 0) {
69
+ requestAnimationFrame(scrollWhenVisible_1);
70
+ return;
71
+ }
72
+ container.scrollTop = container.scrollHeight;
73
+ hasAnchoredHistory.current = true;
74
+ isUserAtBottomRef.current = true;
75
+ };
76
+ requestAnimationFrame(function () {
77
+ requestAnimationFrame(scrollWhenVisible_1);
78
+ });
79
+ }
80
+ prevIsFloatingOpenRef.current = isFloatingOpen;
81
+ }, [isFloatingOpen, mode]);
82
+ useEffect(function () {
83
+ if (!messages.length)
84
+ return;
85
+ var el = chatContainerRef.current;
86
+ if (!el)
87
+ return;
88
+ var resizeObserver = new ResizeObserver(function () {
89
+ if (isUserAtBottomRef.current) {
90
+ anchorHistory();
91
+ }
92
+ });
93
+ resizeObserver.observe(el);
94
+ anchorHistory();
95
+ return function () {
96
+ resizeObserver.disconnect();
97
+ };
98
+ }, [messages]);
99
+ useEffect(function () {
100
+ var container = chatContainerRef.current;
101
+ if (!container)
102
+ return;
103
+ var isAtBottom = function (threshold) {
104
+ if (threshold === void 0) { threshold = 100; }
105
+ if (!container)
106
+ return true;
107
+ var scrollTop = container.scrollTop, scrollHeight = container.scrollHeight, clientHeight = container.clientHeight;
108
+ return scrollHeight - scrollTop - clientHeight <= threshold;
109
+ };
110
+ var handleScroll = function () {
111
+ isUserAtBottomRef.current = isAtBottom();
112
+ };
113
+ container.addEventListener('scroll', handleScroll, { passive: true });
114
+ handleScroll();
115
+ return function () {
116
+ container.removeEventListener('scroll', handleScroll);
117
+ };
118
+ }, []);
119
+ return {
120
+ messagesEndRef: messagesEndRef,
121
+ chatContainerRef: chatContainerRef,
122
+ };
123
+ }
124
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlU2Nyb2xsTWFuYWdlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy91c2VTY3JvbGxNYW5hZ2VtZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQWEzRCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsRUFRUDtRQVAzQixRQUFRLGNBQUEsRUFDUixhQUFhLG1CQUFBLEVBQ2Isd0JBQXdCLDhCQUFBLEVBQ3hCLDBCQUEwQixnQ0FBQSxFQUMxQixjQUFjLG9CQUFBLEVBQ2QsY0FBYyxvQkFBQSxFQUNkLElBQUksVUFBQTtJQUVKLElBQU0sY0FBYyxHQUFHLE1BQU0sQ0FBaUIsSUFBSSxDQUFDLENBQUM7SUFDcEQsSUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQWlCLElBQUksQ0FBQyxDQUFDO0lBQ3RELElBQU0sa0JBQWtCLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pDLElBQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZDLElBQU0scUJBQXFCLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBRXJELElBQU0sYUFBYSxHQUFHO1FBQ3BCLElBQU0sRUFBRSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztRQUNwQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sSUFBSSxrQkFBa0IsQ0FBQyxPQUFPO1lBQUUsT0FBTztRQUNsRSxJQUFJLEVBQUUsQ0FBQyxZQUFZLEtBQUssQ0FBQztZQUFFLE9BQU87UUFDbEMsRUFBRSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDO1FBQy9CLGtCQUFrQixDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDbEMsaUJBQWlCLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztJQUNu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QyxDQUFDO1FBQ0YsU0FBUyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxZQUFZLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN0RSxZQUFZLEVBQUUsQ0FBQztRQUVmLE9BQU87WUFDTCxTQUFTLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ3hELENBQUMsQ0FBQztJQUNKLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUVQLE9BQU87UUFDTCxjQUFjLGdCQUFBO1FBQ2QsZ0JBQWdCLGtCQUFBO0tBQ2pCLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlUmVmLCB1c2VMYXlvdXRFZmZlY3QsIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IENoYXRNZXNzYWdlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbnRlcmZhY2UgVXNlU2Nyb2xsTWFuYWdlbWVudE9wdGlvbnMge1xuICBtZXNzYWdlczogQ2hhdE1lc3NhZ2VbXTtcbiAgaXNBZ2VudFR5cGluZzogYm9vbGVhbjtcbiAgY3VycmVudFRoaW5raW5nUGFydEluZGV4OiBudW1iZXI7XG4gIGN1cnJlbnRUaGlua2luZ1BhcnRzTGVuZ3RoOiBudW1iZXI7XG4gIGNvbnZlcnNhdGlvbklkOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBpc0Zsb2F0aW5nT3BlbjogYm9vbGVhbjtcbiAgbW9kZTogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlU2Nyb2xsTWFuYWdlbWVudCh7XG4gIG1lc3NhZ2VzLFxuICBpc0FnZW50VHlwaW5nLFxuICBjdXJyZW50VGhpbmtpbmdQYXJ0SW5kZXgsXG4gIGN1cnJlbnRUaGlua2luZ1BhcnRzTGVuZ3RoLFxuICBjb252ZXJzYXRpb25JZCxcbiAgaXNGbG9hdGluZ09wZW4sXG4gIG1vZGUsXG59OiBVc2VTY3JvbGxNYW5hZ2VtZW50T3B0aW9ucykge1xuICBjb25zdCBtZXNzYWdlc0VuZFJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IGNoYXRDb250YWluZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBoYXNBbmNob3JlZEhpc3RvcnkgPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBpc1VzZXJBdEJvdHRvbVJlZiA9IHVzZVJlZih0cnVlKTtcbiAgY29uc3QgcHJldklzRmxvYXRpbmdPcGVuUmVmID0gdXNlUmVmKGlzRmxvYXRpbmdPcGVuKTtcblxuICBjb25zdCBhbmNob3JIaXN0b3J5ID0gKCkgPT4ge1xuICAgIGNvbnN0IGVsID0gY2hhdENvbnRhaW5lclJlZi5jdXJyZW50O1xuICAgIGlmICghZWwgfHwgIW1lc3NhZ2VzLmxlbmd0aCB8fCBoYXNBbmNob3JlZEhpc3RvcnkuY3VycmVudCkgcmV0dXJuO1xuICAgIGlmIChlbC5jbGllbnRIZWlnaHQgPT09IDApIHJldHVybjtcbiAgICBlbC5zY3JvbGxUb3AgPSBlbC5zY3JvbGxIZWlnaHQ7XG4gICAgaGFzQW5jaG9yZWRIaXN0b3J5LmN1cnJlbnQgPSB0cnVlO1xuICAgIGlzVXNlckF0Qm90dG9tUmVmLmN1cnJlbnQgPSB0cnVlO1xuICB9O1xuXG4gIGNvbnN0IHNjcm9sbFRvQm90dG9tID0gKGJlaGF2aW9yOiBTY3JvbGxCZWhhdmlvciA9ICdzbW9vdGgnLCBmb3JjZTogYm9vbGVhbiA9IGZhbHNlKSA9PiB7XG4gICAgY29uc3QgY29udGFpbmVyID0gY2hhdENvbnRhaW5lclJlZi5jdXJyZW50O1xuICAgIGNvbnN0IGVsID0gbWVzc2FnZXNFbmRSZWYuY3VycmVudDtcbiAgICBpZiAoIWNvbnRhaW5lciB8fCAhZWwpIHJldHVybjtcblxuICAgIGlmICghZm9yY2UgJiYgIWlzVXNlckF0Qm90dG9tUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkb1Njcm9sbCA9ICgpID0+IHtcbiAgICAgIGNvbnRhaW5lci5zY3JvbGxUbyh7IHRvcDogY29udGFpbmVyLnNjcm9sbEhlaWdodCwgYmVoYXZpb3IgfSk7XG4gICAgICBpc1VzZXJBdEJvdHRvbVJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICB9O1xuICAgIGlmIChiZWhhdmlvciA9PT0gJ2F1dG8nKSB7XG4gICAgICBkb1Njcm9sbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZG9TY3JvbGwpO1xuICAgIH1cbiAgfTtcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghbWVzc2FnZXMubGVuZ3RoKSByZXR1cm47XG4gICAgaWYgKGhhc0FuY2hvcmVkSGlzdG9yeS5jdXJyZW50KSB7XG4gICAgICBzY3JvbGxUb0JvdHRvbSgnc21vb3RoJywgZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhbmNob3JIaXN0b3J5KCk7XG4gICAgfVxuICB9LCBbbWVzc2FnZXNdKTtcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNBZ2VudFR5cGluZykgcmV0dXJuO1xuICAgIHNjcm9sbFRvQm90dG9tKCdhdXRvJywgdHJ1ZSk7XG4gIH0sIFtpc0FnZW50VHlwaW5nLCBjdXJyZW50VGhpbmtpbmdQYXJ0SW5kZXgsIGN1cnJlbnRUaGlua2luZ1BhcnRzTGVuZ3RoXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBoYXNBbmNob3JlZEhpc3RvcnkuY3VycmVudCA9IGZhbHNlO1xuICB9LCBbY29udmVyc2F0aW9uSWRdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICgobW9kZSA9PT0gJ2Zsb2F0aW5nJyB8fCBtb2RlID09PSAnZnVsbHNjcmVlbicpICYmIGlzRmxvYXRpbmdPcGVuICYmICFwcmV2SXNGbG9hdGluZ09wZW5SZWYuY3VycmVudCAmJiBtZXNzYWdlcy5sZW5ndGggPiAwKSB7XG4gICAgICBoYXNBbmNob3JlZEhpc3RvcnkuY3VycmVudCA9IGZhbHNlO1xuICAgICAgaXNVc2VyQXRCb3R0b21SZWYuY3VycmVudCA9IHRydWU7XG5cbiAgICAgIGNvbnN0IHNjcm9sbFdoZW5WaXNpYmxlID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSBjaGF0Q29udGFpbmVyUmVmLmN1cnJlbnQ7XG4gICAgICAgIGlmICghY29udGFpbmVyKSB7XG4gICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHNjcm9sbFdoZW5WaXNpYmxlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29udGFpbmVyLmNsaWVudEhlaWdodCA9PT0gMCkge1xuICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShzY3JvbGxXaGVuVmlzaWJsZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGFpbmVyLnNjcm9sbFRvcCA9IGNvbnRhaW5lci5zY3JvbGxIZWlnaHQ7XG4gICAgICAgIGhhc0FuY2hvcmVkSGlzdG9yeS5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgaXNVc2VyQXRCb3R0b21SZWYuY3VycmVudCA9IHRydWU7XG4gICAgICB9O1xuXG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc2Nyb2xsV2hlblZpc2libGUpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHByZXZJc0Zsb2F0aW5nT3BlblJlZi5jdXJyZW50ID0gaXNGbG9hdGluZ09wZW47XG4gIH0sIFtpc0Zsb2F0aW5nT3BlbiwgbW9kZV0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFtZXNzYWdlcy5sZW5ndGgpIHJldHVybjtcbiAgICBjb25zdCBlbCA9IGNoYXRDb250YWluZXJSZWYuY3VycmVudDtcbiAgICBpZiAoIWVsKSByZXR1cm47XG5cbiAgICBjb25zdCByZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7XG4gICAgICBpZiAoaXNVc2VyQXRCb3R0b21SZWYuY3VycmVudCkge1xuICAgICAgICBhbmNob3JIaXN0b3J5KCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShlbCk7XG5cbiAgICBhbmNob3JIaXN0b3J5KCk7XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgcmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIH07XG4gIH0sIFttZXNzYWdlc10pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgY29udGFpbmVyID0gY2hhdENvbnRhaW5lclJlZi5jdXJyZW50O1xuICAgIGlmICghY29udGFpbmVyKSByZXR1cm47XG5cbiAgICBjb25zdCBpc0F0Qm90dG9tID0gKHRocmVzaG9sZDogbnVtYmVyID0gMTAwKTogYm9vbGVhbiA9PiB7XG4gICAgICBpZiAoIWNvbnRhaW5lcikgcmV0dXJuIHRydWU7XG4gICAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgfSA9IGNvbnRhaW5lcjtcbiAgICAgIHJldHVybiBzY3JvbGxIZWlnaHQgLSBzY3JvbGxUb3AgLSBjbGllbnRIZWlnaHQgPD0gdGhyZXNob2xkO1xuICAgIH07XG4gICAgY29uc3QgaGFuZGxlU2Nyb2xsID0gKCkgPT4ge1xuICAgICAgaXNVc2VyQXRCb3R0b21SZWYuY3VycmVudCA9IGlzQXRCb3R0b20oKTtcbiAgICB9O1xuICAgIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGVTY3JvbGwsIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcbiAgICBoYW5kbGVTY3JvbGwoKTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaGFuZGxlU2Nyb2xsKTtcbiAgICB9O1xuICB9LCBbXSk7XG5cbiAgcmV0dXJuIHtcbiAgICBtZXNzYWdlc0VuZFJlZixcbiAgICBjaGF0Q29udGFpbmVyUmVmLFxuICB9O1xufVxuIl19
@@ -0,0 +1,12 @@
1
+ import type { Translations } from '../types';
2
+ interface UseThinkingAnimationOptions {
3
+ isAgentTyping: boolean;
4
+ thinkingPhrases: string[] | undefined;
5
+ thinkingDelayMs: number | undefined;
6
+ translations: Translations;
7
+ }
8
+ export declare function useThinkingAnimation({ isAgentTyping, thinkingPhrases, thinkingDelayMs, translations, }: UseThinkingAnimationOptions): {
9
+ currentThinkingParts: string[];
10
+ currentThinkingPartIndex: number;
11
+ };
12
+ export {};
@@ -0,0 +1,53 @@
1
+ import { useState, useEffect, useMemo } from 'react';
2
+ import { getTranslationArray } from '../utils/i18n';
3
+ export function useThinkingAnimation(_a) {
4
+ var isAgentTyping = _a.isAgentTyping, thinkingPhrases = _a.thinkingPhrases, thinkingDelayMs = _a.thinkingDelayMs, translations = _a.translations;
5
+ var DEFAULT_THINKING_MESSAGES = useMemo(function () { return getTranslationArray('thinking.messages', translations, [
6
+ "Thinking…",
7
+ "Analyzing your question…",
8
+ "Searching knowledge…",
9
+ "Pulling relevant info…",
10
+ "Drafting the answer…",
11
+ "Double‑checking details…",
12
+ "Tying it together…",
13
+ "Almost there…",
14
+ ]); }, [translations]);
15
+ var _b = useState([]), currentThinkingParts = _b[0], setCurrentThinkingParts = _b[1];
16
+ var _c = useState(0), currentThinkingPartIndex = _c[0], setCurrentThinkingPartIndex = _c[1];
17
+ useEffect(function () {
18
+ if (!isAgentTyping) {
19
+ setCurrentThinkingParts([]);
20
+ setCurrentThinkingPartIndex(0);
21
+ return;
22
+ }
23
+ var list = (thinkingPhrases && thinkingPhrases.length > 0) ? thinkingPhrases : DEFAULT_THINKING_MESSAGES;
24
+ var randomIndex = Math.floor(Math.random() * list.length);
25
+ var selectedPhrase = list[randomIndex];
26
+ var parts = selectedPhrase.includes('|')
27
+ ? selectedPhrase.split('|').map(function (part) { return part.trim(); }).filter(function (part) { return part.length > 0; })
28
+ : [selectedPhrase.trim()];
29
+ setCurrentThinkingParts(parts);
30
+ setCurrentThinkingPartIndex(0);
31
+ if (parts.length <= 1)
32
+ return;
33
+ var rotDelay = Math.max(250, thinkingDelayMs || 1000);
34
+ var timeoutIds = [];
35
+ var _loop_1 = function (i) {
36
+ var timeoutId = setTimeout(function () {
37
+ setCurrentThinkingPartIndex(i);
38
+ }, rotDelay * i);
39
+ timeoutIds.push(timeoutId);
40
+ };
41
+ for (var i = 1; i < parts.length; i++) {
42
+ _loop_1(i);
43
+ }
44
+ return function () {
45
+ timeoutIds.forEach(function (id) { return clearTimeout(id); });
46
+ };
47
+ }, [isAgentTyping, thinkingPhrases, thinkingDelayMs]);
48
+ return {
49
+ currentThinkingParts: currentThinkingParts,
50
+ currentThinkingPartIndex: currentThinkingPartIndex,
51
+ };
52
+ }
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlVGhpbmtpbmdBbmltYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaG9va3MvdXNlVGhpbmtpbmdBbmltYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ3JELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVVwRCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsRUFLUDtRQUo1QixhQUFhLG1CQUFBLEVBQ2IsZUFBZSxxQkFBQSxFQUNmLGVBQWUscUJBQUEsRUFDZixZQUFZLGtCQUFBO0lBRVosSUFBTSx5QkFBeUIsR0FBRyxPQUFPLENBQ3ZDLGNBQU0sT0FBQSxtQkFBbUIsQ0FBQyxtQkFBbUIsRUFBRSxZQUFZLEVBQUU7UUFDM0QsV0FBVztRQUNYLDBCQUEwQjtRQUMxQixzQkFBc0I7UUFDdEIsd0JBQXdCO1FBQ3hCLHNCQUFzQjtRQUN0QiwwQkFBMEI7UUFDMUIsb0JBQW9CO1FBQ3BCLGVBQWU7S0FDaEIsQ0FBQyxFQVRJLENBU0osRUFDRixDQUFDLFlBQVksQ0FBQyxDQUNmLENBQUM7SUFFSSxJQUFBLEtBQWtELFFBQVEsQ0FBVyxFQUFFLENBQUMsRUFBdkUsb0JBQW9CLFFBQUEsRUFBRSx1QkFBdUIsUUFBMEIsQ0FBQztJQUN6RSxJQUFBLEtBQTBELFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBcEUsd0JBQXdCLFFBQUEsRUFBRSwyQkFBMkIsUUFBZSxDQUFDO0lBRTVFLFNBQVMsQ0FBQztRQUNSLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNuQix1QkFBdUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM1QiwyQkFBMkIsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMvQixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQU0sSUFBSSxHQUFHLENBQUMsZUFBZSxJQUFJLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMseUJBQXlCLENBQUM7UUFDM0csSUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVELElBQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUV6QyxJQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztZQUN4QyxDQUFDLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBQSxJQUFJLElBQUksT0FBQSxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQVgsQ0FBVyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQUEsSUFBSSxJQUFJLE9BQUEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQWYsQ0FBZSxDQUFDO1lBQ3BGLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRTVCLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLDJCQUEyQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRS9CLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDO1lBQUUsT0FBTztRQUU5QixJQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxlQUFlLElBQUksSUFBSSxDQUFDLENBQUM7UUFDeEQsSUFBTSxVQUFVLEdBQW9DLEVBQUUsQ0FBQztnQ0FFOUMsQ0FBQztZQUNSLElBQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQztnQkFDM0IsMkJBQTJCLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakMsQ0FBQyxFQUFFLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNqQixVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDOztRQUo3QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUU7b0JBQTVCLENBQUM7U0FLVDtRQUVELE9BQU87WUFDTCxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQUEsRUFBRSxJQUFJLE9BQUEsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFoQixDQUFnQixDQUFDLENBQUM7UUFDN0MsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDO0lBRXRELE9BQU87UUFDTCxvQkFBb0Isc0JBQUE7UUFDcEIsd0JBQXdCLDBCQUFBO0tBQ3pCLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlU3RhdGUsIHVzZUVmZmVjdCwgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGdldFRyYW5zbGF0aW9uQXJyYXkgfSBmcm9tICcuLi91dGlscy9pMThuJztcbmltcG9ydCB0eXBlIHsgVHJhbnNsYXRpb25zIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbnRlcmZhY2UgVXNlVGhpbmtpbmdBbmltYXRpb25PcHRpb25zIHtcbiAgaXNBZ2VudFR5cGluZzogYm9vbGVhbjtcbiAgdGhpbmtpbmdQaHJhc2VzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcbiAgdGhpbmtpbmdEZWxheU1zOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIHRyYW5zbGF0aW9uczogVHJhbnNsYXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlVGhpbmtpbmdBbmltYXRpb24oe1xuICBpc0FnZW50VHlwaW5nLFxuICB0aGlua2luZ1BocmFzZXMsXG4gIHRoaW5raW5nRGVsYXlNcyxcbiAgdHJhbnNsYXRpb25zLFxufTogVXNlVGhpbmtpbmdBbmltYXRpb25PcHRpb25zKSB7XG4gIGNvbnN0IERFRkFVTFRfVEhJTktJTkdfTUVTU0FHRVMgPSB1c2VNZW1vKFxuICAgICgpID0+IGdldFRyYW5zbGF0aW9uQXJyYXkoJ3RoaW5raW5nLm1lc3NhZ2VzJywgdHJhbnNsYXRpb25zLCBbXG4gICAgICBcIlRoaW5raW5n4oCmXCIsXG4gICAgICBcIkFuYWx5emluZyB5b3VyIHF1ZXN0aW9u4oCmXCIsXG4gICAgICBcIlNlYXJjaGluZyBrbm93bGVkZ2XigKZcIixcbiAgICAgIFwiUHVsbGluZyByZWxldmFudCBpbmZv4oCmXCIsXG4gICAgICBcIkRyYWZ0aW5nIHRoZSBhbnN3ZXLigKZcIixcbiAgICAgIFwiRG91Ymxl4oCRY2hlY2tpbmcgZGV0YWlsc+KAplwiLFxuICAgICAgXCJUeWluZyBpdCB0b2dldGhlcuKAplwiLFxuICAgICAgXCJBbG1vc3QgdGhlcmXigKZcIixcbiAgICBdKSxcbiAgICBbdHJhbnNsYXRpb25zXVxuICApO1xuXG4gIGNvbnN0IFtjdXJyZW50VGhpbmtpbmdQYXJ0cywgc2V0Q3VycmVudFRoaW5raW5nUGFydHNdID0gdXNlU3RhdGU8c3RyaW5nW10+KFtdKTtcbiAgY29uc3QgW2N1cnJlbnRUaGlua2luZ1BhcnRJbmRleCwgc2V0Q3VycmVudFRoaW5raW5nUGFydEluZGV4XSA9IHVzZVN0YXRlKDApO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc0FnZW50VHlwaW5nKSB7XG4gICAgICBzZXRDdXJyZW50VGhpbmtpbmdQYXJ0cyhbXSk7XG4gICAgICBzZXRDdXJyZW50VGhpbmtpbmdQYXJ0SW5kZXgoMCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbGlzdCA9ICh0aGlua2luZ1BocmFzZXMgJiYgdGhpbmtpbmdQaHJhc2VzLmxlbmd0aCA+IDApID8gdGhpbmtpbmdQaHJhc2VzIDogREVGQVVMVF9USElOS0lOR19NRVNTQUdFUztcbiAgICBjb25zdCByYW5kb21JbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGxpc3QubGVuZ3RoKTtcbiAgICBjb25zdCBzZWxlY3RlZFBocmFzZSA9IGxpc3RbcmFuZG9tSW5kZXhdO1xuXG4gICAgY29uc3QgcGFydHMgPSBzZWxlY3RlZFBocmFzZS5pbmNsdWRlcygnfCcpXG4gICAgICA/IHNlbGVjdGVkUGhyYXNlLnNwbGl0KCd8JykubWFwKHBhcnQgPT4gcGFydC50cmltKCkpLmZpbHRlcihwYXJ0ID0+IHBhcnQubGVuZ3RoID4gMClcbiAgICAgIDogW3NlbGVjdGVkUGhyYXNlLnRyaW0oKV07XG5cbiAgICBzZXRDdXJyZW50VGhpbmtpbmdQYXJ0cyhwYXJ0cyk7XG4gICAgc2V0Q3VycmVudFRoaW5raW5nUGFydEluZGV4KDApO1xuXG4gICAgaWYgKHBhcnRzLmxlbmd0aCA8PSAxKSByZXR1cm47XG5cbiAgICBjb25zdCByb3REZWxheSA9IE1hdGgubWF4KDI1MCwgdGhpbmtpbmdEZWxheU1zIHx8IDEwMDApO1xuICAgIGNvbnN0IHRpbWVvdXRJZHM6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+W10gPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBzZXRDdXJyZW50VGhpbmtpbmdQYXJ0SW5kZXgoaSk7XG4gICAgICB9LCByb3REZWxheSAqIGkpO1xuICAgICAgdGltZW91dElkcy5wdXNoKHRpbWVvdXRJZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHRpbWVvdXRJZHMuZm9yRWFjaChpZCA9PiBjbGVhclRpbWVvdXQoaWQpKTtcbiAgICB9O1xuICB9LCBbaXNBZ2VudFR5cGluZywgdGhpbmtpbmdQaHJhc2VzLCB0aGlua2luZ0RlbGF5TXNdKTtcblxuICByZXR1cm4ge1xuICAgIGN1cnJlbnRUaGlua2luZ1BhcnRzLFxuICAgIGN1cnJlbnRUaGlua2luZ1BhcnRJbmRleCxcbiAgfTtcbn1cbiJdfQ==
@@ -0,0 +1,20 @@
1
+ interface UseViewportManagerOptions {
2
+ mode: string;
3
+ widget: boolean;
4
+ isFloatingOpen: boolean;
5
+ showResetConfirm: boolean;
6
+ showLanguageDropdown: boolean;
7
+ showMenu: boolean;
8
+ onExitFullscreen?: () => void;
9
+ setShowResetConfirm: (v: boolean) => void;
10
+ setShowLanguageDropdown: (v: boolean) => void;
11
+ setShowMenu: (v: boolean) => void;
12
+ }
13
+ export declare function useViewportManager({ mode, widget, isFloatingOpen, showResetConfirm, showLanguageDropdown, showMenu, onExitFullscreen, setShowResetConfirm, setShowLanguageDropdown, setShowMenu, }: UseViewportManagerOptions): {
14
+ windowWidth: number;
15
+ windowHeight: number;
16
+ isFullscreen: boolean;
17
+ isFullscreenToggled: boolean;
18
+ handleFullscreenToggle: () => void;
19
+ };
20
+ export {};
@@ -0,0 +1,100 @@
1
+ import { useState, useEffect, useMemo } from 'react';
2
+ export function useViewportManager(_a) {
3
+ var mode = _a.mode, widget = _a.widget, isFloatingOpen = _a.isFloatingOpen, showResetConfirm = _a.showResetConfirm, showLanguageDropdown = _a.showLanguageDropdown, showMenu = _a.showMenu, onExitFullscreen = _a.onExitFullscreen, setShowResetConfirm = _a.setShowResetConfirm, setShowLanguageDropdown = _a.setShowLanguageDropdown, setShowMenu = _a.setShowMenu;
4
+ var _b = useState(typeof window !== 'undefined' ? window.innerWidth : 1024), windowWidth = _b[0], setWindowWidth = _b[1];
5
+ var _c = useState(typeof window !== 'undefined' ? window.innerHeight : 700), windowHeight = _c[0], setWindowHeight = _c[1];
6
+ var _d = useState(false), isFullscreenToggled = _d[0], setIsFullscreenToggled = _d[1];
7
+ var isFullscreen = useMemo(function () {
8
+ if (mode === 'fullscreen')
9
+ return true;
10
+ if (widget)
11
+ return true;
12
+ if (isFullscreenToggled)
13
+ return true;
14
+ return windowWidth <= 768;
15
+ }, [windowWidth, widget, isFullscreenToggled, mode]);
16
+ var handleFullscreenToggle = function () {
17
+ setIsFullscreenToggled(function (prev) { return !prev; });
18
+ setShowMenu(false);
19
+ };
20
+ useEffect(function () {
21
+ if (typeof window === 'undefined')
22
+ return;
23
+ if (mode === 'floating' && !isFloatingOpen)
24
+ return;
25
+ var onKeyDown = function (e) {
26
+ if (e.key !== 'Escape')
27
+ return;
28
+ if (showResetConfirm) {
29
+ e.preventDefault();
30
+ setShowResetConfirm(false);
31
+ return;
32
+ }
33
+ if (showLanguageDropdown) {
34
+ e.preventDefault();
35
+ setShowLanguageDropdown(false);
36
+ return;
37
+ }
38
+ if (showMenu) {
39
+ e.preventDefault();
40
+ setShowMenu(false);
41
+ return;
42
+ }
43
+ if (!isFullscreen)
44
+ return;
45
+ if (isFullscreenToggled) {
46
+ e.preventDefault();
47
+ setIsFullscreenToggled(false);
48
+ return;
49
+ }
50
+ if (mode === 'fullscreen' && onExitFullscreen) {
51
+ e.preventDefault();
52
+ onExitFullscreen();
53
+ }
54
+ };
55
+ window.addEventListener('keydown', onKeyDown);
56
+ return function () { return window.removeEventListener('keydown', onKeyDown); };
57
+ }, [
58
+ isFloatingOpen,
59
+ isFullscreen,
60
+ isFullscreenToggled,
61
+ mode,
62
+ onExitFullscreen,
63
+ showLanguageDropdown,
64
+ showMenu,
65
+ showResetConfirm,
66
+ ]);
67
+ useEffect(function () {
68
+ var updateViewport = function () {
69
+ setWindowWidth(window.innerWidth);
70
+ setWindowHeight(window.innerHeight);
71
+ };
72
+ updateViewport();
73
+ window.addEventListener('resize', updateViewport);
74
+ var vv = typeof window !== 'undefined' ? window.visualViewport : null;
75
+ vv === null || vv === void 0 ? void 0 : vv.addEventListener('resize', updateViewport);
76
+ vv === null || vv === void 0 ? void 0 : vv.addEventListener('scroll', updateViewport);
77
+ return function () {
78
+ window.removeEventListener('resize', updateViewport);
79
+ vv === null || vv === void 0 ? void 0 : vv.removeEventListener('resize', updateViewport);
80
+ vv === null || vv === void 0 ? void 0 : vv.removeEventListener('scroll', updateViewport);
81
+ };
82
+ }, []);
83
+ useEffect(function () {
84
+ if (isFullscreen && typeof document !== 'undefined') {
85
+ var originalStyle_1 = window.getComputedStyle(document.body).overflow;
86
+ document.body.style.overflow = 'hidden';
87
+ return function () {
88
+ document.body.style.overflow = originalStyle_1;
89
+ };
90
+ }
91
+ }, [isFullscreen]);
92
+ return {
93
+ windowWidth: windowWidth,
94
+ windowHeight: windowHeight,
95
+ isFullscreen: isFullscreen,
96
+ isFullscreenToggled: isFullscreenToggled,
97
+ handleFullscreenToggle: handleFullscreenToggle,
98
+ };
99
+ }
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlVmlld3BvcnRNYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hvb2tzL3VzZVZpZXdwb3J0TWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFlckQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLEVBV1A7UUFWMUIsSUFBSSxVQUFBLEVBQ0osTUFBTSxZQUFBLEVBQ04sY0FBYyxvQkFBQSxFQUNkLGdCQUFnQixzQkFBQSxFQUNoQixvQkFBb0IsMEJBQUEsRUFDcEIsUUFBUSxjQUFBLEVBQ1IsZ0JBQWdCLHNCQUFBLEVBQ2hCLG1CQUFtQix5QkFBQSxFQUNuQix1QkFBdUIsNkJBQUEsRUFDdkIsV0FBVyxpQkFBQTtJQUVMLElBQUEsS0FBZ0MsUUFBUSxDQUFDLE9BQU8sTUFBTSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQWpHLFdBQVcsUUFBQSxFQUFFLGNBQWMsUUFBc0UsQ0FBQztJQUNuRyxJQUFBLEtBQWtDLFFBQVEsQ0FBQyxPQUFPLE1BQU0sS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFuRyxZQUFZLFFBQUEsRUFBRSxlQUFlLFFBQXNFLENBQUM7SUFDckcsSUFBQSxLQUFnRCxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQTlELG1CQUFtQixRQUFBLEVBQUUsc0JBQXNCLFFBQW1CLENBQUM7SUFFdEUsSUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDO1FBQzNCLElBQUksSUFBSSxLQUFLLFlBQVk7WUFBRSxPQUFPLElBQUksQ0FBQztRQUN2QyxJQUFJLE1BQU07WUFBRSxPQUFPLElBQUksQ0FBQztRQUN4QixJQUFJLG1CQUFtQjtZQUFFLE9BQU8sSUFB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QUFFLGNBQWMsQ0FBQyxDQUFDO1lBQ3JELEVBQUUsYUFBRixFQUFFLHVCQUFGLEVBQUUsQ0FBRSxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUM7WUFDbEQsRUFBRSxhQUFGLEVBQUUsdUJBQUYsRUFBRSxDQUFFLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUNwRCxDQUFDLENBQUM7SUFDSixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFUCxTQUFTLENBQUM7UUFDUixJQUFJLFlBQVksSUFBSSxPQUFPLFFBQVEsS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUNwRCxJQUFNLGVBQWEsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQztZQUN0RSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1lBQ3hDLE9BQU87Z0JBQ0wsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLGVBQWEsQ0FBQztZQUMvQyxDQUFDLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztJQUVuQixPQUFPO1FBQ0wsV0FBVyxhQUFBO1FBQ1gsWUFBWSxjQUFBO1FBQ1osWUFBWSxjQUFBO1FBQ1osbUJBQW1CLHFCQUFBO1FBQ25CLHNCQUFzQix3QkFBQTtLQUN2QixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5cbmludGVyZmFjZSBVc2VWaWV3cG9ydE1hbmFnZXJPcHRpb25zIHtcbiAgbW9kZTogc3RyaW5nO1xuICB3aWRnZXQ6IGJvb2xlYW47XG4gIGlzRmxvYXRpbmdPcGVuOiBib29sZWFuO1xuICBzaG93UmVzZXRDb25maXJtOiBib29sZWFuO1xuICBzaG93TGFuZ3VhZ2VEcm9wZG93bjogYm9vbGVhbjtcbiAgc2hvd01lbnU6IGJvb2xlYW47XG4gIG9uRXhpdEZ1bGxzY3JlZW4/OiAoKSA9PiB2b2lkO1xuICBzZXRTaG93UmVzZXRDb25maXJtOiAodjogYm9vbGVhbikgPT4gdm9pZDtcbiAgc2V0U2hvd0xhbmd1YWdlRHJvcGRvd246ICh2OiBib29sZWFuKSA9PiB2b2lkO1xuICBzZXRTaG93TWVudTogKHY6IGJvb2xlYW4pID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VWaWV3cG9ydE1hbmFnZXIoe1xuICBtb2RlLFxuICB3aWRnZXQsXG4gIGlzRmxvYXRpbmdPcGVuLFxuICBzaG93UmVzZXRDb25maXJtLFxuICBzaG93TGFuZ3VhZ2VEcm9wZG93bixcbiAgc2hvd01lbnUsXG4gIG9uRXhpdEZ1bGxzY3JlZW4sXG4gIHNldFNob3dSZXNldENvbmZpcm0sXG4gIHNldFNob3dMYW5ndWFnZURyb3Bkb3duLFxuICBzZXRTaG93TWVudSxcbn06IFVzZVZpZXdwb3J0TWFuYWdlck9wdGlvbnMpIHtcbiAgY29uc3QgW3dpbmRvd1dpZHRoLCBzZXRXaW5kb3dXaWR0aF0gPSB1c2VTdGF0ZSh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdy5pbm5lcldpZHRoIDogMTAyNCk7XG4gIGNvbnN0IFt3aW5kb3dIZWlnaHQsIHNldFdpbmRvd0hlaWdodF0gPSB1c2VTdGF0ZSh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdy5pbm5lckhlaWdodCA6IDcwMCk7XG4gIGNvbnN0IFtpc0Z1bGxzY3JlZW5Ub2dnbGVkLCBzZXRJc0Z1bGxzY3JlZW5Ub2dnbGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICBjb25zdCBpc0Z1bGxzY3JlZW4gPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAobW9kZSA9PT0gJ2Z1bGxzY3JlZW4nKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAod2lkZ2V0KSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNGdWxsc2NyZWVuVG9nZ2xlZCkgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIHdpbmRvd1dpZHRoIDw9IDc2ODtcbiAgfSwgW3dpbmRvd1dpZHRoLCB3aWRnZXQsIGlzRnVsbHNjcmVlblRvZ2dsZWQsIG1vZGVdKTtcblxuICBjb25zdCBoYW5kbGVGdWxsc2NyZWVuVG9nZ2xlID0gKCkgPT4ge1xuICAgIHNldElzRnVsbHNjcmVlblRvZ2dsZWQocHJldiA9PiAhcHJldik7XG4gICAgc2V0U2hvd01lbnUoZmFsc2UpO1xuICB9O1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSByZXR1cm47XG4gICAgaWYgKG1vZGUgPT09ICdmbG9hdGluZycgJiYgIWlzRmxvYXRpbmdPcGVuKSByZXR1cm47XG5cbiAgICBjb25zdCBvbktleURvd24gPSAoZTogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgaWYgKGUua2V5ICE9PSAnRXNjYXBlJykgcmV0dXJuO1xuXG4gICAgICBpZiAoc2hvd1Jlc2V0Q29uZmlybSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHNldFNob3dSZXNldENvbmZpcm0oZmFsc2UpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoc2hvd0xhbmd1YWdlRHJvcGRvd24pIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBzZXRTaG93TGFuZ3VhZ2VEcm9wZG93bihmYWxzZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChzaG93TWVudSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHNldFNob3dNZW51KGZhbHNlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzRnVsbHNjcmVlbikgcmV0dXJuO1xuXG4gICAgICBpZiAoaXNGdWxsc2NyZWVuVG9nZ2xlZCkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHNldElzRnVsbHNjcmVlblRvZ2dsZWQoZmFsc2UpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAobW9kZSA9PT0gJ2Z1bGxzY3JlZW4nICYmIG9uRXhpdEZ1bGxzY3JlZW4pIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBvbkV4aXRGdWxsc2NyZWVuKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgb25LZXlEb3duKTtcbiAgICByZXR1cm4gKCkgPT4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBvbktleURvd24pO1xuICB9LCBbXG4gICAgaXNGbG9hdGluZ09wZW4sXG4gICAgaXNGdWxsc2NyZWVuLFxuICAgIGlzRnVsbHNjcmVlblRvZ2dsZWQsXG4gICAgbW9kZSxcbiAgICBvbkV4aXRGdWxsc2NyZWVuLFxuICAgIHNob3dMYW5ndWFnZURyb3Bkb3duLFxuICAgIHNob3dNZW51LFxuICAgIHNob3dSZXNldENvbmZpcm0sXG4gIF0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgdXBkYXRlVmlld3BvcnQgPSAoKSA9PiB7XG4gICAgICBzZXRXaW5kb3dXaWR0aCh3aW5kb3cuaW5uZXJXaWR0aCk7XG4gICAgICBzZXRXaW5kb3dIZWlnaHQod2luZG93LmlubmVySGVpZ2h0KTtcbiAgICB9O1xuICAgIHVwZGF0ZVZpZXdwb3J0KCk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHVwZGF0ZVZpZXdwb3J0KTtcbiAgICBjb25zdCB2diA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93LnZpc3VhbFZpZXdwb3J0IDogbnVsbDtcbiAgICB2dj8uYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdXBkYXRlVmlld3BvcnQpO1xuICAgIHZ2Py5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB1cGRhdGVWaWV3cG9ydCk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB1cGRhdGVWaWV3cG9ydCk7XG4gICAgICB2dj8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdXBkYXRlVmlld3BvcnQpO1xuICAgICAgdnY/LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHVwZGF0ZVZpZXdwb3J0KTtcbiAgICB9O1xuICB9LCBbXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNGdWxsc2NyZWVuICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5vdmVyZmxvdztcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSBvcmlnaW5hbFN0eWxlO1xuICAgICAgfTtcbiAgICB9XG4gIH0sIFtpc0Z1bGxzY3JlZW5dKTtcblxuICByZXR1cm4ge1xuICAgIHdpbmRvd1dpZHRoLFxuICAgIHdpbmRvd0hlaWdodCxcbiAgICBpc0Z1bGxzY3JlZW4sXG4gICAgaXNGdWxsc2NyZWVuVG9nZ2xlZCxcbiAgICBoYW5kbGVGdWxsc2NyZWVuVG9nZ2xlLFxuICB9O1xufVxuIl19
@@ -126,6 +126,7 @@ export declare class ChatService {
126
126
  isConversationFinalized(): boolean;
127
127
  startConversation(reCaptchaToken?: string | undefined): Promise<string>;
128
128
  sendMessage(message: string, attachments?: Attachment[], extraMetadata?: Record<string, any>, reCaptchaToken?: string): Promise<void>;
129
+ sendAudioMessage(audioBlob: Blob, audioFormat: string, extraMetadata?: Record<string, any>): Promise<void>;
129
130
  uploadFile(chatId: string, file: File): Promise<FileUploadResponse | null>;
130
131
  /**
131
132
  * Process raw WebSocket message data. Called from useChatWebSocket hook.