@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,205 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { Marked, Renderer } from '@ts-stack/markdown';
3
+ import React, { useEffect, useRef, useState, useMemo } from 'react';
4
+ import { useChatData } from '../../hooks/useChatData';
5
+ import { getProductDetails } from '../../services/vt360.service';
6
+ import { BookmarkIcon, Product360Icon, ProductARIcon, ProductGalleryIcon, ProductInfoIcon, } from './Icons';
7
+ import { convertCurrencyVnd, formatPriceProduct } from 'utils/currency';
8
+ const ProductDetail = ({ content, productCode, tourCode, languageCode = 'VN', apiUrl, }) => {
9
+ const botMessageElRef = useRef(null);
10
+ const [stringData, setStringData] = useState('');
11
+ const [data, setData] = useState(null);
12
+ const [loading, setLoading] = useState(false);
13
+ const [error, setError] = useState(null);
14
+ const { listeners } = useChatData();
15
+ useEffect(() => {
16
+ if (!content) {
17
+ return;
18
+ }
19
+ if (typeof content === 'string' || content instanceof String) {
20
+ setStringData(content);
21
+ }
22
+ else {
23
+ if (content?.code) {
24
+ setData(content);
25
+ }
26
+ }
27
+ }, [content]);
28
+ useEffect(() => {
29
+ const fetchProductData = async () => {
30
+ if (!productCode || !tourCode) {
31
+ return;
32
+ }
33
+ setLoading(true);
34
+ setError(null);
35
+ try {
36
+ const productData = await getProductDetails(productCode, tourCode, languageCode, apiUrl ? { api: apiUrl } : undefined);
37
+ setData(productData);
38
+ }
39
+ catch (err) {
40
+ setError(err instanceof Error ? err.message : 'Failed to fetch product details');
41
+ console.error('Error fetching product details:', err);
42
+ }
43
+ finally {
44
+ setLoading(false);
45
+ }
46
+ };
47
+ fetchProductData();
48
+ }, [productCode, tourCode, languageCode, apiUrl]);
49
+ useEffect(() => {
50
+ const botMessageEl = botMessageElRef.current;
51
+ if (!stringData || !botMessageEl) {
52
+ return;
53
+ }
54
+ Marked.setOptions({
55
+ renderer: new Renderer(),
56
+ gfm: true,
57
+ tables: true,
58
+ breaks: false,
59
+ pedantic: false,
60
+ sanitize: false,
61
+ smartLists: true,
62
+ smartypants: false,
63
+ });
64
+ botMessageEl.innerHTML = Marked.parse(stringData);
65
+ botMessageEl.querySelectorAll('a').forEach((link) => {
66
+ if (listeners?.['ON_LINK_CLICK']) {
67
+ link['data-json'] = link.href;
68
+ link.href = 'javascript:void(0);';
69
+ link.target = '';
70
+ link.onclick = () => {
71
+ listeners['ON_LINK_CLICK'](link['data-json']);
72
+ };
73
+ }
74
+ else {
75
+ link.target = '_blank';
76
+ }
77
+ });
78
+ }, [stringData]);
79
+ const handleOnClick = (url) => {
80
+ if (listeners?.['ON_LINK_CLICK']) {
81
+ listeners['ON_LINK_CLICK'](url);
82
+ }
83
+ else {
84
+ window?.open(url, '_blank');
85
+ }
86
+ };
87
+ const handleActionClick = (action) => {
88
+ if (!listeners?.['CMD_CALLBACK']) {
89
+ return;
90
+ }
91
+ // template command tool {"tool":"show_product_image_gallery","toolInput":{"product_code":"ITEM27GETN2D2M94"},"toolOutput":"[{\"type\":\"text\",\"text\":\"{\\n \\\"action\\\": \\\"show_product_image_gallery\\\",\\n \\\"product_code\\\": \\\"ITEM27GETN2D2M94\\\",\\n \\\"status\\\": \\\"opening\\\",\\n \\\"message\\\": \\\"Opening image gallery for product ITEM27GETN2D2M94\\\"\\n}\"}]"}
92
+ let cmdTool = null;
93
+ switch (action) {
94
+ case 'PRODUCT_INFO':
95
+ cmdTool = {
96
+ tool: 'show_product_info',
97
+ output: JSON.stringify([
98
+ {
99
+ type: 'text',
100
+ text: JSON.stringify({
101
+ action: 'show_product_info',
102
+ product_code: data?.code,
103
+ }),
104
+ },
105
+ ]),
106
+ };
107
+ break;
108
+ case 'PRODUCT_GALLERY':
109
+ cmdTool = {
110
+ tool: 'show_product_image_gallery',
111
+ output: JSON.stringify([
112
+ {
113
+ type: 'text',
114
+ text: JSON.stringify({
115
+ action: 'show_product_image_gallery',
116
+ product_code: data?.code,
117
+ }),
118
+ },
119
+ ]),
120
+ };
121
+ break;
122
+ case 'PRODUCT_360':
123
+ cmdTool = {
124
+ tool: 'show_product_360_image',
125
+ output: JSON.stringify([
126
+ {
127
+ type: 'text',
128
+ text: JSON.stringify({
129
+ action: 'show_product_360_image',
130
+ product_code: data?.code,
131
+ }),
132
+ },
133
+ ]),
134
+ };
135
+ break;
136
+ case 'PRODUCT_AR':
137
+ cmdTool = {
138
+ tool: 'show_product_AR',
139
+ output: JSON.stringify([
140
+ {
141
+ type: 'text',
142
+ text: JSON.stringify({
143
+ action: 'show_product_AR',
144
+ product_code: data?.code,
145
+ }),
146
+ },
147
+ ]),
148
+ };
149
+ break;
150
+ default:
151
+ break;
152
+ }
153
+ if (cmdTool) {
154
+ listeners['CMD_CALLBACK'](cmdTool);
155
+ }
156
+ };
157
+ const loadingComponent = useMemo(() => (_jsx("div", { className: "py-4", children: _jsx("div", { className: "bg-white rounded-lg border border-gray-200 p-4", children: _jsxs("div", { className: "animate-pulse", children: [_jsx("div", { className: "h-4 bg-gray-200 rounded w-3/4 mb-4" }), _jsx("div", { className: "h-48 bg-gray-200 rounded mb-4" }), _jsx("div", { className: "h-4 bg-gray-200 rounded w-1/2" })] }) }) })), []);
158
+ const errorComponent = useMemo(() => (_jsx("div", { className: "py-4", children: _jsx("div", { className: "bg-red-50 border border-red-200 rounded-lg p-4 text-red-700", children: error }) })), [error]);
159
+ const stringDataComponent = useMemo(() => (_jsx("span", { className: "product-detail bg-white text-gray-700 text-base rounded-md", ref: botMessageElRef })), [stringData]);
160
+ const cardAction = [
161
+ {
162
+ label: 'Info',
163
+ key: 'PRODUCT_INFO',
164
+ icon: _jsx(ProductInfoIcon, { size: 20, color: "#71717A" }),
165
+ onClick: () => handleActionClick('PRODUCT_INFO'),
166
+ isShow: true,
167
+ },
168
+ {
169
+ label: 'Gallery',
170
+ key: 'PRODUCT_GALLERY',
171
+ icon: _jsx(ProductGalleryIcon, { size: 20, color: "#71717A" }),
172
+ onClick: () => handleActionClick('PRODUCT_GALLERY'),
173
+ isShow: data?.collections?.some((item) => item.gallery?.length && item.gallery?.length > 0),
174
+ },
175
+ {
176
+ label: '360',
177
+ key: 'PRODUCT_360',
178
+ icon: _jsx(Product360Icon, { size: 20, color: "#71717A" }),
179
+ onClick: () => handleActionClick('PRODUCT_360'),
180
+ isShow: data?.collections.some((item) => item.webRotateCode),
181
+ },
182
+ {
183
+ label: 'AR',
184
+ key: 'PRODUCT_AR',
185
+ icon: _jsx(ProductARIcon, { size: 20, color: "#71717A" }),
186
+ onClick: () => handleActionClick('PRODUCT_AR'),
187
+ isShow: data?.collections.some((item) => item.model3DAndroid?.url || item.model3DIos?.url),
188
+ },
189
+ ];
190
+ const productDataComponent = useMemo(() => {
191
+ if (!data)
192
+ return null;
193
+ return (_jsx("div", { className: "py-4", children: _jsxs("div", { className: "bg-white rounded-lg overflow-hidden w-full p-[12px] gap-[12px] flex flex-col justify-center items-start", children: [_jsxs("div", { className: "flex flex-col w-full gap-1", children: [_jsx("div", { className: "flex flex-row items-center w-full h-6 gap-1", children: _jsx("h2", { className: "text-card-foreground truncate font-semibold text-[16px] leading-6 flex-1 min-w-0", children: data.name }) }), _jsxs("div", { className: "flex w-full gap-[4px] justify-between", children: [_jsxs("div", { className: "min-w-0", children: [data.tourProductQuotations.length > 0 && (_jsx("span", { className: "text-card-foreground text-[16px] leading-[24px] font-semibold", children: `${formatPriceProduct(convertCurrencyVnd(data.tourProductQuotations[0]?.price.toString() ?? ''), data.currencyUnit ?? '', data.unit ?? '')} ` })), _jsx("span", { className: `${data.tourProductQuotations.length > 0 ? 'line-through text-muted-foreground text-[14px] leading-[14px] font-medium' : 'text-card-foreground text-[16px] leading-[24px] font-semibold'}`, children: `${formatPriceProduct(convertCurrencyVnd(data?.price.toString() ?? ''), data.currencyUnit ?? '', data.unit ?? '')} ` })] }), _jsx("div", { className: "flex justify-center items-center w-5 h-5", children: _jsx(BookmarkIcon, { size: 20, color: "#71717A" }) })] }), _jsx("p", { className: "text-muted-foreground w-full font-normal text-[14px] leading-5 overflow-hidden line-clamp-2", children: data.description })] }), _jsx("div", { className: "flex flex-row items-center w-full relative gap-3 pb-[56%]", children: _jsx("div", { className: "absolute top-0 left-0 cursor-pointer w-full h-full bg-cover bg-center rounded-[5px] flex-1", style: {
194
+ backgroundImage: `url(${data.icon?.url || data.logo?.url})`,
195
+ }, onClick: () => handleOnClick(data.virtualTourUrl) }) }), _jsx("div", { className: "flex flex-row items-center w-full h-6 gap-3", children: _jsx("div", { className: "flex flex-row items-center h-6 gap-3", children: cardAction.map((item) => {
196
+ if (!item.isShow) {
197
+ return null;
198
+ }
199
+ return (_jsxs("button", { className: "flex flex-row items-center hover:opacity-80 transition-opacity w-fit h-6 px-[8px] py-[2px] gap-[4px] bg-secondary border rounded-[8px]", onClick: () => handleActionClick(item.key), children: [_jsx("div", { className: "flex justify-center items-center w-5 h-5", children: item.icon }), _jsx("span", { className: "font-medium text-[14px] leading-5 text-muted-foreground", children: item.label })] }, item.key));
200
+ }) }) })] }) }));
201
+ }, [data, handleOnClick, handleActionClick]);
202
+ return (_jsxs(_Fragment, { children: [loading && loadingComponent, error && errorComponent, !!stringData && stringDataComponent, !!data && productDataComponent] }));
203
+ };
204
+ export default React.memo(ProductDetail);
205
+ //# sourceMappingURL=ProductDetail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProductDetail.js","sourceRoot":"","sources":["../../../src/components/Chat/ProductDetail.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Marked, Renderer } from '@ts-stack/markdown';\nimport React, { FC, useEffect, useRef, useState, useMemo } from 'react';\nimport { useChatData } from '../../hooks/useChatData';\nimport { getProductDetails } from '../../services/vt360.service';\nimport {\n BookmarkIcon,\n Product360Icon,\n ProductARIcon,\n ProductGalleryIcon,\n ProductInfoIcon,\n} from './Icons';\nimport { convertCurrencyVnd, formatPriceProduct } from 'utils/currency';\nimport { ProductType } from 'types/product.type';\n\ninterface PropTypes {\n content?: ProductType | string;\n productCode?: string;\n tourCode?: string;\n languageCode?: string;\n apiUrl?: string;\n}\n\nconst ProductDetail: FC<PropTypes> = ({\n content,\n productCode,\n tourCode,\n languageCode = 'VN',\n apiUrl,\n}) => {\n const botMessageElRef = useRef<HTMLSpanElement | null>(null);\n const [stringData, setStringData] = useState<string>('');\n const [data, setData] = useState<ProductType | null>(null);\n const [loading, setLoading] = useState<boolean>(false);\n const [error, setError] = useState<string | null>(null);\n const { listeners } = useChatData();\n\n useEffect(() => {\n if (!content) {\n return;\n }\n if (typeof content === 'string' || content instanceof String) {\n setStringData(content as string);\n } else {\n if (content?.code) {\n setData(content as ProductType);\n }\n }\n }, [content]);\n\n useEffect(() => {\n const fetchProductData = async () => {\n if (!productCode || !tourCode) {\n return;\n }\n\n setLoading(true);\n setError(null);\n\n try {\n const productData = await getProductDetails(\n productCode,\n tourCode,\n languageCode,\n apiUrl ? { api: apiUrl } : undefined\n );\n setData(productData);\n } catch (err) {\n setError(\n err instanceof Error ? err.message : 'Failed to fetch product details'\n );\n console.error('Error fetching product details:', err);\n } finally {\n setLoading(false);\n }\n };\n\n fetchProductData();\n }, [productCode, tourCode, languageCode, apiUrl]);\n useEffect(() => {\n const botMessageEl = botMessageElRef.current;\n if (!stringData || !botMessageEl) {\n return;\n }\n\n Marked.setOptions({\n renderer: new Renderer(),\n gfm: true,\n tables: true,\n breaks: false,\n pedantic: false,\n sanitize: false,\n smartLists: true,\n smartypants: false,\n });\n botMessageEl.innerHTML = Marked.parse(stringData);\n\n botMessageEl.querySelectorAll('a').forEach((link) => {\n if (listeners?.['ON_LINK_CLICK']) {\n (link as any)['data-json'] = link.href;\n link.href = 'javascript:void(0);';\n link.target = '';\n link.onclick = () => {\n listeners['ON_LINK_CLICK']((link as any)['data-json']);\n };\n } else {\n link.target = '_blank';\n }\n });\n }, [stringData]);\n\n const handleOnClick = (url: string) => {\n if (listeners?.['ON_LINK_CLICK']) {\n listeners['ON_LINK_CLICK'](url);\n } else {\n window?.open(url, '_blank');\n }\n };\n\n const handleActionClick = (action: string) => {\n if (!listeners?.['CMD_CALLBACK']) {\n return;\n }\n // template command tool {\"tool\":\"show_product_image_gallery\",\"toolInput\":{\"product_code\":\"ITEM27GETN2D2M94\"},\"toolOutput\":\"[{\\\"type\\\":\\\"text\\\",\\\"text\\\":\\\"{\\\\n \\\\\\\"action\\\\\\\": \\\\\\\"show_product_image_gallery\\\\\\\",\\\\n \\\\\\\"product_code\\\\\\\": \\\\\\\"ITEM27GETN2D2M94\\\\\\\",\\\\n \\\\\\\"status\\\\\\\": \\\\\\\"opening\\\\\\\",\\\\n \\\\\\\"message\\\\\\\": \\\\\\\"Opening image gallery for product ITEM27GETN2D2M94\\\\\\\"\\\\n}\\\"}]\"}\n let cmdTool = null;\n switch (action) {\n case 'PRODUCT_INFO':\n cmdTool = {\n tool: 'show_product_info',\n output: JSON.stringify([\n {\n type: 'text',\n text: JSON.stringify({\n action: 'show_product_info',\n product_code: data?.code,\n }),\n },\n ]),\n };\n break;\n case 'PRODUCT_GALLERY':\n cmdTool = {\n tool: 'show_product_image_gallery',\n output: JSON.stringify([\n {\n type: 'text',\n text: JSON.stringify({\n action: 'show_product_image_gallery',\n product_code: data?.code,\n }),\n },\n ]),\n };\n break;\n case 'PRODUCT_360':\n cmdTool = {\n tool: 'show_product_360_image',\n output: JSON.stringify([\n {\n type: 'text',\n text: JSON.stringify({\n action: 'show_product_360_image',\n product_code: data?.code,\n }),\n },\n ]),\n };\n break;\n case 'PRODUCT_AR':\n cmdTool = {\n tool: 'show_product_AR',\n output: JSON.stringify([\n {\n type: 'text',\n text: JSON.stringify({\n action: 'show_product_AR',\n product_code: data?.code,\n }),\n },\n ]),\n };\n break;\n default:\n break;\n }\n if (cmdTool) {\n listeners['CMD_CALLBACK'](cmdTool);\n }\n };\n\n const loadingComponent = useMemo(\n () => (\n <div className=\"py-4\">\n <div className=\"bg-white rounded-lg border border-gray-200 p-4\">\n <div className=\"animate-pulse\">\n <div className=\"h-4 bg-gray-200 rounded w-3/4 mb-4\"></div>\n <div className=\"h-48 bg-gray-200 rounded mb-4\"></div>\n <div className=\"h-4 bg-gray-200 rounded w-1/2\"></div>\n </div>\n </div>\n </div>\n ),\n []\n );\n\n const errorComponent = useMemo(\n () => (\n <div className=\"py-4\">\n <div className=\"bg-red-50 border border-red-200 rounded-lg p-4 text-red-700\">\n {error}\n </div>\n </div>\n ),\n [error]\n );\n\n const stringDataComponent = useMemo(\n () => (\n <span\n className=\"product-detail bg-white text-gray-700 text-base rounded-md\"\n ref={botMessageElRef}\n />\n ),\n [stringData]\n );\n\n const cardAction = [\n {\n label: 'Info',\n key: 'PRODUCT_INFO',\n icon: <ProductInfoIcon size={20} color=\"#71717A\" />,\n onClick: () => handleActionClick('PRODUCT_INFO'),\n isShow: true,\n },\n {\n label: 'Gallery',\n key: 'PRODUCT_GALLERY',\n icon: <ProductGalleryIcon size={20} color=\"#71717A\" />,\n onClick: () => handleActionClick('PRODUCT_GALLERY'),\n isShow: data?.collections?.some(\n (item) => item.gallery?.length && item.gallery?.length > 0\n ),\n },\n {\n label: '360',\n key: 'PRODUCT_360',\n icon: <Product360Icon size={20} color=\"#71717A\" />,\n onClick: () => handleActionClick('PRODUCT_360'),\n isShow: data?.collections.some((item) => item.webRotateCode),\n },\n {\n label: 'AR',\n key: 'PRODUCT_AR',\n icon: <ProductARIcon size={20} color=\"#71717A\" />,\n onClick: () => handleActionClick('PRODUCT_AR'),\n isShow: data?.collections.some(\n (item) => item.model3DAndroid?.url || item.model3DIos?.url\n ),\n },\n ];\n\n const productDataComponent = useMemo(() => {\n if (!data) return null;\n\n return (\n <div className=\"py-4\">\n {/* item-card: full width responsive with 12px padding and 12px gap */}\n <div className=\"bg-white rounded-lg overflow-hidden w-full p-[12px] gap-[12px] flex flex-col justify-center items-start\">\n {/* content: full width x 68px with 4px gap */}\n <div className=\"flex flex-col w-full gap-1\">\n {/* price section: 334px x 24px with 4px gap */}\n <div className=\"flex flex-row items-center w-full h-6 gap-1\">\n {/* ARC Dining Table - now takes flex-grow: 1 */}\n <h2 className=\"text-card-foreground truncate font-semibold text-[16px] leading-6 flex-1 min-w-0\">\n {data.name}\n </h2>\n\n {/* Bookmark icon: 20px x 20px */}\n </div>\n <div className=\"flex w-full gap-[4px] justify-between\">\n <div className=\"min-w-0\">\n {data.tourProductQuotations.length > 0 && (\n <span className=\"text-card-foreground text-[16px] leading-[24px] font-semibold\">\n {`${formatPriceProduct(\n convertCurrencyVnd(\n data.tourProductQuotations[0]?.price.toString() ?? ''\n ),\n data.currencyUnit ?? '',\n data.unit ?? ''\n )} `}\n </span>\n )}\n <span\n className={`${data.tourProductQuotations.length > 0 ? 'line-through text-muted-foreground text-[14px] leading-[14px] font-medium' : 'text-card-foreground text-[16px] leading-[24px] font-semibold'}`}\n >\n {`${formatPriceProduct(\n convertCurrencyVnd(data?.price.toString() ?? ''),\n data.currencyUnit ?? '',\n data.unit ?? ''\n )} `}\n </span>\n </div>\n <div className=\"flex justify-center items-center w-5 h-5\">\n <BookmarkIcon size={20} color=\"#71717A\" />\n </div>\n </div>\n {/* Description text */}\n <p className=\"text-muted-foreground w-full font-normal text-[14px] leading-5 overflow-hidden line-clamp-2\">\n {data.description}\n </p>\n </div>\n {/* gallery: full width x 187.88px with 12px gap */}\n <div className=\"flex flex-row items-center w-full relative gap-3 pb-[56%]\">\n {/* Main Image */}\n <div\n className=\"absolute top-0 left-0 cursor-pointer w-full h-full bg-cover bg-center rounded-[5px] flex-1\"\n style={{\n backgroundImage: `url(${data.icon?.url || data.logo?.url})`,\n }}\n onClick={() => handleOnClick(data.virtualTourUrl)}\n />\n </div>\n\n {/* right: full width x 24px with 12px gap */}\n <div className=\"flex flex-row items-center w-full h-6 gap-3\">\n {/* content: 316px x 24px with 12px gap - contains the 4 buttons */}\n <div className=\"flex flex-row items-center h-6 gap-3\">\n {/* Info button: 66px x 24px */}\n {cardAction.map((item) => {\n if (!item.isShow) {\n return null;\n }\n return (\n <button\n key={item.key}\n className=\"flex flex-row items-center hover:opacity-80 transition-opacity w-fit h-6 px-[8px] py-[2px] gap-[4px] bg-secondary border rounded-[8px]\"\n onClick={() => handleActionClick(item.key)}\n >\n <div className=\"flex justify-center items-center w-5 h-5\">\n {item.icon}\n </div>\n <span className=\"font-medium text-[14px] leading-5 text-muted-foreground\">\n {item.label}\n </span>\n </button>\n );\n })}\n </div>\n </div>\n </div>\n </div>\n );\n }, [data, handleOnClick, handleActionClick]);\n\n return (\n <>\n {loading && loadingComponent}\n {error && errorComponent}\n {!!stringData && stringDataComponent}\n {!!data && productDataComponent}\n </>\n );\n};\n\nexport default React.memo(ProductDetail);\n"]}
@@ -0,0 +1,16 @@
1
+ import React from 'react';
2
+ import { ProductType } from 'types/product.type';
3
+ interface ProductDataResultType {
4
+ products: ProductType[];
5
+ scenarioUrl: string;
6
+ }
7
+ interface PropTypes {
8
+ content?: ProductDataResultType | string;
9
+ productCodesStr?: string;
10
+ tourCode?: string;
11
+ languageCode?: string;
12
+ apiUrl?: string;
13
+ }
14
+ declare const _default: React.NamedExoticComponent<PropTypes>;
15
+ export default _default;
16
+ //# sourceMappingURL=ProductList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProductList.d.ts","sourceRoot":"","sources":["../../../src/components/Chat/ProductList.tsx"],"names":[],"mappings":"AACA,OAAO,KAAmD,MAAM,OAAO,CAAC;AAKxE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAOjD,UAAU,qBAAqB;IAC7B,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,SAAS;IACjB,OAAO,CAAC,EAAE,qBAAqB,GAAG,MAAM,CAAC;IACzC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;;AAiWD,wBAAuC"}
@@ -0,0 +1,210 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { Marked, Renderer } from '@ts-stack/markdown';
3
+ import React, { useEffect, useRef, useState, useMemo } from 'react';
4
+ import { useChatData } from '../../hooks/useChatData';
5
+ import { getProducts } from '../../services/vt360.service';
6
+ import { BookmarkIcon } from './Icons';
7
+ import { convertCurrencyVnd, formatPriceProduct } from 'utils/currency';
8
+ const FORMATTER = new Intl.NumberFormat('vi-VN', {
9
+ style: 'currency',
10
+ currency: 'VND',
11
+ });
12
+ const ProductList = ({ content, productCodesStr, tourCode, languageCode = 'VN', apiUrl, }) => {
13
+ const botMessageElRef = useRef(null);
14
+ const [stringData, setStringData] = useState('');
15
+ const [data, setData] = useState(null);
16
+ const [loading, setLoading] = useState(false);
17
+ const [error, setError] = useState(null);
18
+ const { listeners } = useChatData();
19
+ const productCodes = useMemo(() => {
20
+ if (!productCodesStr)
21
+ return [];
22
+ return productCodesStr.split(',').map((code) => code.trim());
23
+ }, [productCodesStr]);
24
+ useEffect(() => {
25
+ if (!content) {
26
+ return;
27
+ }
28
+ if (typeof content === 'string' || content instanceof String) {
29
+ setStringData(content);
30
+ }
31
+ else {
32
+ setData(content);
33
+ }
34
+ }, [content]);
35
+ useEffect(() => {
36
+ const fetchProductsData = async () => {
37
+ if (!productCodes || !productCodes.length || !tourCode) {
38
+ return;
39
+ }
40
+ setLoading(true);
41
+ setError(null);
42
+ try {
43
+ const productsData = await getProducts(productCodes, tourCode, languageCode, apiUrl ? { api: apiUrl } : undefined);
44
+ setData(productsData);
45
+ }
46
+ catch (err) {
47
+ setError(err instanceof Error ? err.message : 'Failed to fetch products');
48
+ console.error('Error fetching products:', err);
49
+ }
50
+ finally {
51
+ setLoading(false);
52
+ }
53
+ };
54
+ fetchProductsData();
55
+ }, [productCodes, tourCode, languageCode, apiUrl]);
56
+ useEffect(() => {
57
+ const botMessageEl = botMessageElRef.current;
58
+ if (!stringData || !botMessageEl) {
59
+ return;
60
+ }
61
+ Marked.setOptions({
62
+ renderer: new Renderer(),
63
+ gfm: true,
64
+ tables: true,
65
+ breaks: false,
66
+ pedantic: false,
67
+ sanitize: false,
68
+ smartLists: true,
69
+ smartypants: false,
70
+ });
71
+ botMessageEl.innerHTML = Marked.parse(stringData);
72
+ botMessageEl.querySelectorAll('a').forEach((link) => {
73
+ if (listeners?.['ON_LINK_CLICK']) {
74
+ link['data-json'] = link.href;
75
+ link.href = 'javascript:void(0);';
76
+ link.target = '';
77
+ link.onclick = () => {
78
+ listeners['ON_LINK_CLICK'](link['data-json']);
79
+ };
80
+ }
81
+ else {
82
+ link.target = '_blank';
83
+ }
84
+ });
85
+ }, [stringData]);
86
+ const handleOnClick = (url) => {
87
+ if (listeners?.['ON_LINK_CLICK']) {
88
+ listeners['ON_LINK_CLICK'](url);
89
+ }
90
+ else {
91
+ window?.open(url, '_blank');
92
+ }
93
+ };
94
+ const handleActionClick = (action, productCode) => {
95
+ if (!listeners?.['CMD_CALLBACK']) {
96
+ return;
97
+ }
98
+ // template command tool {"tool":"show_product_image_gallery","toolInput":{"product_code":"ITEM27GETN2D2M94"},"toolOutput":"[{\"type\":\"text\",\"text\":\"{\\n \\\"action\\\": \\\"show_product_image_gallery\\\",\\n \\\"product_code\\\": \\\"ITEM27GETN2D2M94\\\",\\n \\\"status\\\": \\\"opening\\\",\\n \\\"message\\\": \\\"Opening image gallery for product ITEM27GETN2D2M94\\\"\\n}\"}]"}
99
+ let cmdTool = null;
100
+ switch (action) {
101
+ case 'PRODUCT_INFO':
102
+ cmdTool = {
103
+ tool: 'show_product_info',
104
+ output: JSON.stringify([
105
+ {
106
+ type: 'text',
107
+ text: JSON.stringify({
108
+ action: 'show_product_info',
109
+ product_code: productCode,
110
+ }),
111
+ },
112
+ ]),
113
+ };
114
+ break;
115
+ case 'PRODUCT_GALLERY':
116
+ cmdTool = {
117
+ tool: 'show_product_image_gallery',
118
+ output: JSON.stringify([
119
+ {
120
+ type: 'text',
121
+ text: JSON.stringify({
122
+ action: 'show_product_image_gallery',
123
+ product_code: productCode,
124
+ }),
125
+ },
126
+ ]),
127
+ };
128
+ break;
129
+ case 'PRODUCT_360':
130
+ cmdTool = {
131
+ tool: 'show_product_360_image',
132
+ output: JSON.stringify([
133
+ {
134
+ type: 'text',
135
+ text: JSON.stringify({
136
+ action: 'show_product_360_image',
137
+ product_code: productCode,
138
+ }),
139
+ },
140
+ ]),
141
+ };
142
+ break;
143
+ case 'PRODUCT_AR':
144
+ cmdTool = {
145
+ tool: 'show_product_AR',
146
+ output: JSON.stringify([
147
+ {
148
+ type: 'text',
149
+ text: JSON.stringify({
150
+ action: 'show_product_AR',
151
+ product_code: productCode,
152
+ }),
153
+ },
154
+ ]),
155
+ };
156
+ break;
157
+ default:
158
+ break;
159
+ }
160
+ if (cmdTool) {
161
+ listeners['CMD_CALLBACK'](cmdTool);
162
+ }
163
+ };
164
+ const loadingComponent = useMemo(() => (_jsx("div", { className: "py-4", children: _jsx("div", { className: "bg-white rounded-lg border border-gray-200 p-4", children: _jsxs("div", { className: "animate-pulse", children: [_jsx("div", { className: "h-4 bg-gray-200 rounded w-3/4 mb-4" }), _jsx("div", { className: "h-20 bg-gray-200 rounded mb-4" }), _jsx("div", { className: "h-4 bg-gray-200 rounded w-1/2" })] }) }) })), []);
165
+ const errorComponent = useMemo(() => (_jsx("div", { className: "py-4", children: _jsx("div", { className: "bg-red-50 border border-red-200 rounded-lg p-4 text-red-700", children: error }) })), [error]);
166
+ const stringDataComponent = useMemo(() => (_jsx("span", { className: "product-list", ref: botMessageElRef, style: {
167
+ borderRadius: '6px',
168
+ backgroundColor: 'rgb(255, 255, 255)',
169
+ color: 'rgb(48, 50, 53)',
170
+ fontSize: '16px',
171
+ } })), [stringData]);
172
+ const productListComponent = useMemo(() => {
173
+ if (!data || (!data?.products?.length && !data?.scenarioUrl))
174
+ return null;
175
+ return (_jsx("div", { className: "py-4", children: _jsx("div", { className: "bg-white rounded-lg overflow-hidden w-full", style: {
176
+ padding: '12px',
177
+ gap: '12px',
178
+ display: 'flex',
179
+ flexDirection: 'column',
180
+ justifyContent: 'center',
181
+ alignItems: 'flex-start',
182
+ }, children: _jsxs("div", { className: "flex flex-col w-full", style: {
183
+ gap: '12px',
184
+ }, children: [!!data?.products?.length &&
185
+ data.products.map((product, index) => (_jsxs("div", { className: "flex flex-row items-start w-full", style: {
186
+ gap: '12px',
187
+ minHeight: '82px',
188
+ }, children: [_jsx("div", { className: "flex-shrink-0 w-[80px] h-[80px] rounded-[5px] bg-cover bg-center ", style: {
189
+ backgroundImage: `url(${product.icon?.url})`,
190
+ } }), _jsxs("div", { className: "flex flex-col font-vietnam-pro flex-1 min-w-0", style: {
191
+ minHeight: '82px',
192
+ }, children: [_jsx("div", { className: "flex flex-row items-center w-full h-5 gap-1", children: _jsx("h3", { className: "text-card-foreground truncate mb-[4px] font-medium text-[14px] leading-[14px] underline cursor-pointer hover:opacity-80 flex-1 min-w-0 ", onClick: (e) => {
193
+ e.preventDefault();
194
+ handleActionClick('PRODUCT_INFO', product.code);
195
+ }, children: product.name }) }), _jsxs("div", { className: "flex flex-row gap-[4px] min-h-[28px] justify-between w-full", children: [_jsxs("div", { className: "min-w-0", children: [product.tourProductQuotations.length > 0 && (_jsx("span", { className: "text-card-foreground text-[16px] leading-[24px] mr-[4px] font-semibold", children: `${formatPriceProduct(convertCurrencyVnd(product.tourProductQuotations[0]?.price.toString() ??
196
+ ''), product.currencyUnit ?? '', product.unit ?? '')} ` })), _jsx("span", { className: `${product.tourProductQuotations.length > 0 ? 'line-through text-muted-foreground text-[14px] leading-[14px] font-medium' : 'text-card-foreground text-[16px] leading-[24px] font-semibold'}`, children: `${formatPriceProduct(convertCurrencyVnd(product?.price.toString() ?? ''), product.currencyUnit ?? '', product.unit ?? '')} ` })] }), _jsx("div", { className: "flex justify-center items-center", style: { width: '20px', height: '20px' }, children: _jsx(BookmarkIcon, { size: 20, color: "#71717A" }) })] }), _jsx("p", { className: "font-normal text-[14px] leading-[20px] text-muted-foreground overflow-hidden w-full text-ellipsis", style: {
197
+ minHeight: '20px',
198
+ display: '-webkit-box',
199
+ WebkitLineClamp: 2,
200
+ WebkitBoxOrient: 'vertical',
201
+ wordBreak: 'break-word',
202
+ }, children: product.description })] })] }, product.code || index))), !!data?.scenarioUrl && (_jsx("button", { className: "flex h-[40px] px-[16px] py-[8px] gap-[10px] font-medium leading-[24px] flex-row justify-center items-center hover:opacity-80 transition-opacity bg-secondary border rounded-md text-sm text-card-foreground w-full", onClick: (e) => {
203
+ e.preventDefault();
204
+ handleOnClick(data?.scenarioUrl);
205
+ }, children: "View all products" }))] }) }) }));
206
+ }, [data, handleActionClick, handleOnClick, FORMATTER]);
207
+ return (_jsxs(_Fragment, { children: [loading && loadingComponent, productListComponent] }));
208
+ };
209
+ export default React.memo(ProductList);
210
+ //# sourceMappingURL=ProductList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProductList.js","sourceRoot":"","sources":["../../../src/components/Chat/ProductList.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Marked, Renderer } from '@ts-stack/markdown';\nimport React, { FC, useEffect, useRef, useState, useMemo } from 'react';\nimport { useChatData } from '../../hooks/useChatData';\nimport { getProducts } from '../../services/vt360.service';\nimport { BookmarkIcon } from './Icons';\nimport { convertCurrencyVnd, formatPriceProduct } from 'utils/currency';\nimport { ProductType } from 'types/product.type';\n\nconst FORMATTER = new Intl.NumberFormat('vi-VN', {\n style: 'currency',\n currency: 'VND',\n});\n\ninterface ProductDataResultType {\n products: ProductType[];\n scenarioUrl: string;\n}\n\ninterface PropTypes {\n content?: ProductDataResultType | string;\n productCodesStr?: string;\n tourCode?: string;\n languageCode?: string;\n apiUrl?: string;\n}\n\nconst ProductList: FC<PropTypes> = ({\n content,\n productCodesStr,\n tourCode,\n languageCode = 'VN',\n apiUrl,\n}) => {\n const botMessageElRef = useRef<HTMLSpanElement | null>(null);\n const [stringData, setStringData] = useState<string>('');\n const [data, setData] = useState<ProductDataResultType | null>(null);\n const [loading, setLoading] = useState<boolean>(false);\n const [error, setError] = useState<string | null>(null);\n const { listeners } = useChatData();\n const productCodes = useMemo(() => {\n if (!productCodesStr) return [];\n return productCodesStr.split(',').map((code) => code.trim());\n }, [productCodesStr]);\n useEffect(() => {\n if (!content) {\n return;\n }\n if (typeof content === 'string' || content instanceof String) {\n setStringData(content as string);\n } else {\n setData(content as ProductDataResultType);\n }\n }, [content]);\n\n useEffect(() => {\n const fetchProductsData = async () => {\n if (!productCodes || !productCodes.length || !tourCode) {\n return;\n }\n\n setLoading(true);\n setError(null);\n\n try {\n const productsData = await getProducts(\n productCodes,\n tourCode,\n languageCode,\n apiUrl ? { api: apiUrl } : undefined\n );\n setData(productsData);\n } catch (err) {\n setError(\n err instanceof Error ? err.message : 'Failed to fetch products'\n );\n console.error('Error fetching products:', err);\n } finally {\n setLoading(false);\n }\n };\n\n fetchProductsData();\n }, [productCodes, tourCode, languageCode, apiUrl]);\n useEffect(() => {\n const botMessageEl = botMessageElRef.current;\n if (!stringData || !botMessageEl) {\n return;\n }\n\n Marked.setOptions({\n renderer: new Renderer(),\n gfm: true,\n tables: true,\n breaks: false,\n pedantic: false,\n sanitize: false,\n smartLists: true,\n smartypants: false,\n });\n botMessageEl.innerHTML = Marked.parse(stringData);\n\n botMessageEl.querySelectorAll('a').forEach((link) => {\n if (listeners?.['ON_LINK_CLICK']) {\n (link as any)['data-json'] = link.href;\n link.href = 'javascript:void(0);';\n link.target = '';\n link.onclick = () => {\n listeners['ON_LINK_CLICK']((link as any)['data-json']);\n };\n } else {\n link.target = '_blank';\n }\n });\n }, [stringData]);\n\n const handleOnClick = (url: string) => {\n if (listeners?.['ON_LINK_CLICK']) {\n listeners['ON_LINK_CLICK'](url);\n } else {\n window?.open(url, '_blank');\n }\n };\n\n const handleActionClick = (action: string, productCode: string) => {\n if (!listeners?.['CMD_CALLBACK']) {\n return;\n }\n // template command tool {\"tool\":\"show_product_image_gallery\",\"toolInput\":{\"product_code\":\"ITEM27GETN2D2M94\"},\"toolOutput\":\"[{\\\"type\\\":\\\"text\\\",\\\"text\\\":\\\"{\\\\n \\\\\\\"action\\\\\\\": \\\\\\\"show_product_image_gallery\\\\\\\",\\\\n \\\\\\\"product_code\\\\\\\": \\\\\\\"ITEM27GETN2D2M94\\\\\\\",\\\\n \\\\\\\"status\\\\\\\": \\\\\\\"opening\\\\\\\",\\\\n \\\\\\\"message\\\\\\\": \\\\\\\"Opening image gallery for product ITEM27GETN2D2M94\\\\\\\"\\\\n}\\\"}]\"}\n let cmdTool = null;\n switch (action) {\n case 'PRODUCT_INFO':\n cmdTool = {\n tool: 'show_product_info',\n output: JSON.stringify([\n {\n type: 'text',\n text: JSON.stringify({\n action: 'show_product_info',\n product_code: productCode,\n }),\n },\n ]),\n };\n break;\n case 'PRODUCT_GALLERY':\n cmdTool = {\n tool: 'show_product_image_gallery',\n output: JSON.stringify([\n {\n type: 'text',\n text: JSON.stringify({\n action: 'show_product_image_gallery',\n product_code: productCode,\n }),\n },\n ]),\n };\n break;\n case 'PRODUCT_360':\n cmdTool = {\n tool: 'show_product_360_image',\n output: JSON.stringify([\n {\n type: 'text',\n text: JSON.stringify({\n action: 'show_product_360_image',\n product_code: productCode,\n }),\n },\n ]),\n };\n break;\n case 'PRODUCT_AR':\n cmdTool = {\n tool: 'show_product_AR',\n output: JSON.stringify([\n {\n type: 'text',\n text: JSON.stringify({\n action: 'show_product_AR',\n product_code: productCode,\n }),\n },\n ]),\n };\n break;\n default:\n break;\n }\n if (cmdTool) {\n listeners['CMD_CALLBACK'](cmdTool);\n }\n };\n\n const loadingComponent = useMemo(\n () => (\n <div className=\"py-4\">\n <div className=\"bg-white rounded-lg border border-gray-200 p-4\">\n <div className=\"animate-pulse\">\n <div className=\"h-4 bg-gray-200 rounded w-3/4 mb-4\"></div>\n <div className=\"h-20 bg-gray-200 rounded mb-4\"></div>\n <div className=\"h-4 bg-gray-200 rounded w-1/2\"></div>\n </div>\n </div>\n </div>\n ),\n []\n );\n\n const errorComponent = useMemo(\n () => (\n <div className=\"py-4\">\n <div className=\"bg-red-50 border border-red-200 rounded-lg p-4 text-red-700\">\n {error}\n </div>\n </div>\n ),\n [error]\n );\n\n const stringDataComponent = useMemo(\n () => (\n <span\n className=\"product-list\"\n ref={botMessageElRef}\n style={{\n borderRadius: '6px',\n backgroundColor: 'rgb(255, 255, 255)',\n color: 'rgb(48, 50, 53)',\n fontSize: '16px',\n }}\n />\n ),\n [stringData]\n );\n\n const productListComponent = useMemo(() => {\n if (!data || (!data?.products?.length && !data?.scenarioUrl)) return null;\n return (\n <div className=\"py-4\">\n {/* item-card: 358px x 252px with 12px padding and 12px gap */}\n <div\n className=\"bg-white rounded-lg overflow-hidden w-full\"\n style={{\n padding: '12px',\n gap: '12px',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'flex-start',\n }}\n >\n {/* Message bubble: 334px x 228px with 12px gap */}\n <div\n className=\"flex flex-col w-full\"\n style={{\n gap: '12px',\n }}\n >\n {!!data?.products?.length &&\n data.products.map((product, index) => (\n <div\n key={product.code || index}\n className=\"flex flex-row items-start w-full\"\n style={{\n gap: '12px',\n minHeight: '82px',\n }}\n >\n {/* Image: 80px x 80px */}\n <div\n className=\"flex-shrink-0 w-[80px] h-[80px] rounded-[5px] bg-cover bg-center \"\n style={{\n backgroundImage: `url(${product.icon?.url})`,\n }}\n />\n\n {/* Content: 242px x 82px */}\n <div\n className=\"flex flex-col font-vietnam-pro flex-1 min-w-0\"\n style={{\n minHeight: '82px',\n }}\n >\n {/* Product Name */}\n <div className=\"flex flex-row items-center w-full h-5 gap-1\">\n <h3\n className=\"text-card-foreground truncate mb-[4px] font-medium text-[14px] leading-[14px] underline cursor-pointer hover:opacity-80 flex-1 min-w-0 \"\n onClick={(e) => {\n e.preventDefault();\n handleActionClick('PRODUCT_INFO', product.code);\n }}\n >\n {product.name}\n </h3>\n </div>\n\n {/* Price section */}\n <div className=\"flex flex-row gap-[4px] min-h-[28px] justify-between w-full\">\n <div className=\"min-w-0\">\n {/* Original Price (crossed out) */}\n {product.tourProductQuotations.length > 0 && (\n <span className=\"text-card-foreground text-[16px] leading-[24px] mr-[4px] font-semibold\">\n {`${formatPriceProduct(\n convertCurrencyVnd(\n product.tourProductQuotations[0]?.price.toString() ??\n ''\n ),\n product.currencyUnit ?? '',\n product.unit ?? ''\n )} `}\n </span>\n )}\n <span\n className={`${product.tourProductQuotations.length > 0 ? 'line-through text-muted-foreground text-[14px] leading-[14px] font-medium' : 'text-card-foreground text-[16px] leading-[24px] font-semibold'}`}\n >\n {`${formatPriceProduct(\n convertCurrencyVnd(product?.price.toString() ?? ''),\n product.currencyUnit ?? '',\n product.unit ?? ''\n )} `}\n </span>\n </div>\n {/* Bookmark Icon */}\n <div\n className=\"flex justify-center items-center\"\n style={{ width: '20px', height: '20px' }}\n >\n <BookmarkIcon size={20} color=\"#71717A\" />\n </div>\n </div>\n\n {/* Description */}\n <p\n className=\"font-normal text-[14px] leading-[20px] text-muted-foreground overflow-hidden w-full text-ellipsis\"\n style={{\n minHeight: '20px',\n display: '-webkit-box',\n WebkitLineClamp: 2,\n WebkitBoxOrient: 'vertical',\n wordBreak: 'break-word',\n }}\n >\n {product.description}\n </p>\n </div>\n </div>\n ))}\n\n {/* View all products button */}\n {!!data?.scenarioUrl && (\n <button\n className=\"flex h-[40px] px-[16px] py-[8px] gap-[10px] font-medium leading-[24px] flex-row justify-center items-center hover:opacity-80 transition-opacity bg-secondary border rounded-md text-sm text-card-foreground w-full\"\n onClick={(e) => {\n e.preventDefault();\n handleOnClick(data?.scenarioUrl);\n }}\n >\n View all products\n </button>\n )}\n </div>\n </div>\n </div>\n );\n }, [data, handleActionClick, handleOnClick, FORMATTER]);\n\n return (\n <>\n {loading && loadingComponent}\n {/* {error && errorComponent} */}\n {/* {!!stringData && stringDataComponent} */}\n {productListComponent}\n </>\n );\n};\n\nexport default React.memo(ProductList);\n"]}
@@ -0,0 +1,22 @@
1
+ import { FC } from 'react';
2
+ interface ScenarioType {
3
+ code: string;
4
+ name: string;
5
+ description?: string;
6
+ image?: {
7
+ file: {
8
+ url: string;
9
+ };
10
+ };
11
+ }
12
+ interface PropTypes {
13
+ content?: ScenarioType[];
14
+ scenarioCodesStr?: string;
15
+ tourCode?: string;
16
+ languageCode?: string;
17
+ apiUrl?: string;
18
+ playBtn?: boolean;
19
+ }
20
+ export declare const ScenariosList: FC<PropTypes>;
21
+ export {};
22
+ //# sourceMappingURL=ScenariosList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScenariosList.d.ts","sourceRoot":"","sources":["../../../src/components/Chat/ScenariosList.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAgC,MAAM,OAAO,CAAC;AAIzD,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE;QACN,IAAI,EAAE;YACJ,GAAG,EAAE,MAAM,CAAC;SACb,CAAC;KACH,CAAC;CACH;AAED,UAAU,SAAS;IACjB,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,eAAO,MAAM,aAAa,EAAE,EAAE,CAAC,SAAS,CAkMvC,CAAC"}