@servicetitan/titan-chat-ui 1.0.1

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 (244) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/assets/floating-chat-avatar.svg +16 -0
  3. package/dist/components/chat/__tests-cy__/chat-messages.test.d.ts +2 -0
  4. package/dist/components/chat/__tests-cy__/chat-messages.test.d.ts.map +1 -0
  5. package/dist/components/chat/__tests-cy__/chat-messages.test.js +28 -0
  6. package/dist/components/chat/__tests-cy__/chat-messages.test.js.map +1 -0
  7. package/dist/components/chat/__tests-cy__/chat.test.d.ts +2 -0
  8. package/dist/components/chat/__tests-cy__/chat.test.d.ts.map +1 -0
  9. package/dist/components/chat/__tests-cy__/chat.test.js +122 -0
  10. package/dist/components/chat/__tests-cy__/chat.test.js.map +1 -0
  11. package/dist/components/chat/chat-connecting.d.ts +7 -0
  12. package/dist/components/chat/chat-connecting.d.ts.map +1 -0
  13. package/dist/components/chat/chat-connecting.js +6 -0
  14. package/dist/components/chat/chat-connecting.js.map +1 -0
  15. package/dist/components/chat/chat-error.d.ts +3 -0
  16. package/dist/components/chat/chat-error.d.ts.map +1 -0
  17. package/dist/components/chat/chat-error.js +18 -0
  18. package/dist/components/chat/chat-error.js.map +1 -0
  19. package/dist/components/chat/chat-error.module.less +6 -0
  20. package/dist/components/chat/chat-input-file.d.ts +5 -0
  21. package/dist/components/chat/chat-input-file.d.ts.map +1 -0
  22. package/dist/components/chat/chat-input-file.js +43 -0
  23. package/dist/components/chat/chat-input-file.js.map +1 -0
  24. package/dist/components/chat/chat-input.d.ts +5 -0
  25. package/dist/components/chat/chat-input.d.ts.map +1 -0
  26. package/dist/components/chat/chat-input.js +94 -0
  27. package/dist/components/chat/chat-input.js.map +1 -0
  28. package/dist/components/chat/chat-input.module.less +11 -0
  29. package/dist/components/chat/chat-message-template-agent.d.ts +4 -0
  30. package/dist/components/chat/chat-message-template-agent.d.ts.map +1 -0
  31. package/dist/components/chat/chat-message-template-agent.js +14 -0
  32. package/dist/components/chat/chat-message-template-agent.js.map +1 -0
  33. package/dist/components/chat/chat-message-template-user.d.ts +4 -0
  34. package/dist/components/chat/chat-message-template-user.d.ts.map +1 -0
  35. package/dist/components/chat/chat-message-template-user.js +16 -0
  36. package/dist/components/chat/chat-message-template-user.js.map +1 -0
  37. package/dist/components/chat/chat-message-typing.d.ts +3 -0
  38. package/dist/components/chat/chat-message-typing.d.ts.map +1 -0
  39. package/dist/components/chat/chat-message-typing.js +15 -0
  40. package/dist/components/chat/chat-message-typing.js.map +1 -0
  41. package/dist/components/chat/chat-message.d.ts +12 -0
  42. package/dist/components/chat/chat-message.d.ts.map +1 -0
  43. package/dist/components/chat/chat-message.js +60 -0
  44. package/dist/components/chat/chat-message.js.map +1 -0
  45. package/dist/components/chat/chat-messages.d.ts +7 -0
  46. package/dist/components/chat/chat-messages.d.ts.map +1 -0
  47. package/dist/components/chat/chat-messages.js +12 -0
  48. package/dist/components/chat/chat-messages.js.map +1 -0
  49. package/dist/components/chat/chat-notifications.d.ts +5 -0
  50. package/dist/components/chat/chat-notifications.d.ts.map +1 -0
  51. package/dist/components/chat/chat-notifications.js +12 -0
  52. package/dist/components/chat/chat-notifications.js.map +1 -0
  53. package/dist/components/chat/chat-timer.d.ts +3 -0
  54. package/dist/components/chat/chat-timer.d.ts.map +1 -0
  55. package/dist/components/chat/chat-timer.js +18 -0
  56. package/dist/components/chat/chat-timer.js.map +1 -0
  57. package/dist/components/chat/chat-timer.module.less +5 -0
  58. package/dist/components/chat/chat.d.ts +8 -0
  59. package/dist/components/chat/chat.d.ts.map +1 -0
  60. package/dist/components/chat/chat.js +28 -0
  61. package/dist/components/chat/chat.js.map +1 -0
  62. package/dist/components/common/multiline-text.d.ts +8 -0
  63. package/dist/components/common/multiline-text.d.ts.map +1 -0
  64. package/dist/components/common/multiline-text.js +12 -0
  65. package/dist/components/common/multiline-text.js.map +1 -0
  66. package/dist/components/common/multiline-text.module.less +9 -0
  67. package/dist/components/message-content/message-content-file.d.ts +8 -0
  68. package/dist/components/message-content/message-content-file.d.ts.map +1 -0
  69. package/dist/components/message-content/message-content-file.js +11 -0
  70. package/dist/components/message-content/message-content-file.js.map +1 -0
  71. package/dist/components/message-content/message-content-text.d.ts +8 -0
  72. package/dist/components/message-content/message-content-text.d.ts.map +1 -0
  73. package/dist/components/message-content/message-content-text.js +7 -0
  74. package/dist/components/message-content/message-content-text.js.map +1 -0
  75. package/dist/components/messages/__tests-cy__/message-agent.test.d.ts +2 -0
  76. package/dist/components/messages/__tests-cy__/message-agent.test.d.ts.map +1 -0
  77. package/dist/components/messages/__tests-cy__/message-agent.test.js +89 -0
  78. package/dist/components/messages/__tests-cy__/message-agent.test.js.map +1 -0
  79. package/dist/components/messages/__tests-cy__/message-system.test.d.ts +2 -0
  80. package/dist/components/messages/__tests-cy__/message-system.test.d.ts.map +1 -0
  81. package/dist/components/messages/__tests-cy__/message-system.test.js +20 -0
  82. package/dist/components/messages/__tests-cy__/message-system.test.js.map +1 -0
  83. package/dist/components/messages/__tests-cy__/message-timeout.test.d.ts +2 -0
  84. package/dist/components/messages/__tests-cy__/message-timeout.test.d.ts.map +1 -0
  85. package/dist/components/messages/__tests-cy__/message-timeout.test.js +32 -0
  86. package/dist/components/messages/__tests-cy__/message-timeout.test.js.map +1 -0
  87. package/dist/components/messages/__tests-cy__/message-typing.test.d.ts +2 -0
  88. package/dist/components/messages/__tests-cy__/message-typing.test.d.ts.map +1 -0
  89. package/dist/components/messages/__tests-cy__/message-typing.test.js +49 -0
  90. package/dist/components/messages/__tests-cy__/message-typing.test.js.map +1 -0
  91. package/dist/components/messages/__tests-cy__/message-user.test.d.ts +2 -0
  92. package/dist/components/messages/__tests-cy__/message-user.test.d.ts.map +1 -0
  93. package/dist/components/messages/__tests-cy__/message-user.test.js +33 -0
  94. package/dist/components/messages/__tests-cy__/message-user.test.js.map +1 -0
  95. package/dist/components/messages/message-agent.d.ts +12 -0
  96. package/dist/components/messages/message-agent.d.ts.map +1 -0
  97. package/dist/components/messages/message-agent.js +18 -0
  98. package/dist/components/messages/message-agent.js.map +1 -0
  99. package/dist/components/messages/message-agent.module.less +59 -0
  100. package/dist/components/messages/message-avatar.d.ts +9 -0
  101. package/dist/components/messages/message-avatar.d.ts.map +1 -0
  102. package/dist/components/messages/message-avatar.js +14 -0
  103. package/dist/components/messages/message-avatar.js.map +1 -0
  104. package/dist/components/messages/message-avatar.module.less +26 -0
  105. package/dist/components/messages/message-footer.d.ts +7 -0
  106. package/dist/components/messages/message-footer.d.ts.map +1 -0
  107. package/dist/components/messages/message-footer.js +7 -0
  108. package/dist/components/messages/message-footer.js.map +1 -0
  109. package/dist/components/messages/message-system.d.ts +8 -0
  110. package/dist/components/messages/message-system.d.ts.map +1 -0
  111. package/dist/components/messages/message-system.js +12 -0
  112. package/dist/components/messages/message-system.js.map +1 -0
  113. package/dist/components/messages/message-system.module.less +26 -0
  114. package/dist/components/messages/message-timeout.d.ts +8 -0
  115. package/dist/components/messages/message-timeout.d.ts.map +1 -0
  116. package/dist/components/messages/message-timeout.js +16 -0
  117. package/dist/components/messages/message-timeout.js.map +1 -0
  118. package/dist/components/messages/message-typing.d.ts +8 -0
  119. package/dist/components/messages/message-typing.d.ts.map +1 -0
  120. package/dist/components/messages/message-typing.js +10 -0
  121. package/dist/components/messages/message-typing.js.map +1 -0
  122. package/dist/components/messages/message-typing.module.less +40 -0
  123. package/dist/components/messages/message-user.d.ts +9 -0
  124. package/dist/components/messages/message-user.d.ts.map +1 -0
  125. package/dist/components/messages/message-user.js +13 -0
  126. package/dist/components/messages/message-user.js.map +1 -0
  127. package/dist/components/messages/message-user.module.less +35 -0
  128. package/dist/components/messages/use-avatar-props.d.ts +4 -0
  129. package/dist/components/messages/use-avatar-props.d.ts.map +1 -0
  130. package/dist/components/messages/use-avatar-props.js +12 -0
  131. package/dist/components/messages/use-avatar-props.js.map +1 -0
  132. package/dist/index.d.ts +12 -0
  133. package/dist/index.d.ts.map +1 -0
  134. package/dist/index.js +12 -0
  135. package/dist/index.js.map +1 -0
  136. package/dist/models/chat-customizations.d.ts +29 -0
  137. package/dist/models/chat-customizations.d.ts.map +1 -0
  138. package/dist/models/chat-customizations.js +2 -0
  139. package/dist/models/chat-customizations.js.map +1 -0
  140. package/dist/models/component.d.ts +4 -0
  141. package/dist/models/component.d.ts.map +1 -0
  142. package/dist/models/component.js +2 -0
  143. package/dist/models/component.js.map +1 -0
  144. package/dist/models/index.d.ts +3 -0
  145. package/dist/models/index.d.ts.map +1 -0
  146. package/dist/models/index.js +3 -0
  147. package/dist/models/index.js.map +1 -0
  148. package/dist/models/support-chat.d.ts +66 -0
  149. package/dist/models/support-chat.d.ts.map +1 -0
  150. package/dist/models/support-chat.js +28 -0
  151. package/dist/models/support-chat.js.map +1 -0
  152. package/dist/stores/__mocks-cy__/chat-ui.store.mock.d.ts +65 -0
  153. package/dist/stores/__mocks-cy__/chat-ui.store.mock.d.ts.map +1 -0
  154. package/dist/stores/__mocks-cy__/chat-ui.store.mock.js +268 -0
  155. package/dist/stores/__mocks-cy__/chat-ui.store.mock.js.map +1 -0
  156. package/dist/stores/chat-input.store.d.ts +10 -0
  157. package/dist/stores/chat-input.store.d.ts.map +1 -0
  158. package/dist/stores/chat-input.store.js +46 -0
  159. package/dist/stores/chat-input.store.js.map +1 -0
  160. package/dist/stores/chat-ui-backend-echo.store.d.ts +13 -0
  161. package/dist/stores/chat-ui-backend-echo.store.d.ts.map +1 -0
  162. package/dist/stores/chat-ui-backend-echo.store.js +111 -0
  163. package/dist/stores/chat-ui-backend-echo.store.js.map +1 -0
  164. package/dist/stores/chat-ui-backend.store.d.ts +6 -0
  165. package/dist/stores/chat-ui-backend.store.d.ts.map +1 -0
  166. package/dist/stores/chat-ui-backend.store.js +3 -0
  167. package/dist/stores/chat-ui-backend.store.js.map +1 -0
  168. package/dist/stores/chat-ui.store.d.ts +142 -0
  169. package/dist/stores/chat-ui.store.d.ts.map +1 -0
  170. package/dist/stores/chat-ui.store.js +679 -0
  171. package/dist/stores/chat-ui.store.js.map +1 -0
  172. package/dist/stores/index.d.ts +3 -0
  173. package/dist/stores/index.d.ts.map +1 -0
  174. package/dist/stores/index.js +3 -0
  175. package/dist/stores/index.js.map +1 -0
  176. package/dist/utils/text-utils.d.ts +11 -0
  177. package/dist/utils/text-utils.d.ts.map +1 -0
  178. package/dist/utils/text-utils.js +82 -0
  179. package/dist/utils/text-utils.js.map +1 -0
  180. package/package.json +52 -0
  181. package/src/assets/floating-chat-avatar.svg +16 -0
  182. package/src/components/chat/__tests-cy__/chat-messages.test.tsx +36 -0
  183. package/src/components/chat/__tests-cy__/chat.test.tsx +156 -0
  184. package/src/components/chat/chat-connecting.tsx +23 -0
  185. package/src/components/chat/chat-error.module.less +6 -0
  186. package/src/components/chat/chat-error.module.less.d.ts +3 -0
  187. package/src/components/chat/chat-error.tsx +39 -0
  188. package/src/components/chat/chat-input-file.tsx +68 -0
  189. package/src/components/chat/chat-input.module.less +11 -0
  190. package/src/components/chat/chat-input.module.less.d.ts +3 -0
  191. package/src/components/chat/chat-input.tsx +143 -0
  192. package/src/components/chat/chat-message-template-agent.tsx +26 -0
  193. package/src/components/chat/chat-message-template-user.tsx +46 -0
  194. package/src/components/chat/chat-message-typing.tsx +19 -0
  195. package/src/components/chat/chat-message.tsx +78 -0
  196. package/src/components/chat/chat-messages.tsx +23 -0
  197. package/src/components/chat/chat-notifications.tsx +19 -0
  198. package/src/components/chat/chat-timer.module.less +5 -0
  199. package/src/components/chat/chat-timer.module.less.d.ts +3 -0
  200. package/src/components/chat/chat-timer.tsx +35 -0
  201. package/src/components/chat/chat.tsx +55 -0
  202. package/src/components/common/multiline-text.module.less +9 -0
  203. package/src/components/common/multiline-text.module.less.d.ts +3 -0
  204. package/src/components/common/multiline-text.tsx +30 -0
  205. package/src/components/message-content/message-content-file.tsx +27 -0
  206. package/src/components/message-content/message-content-text.tsx +12 -0
  207. package/src/components/messages/__tests-cy__/message-agent.test.tsx +155 -0
  208. package/src/components/messages/__tests-cy__/message-system.test.tsx +33 -0
  209. package/src/components/messages/__tests-cy__/message-timeout.test.tsx +38 -0
  210. package/src/components/messages/__tests-cy__/message-typing.test.tsx +58 -0
  211. package/src/components/messages/__tests-cy__/message-user.test.tsx +52 -0
  212. package/src/components/messages/message-agent.module.less +59 -0
  213. package/src/components/messages/message-agent.module.less.d.ts +9 -0
  214. package/src/components/messages/message-agent.tsx +62 -0
  215. package/src/components/messages/message-avatar.module.less +26 -0
  216. package/src/components/messages/message-avatar.module.less.d.ts +5 -0
  217. package/src/components/messages/message-avatar.tsx +33 -0
  218. package/src/components/messages/message-footer.tsx +17 -0
  219. package/src/components/messages/message-system.module.less +26 -0
  220. package/src/components/messages/message-system.module.less.d.ts +5 -0
  221. package/src/components/messages/message-system.tsx +35 -0
  222. package/src/components/messages/message-timeout.tsx +42 -0
  223. package/src/components/messages/message-typing.module.less +40 -0
  224. package/src/components/messages/message-typing.module.less.d.ts +5 -0
  225. package/src/components/messages/message-typing.tsx +25 -0
  226. package/src/components/messages/message-user.module.less +35 -0
  227. package/src/components/messages/message-user.module.less.d.ts +7 -0
  228. package/src/components/messages/message-user.tsx +49 -0
  229. package/src/components/messages/use-avatar-props.tsx +17 -0
  230. package/src/cypress.d.ts +10 -0
  231. package/src/index.ts +11 -0
  232. package/src/models/chat-customizations.ts +34 -0
  233. package/src/models/component.ts +3 -0
  234. package/src/models/index.ts +2 -0
  235. package/src/models/support-chat.ts +84 -0
  236. package/src/stores/__mocks-cy__/chat-ui.store.mock.ts +105 -0
  237. package/src/stores/chat-input.store.ts +25 -0
  238. package/src/stores/chat-ui-backend-echo.store.ts +94 -0
  239. package/src/stores/chat-ui-backend.store.ts +10 -0
  240. package/src/stores/chat-ui.store.ts +537 -0
  241. package/src/stores/index.ts +10 -0
  242. package/src/utils/text-utils.ts +93 -0
  243. package/tsconfig.json +15 -0
  244. package/tsconfig.tsbuildinfo +1 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,11 @@
