genassist-chat-react 1.0.38-rc.0 → 1.0.39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +26 -4
- package/dist/components/AudioPlayer.d.ts +11 -0
- package/dist/components/AudioPlayer.js +199 -0
- package/dist/components/ChatBubble.d.ts +1 -0
- package/dist/components/ChatBubble.js +4 -4
- package/dist/components/ChatMessage.d.ts +3 -0
- package/dist/components/ChatMessage.js +10 -5
- package/dist/components/GenAgentChat.js +279 -845
- package/dist/components/LiveCallControl.d.ts +25 -0
- package/dist/components/LiveCallControl.js +83 -0
- package/dist/components/MarkdownMessage.js +23 -1
- package/dist/components/VoiceInput.d.ts +1 -3
- package/dist/components/VoiceInput.js +262 -48
- package/dist/genassist-chat.es.js +16915 -0
- package/dist/genassist-chat.umd.js +91 -0
- package/dist/hooks/useAudioRecorder.d.ts +8 -0
- package/dist/hooks/useAudioRecorder.js +196 -0
- package/dist/hooks/useChat.d.ts +4 -0
- package/dist/hooks/useChat.js +60 -13
- package/dist/hooks/useFileAttachments.d.ts +16 -0
- package/dist/hooks/useFileAttachments.js +183 -0
- package/dist/hooks/useLiveVoice.d.ts +32 -0
- package/dist/hooks/useLiveVoice.js +292 -0
- package/dist/hooks/useScrollManagement.d.ts +15 -0
- package/dist/hooks/useScrollManagement.js +124 -0
- package/dist/hooks/useThinkingAnimation.d.ts +12 -0
- package/dist/hooks/useThinkingAnimation.js +53 -0
- package/dist/hooks/useViewportManager.d.ts +20 -0
- package/dist/hooks/useViewportManager.js +100 -0
- package/dist/services/chatService.d.ts +1 -0
- package/dist/services/chatService.js +76 -17
- package/dist/styles/genAgentChatStyles.d.ts +82 -0
- package/dist/styles/genAgentChatStyles.js +441 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.js +1 -1
- package/package.json +2 -2
- package/dist/components/AttachmentPreview.d.ts +0 -8
- package/dist/components/AttachmentPreview.js +0 -77
- package/dist/utils/urlUtil.d.ts +0 -2
- package/dist/utils/urlUtil.js +0 -7
|
@@ -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.
|