@clikvn/agent-widget-embedded 1.1.5-dev-07 → 1.1.5-dev-08

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.
Files changed (316) hide show
  1. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/commons/constants/index.d.ts +2 -0
  2. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/commons/constants/index.d.ts.map +1 -0
  3. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/commons/constants/index.js +2 -0
  4. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/commons/constants/index.js.map +1 -0
  5. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/commons/constants/variables.d.ts +11 -0
  6. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/commons/constants/variables.d.ts.map +1 -0
  7. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/commons/constants/variables.js +26 -0
  8. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/commons/constants/variables.js.map +1 -0
  9. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Agent/index.d.ts +3 -0
  10. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Agent/index.d.ts.map +1 -0
  11. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Agent/index.js +16 -0
  12. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Agent/index.js.map +1 -0
  13. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/AgentThinking.d.ts +9 -0
  14. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/AgentThinking.d.ts.map +1 -0
  15. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/AgentThinking.js +161 -0
  16. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/AgentThinking.js.map +1 -0
  17. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/AudioPlayer.d.ts +8 -0
  18. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/AudioPlayer.d.ts.map +1 -0
  19. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/AudioPlayer.js +228 -0
  20. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/AudioPlayer.js.map +1 -0
  21. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Chat.d.ts +10 -0
  22. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Chat.d.ts.map +1 -0
  23. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Chat.js +39 -0
  24. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Chat.js.map +1 -0
  25. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Header.d.ts +10 -0
  26. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Header.d.ts.map +1 -0
  27. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Header.js +36 -0
  28. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Header.js.map +1 -0
  29. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/HtmlContent.d.ts +7 -0
  30. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/HtmlContent.d.ts.map +1 -0
  31. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/HtmlContent.js +45 -0
  32. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/HtmlContent.js.map +1 -0
  33. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Icons.d.ts +198 -0
  34. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Icons.d.ts.map +1 -0
  35. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Icons.js +233 -0
  36. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Icons.js.map +1 -0
  37. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/LocationCard.d.ts +38 -0
  38. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/LocationCard.d.ts.map +1 -0
  39. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/LocationCard.js +23 -0
  40. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/LocationCard.js.map +1 -0
  41. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Markdown.d.ts +7 -0
  42. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Markdown.d.ts.map +1 -0
  43. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Markdown.js +97 -0
  44. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Markdown.js.map +1 -0
  45. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Message.d.ts +16 -0
  46. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Message.d.ts.map +1 -0
  47. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Message.js +71 -0
  48. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Message.js.map +1 -0
  49. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/MultimodalInput copy.d.ts +28 -0
  50. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/MultimodalInput copy.d.ts.map +1 -0
  51. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/MultimodalInput copy.js +350 -0
  52. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/MultimodalInput copy.js.map +1 -0
  53. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/MultimodalInput.d.ts +28 -0
  54. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/MultimodalInput.d.ts.map +1 -0
  55. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/MultimodalInput.js +400 -0
  56. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/MultimodalInput.js.map +1 -0
  57. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Overview.d.ts +8 -0
  58. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Overview.d.ts.map +1 -0
  59. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Overview.js +9 -0
  60. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Overview.js.map +1 -0
  61. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/PreviewAttachment.d.ts +6 -0
  62. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/PreviewAttachment.d.ts.map +1 -0
  63. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/PreviewAttachment.js +7 -0
  64. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/PreviewAttachment.js.map +1 -0
  65. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/PreviewFileAttachment.d.ts +7 -0
  66. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/PreviewFileAttachment.d.ts.map +1 -0
  67. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/PreviewFileAttachment.js +22 -0
  68. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/PreviewFileAttachment.js.map +1 -0
  69. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ProductDetail.d.ts +12 -0
  70. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ProductDetail.d.ts.map +1 -0
  71. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ProductDetail.js +205 -0
  72. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ProductDetail.js.map +1 -0
  73. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ProductList.d.ts +16 -0
  74. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ProductList.d.ts.map +1 -0
  75. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ProductList.js +210 -0
  76. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ProductList.js.map +1 -0
  77. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ScenariosList.d.ts +22 -0
  78. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ScenariosList.d.ts.map +1 -0
  79. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ScenariosList.js +86 -0
  80. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ScenariosList.js.map +1 -0
  81. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Simplified/AudioPlayerSimplified.d.ts +9 -0
  82. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Simplified/AudioPlayerSimplified.d.ts.map +1 -0
  83. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Simplified/AudioPlayerSimplified.js +268 -0
  84. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Simplified/AudioPlayerSimplified.js.map +1 -0
  85. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Simplified/MultimodalInputSimplified.d.ts +22 -0
  86. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Simplified/MultimodalInputSimplified.d.ts.map +1 -0
  87. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Simplified/MultimodalInputSimplified.js +301 -0
  88. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Simplified/MultimodalInputSimplified.js.map +1 -0
  89. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Simplified/index.d.ts +10 -0
  90. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Simplified/index.d.ts.map +1 -0
  91. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Simplified/index.js +30 -0
  92. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Simplified/index.js.map +1 -0
  93. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/SuggestedActions.d.ts +12 -0
  94. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/SuggestedActions.d.ts.map +1 -0
  95. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/SuggestedActions.js +31 -0
  96. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/SuggestedActions.js.map +1 -0
  97. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/UserContactForm.d.ts +7 -0
  98. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/UserContactForm.d.ts.map +1 -0
  99. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/UserContactForm.js +84 -0
  100. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/UserContactForm.js.map +1 -0
  101. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/VoiceRecordingUI.d.ts +16 -0
  102. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/VoiceRecordingUI.d.ts.map +1 -0
  103. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/VoiceRecordingUI.js +37 -0
  104. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/VoiceRecordingUI.js.map +1 -0
  105. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Weather.d.ts +42 -0
  106. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Weather.d.ts.map +1 -0
  107. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Weather.js +198 -0
  108. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Weather.js.map +1 -0
  109. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ui/Button.d.ts +12 -0
  110. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ui/Button.d.ts.map +1 -0
  111. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ui/Button.js +34 -0
  112. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ui/Button.js.map +1 -0
  113. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ui/DropdownMenu.d.ts +28 -0
  114. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ui/DropdownMenu.d.ts.map +1 -0
  115. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ui/DropdownMenu.js +37 -0
  116. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ui/DropdownMenu.js.map +1 -0
  117. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ui/Spinner.d.ts +7 -0
  118. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ui/Spinner.d.ts.map +1 -0
  119. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ui/Spinner.js +4 -0
  120. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ui/Spinner.js.map +1 -0
  121. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ui/Textarea.d.ts +6 -0
  122. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ui/Textarea.d.ts.map +1 -0
  123. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ui/Textarea.js +9 -0
  124. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ui/Textarea.js.map +1 -0
  125. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ui/badge.d.ts +10 -0
  126. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ui/badge.d.ts.map +1 -0
  127. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ui/badge.js +22 -0
  128. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ui/badge.js.map +1 -0
  129. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ui/collapsible.d.ts +12 -0
  130. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ui/collapsible.d.ts.map +1 -0
  131. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ui/collapsible.js +44 -0
  132. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ui/collapsible.js.map +1 -0
  133. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/voice/VoiceWidget.d.ts +14 -0
  134. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/voice/VoiceWidget.d.ts.map +1 -0
  135. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/voice/VoiceWidget.js +53 -0
  136. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/voice/VoiceWidget.js.map +1 -0
  137. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/voice/VoiceWidgetChat.d.ts +22 -0
  138. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/voice/VoiceWidgetChat.d.ts.map +1 -0
  139. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/voice/VoiceWidgetChat.js +29 -0
  140. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/voice/VoiceWidgetChat.js.map +1 -0
  141. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/constants/toolNames.d.ts +97 -0
  142. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/constants/toolNames.d.ts.map +1 -0
  143. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/constants/toolNames.js +95 -0
  144. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/constants/toolNames.js.map +1 -0
  145. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/constants.d.ts +2 -0
  146. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/constants.d.ts.map +1 -0
  147. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/constants.js +2 -0
  148. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/constants.js.map +1 -0
  149. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/features/AgentWidget/index.d.ts +48 -0
  150. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/features/AgentWidget/index.d.ts.map +1 -0
  151. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/features/AgentWidget/index.js +23 -0
  152. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/features/AgentWidget/index.js.map +1 -0
  153. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useAudioAnalyzer.d.ts +11 -0
  154. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useAudioAnalyzer.d.ts.map +1 -0
  155. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useAudioAnalyzer.js +113 -0
  156. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useAudioAnalyzer.js.map +1 -0
  157. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useAudioMesseagePlayer.d.ts +13 -0
  158. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useAudioMesseagePlayer.d.ts.map +1 -0
  159. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useAudioMesseagePlayer.js +39 -0
  160. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useAudioMesseagePlayer.js.map +1 -0
  161. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useAudioRecording.d.ts +12 -0
  162. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useAudioRecording.d.ts.map +1 -0
  163. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useAudioRecording.js +53 -0
  164. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useAudioRecording.js.map +1 -0
  165. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useChat.d.ts +29 -0
  166. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useChat.d.ts.map +1 -0
  167. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useChat.js +225 -0
  168. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useChat.js.map +1 -0
  169. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useChatData.d.ts +20 -0
  170. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useChatData.d.ts.map +1 -0
  171. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useChatData.js +66 -0
  172. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useChatData.js.map +1 -0
  173. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useConfiguration.d.ts +79 -0
  174. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useConfiguration.d.ts.map +1 -0
  175. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useConfiguration.js +23 -0
  176. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useConfiguration.js.map +1 -0
  177. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useScrollToBottom.d.ts +7 -0
  178. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useScrollToBottom.d.ts.map +1 -0
  179. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useScrollToBottom.js +29 -0
  180. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useScrollToBottom.js.map +1 -0
  181. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/index.d.ts +2 -0
  182. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/index.d.ts.map +1 -0
  183. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/index.js +2 -0
  184. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/index.js.map +1 -0
  185. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/models/FlowiseClient.d.ts +20 -0
  186. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/models/FlowiseClient.d.ts.map +1 -0
  187. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/models/FlowiseClient.js +76 -0
  188. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/models/FlowiseClient.js.map +1 -0
  189. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/models.d.ts +2 -0
  190. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/models.d.ts.map +1 -0
  191. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/models.js +2 -0
  192. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/models.js.map +1 -0
  193. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/register.d.ts +85 -0
  194. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/register.d.ts.map +1 -0
  195. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/register.js +36 -0
  196. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/register.js.map +1 -0
  197. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/services/apis.d.ts +8 -0
  198. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/services/apis.d.ts.map +1 -0
  199. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/services/apis.js +8 -0
  200. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/services/apis.js.map +1 -0
  201. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/services/bot.service.d.ts +3 -0
  202. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/services/bot.service.d.ts.map +1 -0
  203. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/services/bot.service.js +13 -0
  204. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/services/bot.service.js.map +1 -0
  205. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/services/chat.service.d.ts +53 -0
  206. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/services/chat.service.d.ts.map +1 -0
  207. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/services/chat.service.js +163 -0
  208. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/services/chat.service.js.map +1 -0
  209. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/services/vt360.service.d.ts +14 -0
  210. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/services/vt360.service.d.ts.map +1 -0
  211. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/services/vt360.service.js +181 -0
  212. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/services/vt360.service.js.map +1 -0
  213. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types/bot.type.d.ts +11 -0
  214. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types/bot.type.d.ts.map +1 -0
  215. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types/bot.type.js +2 -0
  216. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types/bot.type.js.map +1 -0
  217. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types/chat.type.d.ts +10 -0
  218. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types/chat.type.d.ts.map +1 -0
  219. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types/chat.type.js +2 -0
  220. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types/chat.type.js.map +1 -0
  221. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types/common.type.d.ts +27 -0
  222. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types/common.type.d.ts.map +1 -0
  223. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types/common.type.js +2 -0
  224. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types/common.type.js.map +1 -0
  225. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types/flowise.type.d.ts +160 -0
  226. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types/flowise.type.d.ts.map +1 -0
  227. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types/flowise.type.js +2 -0
  228. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types/flowise.type.js.map +1 -0
  229. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types/product.type.d.ts +48 -0
  230. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types/product.type.d.ts.map +1 -0
  231. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types/product.type.js +2 -0
  232. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types/product.type.js.map +1 -0
  233. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types/user.type.d.ts +14 -0
  234. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types/user.type.d.ts.map +1 -0
  235. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types/user.type.js +2 -0
  236. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types/user.type.js.map +1 -0
  237. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types.d.ts +1 -0
  238. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types.d.ts.map +1 -0
  239. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types.js +2 -0
  240. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types.js.map +1 -0
  241. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/agentTraceUtils.d.ts +20 -0
  242. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/agentTraceUtils.d.ts.map +1 -0
  243. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/agentTraceUtils.js +492 -0
  244. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/agentTraceUtils.js.map +1 -0
  245. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/audioRecording.d.ts +21 -0
  246. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/audioRecording.d.ts.map +1 -0
  247. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/audioRecording.js +296 -0
  248. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/audioRecording.js.map +1 -0
  249. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/commonUtils.d.ts +7 -0
  250. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/commonUtils.d.ts.map +1 -0
  251. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/commonUtils.js +40 -0
  252. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/commonUtils.js.map +1 -0
  253. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/currency.d.ts +3 -0
  254. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/currency.d.ts.map +1 -0
  255. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/currency.js +18 -0
  256. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/currency.js.map +1 -0
  257. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/fileUtils.d.ts +3 -0
  258. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/fileUtils.d.ts.map +1 -0
  259. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/fileUtils.js +46 -0
  260. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/fileUtils.js.map +1 -0
  261. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/functionUtils.d.ts +4 -0
  262. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/functionUtils.d.ts.map +1 -0
  263. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/functionUtils.js +17 -0
  264. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/functionUtils.js.map +1 -0
  265. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/messageUtils.d.ts +37 -0
  266. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/messageUtils.d.ts.map +1 -0
  267. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/messageUtils.js +55 -0
  268. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/messageUtils.js.map +1 -0
  269. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/requestUtils.d.ts +16 -0
  270. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/requestUtils.d.ts.map +1 -0
  271. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/requestUtils.js +79 -0
  272. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/requestUtils.js.map +1 -0
  273. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/streamUtils.d.ts +5 -0
  274. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/streamUtils.d.ts.map +1 -0
  275. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/streamUtils.js +12 -0
  276. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/streamUtils.js.map +1 -0
  277. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/toolUtils.d.ts +105 -0
  278. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/toolUtils.d.ts.map +1 -0
  279. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/toolUtils.js +178 -0
  280. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/utils/toolUtils.js.map +1 -0
  281. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/web.d.ts +8 -0
  282. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/web.d.ts.map +1 -0
  283. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/web.js +5 -0
  284. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/web.js.map +1 -0
  285. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/window.d.ts +18 -0
  286. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/window.d.ts.map +1 -0
  287. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/window.js +31 -0
  288. package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/window.js.map +1 -0
  289. package/dist/components/Chat/Icons.d.ts +4 -3
  290. package/dist/components/Chat/Icons.d.ts.map +1 -1
  291. package/dist/components/Chat/MultimodalInput copy.d.ts +28 -0
  292. package/dist/components/Chat/MultimodalInput copy.d.ts.map +1 -0
  293. package/dist/components/Chat/MultimodalInput.d.ts.map +1 -1
  294. package/dist/components/Chat/PreviewFileAttachment.d.ts +7 -0
  295. package/dist/components/Chat/PreviewFileAttachment.d.ts.map +1 -0
  296. package/dist/components/Chat/VoiceRecordingUI.d.ts +16 -0
  297. package/dist/components/Chat/VoiceRecordingUI.d.ts.map +1 -0
  298. package/dist/hooks/useAudioAnalyzer.d.ts.map +1 -1
  299. package/dist/index-old.html +108 -0
  300. package/dist/index.html +54 -37
  301. package/dist/web.js +1 -1
  302. package/dist/web.js.map +1 -0
  303. package/package.json +2 -1
  304. package/.claude/settings.local.json +0 -12
  305. package/.idea/clik-ai-chatbot-embedded.iml +0 -12
  306. package/.idea/codeStyles/Project.xml +0 -59
  307. package/.idea/codeStyles/codeStyleConfig.xml +0 -5
  308. package/.idea/inspectionProfiles/Project_Default.xml +0 -6
  309. package/.idea/jsLinters/eslint.xml +0 -6
  310. package/.idea/modules.xml +0 -8
  311. package/.idea/prettier.xml +0 -6
  312. package/.idea/vcs.xml +0 -6
  313. package/dist/utils/agentTraceUtils.test.d.ts +0 -2
  314. package/dist/utils/agentTraceUtils.test.d.ts.map +0 -1
  315. package/dist/utils/testGrouping.d.ts +0 -6
  316. package/dist/utils/testGrouping.d.ts.map +0 -1