1
+ # v0.0.2 (Mon May 12 2025)
2
+
3
+ #### ⚠️ Pushed to `master`
4
+
5
+ - SPA-5484: Fixed lint, test configs ([@AlexYarmolchuk](https://github.com/AlexYarmolchuk))
6
+ - SPA-5484: Updated package.json ([@AlexYarmolchuk](https://github.com/AlexYarmolchuk))
7
+ - SPA-5484: Move chatbot stores into the package ([@AlexYarmolchuk](https://github.com/AlexYarmolchuk))
8
+
9
+ #### Authors: 1
10
+
11
+ - Alexandr Yarmolchuk ([@AlexYarmolchuk](https://github.com/AlexYarmolchuk))
@@ -0,0 +1,16 @@
1
+ <svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M24 48C37.2548 48 48 37.2548 48 24C48 10.7452 37.2548 0 24 0C10.7452 0 0 10.7452 0 24C0 37.2548 10.7452 48 24 48Z" fill="url(#paint0_linear_11705_2385)"/>
3
+ <path d="M36 26.8983V33.0158C36 33.7621 35.6 34.4019 34.9333 34.7351C33.36 35.5081 30.36 37.0141 28.2667 38.0537C27.5067 38.4136 26.8667 38.7334 26.4533 38.96C26.4 38.9867 26.3333 39 26.28 39H26.2667C26.2667 39 26.2267 39 26.2 38.9867C26.0267 38.9467 25.9067 38.7868 25.9067 38.6135V31.4831C25.9067 31.2698 26.0533 31.0699 26.2667 31.0299H27.4667C30.3333 31.0299 32.6667 28.7109 32.6667 25.832V25.5655C32.6667 22.7 30.3333 20.3676 27.4667 20.3676H20.5333C17.6667 20.3676 15.3333 22.7 15.3333 25.5655V25.832C15.3333 28.7109 17.6667 31.0299 20.5333 31.0299H22.08C22.2933 31.0699 22.44 31.2698 22.44 31.4697V38.5868C22.44 38.7468 22.3467 38.88 22.2 38.9334C22.1867 38.9467 22.16 38.96 22.1333 38.96C22.0667 38.9867 21.9733 38.9733 21.8933 38.92L20.9333 38.4536L19.2933 37.6406L13.0667 34.5351C12.4133 34.2153 12 33.5489 12 32.8292V27.0182C12 25.6588 12.24 24.326 12.6667 23.0865C12.72 22.9399 12.7733 22.7533 12.8267 22.6067C12.8267 22.6067 12.8311 22.5978 12.84 22.58C14.1467 19.3147 16.8 16.769 20.12 15.6362C20.2133 15.6095 20.3067 15.5695 20.4 15.5562C21.32 15.2497 22.28 15.0897 23.28 15.0364C23.6133 15.0098 23.9333 15.0098 24.2667 15.0098C25.5067 15.0364 26.6933 15.223 27.7867 15.6095C27.8133 15.6228 27.84 15.6228 27.8667 15.6362C29.64 16.2226 31.2 17.1955 32.4933 18.4883C33.6533 19.6345 34.5733 21.034 35.2 22.58C35.7067 23.9128 36 25.3789 36 26.8983Z" fill="white"/>
4
+ <path d="M40 23.4735V30.6572C40 30.8838 39.8267 31.057 39.6 31.057H37.84V26.8854C37.84 25.366 37.5867 23.8866 37.1467 22.5272V20.6479C37.1467 19.7816 36.84 18.9819 36.48 18.1956C36.3867 17.9824 36.3333 17.7425 36.3333 17.4892C36.3333 16.5696 37.08 15.8232 38 15.8232C38.92 15.8232 39.6667 16.5696 39.6667 17.4892C39.6667 17.7425 39.6 17.9824 39.5067 18.1956C39.1333 18.9953 38.8133 19.8216 38.8133 20.7146V23.0603H39.6C39.8267 23.0603 40 23.2469 40 23.4735Z" fill="white"/>
5
+ <path d="M11.6667 17.4756C11.6667 17.7288 11.6133 17.9687 11.52 18.1819C11.16 18.9683 10.8533 19.768 10.8533 20.6343V22.7401C10.4133 24.0862 10.16 25.5256 10.16 27.005V31.0434H8.4C8.17333 31.0434 8 30.8701 8 30.6435V23.4598C8 23.2332 8.17333 23.0466 8.4 23.0466H9.18667V20.7009C9.18667 19.8079 8.86667 18.9816 8.49333 18.1819C8.4 17.9687 8.33333 17.7288 8.33333 17.4756C8.33333 16.5559 9.08 15.8096 10 15.8096C10.92 15.8096 11.6667 16.5559 11.6667 17.4756Z" fill="white"/>
6
+ <path d="M19.0666 27.2987C19.8987 27.2987 20.5732 26.6244 20.5732 25.7926C20.5732 24.9609 19.8987 24.2866 19.0666 24.2866C18.2345 24.2866 17.5599 24.9609 17.5599 25.7926C17.5599 26.6244 18.2345 27.2987 19.0666 27.2987Z" fill="white"/>
7
+ <path d="M24.0002 27.2987C24.8323 27.2987 25.5068 26.6244 25.5068 25.7926C25.5068 24.9609 24.8323 24.2866 24.0002 24.2866C23.168 24.2866 22.4935 24.9609 22.4935 25.7926C22.4935 26.6244 23.168 27.2987 24.0002 27.2987Z" fill="white"/>
8
+ <path d="M28.9334 27.2851C29.7582 27.2851 30.4268 26.6167 30.4268 25.7923C30.4268 24.9679 29.7582 24.2996 28.9334 24.2996C28.1087 24.2996 27.4401 24.9679 27.4401 25.7923C27.4401 26.6167 28.1087 27.2851 28.9334 27.2851Z" fill="white"/>
9
+ <path d="M27.7071 7.87964C27.8537 7.45315 27.5204 7 27.0671 7H24L22.6667 10.3333L21.3333 7H20.9337C20.4671 7 20.1471 7.43982 20.2937 7.87964L22.1204 13.3441C22.4671 13.2908 22.8137 13.2641 23.1737 13.2508C23.5604 13.2108 23.9204 13.2108 24.3071 13.2108C24.8404 13.2241 25.3604 13.2641 25.8804 13.3441L27.7071 7.87964Z" fill="white"/>
10
+ <defs>
11
+ <linearGradient id="paint0_linear_11705_2385" x1="24.0002" y1="0" x2="24.0002" y2="48" gradientUnits="userSpaceOnUse">
12
+ <stop offset="0.145833" stop-color="#8473E6"/>
13
+ <stop offset="0.942708" stop-color="#2671EE"/>
14
+ </linearGradient>
15
+ </defs>
16
+ </svg>
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=chat-messages.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-messages.test.d.ts","sourceRoot":"","sources":["../../../../src/components/chat/__tests-cy__/chat-messages.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,28 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Provider } from '@servicetitan/react-ioc';
3
+ import { mount } from 'cypress/react';
4
+ import { CHAT_UI_STORE_TOKEN } from '../../../stores';
5
+ import { ChatUiStoreMock } from '../../../stores/__mocks-cy__/chat-ui.store.mock';
6
+ import { ChatMessages } from '../chat-messages';
7
+ describe('[ChatMessages]', () => {
8
+ let storeMock;
9
+ beforeEach(() => {
10
+ cy.viewport(780, 600);
11
+ cy.clock(new Date('2023-10-01T10:10:00Z').getTime());
12
+ storeMock = new ChatUiStoreMock();
13
+ });
14
+ const render = () => {
15
+ return mount(_jsx(Provider, { singletons: [
16
+ {
17
+ provide: CHAT_UI_STORE_TOKEN,
18
+ useValue: storeMock,
19
+ },
20
+ ], children: _jsx(ChatMessages, {}) }));
21
+ };
22
+ it('should render default chat', () => {
23
+ render();
24
+ cy.getCy('titan-chat-messages').should('be.visible');
25
+ cy.getCy2('chat-message-normal').should('have.length', 2);
26
+ });
27
+ });
28
+ //# sourceMappingURL=chat-messages.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-messages.test.js","sourceRoot":"","sources":["../../../../src/components/chat/__tests-cy__/chat-messages.test.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,iDAAiD,CAAC;AAClF,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC5B,IAAI,SAA0B,CAAC;IAE/B,UAAU,CAAC,GAAG,EAAE;QACZ,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACtB,EAAE,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QACrD,SAAS,GAAG,IAAI,eAAe,EAAE,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,GAAG,EAAE;QAChB,OAAO,KAAK,CACR,KAAC,QAAQ,IACL,UAAU,EAAE;gBACR;oBACI,OAAO,EAAE,mBAAmB;oBAC5B,QAAQ,EAAE,SAAS;iBACtB;aACJ,YAED,KAAC,YAAY,KAAG,GACT,CACd,CAAC;IACN,CAAC,CAAC;IAEF,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QAClC,MAAM,EAAE,CAAC;QACT,EAAE,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACrD,EAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=chat.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.test.d.ts","sourceRoot":"","sources":["../../../../src/components/chat/__tests-cy__/chat.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,122 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Container, provide, useDependencies } from '@servicetitan/react-ioc';
3
+ import { mount } from 'cypress/react';
4
+ import { useEffect } from 'react';
5
+ import { ChatParticipantIcon } from '../../../models';
6
+ import { CHAT_UI_BACKEND_STORE_TOKEN, CHAT_UI_STORE_TOKEN, ChatUiStore, } from '../../../stores';
7
+ import { ChatUiBackendEchoStore } from '../../../stores/chat-ui-backend-echo.store';
8
+ import { Chat } from '../chat';
9
+ const initContainer = () => {
10
+ const rootContainer = new Container();
11
+ const container = new Container();
12
+ container.parent = rootContainer;
13
+ container.bind(CHAT_UI_STORE_TOKEN).to(ChatUiStore).inSingletonScope();
14
+ container
15
+ .bind(CHAT_UI_BACKEND_STORE_TOKEN)
16
+ .to(ChatUiBackendEchoStore)
17
+ .inSingletonScope();
18
+ return container;
19
+ };
20
+ describe('[Chat]', () => {
21
+ let container;
22
+ let chatUiStore;
23
+ let chatUiBackendStore;
24
+ beforeEach(() => {
25
+ container = initContainer();
26
+ chatUiStore = container.get(CHAT_UI_STORE_TOKEN);
27
+ chatUiBackendStore = container.get(CHAT_UI_BACKEND_STORE_TOKEN);
28
+ cy.viewport(780, 800);
29
+ cy.clock(Date.parse('2023-10-01T00:00:00Z'));
30
+ });
31
+ const render = () => {
32
+ const ChatWrapper = provide({
33
+ singletons: [
34
+ {
35
+ provide: CHAT_UI_STORE_TOKEN,
36
+ useValue: chatUiStore,
37
+ },
38
+ {
39
+ provide: CHAT_UI_BACKEND_STORE_TOKEN,
40
+ useValue: chatUiBackendStore,
41
+ },
42
+ ],
43
+ })(() => {
44
+ const [chatUiStore, chatUiBackendStore] = useDependencies(CHAT_UI_STORE_TOKEN, CHAT_UI_BACKEND_STORE_TOKEN);
45
+ useEffect(() => {
46
+ const init = async () => {
47
+ chatUiBackendStore.subscribe();
48
+ await chatUiStore.run({
49
+ agentName: 'EchoBot',
50
+ agentIcon: ChatParticipantIcon.Bot,
51
+ });
52
+ };
53
+ init().then(() => { });
54
+ return () => chatUiBackendStore.unsubscribe();
55
+ }, [chatUiStore, chatUiBackendStore]);
56
+ return _jsx(Chat, { className: "h-100vh max-h-100vh" });
57
+ });
58
+ cy.spy(chatUiStore, 'run').as('runSpy');
59
+ mount(_jsx(ChatWrapper, {}));
60
+ cy.getCy('titan-chat-connecting').should('be.visible');
61
+ cy.tick(1000);
62
+ return cy.wrap(new Promise(resolve => {
63
+ cy.get('@runSpy')
64
+ .should('have.been.calledOnce')
65
+ .then((invocation) => {
66
+ const initPromise = invocation.firstCall.returnValue;
67
+ initPromise.then(resolve);
68
+ });
69
+ }));
70
+ };
71
+ const ask = (message) => {
72
+ cy.getCy('titan-chat-input').type(`${message}{enter}`);
73
+ };
74
+ it('should render default chat', () => {
75
+ render().then(() => {
76
+ cy.getCy('titan-chat-messages').should('be.visible');
77
+ cy.getCy('chat-message-agent')
78
+ .should('have.length', 1)
79
+ .should('be.visible')
80
+ .should('contain.text', 'Hi there! I’m Titan, an AI chatbot powered by Titan Intelligence.');
81
+ cy.getCy('titan-chat-notifications').should('exist');
82
+ cy.getCy('titan-chat-send').should('be.visible').should('be.disabled');
83
+ cy.getCy('titan-chat-input').should('be.visible').should('not.be.disabled');
84
+ cy.getCy('titan-chat-input').type('Hello');
85
+ cy.getCy('titan-chat-send').click();
86
+ cy.getCy('chat-message-user')
87
+ .should('be.visible')
88
+ .should('have.length', 1)
89
+ .should('contain.text', 'Hello');
90
+ cy.getCy('chat-message-typing').should('be.visible');
91
+ cy.getCy('chat-message-agent').should('have.length', 1);
92
+ cy.tick(1000);
93
+ cy.getCy('chat-message-typing').should('not.exist');
94
+ cy.getCy('chat-message-agent').should('have.length', 2);
95
+ });
96
+ });
97
+ it('should render chat error message', () => {
98
+ render().then(() => {
99
+ chatUiStore.setTimer({ secondsTotal: 100, secondsLeft: 10 });
100
+ chatUiStore.setError('Custom error', 'error message', true);
101
+ cy.getCy('titan-chat-timer').should('not.exist');
102
+ cy.getCy('titan-chat-error').should('be.visible');
103
+ });
104
+ });
105
+ it.only('should handle send message error and retry', () => {
106
+ render().then(() => {
107
+ ask('[Error]Custom error message');
108
+ cy.tick(1000);
109
+ // Check error message
110
+ cy.getCy('titan-chat-message-user-error')
111
+ .should('be.visible')
112
+ .should('contain.text', 'Message not delivered. Retry');
113
+ cy.getCy('titan-chat-error')
114
+ .should('be.visible')
115
+ .should('contain.text', ['Failed to send message', 'Custom error message'].join(''));
116
+ // Retry message
117
+ cy.getCy('titan-chat-message-user-retry').should('be.visible').click();
118
+ cy.tick(1000);
119
+ });
120
+ });
121
+ });
122
+ //# sourceMappingURL=chat.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.test.js","sourceRoot":"","sources":["../../../../src/components/chat/__tests-cy__/chat.test.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { FC } from 'react';
2
+ interface IChatConnectingProps {
3
+ className?: string;
4
+ }
5
+ export declare const ChatConnecting: FC<IChatConnectingProps>;
6
+ export {};
7
+ //# sourceMappingURL=chat-connecting.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-connecting.d.ts","sourceRoot":"","sources":["../../../src/components/chat/chat-connecting.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAE3B,UAAU,oBAAoB;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,cAAc,EAAE,EAAE,CAAC,oBAAoB,CAenD,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { BodyText, Spinner, Stack } from '@servicetitan/design-system';
3
+ export const ChatConnecting = ({ className }) => {
4
+ return (_jsx(Stack, { direction: "column", spacing: "2", alignItems: "center", className: className, "data-cy": "titan-chat-connecting", children: _jsxs(Stack, { direction: "row", spacing: "2", alignItems: "center", children: [_jsx(Spinner, { size: "tiny" }), _jsx(BodyText, { className: "c-neutral-100", children: "Starting..." })] }) }));
5
+ };
6
+ //# sourceMappingURL=chat-connecting.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-connecting.js","sourceRoot":"","sources":["../../../src/components/chat/chat-connecting.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAOvE,MAAM,CAAC,MAAM,cAAc,GAA6B,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE;IACtE,OAAO,CACH,KAAC,KAAK,IACF,SAAS,EAAC,QAAQ,EAClB,OAAO,EAAC,GAAG,EACX,UAAU,EAAC,QAAQ,EACnB,SAAS,EAAE,SAAS,aACZ,uBAAuB,YAE/B,MAAC,KAAK,IAAC,SAAS,EAAC,KAAK,EAAC,OAAO,EAAC,GAAG,EAAC,UAAU,EAAC,QAAQ,aAClD,KAAC,OAAO,IAAC,IAAI,EAAC,MAAM,GAAG,EACvB,KAAC,QAAQ,IAAC,SAAS,EAAC,eAAe,4BAAuB,IACtD,GACJ,CACX,CAAC;AACN,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { FC } from 'react';
2
+ export declare const ChatError: FC;
3
+ //# sourceMappingURL=chat-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-error.d.ts","sourceRoot":"","sources":["../../../src/components/chat/chat-error.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,EAAE,EAAe,MAAM,OAAO,CAAC;AAIxC,eAAO,MAAM,SAAS,EAAE,EA+BtB,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Banner, BodyText, Button } from '@servicetitan/design-system';
3
+ import { useDependencies } from '@servicetitan/react-ioc';
4
+ import { observer } from 'mobx-react';
5
+ import { useCallback } from 'react';
6
+ import { CHAT_UI_STORE_TOKEN } from '../../stores';
7
+ import * as Styles from './chat-error.module.less';
8
+ export const ChatError = observer(() => {
9
+ const [chatUiStore] = useDependencies(CHAT_UI_STORE_TOKEN);
10
+ const handleReconnect = useCallback(async () => {
11
+ await chatUiStore.recover();
12
+ }, [chatUiStore]);
13
+ if (!chatUiStore.error) {
14
+ return null;
15
+ }
16
+ return (_jsxs(Banner, { status: "critical", title: chatUiStore.error.title, icon: true, className: Styles.banner, "data-cy": "titan-chat-error", children: [_jsx(BodyText, { el: "div", children: chatUiStore.error.message }), chatUiStore.error.isRecoverable && (_jsx(Button, { className: "m-t-2 bg-white-i", small: true, onClick: handleReconnect, "data-cy": "titan-chat-error-recover", children: "Reconnect" }))] }));
17
+ });
18
+ //# sourceMappingURL=chat-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-error.js","sourceRoot":"","sources":["../../../src/components/chat/chat-error.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAM,WAAW,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,MAAM,MAAM,0BAA0B,CAAC;AAEnD,MAAM,CAAC,MAAM,SAAS,GAAO,QAAQ,CAAC,GAAG,EAAE;IACvC,MAAM,CAAC,WAAW,CAAC,GAAG,eAAe,CAAC,mBAAmB,CAAC,CAAC;IAE3D,MAAM,eAAe,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAC3C,MAAM,WAAW,CAAC,OAAO,EAAE,CAAC;IAChC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAElB,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,CACH,MAAC,MAAM,IACH,MAAM,EAAC,UAAU,EACjB,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,KAAK,EAC9B,IAAI,QACJ,SAAS,EAAE,MAAM,CAAC,MAAM,aAChB,kBAAkB,aAE1B,KAAC,QAAQ,IAAC,EAAE,EAAC,KAAK,YAAE,WAAW,CAAC,KAAK,CAAC,OAAO,GAAY,EACxD,WAAW,CAAC,KAAK,CAAC,aAAa,IAAI,CAChC,KAAC,MAAM,IACH,SAAS,EAAC,kBAAkB,EAC5B,KAAK,QACL,OAAO,EAAE,eAAe,aAChB,0BAA0B,0BAG7B,CACZ,IACI,CACZ,CAAC;AACN,CAAC,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ @import '@servicetitan/tokens/dist/tokens.less';
2
+
3
+ .banner {
4
+ border: @spacing-0 !important;
5
+ margin: @spacing-0 @spacing-3;
6
+ }
@@ -0,0 +1,5 @@
1
+ import { FC } from 'react';
2
+ export declare const ChatInputFile: FC<{
3
+ className?: string;
4
+ }>;
5
+ //# sourceMappingURL=chat-input-file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-input-file.d.ts","sourceRoot":"","sources":["../../../src/components/chat/chat-input-file.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,EAAE,EAAoC,MAAM,OAAO,CAAC;AAG7D,eAAO,MAAM,aAAa,EAAE,EAAE,CAAC;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CA4DnD,CAAC"}
@@ -0,0 +1,43 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Eyebrow, FilePicker, Stack } from '@servicetitan/design-system';
3
+ import { useDependencies } from '@servicetitan/react-ioc';
4
+ import { observer } from 'mobx-react';
5
+ import { useCallback, useEffect, useState } from 'react';
6
+ import { CHAT_UI_STORE_TOKEN } from '../../stores';
7
+ export const ChatInputFile = observer(({ className }) => {
8
+ const [chatUiStore] = useDependencies(CHAT_UI_STORE_TOKEN);
9
+ const [fileDescriptor, setFileDescriptor] = useState(undefined);
10
+ const handleSelected = useCallback((newAttachments) => {
11
+ const fileDescriptor = {
12
+ file: newAttachments[0],
13
+ displayName: newAttachments[0].name,
14
+ };
15
+ setFileDescriptor(fileDescriptor);
16
+ chatUiStore.setFile(fileDescriptor);
17
+ }, [chatUiStore]);
18
+ const handleReplace = useCallback(({ newFile }) => {
19
+ const fileDescriptor = {
20
+ file: newFile,
21
+ displayName: newFile.name,
22
+ };
23
+ setFileDescriptor(fileDescriptor);
24
+ chatUiStore.setFile(fileDescriptor);
25
+ }, [chatUiStore]);
26
+ const handleDelete = useCallback(() => {
27
+ setFileDescriptor(undefined);
28
+ chatUiStore.setFile(undefined);
29
+ }, [chatUiStore]);
30
+ useEffect(() => {
31
+ if (!chatUiStore.file) {
32
+ setFileDescriptor(undefined);
33
+ }
34
+ }, [chatUiStore.file]);
35
+ if (!chatUiStore.isFilePickerEnabled) {
36
+ return null;
37
+ }
38
+ return (_jsxs(Stack, { className: className, spacing: "3", direction: "column", children: [_jsx(Eyebrow, { children: "Upload file" }), _jsx(FilePicker, { name: "attachments", buttonProps: {
39
+ color: 'primary',
40
+ fill: 'outline',
41
+ }, typesNote: "e.g. Screenshot of issue", value: fileDescriptor, onSelected: handleSelected, onDelete: handleDelete, onReplace: handleReplace, "data-cy": "titan-chat-upload-file" })] }));
42
+ });
43
+ //# sourceMappingURL=chat-input-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-input-file.js","sourceRoot":"","sources":["../../../src/components/chat/chat-input-file.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAEzE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAM,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAEnD,MAAM,CAAC,MAAM,aAAa,GAA+B,QAAQ,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE;IAChF,MAAM,CAAC,WAAW,CAAC,GAAG,eAAe,CAAC,mBAAmB,CAAC,CAAC;IAC3D,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAA6B,SAAS,CAAC,CAAC;IAE5F,MAAM,cAAc,GAAG,WAAW,CAC9B,CAAC,cAAwB,EAAE,EAAE;QACzB,MAAM,cAAc,GAAmB;YACnC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC;YACvB,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI;SACtC,CAAC;QACF,iBAAiB,CAAC,cAAc,CAAC,CAAC;QAClC,WAAW,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IACxC,CAAC,EACD,CAAC,WAAW,CAAC,CAChB,CAAC;IAEF,MAAM,aAAa,GAAG,WAAW,CAC7B,CAAC,EAAE,OAAO,EAA2C,EAAE,EAAE;QACrD,MAAM,cAAc,GAAmB;YACnC,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,OAAO,CAAC,IAAI;SAC5B,CAAC;QACF,iBAAiB,CAAC,cAAc,CAAC,CAAC;QAClC,WAAW,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IACxC,CAAC,EACD,CAAC,WAAW,CAAC,CAChB,CAAC;IAEF,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE;QAClC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAC7B,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAElB,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;YACpB,iBAAiB,CAAC,SAAS,CAAC,CAAC;QACjC,CAAC;IACL,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;IAEvB,IAAI,CAAC,WAAW,CAAC,mBAAmB,EAAE,CAAC;QACnC,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,CACH,MAAC,KAAK,IAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAC,GAAG,EAAC,SAAS,EAAC,QAAQ,aACvD,KAAC,OAAO,8BAAsB,EAC9B,KAAC,UAAU,IACP,IAAI,EAAC,aAAa,EAClB,WAAW,EAAE;oBACT,KAAK,EAAE,SAAS;oBAChB,IAAI,EAAE,SAAS;iBAClB,EACD,SAAS,EAAC,0BAA0B,EACpC,KAAK,EAAE,cAAc,EACrB,UAAU,EAAE,cAAc,EAC1B,QAAQ,EAAE,YAAY,EACtB,SAAS,EAAE,aAAa,aAChB,wBAAwB,GAClC,IACE,CACX,CAAC;AACN,CAAC,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { FC } from 'react';
2
+ export declare const ChatInput: FC<{
3
+ className?: string;
4
+ }>;
5
+ //# sourceMappingURL=chat-input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-input.d.ts","sourceRoot":"","sources":["../../../src/components/chat/chat-input.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,EAAE,EAA4C,MAAM,OAAO,CAAC;AAOrE,eAAO,MAAM,SAAS,EAAE,EAAE,CAAC;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAmIhD,CAAC"}
@@ -0,0 +1,94 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Button, Form, FormTextArea, Stack } from '@servicetitan/design-system';
3
+ import { provide, useDependencies } from '@servicetitan/react-ioc';
4
+ import classNames from 'classnames';
5
+ import { observer } from 'mobx-react';
6
+ import { useCallback, useEffect, useRef, useState } from 'react';
7
+ import { CHAT_UI_STORE_TOKEN } from '../../stores';
8
+ import { ChatInputStore } from '../../stores/chat-input.store';
9
+ import * as Styles from './chat-input.module.less';
10
+ const TIMEOUT_COOLDOWN_MS = 3000;
11
+ export const ChatInput = provide({
12
+ singletons: [ChatInputStore],
13
+ })(observer(({ className }) => {
14
+ const typingTimeoutRef = useRef(undefined);
15
+ const [isSending, setIsSending] = useState(false);
16
+ const textareaRef = useRef(null);
17
+ const [chatUiStore, supportChatInputStore] = useDependencies(CHAT_UI_STORE_TOKEN, ChatInputStore);
18
+ const handleSendMessage = useCallback(async () => {
19
+ const validateResult = await supportChatInputStore.formState.validate();
20
+ if (validateResult.hasError) {
21
+ return;
22
+ }
23
+ const text = supportChatInputStore.formState.$.message.value;
24
+ if (!text.trim() && !chatUiStore.file) {
25
+ return;
26
+ }
27
+ supportChatInputStore.formState.$.message.onChange('');
28
+ setIsSending(true);
29
+ try {
30
+ await chatUiStore.sendMessageText(text);
31
+ }
32
+ finally {
33
+ setIsSending(false);
34
+ }
35
+ setTimeout(() => {
36
+ var _a;
37
+ (_a = textareaRef.current) === null || _a === void 0 ? void 0 : _a.focus();
38
+ }, 0);
39
+ }, [chatUiStore, supportChatInputStore]);
40
+ const clearTimer = useCallback(() => {
41
+ var _a;
42
+ clearTimeout((_a = typingTimeoutRef.current) !== null && _a !== void 0 ? _a : 0);
43
+ typingTimeoutRef.current = undefined;
44
+ }, []);
45
+ // Send typing status = false
46
+ const sendTypingStatusStop = useCallback(() => {
47
+ const isTyping = Boolean(typingTimeoutRef.current);
48
+ if (isTyping) {
49
+ clearTimer();
50
+ chatUiStore.chasitorTyping(false);
51
+ }
52
+ }, [chatUiStore, clearTimer]);
53
+ // Send typing status = true and start the typing countdown. After the countdown, send typing status = false
54
+ const sendTypingStatusStart = useCallback(() => {
55
+ if (!typingTimeoutRef.current) {
56
+ chatUiStore.chasitorTyping(true);
57
+ }
58
+ clearTimeout(typingTimeoutRef.current);
59
+ typingTimeoutRef.current = setTimeout(sendTypingStatusStop, TIMEOUT_COOLDOWN_MS);
60
+ }, [sendTypingStatusStop, chatUiStore]);
61
+ const setUserIsTyping = useCallback((typing) => {
62
+ if (typing) {
63
+ sendTypingStatusStart();
64
+ }
65
+ else {
66
+ sendTypingStatusStop();
67
+ }
68
+ }, [sendTypingStatusStart, sendTypingStatusStop]);
69
+ const handleTextKeyPress = useCallback((e) => {
70
+ if (e.key === 'Enter' && !e.shiftKey) {
71
+ e.preventDefault();
72
+ clearTimer();
73
+ handleSendMessage().then(() => { });
74
+ return;
75
+ }
76
+ setUserIsTyping(true);
77
+ }, [setUserIsTyping, handleSendMessage, clearTimer]);
78
+ useEffect(() => {
79
+ if (textareaRef.current) {
80
+ textareaRef.current.focus();
81
+ }
82
+ }, []);
83
+ return (_jsx(Form, { className: className, onSubmit: handleSendMessage, children: _jsxs(Stack, { direction: "row", spacing: "2", children: [_jsx(FormTextArea, { ref: textareaRef, name: "question", placeholder: "Type your message", rows: 1, maxRows: 2, autoHeight: true, onKeyPress: handleTextKeyPress, value: supportChatInputStore.formState.$.message.value, error: supportChatInputStore.formState.$.message.error, onChange: supportChatInputStore.formState.$.message.onChangeHandler, onFocus: () => {
84
+ setTimeout(() => {
85
+ chatUiStore.triggerScroll();
86
+ }, 0);
87
+ }, onBlur: () => {
88
+ supportChatInputStore.formState.$.message.enableAutoValidationAndValidate();
89
+ }, className: classNames('flex-grow-1', Styles.formTextarea), disabled: !chatUiStore.isStarted || isSending, "data-cy": "titan-chat-input" }), _jsx(Button, { className: "align-self-baseline", iconName: "send", "data-pendo": "titan-chat-send", "data-cy": "titan-chat-send", type: "submit", primary: true, "aria-label": "submit", disabled: !chatUiStore.isStarted ||
90
+ isSending ||
91
+ supportChatInputStore.formState.hasError ||
92
+ supportChatInputStore.isEmpty })] }) }));
93
+ }));
94
+ //# sourceMappingURL=chat-input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-input.js","sourceRoot":"","sources":["../../../src/components/chat/chat-input.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ @import '@servicetitan/tokens/dist/tokens.less';
2
+
3
+ .form-textarea {
4
+ margin-bottom: @spacing-0 !important;
5
+
6
+ textarea {
7
+ resize: none !important;
8
+ min-height: 40px;
9
+ line-height: 24px;
10
+ }
11
+ }
@@ -0,0 +1,4 @@
1
+ import { FC, PropsWithChildren } from 'react';
2
+ import { IChatMessageProps } from '../../models';
3
+ export declare const ChatMessageTemplateAgent: FC<PropsWithChildren<IChatMessageProps>>;
4
+ //# sourceMappingURL=chat-message-template-agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-message-template-agent.d.ts","sourceRoot":"","sources":["../../../src/components/chat/chat-message-template-agent.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,iBAAiB,EAAW,MAAM,OAAO,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAMjD,eAAO,MAAM,wBAAwB,EAAE,EAAE,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAiB7E,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { observer } from 'mobx-react';
3
+ import { useMemo } from 'react';
4
+ import { getFirstName } from '../../utils/text-utils';
5
+ import { MessageAgent } from '../messages/message-agent';
6
+ import { MessageFooter } from '../messages/message-footer';
7
+ import { useAvatarProps } from '../messages/use-avatar-props';
8
+ export const ChatMessageTemplateAgent = observer(({ children, message }) => {
9
+ const { participant: { icon, name }, } = message;
10
+ const firstName = useMemo(() => getFirstName(name), [name]);
11
+ const avatarProps = useAvatarProps(name, icon);
12
+ return (_jsx(MessageAgent, { avatar: avatarProps, messageFooter: _jsx(MessageFooter, { name: firstName, timestamp: message.timestamp }), children: children }));
13
+ });
14
+ //# sourceMappingURL=chat-message-template-agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-message-template-agent.js","sourceRoot":"","sources":["../../../src/components/chat/chat-message-template-agent.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAyB,OAAO,EAAE,MAAM,OAAO,CAAC;AAEvD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D,MAAM,CAAC,MAAM,wBAAwB,GAA6C,QAAQ,CACtF,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;IACtB,MAAM,EACF,WAAW,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,GAC9B,GAAG,OAAO,CAAC;IACZ,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5D,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAE/C,OAAO,CACH,KAAC,YAAY,IACT,MAAM,EAAE,WAAW,EACnB,aAAa,EAAE,KAAC,aAAa,IAAC,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,GAAI,YAE9E,QAAQ,GACE,CAClB,CAAC;AACN,CAAC,CACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { FC, PropsWithChildren } from 'react';
2
+ import { IChatMessageProps } from '../../models';
3
+ export declare const ChatMessageTemplateUser: FC<PropsWithChildren<IChatMessageProps>>;
4
+ //# sourceMappingURL=chat-message-template-user.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-message-template-user.d.ts","sourceRoot":"","sources":["../../../src/components/chat/chat-message-template-user.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,EAAE,EAAE,iBAAiB,EAAe,MAAM,OAAO,CAAC;AAC3D,OAAO,EAAoB,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAKnE,eAAO,MAAM,uBAAuB,EAAE,EAAE,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAoC5E,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Button, Eyebrow } from '@servicetitan/design-system';
3
+ import { useDependencies } from '@servicetitan/react-ioc';
4
+ import { observer } from 'mobx-react';
5
+ import { useCallback } from 'react';
6
+ import { ChatMessageState } from '../../models';
7
+ import { CHAT_UI_STORE_TOKEN } from '../../stores';
8
+ import { MessageFooter } from '../messages/message-footer';
9
+ import { MessageUser } from '../messages/message-user';
10
+ export const ChatMessageTemplateUser = observer(({ children, message }) => {
11
+ const [chatUiStore] = useDependencies(CHAT_UI_STORE_TOKEN);
12
+ const isError = message.state === ChatMessageState.Failed;
13
+ const handleRetry = useCallback(() => chatUiStore.sendMessageRetry(message), [chatUiStore, message]);
14
+ return (_jsx(MessageUser, { isError: isError, messageFooter: isError ? (_jsxs(Eyebrow, { className: "c-red-600", "data-cy": "titan-chat-message-user-error", children: ["Message not delivered. Retry", _jsx(Button, { iconName: "refresh", fill: "subtle", size: "xsmall", negative: true, "aria-label": "Retry send message", onClick: handleRetry, "data-cy": "titan-chat-message-user-retry" })] })) : (_jsx(MessageFooter, { timestamp: message.timestamp })), children: children }));
15
+ });
16
+ //# sourceMappingURL=chat-message-template-user.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-message-template-user.js","sourceRoot":"","sources":["../../../src/components/chat/chat-message-template-user.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAyB,WAAW,EAAE,MAAM,OAAO,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAqB,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,MAAM,CAAC,MAAM,uBAAuB,GAA6C,QAAQ,CACrF,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;IACtB,MAAM,CAAC,WAAW,CAAC,GAAG,eAAe,CAAC,mBAAmB,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,KAAK,gBAAgB,CAAC,MAAM,CAAC;IAE1D,MAAM,WAAW,GAAG,WAAW,CAC3B,GAAG,EAAE,CAAC,WAAW,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAC3C,CAAC,WAAW,EAAE,OAAO,CAAC,CACzB,CAAC;IAEF,OAAO,CACH,KAAC,WAAW,IACR,OAAO,EAAE,OAAO,EAChB,aAAa,EACT,OAAO,CAAC,CAAC,CAAC,CACN,MAAC,OAAO,IAAC,SAAS,EAAC,WAAW,aAAS,+BAA+B,6CAElE,KAAC,MAAM,IACH,QAAQ,EAAC,SAAS,EAClB,IAAI,EAAC,QAAQ,EACb,IAAI,EAAC,QAAQ,EACb,QAAQ,sBACG,oBAAoB,EAC/B,OAAO,EAAE,WAAW,aACZ,+BAA+B,GACzC,IACI,CACb,CAAC,CAAC,CAAC,CACA,KAAC,aAAa,IAAC,SAAS,EAAE,OAAO,CAAC,SAAS,GAAI,CAClD,YAGJ,QAAQ,GACC,CACjB,CAAC;AACN,CAAC,CACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { FC } from 'react';
2
+ export declare const ChatMessageTyping: FC;
3
+ //# sourceMappingURL=chat-message-typing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-message-typing.d.ts","sourceRoot":"","sources":["../../../src/components/chat/chat-message-typing.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAK3B,eAAO,MAAM,iBAAiB,EAAE,EAW9B,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useDependencies } from '@servicetitan/react-ioc';
3
+ import { observer } from 'mobx-react';
4
+ import { CHAT_UI_STORE_TOKEN } from '../../stores';
5
+ import { MessageTyping } from '../messages/message-typing';
6
+ import { useAvatarProps } from '../messages/use-avatar-props';
7
+ export const ChatMessageTyping = observer(() => {
8
+ var _a, _b;
9
+ const [chatUiStore] = useDependencies(CHAT_UI_STORE_TOKEN);
10
+ const [{ agent: { icon, name }, },] = useDependencies(CHAT_UI_STORE_TOKEN);
11
+ const avatar = useAvatarProps(name, icon);
12
+ const Component = (_b = (_a = chatUiStore.customizations.messageTyping) === null || _a === void 0 ? void 0 : _a.component) !== null && _b !== void 0 ? _b : MessageTyping;
13
+ return _jsx(Component, { avatar: avatar });
14
+ });
15
+ //# sourceMappingURL=chat-message-typing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-message-typing.js","sourceRoot":"","sources":["../../../src/components/chat/chat-message-typing.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D,MAAM,CAAC,MAAM,iBAAiB,GAAO,QAAQ,CAAC,GAAG,EAAE;;IAC/C,MAAM,CAAC,WAAW,CAAC,GAAG,eAAe,CAAC,mBAAmB,CAAC,CAAC;IAC3D,MAAM,CACF,EACI,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,GACxB,EACJ,GAAG,eAAe,CAAC,mBAAmB,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,MAAA,MAAA,WAAW,CAAC,cAAc,CAAC,aAAa,0CAAE,SAAS,mCAAI,aAAa,CAAC;IAEvF,OAAO,KAAC,SAAS,IAAC,MAAM,EAAE,MAAM,GAAI,CAAC;AACzC,CAAC,CAAC,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { FC } from 'react';
2
+ import { ChatMessageModelBase } from '../../models/support-chat';
3
+ interface IChatMessageProps {
4
+ message: ChatMessageModelBase;
5
+ }
6
+ /**
7
+ * ChatMessage component provides a default way to render chat messages in the chat UI and contains only most generic
8
+ * components and templates/customizations rendering
9
+ */
10
+ export declare const ChatMessage: FC<IChatMessageProps>;
11
+ export {};
12
+ //# sourceMappingURL=chat-message.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-message.d.ts","sourceRoot":"","sources":["../../../src/components/chat/chat-message.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,EAAE,EAAgC,MAAM,OAAO,CAAC;AACzD,OAAO,EACH,oBAAoB,EAIvB,MAAM,2BAA2B,CAAC;AAOnC,UAAU,iBAAiB;IACvB,OAAO,EAAE,oBAAoB,CAAC;CACjC;AAED;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,EAAE,CAAC,iBAAiB,CAqD5C,CAAC"}