@clikvn/agent-widget-embedded 1.1.5-dev-07 → 1.1.5-dev-09
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/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/.tsbuildinfo +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/commons/constants/index.d.ts +2 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/commons/constants/index.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/commons/constants/index.js +2 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/commons/constants/index.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/commons/constants/variables.d.ts +11 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/commons/constants/variables.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/commons/constants/variables.js +26 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/commons/constants/variables.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Agent/index.d.ts +3 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Agent/index.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Agent/index.js +16 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Agent/index.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/AgentThinking.d.ts +9 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/AgentThinking.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/AgentThinking.js +161 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/AgentThinking.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/AudioPlayer.d.ts +8 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/AudioPlayer.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/AudioPlayer.js +228 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/AudioPlayer.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Chat.d.ts +10 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Chat.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Chat.js +39 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Chat.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Header.d.ts +10 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Header.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Header.js +36 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Header.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/HtmlContent.d.ts +7 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/HtmlContent.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/HtmlContent.js +45 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/HtmlContent.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Icons.d.ts +198 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Icons.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Icons.js +233 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Icons.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/LocationCard.d.ts +38 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/LocationCard.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/LocationCard.js +23 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/LocationCard.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Markdown.d.ts +7 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Markdown.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Markdown.js +97 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Markdown.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Message.d.ts +16 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Message.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Message.js +71 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Message.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/MultimodalInput copy.d.ts +28 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/MultimodalInput copy.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/MultimodalInput copy.js +350 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/MultimodalInput copy.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/MultimodalInput.d.ts +28 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/MultimodalInput.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/MultimodalInput.js +401 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/MultimodalInput.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Overview.d.ts +8 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Overview.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Overview.js +9 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Overview.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/PreviewAttachment.d.ts +6 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/PreviewAttachment.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/PreviewAttachment.js +7 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/PreviewAttachment.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/PreviewFileAttachment.d.ts +7 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/PreviewFileAttachment.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/PreviewFileAttachment.js +21 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/PreviewFileAttachment.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ProductDetail.d.ts +12 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ProductDetail.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ProductDetail.js +205 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ProductDetail.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ProductList.d.ts +16 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ProductList.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ProductList.js +210 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ProductList.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ScenariosList.d.ts +22 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ScenariosList.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ScenariosList.js +86 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ScenariosList.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Simplified/AudioPlayerSimplified.d.ts +9 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Simplified/AudioPlayerSimplified.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Simplified/AudioPlayerSimplified.js +268 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Simplified/AudioPlayerSimplified.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Simplified/MultimodalInputSimplified.d.ts +22 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Simplified/MultimodalInputSimplified.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Simplified/MultimodalInputSimplified.js +301 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Simplified/MultimodalInputSimplified.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Simplified/index.d.ts +10 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Simplified/index.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Simplified/index.js +30 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Simplified/index.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/SuggestedActions.d.ts +12 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/SuggestedActions.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/SuggestedActions.js +31 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/SuggestedActions.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/UserContactForm.d.ts +7 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/UserContactForm.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/UserContactForm.js +84 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/UserContactForm.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/VoiceRecordingUI.d.ts +17 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/VoiceRecordingUI.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/VoiceRecordingUI.js +71 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/VoiceRecordingUI.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Weather.d.ts +42 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Weather.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Weather.js +198 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Weather.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ui/Button.d.ts +12 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ui/Button.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ui/Button.js +34 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ui/Button.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ui/DropdownMenu.d.ts +28 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ui/DropdownMenu.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ui/DropdownMenu.js +37 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ui/DropdownMenu.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ui/Spinner.d.ts +7 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ui/Spinner.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ui/Spinner.js +4 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ui/Spinner.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ui/Textarea.d.ts +6 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ui/Textarea.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ui/Textarea.js +9 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ui/Textarea.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ui/badge.d.ts +10 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ui/badge.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ui/badge.js +22 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ui/badge.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ui/collapsible.d.ts +12 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ui/collapsible.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ui/collapsible.js +44 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ui/collapsible.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/voice/VoiceWidget.d.ts +14 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/voice/VoiceWidget.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/voice/VoiceWidget.js +53 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/voice/VoiceWidget.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/voice/VoiceWidgetChat.d.ts +22 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/voice/VoiceWidgetChat.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/voice/VoiceWidgetChat.js +29 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/voice/VoiceWidgetChat.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/constants/toolNames.d.ts +97 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/constants/toolNames.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/constants/toolNames.js +95 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/constants/toolNames.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/constants.d.ts +2 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/constants.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/constants.js +2 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/constants.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/features/AgentWidget/index.d.ts +48 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/features/AgentWidget/index.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/features/AgentWidget/index.js +23 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/features/AgentWidget/index.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useAudioAnalyzer.d.ts +11 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useAudioAnalyzer.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useAudioAnalyzer.js +135 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useAudioAnalyzer.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useAudioMesseagePlayer.d.ts +13 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useAudioMesseagePlayer.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useAudioMesseagePlayer.js +39 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useAudioMesseagePlayer.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useAudioRecording.d.ts +13 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useAudioRecording.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useAudioRecording.js +59 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useAudioRecording.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useChat.d.ts +29 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useChat.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useChat.js +225 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useChat.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useChatData.d.ts +20 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useChatData.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useChatData.js +66 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useChatData.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useConfiguration.d.ts +79 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useConfiguration.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useConfiguration.js +23 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useConfiguration.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useScrollToBottom.d.ts +7 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useScrollToBottom.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useScrollToBottom.js +29 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useScrollToBottom.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/index.d.ts +2 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/index.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/index.js +2 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/index.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/models/FlowiseClient.d.ts +20 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/models/FlowiseClient.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/models/FlowiseClient.js +76 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/models/FlowiseClient.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/models.d.ts +2 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/models.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/models.js +2 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/models.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/register.d.ts +85 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/register.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/register.js +36 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/register.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/services/apis.d.ts +8 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/services/apis.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/services/apis.js +8 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/services/apis.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/services/bot.service.d.ts +3 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/services/bot.service.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/services/bot.service.js +13 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/services/bot.service.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/services/chat.service.d.ts +53 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/services/chat.service.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/services/chat.service.js +163 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/services/chat.service.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/services/vt360.service.d.ts +14 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/services/vt360.service.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/services/vt360.service.js +181 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/services/vt360.service.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types/bot.type.d.ts +11 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types/bot.type.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types/bot.type.js +2 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types/bot.type.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types/chat.type.d.ts +10 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types/chat.type.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types/chat.type.js +2 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types/chat.type.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types/common.type.d.ts +27 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types/common.type.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types/common.type.js +2 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types/common.type.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types/flowise.type.d.ts +160 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types/flowise.type.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types/flowise.type.js +2 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types/flowise.type.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types/product.type.d.ts +48 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types/product.type.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types/product.type.js +2 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types/product.type.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types/user.type.d.ts +14 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types/user.type.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types/user.type.js +2 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types/user.type.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types.d.ts +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types.js +2 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/agentTraceUtils.d.ts +20 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/agentTraceUtils.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/agentTraceUtils.js +492 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/agentTraceUtils.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/audioRecording.d.ts +21 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/audioRecording.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/audioRecording.js +296 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/audioRecording.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/commonUtils.d.ts +7 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/commonUtils.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/commonUtils.js +40 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/commonUtils.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/currency.d.ts +3 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/currency.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/currency.js +18 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/currency.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/fileUtils.d.ts +3 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/fileUtils.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/fileUtils.js +46 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/fileUtils.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/functionUtils.d.ts +4 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/functionUtils.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/functionUtils.js +17 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/functionUtils.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/messageUtils.d.ts +37 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/messageUtils.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/messageUtils.js +55 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/messageUtils.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/requestUtils.d.ts +16 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/requestUtils.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/requestUtils.js +79 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/requestUtils.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/streamUtils.d.ts +5 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/streamUtils.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/streamUtils.js +12 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/streamUtils.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/toolUtils.d.ts +105 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/toolUtils.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/toolUtils.js +178 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/toolUtils.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/web.d.ts +8 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/web.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/web.js +5 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/web.js.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/window.d.ts +18 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/window.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/window.js +31 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/window.js.map +1 -0
- package/dist/components/Chat/Icons.d.ts +4 -3
- package/dist/components/Chat/Icons.d.ts.map +1 -1
- package/dist/components/Chat/MultimodalInput copy.d.ts +28 -0
- package/dist/components/Chat/MultimodalInput copy.d.ts.map +1 -0
- package/dist/components/Chat/MultimodalInput.d.ts.map +1 -1
- package/dist/components/Chat/PreviewFileAttachment.d.ts +7 -0
- package/dist/components/Chat/PreviewFileAttachment.d.ts.map +1 -0
- package/dist/components/Chat/VoiceRecordingUI.d.ts +17 -0
- package/dist/components/Chat/VoiceRecordingUI.d.ts.map +1 -0
- package/dist/hooks/useAudioAnalyzer.d.ts +1 -1
- package/dist/hooks/useAudioAnalyzer.d.ts.map +1 -1
- package/dist/hooks/useAudioRecording.d.ts +2 -1
- package/dist/hooks/useAudioRecording.d.ts.map +1 -1
- package/dist/index-old.html +108 -0
- package/dist/index.html +54 -37
- package/dist/web.js +1 -1
- package/dist/web.js.map +1 -0
- package/package.json +2 -1
- package/.claude/settings.local.json +0 -12
- package/.idea/clik-ai-chatbot-embedded.iml +0 -12
- package/.idea/codeStyles/Project.xml +0 -59
- package/.idea/codeStyles/codeStyleConfig.xml +0 -5
- package/.idea/inspectionProfiles/Project_Default.xml +0 -6
- package/.idea/jsLinters/eslint.xml +0 -6
- package/.idea/modules.xml +0 -8
- package/.idea/prettier.xml +0 -6
- package/.idea/vcs.xml +0 -6
- package/dist/utils/agentTraceUtils.test.d.ts +0 -2
- package/dist/utils/agentTraceUtils.test.d.ts.map +0 -1
- package/dist/utils/testGrouping.d.ts +0 -6
- package/dist/utils/testGrouping.d.ts.map +0 -1
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/* eslint-disable max-len */
|
|
2
|
+
'use client';
|
|
3
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
4
|
+
import { useMemo } from 'react';
|
|
5
|
+
import { useState, useEffect } from 'react';
|
|
6
|
+
import { ChevronDownIcon } from './Icons';
|
|
7
|
+
import { Collapsible, CollapsibleContent, CollapsibleTrigger, } from './ui/collapsible';
|
|
8
|
+
import { Badge } from './ui/badge';
|
|
9
|
+
const AgentThinking = ({ steps, isLoading }) => {
|
|
10
|
+
const [isThinkingOpen, setIsThinkingOpen] = useState(false);
|
|
11
|
+
const [displayedText, setDisplayedText] = useState('');
|
|
12
|
+
const [isStreaming, setIsStreaming] = useState(false);
|
|
13
|
+
const formatStepContent = (step, stepIndex, allSteps) => {
|
|
14
|
+
// Simple, clean formatting
|
|
15
|
+
let content = step.content || '';
|
|
16
|
+
// Enhanced tool detection and formatting
|
|
17
|
+
if (content.startsWith('Invoking ')) {
|
|
18
|
+
// Extract tool name from "Invoking "tool_name" with {...}" pattern
|
|
19
|
+
const toolMatch = content.match(/^Invoking\s+"([^"]+)"/);
|
|
20
|
+
if (toolMatch) {
|
|
21
|
+
const toolName = toolMatch[1];
|
|
22
|
+
const restOfContent = content.replace(/^Invoking\s+"[^"]+"/, '').trim();
|
|
23
|
+
// Add proper spacing before "with" if it exists
|
|
24
|
+
if (restOfContent.startsWith('with')) {
|
|
25
|
+
content = `Starting ${toolName} ${restOfContent}`;
|
|
26
|
+
}
|
|
27
|
+
else if (restOfContent) {
|
|
28
|
+
content = `Starting ${toolName} ${restOfContent}`;
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
content = `Starting ${toolName}`;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
// Fallback: just remove "Invoking "
|
|
36
|
+
content = content.replace(/^Invoking\s+/, '').trim();
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
else if (content.startsWith('Starting unknown-tool')) {
|
|
40
|
+
// For unknown-tool cases, try to get context from previous steps to identify the tool
|
|
41
|
+
let toolName = 'tool';
|
|
42
|
+
const stepsToSearch = allSteps || steps;
|
|
43
|
+
if (stepIndex !== undefined && stepIndex > 0) {
|
|
44
|
+
// Look at the previous step to find the tool that was invoked
|
|
45
|
+
for (let i = stepIndex - 1; i >= 0; i--) {
|
|
46
|
+
const prevStep = stepsToSearch[i];
|
|
47
|
+
const prevContent = prevStep?.content || '';
|
|
48
|
+
const toolMatch = prevContent.match(/^Invoking\s+"([^"]+)"/);
|
|
49
|
+
if (toolMatch) {
|
|
50
|
+
toolName = toolMatch[1];
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
content = content.replace(/unknown-tool/gi, toolName);
|
|
56
|
+
}
|
|
57
|
+
else if (content === 'Completed tool') {
|
|
58
|
+
// For completed tool messages, try to get context from previous steps
|
|
59
|
+
let toolName = 'tool';
|
|
60
|
+
const stepsToSearch = allSteps || steps;
|
|
61
|
+
if (stepIndex !== undefined) {
|
|
62
|
+
// Look backwards through all steps to find the most recent tool invocation
|
|
63
|
+
for (let i = stepIndex - 1; i >= 0; i--) {
|
|
64
|
+
const prevStep = stepsToSearch[i];
|
|
65
|
+
const prevContent = prevStep?.content || '';
|
|
66
|
+
// Check for both processed and original formats
|
|
67
|
+
const toolMatch = prevContent.match(/^(?:Invoking\s+"([^"]+)"|Starting\s+([^\s]+))/);
|
|
68
|
+
if (toolMatch) {
|
|
69
|
+
toolName = toolMatch[1] || toolMatch[2];
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
content = `Completed ${toolName}`;
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
// Clean up other common prefixes
|
|
78
|
+
content = content
|
|
79
|
+
.replace(/^Using tool:\s+/, '')
|
|
80
|
+
.replace(/^Action:\s+/, '')
|
|
81
|
+
.replace(/^Tuyệt vời!\s+/, '')
|
|
82
|
+
.trim();
|
|
83
|
+
}
|
|
84
|
+
// Replace any remaining "unknown-tool" references
|
|
85
|
+
content = content.replace(/unknown-tool/gi, 'tool');
|
|
86
|
+
// If content is too long, truncate it
|
|
87
|
+
if (content.length > 300) {
|
|
88
|
+
content = content.substring(0, 300) + '...';
|
|
89
|
+
}
|
|
90
|
+
return content || 'Processing...';
|
|
91
|
+
};
|
|
92
|
+
const processSteps = (steps) => {
|
|
93
|
+
const processed = [];
|
|
94
|
+
for (let i = 0; i < steps.length; i++) {
|
|
95
|
+
const step = steps[i];
|
|
96
|
+
const content = step.content || '';
|
|
97
|
+
// Skip exact duplicates
|
|
98
|
+
if (processed.some((p) => p.content === content)) {
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
// Skip standalone "Starting unknown-tool" that follows an invocation
|
|
102
|
+
if (content === 'Starting unknown-tool' && i > 0) {
|
|
103
|
+
const prevContent = steps[i - 1]?.content || '';
|
|
104
|
+
if (prevContent.startsWith('Invoking ')) {
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
// Skip standalone "Completed tool" without context
|
|
109
|
+
if (content === 'Completed tool' && processed.length > 0) {
|
|
110
|
+
// Try to find the matching tool start
|
|
111
|
+
const lastStep = processed[processed.length - 1];
|
|
112
|
+
if (lastStep?.content?.startsWith('Starting ')) {
|
|
113
|
+
// Update the last step to show completion instead of adding new step
|
|
114
|
+
const toolMatch = lastStep.content.match(/^Starting ([^\\s]+)/);
|
|
115
|
+
if (toolMatch) {
|
|
116
|
+
lastStep.content = `Completed ${toolMatch[1]}`;
|
|
117
|
+
}
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
processed.push(step);
|
|
122
|
+
}
|
|
123
|
+
return processed;
|
|
124
|
+
};
|
|
125
|
+
const filteredSteps = useMemo(() => processSteps(steps), [steps]);
|
|
126
|
+
// Get the current (latest) step for inline display
|
|
127
|
+
const currentStepContent = useMemo(() => {
|
|
128
|
+
const currentStep = filteredSteps[filteredSteps.length - 1];
|
|
129
|
+
return formatStepContent(currentStep, filteredSteps.length - 1, filteredSteps);
|
|
130
|
+
}, [steps]);
|
|
131
|
+
// Character-by-character streaming animation effect for better JSON/structured data handling
|
|
132
|
+
useEffect(() => {
|
|
133
|
+
if (!isLoading || !currentStepContent) {
|
|
134
|
+
setDisplayedText('');
|
|
135
|
+
setIsStreaming(false);
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
setIsStreaming(true);
|
|
139
|
+
setDisplayedText('');
|
|
140
|
+
let currentCharIndex = 0;
|
|
141
|
+
const streamInterval = setInterval(() => {
|
|
142
|
+
if (currentCharIndex < currentStepContent.length) {
|
|
143
|
+
setDisplayedText((prev) => prev + currentStepContent[currentCharIndex]);
|
|
144
|
+
currentCharIndex++;
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
setIsStreaming(false);
|
|
148
|
+
clearInterval(streamInterval);
|
|
149
|
+
}
|
|
150
|
+
}, 30); // Faster character-by-character streaming (30ms per character)
|
|
151
|
+
return () => {
|
|
152
|
+
clearInterval(streamInterval);
|
|
153
|
+
};
|
|
154
|
+
}, [currentStepContent, isLoading]);
|
|
155
|
+
if (!steps || steps.length === 0) {
|
|
156
|
+
return null;
|
|
157
|
+
}
|
|
158
|
+
return (_jsxs(Collapsible, { open: isThinkingOpen, onOpenChange: setIsThinkingOpen, children: [_jsxs("div", { className: "mb-3", children: [!isLoading && (_jsx(CollapsibleTrigger, { className: "flex items-center gap-2 hover:opacity-70 transition-opacity", children: _jsxs(Badge, { variant: "custom1", className: "gap-1.5", children: ["Thought for", isThinkingOpen ? (_jsx(ChevronDownIcon, { style: { transform: 'rotate(180deg)' } })) : (_jsx(ChevronDownIcon, {}))] }) })), !isThinkingOpen && isLoading && (displayedText || isStreaming) && (_jsxs("div", { className: "text-muted-foreground text-sm opacity-70 font-mono whitespace-pre-wrap", children: [displayedText, isStreaming && _jsx("span", { className: "animate-pulse", children: "|" })] }))] }), _jsx(CollapsibleContent, { children: _jsx("div", { className: "border-l-2 pl-4 mb-4 space-y-2", children: filteredSteps.map((step, index) => (_jsxs("div", { className: "text-muted-foreground space-y-1", children: [_jsxs("div", { className: "opacity-60", children: ["Step ", index + 1] }), _jsx("div", { className: "whitespace-pre-wrap", children: formatStepContent(step, index, filteredSteps) })] }, step.id))) }) })] }));
|
|
159
|
+
};
|
|
160
|
+
export default AgentThinking;
|
|
161
|
+
//# sourceMappingURL=AgentThinking.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgentThinking.js","sourceRoot":"","sources":["../../../src/components/Chat/AgentThinking.tsx"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable max-len */\n'use client';\n\nimport { FC, useMemo } from 'react';\nimport { useState, useEffect } from 'react';\nimport { AgentStep } from 'types/flowise.type';\nimport { ArrowUpIcon, ChevronDownIcon } from './Icons';\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from './ui/collapsible';\nimport { Badge } from './ui/badge';\n\ninterface Props {\n steps: AgentStep[];\n isLoading?: boolean;\n}\n\nconst AgentThinking: FC<Props> = ({ steps, isLoading }) => {\n const [isThinkingOpen, setIsThinkingOpen] = useState(false);\n const [displayedText, setDisplayedText] = useState('');\n const [isStreaming, setIsStreaming] = useState(false);\n\n const formatStepContent = (\n step: AgentStep,\n stepIndex?: number,\n allSteps?: AgentStep[]\n ) => {\n // Simple, clean formatting\n let content = step.content || '';\n\n // Enhanced tool detection and formatting\n if (content.startsWith('Invoking ')) {\n // Extract tool name from \"Invoking \"tool_name\" with {...}\" pattern\n const toolMatch = content.match(/^Invoking\\s+\"([^\"]+)\"/);\n if (toolMatch) {\n const toolName = toolMatch[1];\n const restOfContent = content.replace(/^Invoking\\s+\"[^\"]+\"/, '').trim();\n // Add proper spacing before \"with\" if it exists\n if (restOfContent.startsWith('with')) {\n content = `Starting ${toolName} ${restOfContent}`;\n } else if (restOfContent) {\n content = `Starting ${toolName} ${restOfContent}`;\n } else {\n content = `Starting ${toolName}`;\n }\n } else {\n // Fallback: just remove \"Invoking \"\n content = content.replace(/^Invoking\\s+/, '').trim();\n }\n } else if (content.startsWith('Starting unknown-tool')) {\n // For unknown-tool cases, try to get context from previous steps to identify the tool\n let toolName = 'tool';\n\n const stepsToSearch = allSteps || steps;\n if (stepIndex !== undefined && stepIndex > 0) {\n // Look at the previous step to find the tool that was invoked\n for (let i = stepIndex - 1; i >= 0; i--) {\n const prevStep = stepsToSearch[i];\n const prevContent = prevStep?.content || '';\n const toolMatch = prevContent.match(/^Invoking\\s+\"([^\"]+)\"/);\n if (toolMatch) {\n toolName = toolMatch[1];\n break;\n }\n }\n }\n\n content = content.replace(/unknown-tool/gi, toolName);\n } else if (content === 'Completed tool') {\n // For completed tool messages, try to get context from previous steps\n let toolName = 'tool';\n\n const stepsToSearch = allSteps || steps;\n if (stepIndex !== undefined) {\n // Look backwards through all steps to find the most recent tool invocation\n for (let i = stepIndex - 1; i >= 0; i--) {\n const prevStep = stepsToSearch[i];\n const prevContent = prevStep?.content || '';\n\n // Check for both processed and original formats\n const toolMatch = prevContent.match(\n /^(?:Invoking\\s+\"([^\"]+)\"|Starting\\s+([^\\s]+))/\n );\n if (toolMatch) {\n toolName = toolMatch[1] || toolMatch[2];\n break;\n }\n }\n }\n\n content = `Completed ${toolName}`;\n } else {\n // Clean up other common prefixes\n content = content\n .replace(/^Using tool:\\s+/, '')\n .replace(/^Action:\\s+/, '')\n .replace(/^Tuyệt vời!\\s+/, '')\n .trim();\n }\n\n // Replace any remaining \"unknown-tool\" references\n content = content.replace(/unknown-tool/gi, 'tool');\n\n // If content is too long, truncate it\n if (content.length > 300) {\n content = content.substring(0, 300) + '...';\n }\n\n return content || 'Processing...';\n };\n const processSteps = (steps: AgentStep[]) => {\n const processed: AgentStep[] = [];\n\n for (let i = 0; i < steps.length; i++) {\n const step = steps[i];\n const content = step.content || '';\n\n // Skip exact duplicates\n if (processed.some((p) => p.content === content)) {\n continue;\n }\n\n // Skip standalone \"Starting unknown-tool\" that follows an invocation\n if (content === 'Starting unknown-tool' && i > 0) {\n const prevContent = steps[i - 1]?.content || '';\n if (prevContent.startsWith('Invoking ')) {\n continue;\n }\n }\n\n // Skip standalone \"Completed tool\" without context\n if (content === 'Completed tool' && processed.length > 0) {\n // Try to find the matching tool start\n const lastStep = processed[processed.length - 1];\n if (lastStep?.content?.startsWith('Starting ')) {\n // Update the last step to show completion instead of adding new step\n const toolMatch = lastStep.content.match(/^Starting ([^\\\\s]+)/);\n if (toolMatch) {\n lastStep.content = `Completed ${toolMatch[1]}`;\n }\n continue;\n }\n }\n\n processed.push(step);\n }\n\n return processed;\n };\n const filteredSteps = useMemo(() => processSteps(steps), [steps]);\n // Get the current (latest) step for inline display\n const currentStepContent = useMemo(() => {\n const currentStep = filteredSteps[filteredSteps.length - 1];\n return formatStepContent(\n currentStep,\n filteredSteps.length - 1,\n filteredSteps\n );\n }, [steps]);\n\n // Character-by-character streaming animation effect for better JSON/structured data handling\n useEffect(() => {\n if (!isLoading || !currentStepContent) {\n setDisplayedText('');\n setIsStreaming(false);\n return;\n }\n\n setIsStreaming(true);\n setDisplayedText('');\n\n let currentCharIndex = 0;\n\n const streamInterval = setInterval(() => {\n if (currentCharIndex < currentStepContent.length) {\n setDisplayedText((prev) => prev + currentStepContent[currentCharIndex]);\n currentCharIndex++;\n } else {\n setIsStreaming(false);\n clearInterval(streamInterval);\n }\n }, 30); // Faster character-by-character streaming (30ms per character)\n\n return () => {\n clearInterval(streamInterval);\n };\n }, [currentStepContent, isLoading]);\n\n if (!steps || steps.length === 0) {\n return null;\n }\n return (\n <Collapsible open={isThinkingOpen} onOpenChange={setIsThinkingOpen}>\n <div className=\"mb-3\">\n {/* Show badge only when not loading (at the end) */}\n {!isLoading && (\n <CollapsibleTrigger className=\"flex items-center gap-2 hover:opacity-70 transition-opacity\">\n <Badge variant=\"custom1\" className=\"gap-1.5\">\n Thought for\n {isThinkingOpen ? (\n <ChevronDownIcon style={{ transform: 'rotate(180deg)' }} />\n ) : (\n <ChevronDownIcon />\n )}\n </Badge>\n </CollapsibleTrigger>\n )}\n\n {/* Show streaming text during loading */}\n {!isThinkingOpen && isLoading && (displayedText || isStreaming) && (\n <div className=\"text-muted-foreground text-sm opacity-70 font-mono whitespace-pre-wrap\">\n {displayedText}\n {isStreaming && <span className=\"animate-pulse\">|</span>}\n </div>\n )}\n </div>\n\n <CollapsibleContent>\n <div className=\"border-l-2 pl-4 mb-4 space-y-2\">\n {filteredSteps.map((step, index) => (\n <div key={step.id} className=\"text-muted-foreground space-y-1\">\n <div className=\"opacity-60\">Step {index + 1}</div>\n <div className=\"whitespace-pre-wrap\">\n {formatStepContent(step, index, filteredSteps)}\n </div>\n </div>\n ))}\n </div>\n </CollapsibleContent>\n </Collapsible>\n );\n};\n\nexport default AgentThinking;\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ChatMessageType } from '../../types/flowise.type';
|
|
2
|
+
declare const AudioPlayer: ({ message, chatId, autoplay, }: {
|
|
3
|
+
message: ChatMessageType;
|
|
4
|
+
chatId?: string;
|
|
5
|
+
autoplay?: boolean;
|
|
6
|
+
}) => import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export default AudioPlayer;
|
|
8
|
+
//# sourceMappingURL=AudioPlayer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AudioPlayer.d.ts","sourceRoot":"","sources":["../../../src/components/Chat/AudioPlayer.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAG3D,QAAA,MAAM,WAAW,mCAId;IACD,OAAO,EAAE,eAAe,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,4CAwPA,CAAC;AAEF,eAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useRef, useState } from 'react';
|
|
3
|
+
import { useAudioMessage } from '../../hooks/useAudioMesseagePlayer';
|
|
4
|
+
import { useChatData } from '../../hooks/useChatData';
|
|
5
|
+
import { useConfiguration } from '../../hooks/useConfiguration';
|
|
6
|
+
import { createMessageAudio } from '../../services/chat.service';
|
|
7
|
+
import { LoadingIcon, PlayIcon, StopIcon1 } from './Icons';
|
|
8
|
+
const AudioPlayer = ({ message, chatId, autoplay = false, }) => {
|
|
9
|
+
const { theme, apiHost } = useConfiguration();
|
|
10
|
+
const { disable, setDisabled, playingId, onPlay } = useAudioMessage();
|
|
11
|
+
const { listeners } = useChatData();
|
|
12
|
+
const audioRef = useRef(null);
|
|
13
|
+
const audioContextRef = useRef(null);
|
|
14
|
+
const sourceRef = useRef(null);
|
|
15
|
+
const currentPlaying = !!playingId && playingId === message.id;
|
|
16
|
+
const [src, setSrc] = useState(''); // null is meaning that audio was streamed
|
|
17
|
+
const [isPlaying, setIsPlaying] = useState(false);
|
|
18
|
+
const [fetching, setFetching] = useState(false);
|
|
19
|
+
const language = theme?.language?.options
|
|
20
|
+
?.find((option) => option.code === theme?.language?.code)
|
|
21
|
+
?.name?.toLowerCase() || 'en';
|
|
22
|
+
const togglePlay = () => {
|
|
23
|
+
if (!audioRef.current || !message.id) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
// create audio if not existed
|
|
27
|
+
if (!src && chatId && message.id && message.content && !isPlaying) {
|
|
28
|
+
createAudio(chatId);
|
|
29
|
+
if (onPlay) {
|
|
30
|
+
onPlay(message.id);
|
|
31
|
+
}
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
if (isPlaying) {
|
|
35
|
+
audioRef.current.pause();
|
|
36
|
+
sourceRef.current?.stop();
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
audioRef.current.play();
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
const handlePlayPause = (e) => {
|
|
43
|
+
e.preventDefault();
|
|
44
|
+
togglePlay();
|
|
45
|
+
};
|
|
46
|
+
const handleOnPlay = () => {
|
|
47
|
+
setIsPlaying(true);
|
|
48
|
+
if (onPlay && message.id)
|
|
49
|
+
onPlay(message.id);
|
|
50
|
+
if (listeners?.['ON_PLAY_AUDIO']) {
|
|
51
|
+
listeners['ON_PLAY_AUDIO']();
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
const handleOnPause = () => {
|
|
55
|
+
setIsPlaying(false);
|
|
56
|
+
if (onPlay && message.id)
|
|
57
|
+
onPlay(message.id, true);
|
|
58
|
+
if (listeners?.['ON_PAUSE_AUDIO']) {
|
|
59
|
+
listeners['ON_PAUSE_AUDIO']();
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
const handleOnEnded = () => {
|
|
63
|
+
setIsPlaying(false);
|
|
64
|
+
if (onPlay && message.id) {
|
|
65
|
+
onPlay(message.id, true);
|
|
66
|
+
}
|
|
67
|
+
if (listeners?.['ON_ENDED_AUDIO']) {
|
|
68
|
+
listeners['ON_ENDED_AUDIO']();
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
const createAudio = async (id) => {
|
|
72
|
+
setFetching(true);
|
|
73
|
+
if (setDisabled)
|
|
74
|
+
setDisabled(true);
|
|
75
|
+
try {
|
|
76
|
+
const stream = src !== null; // null is meaning that audio was streamed
|
|
77
|
+
const resp = await createMessageAudio({
|
|
78
|
+
id,
|
|
79
|
+
apiHost,
|
|
80
|
+
messageId: message.id,
|
|
81
|
+
content: message.content,
|
|
82
|
+
stream,
|
|
83
|
+
language,
|
|
84
|
+
});
|
|
85
|
+
if (audioRef.current) {
|
|
86
|
+
if (!stream) {
|
|
87
|
+
setSrc(resp);
|
|
88
|
+
audioRef.current.play();
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
const response = resp;
|
|
92
|
+
const contentType = response.headers.get('content-type') || 'audio/mpeg';
|
|
93
|
+
if (window.MediaSource) {
|
|
94
|
+
// MediaSource does not support .ogg
|
|
95
|
+
if (contentType.includes('ogg')) {
|
|
96
|
+
setSrc(null); // null is meaning that audio was streamed
|
|
97
|
+
const reader = response.body.getReader();
|
|
98
|
+
if (!audioContextRef.current) {
|
|
99
|
+
audioContextRef.current = new AudioContext();
|
|
100
|
+
}
|
|
101
|
+
const audioChunks = [];
|
|
102
|
+
// eslint-disable-next-line no-constant-condition
|
|
103
|
+
while (true) {
|
|
104
|
+
const { done, value } = await reader.read();
|
|
105
|
+
if (done) {
|
|
106
|
+
break;
|
|
107
|
+
}
|
|
108
|
+
audioChunks.push(value);
|
|
109
|
+
}
|
|
110
|
+
// Create a blob and update the audio source.
|
|
111
|
+
const blob = new Blob(audioChunks, { type: contentType });
|
|
112
|
+
audioRef.current.src = URL.createObjectURL(blob);
|
|
113
|
+
if (audioRef.current.currentTime === 0) {
|
|
114
|
+
audioRef.current?.play();
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
setSrc(null); // null is meaning that audio was streamed
|
|
119
|
+
const mediaSource = new MediaSource();
|
|
120
|
+
audioRef.current.src = URL.createObjectURL(mediaSource);
|
|
121
|
+
mediaSource.addEventListener('sourceopen', async () => {
|
|
122
|
+
const sourceBuffer = mediaSource.addSourceBuffer(contentType);
|
|
123
|
+
const reader = response.body.getReader();
|
|
124
|
+
async function processStream() {
|
|
125
|
+
// eslint-disable-next-line no-constant-condition
|
|
126
|
+
while (true) {
|
|
127
|
+
const { done, value } = await reader.read();
|
|
128
|
+
if (done) {
|
|
129
|
+
mediaSource.endOfStream();
|
|
130
|
+
break;
|
|
131
|
+
}
|
|
132
|
+
await new Promise((resolve) => {
|
|
133
|
+
if (!sourceBuffer.updating) {
|
|
134
|
+
resolve();
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
sourceBuffer.addEventListener('updateend', () => resolve(), {
|
|
138
|
+
once: true,
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
try {
|
|
143
|
+
sourceBuffer.appendBuffer(value);
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
console.error(error);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
processStream().catch(console.error);
|
|
151
|
+
audioRef.current?.play();
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
// for iphone
|
|
157
|
+
setSrc(null); // null is meaning that audio was streamed
|
|
158
|
+
const reader = response.body.getReader();
|
|
159
|
+
if (!audioContextRef.current) {
|
|
160
|
+
audioContextRef.current = new AudioContext();
|
|
161
|
+
}
|
|
162
|
+
const audioChunks = [];
|
|
163
|
+
// eslint-disable-next-line no-constant-condition
|
|
164
|
+
while (true) {
|
|
165
|
+
const { done, value } = await reader.read();
|
|
166
|
+
if (done) {
|
|
167
|
+
break;
|
|
168
|
+
}
|
|
169
|
+
audioChunks.push(value);
|
|
170
|
+
// Create a blob and update the audio source.
|
|
171
|
+
const blob = new Blob(audioChunks, { type: contentType });
|
|
172
|
+
audioRef.current.src = URL.createObjectURL(blob);
|
|
173
|
+
if (audioRef.current.currentTime === 0) {
|
|
174
|
+
audioRef.current?.play();
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
// end
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
catch (e) {
|
|
183
|
+
console.error(e);
|
|
184
|
+
}
|
|
185
|
+
finally {
|
|
186
|
+
setFetching(false);
|
|
187
|
+
if (setDisabled)
|
|
188
|
+
setDisabled(false);
|
|
189
|
+
}
|
|
190
|
+
};
|
|
191
|
+
// handle streaming response chat
|
|
192
|
+
useEffect(() => {
|
|
193
|
+
if (autoplay) {
|
|
194
|
+
if (onPlay && message.id)
|
|
195
|
+
onPlay(message.id);
|
|
196
|
+
const isStreamResponseDone = !!message.tts && !!message.ttsUrl;
|
|
197
|
+
setFetching(isStreamResponseDone);
|
|
198
|
+
if (!isStreamResponseDone) {
|
|
199
|
+
if (setDisabled)
|
|
200
|
+
setDisabled(true); // disable button play
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
if (setDisabled)
|
|
204
|
+
setDisabled(false); // enable button play
|
|
205
|
+
togglePlay();
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}, [autoplay, message.ttsUrl]);
|
|
209
|
+
// handle init ttsUrl
|
|
210
|
+
useEffect(() => {
|
|
211
|
+
if (!src && message.ttsUrl && message.ttsUrl.startsWith('http')) {
|
|
212
|
+
setSrc(message.ttsUrl);
|
|
213
|
+
}
|
|
214
|
+
}, [message.ttsUrl, src]);
|
|
215
|
+
useEffect(() => {
|
|
216
|
+
if (!currentPlaying && isPlaying) {
|
|
217
|
+
if (audioRef.current) {
|
|
218
|
+
audioRef.current.pause();
|
|
219
|
+
audioRef.current.currentTime = 0;
|
|
220
|
+
}
|
|
221
|
+
sourceRef.current?.stop();
|
|
222
|
+
setIsPlaying(false);
|
|
223
|
+
}
|
|
224
|
+
}, [currentPlaying, isPlaying]);
|
|
225
|
+
return (_jsxs(_Fragment, { children: [_jsxs("button", { disabled: fetching || disable, className: "rounded-full cursor-pointer h-fit w-[24px]", onClick: handlePlayPause, children: [fetching && _jsx(LoadingIcon, {}), !fetching && _jsx(_Fragment, { children: isPlaying ? _jsx(StopIcon1, {}) : _jsx(PlayIcon, {}) })] }), _jsx("audio", { ref: audioRef, className: "hidden", src: src || '', autoPlay: autoplay, onEnded: handleOnEnded, onPause: handleOnPause, onPlay: handleOnPlay })] }));
|
|
226
|
+
};
|
|
227
|
+
export default AudioPlayer;
|
|
228
|
+
//# sourceMappingURL=AudioPlayer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AudioPlayer.js","sourceRoot":"","sources":["../../../src/components/Chat/AudioPlayer.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport { useAudioMessage } from '../../hooks/useAudioMesseagePlayer';\nimport { useChatData } from '../../hooks/useChatData';\nimport { useConfiguration } from '../../hooks/useConfiguration';\nimport { createMessageAudio } from '../../services/chat.service';\nimport { ChatMessageType } from '../../types/flowise.type';\nimport { LoadingIcon, PlayIcon, StopIcon1 } from './Icons';\n\nconst AudioPlayer = ({\n message,\n chatId,\n autoplay = false,\n}: {\n message: ChatMessageType;\n chatId?: string;\n autoplay?: boolean;\n}) => {\n const { theme, apiHost } = useConfiguration();\n const { disable, setDisabled, playingId, onPlay } = useAudioMessage();\n const { listeners } = useChatData();\n\n const audioRef = useRef<HTMLAudioElement | null>(null);\n const audioContextRef = useRef<AudioContext | null>(null);\n const sourceRef = useRef<AudioBufferSourceNode | null>(null);\n\n const currentPlaying = !!playingId && playingId === message.id;\n\n const [src, setSrc] = useState<string | null>(''); // null is meaning that audio was streamed\n const [isPlaying, setIsPlaying] = useState(false);\n const [fetching, setFetching] = useState(false);\n\n const language =\n theme?.language?.options\n ?.find((option) => option.code === theme?.language?.code)\n ?.name?.toLowerCase() || 'en';\n\n const togglePlay = () => {\n if (!audioRef.current || !message.id) {\n return;\n }\n // create audio if not existed\n if (!src && chatId && message.id && message.content && !isPlaying) {\n createAudio(chatId);\n if (onPlay) {\n onPlay(message.id);\n }\n return;\n }\n\n if (isPlaying) {\n audioRef.current.pause();\n sourceRef.current?.stop();\n } else {\n audioRef.current.play();\n }\n };\n\n const handlePlayPause = (e: any) => {\n e.preventDefault();\n togglePlay();\n };\n\n const handleOnPlay = () => {\n setIsPlaying(true);\n if (onPlay && message.id) onPlay(message.id);\n if (listeners?.['ON_PLAY_AUDIO']) {\n listeners['ON_PLAY_AUDIO']();\n }\n };\n\n const handleOnPause = () => {\n setIsPlaying(false);\n if (onPlay && message.id) onPlay(message.id, true);\n if (listeners?.['ON_PAUSE_AUDIO']) {\n listeners['ON_PAUSE_AUDIO']();\n }\n };\n\n const handleOnEnded = () => {\n setIsPlaying(false);\n if (onPlay && message.id) {\n onPlay(message.id, true);\n }\n if (listeners?.['ON_ENDED_AUDIO']) {\n listeners['ON_ENDED_AUDIO']();\n }\n };\n\n const createAudio = async (id: string) => {\n setFetching(true);\n if (setDisabled) setDisabled(true);\n try {\n const stream = src !== null; // null is meaning that audio was streamed\n const resp: any = await createMessageAudio({\n id,\n apiHost,\n messageId: message.id!,\n content: message.content!,\n stream,\n language,\n });\n\n if (audioRef.current) {\n if (!stream) {\n setSrc(resp as string);\n audioRef.current.play();\n } else {\n const response = resp as Response;\n const contentType =\n response.headers.get('content-type') || 'audio/mpeg';\n\n if (window.MediaSource) {\n // MediaSource does not support .ogg\n if (contentType.includes('ogg')) {\n setSrc(null); // null is meaning that audio was streamed\n const reader = response.body!.getReader();\n if (!audioContextRef.current) {\n audioContextRef.current = new AudioContext();\n }\n const audioChunks = [];\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n break;\n }\n audioChunks.push(value);\n }\n\n // Create a blob and update the audio source.\n const blob = new Blob(audioChunks, { type: contentType });\n audioRef.current.src = URL.createObjectURL(blob);\n if (audioRef.current.currentTime === 0) {\n audioRef.current?.play();\n }\n } else {\n setSrc(null); // null is meaning that audio was streamed\n const mediaSource = new MediaSource();\n audioRef.current.src = URL.createObjectURL(mediaSource);\n mediaSource.addEventListener('sourceopen', async () => {\n const sourceBuffer = mediaSource.addSourceBuffer(contentType);\n const reader = response.body!.getReader();\n\n async function processStream() {\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n mediaSource.endOfStream();\n break;\n }\n await new Promise<void>((resolve) => {\n if (!sourceBuffer.updating) {\n resolve();\n } else {\n sourceBuffer.addEventListener(\n 'updateend',\n () => resolve(),\n {\n once: true,\n }\n );\n }\n });\n try {\n sourceBuffer.appendBuffer(value);\n } catch (error) {\n console.error(error);\n }\n }\n }\n\n processStream().catch(console.error);\n audioRef.current?.play();\n });\n }\n } else {\n // for iphone\n setSrc(null); // null is meaning that audio was streamed\n const reader = response.body!.getReader();\n if (!audioContextRef.current) {\n audioContextRef.current = new AudioContext();\n }\n const audioChunks = [];\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n break;\n }\n audioChunks.push(value);\n // Create a blob and update the audio source.\n const blob = new Blob(audioChunks, { type: contentType });\n audioRef.current.src = URL.createObjectURL(blob);\n if (audioRef.current.currentTime === 0) {\n audioRef.current?.play();\n }\n }\n // end\n }\n }\n }\n } catch (e) {\n console.error(e);\n } finally {\n setFetching(false);\n if (setDisabled) setDisabled(false);\n }\n };\n\n // handle streaming response chat\n useEffect(() => {\n if (autoplay) {\n if (onPlay && message.id) onPlay(message.id);\n const isStreamResponseDone = !!message.tts && !!message.ttsUrl;\n setFetching(isStreamResponseDone);\n if (!isStreamResponseDone) {\n if (setDisabled) setDisabled(true); // disable button play\n } else {\n if (setDisabled) setDisabled(false); // enable button play\n togglePlay();\n }\n }\n }, [autoplay, message.ttsUrl]);\n\n // handle init ttsUrl\n useEffect(() => {\n if (!src && message.ttsUrl && message.ttsUrl.startsWith('http')) {\n setSrc(message.ttsUrl);\n }\n }, [message.ttsUrl, src]);\n\n useEffect(() => {\n if (!currentPlaying && isPlaying) {\n if (audioRef.current) {\n audioRef.current.pause();\n audioRef.current.currentTime = 0;\n }\n sourceRef.current?.stop();\n setIsPlaying(false);\n }\n }, [currentPlaying, isPlaying]);\n\n return (\n <>\n <button\n disabled={fetching || disable}\n className=\"rounded-full cursor-pointer h-fit w-[24px]\"\n onClick={handlePlayPause}\n >\n {fetching && <LoadingIcon />}\n {!fetching && <>{isPlaying ? <StopIcon1 /> : <PlayIcon />}</>}\n </button>\n <audio\n ref={audioRef}\n className=\"hidden\"\n src={src || ''}\n autoPlay={autoplay}\n onEnded={handleOnEnded}\n onPause={handleOnPause}\n onPlay={handleOnPlay}\n />\n </>\n );\n};\n\nexport default AudioPlayer;\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
import { ChatMessageType } from '../../types/flowise.type';
|
|
3
|
+
type PropsType = {
|
|
4
|
+
id?: string;
|
|
5
|
+
initialMessages?: ChatMessageType[];
|
|
6
|
+
agentId?: string;
|
|
7
|
+
};
|
|
8
|
+
export declare const Chat: FC<PropsType>;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=Chat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Chat.d.ts","sourceRoot":"","sources":["../../../src/components/Chat/Chat.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAY,MAAM,OAAO,CAAC;AACrC,OAAO,EAAE,eAAe,EAAe,MAAM,0BAA0B,CAAC;AAgBxE,KAAK,SAAS,GAAG;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,eAAe,CAAC,EAAE,eAAe,EAAE,CAAC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,EAAE,CAAC,SAAS,CA4G9B,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import { PreviewMessage, ThinkingMessage } from './Message';
|
|
4
|
+
import { useChat } from '../../hooks/useChat';
|
|
5
|
+
import { useScrollToBottom } from '../../hooks/useScrollToBottom';
|
|
6
|
+
import { MultimodalInput } from './MultimodalInput';
|
|
7
|
+
import { Overview } from './Overview';
|
|
8
|
+
import { useConfiguration } from '../../hooks/useConfiguration';
|
|
9
|
+
import { MenuIcon } from './Icons';
|
|
10
|
+
import { DropdownMenu, DropdownMenuItem, DropdownMenuContent, DropdownMenuTrigger, } from './ui/DropdownMenu';
|
|
11
|
+
import { useChatData } from 'hooks/useChatData';
|
|
12
|
+
export const Chat = ({ id, agentId, initialMessages = [] }) => {
|
|
13
|
+
const { messages = [], setMessages, handleSubmit, input = '', setInput, isLoading, stop, chatId, append, bot, enableTTS, setEnableTTS, suggestions, } = useChat({ id, initialMessages, agentId });
|
|
14
|
+
const { apiHost } = useConfiguration();
|
|
15
|
+
const [messagesContainerRef, messagesEndRef] = useScrollToBottom();
|
|
16
|
+
const [attachments, setAttachments] = useState([]);
|
|
17
|
+
const [dropdownOpen, setDropdownOpen] = useState(false);
|
|
18
|
+
const { listeners, createNew } = useChatData();
|
|
19
|
+
const handleCreateNewChat = (e) => {
|
|
20
|
+
e.preventDefault();
|
|
21
|
+
e.stopPropagation();
|
|
22
|
+
let id = '';
|
|
23
|
+
if (createNew) {
|
|
24
|
+
id = createNew();
|
|
25
|
+
}
|
|
26
|
+
if (listeners?.['ON_NEW_CHAT']) {
|
|
27
|
+
listeners['ON_NEW_CHAT'](id);
|
|
28
|
+
}
|
|
29
|
+
// Đóng dropdown sau khi tạo chat mới
|
|
30
|
+
setDropdownOpen(false);
|
|
31
|
+
};
|
|
32
|
+
const hasMessages = (messages?.length || 0) > 0;
|
|
33
|
+
const isThinking = isLoading &&
|
|
34
|
+
hasMessages &&
|
|
35
|
+
messages[messages.length - 1].role === 'userMessage';
|
|
36
|
+
return (_jsx(_Fragment, { children: _jsxs("div", { className: "flex flex-col min-w-0 h-full relative bg-background", children: [_jsx("div", { className: "absolute left-4 top-4 z-10", children: _jsxs(DropdownMenu, { open: dropdownOpen, onOpenChange: setDropdownOpen, children: [_jsx(DropdownMenuTrigger, { className: "outline-none", children: _jsx("div", { className: "w-10 h-[40px] shadow-sm flex items-center justify-center p-1 bg-white rounded-full outline-none", children: _jsx(MenuIcon, { size: 20 }) }) }), _jsx(DropdownMenuContent, { side: "right", children: _jsx(DropdownMenuItem, { children: _jsx("div", { onClick: handleCreateNewChat, children: "New chat" }) }) })] }) }), _jsxs("div", { ref: messagesContainerRef, className: "flex flex-col min-w-0 gap-[16px] flex-1 overflow-y-scroll pt-[16px]", children: [!hasMessages && _jsx(Overview, { bot: bot }), hasMessages &&
|
|
37
|
+
messages.map((message, index) => (_jsx(PreviewMessage, { bot: bot, chatId: id, message: message, isLoading: isLoading && (messages || []).length - 1 === index, enableTTS: enableTTS }, message.id))), isThinking && _jsx(ThinkingMessage, { bot: bot }), _jsx("div", { ref: messagesEndRef, className: "shrink-0 min-w-[24px] min-h-[24px]" })] }), _jsx("form", { className: "flex mx-auto px-4 bg-background pb-4 md:pb-6 gap-2 w-full md:max-w-3xl", children: _jsx(MultimodalInput, { input: input, setInput: setInput, chatId: chatId, handleSubmit: handleSubmit, isLoading: isLoading, stop: stop, messages: messages, setMessages: setMessages, append: append, attachments: attachments, setAttachments: setAttachments, bot: bot, apiHost: apiHost, setEnableTTS: setEnableTTS, enableTTS: enableTTS, suggestedActions: suggestions }) })] }) }));
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=Chat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Chat.js","sourceRoot":"","sources":["../../../src/components/Chat/Chat.tsx"],"names":[],"mappings":"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","sourcesContent":["import { FC, useState } from 'react';\nimport { ChatMessageType, IFileUpload } from '../../types/flowise.type';\nimport { PreviewMessage, ThinkingMessage } from './Message';\nimport { useChat } from '../../hooks/useChat';\nimport { useScrollToBottom } from '../../hooks/useScrollToBottom';\nimport { MultimodalInput } from './MultimodalInput';\nimport { Overview } from './Overview';\nimport { useConfiguration } from '../../hooks/useConfiguration';\nimport { MenuIcon } from './Icons';\nimport {\n DropdownMenu,\n DropdownMenuItem,\n DropdownMenuContent,\n DropdownMenuTrigger,\n} from './ui/DropdownMenu';\nimport { useChatData } from 'hooks/useChatData';\n\ntype PropsType = {\n id?: string;\n initialMessages?: ChatMessageType[];\n agentId?: string;\n};\n\nexport const Chat: FC<PropsType> = ({ id, agentId, initialMessages = [] }) => {\n const {\n messages = [],\n setMessages,\n handleSubmit,\n input = '',\n setInput,\n isLoading,\n stop,\n chatId,\n append,\n bot,\n enableTTS,\n setEnableTTS,\n suggestions,\n } = useChat({ id, initialMessages, agentId });\n const { apiHost } = useConfiguration();\n const [messagesContainerRef, messagesEndRef] =\n useScrollToBottom<HTMLDivElement>();\n const [attachments, setAttachments] = useState<Array<IFileUpload>>([]);\n const [dropdownOpen, setDropdownOpen] = useState(false);\n const { listeners, createNew } = useChatData();\n\n const handleCreateNewChat = (e: React.MouseEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.stopPropagation();\n let id: string = '';\n if (createNew) {\n id = createNew();\n }\n if (listeners?.['ON_NEW_CHAT']) {\n listeners['ON_NEW_CHAT'](id);\n }\n // Đóng dropdown sau khi tạo chat mới\n setDropdownOpen(false);\n };\n\n const hasMessages = (messages?.length || 0) > 0;\n const isThinking =\n isLoading &&\n hasMessages &&\n messages[messages.length - 1].role === 'userMessage';\n\n return (\n <>\n <div className=\"flex flex-col min-w-0 h-full relative bg-background\">\n {/* <Header title={theme?.header?.title} language={language} /> */}\n <div className=\"absolute left-4 top-4 z-10\">\n <DropdownMenu open={dropdownOpen} onOpenChange={setDropdownOpen}>\n <DropdownMenuTrigger className=\"outline-none\">\n <div className=\"w-10 h-[40px] shadow-sm flex items-center justify-center p-1 bg-white rounded-full outline-none\">\n <MenuIcon size={20} />\n </div>\n </DropdownMenuTrigger>\n <DropdownMenuContent side=\"right\">\n <DropdownMenuItem>\n <div onClick={handleCreateNewChat}>New chat</div>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n <div\n ref={messagesContainerRef}\n className=\"flex flex-col min-w-0 gap-[16px] flex-1 overflow-y-scroll pt-[16px]\"\n >\n {!hasMessages && <Overview bot={bot} />}\n\n {hasMessages &&\n messages.map((message, index) => (\n <PreviewMessage\n key={message.id}\n bot={bot}\n chatId={id}\n message={message}\n isLoading={isLoading && (messages || []).length - 1 === index}\n enableTTS={enableTTS}\n />\n ))}\n {isThinking && <ThinkingMessage bot={bot} />}\n\n <div\n ref={messagesEndRef}\n className=\"shrink-0 min-w-[24px] min-h-[24px]\"\n />\n </div>\n <form className=\"flex mx-auto px-4 bg-background pb-4 md:pb-6 gap-2 w-full md:max-w-3xl\">\n <MultimodalInput\n input={input}\n setInput={setInput}\n chatId={chatId}\n handleSubmit={handleSubmit}\n isLoading={isLoading}\n stop={stop}\n messages={messages}\n setMessages={setMessages}\n append={append}\n attachments={attachments}\n setAttachments={setAttachments}\n bot={bot}\n apiHost={apiHost}\n setEnableTTS={setEnableTTS}\n enableTTS={enableTTS}\n suggestedActions={suggestions}\n />\n </form>\n </div>\n </>\n );\n};\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
interface HeaderPropType {
|
|
3
|
+
title?: string;
|
|
4
|
+
language?: string;
|
|
5
|
+
onLanguageClick?: () => void;
|
|
6
|
+
onMenuClick?: () => void;
|
|
7
|
+
}
|
|
8
|
+
declare const Header: FC<HeaderPropType>;
|
|
9
|
+
export default Header;
|
|
10
|
+
//# sourceMappingURL=Header.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Header.d.ts","sourceRoot":"","sources":["../../../src/components/Chat/Header.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAI3B,UAAU,cAAc;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;CAC1B;AAED,QAAA,MAAM,MAAM,EAAE,EAAE,CAAC,cAAc,CAgF9B,CAAC;AAEF,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useChatData } from '../../hooks/useChatData';
|
|
3
|
+
import { CaretDown, ChevronLeft, List } from './Icons';
|
|
4
|
+
const Header = (props) => {
|
|
5
|
+
const { createNew, listeners } = useChatData();
|
|
6
|
+
const { title, language, onLanguageClick, onMenuClick } = props;
|
|
7
|
+
const showNew = !!listeners?.['ON_NEW_CHAT'] && !!createNew;
|
|
8
|
+
const handleCreateNewChat = () => {
|
|
9
|
+
let id = '';
|
|
10
|
+
if (createNew) {
|
|
11
|
+
id = createNew();
|
|
12
|
+
}
|
|
13
|
+
if (listeners?.['ON_NEW_CHAT']) {
|
|
14
|
+
listeners['ON_NEW_CHAT'](id);
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
return (_jsxs("header", { className: "flex mx-auto px-4 py-[8px] bg-background gap-2 w-full md:max-w-3xl justify-between", children: [_jsx("button", { className: "p-1 text-gray-600 opacity-[0]", "aria-label": "Go back", children: _jsx(ChevronLeft, { size: 24 }) }), _jsxs("div", { className: "flex items-center gap-1 ", "aria-label": "AI Guide options", children: [_jsx("span", { className: "text-[18px] font-semibold leading-[28px] text-[#595959]", children: title }), _jsx(CaretDown, { className: "opacity-25", size: 12 })] }), _jsxs("div", { className: "flex items-center gap-[8px]", children: [_jsx("button", { className: "opacity-25", onClick: (e) => {
|
|
18
|
+
e.preventDefault();
|
|
19
|
+
e.stopPropagation();
|
|
20
|
+
if (onLanguageClick) {
|
|
21
|
+
onLanguageClick();
|
|
22
|
+
}
|
|
23
|
+
}, "aria-label": "Change language", children: _jsx("span", { className: "text-[#595959] text-center text-[12px] border-[1px] font-bold rounded-[4px] border-[#595959] px-[6px] py-[2px]", children: language }) }), showNew && (_jsx("button", { onClick: (e) => {
|
|
24
|
+
e.preventDefault();
|
|
25
|
+
e.stopPropagation();
|
|
26
|
+
handleCreateNewChat();
|
|
27
|
+
}, "aria-label": "New Chat", children: _jsx("span", { className: "text-[#595959] text-center text-[12px] border-[1px] font-bold rounded-[4px] border-[#595959] px-[6px] py-[2px]", children: "New" }) })), !!onMenuClick && (_jsx("button", { onClick: (e) => {
|
|
28
|
+
e.preventDefault();
|
|
29
|
+
e.stopPropagation();
|
|
30
|
+
if (onMenuClick) {
|
|
31
|
+
onMenuClick();
|
|
32
|
+
}
|
|
33
|
+
}, className: "p-1 text-gray-600 opacity-25", "aria-label": "Open menu", children: _jsx(List, { size: 24 }) }))] })] }));
|
|
34
|
+
};
|
|
35
|
+
export default Header;
|
|
36
|
+
//# sourceMappingURL=Header.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Header.js","sourceRoot":"","sources":["../../../src/components/Chat/Header.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AASvD,MAAM,MAAM,GAAuB,CAAC,KAAK,EAAE,EAAE;IAC3C,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,WAAW,EAAE,CAAC;IAC/C,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC;IAEhE,MAAM,OAAO,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC;IAE5D,MAAM,mBAAmB,GAAG,GAAG,EAAE;QAC/B,IAAI,EAAE,GAAW,EAAE,CAAC;QACpB,IAAI,SAAS,EAAE,CAAC;YACd,EAAE,GAAG,SAAS,EAAE,CAAC;QACnB,CAAC;QACD,IAAI,SAAS,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC;YAC/B,SAAS,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,CACL,kBAAQ,SAAS,EAAC,oFAAoF,aACpG,iBAAQ,SAAS,EAAC,+BAA+B,gBAAY,SAAS,YACpE,KAAC,WAAW,IAAC,IAAI,EAAE,EAAE,GAAI,GAClB,EAET,eAAK,SAAS,EAAC,0BAA0B,gBAAY,kBAAkB,aACrE,eAAM,SAAS,EAAC,yDAAyD,YACtE,KAAK,GACD,EACP,KAAC,SAAS,IAAC,SAAS,EAAC,YAAY,EAAC,IAAI,EAAE,EAAE,GAAI,IAC1C,EACN,eAAK,SAAS,EAAC,6BAA6B,aAC1C,iBACE,SAAS,EAAC,YAAY,EACtB,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;4BACb,CAAC,CAAC,cAAc,EAAE,CAAC;4BACnB,CAAC,CAAC,eAAe,EAAE,CAAC;4BAEpB,IAAI,eAAe,EAAE,CAAC;gCACpB,eAAe,EAAE,CAAC;4BACpB,CAAC;wBACH,CAAC,gBACU,iBAAiB,YAE5B,eAAM,SAAS,EAAC,gHAAgH,YAC7H,QAAQ,GACJ,GACA,EAER,OAAO,IAAI,CACV,iBACE,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;4BACb,CAAC,CAAC,cAAc,EAAE,CAAC;4BACnB,CAAC,CAAC,eAAe,EAAE,CAAC;4BACpB,mBAAmB,EAAE,CAAC;wBACxB,CAAC,gBACU,UAAU,YAErB,eAAM,SAAS,EAAC,gHAAgH,oBAEzH,GACA,CACV,EAEA,CAAC,CAAC,WAAW,IAAI,CAChB,iBACE,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;4BACb,CAAC,CAAC,cAAc,EAAE,CAAC;4BACnB,CAAC,CAAC,eAAe,EAAE,CAAC;4BAEpB,IAAI,WAAW,EAAE,CAAC;gCAChB,WAAW,EAAE,CAAC;4BAChB,CAAC;wBACH,CAAC,EACD,SAAS,EAAC,8BAA8B,gBAC7B,WAAW,YAEtB,KAAC,IAAI,IAAC,IAAI,EAAE,EAAE,GAAI,GACX,CACV,IACG,IACC,CACV,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,MAAM,CAAC","sourcesContent":["import { FC } from 'react';\nimport { useChatData } from '../../hooks/useChatData';\nimport { CaretDown, ChevronLeft, List } from './Icons';\n\ninterface HeaderPropType {\n title?: string;\n language?: string;\n onLanguageClick?: () => void;\n onMenuClick?: () => void;\n}\n\nconst Header: FC<HeaderPropType> = (props) => {\n const { createNew, listeners } = useChatData();\n const { title, language, onLanguageClick, onMenuClick } = props;\n\n const showNew = !!listeners?.['ON_NEW_CHAT'] && !!createNew;\n\n const handleCreateNewChat = () => {\n let id: string = '';\n if (createNew) {\n id = createNew();\n }\n if (listeners?.['ON_NEW_CHAT']) {\n listeners['ON_NEW_CHAT'](id);\n }\n };\n\n return (\n <header className=\"flex mx-auto px-4 py-[8px] bg-background gap-2 w-full md:max-w-3xl justify-between\">\n <button className=\"p-1 text-gray-600 opacity-[0]\" aria-label=\"Go back\">\n <ChevronLeft size={24} />\n </button>\n\n <div className=\"flex items-center gap-1 \" aria-label=\"AI Guide options\">\n <span className=\"text-[18px] font-semibold leading-[28px] text-[#595959]\">\n {title}\n </span>\n <CaretDown className=\"opacity-25\" size={12} />\n </div>\n <div className=\"flex items-center gap-[8px]\">\n <button\n className=\"opacity-25\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n\n if (onLanguageClick) {\n onLanguageClick();\n }\n }}\n aria-label=\"Change language\"\n >\n <span className=\"text-[#595959] text-center text-[12px] border-[1px] font-bold rounded-[4px] border-[#595959] px-[6px] py-[2px]\">\n {language}\n </span>\n </button>\n\n {showNew && (\n <button\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n handleCreateNewChat();\n }}\n aria-label=\"New Chat\"\n >\n <span className=\"text-[#595959] text-center text-[12px] border-[1px] font-bold rounded-[4px] border-[#595959] px-[6px] py-[2px]\">\n New\n </span>\n </button>\n )}\n\n {!!onMenuClick && (\n <button\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n\n if (onMenuClick) {\n onMenuClick();\n }\n }}\n className=\"p-1 text-gray-600 opacity-25\"\n aria-label=\"Open menu\"\n >\n <List size={24} />\n </button>\n )}\n </div>\n </header>\n );\n};\n\nexport default Header;\n"]}
|