@@ -0,0 +1,400 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { LAYOUT_MODE } from 'commons/constants';
3
+ import { useCallback, useEffect, useRef, useState, } from 'react';
4
+ import { motion, AnimatePresence } from 'framer-motion';
5
+ import { Volume2, Paperclip } from 'lucide-react';
6
+ import { useLocalStorage, useWindowSize } from 'usehooks-ts';
7
+ import { useAudioRecording } from '../../hooks/useAudioRecording';
8
+ import { useChatData } from '../../hooks/useChatData';
9
+ import { useConfiguration } from '../../hooks/useConfiguration';
10
+ import { createAttachments, getAudioTranscript, } from '../../services/chat.service';
11
+ import { cn, generateExtendedFileName, generateUUID, } from '../../utils/commonUtils';
12
+ import { getBestMimeType, getFileExtension } from '../../utils/fileUtils';
13
+ import { ArrowUpIcon, ClikMicrophoneIcon, PlusIcon } from './Icons';
14
+ import SuggestedActions from './SuggestedActions';
15
+ import { Button } from './ui/Button';
16
+ import { Textarea } from './ui/Textarea';
17
+ import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from './ui/DropdownMenu';
18
+ import { VoiceRecordingUI } from './VoiceRecordingUI';
19
+ import { PreviewFileAttachment } from './PreviewFileAttachment';
20
+ const DEFAULT_COLOR_ICON = '#595959';
21
+ const ACTIVE_COLOR_ICON = '#0A82F7';
22
+ export const MultimodalInput = ({ input, setInput, isLoading, stop, messages, setMessages, chatId, handleSubmit, className, append, attachments, setAttachments, bot, apiHost, setEnableTTS, enableTTS, suggestedActions, }) => {
23
+ const { theme, voice, overrideConfig, skipSuggestion, onLoaded } = useConfiguration();
24
+ const { isRecording, setIsRecording, onRecordingCancelled, onRecordingStopped, onRecordingStarted, elapsedTime, isLoadingRecording, audioData, } = useAudioRecording();
25
+ const { listeners } = useChatData();
26
+ const textareaRef = useRef(null);
27
+ const inputRef = useRef(null);
28
+ const setInputRef = useRef(null);
29
+ const { width } = useWindowSize();
30
+ const defaultRows = theme?.suggestion?.defaultRows || 1;
31
+ const expandedRows = theme?.suggestion?.expandedRows || 2;
32
+ const suggestedActionLayoutMode = theme?.suggestion?.layoutMode || LAYOUT_MODE.SCROLL;
33
+ const language = theme?.language?.options
34
+ ?.find((option) => option.code === theme?.language?.code)
35
+ ?.name?.toLowerCase() || 'en';
36
+ const [suggestedActionRows, setSuggestedActionRows] = useState(defaultRows); // only use for scroll mode SuggestedActions
37
+ const [openVoice, setOpenVoice] = useState(false);
38
+ const [transcribing, setTranscribing] = useState(false);
39
+ const [isMultiline, setIsMultiline] = useState(false);
40
+ const [dropdownOpen, setDropdownOpen] = useState(false);
41
+ const adjustHeight = () => {
42
+ if (textareaRef.current) {
43
+ textareaRef.current.style.height = 'auto';
44
+ textareaRef.current.style.height =
45
+ `${textareaRef.current?.scrollHeight + 2}px`;
46
+ }
47
+ };
48
+ const [localStorageInput, setLocalStorageInput] = useLocalStorage('input', '');
49
+ useEffect(() => {
50
+ if (textareaRef.current) {
51
+ const domValue = textareaRef.current?.value;
52
+ // Prefer DOM value over localStorage to handle hydration
53
+ const finalValue = domValue || localStorageInput || '';
54
+ setInput(finalValue);
55
+ adjustHeight();
56
+ setTimeout(() => {
57
+ if (textareaRef.current) {
58
+ textareaRef.current.scrollTop = textareaRef.current.scrollHeight;
59
+ }
60
+ }, 500);
61
+ }
62
+ // Only run once after hydration
63
+ // eslint-disable-next-line react-hooks/exhaustive-deps
64
+ }, []);
65
+ useEffect(() => {
66
+ setLocalStorageInput(input);
67
+ }, [input, setLocalStorageInput]);
68
+ const readonly = isRecording || transcribing;
69
+ const handleSetInput = (value) => {
70
+ setInput(value);
71
+ };
72
+ useEffect(() => {
73
+ adjustHeight();
74
+ if (suggestedActionRows !== defaultRows) {
75
+ setSuggestedActionRows(defaultRows);
76
+ }
77
+ }, [input, readonly]);
78
+ // Focus vào element đúng khi chuyển đổi giữa input và textarea
79
+ useEffect(() => {
80
+ if (!isMultiline && inputRef.current) {
81
+ inputRef.current.focus();
82
+ // Set cursor tới cuối
83
+ const length = inputRef.current.value.length;
84
+ inputRef.current.setSelectionRange(length, length);
85
+ }
86
+ else if (isMultiline && textareaRef.current) {
87
+ textareaRef.current.focus();
88
+ // Set cursor tới cuối
89
+ const length = textareaRef.current.value.length;
90
+ textareaRef.current.setSelectionRange(length, length);
91
+ // Scroll tới cuối
92
+ textareaRef.current.scrollTop = textareaRef.current.scrollHeight;
93
+ }
94
+ }, [isMultiline]);
95
+ useEffect(() => {
96
+ setInputRef.current = setInput;
97
+ }, [setInput]);
98
+ useEffect(() => {
99
+ if (onLoaded) {
100
+ onLoaded({
101
+ setInput: (txt) => {
102
+ if (setInputRef.current) {
103
+ setInputRef.current(txt || '');
104
+ }
105
+ },
106
+ startRecording: async () => {
107
+ handleStartRecording();
108
+ },
109
+ });
110
+ }
111
+ }, []);
112
+ const handleInput = (event) => {
113
+ const newValue = event.target.value;
114
+ handleSetInput(newValue);
115
+ // Nếu có newline (Enter) thì chuyển sang textarea ngay
116
+ if (!isMultiline && newValue.includes('\n')) {
117
+ setIsMultiline(true);
118
+ return;
119
+ }
120
+ // Kiểm tra scroll ngay khi input thay đổi
121
+ if (!isMultiline && inputRef.current && newValue) {
122
+ // Đợi DOM update rồi kiểm tra scroll
123
+ setTimeout(() => {
124
+ const currentInput = inputRef.current;
125
+ if (currentInput) {
126
+ const hasScroll = currentInput.scrollWidth > currentInput.clientWidth;
127
+ if (hasScroll) {
128
+ setIsMultiline(true);
129
+ }
130
+ }
131
+ }, 0);
132
+ }
133
+ // Nếu xóa hết text thì chuyển về input
134
+ if (!newValue && isMultiline) {
135
+ setIsMultiline(false);
136
+ }
137
+ if (textareaRef.current) {
138
+ textareaRef.current.scrollTop = textareaRef.current.scrollHeight;
139
+ }
140
+ };
141
+ const fileInputRef = useRef(null);
142
+ const [uploadQueue, setUploadQueue] = useState([]);
143
+ const submitForm = useCallback(async () => {
144
+ handleSubmit(undefined, attachments);
145
+ setLocalStorageInput('');
146
+ if (setAttachments) {
147
+ setAttachments((_) => []);
148
+ if (fileInputRef.current) {
149
+ fileInputRef.current.value = '';
150
+ }
151
+ }
152
+ if (width && width > 768) {
153
+ textareaRef.current?.focus();
154
+ }
155
+ }, [handleSubmit, setLocalStorageInput, width, attachments, chatId, bot]);
156
+ const uploadFile = useCallback(async (file) => {
157
+ const formData = new FormData();
158
+ formData.append('file', file, generateExtendedFileName(file.name));
159
+ try {
160
+ return await createAttachments({
161
+ chatId,
162
+ apiHost,
163
+ body: formData,
164
+ });
165
+ }
166
+ catch (error) {
167
+ console.error('Failed to upload file, please try again!');
168
+ }
169
+ }, [chatId]);
170
+ const toAudioBase64 = (blob) => {
171
+ return new Promise((resolve) => {
172
+ let mimeType = getBestMimeType();
173
+ const pos = blob.type.indexOf(';');
174
+ if (pos === -1) {
175
+ mimeType = blob.type;
176
+ }
177
+ else {
178
+ mimeType = blob.type.substring(0, pos);
179
+ }
180
+ // read blob and add to previews
181
+ const reader = new FileReader();
182
+ reader.readAsDataURL(blob);
183
+ reader.onloadend = () => {
184
+ const base64data = reader.result;
185
+ const upload = {
186
+ tempId: generateUUID(),
187
+ data: base64data,
188
+ type: 'audio',
189
+ name: `audio_${Date.now()}.${getFileExtension(mimeType)}`,
190
+ mime: mimeType,
191
+ };
192
+ resolve(upload);
193
+ };
194
+ });
195
+ };
196
+ const toBase64 = async (file, type = 'file') => {
197
+ return new Promise((resolve, reject) => {
198
+ const reader = new FileReader();
199
+ reader.readAsDataURL(file);
200
+ reader.onload = () => {
201
+ resolve({
202
+ tempId: generateUUID(),
203
+ data: reader.result,
204
+ type,
205
+ name: generateExtendedFileName(file.name),
206
+ mime: file.type,
207
+ });
208
+ };
209
+ reader.onerror = () => {
210
+ reject();
211
+ };
212
+ });
213
+ };
214
+ const checkUploadFile = useCallback(async (file) => {
215
+ if (file.type.startsWith('image')) {
216
+ return toBase64(file);
217
+ }
218
+ else {
219
+ setUploadQueue([file.name]);
220
+ const response = await uploadFile(file);
221
+ if (response?.type == 'file:full') {
222
+ const f = response.result[0];
223
+ if (!f) {
224
+ return;
225
+ }
226
+ return {
227
+ tempId: generateUUID(),
228
+ data: f.content,
229
+ name: f.name,
230
+ mime: f.mimeType,
231
+ type: response?.type,
232
+ };
233
+ }
234
+ else if (response?.type == 'file:rag') {
235
+ const { addedDocs } = response.result;
236
+ if (!addedDocs.length) {
237
+ return;
238
+ }
239
+ return toBase64(file, response?.type);
240
+ }
241
+ }
242
+ }, [setUploadQueue, uploadFile]);
243
+ const handleLogicShowFAQ = () => {
244
+ setSuggestedActionRows(suggestedActionRows === defaultRows ? expandedRows : defaultRows);
245
+ };
246
+ const handleFileChange = useCallback(async (event) => {
247
+ const files = Array.from(event.target.files || []);
248
+ try {
249
+ const uploadPromises = files.map((file) => checkUploadFile(file));
250
+ const uploadedAttachments = await Promise.all(uploadPromises);
251
+ const successfullyUploadedAttachments = uploadedAttachments.filter((attachment) => attachment !== undefined);
252
+ if (setAttachments) {
253
+ setAttachments((currentAttachments) => [
254
+ ...currentAttachments,
255
+ ...successfullyUploadedAttachments,
256
+ ]);
257
+ }
258
+ }
259
+ catch (error) {
260
+ console.error('Error uploading files!', error);
261
+ }
262
+ finally {
263
+ setUploadQueue([]);
264
+ }
265
+ }, [setAttachments, checkUploadFile]);
266
+ const speechToText = async (blob) => {
267
+ try {
268
+ setTranscribing(true);
269
+ setIsMultiline(true);
270
+ const fileUpload = await toAudioBase64(blob);
271
+ const base64Data = fileUpload.data.replace(/^data:.+;base64,/, '');
272
+ const byteCharacters = atob(base64Data); // Decode Base64 string
273
+ const byteNumbers = new Array(byteCharacters.length);
274
+ for (let i = 0; i < byteCharacters.length; i++) {
275
+ byteNumbers[i] = byteCharacters.charCodeAt(i);
276
+ }
277
+ const byteArray = new Uint8Array(byteNumbers);
278
+ const file = new File([byteArray], fileUpload.name, {
279
+ lastModified: new Date().getTime(),
280
+ type: fileUpload.type,
281
+ });
282
+ const text = await getAudioTranscript({ file, apiHost, language });
283
+ if (text) {
284
+ handleSetInput(text);
285
+ }
286
+ }
287
+ catch (error) {
288
+ console.error('Error getting audio transcript!', error);
289
+ }
290
+ finally {
291
+ setTranscribing(false);
292
+ }
293
+ };
294
+ const handleFinishRecording = () => {
295
+ if (isRecording) {
296
+ onRecordingStopped(speechToText);
297
+ }
298
+ if (listeners?.['ON_FINISHED_RECORDING']) {
299
+ listeners['ON_FINISHED_RECORDING']();
300
+ }
301
+ };
302
+ const handleStartRecording = () => {
303
+ setIsMultiline(false);
304
+ onRecordingStarted();
305
+ handleSetInput('');
306
+ if (listeners?.['ON_START_RECORDING']) {
307
+ listeners['ON_START_RECORDING']();
308
+ }
309
+ };
310
+ const handleCancelRecording = () => {
311
+ onRecordingCancelled();
312
+ handleSetInput('');
313
+ if (listeners?.['ON_CANCEL_RECORDING']) {
314
+ listeners['ON_CANCEL_RECORDING']();
315
+ }
316
+ };
317
+ const handleSend = useCallback(async () => {
318
+ if (!isRecording) {
319
+ submitForm();
320
+ }
321
+ }, [submitForm, isRecording]);
322
+ const placeholder = !isRecording && !transcribing
323
+ ? theme?.input?.placeholder || 'Send a message...'
324
+ : theme?.input?.transcribingPlaceholder || 'Transcribing...';
325
+ const recordingPlaceholder = isRecording && !transcribing
326
+ ? theme?.input?.recordingPlaceholder || 'Recording...'
327
+ : '';
328
+ return (_jsxs("div", { className: "relative w-full flex gap-4 flex-col", children: [!!suggestedActions?.length && (_jsx(SuggestedActions, { suggestedActions: suggestedActions, append: append, layoutMode: suggestedActionLayoutMode, suggestedActionRows: suggestedActionRows })), ((attachments && attachments.length > 0) || uploadQueue.length > 0) && (_jsxs("div", { className: "list-attachments flex flex-row gap-2 overflow-x-scroll items-end", children: [attachments?.map((attachment) => (_jsx(PreviewFileAttachment, { attachment: attachment, onRemoveAttachment: () => {
329
+ setAttachments?.((currentAttachments) => currentAttachments.filter((f) => f.tempId !== attachment.tempId));
330
+ } }, attachment.tempId))), uploadQueue.map((filename) => (_jsx(PreviewFileAttachment, { onRemoveAttachment: () => {
331
+ setUploadQueue(uploadQueue.filter((f) => f !== filename));
332
+ }, attachment: {
333
+ data: '',
334
+ name: filename,
335
+ mime: '',
336
+ type: '',
337
+ }, isUploading: true }, filename)))] })), _jsxs("div", { className: " w-full flex gap-4 justify-end items-end", children: [isRecording ? (_jsx(Button, { className: ` rounded-full w-[40px] h-[40px] flex items-center justify-center bg-white `, onClick: (event) => {
338
+ event.preventDefault();
339
+ handleFinishRecording();
340
+ }, children: _jsx("div", { className: "w-[12px] h-[12px] bg-muted-foreground rounded-full" }) })) : (_jsxs(DropdownMenu, { open: dropdownOpen, onOpenChange: setDropdownOpen, children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsx(Button, { className: ` rounded-full w-[40px] h-[40px] flex items-center justify-center bg-white`, onClick: (event) => {
341
+ event.preventDefault();
342
+ }, children: _jsx(PlusIcon, { size: 20, color: '#71717A' }) }) }), _jsxs(DropdownMenuContent, { side: "top", align: "start", className: "w-48 rounded-2xl border py-[6px] border-[#0d0d0d0d] shadow-sm", children: [_jsxs(DropdownMenuItem, { onClick: () => {
343
+ // Trigger file input
344
+ fileInputRef.current?.click();
345
+ setDropdownOpen(false);
346
+ }, className: "flex items-center gap-2 px-4", children: [_jsx(Paperclip, { size: 16 }), _jsx("span", { className: "text-[14px]", children: "Upload File" })] }), _jsxs(DropdownMenuItem, { onClick: () => {
347
+ setEnableTTS(!enableTTS);
348
+ }, className: `flex items-center gap-2 px-4 ${enableTTS ? 'bg-[#CBE1F3] text-[#0A82F7]' : ''}`, children: [_jsx(Volume2, {}), _jsx("span", { className: "text-[14px]", children: theme?.buttons?.textBtnSpeak || 'Speak' })] })] })] })), _jsxs("div", { className: "block flex-1 min-w-0 relative", children: [_jsxs(AnimatePresence, { mode: "wait", children: [_jsx(motion.input, { type: "text", readOnly: readonly, ref: inputRef, placeholder: placeholder, value: input, onChange: handleInput, className: cn(`h-[40px] outline-none text-base bg-muted bg-[#ffffff] scrollbar-hidden p-[12px] pr-[68px] rounded-[24px] backdrop-blur-[50px] w-full ${readonly ? 'hidden' : ''}`, className), autoFocus: true, initial: { opacity: 0, height: 0 }, animate: { opacity: 1, height: 40 }, exit: { opacity: 0, height: 0 }, transition: {
349
+ duration: 0.2,
350
+ ease: 'easeInOut',
351
+ }, style: {
352
+ display: isMultiline ? 'none' : 'block',
353
+ }, onKeyDown: (event) => {
354
+ if (isRecording) {
355
+ return;
356
+ }
357
+ if (event.key === 'Enter' && !event.shiftKey) {
358
+ event.preventDefault();
359
+ if (isLoading) {
360
+ console.error('Please wait for the model to finish its response!');
361
+ }
362
+ else if (uploadQueue.length) {
363
+ console.error('Please wait for file is uploading!');
364
+ }
365
+ else if (input.length > 0) {
366
+ handleSend();
367
+ }
368
+ }
369
+ } }, "input"), _jsx(motion.div, { initial: { opacity: 0, height: 40 }, animate: { opacity: 1, height: 'auto' }, exit: { opacity: 0, height: 40 }, transition: {
370
+ duration: 0.2,
371
+ ease: 'easeInOut',
372
+ }, style: {
373
+ display: isMultiline ? 'block' : 'none',
374
+ }, children: _jsx(Textarea, { readOnly: readonly, ref: textareaRef, placeholder: placeholder, value: input, onChange: handleInput, className: cn(`min-h-[24px] max-h-[160px] resize-none text-base bg-muted bg-[#ffffff] scrollbar-hidden p-[12px] pb-[32px] rounded-[24px] border border-[#E5E5E5] shadow-[0px_2px_6px_0px_rgba(0,0,0,0.08)] backdrop-blur-[50px] ${suggestedActionRows === expandedRows && 'p-[12px]'} `, className), style: {
375
+ height: suggestedActionRows === expandedRows ? 60 : undefined,
376
+ }, autoFocus: true, onKeyDown: (event) => {
377
+ if (isRecording) {
378
+ return;
379
+ }
380
+ if (event.key === 'Enter' && !event.shiftKey) {
381
+ event.preventDefault();
382
+ if (isLoading) {
383
+ console.error('Please wait for the model to finish its response!');
384
+ }
385
+ else if (uploadQueue.length) {
386
+ console.error('Please wait for file is uploading!');
387
+ }
388
+ else if (input.length > 0) {
389
+ handleSend();
390
+ }
391
+ }
392
+ } }) }, "textarea")] }), _jsx(VoiceRecordingUI, { isRecording: isRecording, elapsedTime: elapsedTime, onCancel: handleCancelRecording, transcribing: transcribing, audioData: audioData, label: recordingPlaceholder }), _jsxs("div", { className: "button-voice right-[4px] absolute bottom-[4px] flex gap-[12px]", children: [!isRecording && (_jsx(Button, { className: "rounded-full z-[2] p-1.5 h-[32px] w-[32px] m-0 bg-transparent", onClick: (event) => {
393
+ event.preventDefault();
394
+ handleStartRecording();
395
+ }, disabled: isLoading, children: _jsx(ClikMicrophoneIcon, { size: 20 }) })), _jsx(Button, { className: "rounded-full z-[2] p-1.5 h-[32px] w-[32px] m-0 border bg-[#71717A]", onClick: (event) => {
396
+ event.preventDefault();
397
+ handleSend();
398
+ }, disabled: isRecording || input.length === 0 || !!uploadQueue.length, children: _jsx(ArrowUpIcon, { size: 20 }) })] })] }), _jsx("input", { type: "file", ref: fileInputRef, onChange: handleFileChange, multiple: true, accept: "image/*,video/*,audio/*,.pdf,.doc,.docx,.txt", style: { display: 'none' } })] })] }));
399
+ };
400
+ //# sourceMappingURL=MultimodalInput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MultimodalInput.js","sourceRoot":"","sources":["../../../src/components/Chat/MultimodalInput.tsx"],"names":[],"mappings":"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","sourcesContent":["import { LAYOUT_MODE } from 'commons/constants';\nimport {\n type ChangeEvent,\n FC,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { Volume2, Paperclip } from 'lucide-react';\n\nimport { SuggestionType } from 'types/common.type';\nimport { useLocalStorage, useWindowSize } from 'usehooks-ts';\nimport { useAudioRecording } from '../../hooks/useAudioRecording';\nimport { useChatData } from '../../hooks/useChatData';\nimport { useConfiguration } from '../../hooks/useConfiguration';\nimport {\n createAttachments,\n getAudioTranscript,\n} from '../../services/chat.service';\nimport { BotType } from '../../types/bot.type';\nimport { ChatMessageType, IFileUpload } from '../../types/flowise.type';\nimport {\n cn,\n generateExtendedFileName,\n generateUUID,\n} from '../../utils/commonUtils';\nimport { getBestMimeType, getFileExtension } from '../../utils/fileUtils';\nimport { ArrowUpIcon, ClikMicrophoneIcon, PlusIcon } from './Icons';\nimport SuggestedActions from './SuggestedActions';\nimport { Button } from './ui/Button';\nimport { Textarea } from './ui/Textarea';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from './ui/DropdownMenu';\nimport VoiceWidget from './voice/VoiceWidget';\nimport { VoiceRecordingUI } from './VoiceRecordingUI';\nimport { PreviewFileAttachment } from './PreviewFileAttachment';\n\nconst DEFAULT_COLOR_ICON = '#595959';\nconst ACTIVE_COLOR_ICON = '#0A82F7';\n\ntype PropsType = {\n input: string;\n setInput: (value: string) => void;\n isLoading: boolean;\n stop: () => void;\n messages: ChatMessageType[];\n setMessages: (messages: ChatMessageType[]) => void;\n chatId: string;\n handleSubmit: (\n event?: { preventDefault?: () => void },\n files?: IFileUpload[]\n ) => void;\n className?: string;\n append?: (message: ChatMessageType) => Promise<void>;\n attachments?: IFileUpload[];\n setAttachments?: (func: (files: IFileUpload[]) => IFileUpload[]) => void;\n bot: BotType | null;\n apiHost: string;\n setEnableTTS: (value: boolean) => void;\n enableTTS: boolean;\n suggestedActions?: SuggestionType[];\n};\n\nexport const MultimodalInput: FC<PropsType> = ({\n input,\n setInput,\n isLoading,\n stop,\n messages,\n setMessages,\n chatId,\n handleSubmit,\n className,\n append,\n attachments,\n setAttachments,\n bot,\n apiHost,\n setEnableTTS,\n enableTTS,\n suggestedActions,\n}) => {\n const { theme, voice, overrideConfig, skipSuggestion, onLoaded } =\n useConfiguration();\n const {\n isRecording,\n setIsRecording,\n onRecordingCancelled,\n onRecordingStopped,\n onRecordingStarted,\n elapsedTime,\n isLoadingRecording,\n audioData,\n } = useAudioRecording();\n const { listeners } = useChatData();\n const textareaRef = useRef<HTMLTextAreaElement | null>(null);\n const inputRef = useRef<HTMLInputElement | null>(null);\n const setInputRef = useRef<((input: string) => void) | null>(null);\n\n const { width } = useWindowSize();\n\n const defaultRows = theme?.suggestion?.defaultRows || 1;\n const expandedRows = theme?.suggestion?.expandedRows || 2;\n const suggestedActionLayoutMode =\n theme?.suggestion?.layoutMode || LAYOUT_MODE.SCROLL;\n\n const language =\n theme?.language?.options\n ?.find((option) => option.code === theme?.language?.code)\n ?.name?.toLowerCase() || 'en';\n\n const [suggestedActionRows, setSuggestedActionRows] =\n useState<number>(defaultRows); // only use for scroll mode SuggestedActions\n\n const [openVoice, setOpenVoice] = useState<boolean>(false);\n const [transcribing, setTranscribing] = useState<boolean>(false);\n const [isMultiline, setIsMultiline] = useState<boolean>(false);\n const [dropdownOpen, setDropdownOpen] = useState<boolean>(false);\n\n const adjustHeight = () => {\n if (textareaRef.current) {\n (textareaRef.current as HTMLTextAreaElement).style.height = 'auto';\n (textareaRef.current as HTMLTextAreaElement).style.height =\n `${textareaRef.current?.scrollHeight + 2}px`;\n }\n };\n\n const [localStorageInput, setLocalStorageInput] = useLocalStorage(\n 'input',\n ''\n );\n\n useEffect(() => {\n if (textareaRef.current) {\n const domValue = textareaRef.current?.value;\n // Prefer DOM value over localStorage to handle hydration\n const finalValue = domValue || localStorageInput || '';\n setInput(finalValue);\n adjustHeight();\n\n setTimeout(() => {\n if (textareaRef.current) {\n textareaRef.current.scrollTop = textareaRef.current.scrollHeight;\n }\n }, 500);\n }\n // Only run once after hydration\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n setLocalStorageInput(input);\n }, [input, setLocalStorageInput]);\n\n const readonly = isRecording || transcribing;\n const handleSetInput = (value: string) => {\n setInput(value);\n };\n\n useEffect(() => {\n adjustHeight();\n if (suggestedActionRows !== defaultRows) {\n setSuggestedActionRows(defaultRows);\n }\n }, [input, readonly]);\n\n // Focus vào element đúng khi chuyển đổi giữa input và textarea\n useEffect(() => {\n if (!isMultiline && inputRef.current) {\n inputRef.current.focus();\n // Set cursor tới cuối\n const length = inputRef.current.value.length;\n inputRef.current.setSelectionRange(length, length);\n } else if (isMultiline && textareaRef.current) {\n textareaRef.current.focus();\n // Set cursor tới cuối\n const length = textareaRef.current.value.length;\n textareaRef.current.setSelectionRange(length, length);\n // Scroll tới cuối\n textareaRef.current.scrollTop = textareaRef.current.scrollHeight;\n }\n }, [isMultiline]);\n\n useEffect(() => {\n setInputRef.current = setInput;\n }, [setInput]);\n\n useEffect(() => {\n if (onLoaded) {\n onLoaded({\n setInput: (txt): void => {\n if (setInputRef.current) {\n setInputRef.current(txt || '');\n }\n },\n startRecording: async () => {\n handleStartRecording();\n },\n });\n }\n }, []);\n\n const handleInput = (\n event: ChangeEvent<HTMLTextAreaElement | HTMLInputElement>\n ) => {\n const newValue = event.target.value;\n handleSetInput(newValue);\n\n // Nếu có newline (Enter) thì chuyển sang textarea ngay\n if (!isMultiline && newValue.includes('\\n')) {\n setIsMultiline(true);\n return;\n }\n\n // Kiểm tra scroll ngay khi input thay đổi\n if (!isMultiline && inputRef.current && newValue) {\n // Đợi DOM update rồi kiểm tra scroll\n setTimeout(() => {\n const currentInput = inputRef.current;\n if (currentInput) {\n const hasScroll = currentInput.scrollWidth > currentInput.clientWidth;\n if (hasScroll) {\n setIsMultiline(true);\n }\n }\n }, 0);\n }\n\n // Nếu xóa hết text thì chuyển về input\n if (!newValue && isMultiline) {\n setIsMultiline(false);\n }\n\n if (textareaRef.current) {\n textareaRef.current.scrollTop = textareaRef.current.scrollHeight;\n }\n };\n\n const fileInputRef = useRef<HTMLInputElement | null>(null);\n const [uploadQueue, setUploadQueue] = useState<Array<string>>([]);\n\n const submitForm = useCallback(async () => {\n handleSubmit(undefined, attachments);\n setLocalStorageInput('');\n if (setAttachments) {\n setAttachments((_) => []);\n if (fileInputRef.current) {\n (fileInputRef.current as HTMLInputElement).value = '';\n }\n }\n if (width && width > 768) {\n textareaRef.current?.focus();\n }\n }, [handleSubmit, setLocalStorageInput, width, attachments, chatId, bot]);\n\n const uploadFile = useCallback(\n async (file: File) => {\n const formData = new FormData();\n formData.append('file', file, generateExtendedFileName(file.name));\n try {\n return await createAttachments({\n chatId,\n apiHost,\n body: formData,\n });\n } catch (error) {\n console.error('Failed to upload file, please try again!');\n }\n },\n [chatId]\n );\n\n const toAudioBase64 = (blob: Blob) => {\n return new Promise<IFileUpload>((resolve) => {\n let mimeType = getBestMimeType();\n const pos = blob.type.indexOf(';');\n if (pos === -1) {\n mimeType = blob.type;\n } else {\n mimeType = blob.type.substring(0, pos);\n }\n\n // read blob and add to previews\n const reader = new FileReader();\n reader.readAsDataURL(blob);\n reader.onloadend = () => {\n const base64data = reader.result as string;\n const upload: IFileUpload = {\n tempId: generateUUID(),\n data: base64data,\n type: 'audio',\n name: `audio_${Date.now()}.${getFileExtension(mimeType)}`,\n mime: mimeType,\n };\n resolve(upload);\n };\n });\n };\n\n const toBase64 = async (\n file: File,\n type = 'file'\n ): Promise<IFileUpload | undefined> => {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = () => {\n resolve({\n tempId: generateUUID(),\n data: reader.result as string,\n type,\n name: generateExtendedFileName(file.name),\n mime: file.type,\n });\n };\n reader.onerror = () => {\n reject();\n };\n });\n };\n\n const checkUploadFile = useCallback(\n async (file: File): Promise<IFileUpload | undefined> => {\n if (file.type.startsWith('image')) {\n return toBase64(file);\n } else {\n setUploadQueue([file.name]);\n const response: any = await uploadFile(file);\n if (response?.type == 'file:full') {\n const f = response.result[0];\n if (!f) {\n return;\n }\n return {\n tempId: generateUUID(),\n data: f.content,\n name: f.name,\n mime: f.mimeType,\n type: response?.type,\n };\n } else if (response?.type == 'file:rag') {\n const { addedDocs } = response.result;\n if (!addedDocs.length) {\n return;\n }\n return toBase64(file, response?.type);\n }\n }\n },\n [setUploadQueue, uploadFile]\n );\n\n const handleLogicShowFAQ = () => {\n setSuggestedActionRows(\n suggestedActionRows === defaultRows ? expandedRows : defaultRows\n );\n };\n\n const handleFileChange = useCallback(\n async (event: ChangeEvent<HTMLInputElement>) => {\n const files = Array.from(event.target.files || []);\n try {\n const uploadPromises = files.map((file) => checkUploadFile(file));\n const uploadedAttachments = await Promise.all(uploadPromises);\n const successfullyUploadedAttachments = uploadedAttachments.filter(\n (attachment) => attachment !== undefined\n ) as IFileUpload[];\n if (setAttachments) {\n setAttachments((currentAttachments: IFileUpload[]) => [\n ...currentAttachments,\n ...successfullyUploadedAttachments,\n ]);\n }\n } catch (error) {\n console.error('Error uploading files!', error);\n } finally {\n setUploadQueue([]);\n }\n },\n [setAttachments, checkUploadFile]\n );\n\n const speechToText = async (blob: Blob) => {\n try {\n setTranscribing(true);\n setIsMultiline(true);\n const fileUpload = await toAudioBase64(blob);\n const base64Data = fileUpload.data!.replace(/^data:.+;base64,/, '');\n const byteCharacters = atob(base64Data); // Decode Base64 string\n const byteNumbers = new Array(byteCharacters.length);\n\n for (let i = 0; i < byteCharacters.length; i++) {\n byteNumbers[i] = byteCharacters.charCodeAt(i);\n }\n\n const byteArray = new Uint8Array(byteNumbers);\n const file = new File([byteArray], fileUpload.name, {\n lastModified: new Date().getTime(),\n type: fileUpload.type,\n });\n\n const text = await getAudioTranscript({ file, apiHost, language });\n if (text) {\n handleSetInput(text);\n }\n } catch (error) {\n console.error('Error getting audio transcript!', error);\n } finally {\n setTranscribing(false);\n }\n };\n\n const handleFinishRecording = () => {\n if (isRecording) {\n onRecordingStopped(speechToText);\n }\n if (listeners?.['ON_FINISHED_RECORDING']) {\n listeners['ON_FINISHED_RECORDING']();\n }\n };\n\n const handleStartRecording = () => {\n setIsMultiline(false);\n onRecordingStarted();\n handleSetInput('');\n if (listeners?.['ON_START_RECORDING']) {\n listeners['ON_START_RECORDING']();\n }\n };\n\n const handleCancelRecording = () => {\n onRecordingCancelled();\n handleSetInput('');\n if (listeners?.['ON_CANCEL_RECORDING']) {\n listeners['ON_CANCEL_RECORDING']();\n }\n };\n\n const handleSend = useCallback(async () => {\n if (!isRecording) {\n submitForm();\n }\n }, [submitForm, isRecording]);\n\n const placeholder =\n !isRecording && !transcribing\n ? theme?.input?.placeholder || 'Send a message...'\n : theme?.input?.transcribingPlaceholder || 'Transcribing...';\n\n const recordingPlaceholder =\n isRecording && !transcribing\n ? theme?.input?.recordingPlaceholder || 'Recording...'\n : '';\n\n return (\n <div className=\"relative w-full flex gap-4 flex-col\">\n {!!suggestedActions?.length && (\n <SuggestedActions\n suggestedActions={suggestedActions}\n append={append}\n layoutMode={suggestedActionLayoutMode}\n suggestedActionRows={suggestedActionRows}\n />\n )}\n {((attachments && attachments.length > 0) || uploadQueue.length > 0) && (\n <div className=\"list-attachments flex flex-row gap-2 overflow-x-scroll items-end\">\n {attachments?.map((attachment) => (\n <PreviewFileAttachment\n key={attachment.tempId}\n attachment={attachment}\n onRemoveAttachment={() => {\n setAttachments?.((currentAttachments: IFileUpload[]) =>\n currentAttachments.filter(\n (f) => f.tempId !== attachment.tempId\n )\n );\n }}\n />\n ))}\n {uploadQueue.map((filename) => (\n <PreviewFileAttachment\n key={filename}\n onRemoveAttachment={() => {\n setUploadQueue(uploadQueue.filter((f) => f !== filename));\n }}\n attachment={{\n data: '',\n name: filename,\n mime: '',\n type: '',\n }}\n isUploading\n />\n ))}\n </div>\n )}\n <div className=\" w-full flex gap-4 justify-end items-end\">\n {isRecording ? (\n <Button\n className={` rounded-full w-[40px] h-[40px] flex items-center justify-center bg-white `}\n onClick={(event) => {\n event.preventDefault();\n handleFinishRecording();\n }}\n >\n <div className=\"w-[12px] h-[12px] bg-muted-foreground rounded-full\"></div>\n </Button>\n ) : (\n <DropdownMenu open={dropdownOpen} onOpenChange={setDropdownOpen}>\n <DropdownMenuTrigger asChild>\n <Button\n className={` rounded-full w-[40px] h-[40px] flex items-center justify-center bg-white`}\n onClick={(event) => {\n event.preventDefault();\n }}\n >\n <PlusIcon size={20} color={'#71717A'} />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n side=\"top\"\n align=\"start\"\n className=\"w-48 rounded-2xl border py-[6px] border-[#0d0d0d0d] shadow-sm\"\n >\n <DropdownMenuItem\n onClick={() => {\n // Trigger file input\n fileInputRef.current?.click();\n setDropdownOpen(false);\n }}\n className=\"flex items-center gap-2 px-4\"\n >\n <Paperclip size={16} />\n <span className=\"text-[14px]\">Upload File</span>\n </DropdownMenuItem>\n <DropdownMenuItem\n onClick={() => {\n setEnableTTS(!enableTTS);\n }}\n className={`flex items-center gap-2 px-4 ${enableTTS ? 'bg-[#CBE1F3] text-[#0A82F7]' : ''}`}\n >\n <Volume2 />\n <span className=\"text-[14px]\">\n {theme?.buttons?.textBtnSpeak || 'Speak'}\n </span>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n <div className=\"block flex-1 min-w-0 relative\">\n {/* Animated Input/Textarea Container */}\n <AnimatePresence mode=\"wait\">\n <motion.input\n key=\"input\"\n type=\"text\"\n readOnly={readonly}\n ref={inputRef}\n placeholder={placeholder}\n value={input}\n onChange={handleInput}\n className={cn(\n `h-[40px] outline-none text-base bg-muted bg-[#ffffff] scrollbar-hidden p-[12px] pr-[68px] rounded-[24px] backdrop-blur-[50px] w-full ${readonly ? 'hidden' : ''}`,\n className\n )}\n autoFocus\n initial={{ opacity: 0, height: 0 }}\n animate={{ opacity: 1, height: 40 }}\n exit={{ opacity: 0, height: 0 }}\n transition={{\n duration: 0.2,\n ease: 'easeInOut',\n }}\n style={{\n display: isMultiline ? 'none' : 'block',\n }}\n onKeyDown={(event) => {\n if (isRecording) {\n return;\n }\n\n if (event.key === 'Enter' && !event.shiftKey) {\n event.preventDefault();\n if (isLoading) {\n console.error(\n 'Please wait for the model to finish its response!'\n );\n } else if (uploadQueue.length) {\n console.error('Please wait for file is uploading!');\n } else if (input.length > 0) {\n handleSend();\n }\n }\n }}\n />\n <motion.div\n key=\"textarea\"\n initial={{ opacity: 0, height: 40 }}\n animate={{ opacity: 1, height: 'auto' }}\n exit={{ opacity: 0, height: 40 }}\n transition={{\n duration: 0.2,\n ease: 'easeInOut',\n }}\n style={{\n display: isMultiline ? 'block' : 'none',\n }}\n >\n <Textarea\n readOnly={readonly}\n ref={textareaRef}\n placeholder={placeholder}\n value={input}\n onChange={handleInput}\n className={cn(\n `min-h-[24px] max-h-[160px] resize-none text-base bg-muted bg-[#ffffff] scrollbar-hidden p-[12px] pb-[32px] rounded-[24px] border border-[#E5E5E5] shadow-[0px_2px_6px_0px_rgba(0,0,0,0.08)] backdrop-blur-[50px] ${suggestedActionRows === expandedRows && 'p-[12px]'} `,\n className\n )}\n style={{\n height: suggestedActionRows === expandedRows ? 60 : undefined,\n }}\n autoFocus\n onKeyDown={(event) => {\n if (isRecording) {\n return;\n }\n\n if (event.key === 'Enter' && !event.shiftKey) {\n event.preventDefault();\n if (isLoading) {\n console.error(\n 'Please wait for the model to finish its response!'\n );\n } else if (uploadQueue.length) {\n console.error('Please wait for file is uploading!');\n } else if (input.length > 0) {\n handleSend();\n }\n }\n }}\n />\n </motion.div>\n </AnimatePresence>\n {/* Voice Recording UI Overlay */}\n <VoiceRecordingUI\n isRecording={isRecording}\n elapsedTime={elapsedTime}\n onCancel={handleCancelRecording}\n transcribing={transcribing}\n audioData={audioData}\n label={recordingPlaceholder}\n />\n <div className=\"button-voice right-[4px] absolute bottom-[4px] flex gap-[12px]\">\n {!isRecording && (\n <Button\n className=\"rounded-full z-[2] p-1.5 h-[32px] w-[32px] m-0 bg-transparent\"\n onClick={(event) => {\n event.preventDefault();\n handleStartRecording();\n }}\n disabled={isLoading}\n >\n <ClikMicrophoneIcon size={20} />\n </Button>\n )}\n <Button\n className=\"rounded-full z-[2] p-1.5 h-[32px] w-[32px] m-0 border bg-[#71717A]\"\n onClick={(event) => {\n event.preventDefault();\n handleSend();\n }}\n disabled={\n isRecording || input.length === 0 || !!uploadQueue.length\n }\n >\n <ArrowUpIcon size={20} />\n </Button>\n </div>\n </div>\n {/* Hidden file input */}\n <input\n type=\"file\"\n ref={fileInputRef}\n onChange={handleFileChange}\n multiple\n accept=\"image/*,video/*,audio/*,.pdf,.doc,.docx,.txt\"\n style={{ display: 'none' }}\n />\n </div>\n </div>\n );\n};\n"]}
@@ -0,0 +1,8 @@
1
+ import { FC } from 'react';
2
+ import { BotType } from '../../types/bot.type';
3
+ type PropsType = {
4
+ bot: BotType | null;
5
+ };
6
+ export declare const Overview: FC<PropsType>;
7
+ export default Overview;
8
+ //# sourceMappingURL=Overview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Overview.d.ts","sourceRoot":"","sources":["../../../src/components/Chat/Overview.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAC3B,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAG/C,KAAK,SAAS,GAAG;IACf,GAAG,EAAE,OAAO,GAAG,IAAI,CAAC;CACrB,CAAC;AACF,eAAO,MAAM,QAAQ,EAAE,EAAE,CAAC,SAAS,CAmClC,CAAC;AAEF,eAAe,QAAQ,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { motion } from 'framer-motion';
3
+ import { useConfiguration } from '../../hooks/useConfiguration';
4
+ export const Overview = ({ bot }) => {
5
+ const { theme } = useConfiguration();
6
+ return (_jsx(motion.div, { className: "max-w-3xl m-auto md:mt-20", initial: { opacity: 0, scale: 0.98 }, animate: { opacity: 1, scale: 1 }, exit: { opacity: 0, scale: 0.98 }, transition: { delay: 0.5 }, children: _jsxs("div", { className: "rounded-xl p-6 flex flex-col gap-2 leading-relaxed text-center max-w-xl", children: [_jsx("p", { className: "flex flex-row justify-center gap-4 items-center" }), !theme?.overview ? (_jsxs(_Fragment, { children: [bot?.avatar && (_jsx("img", { src: bot?.avatar, alt: bot?.name ?? 'Avatar', width: 40, height: 40, className: "rounded-full m-auto" })), _jsx("p", { className: "font-semibold text-xl", children: bot?.name })] })) : (_jsxs(_Fragment, { children: [_jsx("p", { className: "font-semibold text-xl", children: theme?.overview?.title }), _jsx("p", { children: theme?.overview?.description })] }))] }) }, "overview"));
7
+ };
8
+ export default Overview;
9
+ //# sourceMappingURL=Overview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Overview.js","sourceRoot":"","sources":["../../../src/components/Chat/Overview.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAGvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAKhE,MAAM,CAAC,MAAM,QAAQ,GAAkB,CAAC,EAAE,GAAG,EAAa,EAAE,EAAE;IAC5D,MAAM,EAAE,KAAK,EAAE,GAAG,gBAAgB,EAAE,CAAC;IACrC,OAAO,CACL,KAAC,MAAM,CAAC,GAAG,IAET,SAAS,EAAC,2BAA2B,EACrC,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EACpC,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EACjC,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EACjC,UAAU,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,YAE1B,eAAK,SAAS,EAAC,yEAAyE,aACtF,YAAG,SAAS,EAAC,iDAAiD,GAAK,EAClE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAClB,8BACG,GAAG,EAAE,MAAM,IAAI,CACd,cACE,GAAG,EAAE,GAAG,EAAE,MAAM,EAChB,GAAG,EAAE,GAAG,EAAE,IAAI,IAAI,QAAQ,EAC1B,KAAK,EAAE,EAAE,EACT,MAAM,EAAE,EAAE,EACV,SAAS,EAAC,qBAAqB,GAC/B,CACH,EACD,YAAG,SAAS,EAAC,uBAAuB,YAAE,GAAG,EAAE,IAAI,GAAK,IACnD,CACJ,CAAC,CAAC,CAAC,CACF,8BACE,YAAG,SAAS,EAAC,uBAAuB,YAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,GAAK,EACjE,sBAAI,KAAK,EAAE,QAAQ,EAAE,WAAW,GAAK,IACpC,CACJ,IACG,IA5BF,UAAU,CA6BH,CACd,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,QAAQ,CAAC","sourcesContent":["import { motion } from 'framer-motion';\nimport { FC } from 'react';\nimport { BotType } from '../../types/bot.type';\nimport { useConfiguration } from '../../hooks/useConfiguration';\n\ntype PropsType = {\n bot: BotType | null;\n};\nexport const Overview: FC<PropsType> = ({ bot }: PropsType) => {\n const { theme } = useConfiguration();\n return (\n <motion.div\n key=\"overview\"\n className=\"max-w-3xl m-auto md:mt-20\"\n initial={{ opacity: 0, scale: 0.98 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{ opacity: 0, scale: 0.98 }}\n transition={{ delay: 0.5 }}\n >\n <div className=\"rounded-xl p-6 flex flex-col gap-2 leading-relaxed text-center max-w-xl\">\n <p className=\"flex flex-row justify-center gap-4 items-center\"></p>\n {!theme?.overview ? (\n <>\n {bot?.avatar && (\n <img\n src={bot?.avatar}\n alt={bot?.name ?? 'Avatar'}\n width={40}\n height={40}\n className=\"rounded-full m-auto\"\n />\n )}\n <p className=\"font-semibold text-xl\">{bot?.name}</p>\n </>\n ) : (\n <>\n <p className=\"font-semibold text-xl\">{theme?.overview?.title}</p>\n <p>{theme?.overview?.description}</p>\n </>\n )}\n </div>\n </motion.div>\n );\n};\n\nexport default Overview;\n"]}
@@ -0,0 +1,6 @@
1
+ import { IFileUpload } from '../../types/flowise.type';
2
+ export declare const PreviewAttachment: ({ attachment, isUploading, }: {
3
+ attachment: IFileUpload;
4
+ isUploading?: boolean;
5
+ }) => import("react/jsx-runtime").JSX.Element;
6
+ //# sourceMappingURL=PreviewAttachment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PreviewAttachment.d.ts","sourceRoot":"","sources":["../../../src/components/Chat/PreviewAttachment.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAIvD,eAAO,MAAM,iBAAiB,iCAG3B;IACD,UAAU,EAAE,WAAW,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,4CAmCA,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { LoaderIcon } from './Icons';
3
+ export const PreviewAttachment = ({ attachment, isUploading = false, }) => {
4
+ const { name, data, mime, tempId } = attachment;
5
+ return (_jsx("div", { className: "flex flex-col gap-2", children: _jsxs("div", { className: "w-30 p-0 max-w-[400px] bg-muted rounded-md relative flex flex-col items-center justify-center", children: [data ? (mime.startsWith('audio') ? (_jsx("audio", { controls: true, children: _jsx("source", { src: data, type: mime }) })) : mime.startsWith('image') ? (_jsx("img", { src: data, alt: name ?? 'An image attachment', className: "rounded-md size-full object-contain" }, tempId)) : (_jsx("div", { className: "w-full text-left truncate", children: name }))) : (_jsx("div", { className: "w-full text-left truncate", children: name })), isUploading && (_jsx("div", { className: "animate-spin absolute text-zinc-500", children: _jsx(LoaderIcon, {}) }))] }) }));
6
+ };
7
+ //# sourceMappingURL=PreviewAttachment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PreviewAttachment.js","sourceRoot":"","sources":["../../../src/components/Chat/PreviewAttachment.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAGrC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,EAChC,UAAU,EACV,WAAW,GAAG,KAAK,GAIpB,EAAE,EAAE;IACH,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC;IAChD,OAAO,CACL,cAAK,SAAS,EAAC,qBAAqB,YAClC,eAAK,SAAS,EAAC,+FAA+F,aAC3G,IAAI,CAAC,CAAC,CAAC,CACN,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CACzB,gBAAO,QAAQ,kBACb,iBAAQ,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,GAAI,GAC3B,CACT,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAC7B,cAEE,GAAG,EAAE,IAAI,EACT,GAAG,EAAE,IAAI,IAAI,qBAAqB,EAClC,SAAS,EAAC,qCAAqC,IAH1C,MAAM,CAIX,CACH,CAAC,CAAC,CAAC,CACF,cAAK,SAAS,EAAC,2BAA2B,YAAE,IAAI,GAAO,CACxD,CACF,CAAC,CAAC,CAAC,CACF,cAAK,SAAS,EAAC,2BAA2B,YAAE,IAAI,GAAO,CACxD,EAEA,WAAW,IAAI,CACd,cAAK,SAAS,EAAC,qCAAqC,YAClD,KAAC,UAAU,KAAG,GACV,CACP,IACG,GAIF,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { IFileUpload } from '../../types/flowise.type';\nimport { LoaderIcon } from './Icons';\nimport React from 'react';\n\nexport const PreviewAttachment = ({\n attachment,\n isUploading = false,\n}: {\n attachment: IFileUpload;\n isUploading?: boolean;\n}) => {\n const { name, data, mime, tempId } = attachment;\n return (\n <div className=\"flex flex-col gap-2\">\n <div className=\"w-30 p-0 max-w-[400px] bg-muted rounded-md relative flex flex-col items-center justify-center\">\n {data ? (\n mime.startsWith('audio') ? (\n <audio controls>\n <source src={data} type={mime} />\n </audio>\n ) : mime.startsWith('image') ? (\n <img\n key={tempId}\n src={data}\n alt={name ?? 'An image attachment'}\n className=\"rounded-md size-full object-contain\"\n />\n ) : (\n <div className=\"w-full text-left truncate\">{name}</div>\n )\n ) : (\n <div className=\"w-full text-left truncate\">{name}</div>\n )}\n\n {isUploading && (\n <div className=\"animate-spin absolute text-zinc-500\">\n <LoaderIcon />\n </div>\n )}\n </div>\n {/*<div className=\"text-xs text-zinc-500 max-w-[200px] truncate \">*/}\n {/* {name}*/}\n {/*</div>*/}\n </div>\n );\n};\n"]}
@@ -0,0 +1,7 @@
1
+ import { IFileUpload } from '../../types/flowise.type';
2
+ export declare const PreviewFileAttachment: ({ attachment, isUploading, onRemoveAttachment, }: {
3
+ attachment: IFileUpload;
4
+ isUploading?: boolean;
5
+ onRemoveAttachment?: () => void;
6
+ }) => import("react/jsx-runtime").JSX.Element;
7
+ //# sourceMappingURL=PreviewFileAttachment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PreviewFileAttachment.d.ts","sourceRoot":"","sources":["../../../src/components/Chat/PreviewFileAttachment.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAKvD,eAAO,MAAM,qBAAqB,qDAI/B;IACD,UAAU,EAAE,WAAW,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;CACjC,4CAkDA,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { LoaderIcon } from './Icons';
3
+ import { CircleX, File } from 'lucide-react';
4
+ export const PreviewFileAttachment = ({ attachment, isUploading = false, onRemoveAttachment = () => { }, }) => {
5
+ const { name, data, mime, tempId } = attachment;
6
+ const renderAttachment = () => {
7
+ if (mime.startsWith('audio')) {
8
+ return (_jsx("audio", { controls: true, children: _jsx("source", { src: data, type: mime }) }));
9
+ }
10
+ if (mime.startsWith('image')) {
11
+ return (_jsx("img", { src: data, alt: name ?? 'An image attachment', className: "rounded-md size-full object-cover " }));
12
+ }
13
+ return (_jsx("div", { className: "w-[40px] h-[40px] flex items-center justify-center bg-blue-600 rounded-md", children: _jsx(File, { size: 20, color: "white" }) }));
14
+ };
15
+ console.log('attachment', attachment);
16
+ return (_jsx("div", { className: "flex flex-col gap-2", children: _jsxs("div", { className: "w-[58px] h-[58px] bg-white rounded-md relative flex flex-col items-center justify-center", children: [_jsx("div", { onClick: (e) => {
17
+ e.preventDefault();
18
+ e.stopPropagation();
19
+ onRemoveAttachment();
20
+ }, className: "w-fit h-fit flex items-center justify-center absolute top-0 right-[4px] bg-black rounded-full", children: _jsx(CircleX, { size: 20, color: "white" }) }), data && renderAttachment(), isUploading && (_jsx("div", { className: "animate-spin absolute text-zinc-500", children: _jsx(LoaderIcon, {}) }))] }) }));
21
+ };
22
+ //# sourceMappingURL=PreviewFileAttachment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PreviewFileAttachment.js","sourceRoot":"","sources":["../../../src/components/Chat/PreviewFileAttachment.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAG7C,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,EACpC,UAAU,EACV,WAAW,GAAG,KAAK,EACnB,kBAAkB,GAAG,GAAG,EAAE,GAAE,CAAC,GAK9B,EAAE,EAAE;IACH,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC;IAEhD,MAAM,gBAAgB,GAAG,GAAG,EAAE;QAC5B,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7B,OAAO,CACL,gBAAO,QAAQ,kBACb,iBAAQ,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,GAAI,GAC3B,CACT,CAAC;QACJ,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7B,OAAO,CACL,cACE,GAAG,EAAE,IAAI,EACT,GAAG,EAAE,IAAI,IAAI,qBAAqB,EAClC,SAAS,EAAC,oCAAoC,GAC9C,CACH,CAAC;QACJ,CAAC;QACD,OAAO,CACL,cAAK,SAAS,EAAC,2EAA2E,YACxF,KAAC,IAAI,IAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAC,OAAO,GAAG,GAC5B,CACP,CAAC;IACJ,CAAC,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;IACtC,OAAO,CACL,cAAK,SAAS,EAAC,qBAAqB,YAClC,eAAK,SAAS,EAAC,2FAA2F,aACxG,cACE,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;wBACb,CAAC,CAAC,cAAc,EAAE,CAAC;wBACnB,CAAC,CAAC,eAAe,EAAE,CAAC;wBACpB,kBAAkB,EAAE,CAAC;oBACvB,CAAC,EACD,SAAS,EAAC,+FAA+F,YAEzG,KAAC,OAAO,IAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAC,OAAO,GAAG,GAC/B,EACL,IAAI,IAAI,gBAAgB,EAAE,EAC1B,WAAW,IAAI,CACd,cAAK,SAAS,EAAC,qCAAqC,YAClD,KAAC,UAAU,KAAG,GACV,CACP,IACG,GACF,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { IFileUpload } from '../../types/flowise.type';\nimport { LoaderIcon } from './Icons';\nimport { CircleX, File } from 'lucide-react';\nimport React from 'react';\n\nexport const PreviewFileAttachment = ({\n attachment,\n isUploading = false,\n onRemoveAttachment = () => {},\n}: {\n attachment: IFileUpload;\n isUploading?: boolean;\n onRemoveAttachment?: () => void;\n}) => {\n const { name, data, mime, tempId } = attachment;\n\n const renderAttachment = () => {\n if (mime.startsWith('audio')) {\n return (\n <audio controls>\n <source src={data} type={mime} />\n </audio>\n );\n }\n if (mime.startsWith('image')) {\n return (\n <img\n src={data}\n alt={name ?? 'An image attachment'}\n className=\"rounded-md size-full object-cover \"\n />\n );\n }\n return (\n <div className=\"w-[40px] h-[40px] flex items-center justify-center bg-blue-600 rounded-md\">\n <File size={20} color=\"white\" />\n </div>\n );\n };\n\n console.log('attachment', attachment);\n return (\n <div className=\"flex flex-col gap-2\">\n <div className=\"w-[58px] h-[58px] bg-white rounded-md relative flex flex-col items-center justify-center\">\n <div\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n onRemoveAttachment();\n }}\n className=\"w-fit h-fit flex items-center justify-center absolute top-0 right-[4px] bg-black rounded-full\"\n >\n <CircleX size={20} color=\"white\" />\n </div>\n {data && renderAttachment()}\n {isUploading && (\n <div className=\"animate-spin absolute text-zinc-500\">\n <LoaderIcon />\n </div>\n )}\n </div>\n </div>\n );\n};\n"]}
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ import { ProductType } from 'types/product.type';
3
+ interface PropTypes {
4
+ content?: ProductType | string;
5
+ productCode?: string;
6
+ tourCode?: string;
7
+ languageCode?: string;
8
+ apiUrl?: string;
9
+ }
10
+ declare const _default: React.NamedExoticComponent<PropTypes>;
11
+ export default _default;
12
+ //# sourceMappingURL=ProductDetail.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProductDetail.d.ts","sourceRoot":"","sources":["../../../src/components/Chat/ProductDetail.tsx"],"names":[],"mappings":"AACA,OAAO,KAAmD,MAAM,OAAO,CAAC;AAWxE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,UAAU,SAAS;IACjB,OAAO,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;;AAuVD,wBAAyC"}